From 3778f9d47e876aa15d3fdcc84ef21ec07c63402e Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Mon, 2 Mar 2009 12:30:50 -0800 Subject: [PATCH] Fix repo prune to work on git 1.6.1-rc3~5 and later Prior to git 1.6.1-rc3~5 the output of 'git branch -d' matched: Deleted branch (.*)\. where the subgroup grabbed the branch name. In v1.6.1-rc3~5 (aka a126ed0a01e265d7f3b2972a34e85636e12e6d34) Brandon Casey changed the output to include the SHA-1 of the branch name, now matching the pattern: Deleted branch (.*) \([0-9a-f]*\)\. Instead of parsing the output of git branch we now re-obtain the list of branches after the deletion attempt and perform a set difference in memory to determine which branches we were able to successfully delete. Bug: REPO-9 Signed-off-by: Shawn O. Pearce --- project.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/project.py b/project.py index eebe96d5..4056860c 100644 --- a/project.py +++ b/project.py @@ -770,7 +770,8 @@ class Project(object): """ cb = self.CurrentBranch kill = [] - for name in self._allrefs.keys(): + left = self._allrefs + for name in left.keys(): if name.startswith(R_HEADS): name = name[len(R_HEADS):] if cb is None or name != cb: @@ -783,14 +784,12 @@ class Project(object): self.work_git.DetachHead(HEAD) kill.append(cb) - deleted = set() if kill: try: old = self.bare_git.GetHead() except GitError: old = 'refs/heads/please_never_use_this_as_a_branch_name' - rm_re = re.compile(r"^Deleted branch (.*)\.$") try: self.bare_git.DetachHead(rev) @@ -802,14 +801,12 @@ class Project(object): b.Wait() finally: self.bare_git.SetHead(old) + left = self._allrefs - for line in b.stdout.split("\n"): - m = rm_re.match(line) - if m: - deleted.add(m.group(1)) - - if deleted: - self.CleanPublishedCache() + for branch in kill: + if (R_HEADS + branch) not in left: + self.CleanPublishedCache() + break if cb and cb not in kill: kill.append(cb) @@ -817,7 +814,7 @@ class Project(object): kept = [] for branch in kill: - if branch not in deleted: + if (R_HEADS + branch) in left: branch = self.GetBranch(branch) base = branch.LocalMerge if not base: