From a4231d30c4d2765c80f57df79cd1d4d39a9795ea Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Tue, 30 Oct 2012 17:05:30 -0400 Subject: [PATCH] Added null checkinng and logging for edit user permissions (issue 155) --- src/com/gitblit/LuceneExecutor.java | 25 ++++++++++++++++++++----- 1 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/com/gitblit/LuceneExecutor.java b/src/com/gitblit/LuceneExecutor.java index 2e09930..dffd478 100644 --- a/src/com/gitblit/LuceneExecutor.java +++ b/src/com/gitblit/LuceneExecutor.java @@ -69,6 +69,7 @@ import org.apache.lucene.util.Version; import org.eclipse.jgit.diff.DiffEntry.ChangeType; import org.eclipse.jgit.lib.Constants; +import org.eclipse.jgit.lib.FileMode; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectLoader; import org.eclipse.jgit.lib.ObjectReader; @@ -105,7 +106,7 @@ public class LuceneExecutor implements Runnable { - private static final int INDEX_VERSION = 4; + private static final int INDEX_VERSION = 5; private static final String FIELD_OBJECT_TYPE = "type"; private static final String FIELD_ISSUE = "issue"; @@ -170,6 +171,12 @@ RepositoryModel model = GitBlit.self().getRepositoryModel(repositoryName); if (model.hasCommits && !ArrayUtils.isEmpty(model.indexedBranches)) { Repository repository = GitBlit.self().getRepository(model.name); + if (repository == null) { + if (GitBlit.self().isCollectingGarbage(model.name)) { + logger.info(MessageFormat.format("Skipping Lucene index of {0}, busy garbage collecting", repositoryName)); + } + continue; + } index(model, repository); repository.close(); System.gc(); @@ -285,7 +292,7 @@ close(repositoryName); // delete the index folder - File repositoryFolder = new File(repositoriesFolder, repositoryName); + File repositoryFolder = FileKey.resolve(new File(repositoriesFolder, repositoryName), FS.DETECTED); File luceneIndex = new File(repositoryFolder, LUCENE_DIR); if (luceneIndex.exists()) { org.eclipse.jgit.util.FileUtils.delete(luceneIndex, @@ -493,7 +500,10 @@ Map<String, ObjectId> paths = new TreeMap<String, ObjectId>(); while (treeWalk.next()) { - paths.put(treeWalk.getPathString(), treeWalk.getObjectId(0)); + // ensure path is not in a submodule + if (treeWalk.getFileMode(0) != FileMode.GITLINK) { + paths.put(treeWalk.getPathString(), treeWalk.getObjectId(0)); + } } ByteArrayOutputStream os = new ByteArrayOutputStream(); @@ -648,6 +658,9 @@ Resolution.MINUTE); IndexWriter writer = getIndexWriter(repositoryName); for (PathChangeModel path : changedPaths) { + if (path.isSubmodule()) { + continue; + } // delete the indexed blob deleteBlob(repositoryName, branch, path.name); @@ -676,8 +689,10 @@ // read the blob content String str = JGitUtils.getStringContent(repository, commit.getTree(), path.path, encodings); - doc.add(new Field(FIELD_CONTENT, str, Store.YES, Index.ANALYZED)); - writer.addDocument(doc); + if (str != null) { + doc.add(new Field(FIELD_CONTENT, str, Store.YES, Index.ANALYZED)); + writer.addDocument(doc); + } } } } -- Gitblit v1.9.1