aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommit.java
diff options
context:
space:
mode:
authorShawn O. Pearce <spearce@spearce.org>2010-08-20 09:32:07 -0700
committerShawn O. Pearce <spearce@spearce.org>2010-08-20 17:38:53 -0700
commitb205597b91027bf56ef9e7a6398c3037f662feb2 (patch)
treee30581f92e7a16f4be2bd539be3bb2c4340173d9 /org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommit.java
parent707912b35d3375ea70808e176e028aa086d01451 (diff)
downloadjgit-b205597b91027bf56ef9e7a6398c3037f662feb2.tar.gz
jgit-b205597b91027bf56ef9e7a6398c3037f662feb2.zip
Add a public RevCommit.parse() method
Callers might have a canonical commit encoding on hand that they wish to convert into a clean structure for presentation purposes, and the object may not be available in a repository. (E.g. maybe its a "draft" commit being written in an editor.) Change-Id: I21759cff337cbbb34dbdde91aec5aa4448a1ef37 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Diffstat (limited to 'org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommit.java')
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommit.java48
1 files changed, 48 insertions, 0 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommit.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommit.java
index 74a51c8a4a..9e018b7a06 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommit.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommit.java
@@ -55,11 +55,59 @@ import org.eclipse.jgit.errors.MissingObjectException;
import org.eclipse.jgit.lib.AnyObjectId;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.MutableObjectId;
+import org.eclipse.jgit.lib.ObjectInserter;
+import org.eclipse.jgit.lib.ObjectReader;
import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.util.RawParseUtils;
/** A commit reference to a commit in the DAG. */
public class RevCommit extends RevObject {
+ /**
+ * Parse a commit from its canonical format.
+ *
+ * This method constructs a temporary revision pool, parses the commit as
+ * supplied, and returns it to the caller. Since the commit was built inside
+ * of a private revision pool its parent pointers will be initialized, but
+ * will not have their headers loaded.
+ *
+ * Applications are discouraged from using this API. Callers usually need
+ * more than one commit. Use {@link RevWalk#parseCommit(AnyObjectId)} to
+ * obtain a RevCommit from an existing repository.
+ *
+ * @param raw
+ * the canonical formatted commit to be parsed.
+ * @return the parsed commit, in an isolated revision pool that is not
+ * available to the caller.
+ */
+ public static RevCommit parse(byte[] raw) {
+ return parse(new RevWalk((ObjectReader) null), raw);
+ }
+
+ /**
+ * Parse a commit from its canonical format.
+ *
+ * This method inserts the commit directly into the caller supplied revision
+ * pool, making it appear as though the commit exists in the repository,
+ * even if it doesn't. The repository under the pool is not affected.
+ *
+ * @param rw
+ * the revision pool to allocate the commit within. The commit's
+ * tree and parent pointers will be obtained from this pool.
+ * @param raw
+ * the canonical formatted commit to be parsed.
+ * @return the parsed commit, in an isolated revision pool that is not
+ * available to the caller.
+ */
+ public static RevCommit parse(RevWalk rw, byte[] raw) {
+ ObjectInserter.Formatter fmt = new ObjectInserter.Formatter();
+ boolean retain = rw.isRetainBody();
+ rw.setRetainBody(true);
+ RevCommit r = rw.lookupCommit(fmt.idFor(Constants.OBJ_COMMIT, raw));
+ r.parseCanonical(rw, raw);
+ rw.setRetainBody(retain);
+ return r;
+ }
+
static final RevCommit[] NO_PARENTS = {};
private RevTree tree;