debug-rebuild-ref-tree: Copy HEAD into RefTree
HEAD is not part of getRefs(ALL) and must be copied explicitly. This allows `jgit debug-rebuild-ref-tree --enable` to convert an existing repository to use RefTree with a local working tree: mkdir testRepo cd testRepo jgit init jgit debug-rebuild-ref-tree --enable touch a jgit add a jgit commit -m initial Change-Id: I46cbc2611b9ae683ef7319dc46af277925dfaee5
This commit is contained in:
parent
e1529ced42
commit
14dfa70520
|
@ -43,9 +43,11 @@
|
|||
|
||||
package org.eclipse.jgit.pgm.debug;
|
||||
|
||||
import static org.eclipse.jgit.lib.Constants.HEAD;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.jgit.internal.storage.reftree.RefTree;
|
||||
import org.eclipse.jgit.internal.storage.reftree.RefTreeDatabase;
|
||||
|
@ -108,7 +110,7 @@ protected void run() throws Exception {
|
|||
oldTreeId = ObjectId.zeroId();
|
||||
}
|
||||
|
||||
RefTree tree = rebuild(refDb.getRefs(RefDatabase.ALL));
|
||||
RefTree tree = rebuild(refDb);
|
||||
b.setTreeId(tree.writeTree(inserter));
|
||||
b.setAuthor(new PersonIdent(db));
|
||||
b.setCommitter(b.getAuthor());
|
||||
|
@ -139,12 +141,19 @@ protected void run() throws Exception {
|
|||
}
|
||||
}
|
||||
|
||||
private RefTree rebuild(Map<String, Ref> refMap) {
|
||||
private RefTree rebuild(RefDatabase refdb) throws IOException {
|
||||
RefTree tree = RefTree.newEmptyTree();
|
||||
List<org.eclipse.jgit.internal.storage.reftree.Command> cmds
|
||||
= new ArrayList<>();
|
||||
|
||||
for (Ref r : refMap.values()) {
|
||||
Ref head = refdb.exactRef(HEAD);
|
||||
if (head != null) {
|
||||
cmds.add(new org.eclipse.jgit.internal.storage.reftree.Command(
|
||||
null,
|
||||
head));
|
||||
}
|
||||
|
||||
for (Ref r : refdb.getRefs(RefDatabase.ALL).values()) {
|
||||
if (r.getName().equals(txnCommitted)
|
||||
|| r.getName().startsWith(txnNamespace)) {
|
||||
continue;
|
||||
|
|
Loading…
Reference in New Issue