diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchProcess.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchProcess.java index db08b0608..17c2d5f86 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchProcess.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchProcess.java @@ -164,8 +164,10 @@ class FetchProcess { 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 @@ class FetchProcess { 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()))