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());
|
have.addAll(askFor.keySet());
|
||||||
askFor.clear();
|
askFor.clear();
|
||||||
for (final Ref r : additionalTags) {
|
for (final Ref r : additionalTags) {
|
||||||
final ObjectId id = r.getPeeledObjectId();
|
ObjectId id = r.getPeeledObjectId();
|
||||||
if (id == null || transport.local.hasObject(id))
|
if (id == null)
|
||||||
|
id = r.getObjectId();
|
||||||
|
if (transport.local.hasObject(id))
|
||||||
wantTag(r);
|
wantTag(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -347,14 +349,22 @@ private Collection<Ref> expandAutoFollowTags() throws TransportException {
|
||||||
for (final Ref r : conn.getRefs()) {
|
for (final Ref r : conn.getRefs()) {
|
||||||
if (!isTag(r))
|
if (!isTag(r))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
Ref local = haveRefs.get(r.getName());
|
||||||
|
ObjectId obj = r.getObjectId();
|
||||||
|
|
||||||
if (r.getPeeledObjectId() == null) {
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
final Ref local = haveRefs.get(r.getName());
|
|
||||||
if (local != null) {
|
if (local != null) {
|
||||||
if (!r.getObjectId().equals(local.getObjectId()))
|
if (!obj.equals(local.getObjectId()))
|
||||||
wantTag(r);
|
wantTag(r);
|
||||||
} else if (askFor.containsKey(r.getPeeledObjectId())
|
} else if (askFor.containsKey(r.getPeeledObjectId())
|
||||||
|| transport.local.hasObject(r.getPeeledObjectId()))
|
|| transport.local.hasObject(r.getPeeledObjectId()))
|
||||||
|
|
Loading…
Reference in New Issue