threads / patch / 39386

v9, 5 partsgroup common commands by theme

Subject: [PATCH v9 0/5] group common commands by theme

## tl;dr

15 messages between May 20, 2015 and May 20, 2015. Diffs are folded; open one to read it.

replies: 14people: 4as markdown or json

Sébastien Guimmara· May 20, 2015, 19:22 UTC · lore

The major modification of this reroll [1] is the use of the perl version of generate-cmdlist instead of the awk one.

help.c:
1. change the introductory message from:
	"The typical Git workflow includes:"
to:
    "These are common Git commands used in various situations:"
2. include Ramsay's patch [2]

[1]: v8: http://thread.gmane.org/gmane.comp.version-control.git/269305 [2]: http://thread.gmane.org/gmane.comp.version-control.git/269387

Eric Sunshine (2):
  command-list: prepare machinery for upcoming "common groups" section
  generate-cmdlist: parse common group commands
Sébastien Guimmara (3):
  command-list.txt: add the common groups block
  command-list.txt: drop the "common" tag
  help: respect new common command grouping
 Documentation/cmd-list.perl |  4 ++++
 Makefile                    |  9 ++++----
 command-list.txt            | 53 +++++++++++++++++++++++++++------------------
 generate-cmdlist.perl       | 50 ++++++++++++++++++++++++++++++++++++++++++
 generate-cmdlist.sh         | 23 --------------------
 help.c                      | 24 +++++++++++++++++++-
 6 files changed, 114 insertions(+), 49 deletions(-)
 create mode 100755 generate-cmdlist.perl
 delete mode 100755 generate-cmdlist.sh
-- 
2.4.0.GIT
Sébastien Guimmara· May 20, 2015, 19:22 UTC · re: Sébastien Guimmara · lore

[PATCH v9 1/5] command-list: prepare machinery for upcoming "common groups" section

From: Eric Sunshine <sunshine@sunshineco.com>

The ultimate goal is for "git help" to classify common commands by group. Toward this end, a subsequent patch will add a new "common groups" section to command-list.txt preceding the actual command list. As preparation, teach existing command-list.txt parsing machinery, which doesn't care about grouping, to skip over this upcoming "common groups" section.

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Sébastien Guimmara <sebastien.guimmara@gmail.com>
---
 Documentation/cmd-list.perl | 4 ++++
 Makefile                    | 5 +++--
 command-list.txt            | 3 ++-
 3 files changed, 9 insertions(+), 3 deletions(-)
Show changes to 3 files +9 −3

Documentation/cmd-list.perl, Makefile, command-list.txt

diff --git a/Documentation/cmd-list.perl b/Documentation/cmd-list.perl
index 04f9977..5aa73cf 100755
--- a/Documentation/cmd-list.perl
+++ b/Documentation/cmd-list.perl
@@ -38,6 +38,10 @@ sub format_one {
 	}
 }
 
+while (<>) {
+	last if /^### command list/;
+}
+
 my %cmds = ();
 for (sort <>) {
 	next if /^#/;
diff --git a/Makefile b/Makefile
index 323c401..655740d 100644
--- a/Makefile
+++ b/Makefile
@@ -2455,7 +2455,7 @@ check-docs::
 		esac ; \
 		test -f "Documentation/$$v.txt" || \
 		echo "no doc: $$v"; \
-		sed -e '/^#/d' command-list.txt | \
+		sed -e '1,/^### command list/d' -e '/^#/d' command-list.txt | \
 		grep -q "^$$v[ 	]" || \
 		case "$$v" in \
 		git) ;; \
