diff options
author | James Moger <james.moger@gitblit.com> | 2012-02-28 17:22:40 -0500 |
---|---|---|
committer | James Moger <james.moger@gitblit.com> | 2012-02-28 17:22:40 -0500 |
commit | b938aeea1e892b9c95396ca0745ac2adb79ff78e (patch) | |
tree | 720c80ab898ca8c04c458dd96f6df4bacb8b2fb5 /src/com/gitblit | |
parent | e31da050c6ab5ece38fb18196948337395ae59e6 (diff) | |
download | gitblit-b938aeea1e892b9c95396ca0745ac2adb79ff78e.tar.gz gitblit-b938aeea1e892b9c95396ca0745ac2adb79ff78e.zip |
Delete branch from index. Queue index update from the PostReceiveHook.
Diffstat (limited to 'src/com/gitblit')
-rw-r--r-- | src/com/gitblit/GitBlit.java | 10 | ||||
-rw-r--r-- | src/com/gitblit/GitServlet.java | 3 | ||||
-rw-r--r-- | src/com/gitblit/LuceneExecutor.java | 16 | ||||
-rw-r--r-- | src/com/gitblit/utils/LuceneUtils.java | 29 |
4 files changed, 50 insertions, 8 deletions
diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java index 580bf628..a7bfad4f 100644 --- a/src/com/gitblit/GitBlit.java +++ b/src/com/gitblit/GitBlit.java @@ -1697,6 +1697,15 @@ public class GitBlit implements ServletContextListener { }
/**
+ * Update the Lucene index of a repository.
+ *
+ * @param repository
+ */
+ public void updateLuceneIndex(RepositoryModel repository) {
+ luceneExecutor.queue(repository);
+ }
+
+ /**
* Returns the descriptions/comments of the Gitblit config settings.
*
* @return SettingsModel
@@ -1892,5 +1901,6 @@ public class GitBlit implements ServletContextListener { public void contextDestroyed(ServletContextEvent contextEvent) {
logger.info("Gitblit context destroyed by servlet container.");
scheduledExecutor.shutdownNow();
+ luceneExecutor.close();
}
}
diff --git a/src/com/gitblit/GitServlet.java b/src/com/gitblit/GitServlet.java index 3b60e9f1..473e4c90 100644 --- a/src/com/gitblit/GitServlet.java +++ b/src/com/gitblit/GitServlet.java @@ -197,6 +197,9 @@ public class GitServlet extends org.eclipse.jgit.http.server.GitServlet { // Experimental
// runNativeScript(rp, "hooks/post-receive", commands);
+
+ // Update the Lucene search index
+ GitBlit.self().updateLuceneIndex(repository);
}
/**
diff --git a/src/com/gitblit/LuceneExecutor.java b/src/com/gitblit/LuceneExecutor.java index 32004a73..e4624efc 100644 --- a/src/com/gitblit/LuceneExecutor.java +++ b/src/com/gitblit/LuceneExecutor.java @@ -54,7 +54,7 @@ public class LuceneExecutor implements Runnable { public LuceneExecutor(IStoredSettings settings) {
this.settings = settings;
this.isLuceneEnabled = settings.getBoolean("lucene.enableLucene", false);
- this.isPollingMode = settings.getBoolean("lucene.pollingMode", false);
+ this.isPollingMode = settings.getBoolean("lucene.pollingMode", false);
}
/**
@@ -94,9 +94,9 @@ public class LuceneExecutor implements Runnable { if (!isLuceneEnabled) {
return;
}
-
+
if (firstRun.get() || isPollingMode) {
- // update all indexes on first run or if polling mode
+ // update all indexes on first run or if polling mode
firstRun.set(false);
queue.addAll(GitBlit.self().getRepositoryList());
}
@@ -117,7 +117,7 @@ public class LuceneExecutor implements Runnable { "Lucene executor could not find repository {0}. Skipping.",
repositoryName));
continue;
- }
+ }
index(repositoryName, repository);
repository.close();
processed.add(repositoryName);
@@ -174,4 +174,12 @@ public class LuceneExecutor implements Runnable { logger.error(MessageFormat.format("Lucene indexing failure for {0}", repositoryName), t);
}
}
+
+ /**
+ * Close all Lucene indexers.
+ *
+ */
+ public void close() {
+ LuceneUtils.close();
+ }
}
diff --git a/src/com/gitblit/utils/LuceneUtils.java b/src/com/gitblit/utils/LuceneUtils.java index eaf02dfb..d463cdf1 100644 --- a/src/com/gitblit/utils/LuceneUtils.java +++ b/src/com/gitblit/utils/LuceneUtils.java @@ -473,13 +473,24 @@ public class LuceneUtils { 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 @@ public class LuceneUtils { 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();
|