From: Robin Rosenberg <robin.rosenberg@dewire.com>
To: spearce@spearce.org
Cc: git@vger.kernel.org, Daniel Cheng <j16sdiz+freenet@gmail.com>,
Robin Rosenberg <robin.rosenberg@dewire.com>
Subject: [EGIT PATCH] Evaluate short refnames into full names during push
Date: Sat, 7 Mar 2009 23:18:19 +0100 [thread overview]
Message-ID: <1236464299-11491-1-git-send-email-robin.rosenberg@dewire.com> (raw)
In-Reply-To: <20090307211008.GP16213@spearce.org>
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@dewire.com>
---
.../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
next prev parent reply other threads:[~2009-03-07 22:19 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-07 16:05 [JGit] Push to new Amazon S3 does not work? ("funny refname") Daniel Cheng
2009-03-07 17:50 ` Robin Rosenberg
2009-03-07 21:10 ` Shawn O. Pearce
2009-03-07 22:18 ` Robin Rosenberg [this message]
2009-03-07 22:48 ` [EGIT PATCH] Evaluate short refnames into full names during push Shawn O. Pearce
2009-03-08 15:21 ` [EGIT PATCH] Prevent an exception if the user tries to push a non-existing ref Robin Rosenberg
2009-03-09 15:50 ` Shawn O. Pearce
2009-03-09 21:29 ` Robin Rosenberg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1236464299-11491-1-git-send-email-robin.rosenberg@dewire.com \
--to=robin.rosenberg@dewire.com \
--cc=git@vger.kernel.org \
--cc=j16sdiz+freenet@gmail.com \
--cc=spearce@spearce.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).