@@ -1444,6 +1444,119 @@ func (s *RemoteSuite) TestPushRequireRemoteRefs(c *C) {
1444
1444
c .Assert (newRef , Not (DeepEquals ), oldRef )
1445
1445
}
1446
1446
1447
+ func (s * RemoteSuite ) TestFetchPrune (c * C ) {
1448
+ fs := fixtures .Basic ().One ().DotGit ()
1449
+
1450
+ url , clean := s .TemporalDir ()
1451
+ defer clean ()
1452
+
1453
+ _ , err := PlainClone (url , true , & CloneOptions {
1454
+ URL : fs .Root (),
1455
+ })
1456
+ c .Assert (err , IsNil )
1457
+
1458
+ dir , clean := s .TemporalDir ()
1459
+ defer clean ()
1460
+
1461
+ r , err := PlainClone (dir , true , & CloneOptions {
1462
+ URL : url ,
1463
+ })
1464
+ c .Assert (err , IsNil )
1465
+
1466
+ remote , err := r .Remote (DefaultRemoteName )
1467
+ c .Assert (err , IsNil )
1468
+
1469
+ ref , err := r .Reference (plumbing .ReferenceName ("refs/heads/master" ), true )
1470
+ c .Assert (err , IsNil )
1471
+
1472
+ err = remote .Push (& PushOptions {RefSpecs : []config.RefSpec {
1473
+ "refs/heads/master:refs/heads/branch" ,
1474
+ }})
1475
+ c .Assert (err , IsNil )
1476
+
1477
+ dirSave , clean := s .TemporalDir ()
1478
+ defer clean ()
1479
+
1480
+ rSave , err := PlainClone (dirSave , true , & CloneOptions {
1481
+ URL : url ,
1482
+ })
1483
+ c .Assert (err , IsNil )
1484
+
1485
+ AssertReferences (c , rSave , map [string ]string {
1486
+ "refs/remotes/origin/branch" : ref .Hash ().String (),
1487
+ })
1488
+
1489
+ err = remote .Push (& PushOptions {RefSpecs : []config.RefSpec {
1490
+ ":refs/heads/branch" ,
1491
+ }})
1492
+
1493
+ AssertReferences (c , rSave , map [string ]string {
1494
+ "refs/remotes/origin/branch" : ref .Hash ().String (),
1495
+ })
1496
+
1497
+ err = rSave .Fetch (& FetchOptions {Prune : true })
1498
+ c .Assert (err , IsNil )
1499
+
1500
+ _ , err = rSave .Reference ("refs/remotes/origin/branch" , true )
1501
+ c .Assert (err , ErrorMatches , "reference not found" )
1502
+ }
1503
+
1504
+ func (s * RemoteSuite ) TestFetchPruneTags (c * C ) {
1505
+ fs := fixtures .Basic ().One ().DotGit ()
1506
+
1507
+ url , clean := s .TemporalDir ()
1508
+ defer clean ()
1509
+
1510
+ _ , err := PlainClone (url , true , & CloneOptions {
1511
+ URL : fs .Root (),
1512
+ })
1513
+ c .Assert (err , IsNil )
1514
+
1515
+ dir , clean := s .TemporalDir ()
1516
+ defer clean ()
1517
+
1518
+ r , err := PlainClone (dir , true , & CloneOptions {
1519
+ URL : url ,
1520
+ })
1521
+ c .Assert (err , IsNil )
1522
+
1523
+ remote , err := r .Remote (DefaultRemoteName )
1524
+ c .Assert (err , IsNil )
1525
+
1526
+ ref , err := r .Reference (plumbing .ReferenceName ("refs/heads/master" ), true )
1527
+ c .Assert (err , IsNil )
1528
+
1529
+ err = remote .Push (& PushOptions {RefSpecs : []config.RefSpec {
1530
+ "refs/heads/master:refs/tags/v1" ,
1531
+ }})
1532
+ c .Assert (err , IsNil )
1533
+
1534
+ dirSave , clean := s .TemporalDir ()
1535
+ defer clean ()
1536
+
1537
+ rSave , err := PlainClone (dirSave , true , & CloneOptions {
1538
+ URL : url ,
1539
+ })
1540
+ c .Assert (err , IsNil )
1541
+
1542
+ AssertReferences (c , rSave , map [string ]string {
1543
+ "refs/tags/v1" : ref .Hash ().String (),
1544
+ })
1545
+
1546
+ err = remote .Push (& PushOptions {RefSpecs : []config.RefSpec {
1547
+ ":refs/tags/v1" ,
1548
+ }})
1549
+
1550
+ AssertReferences (c , rSave , map [string ]string {
1551
+ "refs/tags/v1" : ref .Hash ().String (),
1552
+ })
1553
+
1554
+ err = rSave .Fetch (& FetchOptions {Prune : true , RefSpecs : []config.RefSpec {"refs/tags/*:refs/tags/*" }})
1555
+ c .Assert (err , IsNil )
1556
+
1557
+ _ , err = rSave .Reference ("refs/tags/v1" , true )
1558
+ c .Assert (err , ErrorMatches , "reference not found" )
1559
+ }
1447
1560
func (s * RemoteSuite ) TestCanPushShasToReference (c * C ) {
1448
1561
d , err := os .MkdirTemp ("" , "TestCanPushShasToReference" )
1449
1562
c .Assert (err , IsNil )
0 commit comments