@@ -551,6 +551,8 @@ func (s *Server) deleteBranch(w http.ResponseWriter, r *http.Request) {
551
551
552
552
toRemove := snapshotsToRemove (repo , snapshotID , branchName )
553
553
554
+ log .Dbg ("Snapshots to remove" , toRemove )
555
+
554
556
if len (toRemove ) > 0 {
555
557
// Pre-check.
556
558
preCheckList := make (map [string ]int )
@@ -618,18 +620,26 @@ func cleanupSnapshotProperties(repo *models.Repo, fsm pool.FSManager, branchName
618
620
}
619
621
620
622
func snapshotsToRemove (repo * models.Repo , snapshotID , branchName string ) []string {
623
+ removingList := []string {}
624
+
625
+ // Traverse up the snapshot tree
626
+ removingList = append (removingList , traverseUp (repo , snapshotID , branchName )... )
627
+
628
+ // Traverse down the snapshot tree
629
+ removingList = append (removingList , traverseDown (repo , snapshotID )... )
630
+
631
+ return removingList
632
+ }
633
+
634
+ func traverseUp (repo * models.Repo , snapshotID , branchName string ) []string {
621
635
snapshotPointer := repo .Snapshots [snapshotID ]
622
636
623
637
removingList := []string {}
624
638
625
639
for snapshotPointer .Parent != "-" {
626
- if len (snapshotPointer .Root ) > 0 {
627
- break
628
- }
629
-
630
640
for _ , snapshotRoot := range snapshotPointer .Root {
631
641
if snapshotRoot == branchName {
632
- break
642
+ return removingList
633
643
}
634
644
}
635
645
@@ -640,6 +650,19 @@ func snapshotsToRemove(repo *models.Repo, snapshotID, branchName string) []strin
640
650
return removingList
641
651
}
642
652
653
+ func traverseDown (repo * models.Repo , snapshotID string ) []string {
654
+ snapshotPointer := repo .Snapshots [snapshotID ]
655
+
656
+ removingList := []string {}
657
+
658
+ for _ , snapshotChild := range snapshotPointer .Child {
659
+ removingList = append (removingList , snapshotChild )
660
+ removingList = append (removingList , traverseDown (repo , snapshotChild )... )
661
+ }
662
+
663
+ return removingList
664
+ }
665
+
643
666
func (s * Server ) destroyBranchDataset (fsm pool.FSManager , branchName string ) error {
644
667
branchDatasetName := fsm .Pool ().BranchName (fsm .Pool ().Name , branchName )
645
668
0 commit comments