After sending out v2 I noticed I didn't update the examples in a
couple of the commit messages, and figured I'd finish this up by
adding a patch to document how this works in the "git-push"
manpage. This behavior has never been properly documented. range-diff
with v2:
1: ca8eb6dc28 = 1: ca8eb6dc28 remote.c: add braces in anticipation of a
follow-up change
2: b0e15b6ff1 = 2: b0e15b6ff1 i18n: remote.c: mark error(...) messages
for translation
3: 052fc5860e = 3: 052fc5860e push: improve the error shown on
unqualified <dst> push
4: e6aa2e360f = 4: e6aa2e360f push: move unqualified refname error into a
function
5: 57840952b2 ! 5: dcf566e16e push: add an advice on unqualified <dst>
push
@@ -13,8 +13,10 @@
error: The destination you provided is not a full refname
(i.e.,
starting with "refs/"). We tried to guess what you meant by:
- - Looking for a ref that matches newbranch on the remote side.
- - Looking at the refname of the local source.
+ - Looking for a ref that matches 'newbranch' on the remote
side.
+ - Checking if the <src> being pushed ('v2.19.0^{commit}')
+ is a ref in "refs/{heads,tags}/". If so we add a
corresponding
+ refs/{heads,tags}/ prefix on the remote side.
Neither worked, so we gave up. You must fully-qualify the ref.
hint: The <src> part of the refspec is a commit object.
6: a2d98855cc = 6: 92ff753437 push: test that <src> doesn't DWYM if <dst>
is unqualified
7: 4e1953da82 ! 7: 58eeb0f3f3 push: add DWYM support for "git push
refs/remotes/...:<dst>"
@@ -3,22 +3,44 @@
push: add DWYM support for "git push refs/remotes/...:<dst>"
Add DWYM support for pushing a ref in refs/remotes/* when the <dst>
- ref is unqualified, e.g.:
+ ref is unqualified. Now instead of erroring out we support e.g.:
- git push origin refs/remotes/origin/master:upstream-master
+ $ ./git-push avar refs/remotes/origin/master:upstream-master -n
+ To github.com:avar/git.git
+ * [new branch] origin/master -> upstream-master
Before this we wouldn't know what do do with
refs/remotes/origin/master, now we'll look it up and discover that
it's a commit (or tag) and add a refs/{heads,tags}/ prefix to
<dst> as
appropriate.
+ The error message emitted when we still don't know what to do has
been
+ amended to note that this is something we tried:
+
+ $ ./git-push avar v2.19.0^{commit}:newbranch -n
+ error: The destination you provided is not a full refname
(i.e.,
+ starting with "refs/"). We tried to guess what you meant by:
+
+ - Looking for a ref that matches 'newbranch' on the remote
side.
+ - Checking if the <src> being pushed ('v2.19.0^{commit}')
+ is a ref in "refs/{heads,tags}/". If so we add a
corresponding
+ refs/{heads,tags}/ prefix on the remote side.
+ - Checking if the <src> being pushed ('v2.19.0^{commit}')
+ is a commit or tag in "refs/remotes/*". Then we infer a
+ corresponding refs/{heads,tags} on the remote side.
+
+ None of those worked, so we gave up. You must fully-qualify
the ref.
+ hint: The <src> part of the refspec is a commit object.
+ hint: Did you mean to create a new branch by pushing to
+ hint: 'v2.19.0^{commit}:refs/heads/newbranch'?
+
I'm bending over backwards and assuming that someone might have
hacked
in remote tracking tags (see [1] for a discussion of how that can
be
done), but punting on any tree or blob objects found under
refs/remotes/*.
This is the first use of the %N$<fmt> style of printf format in
- the *.[ch] files in our codebase, but it's supported by POSIX[2]
and
+ the *.[ch] files in our codebase. It's supported by POSIX[2] and
there's existing uses for it in po/*.po files, so hopefully it
won't
cause any trouble. It's more obvious for translators than to have a
3rd argument to the function identical to the 2nd, by re-using the
2nd
-: ---------- > 8: bc171b0312 push doc: document the DWYM behavior
pushing to unqualified <dst>
Ævar Arnfjörð Bjarmason (8):
remote.c: add braces in anticipation of a follow-up change
i18n: remote.c: mark error(...) messages for translation
push: improve the error shown on unqualified <dst> push
push: move unqualified refname error into a function
push: add an advice on unqualified <dst> push
push: test that <src> doesn't DWYM if <dst> is unqualified
push: add DWYM support for "git push refs/remotes/...:<dst>"
push doc: document the DWYM behavior pushing to unqualified <dst>
Documentation/config.txt | 7 +++
Documentation/git-push.txt | 27 ++++++++
advice.c | 2 +
advice.h | 1 +
remote.c | 124 +++++++++++++++++++++++++++++--------
t/t5505-remote.sh | 57 +++++++++++++++++
6 files changed, 193 insertions(+), 25 deletions(-)
--
2.19.1.759.g500967bb5e