]> source.dussan.org Git - jgit.git/commitdiff
Fix RebuildRefTree trying to add HEAD twice to RefTree 48/67848/1
authorMatthias Sohn <matthias.sohn@sap.com>
Fri, 4 Mar 2016 13:20:01 +0000 (14:20 +0100)
committerMatthias Sohn <matthias.sohn@sap.com>
Sat, 5 Mar 2016 00:03:34 +0000 (01:03 +0100)
14dfa70520 fixed the problem that HEAD wasn't added to the reftree when
rebuilding the reftree in an empty repository where HEAD isn't yet
resolvable. Since non-resolvable refs are filtered out by
RefDatabase.getRefs(ALL) we have to add HEAD to the reftree explicitly
in this special case.

This fix resulted in another bug: rebuilding the reftree in a repository
which has a resolvable HEAD failed with a DirCacheNameConflictException
in RefTree.apply(). If HEAD is resolvable RefDatabase.getRefs(ALL) does
not filter out HEAD. This results in two identical CREATE commands for
HEAD which RefTree.apply() refuses to execute.

Fix this by no longer creating a duplicate CREATE command for HEAD.

See: I46cbc2611b9ae683ef7319dc46af277925dfaee5
Change-Id: I58dd6bcdef88820aa7de29761d43e2edfa18fcbe
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/RebuildRefTree.java

index f2ac9456d7729fa2697c9bac4fb6aa05b6e4336a..57345e20dca5f234ebbbaf3c1c569b093480abe2 100644 (file)
@@ -154,7 +154,7 @@ class RebuildRefTree extends TextBuiltin {
                }
 
                for (Ref r : refdb.getRefs(RefDatabase.ALL).values()) {
-                       if (r.getName().equals(txnCommitted)
+                       if (r.getName().equals(txnCommitted) || r.getName().equals(HEAD)
                                        || r.getName().startsWith(txnNamespace)) {
                                continue;
                        }