diff options
author | Jonathan Nieder <jrn@google.com> | 2013-10-04 16:13:59 -0700 |
---|---|---|
committer | Jonathan Nieder <jrn@google.com> | 2013-10-04 16:15:57 -0700 |
commit | 7b254e51df2e57842487b13cf7d03b80bd737d5f (patch) | |
tree | 38b856971c4a6f7e307734d820e3dca4a905833d | |
parent | 3488eece9f1a197aedfe41d0b3275065c4981c82 (diff) |
Skip non-commits when verifying access for 'add branch' operation
Some projects have refs pointing to a tree (e.g., the Linux kernel's
"refs/tags/v2.6.11"), resulting in the message
Cannot verify permissions to commit object <commit id> in repository <repo>
as a result of exception
IncorrectObjectTypeException: Object <tree id> is not a commit.
at org.eclipse.jgit.revwalk.RevWalk.parseCommit(RevWalk.java:724)
at com.google.gerrit.server.project.ProjectControl.canReadCommit(ProjectControl.java:496)
at com.google.gerrit.server.project.RefControl.canCreate(RefControl.java:250)
at com.google.gerrit.server.git.ReceiveCommits.parseCreate(ReceiveCommits.java:852)
when trying to create a new branch through gerrit.
Change-Id: I9be1fe5046b5db482aa8f80d02c86d3d7a973036
-rw-r--r-- | gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectControl.java | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectControl.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectControl.java index 937f84362c..a50d33dbd5 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectControl.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectControl.java @@ -40,6 +40,7 @@ import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.assistedinject.Assisted; +import org.eclipse.jgit.errors.IncorrectObjectTypeException; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; @@ -468,7 +469,12 @@ public class ProjectControl { Repository repo = repoManager.openRepository(projName); try { for (Entry<String, Ref> entry : repo.getAllRefs().entrySet()) { - RevCommit tip = rw.parseCommit(entry.getValue().getObjectId()); + RevCommit tip; + try { + tip = rw.parseCommit(entry.getValue().getObjectId()); + } catch (IncorrectObjectTypeException e) { + continue; + } if (rw.isMergedInto(commit, tip) && controlForRef(entry.getKey()).canPerform(Permission.READ)) { return true; |