From patchwork Wed Oct 3 11:42:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rasmus Villemoes X-Patchwork-Id: 10624679 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 211F414BD for ; Wed, 3 Oct 2018 11:42:52 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1642828942 for ; Wed, 3 Oct 2018 11:42:52 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0AC5D2894E; Wed, 3 Oct 2018 11:42:52 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 94E4928942 for ; Wed, 3 Oct 2018 11:42:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726829AbeJCSaw (ORCPT ); Wed, 3 Oct 2018 14:30:52 -0400 Received: from mail-lj1-f196.google.com ([209.85.208.196]:46198 "EHLO mail-lj1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726725AbeJCSaw (ORCPT ); Wed, 3 Oct 2018 14:30:52 -0400 Received: by mail-lj1-f196.google.com with SMTP id 203-v6so4746941ljj.13 for ; Wed, 03 Oct 2018 04:42:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rasmusvillemoes.dk; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=duA8inbtKpiUut2mS5fFv25FPf5QFd3r+yniNcHC7VI=; b=XjV9meUneauOrxN4c+MY5u/9QRf2Cz1KC9dzhkRplx55SiX/iuDPJran7bGoVls49e nI8MXgqW536dwxLqhOrvCbsayg9ofls6S7C9O3FuCdAh7dti5b0KnUhxCvCRX1e9Evc4 YdHSv5qyEuHjtg9YhGEi/W1q1icV89ftmwKZ4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=duA8inbtKpiUut2mS5fFv25FPf5QFd3r+yniNcHC7VI=; b=QQ8JKYf3XDI03QyxR7NQAp11f+JB7XuEYF4F+zgX8qaEVnszR4b9Li8xq78p46qRCy P8Llz8KgGBrzIXmElnRza01n75D4neqpoJxr5B5m7OoIUynL/Hl63RSZs/RaLHuPKTOC UqQKpDsV4dNVWLRCVyJqrTs24TOE90YZqCjW1VYC4Z1jdVGU7gIDCPu5j2NkjOROmHw2 guKnQXJMweYvv7+RwN7ttyulEGcsyISBHNhIlbeMx4f4ylEgtHkLQEzzEZmnnPazaSSM hfZn008SYBqy6sxJUXMy/uCrZA9apQQ7sCNR/vm/QNdfzEfI+IslDcuxk54cqbX9GeoN 7JUA== X-Gm-Message-State: ABuFfognAksKHa9PkrV3Nzgy6y39MFsce9hxkV/3BOwihaDMch9r5a3o jGIuLXjv8TJDzFoxnXQeTf+zeB0CV7OpbKkH X-Google-Smtp-Source: ACcGV62fq+NV95MeszdNgw1H8uDbJL8+r9iYuwtkqv33SYSzd991nFczJbciZDKnpkUtKx/81VhR0w== X-Received: by 2002:a2e:1615:: with SMTP id w21-v6mr869172ljd.33.1538566967320; Wed, 03 Oct 2018 04:42:47 -0700 (PDT) Received: from prevas-ravi.prevas.se ([81.216.59.226]) by smtp.gmail.com with ESMTPSA id f22-v6sm279500ljk.11.2018.10.03.04.42.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 03 Oct 2018 04:42:46 -0700 (PDT) From: Rasmus Villemoes To: git@vger.kernel.org Cc: Jeff King , Junio C Hamano , Duy Nguyen , Taylor Blau , Rasmus Villemoes Subject: [PATCH v3 1/3] help: redirect to aliased commands for "git cmd --help" Date: Wed, 3 Oct 2018 13:42:40 +0200 Message-Id: <20181003114242.9858-2-rv@rasmusvillemoes.dk> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20181003114242.9858-1-rv@rasmusvillemoes.dk> References: <20181001112107.28956-1-rv@rasmusvillemoes.dk> <20181003114242.9858-1-rv@rasmusvillemoes.dk> MIME-Version: 1.0 Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP As discussed in the thread for v1 of this patch [1] [2], this changes the rules for "git foo --help" when foo is an alias. (0) When invoked as "git help foo", we continue to print the "foo is aliased to bar" message and nothing else. (1) If foo is an alias for a shell command, print "foo is aliased to !bar" as usual. (2) Otherwise, break the alias string into words, and pretend that "git word0 --help" was called. At least for me, getting the man page for git-cherry-pick directly with "git cp --help" is more useful (and how I expect an alias to behave) than the short "is aliased to" notice. It is also consistent with "--help" generally providing more comprehensive help than "-h". I believe that printing the "is aliased to" message also in case (2) has value: Depending on pager setup, or if the user has help.format=web, the message is still present immediately above the prompt when the user quits the pager/returns to the terminal. That serves as an explanation for why one was redirected to "man git-cherry-pick" from "git cp --help", and if cp is actually 'cherry-pick -n', it reminds the user that using cp has some flag implicitly set before firing off the next command. It also provides some useful info in case we end up erroring out, either in the "bad alias string" check, or in the "No manual entry for gitbar" case. [1] https://public-inbox.org/git/20180926102636.30691-1-rv@rasmusvillemoes.dk/ [2] https://public-inbox.org/git/20180926184914.GC30680@sigill.intra.peff.net/ Signed-off-by: Rasmus Villemoes --- builtin/help.c | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/builtin/help.c b/builtin/help.c index 8d4f6dd301..e0e3fe62e9 100644 --- a/builtin/help.c +++ b/builtin/help.c @@ -415,9 +415,37 @@ static const char *check_git_cmd(const char* cmd) alias = alias_lookup(cmd); if (alias) { - printf_ln(_("'%s' is aliased to '%s'"), cmd, alias); - free(alias); - exit(0); + const char **argv; + int count; + + /* + * handle_builtin() in git.c rewrites "git cmd --help" + * to "git help --exclude-guides cmd", so we can use + * exclude_guides to distinguish "git cmd --help" from + * "git help cmd". In the latter case, or if cmd is an + * alias for a shell command, just print the alias + * definition. + */ + if (!exclude_guides || alias[0] == '!') { + printf_ln(_("'%s' is aliased to '%s'"), cmd, alias); + free(alias); + exit(0); + } + /* + * Otherwise, we pretend that the command was "git + * word0 --help". We use split_cmdline() to get the + * first word of the alias, to ensure that we use the + * same rules as when the alias is actually + * used. split_cmdline() modifies alias in-place. + */ + fprintf_ln(stderr, _("'%s' is aliased to '%s'"), cmd, alias); + count = split_cmdline(alias, &argv); + if (count < 0) + die(_("bad alias.%s string: %s"), cmd, + split_cmdline_strerror(count)); + free(argv); + UNLEAK(alias); + return alias; } if (exclude_guides) From patchwork Wed Oct 3 11:42:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rasmus Villemoes X-Patchwork-Id: 10624683 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 84214174A for ; Wed, 3 Oct 2018 11:42:54 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 79F26288E0 for ; Wed, 3 Oct 2018 11:42:54 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6E58A28939; Wed, 3 Oct 2018 11:42:54 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0455C28952 for ; Wed, 3 Oct 2018 11:42:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726884AbeJCSax (ORCPT ); Wed, 3 Oct 2018 14:30:53 -0400 Received: from mail-lf1-f68.google.com ([209.85.167.68]:33662 "EHLO mail-lf1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726809AbeJCSax (ORCPT ); Wed, 3 Oct 2018 14:30:53 -0400 Received: by mail-lf1-f68.google.com with SMTP id o21-v6so3899573lfe.0 for ; Wed, 03 Oct 2018 04:42:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rasmusvillemoes.dk; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=zyRyjQqb8Mk4ojrUggpsKR7Q7R9H4mCxpPjWjQPAOLw=; b=ApSECliDq0EdIaFgDFtuXlqBZElQaACF5zzv1yXevkWU/R1tEy9SK2kBviN2tFVNlK 9L0zpWfYCSgdM5oraFeLfpz79/XRvQgxeJKDDLeRmkY4B+FXnrdvVCuub9SJKV24V7ob Ok0k5MEHzAZrJ2F51/ABDL7E9uo8P9nmC29Rw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=zyRyjQqb8Mk4ojrUggpsKR7Q7R9H4mCxpPjWjQPAOLw=; b=e4LOMMFI4jdSwmZ2FOqNf5We9uIsmq7HGQEk9PNs+1arAnq9ZBtdtFmOFciwITX5Y9 sRTU0Gr9usPKCxsd5BqYSfXhAmabSmpMJ43ybzlehkTkY2k4E/nL47W2QxDTysogLhIK j9DWW5YwKmodMXZiCeEGTG8s1bVHxZdmfz0hZUwA0sFt2evS9mtR5D8qYUTpzrPoqetk kQva1+ITRZ7PBVBCATWwqIjHJO2OiFulis7YawW27iaJsujt859rzoNTDm5RLXrkVb7x PuqyULIDJFYMcMhKn1Dmr6XgRiD+Zh8J9tH3tf3V0G1Zzs0huLTP7F0eOOLzlBRxXOz1 O61A== X-Gm-Message-State: ABuFfojqKQEZ6f6lTj08ypnhyM6eP+Asjlt8q5RVzoRV/TnREvLXeU3z Bjs5lYFKsEb9sX5kuHyfx5PmMMR4rrWxv20P X-Google-Smtp-Source: ACcGV63cwMWKNcSnM5s4Y5nxybsGsjT96HCiXM+QwHaV3vtIalCbg0HzXAc8NQ/mTcHXKZiSJZi8oQ== X-Received: by 2002:a19:2a8c:: with SMTP id q12-v6mr753106lfq.95.1538566968488; Wed, 03 Oct 2018 04:42:48 -0700 (PDT) Received: from prevas-ravi.prevas.se ([81.216.59.226]) by smtp.gmail.com with ESMTPSA id f22-v6sm279500ljk.11.2018.10.03.04.42.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 03 Oct 2018 04:42:47 -0700 (PDT) From: Rasmus Villemoes To: git@vger.kernel.org Cc: Jeff King , Junio C Hamano , Duy Nguyen , Taylor Blau , Rasmus Villemoes Subject: [PATCH v3 2/3] git.c: handle_alias: prepend alias info when first argument is -h Date: Wed, 3 Oct 2018 13:42:41 +0200 Message-Id: <20181003114242.9858-3-rv@rasmusvillemoes.dk> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20181003114242.9858-1-rv@rasmusvillemoes.dk> References: <20181001112107.28956-1-rv@rasmusvillemoes.dk> <20181003114242.9858-1-rv@rasmusvillemoes.dk> MIME-Version: 1.0 Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Most git commands respond to -h anywhere in the command line, or at least as a first and lone argument, by printing the usage information. For aliases, we can provide a little more information that might be useful in interpreting/understanding the following output by prepending a line telling that the command is an alias, and for what. When one invokes a simple alias, such as "cp = cherry-pick" with -h, this results in $ git cp -h 'cp' is aliased to 'cherry-pick' usage: git cherry-pick [] ... ... When the alias consists of more than one word, this provides the additional benefit of informing the user which options are implicit in using the alias, e.g. with "cp = cherry-pick -n": $ git cp -h 'cp' is aliased to 'cherry-pick -n' usage: git cherry-pick [] ... ... For shell commands, we cannot know how it responds to -h, but printing this line to stderr should not hurt, and can help in figuring out what is happening in a case like $ git sc -h 'sc' is aliased to '!somecommand' somecommand: invalid option '-h' Suggested-by: Jeff King Signed-off-by: Rasmus Villemoes --- git.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/git.c b/git.c index a6f4b44af5..0211c2d4c0 100644 --- a/git.c +++ b/git.c @@ -318,6 +318,9 @@ static int handle_alias(int *argcp, const char ***argv) alias_command = (*argv)[0]; alias_string = alias_lookup(alias_command); if (alias_string) { + if (*argcp > 1 && !strcmp((*argv)[1], "-h")) + fprintf_ln(stderr, _("'%s' is aliased to '%s'"), + alias_command, alias_string); if (alias_string[0] == '!') { struct child_process child = CHILD_PROCESS_INIT; int nongit_ok; From patchwork Wed Oct 3 11:42:42 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rasmus Villemoes X-Patchwork-Id: 10624681 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 40AEB14BD for ; Wed, 3 Oct 2018 11:42:54 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 36EF828961 for ; Wed, 3 Oct 2018 11:42:54 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2B82B2890C; Wed, 3 Oct 2018 11:42:54 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C880328965 for ; Wed, 3 Oct 2018 11:42:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726923AbeJCSay (ORCPT ); Wed, 3 Oct 2018 14:30:54 -0400 Received: from mail-lj1-f194.google.com ([209.85.208.194]:36904 "EHLO mail-lj1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726725AbeJCSay (ORCPT ); Wed, 3 Oct 2018 14:30:54 -0400 Received: by mail-lj1-f194.google.com with SMTP id 63-v6so4788925ljs.4 for ; Wed, 03 Oct 2018 04:42:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rasmusvillemoes.dk; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=a0+JdrhQja0hh+ABGqy2/FuhKSn99MdTvWYQdNpQ+kQ=; b=ArIdUlIhQZ/eCHOf8rEIusKiYOJ1ScmUaEZsMFdGLn9fEKYRCI6SXZ2GruSiuIXxup /Qu/OuodKodV++CaYh8TK//f6V5XEjmXii/4e0jTcLAmxgxeBEtyYkDfWF3RfIL6zrAs yshjJl/5JOKPnDP+EPkfn0l76j5jl7dd21YEk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=a0+JdrhQja0hh+ABGqy2/FuhKSn99MdTvWYQdNpQ+kQ=; b=mDRoqMbU69r3tjM3GJ7sSRu37yzOj27cJqmGDHKHPlxG3TXxldFj8v7BOXMCx+Wt3j KZllt5ItZJUUvF11vLpWcjUcXQBcYXAZ7CGGada1aHNlNxqZan8qTJXQM+c1zJhJDNZC eP23el0BjrS1XVrcWV2nNY3cziw/CeR3aCC/1HQbobR5FnvDVGbM2YTzL7iw5ITfsK16 uNtzplBDyGjzxpbsF+ADxyLA2XaW/mLqTMyn1Dw6h+G/jFhNIjQchboPtLJN+BFIViIZ ua4eARCyaqRFPYqPhA3avh95SDdhGLVD6IRUs3yHqGKo76r5fyDQqulCokJQKD/d75qT ElWQ== X-Gm-Message-State: ABuFfoi57WVYUrpQ1jxn1aoTAHUuUjq/diZVO44Yi3gbpS/owd4+2LMh zVZdd1KMKox/OY334B+rxCBZW1a3bV+bQxMl X-Google-Smtp-Source: ACcGV617R5YDemG9Cy9/YvEmm37EWg34vcWaT85fUU3ksvh9mjXWbE+H/BUki+HIKuuhqed/KiXnkw== X-Received: by 2002:a2e:44d:: with SMTP id 74-v6mr856822lje.146.1538566969883; Wed, 03 Oct 2018 04:42:49 -0700 (PDT) Received: from prevas-ravi.prevas.se ([81.216.59.226]) by smtp.gmail.com with ESMTPSA id f22-v6sm279500ljk.11.2018.10.03.04.42.48 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 03 Oct 2018 04:42:49 -0700 (PDT) From: Rasmus Villemoes To: git@vger.kernel.org Cc: Jeff King , Junio C Hamano , Duy Nguyen , Taylor Blau , Rasmus Villemoes Subject: [PATCH v3 3/3] git-help.txt: document "git help cmd" vs "git cmd --help" for aliases Date: Wed, 3 Oct 2018 13:42:42 +0200 Message-Id: <20181003114242.9858-4-rv@rasmusvillemoes.dk> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20181003114242.9858-1-rv@rasmusvillemoes.dk> References: <20181001112107.28956-1-rv@rasmusvillemoes.dk> <20181003114242.9858-1-rv@rasmusvillemoes.dk> MIME-Version: 1.0 Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This documents the existing behaviour of "git help cmd" when cmd is an alias, as well as providing a hint to use the "git cmd --help" form to be taken directly to the man page for the aliased command. Signed-off-by: Rasmus Villemoes --- Documentation/git-help.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Documentation/git-help.txt b/Documentation/git-help.txt index 83d25d825a..86a6b42345 100644 --- a/Documentation/git-help.txt +++ b/Documentation/git-help.txt @@ -29,6 +29,10 @@ guide is brought up. The 'man' program is used by default for this purpose, but this can be overridden by other options or configuration variables. +If an alias is given, git shows the definition of the alias on +standard output. To get the manual page for the aliased command, use +`git COMMAND --help`. + Note that `git --help ...` is identical to `git help ...` because the former is internally converted into the latter.