Ramkumar Ramachandra <artag...@gmail.com> writes:

> Setting push.default to current adds the refspec "HEAD" for the
> transport layer to handle.  If "HEAD" doesn't resolve to a branch (and
> since no refspec rhs is specified), the push fails after some time with
> a cryptic error message:
>
>   $ git push
>   error: unable to push to unqualified destination: HEAD
>   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 'g...@github.com:artagnon/git'
>
> Fail early with a nicer error message:
>
>   $ git push
>   fatal: You are not currently on a branch.
>   To push the history leading to the current (detached HEAD)
>   state now, use
>
>     git push ram HEAD:<name-of-remote-branch>
>
> Just like in the upstream and simple cases.
>
> Signed-off-by: Ramkumar Ramachandra <artag...@gmail.com>
> ---
>  builtin/push.c | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/builtin/push.c b/builtin/push.c
> index ef3aa97..a79038c 100644
> --- a/builtin/push.c
> +++ b/builtin/push.c
> @@ -175,6 +175,8 @@ static void 
> warn_unspecified_push_default_configuration(void)
>  
>  static void setup_default_push_refspecs(struct remote *remote)
>  {
> +     struct branch *branch = branch_get(NULL);
> +
>       switch (push_default) {
>       default:
>       case PUSH_DEFAULT_UNSPECIFIED:
> @@ -194,6 +196,8 @@ static void setup_default_push_refspecs(struct remote 
> *remote)
>               break;
>  
>       case PUSH_DEFAULT_CURRENT:
> +             if (!branch)
> +                     die(_(message_detached_head_die), remote->name);
>               add_refspec("HEAD");
>               break;

This means well, but I am not sure calling branch_get() for all
other cases that do not care about the current branch is a right
thing to do.  It's not like you need branch variable to free some
resource after done, or pass it around to callees from this
function.

Would it hurt to do

        if (!branch_get(NULL))
                die(...);

here, without the first hunk?  
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to