@@ -2463,7 +2463,8 @@ check-docs::
 		esac ; \
 	done; \
 	( \
-		sed -e '/^#/d' \
+		sed -e '1,/^### command list/d' \
+		    -e '/^#/d' \
 		    -e 's/[ 	].*//' \
 		    -e 's/^/listed /' command-list.txt; \
 		$(MAKE) -C Documentation print-man1 | \
diff --git a/command-list.txt b/command-list.txt
index 54d8d21..609b344 100644
--- a/command-list.txt
+++ b/command-list.txt
@@ -1,4 +1,5 @@
-# List of known git commands.
+# do not molest the next line
+### command list
 # command name                          category [deprecated] [common]
 git-add                                 mainporcelain common
 git-am                                  mainporcelain
-- 
2.4.0.GIT
Sébastien Guimmara· May 20, 2015, 19:22 UTC · re: Sébastien Guimmara · lore

[PATCH v9 2/5] command-list.txt: add the common groups block

The ultimate goal is for "git help" to display common commands in groups rather than alphabetically. As a first step, define the groups in a new block, and then assign a group to each common command.

Add a block at the beginning of command-list.txt:
    init         start a working area (see also: git help tutorial)
    worktree     work on the current change (see also:[...]
    info         examine the history and state (see also: git [...]
    history      grow, mark and tweak your history
    remote       collaborate (see also: git help workflows)

storing information about common commands group, then map each common command to a group:

    git-add          mainporcelain        common worktree
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Helped-by: Junio C Hamano <gitster@pobox.com>
Helped-by:  Emma Jane Hogbin Westby <emma.westby@gmail.com>
Signed-off-by: Sébastien Guimmara <sebastien.guimmara@gmail.com>
---
 command-list.txt | 50 ++++++++++++++++++++++++++++++--------------------
 1 file changed, 30 insertions(+), 20 deletions(-)
Show changes to command-list.txt +30 −20
diff --git a/command-list.txt b/command-list.txt
index 609b344..c2bbdc1 100644
--- a/command-list.txt
+++ b/command-list.txt
@@ -1,3 +1,13 @@
+# common commands are grouped by themes output by 'git help'
+# map each common command in the command list to one of these groups.
+### common groups
+init         start a working area (see also: git help tutorial)
+worktree     work on the current change (see also: git help everyday)
+info         examine the history and state (see also: git help revisions)
+history      grow, mark and tweak your common history
+remote       collaborate (see also: git help workflows)
+
+# List of known git commands.
 # do not molest the next line
 ### command list
 # command name                          category [deprecated] [common]
@@ -7,24 +17,24 @@ git-annotate                            ancillaryinterrogators
 git-apply                               plumbingmanipulators
 git-archimport                          foreignscminterface
 git-archive                             mainporcelain
-git-bisect                              mainporcelain common
+git-bisect                              mainporcelain           common info
 git-blame                               ancillaryinterrogators
-git-branch                              mainporcelain common
+git-branch                              mainporcelain           common history
 git-bundle                              mainporcelain
 git-cat-file                            plumbinginterrogators
 git-check-attr                          purehelpers
 git-check-ignore                        purehelpers
 git-check-mailmap                       purehelpers
-git-checkout                            mainporcelain common
+git-checkout                            mainporcelain           common history
 git-checkout-index                      plumbingmanipulators
 git-check-ref-format                    purehelpers
 git-cherry                              ancillaryinterrogators
 git-cherry-pick                         mainporcelain
 git-citool                              mainporcelain
 git-clean                               mainporcelain
-git-clone                               mainporcelain common
+git-clone                               mainporcelain           common init
 git-column                              purehelpers
-git-commit                              mainporcelain common
+git-commit                              mainporcelain           common history
 git-commit-tree                         plumbingmanipulators
 git-config                              ancillarymanipulators
 git-count-objects                       ancillaryinterrogators
@@ -36,14 +46,14 @@ git-cvsimport                           foreignscminterface
 git-cvsserver                           foreignscminterface
 git-daemon                              synchingrepositories
 git-describe                            mainporcelain
-git-diff                                mainporcelain common
+git-diff                                mainporcelain           common history
 git-diff-files                          plumbinginterrogators
 git-diff-index                          plumbinginterrogators
 git-diff-tree                           plumbinginterrogators
 git-difftool                            ancillaryinterrogators
 git-fast-export                         ancillarymanipulators
 git-fast-import                         ancillarymanipulators
-git-fetch                               mainporcelain common
+git-fetch                               mainporcelain           common remote
 git-fetch-pack                          synchingrepositories
 git-filter-branch                       ancillarymanipulators
 git-fmt-merge-msg                       purehelpers
@@ -52,7 +62,7 @@ git-format-patch                        mainporcelain
 git-fsck                                ancillaryinterrogators
 git-gc                                  mainporcelain
 git-get-tar-commit-id                   ancillaryinterrogators
-git-grep                                mainporcelain common
+git-grep                                mainporcelain           common info
 git-gui                                 mainporcelain
 git-hash-object                         plumbingmanipulators
 git-help                                ancillaryinterrogators
@@ -61,17 +71,17 @@ git-http-fetch                          synchelpers
 git-http-push                           synchelpers
 git-imap-send                           foreignscminterface
 git-index-pack                          plumbingmanipulators
-git-init                                mainporcelain common
+git-init                                mainporcelain           common init
 git-instaweb                            ancillaryinterrogators
 git-interpret-trailers                  purehelpers
 gitk                                    mainporcelain
-git-log                                 mainporcelain common
+git-log                                 mainporcelain           common info
 git-ls-files                            plumbinginterrogators
 git-ls-remote                           plumbinginterrogators
 git-ls-tree                             plumbinginterrogators
 git-mailinfo                            purehelpers
 git-mailsplit                           purehelpers
-git-merge                               mainporcelain common
+git-merge                               mainporcelain           common history
 git-merge-base                          plumbinginterrogators
 git-merge-file                          plumbingmanipulators
 git-merge-index                         plumbingmanipulators
@@ -80,7 +90,7 @@ git-mergetool                           ancillarymanipulators
 git-merge-tree                          ancillaryinterrogators
 git-mktag                               plumbingmanipulators
 git-mktree                              plumbingmanipulators
-git-mv                                  mainporcelain common
+git-mv                                  mainporcelain           common worktree
 git-name-rev                            plumbinginterrogators
 git-notes                               mainporcelain
 git-p4                                  foreignscminterface
@@ -91,11 +101,11 @@ git-parse-remote                        synchelpers
 git-patch-id                            purehelpers
 git-prune                               ancillarymanipulators
 git-prune-packed                        plumbingmanipulators
-git-pull                                mainporcelain common
-git-push                                mainporcelain common
+git-pull                                mainporcelain           common remote
+git-push                                mainporcelain           common remote
 git-quiltimport                         foreignscminterface
 git-read-tree                           plumbingmanipulators
-git-rebase                              mainporcelain common
+git-rebase                              mainporcelain           common history
 git-receive-pack                        synchelpers
 git-reflog                              ancillarymanipulators
 git-relink                              ancillarymanipulators
@@ -104,28 +114,28 @@ git-repack                              ancillarymanipulators
 git-replace                             ancillarymanipulators
 git-request-pull                        foreignscminterface
 git-rerere                              ancillaryinterrogators
-git-reset                               mainporcelain common
+git-reset                               mainporcelain           common worktree
 git-revert                              mainporcelain
 git-rev-list                            plumbinginterrogators
 git-rev-parse                           ancillaryinterrogators
-git-rm                                  mainporcelain common
+git-rm                                  mainporcelain           common worktree
 git-send-email                          foreignscminterface
 git-send-pack                           synchingrepositories
 git-shell                               synchelpers
 git-shortlog                            mainporcelain
-git-show                                mainporcelain common
+git-show                                mainporcelain           common info
 git-show-branch                         ancillaryinterrogators
 git-show-index                          plumbinginterrogators
 git-show-ref                            plumbinginterrogators
 git-sh-i18n                             purehelpers
 git-sh-setup                            purehelpers
 git-stash                               mainporcelain
-git-status                              mainporcelain common
+git-status                              mainporcelain           common info
 git-stripspace                          purehelpers
 git-submodule                           mainporcelain
 git-svn                                 foreignscminterface
 git-symbolic-ref                        plumbingmanipulators
-git-tag                                 mainporcelain common
+git-tag                                 mainporcelain           common history
 git-unpack-file                         plumbinginterrogators
 git-unpack-objects                      plumbingmanipulators
 git-update-index                        plumbingmanipulators
-- 
2.4.0.GIT
Eric Sunshine· May 20, 2015, 19:48 UTC · re: Sébastien Guimmara · lore

Re: [PATCH v9 2/5] command-list.txt: add the common groups block

On Wed, May 20, 2015 at 3:22 PM, Sébastien Guimmara <sebastien.guimmara@gmail.com> wrote:

Show 22 quoted lines
> The ultimate goal is for "git help" to display common commands in
> groups rather than alphabetically. As a first step, define the
> groups in a new block, and then assign a group to each
> common command.
>
> Add a block at the beginning of command-list.txt:
>
>     init         start a working area (see also: git help tutorial)
>     worktree     work on the current change (see also:[...]
>     info         examine the history and state (see also: git [...]
>     history      grow, mark and tweak your history
>     remote       collaborate (see also: git help workflows)
>
> storing information about common commands group, then map each common
> command to a group:
>
>     git-add          mainporcelain        common worktree
>
> Signed-off-by: Sébastien Guimmara <sebastien.guimmara@gmail.com>
> ---
>  command-list.txt | 50 ++++++++++++++++++++++++++++++--------------------
>  1 file changed, 30 insertions(+), 20 deletions(-)

Hmm, did your update to Documentation/technical/new-command.txt get lost? I don't see it any of the patches, but would have expected it to be included in this patch which introduces the "common groups" section.

Show 7 quoted lines
> diff --git a/command-list.txt b/command-list.txt
> index 609b344..c2bbdc1 100644
> --- a/command-list.txt
> +++ b/command-list.txt
> @@ -1,3 +1,13 @@
> +# common commands are grouped by themes output by 'git help'
> +# map each common command in the command list to one of these groups.

Discussed previously: It also would be a good idea to mention that the order in which "git help" displays the groups themselves is the order they are declared here. Maybe just add one more line between the two you already have above:

    # groups are output by 'git help' in the order declared here.
> +### common groups

In the block below, the "### command list" line is protected by a "# do not molest the next line" warning. Perhaps the same should be done here? Alternately, make them more compact by incorporating the warning:

    ### common groups (do not change this line)
    ...
    ### command list (do not change this line)
?
Show 10 quoted lines
> +init         start a working area (see also: git help tutorial)
> +worktree     work on the current change (see also: git help everyday)
> +info         examine the history and state (see also: git help revisions)
> +history      grow, mark and tweak your common history
> +remote       collaborate (see also: git help workflows)
> +
> +# List of known git commands.
>  # do not molest the next line
>  ### command list
>  # command name                          category [deprecated] [common]
Sébastien Guimmara· May 20, 2015, 19:51 UTC · re: Eric Sunshine · lore

Re: [PATCH v9 2/5] command-list.txt: add the common groups block

On 05/20/2015 09:48 PM, Eric Sunshine wrote:
Show 30 quoted lines
> On Wed, May 20, 2015 at 3:22 PM, Sébastien Guimmara
> <sebastien.guimmara@gmail.com> wrote:
>> The ultimate goal is for "git help" to display common commands in
>> groups rather than alphabetically. As a first step, define the
>> groups in a new block, and then assign a group to each
>> common command.
>>
>> Add a block at the beginning of command-list.txt:
>>
>>      init         start a working area (see also: git help tutorial)
>>      worktree     work on the current change (see also:[...]
>>      info         examine the history and state (see also: git [...]
>>      history      grow, mark and tweak your history
>>      remote       collaborate (see also: git help workflows)
>>
>> storing information about common commands group, then map each common
>> command to a group:
>>
>>      git-add          mainporcelain        common worktree
>>
>> Signed-off-by: Sébastien Guimmara <sebastien.guimmara@gmail.com>
>> ---
>>   command-list.txt | 50 ++++++++++++++++++++++++++++++--------------------
>>   1 file changed, 30 insertions(+), 20 deletions(-)
>
> Hmm, did your update to Documentation/technical/new-command.txt get
> lost? I don't see it any of the patches, but would have expected it to
> be included in this patch which introduces the "common groups"
> section.
>
Ah, you're right. A commit got lost in the process. Will fix that. Thanks.
Show 15 quoted lines
>> diff --git a/command-list.txt b/command-list.txt
>> index 609b344..c2bbdc1 100644
>> --- a/command-list.txt
>> +++ b/command-list.txt
>> @@ -1,3 +1,13 @@
>> +# common commands are grouped by themes output by 'git help'
>> +# map each common command in the command list to one of these groups.
>
> Discussed previously: It also would be a good idea to mention that the
> order in which "git help" displays the groups themselves is the order
> they are declared here. Maybe just add one more line between the two
> you already have above:
>
>      # groups are output by 'git help' in the order declared here.
>
Indeed, I'll add the mention.
Show 13 quoted lines
>> +### common groups
>
> In the block below, the "### command list" line is protected by a "#
> do not molest the next line" warning. Perhaps the same should be done
> here? Alternately, make them more compact by incorporating the
> warning:
>
>      ### common groups (do not change this line)
>      ...
>      ### command list (do not change this line)
>
> ?
>
Yes, it's better. I shall modify this.
Show 10 quoted lines
>> +init         start a working area (see also: git help tutorial)
>> +worktree     work on the current change (see also: git help everyday)
>> +info         examine the history and state (see also: git help revisions)
>> +history      grow, mark and tweak your common history
>> +remote       collaborate (see also: git help workflows)
>> +
>> +# List of known git commands.
>>   # do not molest the next line
>>   ### command list
>>   # command name                          category [deprecated] [common]
Sébastien Guimmara· May 20, 2015, 19:22 UTC · re: Sébastien Guimmara · lore

[PATCH v9 3/5] generate-cmdlist: parse common group commands

From: Eric Sunshine <sunshine@sunshineco.com>
Parse the group block to create the array of group descriptions:
static char *common_cmd_groups[] = {
    N_("starting a working area"),
    N_("working on the current change"),
    N_("working with others"),
    N_("examining the history and state"),
    N_("growing, marking and tweaking your history"),
};
then map each element of common_cmds[] to a group via its index:
static struct cmdname_help common_cmds[] = {
    {"add", N_("Add file contents to the index"), 1},
    {"branch", N_("List, create, or delete branches"), 4},
    {"checkout", N_("Checkout a branch or paths to the ..."), 4},
    {"clone", N_("Clone a repository into a new directory"), 0},
    {"commit", N_("Record changes to the repository"), 4},
    ...
};
so that 'git help' can print those commands grouped by theme.

Only commands tagged with an attribute from the group block are emitted to common_cmds[].

[commit message by Sébastien Guimmara <sebastien.guimmara@gmail.com>]
Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Sébastien Guimmara <sebastien.guimmara@gmail.com>
---
 Makefile              |  4 ++--
 generate-cmdlist.perl | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
 generate-cmdlist.sh   | 23 -----------------------
 3 files changed, 52 insertions(+), 25 deletions(-)
 create mode 100755 generate-cmdlist.perl
 delete mode 100755 generate-cmdlist.sh
Show changes to 3 files +52 −25

Makefile, generate-cmdlist.perl, generate-cmdlist.sh

diff --git a/Makefile b/Makefile
index 655740d..54ec511 100644
--- a/Makefile
+++ b/Makefile
@@ -1694,10 +1694,10 @@ $(BUILT_INS): git$X
 	ln -s $< $@ 2>/dev/null || \
 	cp $< $@
 
-common-cmds.h: ./generate-cmdlist.sh command-list.txt
+common-cmds.h: generate-cmdlist.perl command-list.txt
 
 common-cmds.h: $(wildcard Documentation/git-*.txt)
-	$(QUIET_GEN)./generate-cmdlist.sh > $@+ && mv $@+ $@
+	$(QUIET_GEN)$(PERL_PATH) generate-cmdlist.perl command-list.txt > $@+ && mv $@+ $@
 
 SCRIPT_DEFINES = $(SHELL_PATH_SQ):$(DIFF_SQ):$(GIT_VERSION):\
 	$(localedir_SQ):$(NO_CURL):$(USE_GETTEXT_SCHEME):$(SANE_TOOL_PATH_SQ):\
diff --git a/generate-cmdlist.perl b/generate-cmdlist.perl
new file mode 100755
index 0000000..31516e3
--- /dev/null
+++ b/generate-cmdlist.perl
@@ -0,0 +1,50 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+print <<"EOT";
+/* Automatically generated by $0 */
+
+struct cmdname_help {
+	char name[16];
+	char help[80];
+	unsigned char group;
+};
+
+static char *common_cmd_groups[] = {
+EOT
+
+my $n = 0;
+my %grp;
+while (<>) {
+	last if /^### command list/;
+	next if (1../^### common groups/) || /^#/ || /^\s*$/;
+	chop;
+	my ($k, $v) = split ' ', $_, 2;
+	$grp{$k} = $n++;
+	print "\tN_(\"$v\"),\n";
+}
+
+print "};\n\nstatic struct cmdname_help common_cmds[] = {\n";
+
+while (<>) {
+	next if /^#/ || /^\s*$/;
+	my @tags = split;
+	my $cmd = shift @tags;
+	for my $t (@tags) {
+		if (exists $grp{$t}) {
+			my $s;
+			open my $f, '<', "Documentation/$cmd.txt" or die;
+			while (<$f>) {
+				($s) = /^$cmd - (.+)$/;
+				last if $s;
+			}
+			close $f;
+			$cmd =~ s/^git-//;
+			print "\t{\"$cmd\", N_(\"$s\"), $grp{$t}},\n";
+			last;
+		}
+	}
+}
+
+print "};\n";
diff --git a/generate-cmdlist.sh b/generate-cmdlist.sh
deleted file mode 100755
index 9a4c9b9..0000000
--- a/generate-cmdlist.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/sh
-
-echo "/* Automatically generated by $0 */
-struct cmdname_help {
-    char name[16];
-    char help[80];
-};
-
-static struct cmdname_help common_cmds[] = {"
-
-sed -n -e 's/^git-\([^ 	]*\)[ 	].* common.*/\1/p' command-list.txt |
-sort |
-while read cmd
-do
-     sed -n '
-     /^NAME/,/git-'"$cmd"'/H
-     ${
-	    x
-	    s/.*git-'"$cmd"' - \(.*\)/  {"'"$cmd"'", N_("\1")},/
-	    p
-     }' "Documentation/git-$cmd.txt"
-done
-echo "};"
-- 
2.4.0.GIT
Sébastien Guimmara· May 20, 2015, 19:27 UTC · re: Sébastien Guimmara · lore

Re: [PATCH v9 3/5] generate-cmdlist: parse common group commands

On 05/20/2015 09:22 PM, Sébastien Guimmara wrote:
> From: Eric Sunshine <sunshine@sunshineco.com>
>

It looks like 'git send-email' got confused with the CC field. I'm sorry for that.

Stefan Beller· May 20, 2015, 19:32 UTC · re: Sébastien Guimmara · lore

Re: [PATCH v9 3/5] generate-cmdlist: parse common group commands

On Wed, May 20, 2015 at 12:27 PM, Sébastien Guimmara <sebastien.guimmara@gmail.com> wrote:

Show 8 quoted lines
> On 05/20/2015 09:22 PM, Sébastien Guimmara wrote:
>>
>> From: Eric Sunshine <sunshine@sunshineco.com>
>>
>
> It looks like 'git send-email' got confused with the CC field.
> I'm sorry for that.
>
It's to keep authorship.

When Junio picks it up, this will show as authored by Eric, signed off by both of you (Eric+Sébastien) and committed by Junio.

Sébastien Guimmara· May 20, 2015, 19:34 UTC · re: Stefan Beller · lore

Re: [PATCH v9 3/5] generate-cmdlist: parse common group commands

On 05/20/2015 09:32 PM, Stefan Beller wrote:
Show 17 quoted lines
> On Wed, May 20, 2015 at 12:27 PM, Sébastien Guimmara
> <sebastien.guimmara@gmail.com> wrote:
>> On 05/20/2015 09:22 PM, Sébastien Guimmara wrote:
>>>
>>> From: Eric Sunshine <sunshine@sunshineco.com>
>>>
>>
>> It looks like 'git send-email' got confused with the CC field.
>> I'm sorry for that.
>>
>
> It's to keep authorship.
>
> When Junio picks it up, this will show as
> authored by Eric, signed off by both of you (Eric+Sébastien)
> and committed by Junio.
>

So it's not a mistake ? I thought the 'From:' line was the email header as generated by git send-email that got wrongly included in the body. My mistake then.

Eric Sunshine· May 20, 2015, 19:32 UTC · re: Sébastien Guimmara · lore

Re: [PATCH v9 3/5] generate-cmdlist: parse common group commands

On Wed, May 20, 2015 at 3:27 PM, Sébastien Guimmara <sebastien.guimmara@gmail.com> wrote:

Show 6 quoted lines
> On 05/20/2015 09:22 PM, Sébastien Guimmara wrote:
>>
>> From: Eric Sunshine <sunshine@sunshineco.com>
>
> It looks like 'git send-email' got confused with the CC field.
> I'm sorry for that.
Confused in what way? The patch arrived looking sane.
Sébastien Guimmara· May 20, 2015, 19:23 UTC · re: Sébastien Guimmara · lore

[PATCH v9 4/5] command-list.txt: drop the "common" tag

command-list.sh, retired in the previous patch, was the only consumer of the "common" tag, so drop this now-unnecessary attribute.

before:
    git-add          mainporcelain        common worktree
after:
    git-add          mainporcelain        worktree
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Sébastien Guimmara <sebastien.guimmara@gmail.com>
---
 command-list.txt | 42 +++++++++++++++++++++---------------------
 1 file changed, 21 insertions(+), 21 deletions(-)
Show changes to command-list.txt +21 −21
diff --git a/command-list.txt b/command-list.txt
index c2bbdc1..080d6d9 100644
--- a/command-list.txt
+++ b/command-list.txt
@@ -11,30 +11,30 @@ remote       collaborate (see also: git help workflows)
 # do not molest the next line
 ### command list
 # command name                          category [deprecated] [common]
-git-add                                 mainporcelain common
+git-add                                 mainporcelain           worktree
 git-am                                  mainporcelain
 git-annotate                            ancillaryinterrogators
 git-apply                               plumbingmanipulators
 git-archimport                          foreignscminterface
 git-archive                             mainporcelain
-git-bisect                              mainporcelain           common info
+git-bisect                              mainporcelain           info
 git-blame                               ancillaryinterrogators
-git-branch                              mainporcelain           common history
+git-branch                              mainporcelain           history
 git-bundle                              mainporcelain
 git-cat-file                            plumbinginterrogators
 git-check-attr                          purehelpers
 git-check-ignore                        purehelpers
 git-check-mailmap                       purehelpers
-git-checkout                            mainporcelain           common history
+git-checkout                            mainporcelain           history
 git-checkout-index                      plumbingmanipulators
 git-check-ref-format                    purehelpers
 git-cherry                              ancillaryinterrogators
 git-cherry-pick                         mainporcelain
 git-citool                              mainporcelain
 git-clean                               mainporcelain
-git-clone                               mainporcelain           common init
+git-clone                               mainporcelain           init
 git-column                              purehelpers
-git-commit                              mainporcelain           common history
+git-commit                              mainporcelain           history
 git-commit-tree                         plumbingmanipulators
 git-config                              ancillarymanipulators
 git-count-objects                       ancillaryinterrogators
@@ -46,14 +46,14 @@ git-cvsimport                           foreignscminterface
 git-cvsserver                           foreignscminterface
 git-daemon                              synchingrepositories
 git-describe                            mainporcelain
-git-diff                                mainporcelain           common history
+git-diff                                mainporcelain           history
 git-diff-files                          plumbinginterrogators
 git-diff-index                          plumbinginterrogators
 git-diff-tree                           plumbinginterrogators
 git-difftool                            ancillaryinterrogators
 git-fast-export                         ancillarymanipulators
 git-fast-import                         ancillarymanipulators
-git-fetch                               mainporcelain           common remote
+git-fetch                               mainporcelain           remote
 git-fetch-pack                          synchingrepositories
 git-filter-branch                       ancillarymanipulators
 git-fmt-merge-msg                       purehelpers
@@ -62,7 +62,7 @@ git-format-patch                        mainporcelain
 git-fsck                                ancillaryinterrogators
 git-gc                                  mainporcelain
 git-get-tar-commit-id                   ancillaryinterrogators
-git-grep                                mainporcelain           common info
+git-grep                                mainporcelain           info
 git-gui                                 mainporcelain
 git-hash-object                         plumbingmanipulators
 git-help                                ancillaryinterrogators
@@ -71,17 +71,17 @@ git-http-fetch                          synchelpers
 git-http-push                           synchelpers
 git-imap-send                           foreignscminterface
 git-index-pack                          plumbingmanipulators
-git-init                                mainporcelain           common init
+git-init                                mainporcelain           init
 git-instaweb                            ancillaryinterrogators
 git-interpret-trailers                  purehelpers
 gitk                                    mainporcelain
-git-log                                 mainporcelain           common info
+git-log                                 mainporcelain           info
 git-ls-files                            plumbinginterrogators
 git-ls-remote                           plumbinginterrogators
 git-ls-tree                             plumbinginterrogators
 git-mailinfo                            purehelpers
 git-mailsplit                           purehelpers
-git-merge                               mainporcelain           common history
+git-merge                               mainporcelain           history
 git-merge-base                          plumbinginterrogators
 git-merge-file                          plumbingmanipulators
 git-merge-index                         plumbingmanipulators
@@ -90,7 +90,7 @@ git-mergetool                           ancillarymanipulators
 git-merge-tree                          ancillaryinterrogators
 git-mktag                               plumbingmanipulators
 git-mktree                              plumbingmanipulators
-git-mv                                  mainporcelain           common worktree
+git-mv                                  mainporcelain           worktree
 git-name-rev                            plumbinginterrogators
 git-notes                               mainporcelain
 git-p4                                  foreignscminterface
@@ -101,11 +101,11 @@ git-parse-remote                        synchelpers
 git-patch-id                            purehelpers
 git-prune                               ancillarymanipulators
 git-prune-packed                        plumbingmanipulators
-git-pull                                mainporcelain           common remote
-git-push                                mainporcelain           common remote
+git-pull                                mainporcelain           remote
+git-push                                mainporcelain           remote
 git-quiltimport                         foreignscminterface
 git-read-tree                           plumbingmanipulators
-git-rebase                              mainporcelain           common history
+git-rebase                              mainporcelain           history
 git-receive-pack                        synchelpers
 git-reflog                              ancillarymanipulators
 git-relink                              ancillarymanipulators
@@ -114,28 +114,28 @@ git-repack                              ancillarymanipulators
 git-replace                             ancillarymanipulators
 git-request-pull                        foreignscminterface
 git-rerere                              ancillaryinterrogators
-git-reset                               mainporcelain           common worktree
+git-reset                               mainporcelain           worktree
 git-revert                              mainporcelain
 git-rev-list                            plumbinginterrogators
 git-rev-parse                           ancillaryinterrogators
-git-rm                                  mainporcelain           common worktree
+git-rm                                  mainporcelain           worktree
 git-send-email                          foreignscminterface
 git-send-pack                           synchingrepositories
 git-shell                               synchelpers
 git-shortlog                            mainporcelain
-git-show                                mainporcelain           common info
+git-show                                mainporcelain           info
 git-show-branch                         ancillaryinterrogators
 git-show-index                          plumbinginterrogators
 git-show-ref                            plumbinginterrogators
 git-sh-i18n                             purehelpers
 git-sh-setup                            purehelpers
 git-stash                               mainporcelain
-git-status                              mainporcelain           common info
+git-status                              mainporcelain           info
 git-stripspace                          purehelpers
 git-submodule                           mainporcelain
 git-svn                                 foreignscminterface
 git-symbolic-ref                        plumbingmanipulators
-git-tag                                 mainporcelain           common history
+git-tag                                 mainporcelain           history
 git-unpack-file                         plumbinginterrogators
 git-unpack-objects                      plumbingmanipulators
 git-update-index                        plumbingmanipulators
-- 
2.4.0.GIT
Sébastien Guimmara· May 20, 2015, 19:23 UTC · re: Sébastien Guimmara · lore

[PATCH v9 5/5] help: respect new common command grouping

'git help' shows common commands in alphabetical order:
The most commonly used git commands are:
   add        Add file contents to the index
   bisect     Find by binary search the change that introduced a bug
   branch     List, create, or delete branches
   checkout   Checkout a branch or paths to the working tree
   clone      Clone a repository into a new directory
   commit     Record changes to the repository
   [...]

without any indication of how commands relate to high-level concepts or each other. Revise the output to explain their relationship with the typical Git workflow:

These are common Git commands used in various situations:
start a working area (see also: git help tutorial)
   clone      Clone a repository into a new directory
   init       Create an empty Git repository or reinitialize [...]
work on the current change (see also: git help everyday)
   add        Add file contents to the index
   reset      Reset current HEAD to the specified state
examine the history and state (see also: git help revisions)
   log        Show commit logs
   status     Show the working tree status
   [...]
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Sébastien Guimmara <sebastien.guimmara@gmail.com>
---
 help.c | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)
Show changes to help.c +23 −1
diff --git a/help.c b/help.c
index 2072a87..8f72051 100644
--- a/help.c
+++ b/help.c
@@ -218,17 +218,39 @@ void list_commands(unsigned int colopts,
 	}
 }
 
+static int cmd_group_cmp(const void *elem1, const void *elem2)
+{
+	const struct cmdname_help *e1 = elem1;
+	const struct cmdname_help *e2 = elem2;
+
+	if (e1->group < e2->group)
+		return -1;
+	if (e1->group > e2->group)
+		return 1;
+	return strcmp(e1->name, e2->name);
+}
+
 void list_common_cmds_help(void)
 {
 	int i, longest = 0;
+	int current_grp = -1;
 
 	for (i = 0; i < ARRAY_SIZE(common_cmds); i++) {
 		if (longest < strlen(common_cmds[i].name))
 			longest = strlen(common_cmds[i].name);
 	}
 
-	puts(_("The most commonly used git commands are:"));
+	qsort(common_cmds, ARRAY_SIZE(common_cmds),
+		sizeof(common_cmds[0]), cmd_group_cmp);
+
+	puts(_("These are common Git commands used in various situations:"));
+
 	for (i = 0; i < ARRAY_SIZE(common_cmds); i++) {
+		if (common_cmds[i].group != current_grp) {
+			printf("\n%s\n", _(common_cmd_groups[common_cmds[i].group]));
+			current_grp = common_cmds[i].group;
+		}
+
 		printf("   %s   ", common_cmds[i].name);
 		mput_char(' ', longest - strlen(common_cmds[i].name));
 		puts(_(common_cmds[i].help));
-- 
2.4.0.GIT
Ramsay Jones· May 20, 2015, 21:39 UTC · re: Sébastien Guimmara · lore

Re: [PATCH v9 5/5] help: respect new common command grouping

On 20/05/15 20:23, Sébastien Guimmara wrote:
Show 33 quoted lines
> 'git help' shows common commands in alphabetical order:
> 
> The most commonly used git commands are:
>    add        Add file contents to the index
>    bisect     Find by binary search the change that introduced a bug
>    branch     List, create, or delete branches
>    checkout   Checkout a branch or paths to the working tree
>    clone      Clone a repository into a new directory
>    commit     Record changes to the repository
>    [...]
> 
> without any indication of how commands relate to high-level
> concepts or each other. Revise the output to explain their relationship
> with the typical Git workflow:
> 
> These are common Git commands used in various situations:
> 
> start a working area (see also: git help tutorial)
>    clone      Clone a repository into a new directory
>    init       Create an empty Git repository or reinitialize [...]
> 
> work on the current change (see also: git help everyday)
>    add        Add file contents to the index
>    reset      Reset current HEAD to the specified state
> 
> examine the history and state (see also: git help revisions)
>    log        Show commit logs
>    status     Show the working tree status
> 
>    [...]
> 
> Helped-by: Eric Sunshine <sunshine@sunshineco.com>
> Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>

This should be (at most) 'Helped-by:' - my 'contribution' was so minor that even a 'Helped-by:' is generous! :-D

ATB, Ramsay Jones

Show 51 quoted lines
> Signed-off-by: Sébastien Guimmara <sebastien.guimmara@gmail.com>
> ---
>  help.c | 24 +++++++++++++++++++++++-
>  1 file changed, 23 insertions(+), 1 deletion(-)
> 
> diff --git a/help.c b/help.c
> index 2072a87..8f72051 100644
> --- a/help.c
> +++ b/help.c
> @@ -218,17 +218,39 @@ void list_commands(unsigned int colopts,
>  	}
>  }
>  
> +static int cmd_group_cmp(const void *elem1, const void *elem2)
> +{
> +	const struct cmdname_help *e1 = elem1;
> +	const struct cmdname_help *e2 = elem2;
> +
> +	if (e1->group < e2->group)
> +		return -1;
> +	if (e1->group > e2->group)
> +		return 1;
> +	return strcmp(e1->name, e2->name);
> +}
> +
>  void list_common_cmds_help(void)
>  {
>  	int i, longest = 0;
> +	int current_grp = -1;
>  
>  	for (i = 0; i < ARRAY_SIZE(common_cmds); i++) {
>  		if (longest < strlen(common_cmds[i].name))
>  			longest = strlen(common_cmds[i].name);
>  	}
>  
> -	puts(_("The most commonly used git commands are:"));
> +	qsort(common_cmds, ARRAY_SIZE(common_cmds),
> +		sizeof(common_cmds[0]), cmd_group_cmp);
> +
> +	puts(_("These are common Git commands used in various situations:"));
> +
>  	for (i = 0; i < ARRAY_SIZE(common_cmds); i++) {
> +		if (common_cmds[i].group != current_grp) {
> +			printf("\n%s\n", _(common_cmd_groups[common_cmds[i].group]));
> +			current_grp = common_cmds[i].group;
> +		}
> +
>  		printf("   %s   ", common_cmds[i].name);
>  		mput_char(' ', longest - strlen(common_cmds[i].name));
>  		puts(_(common_cmds[i].help));
> 
Sébastien Guimmara· May 20, 2015, 21:42 UTC · re: Ramsay Jones · lore

Re: [PATCH v9 5/5] help: respect new common command grouping

On 05/20/2015 11:39 PM, Ramsay Jones wrote:
Show 10 quoted lines
> On 20/05/15 20:23, Sébastien Guimmara wrote:
>>
>> Helped-by: Eric Sunshine <sunshine@sunshineco.com>
>> Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
>
> This should be (at most) 'Helped-by:' - my 'contribution' was
> so minor that even a 'Helped-by:' is generous! :-D
>
> ATB,
> Ramsay Jones

Ha! I'm still not very comfortable with picking the right attribution...

Eric Sunshine· May 20, 2015, 19:31 UTC · re: Sébastien Guimmara · lore

Re: [PATCH v9 0/5] group common commands by theme

On Wed, May 20, 2015 at 3:22 PM, Sébastien Guimmara <sebastien.guimmara@gmail.com> wrote:

Show 8 quoted lines
> The major modification of this reroll [1] is the use of the perl version
> of generate-cmdlist instead of the awk one.
>
> help.c:
> 1. change the introductory message from:
>         "The typical Git workflow includes:"
> to:
>     "These are common Git commands used in various situations:"
Which is just a longer way to say what the original said:
    "The most commonly used git commands are:"
I don't care strongly, but the terseness of the original has a certain appeal.

← back to recent threads