{"thread":{"id":"35486","subject":"[PATCH] push: Allow @ shortcut with git-push","startedAt":"2013-12-06T06:13:12Z","lastAt":"2013-12-07T09:45:41Z","messageCount":2,"participants":["Tomo Krajina","Felipe Contreras"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"231649","messageId":"1386310392-26882-1-git-send-email-tkrajina@gmail.com","threadId":"35486","inReplyTo":null,"subject":"[PATCH] push: Allow @ shortcut with git-push","fromName":"Tomo Krajina","fromEmail":"tkrajina@gmail.com","sentAt":"2013-12-06T06:13:12Z","receivedAt":"2013-12-06T06:13:12Z","isPatch":true,"sender":{"key":"tkrajina@gmail.com","avatar":null},"body":"Until now, HEAD could be used with git-push to push the current\nbranch. Now @ is a shortcut to HEAD, but it didn't work when\npushing branches. It fails with:\n\n  fatal: remote part of refspec is not a valid name in @\n\nReinterpret all branch names from argv in order for @ to be used\nwhen pushing branches.\n\nSigned-off-by: Tomo Krajina <tkrajina@gmail.com>\n---\n builtin/push.c | 15 ++++++++++++++-\n 1 file changed, 14 insertions(+), 1 deletion(-)\n\ndiff --git a/builtin/push.c b/builtin/push.c\nindex 7b1b66c..51c0200 100644\n--- a/builtin/push.c\n+++ b/builtin/push.c\n@@ -494,7 +494,20 @@ int cmd_push(int argc, const char **argv, const char *prefix)\n \n \tif (argc > 0) {\n \t\trepo = argv[0];\n-\t\tset_refspecs(argv + 1, argc - 1);\n+\n+\t\tchar *refs[argc - 1];\n+\t\tint i;\n+\t\tfor(i = 1; i < argc; i++) {\n+\t\t\trefs[i - 1] = argv[i];\n+\n+\t\t\tstruct strbuf buf = STRBUF_INIT;\n+\t\t\tinterpret_branch_name(argv[i], strlen(argv[i]), &buf);\n+\n+\t\t\tif(buf.buf && strlen(buf.buf) > 0)\n+\t\t\t\trefs[i - 1] = buf.buf;\n+\t\t}\n+\n+\t\tset_refspecs(refs, argc - 1);\n \t}\n \n \trc = do_push(repo, flags);\n-- \n1.8.5\n"},{"id":"231696","messageId":"52a2ee45b8644_29836d5e9877@nysa.notmuch","threadId":"35486","inReplyTo":"1386310392-26882-1-git-send-email-tkrajina@gmail.com","subject":"RE: [PATCH] push: Allow @ shortcut with git-push","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2013-12-07T09:45:41Z","receivedAt":"2013-12-07T09:45:41Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"Tomo Krajina wrote:\n> Until now, HEAD could be used with git-push to push the current\n> branch. Now @ is a shortcut to HEAD, but it didn't work when\n> pushing branches. It fails with:\n> \n>   fatal: remote part of refspec is not a valid name in @\n> \n> Reinterpret all branch names from argv in order for @ to be used\n> when pushing branches.\n> \n> Signed-off-by: Tomo Krajina <tkrajina@gmail.com>\n> ---\n>  builtin/push.c | 15 ++++++++++++++-\n>  1 file changed, 14 insertions(+), 1 deletion(-)\n> \n> diff --git a/builtin/push.c b/builtin/push.c\n> index 7b1b66c..51c0200 100644\n> --- a/builtin/push.c\n> +++ b/builtin/push.c\n> @@ -494,7 +494,20 @@ int cmd_push(int argc, const char **argv, const char *prefix)\n>  \n>  \tif (argc > 0) {\n>  \t\trepo = argv[0];\n> -\t\tset_refspecs(argv + 1, argc - 1);\n> +\n> +\t\tchar *refs[argc - 1];\n> +\t\tint i;\n> +\t\tfor(i = 1; i < argc; i++) {\n> +\t\t\trefs[i - 1] = argv[i];\n> +\n> +\t\t\tstruct strbuf buf = STRBUF_INIT;\n> +\t\t\tinterpret_branch_name(argv[i], strlen(argv[i]), &buf);\n> +\n> +\t\t\tif(buf.buf && strlen(buf.buf) > 0)\n> +\t\t\t\trefs[i - 1] = buf.buf;\n> +\t\t}\n> +\n> +\t\tset_refspecs(refs, argc - 1);\n>  \t}\n>  \n>  \trc = do_push(repo, flags);\n> -- \n\nI don't think this is the right way to go. There are many places where HEAD\ncannot be replaced with @, or @{u}, or any of such syntaxes.\n\nWe might want to do this kind of replacement in many other places, but we would\nneed to make sure it makes sense.\n\nMoreover, in order for this patch to be considered you need to add tests.\n\nCheers.\n\n-- \nFelipe Contreras\n"}]}