summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.pgm
diff options
context:
space:
mode:
authorShawn O. Pearce <spearce@spearce.org>2010-08-20 08:53:46 -0700
committerShawn O. Pearce <spearce@spearce.org>2010-08-20 17:38:52 -0700
commitb46b635c0389e01a55b2f9c490e5b6c54a8ce640 (patch)
tree582ff9587b75eb820e74188563d1c1d39c04d398 /org.eclipse.jgit.pgm
parentcf9537c8ceeed05b2cc7f996009d9f2f18623782 (diff)
downloadjgit-b46b635c0389e01a55b2f9c490e5b6c54a8ce640.tar.gz
jgit-b46b635c0389e01a55b2f9c490e5b6c54a8ce640.zip
Make Commit class only for writing
The Commit class now only supports the creation of a commit object. To read a commit, applictions should use RevCommit. This permits us to have exactly one implementation, and RevCommit's is faster and more bug-free. Change-Id: Ib573f7e15f36855112815269385c21dea532e2cf Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Diffstat (limited to 'org.eclipse.jgit.pgm')
-rw-r--r--org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java28
-rw-r--r--org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/RebuildCommitGraph.java17
2 files changed, 31 insertions, 14 deletions
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java
index 22302bba81..1b1a8c28e8 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java
@@ -51,11 +51,10 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-import org.kohsuke.args4j.Argument;
-import org.kohsuke.args4j.Option;
+import org.eclipse.jgit.errors.IncorrectObjectTypeException;
+import org.eclipse.jgit.errors.MissingObjectException;
import org.eclipse.jgit.errors.NotSupportedException;
import org.eclipse.jgit.errors.TransportException;
-import org.eclipse.jgit.lib.Commit;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.GitIndex;
import org.eclipse.jgit.lib.Ref;
@@ -64,12 +63,16 @@ import org.eclipse.jgit.lib.RefUpdate;
import org.eclipse.jgit.lib.TextProgressMonitor;
import org.eclipse.jgit.lib.Tree;
import org.eclipse.jgit.lib.WorkDirCheckout;
+import org.eclipse.jgit.revwalk.RevCommit;
+import org.eclipse.jgit.revwalk.RevWalk;
import org.eclipse.jgit.storage.file.FileRepository;
import org.eclipse.jgit.transport.FetchResult;
import org.eclipse.jgit.transport.RefSpec;
import org.eclipse.jgit.transport.RemoteConfig;
import org.eclipse.jgit.transport.Transport;
import org.eclipse.jgit.transport.URIish;
+import org.kohsuke.args4j.Argument;
+import org.kohsuke.args4j.Option;
@Command(common = true, usage = "usage_cloneRepositoryIntoNewDir")
class Clone extends AbstractFetchCommand {
@@ -174,17 +177,30 @@ class Clone extends AbstractFetchCommand {
u.link(branch.getName());
}
- final Commit commit = db.mapCommit(branch.getObjectId());
+ final RevCommit commit = parseCommit(branch);
final RefUpdate u = db.updateRef(Constants.HEAD);
- u.setNewObjectId(commit.getCommitId());
+ u.setNewObjectId(commit);
u.forceUpdate();
final GitIndex index = new GitIndex(db);
- final Tree tree = commit.getTree();
+ final Tree tree = db.mapTree(commit.getTree());
final WorkDirCheckout co;
co = new WorkDirCheckout(db, db.getWorkTree(), index, tree);
co.checkout();
index.write();
}
+
+ private RevCommit parseCommit(final Ref branch)
+ throws MissingObjectException, IncorrectObjectTypeException,
+ IOException {
+ final RevWalk rw = new RevWalk(db);
+ final RevCommit commit;
+ try {
+ commit = rw.parseCommit(branch.getObjectId());
+ } finally {
+ rw.release();
+ }
+ return commit;
+ }
} \ No newline at end of file
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/RebuildCommitGraph.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/RebuildCommitGraph.java
index b8e2a8f6fa..e0a7433564 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/RebuildCommitGraph.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/RebuildCommitGraph.java
@@ -56,26 +56,25 @@ import java.util.List;
import java.util.ListIterator;
import java.util.Map;
-import org.kohsuke.args4j.Argument;
-import org.kohsuke.args4j.Option;
import org.eclipse.jgit.errors.MissingObjectException;
import org.eclipse.jgit.errors.ObjectWritingException;
import org.eclipse.jgit.lib.Commit;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.ObjectIdRef;
-import org.eclipse.jgit.lib.ObjectWriter;
+import org.eclipse.jgit.lib.ObjectInserter;
import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.lib.ProgressMonitor;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.RefUpdate;
import org.eclipse.jgit.lib.RefWriter;
import org.eclipse.jgit.lib.TextProgressMonitor;
-import org.eclipse.jgit.lib.Tree;
import org.eclipse.jgit.pgm.CLIText;
import org.eclipse.jgit.pgm.TextBuiltin;
import org.eclipse.jgit.revwalk.RevWalk;
import org.eclipse.jgit.storage.file.LockFile;
+import org.kohsuke.args4j.Argument;
+import org.kohsuke.args4j.Option;
/**
* Recreates a repository from another one's commit graph.
@@ -164,8 +163,8 @@ class RebuildCommitGraph extends TextBuiltin {
}
pm.beginTask("Rewriting commits", queue.size());
- final ObjectWriter ow = new ObjectWriter(db);
- final ObjectId emptyTree = ow.writeTree(new Tree(db));
+ final ObjectInserter oi = db.newObjectInserter();
+ final ObjectId emptyTree = oi.insert(Constants.OBJ_TREE, new byte[] {});
final PersonIdent me = new PersonIdent("jgit rebuild-commitgraph",
"rebuild-commitgraph@localhost");
while (!queue.isEmpty()) {
@@ -192,17 +191,19 @@ class RebuildCommitGraph extends TextBuiltin {
}
}
- final Commit newc = new Commit(db);
+ final Commit newc = new Commit();
newc.setTreeId(emptyTree);
newc.setAuthor(new PersonIdent(me, new Date(t.commitTime)));
newc.setCommitter(newc.getAuthor());
newc.setParentIds(newParents);
newc.setMessage("ORIGINAL " + t.oldId.name() + "\n");
- t.newId = ow.writeCommit(newc);
+ t.newId = oi.insert(Constants.OBJ_COMMIT,oi.format(newc));
rewrites.put(t.oldId, t.newId);
pm.update(1);
}
}
+ oi.flush();
+ oi.release();
pm.endTask();
}