diff options
author | Shawn O. Pearce <spearce@spearce.org> | 2010-08-20 08:53:46 -0700 |
---|---|---|
committer | Shawn O. Pearce <spearce@spearce.org> | 2010-08-20 17:38:52 -0700 |
commit | b46b635c0389e01a55b2f9c490e5b6c54a8ce640 (patch) | |
tree | 582ff9587b75eb820e74188563d1c1d39c04d398 /org.eclipse.jgit.pgm | |
parent | cf9537c8ceeed05b2cc7f996009d9f2f18623782 (diff) | |
download | jgit-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.java | 28 | ||||
-rw-r--r-- | org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/RebuildCommitGraph.java | 17 |
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(); } |