Don't auto follow non-annotated tags in fetch
When fetch TagOpt is AUTO_FOLLOW do not follow refs/tags/ names that point directly to commits which are on unreleated side branches. Change-Id: Iea6eee5a05ae7402a7f256fd9c1e3d3b5ccb58dd Reported-by: Slawomir Ginter <sginter@atlassian.com> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
parent
25ba407387
commit
a78b79cc30
|
@ -164,8 +164,10 @@ else if (tagopt == TagOpt.FETCH_TAGS)
|
|||
have.addAll(askFor.keySet());
|
||||
askFor.clear();
|
||||
for (final Ref r : additionalTags) {
|
||||
final ObjectId id = r.getPeeledObjectId();
|
||||
if (id == null || transport.local.hasObject(id))
|
||||
ObjectId id = r.getPeeledObjectId();
|
||||
if (id == null)
|
||||
id = r.getObjectId();
|
||||
if (transport.local.hasObject(id))
|
||||
wantTag(r);
|
||||
}
|
||||
|
||||
|
@ -347,14 +349,22 @@ private Collection<Ref> expandAutoFollowTags() throws TransportException {
|
|||
for (final Ref r : conn.getRefs()) {
|
||||
if (!isTag(r))
|
||||
continue;
|
||||
|
||||
Ref local = haveRefs.get(r.getName());
|
||||
ObjectId obj = r.getObjectId();
|
||||
|
||||
if (r.getPeeledObjectId() == null) {
|
||||
additionalTags.add(r);
|
||||
if (local != null && obj.equals(local.getObjectId()))
|
||||
continue;
|
||||
if (askFor.containsKey(obj) || transport.local.hasObject(obj))
|
||||
wantTag(r);
|
||||
else
|
||||
additionalTags.add(r);
|
||||
continue;
|
||||
}
|
||||
|
||||
final Ref local = haveRefs.get(r.getName());
|
||||
if (local != null) {
|
||||
if (!r.getObjectId().equals(local.getObjectId()))
|
||||
if (!obj.equals(local.getObjectId()))
|
||||
wantTag(r);
|
||||
} else if (askFor.containsKey(r.getPeeledObjectId())
|
||||
|| transport.local.hasObject(r.getPeeledObjectId()))
|
||||
|
|
Loading…
Reference in New Issue