Replace manual peel loops with RevWalk.peel
Instead of peeling things by hand in application level code, defer the peeling logic into RevWalk's new peel utility method. Change-Id: Idabd10dc41502e782f6a2eeb56f09566b97775a8 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
parent
599c0ce745
commit
47c07e1a0d
|
@ -409,12 +409,8 @@ public Ref peel(final Ref ref) throws IOException {
|
|||
RevObject obj = rw.parseAny(leaf.getObjectId());
|
||||
ObjectIdRef newLeaf;
|
||||
if (obj instanceof RevTag) {
|
||||
do {
|
||||
obj = rw.parseAny(((RevTag) obj).getObject());
|
||||
} while (obj instanceof RevTag);
|
||||
|
||||
newLeaf = new ObjectIdRef.PeeledTag(leaf.getStorage(), leaf
|
||||
.getName(), leaf.getObjectId(), obj.copy());
|
||||
.getName(), leaf.getObjectId(), rw.peel(obj).copy());
|
||||
} else {
|
||||
newLeaf = new ObjectIdRef.PeeledNonTag(leaf.getStorage(), leaf
|
||||
.getName(), leaf.getObjectId());
|
||||
|
|
|
@ -659,11 +659,7 @@ public RevObject lookupAny(final AnyObjectId id, final int type) {
|
|||
public RevCommit parseCommit(final AnyObjectId id)
|
||||
throws MissingObjectException, IncorrectObjectTypeException,
|
||||
IOException {
|
||||
RevObject c = parseAny(id);
|
||||
while (c instanceof RevTag) {
|
||||
c = ((RevTag) c).getObject();
|
||||
parseHeaders(c);
|
||||
}
|
||||
RevObject c = peel(parseAny(id));
|
||||
if (!(c instanceof RevCommit))
|
||||
throw new IncorrectObjectTypeException(id.toObjectId(),
|
||||
Constants.TYPE_COMMIT);
|
||||
|
@ -690,11 +686,7 @@ public RevCommit parseCommit(final AnyObjectId id)
|
|||
public RevTree parseTree(final AnyObjectId id)
|
||||
throws MissingObjectException, IncorrectObjectTypeException,
|
||||
IOException {
|
||||
RevObject c = parseAny(id);
|
||||
while (c instanceof RevTag) {
|
||||
c = ((RevTag) c).getObject();
|
||||
parseHeaders(c);
|
||||
}
|
||||
RevObject c = peel(parseAny(id));
|
||||
|
||||
final RevTree t;
|
||||
if (c instanceof RevCommit)
|
||||
|
@ -802,6 +794,29 @@ public void parseBody(final RevObject obj)
|
|||
obj.parseBody(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Peel back annotated tags until a non-tag object is found.
|
||||
*
|
||||
* @param obj
|
||||
* the starting object.
|
||||
* @return If {@code obj} is not an annotated tag, {@code obj}. Otherwise
|
||||
* the first non-tag object that {@code obj} references. The
|
||||
* returned object's headers have been parsed.
|
||||
* @throws MissingObjectException
|
||||
* a referenced object cannot be found.
|
||||
* @throws IOException
|
||||
* a pack file or loose object could not be read.
|
||||
*/
|
||||
public RevObject peel(RevObject obj) throws MissingObjectException,
|
||||
IOException {
|
||||
while (obj instanceof RevTag) {
|
||||
parseHeaders(obj);
|
||||
obj = ((RevTag) obj).getObject();
|
||||
}
|
||||
parseHeaders(obj);
|
||||
return obj;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new flag for application use during walking.
|
||||
* <p>
|
||||
|
|
|
@ -84,7 +84,6 @@
|
|||
import org.eclipse.jgit.revwalk.RevCommit;
|
||||
import org.eclipse.jgit.revwalk.RevFlag;
|
||||
import org.eclipse.jgit.revwalk.RevObject;
|
||||
import org.eclipse.jgit.revwalk.RevTag;
|
||||
import org.eclipse.jgit.revwalk.RevTree;
|
||||
import org.eclipse.jgit.revwalk.RevWalk;
|
||||
import org.eclipse.jgit.transport.ReceiveCommand.Result;
|
||||
|
@ -818,8 +817,7 @@ private void checkConnectivity() throws IOException {
|
|||
ow.markUninteresting(o);
|
||||
|
||||
if (checkReferencedIsReachable && !baseObjects.isEmpty()) {
|
||||
while (o instanceof RevTag)
|
||||
o = ((RevTag) o).getObject();
|
||||
o = ow.peel(o);
|
||||
if (o instanceof RevCommit)
|
||||
o = ((RevCommit) o).getTree();
|
||||
if (o instanceof RevTree)
|
||||
|
|
|
@ -56,6 +56,7 @@
|
|||
import java.util.Set;
|
||||
|
||||
import org.eclipse.jgit.JGitText;
|
||||
import org.eclipse.jgit.errors.MissingObjectException;
|
||||
import org.eclipse.jgit.errors.PackProtocolException;
|
||||
import org.eclipse.jgit.lib.NullProgressMonitor;
|
||||
import org.eclipse.jgit.lib.ObjectId;
|
||||
|
@ -393,11 +394,15 @@ private void recvWants() throws IOException {
|
|||
}
|
||||
if (!o.has(ADVERTISED))
|
||||
throw new PackProtocolException(MessageFormat.format(JGitText.get().notValid, id.name()));
|
||||
try {
|
||||
want(o);
|
||||
} catch (IOException e) {
|
||||
throw new PackProtocolException(MessageFormat.format(JGitText.get().notValid, id.name()), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void want(RevObject o) {
|
||||
private void want(RevObject o) throws MissingObjectException, IOException {
|
||||
if (!o.has(WANT)) {
|
||||
o.add(WANT);
|
||||
wantAll.add(o);
|
||||
|
@ -406,9 +411,7 @@ private void want(RevObject o) {
|
|||
wantCommits.add((RevCommit) o);
|
||||
|
||||
else if (o instanceof RevTag) {
|
||||
do {
|
||||
o = ((RevTag) o).getObject();
|
||||
} while (o instanceof RevTag);
|
||||
o = walk.peel(o);
|
||||
if (o instanceof RevCommit)
|
||||
want(o);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue