From b938aeea1e892b9c95396ca0745ac2adb79ff78e Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Tue, 28 Feb 2012 17:22:40 -0500 Subject: [PATCH] Delete branch from index. Queue index update from the PostReceiveHook. --- src/com/gitblit/utils/LuceneUtils.java | 29 +++++++++++++++++++++++++---- 1 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/com/gitblit/utils/LuceneUtils.java b/src/com/gitblit/utils/LuceneUtils.java index eaf02df..d463cdf 100644 --- a/src/com/gitblit/utils/LuceneUtils.java +++ b/src/com/gitblit/utils/LuceneUtils.java @@ -473,13 +473,24 @@ tags.get(tag.getReferencedObjectId().getName()).add(tag.displayName); } + // detect branch deletion + // first assume all branches are deleted and then remove each + // existing branch from deletedBranches during indexing + Set<String> deletedBranches = new TreeSet<String>(); + for (String alias : config.getNames(CONF_ALIAS)) { + String branch = config.getString(CONF_ALIAS, null, alias); + deletedBranches.add(branch); + } + + // walk through each branches List<RefModel> branches = JGitUtils.getLocalBranches(repository, true, -1); - // TODO detect branch deletion - - // walk through each branch for (RefModel branch : branches) { - // determine last commit String branchName = branch.getName(); + + // remove this branch from the deletedBranches set + deletedBranches.remove(branchName); + + // determine last commit String keyName = getBranchKey(branchName); String lastCommit = config.getString(CONF_BRANCH, null, keyName); @@ -504,6 +515,16 @@ config.setString(CONF_BRANCH, null, keyName, branch.getObjectId().getName()); config.save(); } + + // the deletedBranches set will normally be empty by this point + // unless a branch really was deleted and no longer exists + if (deletedBranches.size() > 0) { + for (String branch : deletedBranches) { + IndexWriter writer = getIndexWriter(repository, false); + writer.deleteDocuments(new Term(FIELD_BRANCH, branch)); + writer.commit(); + } + } success = true; } catch (Throwable t) { t.printStackTrace(); -- Gitblit v1.9.1