c.setMessage("");
ObjectId id;
try {
- id = inserter.insert(Constants.OBJ_COMMIT, inserter.format(c));
+ id = inserter.insert(c);
inserter.flush();
} finally {
inserter.release();
t.setMessage("");
ObjectId id;
try {
- id = inserter.insert(Constants.OBJ_TAG, inserter.format(t));
+ id = inserter.insert(t);
inserter.flush();
} finally {
inserter.release();
ObjectId commitId;
try {
c.setTreeId(tree.writeTree(inserter));
- commitId = inserter.insert(Constants.OBJ_COMMIT, inserter
- .format(c));
+ commitId = inserter.insert(c);
inserter.flush();
} finally {
inserter.release();
tag.setTagger(new PersonIdent(db));
tag.setMessage(message.replaceAll("\r", ""));
tag.setTag(shortName);
- id = inserter.insert(Constants.OBJ_TAG, inserter.format(tag));
+ id = inserter.insert(tag);
inserter.flush();
} finally {
inserter.release();
newc.setCommitter(newc.getAuthor());
newc.setParentIds(newParents);
newc.setMessage("ORIGINAL " + t.oldId.name() + "\n");
- t.newId = oi.insert(Constants.OBJ_COMMIT,oi.format(newc));
+ t.newId = oi.insert(newc);
rewrites.put(t.oldId, t.newId);
pm.update(1);
}
package org.eclipse.jgit.merge;
import static org.eclipse.jgit.lib.Constants.OBJ_BLOB;
-import static org.eclipse.jgit.lib.Constants.OBJ_COMMIT;
import org.eclipse.jgit.dircache.DirCache;
import org.eclipse.jgit.dircache.DirCacheBuilder;
c.setCommitter(c.getAuthor());
c.setParentIds(parentIds);
c.setMessage("Tree " + c.getTreeId().name());
- ObjectId id = odi.insert(OBJ_COMMIT, odi.format(c));
+ ObjectId id = odi.insert(c);
odi.flush();
return id;
}
package org.eclipse.jgit.merge;
import static org.eclipse.jgit.lib.Constants.OBJ_BLOB;
-import static org.eclipse.jgit.lib.Constants.OBJ_COMMIT;
import java.io.IOException;
c.setCommitter(c.getAuthor());
c.setParentIds(parentIds);
c.setMessage("Tree " + c.getTreeId().name());
- ObjectId id = odi.insert(OBJ_COMMIT, odi.format(c));
+ ObjectId id = odi.insert(c);
odi.flush();
return id;
}
src.setCommitter(committer);
src.setMessage("Test commit\n\nThis is a test.\n");
- RevCommit p = RevCommit.parse(fmt.format(src));
+ RevCommit p = RevCommit.parse(src.format());
assertEquals(src.getTreeId(), p.getTree());
assertEquals(0, p.getParentCount());
assertEquals(author, p.getAuthorIdent());
src.setTag("a.test");
src.setMessage("Test tag\n\nThis is a test.\n");
- RevTag p = RevTag.parse(fmt.format(src));
+ RevTag p = RevTag.parse(src.format());
assertEquals(src.getObjectId(), p.getObject());
assertEquals(committer, p.getTaggerIdent());
assertEquals("a.test", p.getTagName());
}
- private ObjectId insertCommit(final CommitBuilder commit) throws IOException,
+ private ObjectId insertCommit(final CommitBuilder builder) throws IOException,
UnsupportedEncodingException {
ObjectInserter oi = db.newObjectInserter();
try {
- ObjectId id = oi.insert(Constants.OBJ_COMMIT, oi.format(commit));
+ ObjectId id = oi.insert(builder);
oi.flush();
- commit.setCommitId(id);
return id;
} finally {
oi.release();
UnsupportedEncodingException {
ObjectInserter oi = db.newObjectInserter();
try {
- ObjectId id = oi.insert(Constants.OBJ_TAG, oi.format(tag));
+ ObjectId id = oi.insert(tag);
oi.flush();
- tag.setTagId(id);
return id;
} finally {
oi.release();
commit.setParentIds(parents);
commit.setTreeId(indexTreeId);
- ObjectId commitId = odi.insert(Constants.OBJ_COMMIT, odi
- .format(commit));
+ ObjectId commitId = odi.insert(commit);
odi.flush();
RevWalk revWalk = new RevWalk(repo);
package org.eclipse.jgit.lib;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.List;
public class CommitBuilder {
private static final ObjectId[] EMPTY_OBJECTID_LIST = new ObjectId[0];
+ private static final byte[] htree = Constants.encodeASCII("tree");
+
+ private static final byte[] hparent = Constants.encodeASCII("parent");
+
+ private static final byte[] hauthor = Constants.encodeASCII("author");
+
+ private static final byte[] hcommitter = Constants.encodeASCII("committer");
+
+ private static final byte[] hencoding = Constants.encodeASCII("encoding");
+
private ObjectId commitId;
private ObjectId treeId;
return encoding;
}
+ /**
+ * Format this builder's state as a commit object.
+ *
+ * As a side effect, {@link #getCommitId()} will be populated with the
+ * proper ObjectId for the formatted content.
+ *
+ * @return this object in the canonical commit format, suitable for storage
+ * in a repository.
+ * @throws UnsupportedEncodingException
+ * the encoding specified by {@link #getEncoding()} is not
+ * supported by this Java runtime.
+ */
+ public byte[] format() throws UnsupportedEncodingException {
+ return format(new ObjectInserter.Formatter());
+ }
+
+ /**
+ * Format this builder's state as a commit object.
+ *
+ * As a side effect, {@link #getCommitId()} will be populated with the
+ * proper ObjectId for the formatted content.
+ *
+ * @param oi
+ * the inserter whose formatting support will be reused. The
+ * inserter itself is not affected, and the commit is not
+ * actually inserted into the repository.
+ * @return this object in the canonical commit format, suitable for storage
+ * in a repository.
+ * @throws UnsupportedEncodingException
+ * the encoding specified by {@link #getEncoding()} is not
+ * supported by this Java runtime.
+ */
+ public byte[] format(ObjectInserter oi) throws UnsupportedEncodingException {
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ OutputStreamWriter w = new OutputStreamWriter(os, getEncoding());
+ try {
+ os.write(htree);
+ os.write(' ');
+ getTreeId().copyTo(os);
+ os.write('\n');
+
+ for (ObjectId p : getParentIds()) {
+ os.write(hparent);
+ os.write(' ');
+ p.copyTo(os);
+ os.write('\n');
+ }
+
+ os.write(hauthor);
+ os.write(' ');
+ w.write(getAuthor().toExternalString());
+ w.flush();
+ os.write('\n');
+
+ os.write(hcommitter);
+ os.write(' ');
+ w.write(getCommitter().toExternalString());
+ w.flush();
+ os.write('\n');
+
+ if (getEncoding() != Constants.CHARSET) {
+ os.write(hencoding);
+ os.write(' ');
+ os.write(Constants.encodeASCII(getEncoding().name()));
+ os.write('\n');
+ }
+
+ os.write('\n');
+
+ if (getMessage() != null) {
+ w.write(getMessage());
+ w.flush();
+ }
+ } catch (IOException err) {
+ // This should never occur, the only way to get it above is
+ // for the ByteArrayOutputStream to throw, but it doesn't.
+ //
+ throw new RuntimeException(err);
+ }
+
+ byte[] content = os.toByteArray();
+ setCommitId(oi.idFor(Constants.OBJ_COMMIT, content));
+ return content;
+ }
+
@Override
public String toString() {
StringBuilder r = new StringBuilder();
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
-import java.io.OutputStreamWriter;
-import java.io.UnsupportedEncodingException;
-import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.text.MessageFormat;
* otherwise making the returned ObjectIds visible to other code.
*/
public abstract class ObjectInserter {
- private static final byte[] htree = Constants.encodeASCII("tree");
-
- private static final byte[] hparent = Constants.encodeASCII("parent");
-
- private static final byte[] hauthor = Constants.encodeASCII("author");
-
- private static final byte[] hcommitter = Constants.encodeASCII("committer");
-
- private static final byte[] hencoding = Constants.encodeASCII("encoding");
-
/** An inserter that can be used for formatting and id generation only. */
public static class Formatter extends ObjectInserter {
@Override
return ObjectId.fromRaw(md.digest());
}
+ /**
+ * Insert a single commit into the store, returning its unique name.
+ *
+ * As a side effect, {@link CommitBuilder#getCommitId()} will also be
+ * populated with the returned ObjectId.
+ *
+ * @param builder
+ * the builder containing the proposed commit's data.
+ * @return the name of the commit object.
+ * @throws IOException
+ * the object could not be stored.
+ */
+ public final ObjectId insert(CommitBuilder builder) throws IOException {
+ return insert(Constants.OBJ_COMMIT, builder.format(this));
+ }
+
+ /**
+ * Insert a single annotated tag into the store, returning its unique name.
+ *
+ * As a side effect, {@link TagBuilder#getTagId()} will also be populated
+ * with the returned ObjectId.
+ *
+ * @param builder
+ * the builder containing the proposed tag's data.
+ * @return the name of the tag object.
+ * @throws IOException
+ * the object could not be stored.
+ */
+ public final ObjectId insert(TagBuilder builder) throws IOException {
+ return insert(Constants.OBJ_TAG, builder.format(this));
+ }
+
/**
* Insert a single object into the store, returning its unique name.
*
}
return o.toByteArray();
}
-
- /**
- * Format a Commit in canonical format.
- *
- * @param commit
- * the commit object to format
- * @return canonical encoding of the commit object.
- * @throws UnsupportedEncodingException
- * the commit's chosen encoding isn't supported on this JVM.
- */
- public final byte[] format(CommitBuilder commit)
- throws UnsupportedEncodingException {
- Charset encoding = commit.getEncoding();
- ByteArrayOutputStream os = new ByteArrayOutputStream();
- OutputStreamWriter w = new OutputStreamWriter(os, encoding);
- try {
- os.write(htree);
- os.write(' ');
- commit.getTreeId().copyTo(os);
- os.write('\n');
-
- for (ObjectId p : commit.getParentIds()) {
- os.write(hparent);
- os.write(' ');
- p.copyTo(os);
- os.write('\n');
- }
-
- os.write(hauthor);
- os.write(' ');
- w.write(commit.getAuthor().toExternalString());
- w.flush();
- os.write('\n');
-
- os.write(hcommitter);
- os.write(' ');
- w.write(commit.getCommitter().toExternalString());
- w.flush();
- os.write('\n');
-
- if (encoding != Constants.CHARSET) {
- os.write(hencoding);
- os.write(' ');
- os.write(Constants.encodeASCII(encoding.name()));
- os.write('\n');
- }
-
- os.write('\n');
-
- if (commit.getMessage() != null) {
- w.write(commit.getMessage());
- w.flush();
- }
- } catch (IOException err) {
- // This should never occur, the only way to get it above is
- // for the ByteArrayOutputStream to throw, but it doesn't.
- //
- throw new RuntimeException(err);
- }
- return os.toByteArray();
- }
-
- /**
- * Format a Tag in canonical format.
- *
- * @param tag
- * the tag object to format
- * @return canonical encoding of the tag object.
- */
- public final byte[] format(TagBuilder tag) {
- ByteArrayOutputStream os = new ByteArrayOutputStream();
- OutputStreamWriter w = new OutputStreamWriter(os, Constants.CHARSET);
- try {
- w.write("object ");
- tag.getObjectId().copyTo(w);
- w.write('\n');
-
- w.write("type ");
- w.write(Constants.typeString(tag.getObjectType()));
- w.write("\n");
-
- w.write("tag ");
- w.write(tag.getTag());
- w.write("\n");
-
- if (tag.getTagger() != null) {
- w.write("tagger ");
- w.write(tag.getTagger().toExternalString());
- w.write('\n');
- }
-
- w.write('\n');
- if (tag.getMessage() != null)
- w.write(tag.getMessage());
- w.close();
- } catch (IOException err) {
- // This should never occur, the only way to get it above is
- // for the ByteArrayOutputStream to throw, but it doesn't.
- //
- throw new RuntimeException(err);
- }
- return os.toByteArray();
- }
}
package org.eclipse.jgit.lib;
import static org.eclipse.jgit.lib.Constants.OBJ_BLOB;
-import static org.eclipse.jgit.lib.Constants.OBJ_COMMIT;
-import static org.eclipse.jgit.lib.Constants.OBJ_TAG;
import static org.eclipse.jgit.lib.Constants.OBJ_TREE;
import java.io.File;
*/
public ObjectId writeCommit(CommitBuilder commit) throws IOException {
try {
- ObjectId id = inserter.insert(OBJ_COMMIT, inserter.format(commit));
+ ObjectId id = inserter.insert(commit);
inserter.flush();
return id;
} finally {
*/
public ObjectId writeTag(TagBuilder tag) throws IOException {
try {
- ObjectId id = inserter.insert(OBJ_TAG, inserter.format(tag));
+ ObjectId id = inserter.insert(tag);
inserter.flush();
return id;
} finally {
package org.eclipse.jgit.lib;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+
import org.eclipse.jgit.revwalk.RevObject;
/**
tagId = null;
}
+ /**
+ * Format this builder's state as an annotated tag object.
+ *
+ * As a side effect, {@link #getTagId()} will be populated with the proper
+ * ObjectId for the formatted content.
+ *
+ * @return this object in the canonical annotated tag format, suitable for
+ * storage in a repository.
+ */
+ public byte[] format() {
+ return format(new ObjectInserter.Formatter());
+ }
+
+ /**
+ * Format this builder's state as an annotated tag object.
+ *
+ * As a side effect, {@link #getTagId()} will be populated with the proper
+ * ObjectId for the formatted content.
+ *
+ * @param oi
+ * the inserter whose formatting support will be reused. The
+ * inserter itself is not affected, and the annotated tag is not
+ * actually inserted into the repository.
+ * @return this object in the canonical annotated tag format, suitable for
+ * storage in a repository.
+ */
+ public byte[] format(ObjectInserter oi) {
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ OutputStreamWriter w = new OutputStreamWriter(os, Constants.CHARSET);
+ try {
+ w.write("object ");
+ getObjectId().copyTo(w);
+ w.write('\n');
+
+ w.write("type ");
+ w.write(Constants.typeString(getObjectType()));
+ w.write("\n");
+
+ w.write("tag ");
+ w.write(getTag());
+ w.write("\n");
+
+ if (getTagger() != null) {
+ w.write("tagger ");
+ w.write(getTagger().toExternalString());
+ w.write('\n');
+ }
+
+ w.write('\n');
+ if (getMessage() != null)
+ w.write(getMessage());
+ w.close();
+ } catch (IOException err) {
+ // This should never occur, the only way to get it above is
+ // for the ByteArrayOutputStream to throw, but it doesn't.
+ //
+ throw new RuntimeException(err);
+ }
+
+ byte[] content = os.toByteArray();
+ setTagId(oi.idFor(Constants.OBJ_TAG, content));
+ return content;
+ }
+
@Override
public String toString() {
StringBuilder r = new StringBuilder();