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"
@@ -305,13 +303,14 @@ func (s *RemoteSuite) TestString(c *C) {
305
303
}
306
304
307
305
func (s * RemoteSuite ) TestPushToEmptyRepository (c * C ) {
306
+ url := c .MkDir ()
307
+ server , err := PlainInit (url , true )
308
+ c .Assert (err , IsNil )
309
+
308
310
srcFs := fixtures .Basic ().One ().DotGit ()
309
311
sto , err := filesystem .NewStorage (srcFs )
310
312
c .Assert (err , IsNil )
311
313
312
- dstFs := fixtures .ByTag ("empty" ).One ().DotGit ()
313
- url := dstFs .Root ()
314
-
315
314
r := newRemote (sto , & config.RemoteConfig {
316
315
Name : DefaultRemoteName ,
317
316
URL : url ,
@@ -323,140 +322,117 @@ func (s *RemoteSuite) TestPushToEmptyRepository(c *C) {
323
322
})
324
323
c .Assert (err , IsNil )
325
324
326
- dstSto , err := filesystem .NewStorage (dstFs )
327
- c .Assert (err , IsNil )
328
- dstRepo , err := Open (dstSto , nil )
325
+ iter , err := r .s .IterReferences ()
329
326
c .Assert (err , IsNil )
330
327
331
- iter , err := sto .IterReferences ()
332
- c .Assert (err , IsNil )
333
- err = iter .ForEach (func (ref * plumbing.Reference ) error {
328
+ expected := make (map [string ]string )
329
+ iter .ForEach (func (ref * plumbing.Reference ) error {
334
330
if ! ref .IsBranch () {
335
331
return nil
336
332
}
337
333
338
- dstRef , err := dstRepo .Reference (ref .Name (), true )
339
- c .Assert (err , IsNil , Commentf ("ref: %s" , ref .String ()))
340
- c .Assert (dstRef , DeepEquals , ref )
341
-
334
+ expected [ref .Name ().String ()] = ref .Hash ().String ()
342
335
return nil
343
336
})
344
337
c .Assert (err , IsNil )
338
+
339
+ AssertReferences (c , server , expected )
340
+
345
341
}
346
342
347
343
func (s * RemoteSuite ) TestPushTags (c * C ) {
348
- srcFs := fixtures . ByURL ( "https://github.com/git-fixtures/tags.git" ). One (). DotGit ()
349
- sto , err := filesystem . NewStorage ( srcFs )
344
+ url := c . MkDir ()
345
+ server , err := PlainInit ( url , true )
350
346
c .Assert (err , IsNil )
351
347
352
- dstFs := fixtures .ByTag ("empty" ).One ().DotGit ()
353
- url := dstFs .Root ()
348
+ fs := fixtures .ByURL ("https://github.com/git-fixtures/tags.git" ).One ().DotGit ()
349
+ sto , err := filesystem .NewStorage (fs )
350
+ c .Assert (err , IsNil )
354
351
355
352
r := newRemote (sto , & config.RemoteConfig {
356
353
Name : DefaultRemoteName ,
357
354
URL : url ,
358
355
})
359
356
360
- rs := config .RefSpec ("refs/tags/*:refs/tags/*" )
361
357
err = r .Push (& PushOptions {
362
- RefSpecs : []config.RefSpec {rs },
358
+ RefSpecs : []config.RefSpec {"refs/tags/*:refs/tags/*" },
363
359
})
364
360
c .Assert (err , IsNil )
365
361
366
- dstSto , err := filesystem .NewStorage (dstFs )
367
- c .Assert (err , IsNil )
368
- dstRepo , err := Open (dstSto , nil )
369
- c .Assert (err , IsNil )
370
-
371
- ref , err := dstRepo .Storer .Reference (plumbing .ReferenceName ("refs/tags/lightweight-tag" ))
372
- c .Assert (err , IsNil )
373
- c .Assert (ref , DeepEquals , plumbing .NewReferenceFromStrings ("refs/tags/lightweight-tag" , "f7b877701fbf855b44c0a9e86f3fdce2c298b07f" ))
374
-
375
- ref , err = dstRepo .Storer .Reference (plumbing .ReferenceName ("refs/tags/annotated-tag" ))
376
- c .Assert (err , IsNil )
377
- c .Assert (ref , DeepEquals , plumbing .NewReferenceFromStrings ("refs/tags/annotated-tag" , "b742a2a9fa0afcfa9a6fad080980fbc26b007c69" ))
378
-
379
- ref , err = dstRepo .Storer .Reference (plumbing .ReferenceName ("refs/tags/commit-tag" ))
380
- c .Assert (err , IsNil )
381
- c .Assert (ref , DeepEquals , plumbing .NewReferenceFromStrings ("refs/tags/commit-tag" , "ad7897c0fb8e7d9a9ba41fa66072cf06095a6cfc" ))
382
-
383
- ref , err = dstRepo .Storer .Reference (plumbing .ReferenceName ("refs/tags/blob-tag" ))
384
- c .Assert (err , IsNil )
385
- c .Assert (ref , DeepEquals , plumbing .NewReferenceFromStrings ("refs/tags/blob-tag" , "fe6cb94756faa81e5ed9240f9191b833db5f40ae" ))
386
-
387
- ref , err = dstRepo .Storer .Reference (plumbing .ReferenceName ("refs/tags/tree-tag" ))
388
- c .Assert (err , IsNil )
389
- c .Assert (ref , DeepEquals , plumbing .NewReferenceFromStrings ("refs/tags/tree-tag" , "152175bf7e5580299fa1f0ba41ef6474cc043b70" ))
362
+ AssertReferences (c , server , map [string ]string {
363
+ "refs/tags/lightweight-tag" : "f7b877701fbf855b44c0a9e86f3fdce2c298b07f" ,
364
+ "refs/tags/annotated-tag" : "b742a2a9fa0afcfa9a6fad080980fbc26b007c69" ,
365
+ "refs/tags/commit-tag" : "ad7897c0fb8e7d9a9ba41fa66072cf06095a6cfc" ,
366
+ "refs/tags/blob-tag" : "fe6cb94756faa81e5ed9240f9191b833db5f40ae" ,
367
+ "refs/tags/tree-tag" : "152175bf7e5580299fa1f0ba41ef6474cc043b70" ,
368
+ })
390
369
}
391
370
392
371
func (s * RemoteSuite ) TestPushNoErrAlreadyUpToDate (c * C ) {
393
- f := fixtures .Basic ().One ()
394
- sto , err := filesystem .NewStorage (f . DotGit () )
372
+ fs := fixtures .Basic ().One (). DotGit ()
373
+ sto , err := filesystem .NewStorage (fs )
395
374
c .Assert (err , IsNil )
396
- url := f . DotGit (). Root ()
375
+
397
376
r := newRemote (sto , & config.RemoteConfig {
398
377
Name : DefaultRemoteName ,
399
- URL : url ,
378
+ URL : fs . Root () ,
400
379
})
401
380
402
- rs := config .RefSpec ("refs/heads/*:refs/heads/*" )
403
381
err = r .Push (& PushOptions {
404
- RefSpecs : []config.RefSpec {rs },
382
+ RefSpecs : []config.RefSpec {"refs/heads/*:refs/heads/*" },
405
383
})
406
384
c .Assert (err , Equals , NoErrAlreadyUpToDate )
407
385
}
408
386
409
387
func (s * RemoteSuite ) TestPushDeleteReference (c * C ) {
410
- f := fixtures .Basic ().One ()
411
- sto , err := filesystem .NewStorage (f . DotGit () )
388
+ fs := fixtures .Basic ().One (). DotGit ()
389
+ sto , err := filesystem .NewStorage (fs )
412
390
c .Assert (err , IsNil )
413
391
414
- dstFs := f .DotGit ()
415
- dstSto , err := filesystem .NewStorage (dstFs )
392
+ r , err := PlainClone (c .MkDir (), true , & CloneOptions {
393
+ URL : fs .Root (),
394
+ })
416
395
c .Assert (err , IsNil )
417
- prepareRepo (c , dstFs .Root ())
418
396
419
- url := dstFs .Root ()
420
- r := newRemote (sto , & config.RemoteConfig {
421
- Name : DefaultRemoteName ,
422
- URL : url ,
423
- })
397
+ remote , err := r .Remote (DefaultRemoteName )
398
+ c .Assert (err , IsNil )
424
399
425
- rs := config .RefSpec (":refs/heads/branch" )
426
- err = r .Push (& PushOptions {
427
- RefSpecs : []config.RefSpec {rs },
400
+ err = remote .Push (& PushOptions {
401
+ RefSpecs : []config.RefSpec {":refs/heads/branch" },
428
402
})
429
403
c .Assert (err , IsNil )
430
404
431
- _ , err = dstSto .Reference (plumbing .ReferenceName ("refs/heads/branch" ))
405
+ _ , err = sto .Reference (plumbing .ReferenceName ("refs/heads/branch" ))
406
+ c .Assert (err , Equals , plumbing .ErrReferenceNotFound )
407
+
408
+ _ , err = r .Storer .Reference (plumbing .ReferenceName ("refs/heads/branch" ))
432
409
c .Assert (err , Equals , plumbing .ErrReferenceNotFound )
433
410
}
434
411
435
412
func (s * RemoteSuite ) TestPushRejectNonFastForward (c * C ) {
436
- f := fixtures .Basic ().One ()
437
- sto , err := filesystem .NewStorage (f . DotGit () )
413
+ fs := fixtures .Basic ().One (). DotGit ()
414
+ server , err := filesystem .NewStorage (fs )
438
415
c .Assert (err , IsNil )
439
416
440
- dstFs := f .DotGit ()
441
- dstSto , err := filesystem .NewStorage (dstFs )
417
+ r , err := PlainClone (c .MkDir (), true , & CloneOptions {
418
+ URL : fs .Root (),
419
+ })
442
420
c .Assert (err , IsNil )
443
421
444
- url := dstFs .Root ()
445
- r := newRemote (sto , & config.RemoteConfig {
446
- Name : DefaultRemoteName ,
447
- URL : url ,
448
- })
422
+ remote , err := r .Remote (DefaultRemoteName )
423
+ c .Assert (err , IsNil )
449
424
450
- oldRef , err := dstSto .Reference (plumbing .ReferenceName ("refs/heads/branch" ))
425
+ branch := plumbing .ReferenceName ("refs/heads/branch" )
426
+ oldRef , err := server .Reference (branch )
451
427
c .Assert (err , IsNil )
452
428
c .Assert (oldRef , NotNil )
453
429
454
- err = r .Push (& PushOptions {RefSpecs : []config.RefSpec {
455
- config . RefSpec ( "refs/heads/master:refs/heads/branch" ) ,
430
+ err = remote .Push (& PushOptions {RefSpecs : []config.RefSpec {
431
+ "refs/heads/master:refs/heads/branch" ,
456
432
}})
457
433
c .Assert (err , ErrorMatches , "non-fast-forward update: refs/heads/branch" )
458
434
459
- newRef , err := dstSto .Reference (plumbing . ReferenceName ( "refs/heads/ branch" ) )
435
+ newRef , err := server .Reference (branch )
460
436
c .Assert (err , IsNil )
461
437
c .Assert (newRef , DeepEquals , oldRef )
462
438
}
@@ -491,32 +467,35 @@ func (s *RemoteSuite) TestPushForce(c *C) {
491
467
}
492
468
493
469
func (s * RemoteSuite ) TestPushNewReference (c * C ) {
494
- f := fixtures .Basic ().One ()
495
- sto , err := filesystem .NewStorage (f .DotGit ())
496
- c .Assert (err , IsNil )
470
+ fs := fixtures .Basic ().One ().DotGit ()
471
+ url := c .MkDir ()
472
+ server , err := PlainClone (url , true , & CloneOptions {
473
+ URL : fs .Root (),
474
+ })
497
475
498
- dstFs := f .DotGit ()
499
- dstSto , err := filesystem .NewStorage (dstFs )
476
+ r , err := PlainClone (c .MkDir (), true , & CloneOptions {
477
+ URL : url ,
478
+ })
500
479
c .Assert (err , IsNil )
501
480
502
- url := dstFs .Root ()
503
- r := newRemote (sto , & config.RemoteConfig {
504
- Name : DefaultRemoteName ,
505
- URL : url ,
506
- })
481
+ remote , err := r .Remote (DefaultRemoteName )
482
+ c .Assert (err , IsNil )
507
483
508
- oldRef , err := dstSto .Reference (plumbing .ReferenceName ("refs/heads/branch" ) )
484
+ ref , err := r .Reference (plumbing .ReferenceName ("refs/heads/master" ), true )
509
485
c .Assert (err , IsNil )
510
- c .Assert (oldRef , NotNil )
511
486
512
- err = r .Push (& PushOptions {RefSpecs : []config.RefSpec {
513
- config . RefSpec ( "refs/heads/branch :refs/heads/branch2" ) ,
487
+ err = remote .Push (& PushOptions {RefSpecs : []config.RefSpec {
488
+ "refs/heads/master :refs/heads/branch2" ,
514
489
}})
515
490
c .Assert (err , IsNil )
516
491
517
- newRef , err := dstSto .Reference (plumbing .ReferenceName ("refs/heads/branch2" ))
518
- c .Assert (err , IsNil )
519
- c .Assert (newRef .Hash (), Equals , oldRef .Hash ())
492
+ AssertReferences (c , server , map [string ]string {
493
+ "refs/heads/branch2" : ref .Hash ().String (),
494
+ })
495
+
496
+ AssertReferences (c , r , map [string ]string {
497
+ "refs/remotes/origin/branch2" : ref .Hash ().String (),
498
+ })
520
499
}
521
500
522
501
func (s * RemoteSuite ) TestPushInvalidEndpoint (c * C ) {
@@ -532,7 +511,7 @@ func (s *RemoteSuite) TestPushNonExistentEndpoint(c *C) {
532
511
}
533
512
534
513
func (s * RemoteSuite ) TestPushInvalidSchemaEndpoint (c * C ) {
535
- r := newRemote (nil , & config.RemoteConfig {Name : "foo " , URL : "qux://foo" })
514
+ r := newRemote (nil , & config.RemoteConfig {Name : "origin " , URL : "qux://foo" })
536
515
err := r .Push (& PushOptions {})
537
516
c .Assert (err , ErrorMatches , ".*unsupported scheme.*" )
538
517
}
@@ -587,22 +566,3 @@ func (s *RemoteSuite) TestGetHaves(c *C) {
587
566
c .Assert (err , IsNil )
588
567
c .Assert (l , HasLen , 2 )
589
568
}
590
-
591
- const bareConfig = `[core]
592
- repositoryformatversion = 0
593
- filemode = true
594
- bare = true`
595
-
596
- func prepareRepo (c * C , path string ) {
597
- // git-receive-pack refuses to update refs/heads/master on non-bare repo
598
- // so we ensure bare repo config.
599
- config := filepath .Join (path , "config" )
600
- if _ , err := os .Stat (config ); err == nil {
601
- f , err := os .OpenFile (config , os .O_TRUNC | os .O_WRONLY , 0 )
602
- c .Assert (err , IsNil )
603
- content := strings .NewReader (bareConfig )
604
- _ , err = io .Copy (f , content )
605
- c .Assert (err , IsNil )
606
- c .Assert (f .Close (), IsNil )
607
- }
608
- }
0 commit comments