With this we can use short names like master instead of refs/heads/master when pushing. This is slightly more convenient. Pushing a delete still requires the long format. Signed-off-by: Robin Rosenberg <robin.rosenberg@xxxxxxxxxx> --- .../src/org/spearce/jgit/lib/Repository.java | 11 ++++++++++ .../src/org/spearce/jgit/transport/Transport.java | 21 +++++++++++++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java b/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java index 30bd4a3..3ab51b1 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java @@ -928,6 +928,17 @@ public String getBranch() throws IOException { } /** + * Get a ref by name. + * + * @param name + * @return the Ref with the given name, or null if it does not exist + * @throws IOException + */ + public Ref getRef(final String name) throws IOException { + return refs.readRef(name); + } + + /** * @return all known refs (heads, tags, remotes). */ public Map<String, Ref> getAllRefs() { diff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/Transport.java b/org.spearce.jgit/src/org/spearce/jgit/transport/Transport.java index 3aec5ca..64745a8 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/transport/Transport.java +++ b/org.spearce.jgit/src/org/spearce/jgit/transport/Transport.java @@ -51,6 +51,7 @@ import org.spearce.jgit.errors.NotSupportedException; import org.spearce.jgit.errors.TransportException; +import org.spearce.jgit.lib.Constants; import org.spearce.jgit.lib.NullProgressMonitor; import org.spearce.jgit.lib.ProgressMonitor; import org.spearce.jgit.lib.Ref; @@ -243,10 +244,24 @@ else if (TransportLocal.canHandle(remote)) final Collection<RefSpec> procRefs = expandPushWildcardsFor(db, specs); for (final RefSpec spec : procRefs) { - final String srcRef = spec.getSource(); + String srcRef = spec.getSource(); + final Ref src = db.getRef(srcRef); + if (src != null) + srcRef = src.getName(); + String remoteName = spec.getDestination(); // null destination (no-colon in ref-spec) is a special case - final String remoteName = (spec.getDestination() == null ? spec - .getSource() : spec.getDestination()); + if (remoteName == null) { + remoteName = srcRef; + } else { + if (!remoteName.startsWith(Constants.R_REFS)) { + // null source is another special case (delete) + if (srcRef != null) { + // assume the same type of ref at the destination + String srcPrefix = srcRef.substring(0, srcRef.indexOf('/', Constants.R_REFS.length())); + remoteName = srcPrefix + "/" + remoteName; + } + } + } final boolean forceUpdate = spec.isForceUpdate(); final String localName = findTrackingRefName(remoteName, fetchSpecs); -- 1.6.1.285.g35d8b -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html