Jeff King [off-list ref] writes:
Instead, we can just be more succinct and say "we can't
delete this because we couldn't find it". So before:
$ git push origin :bogus
error: unable to push to unqualified destination: bogus
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to '$URL'
and now:
$ git push origin :bogus
error: unable to delete 'bogus': remote ref does not exist
error: failed to push some refs to '$URL'
This is telling a truth ($GIT_DIR/refs/bogus does not exist) but not
the whole truth; while I tend to agree that it is better than the
original (especially with ", and we are unable to guess..." part),
given that the above request would delete refs/tags/bogus or
refs/heads/bogus if they existed on the "origin", I am a bit worried
that it may send an incorrect message to novice users.
unable to delete 'bogus': no branch or tag with that name
might allay my worries, but I am not extremely happy with that
wording, either.
I think this would help. I used "remote ref does not exist"
because that is the simplest explanation for the user.
However, given that we will try to push a fully qualified
ref that does not exist, a more accurate message might
"destination refspec did not match" or something similar. I
prefer the former, though, as it less arcane.
Yeah, I do understand why you phrased that way, but still..
On Tue, Jul 03, 2012 at 12:38:10PM -0700, Junio C Hamano wrote:
Jeff King [off-list ref] writes:
quoted
Instead, we can just be more succinct and say "we can't
delete this because we couldn't find it". So before:
$ git push origin :bogus
error: unable to push to unqualified destination: bogus
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to '$URL'
and now:
$ git push origin :bogus
error: unable to delete 'bogus': remote ref does not exist
error: failed to push some refs to '$URL'
This is telling a truth ($GIT_DIR/refs/bogus does not exist) but not
the whole truth; while I tend to agree that it is better than the
original (especially with ", and we are unable to guess..." part),
given that the above request would delete refs/tags/bogus or
refs/heads/bogus if they existed on the "origin", I am a bit worried
that it may send an incorrect message to novice users.
unable to delete 'bogus': no branch or tag with that name
might allay my worries, but I am not extremely happy with that
wording, either.
I think the most accurate explanation of the behavior is "the
destination refspec does not match an existing ref, and it is not fully
qualified, so I didn't know what you meant to delete". But that is a
pretty awful message (only slightly less awful than the original one,
but I think that one is pretty bad).
The really interesting part is that we tried to match "bogus" against
all of the usual ref lookup rules, and it didn't match anything. But we
have the same issue when we say "git show bogus" and it does not match
anything, and we simply say "bad revision 'bogus'".
Maybe:
unable to delete 'bogus': no matching remote ref found
would be a reasonably short way of saying that?
That still leaves out the second half, that it was not fully qualified
and therefore we could not even transmit an attempt to delete (even
though that attempt would clearly not succeed!). But that is really not
a subtlety that I think is worth putting in the error message, as it is
way more likely to confuse somebody.
-Peff