Community
Participate
Working Groups
Problem: Exception in thread "main" java.lang.IllegalStateException: Duplicate stages not allowed: 0 subtree/file at org.eclipse.jgit.dircache.DirCacheBuilder.bad(DirCacheBuilder.java:278) at org.eclipse.jgit.dircache.DirCacheBuilder.resort(DirCacheBuilder.java:268) at org.eclipse.jgit.dircache.DirCacheBuilder.finish(DirCacheBuilder.java:224) at org.eclipse.jgit.merge.ResolveMerger.mergeTrees(ResolveMerger.java:1144) at org.eclipse.jgit.merge.ResolveMerger.mergeImpl(ResolveMerger.java:345) at org.eclipse.jgit.merge.Merger.merge(Merger.java:258) at org.eclipse.jgit.merge.Merger.merge(Merger.java:211) at org.eclipse.jgit.merge.ThreeWayMerger.merge(ThreeWayMerger.java:126) Steps to reproduce: 1. cd /path/to/test 2. git init 3. touch init && git add init 4. git commit -m 'init' 5. touch subtree 6. touch subtree-0 7. git add -A && git commit -m 'add file subtree' => commit1 8. rm subtree 9. mkdir subtree 10. touch subtree/file 11. git add subtree/file 12. git commit -m 'add subtree/file' => commit2 13. Run the following code: RepositoryBuilder rb = new RepositoryBuilder() .setGitDir(new File(/path/to/test/.git>)) .readEnvironment() .findGitDir(); try (Repository repo = rb.build(); RevWalk rw = new RevWalk(repo);) { RevCommit toMerge = rw.parseCommit(ObjectId.fromString(commit1)); RevCommit mergeTip = rw.parseCommit(ObjectId.fromString(commit2)); ResolveMerger m = (ResolveMerger) MergeStrategy.RECURSIVE.newMerger(repo, true); m.setObjectInserter(createDryRunInserter(repo)); boolean mergeable = m.merge(new AnyObjectId[] {mergeTip, toMerge}); }
Seems to me that this merge should simply not do anything since toMerge is an ancestor of mergeTip. MergeCommand checks for this. ResolveMerger is a lower-level API and doesn't.
We see this error occurring in gerrit while creating auto merge commits. In our case the file is modified only in their index and not in base, ours indexes.
New Gerrit change created: https://git.eclipse.org/r/c/jgit/jgit/+/194411
Gerrit change https://git.eclipse.org/r/c/jgit/jgit/+/194411 was merged to [master]. Commit: http://git.eclipse.org/c/jgit/jgit.git/commit/?id=1e04046a6d22b55e6bc642d7cd4181feee9cf6af
New Gerrit change created: https://git.eclipse.org/r/c/jgit/jgit/+/197360
Gerrit change https://git.eclipse.org/r/c/jgit/jgit/+/197360 was merged to [stable-6.4]. Commit: http://git.eclipse.org/c/jgit/jgit.git/commit/?id=cb9f058f9b260dfa0878f7b8bf42936a7e330d35