@@ -551,6 +551,8 @@ func (s *Server) deleteBranch(w http.ResponseWriter, r *http.Request) {
551551
552552 toRemove := snapshotsToRemove (repo , snapshotID , branchName )
553553
554+ log .Dbg ("Snapshots to remove" , toRemove )
555+ 554556 if len (toRemove ) > 0 {
555557 // Pre-check.
556558 preCheckList := make (map [string ]int )
@@ -618,18 +620,26 @@ func cleanupSnapshotProperties(repo *models.Repo, fsm pool.FSManager, branchName
618620}
619621
620622func 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 {
621635 snapshotPointer := repo .Snapshots [snapshotID ]
622636
623637 removingList := []string {}
624638
625639 for snapshotPointer .Parent != "-" {
626- if len (snapshotPointer .Root ) > 0 {
627- break
628- }
629- 630640 for _ , snapshotRoot := range snapshotPointer .Root {
631641 if snapshotRoot == branchName {
632- break
642+ return removingList
633643 }
634644 }
635645
@@ -640,6 +650,19 @@ func snapshotsToRemove(repo *models.Repo, snapshotID, branchName string) []strin
640650 return removingList
641651}
642652
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+ 643666func (s * Server ) destroyBranchDataset (fsm pool.FSManager , branchName string ) error {
644667 branchDatasetName := fsm .Pool ().BranchName (fsm .Pool ().Name , branchName )
645668
0 commit comments