James Moger
2012-02-28 b938aeea1e892b9c95396ca0745ac2adb79ff78e
Delete branch from index. Queue index update from the PostReceiveHook.
4 files modified
50 ■■■■■ changed files
src/com/gitblit/GitBlit.java 10 ●●●●● patch | view | raw | blame | history
src/com/gitblit/GitServlet.java 3 ●●●●● patch | view | raw | blame | history
src/com/gitblit/LuceneExecutor.java 8 ●●●●● patch | view | raw | blame | history
src/com/gitblit/utils/LuceneUtils.java 29 ●●●● 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
@@ -173,5 +173,13 @@
        } catch (Throwable t) {
            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);
            }
            List<RefModel> branches = JGitUtils.getLocalBranches(repository, true, -1);
            // TODO detect branch deletion
            // 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 branch
            // walk through each branches
            List<RefModel> branches = JGitUtils.getLocalBranches(repository, true, -1);
            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();