@@ -9,6 +9,7 @@ var httpTransport = require('js-git/net/transport-http')(request);
9
9
var fetchPackProtocol = require ( 'js-git/net/git-fetch-pack' ) ;
10
10
var modes = require ( 'js-git/lib/modes' ) ;
11
11
var archiver = require ( 'archiver' ) ;
12
+ var del = require ( 'del' ) ;
12
13
var mkdirp = require ( 'mkdirp' ) ;
13
14
var ncp = require ( 'ncp' ) . ncp ;
14
15
var utils = require ( '../lib/utils' ) ;
@@ -206,8 +207,18 @@ module.exports = {
206
207
return self . readRef ( repo , ref , callback ) ;
207
208
} ) ;
208
209
} ,
210
+ writeHead : function ( repo , ref , callback ) {
211
+ var headPath = path . join ( repo . rootPath , 'HEAD' ) ;
212
+ if ( ! this . isHash ( ref ) ) {
213
+ ref = 'ref: ' + ref ;
214
+ }
215
+ fs . writeFile ( headPath , ref , callback ) ;
216
+ } ,
217
+ isHash : function ( str ) {
218
+ return str . match ( / ^ [ 0 - 9 a - f ] { 40 } $ / i) ;
219
+ } ,
209
220
readRef : function ( repo , ref , callback ) {
210
- if ( ref . match ( / ^ [ 0 - 9 a - f ] { 40 } $ / i ) ) {
221
+ if ( this . isHash ( ref ) ) {
211
222
return callback ( null , ref ) ;
212
223
}
213
224
@@ -268,18 +279,33 @@ module.exports = {
268
279
269
280
function writeTree ( err , tree ) {
270
281
if ( err ) return callback ( err ) ;
271
- if ( ! tree ) return callback ( ) ;
282
+ if ( ! tree ) {
283
+ if ( ref ) {
284
+ return self . writeHead ( repo , ref , callback ) ;
285
+ }
286
+ return callback ( ) ;
287
+ }
272
288
273
289
var repoPath = repo . rootPath ;
274
290
if ( path . basename ( repoPath ) == '.git' ) {
275
291
repoPath = path . dirname ( repoPath ) ;
276
292
}
277
293
278
- tree . read ( onEntry ) ;
294
+ del ( [
295
+ path . join ( repoPath , '*' ) ,
296
+ '!' + path . join ( repoPath , '.git' )
297
+ ] , function ( err , paths ) {
298
+ tree . read ( onEntry ) ;
299
+ } ) ;
279
300
280
301
function onEntry ( err , entry ) {
281
302
if ( err ) return callback ( err ) ;
282
- if ( ! entry ) return callback ( ) ;
303
+ if ( ! entry ) {
304
+ if ( ref ) {
305
+ return self . writeHead ( repo , ref , callback ) ;
306
+ }
307
+ return callback ( ) ;
308
+ }
283
309
284
310
if ( entry . path == '/' ) {
285
311
return nextEntry ( ) ;
0 commit comments