src/com/gitblit/GitBlit.java | ●●●●● patch | view | raw | blame | history | |
src/com/gitblit/GitServlet.java | ●●●●● patch | view | raw | blame | history | |
src/com/gitblit/LuceneExecutor.java | ●●●●● patch | view | raw | blame | history | |
src/com/gitblit/utils/LuceneUtils.java | ●●●●● patch | view | raw | blame | history |
src/com/gitblit/GitBlit.java
@@ -1697,6 +1697,15 @@ } /** * 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 void contextDestroyed(ServletContextEvent contextEvent) { logger.info("Gitblit context destroyed by servlet container."); scheduledExecutor.shutdownNow(); luceneExecutor.close(); } } src/com/gitblit/GitServlet.java
@@ -197,6 +197,9 @@ // Experimental // runNativeScript(rp, "hooks/post-receive", commands); // Update the Lucene search index GitBlit.self().updateLuceneIndex(repository); } /** src/com/gitblit/LuceneExecutor.java
@@ -54,7 +54,7 @@ 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 @@ 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 @@ "Lucene executor could not find repository {0}. Skipping.", repositoryName)); continue; } } index(repositoryName, repository); repository.close(); processed.add(repositoryName); @@ -174,4 +174,12 @@ logger.error(MessageFormat.format("Lucene indexing failure for {0}", repositoryName), t); } } /** * Close all Lucene indexers. * */ public void close() { LuceneUtils.close(); } } 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();