5
5
"io"
6
6
"io/ioutil"
7
7
"os"
8
- "path/filepath"
9
- "strings"
10
8
11
9
"github.com/src-d/go-git-fixtures"
12
10
"gopkg.in/src-d/go-git.v4/config"
@@ -289,13 +287,14 @@ func (s *RemoteSuite) TestString(c *C) {
289
287
}
290
288
291
289
func (s * RemoteSuite ) TestPushToEmptyRepository (c * C ) {
290
+ url := c .MkDir ()
291
+ server , err := PlainInit (url , true )
292
+ c .Assert (err , IsNil )
293
+
292
294
srcFs := fixtures .Basic ().One ().DotGit ()
293
295
sto , err := filesystem .NewStorage (srcFs )
294
296
c .Assert (err , IsNil )
295
297
296
- dstFs := fixtures .ByTag ("empty" ).One ().DotGit ()
297
- url := dstFs .Root ()
298
-
299
298
r := newRemote (sto , & config.RemoteConfig {
300
299
Name : DefaultRemoteName ,
301
300
URL : url ,
@@ -307,140 +306,117 @@ func (s *RemoteSuite) TestPushToEmptyRepository(c *C) {
307
306
})
308
307
c .Assert (err , IsNil )
309
308
310
- dstSto , err := filesystem .NewStorage (dstFs )
311
- c .Assert (err , IsNil )
312
- dstRepo , err := Open (dstSto , nil )
309
+ iter , err := r .s .IterReferences ()
313
310
c .Assert (err , IsNil )
314
311
315
- iter , err := sto .IterReferences ()
316
- c .Assert (err , IsNil )
317
- err = iter .ForEach (func (ref * plumbing.Reference ) error {
312
+ expected := make (map [string ]string )
313
+ iter .ForEach (func (ref * plumbing.Reference ) error {
318
314
if ! ref .IsBranch () {
319
315
return nil
320
316
}
321
317
322
- dstRef , err := dstRepo .Reference (ref .Name (), true )
323
- c .Assert (err , IsNil , Commentf ("ref: %s" , ref .String ()))
324
- c .Assert (dstRef , DeepEquals , ref )
325
-
318
+ expected [ref .Name ().String ()] = ref .Hash ().String ()
326
319
return nil
327
320
})
328
321
c .Assert (err , IsNil )
322
+
323
+ AssertReferences (c , server , expected )
324
+
329
325
}
330
326
331
327
func (s * RemoteSuite ) TestPushTags (c * C ) {
332
- srcFs := fixtures . ByURL ( "https://github.com/git-fixtures/tags.git" ). One (). DotGit ()
333
- sto , err := filesystem . NewStorage ( srcFs )
328
+ url := c . MkDir ()
329
+ server , err := PlainInit ( url , true )
334
330
c .Assert (err , IsNil )
335
331
336
- dstFs := fixtures .ByTag ("empty" ).One ().DotGit ()
337
- url := dstFs .Root ()
332
+ fs := fixtures .ByURL ("https://github.com/git-fixtures/tags.git" ).One ().DotGit ()
333
+ sto , err := filesystem .NewStorage (fs )
334
+ c .Assert (err , IsNil )
338
335
339
336
r := newRemote (sto , & config.RemoteConfig {
340
337
Name : DefaultRemoteName ,
341
338
URL : url ,
342
339
})
343
340
344
- rs := config .RefSpec ("refs/tags/*:refs/tags/*" )
345
341
err = r .Push (& PushOptions {
346
- RefSpecs : []config.RefSpec {rs },
342
+ RefSpecs : []config.RefSpec {"refs/tags/*:refs/tags/*" },
347
343
})
348
344
c .Assert (err , IsNil )
349
345
350
- dstSto , err := filesystem .NewStorage (dstFs )
351
- c .Assert (err , IsNil )
352
- dstRepo , err := Open (dstSto , nil )
353
- c .Assert (err , IsNil )
354
-
355
- ref , err := dstRepo .Storer .Reference (plumbing .ReferenceName ("refs/tags/lightweight-tag" ))
356
- c .Assert (err , IsNil )
357
- c .Assert (ref , DeepEquals , plumbing .NewReferenceFromStrings ("refs/tags/lightweight-tag" , "f7b877701fbf855b44c0a9e86f3fdce2c298b07f" ))
358
-
359
- ref , err = dstRepo .Storer .Reference (plumbing .ReferenceName ("refs/tags/annotated-tag" ))
360
- c .Assert (err , IsNil )
361
- c .Assert (ref , DeepEquals , plumbing .NewReferenceFromStrings ("refs/tags/annotated-tag" , "b742a2a9fa0afcfa9a6fad080980fbc26b007c69" ))
362
-
363
- ref , err = dstRepo .Storer .Reference (plumbing .ReferenceName ("refs/tags/commit-tag" ))
364
- c .Assert (err , IsNil )
365
- c .Assert (ref , DeepEquals , plumbing .NewReferenceFromStrings ("refs/tags/commit-tag" , "ad7897c0fb8e7d9a9ba41fa66072cf06095a6cfc" ))
366
-
367
- ref , err = dstRepo .Storer .Reference (plumbing .ReferenceName ("refs/tags/blob-tag" ))
368
- c .Assert (err , IsNil )
369
- c .Assert (ref , DeepEquals , plumbing .NewReferenceFromStrings ("refs/tags/blob-tag" , "fe6cb94756faa81e5ed9240f9191b833db5f40ae" ))
370
-
371
- ref , err = dstRepo .Storer .Reference (plumbing .ReferenceName ("refs/tags/tree-tag" ))
372
- c .Assert (err , IsNil )
373
- c .Assert (ref , DeepEquals , plumbing .NewReferenceFromStrings ("refs/tags/tree-tag" , "152175bf7e5580299fa1f0ba41ef6474cc043b70" ))
346
+ AssertReferences (c , server , map [string ]string {
347
+ "refs/tags/lightweight-tag" : "f7b877701fbf855b44c0a9e86f3fdce2c298b07f" ,
348
+ "refs/tags/annotated-tag" : "b742a2a9fa0afcfa9a6fad080980fbc26b007c69" ,
349
+ "refs/tags/commit-tag" : "ad7897c0fb8e7d9a9ba41fa66072cf06095a6cfc" ,
350
+ "refs/tags/blob-tag" : "fe6cb94756faa81e5ed9240f9191b833db5f40ae" ,
351
+ "refs/tags/tree-tag" : "152175bf7e5580299fa1f0ba41ef6474cc043b70" ,
352
+ })
374
353
}
375
354
376
355
func (s * RemoteSuite ) TestPushNoErrAlreadyUpToDate (c * C ) {
377
- f := fixtures .Basic ().One ()
378
- sto , err := filesystem .NewStorage (f . DotGit () )
356
+ fs := fixtures .Basic ().One (). DotGit ()
357
+ sto , err := filesystem .NewStorage (fs )
379
358
c .Assert (err , IsNil )
380
- url := f . DotGit (). Root ()
359
+
381
360
r := newRemote (sto , & config.RemoteConfig {
382
361
Name : DefaultRemoteName ,
383
- URL : url ,
362
+ URL : fs . Root () ,
384
363
})
385
364
386
- rs := config .RefSpec ("refs/heads/*:refs/heads/*" )
387
365
err = r .Push (& PushOptions {
388
- RefSpecs : []config.RefSpec {rs },
366
+ RefSpecs : []config.RefSpec {"refs/heads/*:refs/heads/*" },
389
367
})
390
368
c .Assert (err , Equals , NoErrAlreadyUpToDate )
391
369
}
392
370
393
371
func (s * RemoteSuite ) TestPushDeleteReference (c * C ) {
394
- f := fixtures .Basic ().One ()
395
- sto , err := filesystem .NewStorage (f . DotGit () )
372
+ fs := fixtures .Basic ().One (). DotGit ()
373
+ sto , err := filesystem .NewStorage (fs )
396
374
c .Assert (err , IsNil )
397
375
398
- dstFs := f .DotGit ()
399
- dstSto , err := filesystem .NewStorage (dstFs )
376
+ r , err := PlainClone (c .MkDir (), true , & CloneOptions {
377
+ URL : fs .Root (),
378
+ })
400
379
c .Assert (err , IsNil )
401
- prepareRepo (c , dstFs .Root ())
402
380
403
- url := dstFs .Root ()
404
- r := newRemote (sto , & config.RemoteConfig {
405
- Name : DefaultRemoteName ,
406
- URL : url ,
407
- })
381
+ remote , err := r .Remote (DefaultRemoteName )
382
+ c .Assert (err , IsNil )
408
383
409
- rs := config .RefSpec (":refs/heads/branch" )
410
- err = r .Push (& PushOptions {
411
- RefSpecs : []config.RefSpec {rs },
384
+ err = remote .Push (& PushOptions {
385
+ RefSpecs : []config.RefSpec {":refs/heads/branch" },
412
386
})
413
387
c .Assert (err , IsNil )
414
388
415
- _ , err = dstSto .Reference (plumbing .ReferenceName ("refs/heads/branch" ))
389
+ _ , err = sto .Reference (plumbing .ReferenceName ("refs/heads/branch" ))
390
+ c .Assert (err , Equals , plumbing .ErrReferenceNotFound )
391
+
392
+ _ , err = r .Storer .Reference (plumbing .ReferenceName ("refs/heads/branch" ))
416
393
c .Assert (err , Equals , plumbing .ErrReferenceNotFound )
417
394
}
418
395
419
396
func (s * RemoteSuite ) TestPushRejectNonFastForward (c * C ) {
420
- f := fixtures .Basic ().One ()
421
- sto , err := filesystem .NewStorage (f . DotGit () )
397
+ fs := fixtures .Basic ().One (). DotGit ()
398
+ server , err := filesystem .NewStorage (fs )
422
399
c .Assert (err , IsNil )
423
400
424
- dstFs := f .DotGit ()
425
- dstSto , err := filesystem .NewStorage (dstFs )
401
+ r , err := PlainClone (c .MkDir (), true , & CloneOptions {
402
+ URL : fs .Root (),
403
+ })
426
404
c .Assert (err , IsNil )
427
405
428
- url := dstFs .Root ()
429
- r := newRemote (sto , & config.RemoteConfig {
430
- Name : DefaultRemoteName ,
431
- URL : url ,
432
- })
406
+ remote , err := r .Remote (DefaultRemoteName )
407
+ c .Assert (err , IsNil )
433
408
434
- oldRef , err := dstSto .Reference (plumbing .ReferenceName ("refs/heads/branch" ))
409
+ branch := plumbing .ReferenceName ("refs/heads/branch" )
410
+ oldRef , err := server .Reference (branch )
435
411
c .Assert (err , IsNil )
436
412
c .Assert (oldRef , NotNil )
437
413
438
- err = r .Push (& PushOptions {RefSpecs : []config.RefSpec {
439
- config . RefSpec ( "refs/heads/master:refs/heads/branch" ) ,
414
+ err = remote .Push (& PushOptions {RefSpecs : []config.RefSpec {
415
+ "refs/heads/master:refs/heads/branch" ,
440
416
}})
441
417
c .Assert (err , ErrorMatches , "non-fast-forward update: refs/heads/branch" )
442
418
443
- newRef , err := dstSto .Reference (plumbing . ReferenceName ( "refs/heads/ branch" ) )
419
+ newRef , err := server .Reference (branch )
444
420
c .Assert (err , IsNil )
445
421
c .Assert (newRef , DeepEquals , oldRef )
446
422
}
@@ -475,32 +451,35 @@ func (s *RemoteSuite) TestPushForce(c *C) {
475
451
}
476
452
477
453
func (s * RemoteSuite ) TestPushNewReference (c * C ) {
478
- f := fixtures .Basic ().One ()
479
- sto , err := filesystem .NewStorage (f .DotGit ())
480
- c .Assert (err , IsNil )
454
+ fs := fixtures .Basic ().One ().DotGit ()
455
+ url := c .MkDir ()
456
+ server , err := PlainClone (url , true , & CloneOptions {
457
+ URL : fs .Root (),
458
+ })
481
459
482
- dstFs := f .DotGit ()
483
- dstSto , err := filesystem .NewStorage (dstFs )
460
+ r , err := PlainClone (c .MkDir (), true , & CloneOptions {
461
+ URL : url ,
462
+ })
484
463
c .Assert (err , IsNil )
485
464
486
- url := dstFs .Root ()
487
- r := newRemote (sto , & config.RemoteConfig {
488
- Name : DefaultRemoteName ,
489
- URL : url ,
490
- })
465
+ remote , err := r .Remote (DefaultRemoteName )
466
+ c .Assert (err , IsNil )
491
467
492
- oldRef , err := dstSto .Reference (plumbing .ReferenceName ("refs/heads/branch" ) )
468
+ ref , err := r .Reference (plumbing .ReferenceName ("refs/heads/master" ), true )
493
469
c .Assert (err , IsNil )
494
- c .Assert (oldRef , NotNil )
495
470
496
- err = r .Push (& PushOptions {RefSpecs : []config.RefSpec {
497
- config . RefSpec ( "refs/heads/branch :refs/heads/branch2" ) ,
471
+ err = remote .Push (& PushOptions {RefSpecs : []config.RefSpec {
472
+ "refs/heads/master :refs/heads/branch2" ,
498
473
}})
499
474
c .Assert (err , IsNil )
500
475
501
- newRef , err := dstSto .Reference (plumbing .ReferenceName ("refs/heads/branch2" ))
502
- c .Assert (err , IsNil )
503
- c .Assert (newRef .Hash (), Equals , oldRef .Hash ())
476
+ AssertReferences (c , server , map [string ]string {
477
+ "refs/heads/branch2" : ref .Hash ().String (),
478
+ })
479
+
480
+ AssertReferences (c , r , map [string ]string {
481
+ "refs/remotes/origin/branch2" : ref .Hash ().String (),
482
+ })
504
483
}
505
484
506
485
func (s * RemoteSuite ) TestPushInvalidEndpoint (c * C ) {
@@ -516,7 +495,7 @@ func (s *RemoteSuite) TestPushNonExistentEndpoint(c *C) {
516
495
}
517
496
518
497
func (s * RemoteSuite ) TestPushInvalidSchemaEndpoint (c * C ) {
519
- r := newRemote (nil , & config.RemoteConfig {Name : "foo " , URL : "qux://foo" })
498
+ r := newRemote (nil , & config.RemoteConfig {Name : "origin " , URL : "qux://foo" })
520
499
err := r .Push (& PushOptions {})
521
500
c .Assert (err , ErrorMatches , ".*unsupported scheme.*" )
522
501
}
@@ -571,22 +550,3 @@ func (s *RemoteSuite) TestGetHaves(c *C) {
571
550
c .Assert (err , IsNil )
572
551
c .Assert (l , HasLen , 2 )
573
552
}
574
-
575
- const bareConfig = `[core]
576
- repositoryformatversion = 0
577
- filemode = true
578
- bare = true`
579
-
580
- func prepareRepo (c * C , path string ) {
581
- // git-receive-pack refuses to update refs/heads/master on non-bare repo
582
- // so we ensure bare repo config.
583
- config := filepath .Join (path , "config" )
584
- if _ , err := os .Stat (config ); err == nil {
585
- f , err := os .OpenFile (config , os .O_TRUNC | os .O_WRONLY , 0 )
586
- c .Assert (err , IsNil )
587
- content := strings .NewReader (bareConfig )
588
- _ , err = io .Copy (f , content )
589
- c .Assert (err , IsNil )
590
- c .Assert (f .Close (), IsNil )
591
- }
592
- }
0 commit comments