push: allow unqualified dest refspecs to DWIM
commitf8aae120345f511e59bb008e8de2a8f6e65cf377
authorJeff King <peff@peff.net>
Wed, 23 Apr 2008 09:16:06 +0000 (23 05:16 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 25 Apr 2008 05:13:24 +0000 (24 22:13 -0700)
tree5055975a63267eabbb40ce30d630dd5bd402e03a
parent31c6390d40fe12a46c38d7224da61c6771886f2a
push: allow unqualified dest refspecs to DWIM

Previously, a push like:

  git push remote src:dst

would go through the following steps:

  1. check for an unambiguous 'dst' on the remote; if it
     exists, then push to that ref
  2. otherwise, check if 'dst' begins with 'refs/'; if it
     does, create a new ref
  3. otherwise, complain because we don't know where in the
     refs hierarchy to put 'dst'

However, in some cases, we can guess about the ref type of
'dst' based on the ref type of 'src'. Specifically, before
complaining we now check:

  2.5. if 'src' resolves to a ref starting with refs/heads
       or refs/tags, then prepend that to 'dst'

So now this creates a new branch on the remote, whereas it
previously failed with an error message:

  git push master:newbranch

Note that, by design, we limit this DWIM behavior only to
source refs which resolve exactly (including symrefs which
resolve to existing refs). We still complain on a partial
destination refspec if the source is a raw sha1, or a ref
expression such as 'master~10'.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
remote.c
t/t5516-fetch-push.sh