List all guides in git(1)
cover List all guides in git(1)
This series adds a list of the guides to git(1).
The first commit adds the misssing guides 'gitcredentials' and 'gitremote-helpers' to command-list.txt. The only missing guide after this change is 'gitweb.conf', but I think this one is obscure anough, and already linked to in 'gitweb.txt', that it does not matter much.
The second commit drops the usage of 'common' and 'useful' for guides. This was suggested as one of two ways forward by Duy in [1] but was not commented on. I'm CC'ing the people that were CC'ed on that message.
The third commit tweaks 'Documentation/cmd-list.perl' so that it also generates a list of the guides, which gets included in 'git.txt'. I chose to put this list just after the end of the list of commands.
[1]
https://lore.kernel.org/git/CACsJy8ADj-bTMYDHxRNLOMppOEdPbVwL49u3XCfNBCmoLLZo+A@mail.gmail.com/
Philippe Blain (3):
command-list.txt: add missing 'gitcredentials' and 'gitremote-helpers'
help: drop usage of 'common' and 'useful' for guides git.txt: add list of guides
Documentation/Makefile | 1 + Documentation/cmd-list.perl | 10 ++++++++-- Documentation/git-help.txt | 6 +++--- Documentation/git.txt | 7 +++++++ Documentation/gitcredentials.txt | 2 +- builtin/help.c | 2 +- command-list.txt | 2 ++ help.c | 4 ++-- help.h | 2 +- 9 files changed, 26 insertions(+), 10 deletions(-)
base-commit: e8ab941b671da6890181aea5b5755d1d9eea24ec
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-691%2Fphil-blain%2Flist-guides-in-git.1-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-691/phil-blain/list-guides-in-git.1-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/691
Signature · 1 line
gitgitgadget
PATCH 1/3 command-list.txt: add missing 'gitcredentials' and 'gitremote-helpers'
From: Philippe Blain <[email protected]>
The guides 'gitcredentials' and 'gitremote-helpers' do not currently appear in command-list.txt.
'gitcredentials' was forgotten back when guides were added to command-list.txt in 1b81d8cb19 (help: use command-list.txt for the source of guides, 2018-05-20).
'gitremote-helpers' was moved to section 7 in 439cc74632 (docs: move gitremote-helpers into section 7, 2019-03-25), but command-list.txt was not updated at the time.
Add these two guides to the list of guides in 'command-list.txt', so that they appear in the output of 'git help --guides', and capitalize the first word of the description of 'gitcredentials', as was done in 1b81d8c (help: use command-list.txt for the source of guides, 2018-05-20) for the other guides.
While at it, add a comment in Documentation/Makefile to remind developers to update command-list.txt if they add a new guide.
--- Documentation/Makefile | 1 + Documentation/gitcredentials.txt | 2 +- command-list.txt | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-)
Documentation/Makefile +1 -0
@@ -17,6 +17,7 @@ MAN1_TXT += git.txt MAN1_TXT += gitk.txt MAN1_TXT += gitweb.txt +# man5 / man7 guides (note: new guides should also be added to command-list.txt) MAN5_TXT += gitattributes.txt MAN5_TXT += githooks.txt MAN5_TXT += gitignore.txt
Documentation/gitcredentials.txt +1 -1
@@ -3,7 +3,7 @@ gitcredentials(7) NAME ---- -gitcredentials - providing usernames and passwords to Git +gitcredentials - Providing usernames and passwords to Git SYNOPSIS --------
command-list.txt +2 -0
@@ -195,6 +195,7 @@ git-write-tree plumbingmanipulators gitattributes guide gitcli guide gitcore-tutorial guide +gitcredentials guide gitcvs-migration guide gitdiffcore guide giteveryday guide
@@ -204,6 +205,7 @@ githooks guide gitignore guide gitmodules guide gitnamespaces guide +gitremote-helpers guide gitrepository-layout guide gitrevisions guide gitsubmodules guide
Signature · 1 line
gitgitgadget
PATCH 2/3 help: drop usage of 'common' and 'useful' for guides
In reply to Philippe Blain via GitGitGadgetFrom: Philippe Blain <[email protected]>
Since 1b81d8cb19 (help: use command-list.txt for the source of guides, 2018-05-20), all man5/man7 guides listed in command-list.txt appear in the output of 'git help -g'.
However, 'git help -g' still prefixes this list with "The common Git guides are:", which makes one wonder if there are others!
In the same spirit, the man page for 'git help' describes the '--guides' option as listing 'useful' guides, which is not false per se but can also be taken to mean that there are other guides that exist but are not useful.
Instead of 'common' and 'useful', use 'Git concept guides' in both places. To keep the code in line with this change, rename help.c::list_common_guides_help to list_guides_help.
--- Documentation/git-help.txt | 6 +++--- builtin/help.c | 2 +- help.c | 4 ++-- help.h | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-)
Documentation/git-help.txt +3 -3
@@ -21,8 +21,8 @@ on the standard output. If the option `--all` or `-a` is given, all available commands are printed on the standard output. -If the option `--guides` or `-g` is given, a list of the useful -Git guides is also printed on the standard output. +If the option `--guides` or `-g` is given, a list of the +Git concept guides is also printed on the standard output. If a command, or a guide, is given, a manual page for that command or guide is brought up. The 'man' program is used by default for this
@@ -58,7 +58,7 @@ OPTIONS -g:: --guides:: - Prints a list of useful guides on the standard output. This + Prints a list of the Git concept guides on the standard output. This option overrides any given command or guide name. -i::
builtin/help.c +1 -1
@@ -579,7 +579,7 @@ int cmd_help(int argc, const char **argv, const char *prefix) }if (show_guides) -list_common_guides_help (); +list_guides_help ();if (show_all || show_guides) {printf ("%s\n" ,_ (git_more_info_string));
help.c +2 -2
@@ -397,10 +397,10 @@ void list_cmds_by_config(struct string_list *list) } } -void list_common_guides_help (void ) +void list_guides_help (void ) {struct category_description catdesc[] = { - { CAT_guide,N_ ("The common Git guides are:" ) }, + { CAT_guide,N_ ("The Git concept guides are:" ) }, {0 ,NULL } };print_cmd_by_category (catdesc,NULL );
help.h +1 -1
@@ -21,7 +21,7 @@ static inline void mput_char(char c, unsigned int num)void list_common_cmds_help (void );void list_all_cmds_help (void ); -void list_common_guides_help (void ); +void list_guides_help (void );void list_all_main_cmds (struct string_list *list);void list_all_other_cmds (struct string_list *list);
Signature · 1 line
gitgitgadget
PATCH 3/3 git.txt: add list of guides
In reply to Philippe Blain via GitGitGadgetFrom: Philippe Blain <[email protected]>
Not all guides are mentioned in the 'git(1)' documentation, which makes the missing ones somewhat hard to find.
Add a list of the guides to git(1).
Tweak Documentation/cmd-list.perl so that it also generates a file cmds-guide.txt which gets included in git.txt.
Also, do not hard-code the manual section '1'. Instead, use a regex so that the manual section is discovered from the first line of each git*.txt file.
This addition was hinted at in 1b81d8cb19 (help: use command-list.txt for the source of guides, 2018-05-20).
--- Documentation/cmd-list.perl | 10 ++++++++-- Documentation/git.txt | 7 +++++++ 2 files changed, 15 insertions(+), 2 deletions(-)
Documentation/cmd-list.perl +8 -2
@@ -6,9 +6,14 @@ sub format_one { my ($out, $nameattr) = @_; my ($name, $attr) = @$nameattr; my ($state, $description); + my $mansection; $state = 0; open I, '<', "$name.txt" or die "No such file $name.txt"; while (<I>) { + if (/^git[a-z0-9-]*\(([0-9])\)$/) { + $mansection = $1; + next; + } if (/^NAME$/) { $state = 1; next;
@@ -27,7 +32,7 @@ sub format_one { die "No description found in $name.txt"; } if (my ($verify_name, $text) = ($description =~ /^($name) - (.*)/)) { - print $out "linkgit:$name\[1\]::\n\t"; + print $out "linkgit:$name\[$mansection\]::\n\t"; if ($attr =~ / deprecated /) { print $out "(deprecated) "; }
@@ -60,7 +65,8 @@ sub format_one { synchingrepositories foreignscminterface purehelpers - synchelpers)) { + synchelpers + guide)) { my $out = "cmds-$cat.txt"; open O, '>', "$out+" or die "Cannot open output file $out+"; for (@{$cmds{$cat}}) {
Documentation/git.txt +7 -0
@@ -304,6 +304,13 @@ users typically do not use them directly. include::cmds-purehelpers.txt[] +Guides +------ + +The following documentation pages are guides about Git concepts. + +include::cmds-guide.txt[] + Configuration Mechanism -----------------------
Signature · 1 line
gitgitgadget
Re: [PATCH 3/3] git.txt: add list of guides
Quoted 9 lines · Philippe Blain via GitGitGadget
From: Philippe Blain <[email protected]>
Not all guides are mentioned in the 'git(1)' documentation, which makes the missing ones somewhat hard to find.
Add a list of the guides to git(1).
Tweak
Documentation/cmd-list.perlso that it also generates a filecmds-guide.txtwhich gets included in git.txt.
Who cleans this? Do we need a change to Makefile?
Re: [PATCH 3/3] git.txt: add list of guides
Quoted 7 lines · Junio C Hamano
Quoted 5 lines · Philippe Blain via GitGitGadget
From: Philippe Blain <[email protected]>
Not all guides are mentioned in the 'git(1)' documentation, which makes the missing ones somewhat hard to find.
Quoted 6 lines
Quoted 4 lines
Add a list of the guides to git(1).
Tweak
Documentation/cmd-list.perlso that it also generates a filecmds-guide.txtwhich gets included in git.txt.Who cleans this? Do we need a change to
Makefile?
A band-aid patch would look like this, BUT.
diff --git a/Documentation/Makefile b/Documentation/Makefile
index 39f6fc8de7..616449da88 100644
--- a/Documentation/Makefile
+++ b/Documentation/Makefile
@@ -295,6 +295,7 @@ cmds_txt = cmds-ancillaryinterrogators.txt \
cmds-plumbingmanipulators.txt \
cmds-synchingrepositories.txt \
cmds-synchelpers.txt \
+ cmds-guide.txt \
cmds-purehelpers.txt \
cmds-foreignscminterface.txtI think with a bit more work, we can be at a lot better place. How about something along the following line (untested)?
Documentation/Makefile | 3 ++- Documentation/cmd-list.perl | 21 ++++++++------------- 2 files changed, 10 insertions(+), 14 deletions(-)
Documentation/Makefile +2 -1
@@ -295,6 +295,7 @@ cmds_txt = cmds-ancillaryinterrogators.txt \ cmds-plumbingmanipulators.txt \ cmds-synchingrepositories.txt \ cmds-synchelpers.txt \ + cmds-guide.txt \ cmds-purehelpers.txt \ cmds-foreignscminterface.txt
@@ -302,7 +303,7 @@ $(cmds_txt): cmd-list.made cmd-list.made: cmd-list.perl ../command-list.txt $(MAN1_TXT) $(QUIET_GEN)$(RM) $@ && \ - $(PERL_PATH) ./cmd-list.perl ../command-list.txt $(QUIET_STDERR) && \ + $(PERL_PATH) ./cmd-list.perl ../command-list.txt $(cmds_txt) $(QUIET_STDERR) && \ date >$@ mergetools_txt = mergetools-diff.txt mergetools-merge.txt
Documentation/cmd-list.perl +8 -13
@@ -43,12 +43,15 @@ sub format_one { } } -while (<>) { +my ($input, @categories) = @ARGV; + +open IN, "<$input"; +while (<IN>) { last if /^### command list/; } my %cmds = (); -for (sort <>) { +for (sort <IN>) { next if /^#/; chomp;
@@ -56,18 +59,10 @@ sub format_one { $attr = '' unless defined $attr; push @{$cmds{$cat}}, [$name, " $attr "]; } +close IN; -for my $cat (qw(ancillaryinterrogators - ancillarymanipulators - mainporcelain - plumbinginterrogators - plumbingmanipulators - synchingrepositories - foreignscminterface - purehelpers - synchelpers - guide)) { - my $out = "cmds-$cat.txt"; +for my $out (@categories) { + my ($cat) = $out =~ /^cmds-(.*)\.txt$/; open O, '>', "$out+" or die "Cannot open output file $out+"; for (@{$cmds{$cat}}) { format_one(\*O, $_);
Re: [PATCH 3/3] git.txt: add list of guides
Hi Junio,
Quoted 11 lines · Junio C Hamano
Quoted 7 lines · Junio C Hamano
Quoted 5 lines · Philippe Blain via GitGitGadget
From: Philippe Blain <[email protected]>
Not all guides are mentioned in the 'git(1)' documentation, which makes the missing ones somewhat hard to find.
Quoted 6 lines
Quoted 6 lines
Quoted 4 lines
Add a list of the guides to git(1).
Tweak
Documentation/cmd-list.perlso that it also generates a filecmds-guide.txtwhich gets included in git.txt.Who cleans this? Do we need a change to
Makefile?
Oups! I checked /.gitignore, but forgot to thoroughly check the Makefile.
Quoted 77 lines
A band-aid patch would look like this, BUT.
diff --git a/Documentation/Makefile b/Documentation/Makefile index 39f6fc8de7..616449da88 100644 --- a/Documentation/Makefile +++ b/Documentation/Makefile @@ -295,6 +295,7 @@ cmds_txt = cmds-ancillaryinterrogators.txt \ cmds-plumbingmanipulators.txt \ cmds-synchingrepositories.txt \ cmds-synchelpers.txt \ + cmds-guide.txt \ cmds-purehelpers.txt \ cmds-foreignscminterface.txtI think with a bit more work, we can be at a lot better place. How about something along the following line (untested)?
Documentation/Makefile| 3 ++-Documentation/cmd-list.perl| 21 ++++++++-------------2 files changed, 10 insertions(+), 14 deletions(-)Documentation/Makefile +2
-1@@ -295,6 +295,7 @@ cmds_txt = cmds-ancillaryinterrogators.txt \ cmds-plumbingmanipulators.txt \ cmds-synchingrepositories.txt \ cmds-synchelpers.txt \ + cmds-guide.txt \ cmds-purehelpers.txt \ cmds-foreignscminterface.txt@@ -302,7 +303,7 @@ $(cmds_txt): cmd-list.made cmd-list.made: cmd-list.perl ../command-list.txt $(MAN1_TXT) $(QUIET_GEN)$(RM) $@ && \ - $(PERL_PATH) ./cmd-list.perl ../command-list.txt $(QUIET_STDERR) && \ + $(PERL_PATH) ./cmd-list.perl ../command-list.txt $(cmds_txt) $(QUIET_STDERR) && \ date >$@
mergetools_txt= mergetools-diff.txt mergetools-merge.txtDocumentation/cmd-list.perl +6
-8@@ -43,12 +43,15 @@ sub format_one { } } -while (<>) { +my ($input, @categories) = @ARGV; + +open IN, "<$input"; +while (<IN>) { last if /^### command list/; } my %cmds = (); -for (sort <>) { +for (sort <IN>) { next if /^#/; chomp;@@ -56,18 +59,10 @@ sub format_one { $attr = '' unless defined $attr; push @{$cmds{$cat}}, [$name, " $attr "]; } +close IN; -for my $cat (qw(ancillaryinterrogators - ancillarymanipulators - mainporcelain - plumbinginterrogators - plumbingmanipulators - synchingrepositories
Documentation/cmd-list.perl sub format_one { · line 68
Quoted 10 lines
Documentation/cmd-list.perl +2
-5- foreignscminterface - purehelpers - synchelpers - guide)) { - my $out = "cmds-$cat.txt"; +for my $out (@categories) { + my ($cat) = $out =~ /^cmds-(.*)\.txt$/; open O, '>', "$out+" or die "Cannot open output file $out+"; for (@{$cmds{$cat}}) { format_one(\*O, $_);
Thanks for the suggestion. I tested it and it works correctly. I've incorporated it to v2.
Philippe.
v2 cover List all guides in git(1)
In reply to Philippe Blain via GitGitGadgetChanges since v1:
* Incorporated Junio's suggestion to reduce duplication.
v1: This series adds a list of the guides to git(1).
The first commit adds the misssing guides 'gitcredentials' and 'gitremote-helpers' to command-list.txt. The only missing guide after this change is 'gitweb.conf', but I think this one is obscure anough, and already linked to in 'gitweb.txt', that it does not matter much.
The second commit drops the usage of 'common' and 'useful' for guides. This was suggested as one of two ways forward by Duy in [1] but was not commented on. I'm CC'ing the people that were CC'ed on that message.
The third commit tweaks 'Documentation/cmd-list.perl' so that it also generates a list of the guides, which gets included in 'git.txt'. I chose to put this list just after the end of the list of commands.
[1]
https://lore.kernel.org/git/CACsJy8ADj-bTMYDHxRNLOMppOEdPbVwL49u3XCfNBCmoLLZo+A@mail.gmail.com/
Philippe Blain (3):
command-list.txt: add missing 'gitcredentials' and 'gitremote-helpers'
help: drop usage of 'common' and 'useful' for guides git.txt: add list of guides
Documentation/Makefile | 4 +++- Documentation/cmd-list.perl | 27 ++++++++++++++------------- Documentation/git-help.txt | 6 +++--- Documentation/git.txt | 7 +++++++ Documentation/gitcredentials.txt | 2 +- builtin/help.c | 2 +- command-list.txt | 2 ++ help.c | 4 ++-- help.h | 2 +- 9 files changed, 34 insertions(+), 22 deletions(-)
base-commit: e8ab941b671da6890181aea5b5755d1d9eea24ec
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-691%2Fphil-blain%2Flist-guides-in-git.1-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-691/phil-blain/list-guides-in-git.1-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/691
Range-diff vs v1:
1: 2bd473e0aa = 1: 2bd473e0aa command-list.txt: add missing 'gitcredentials' and 'gitremote-helpers' 2: f49cf08f4f = 2: f49cf08f4f help: drop usage of 'common' and 'useful' for guides 3: 9374d80f0c ! 3: 4394bb357b git.txt: add list of guides
@@ Metadata
## Commit message ##
git.txt: add list of guides
- Not all guides are mentioned in the 'git(1)' documentation,
+ Not all man5/man7 guides are mentioned in the 'git(1)' documentation,
which makes the missing ones somewhat hard to find.
- Add a list of the guides to git(1).
+ Add a list of the guides to git(1) by leveraging the existing
+ Documentation/cmd-list.perl script to generate a file cmds-guide.txt
+ which gets included in git.txt.
- Tweak Documentation/cmd-list.perl so that it also generates
- a file cmds-guide.txt which gets included in git.txt.
+ Instead of hard-coding the list of command categories in both
+ Documentation/Makefile and Documentation/cmd-list.perl, make the
+ Makefile the authoritative source and tweak cmd-list.perl so that it
+ receives the list of command categories as argument.
Also, do not hard-code the manual section '1'. Instead, use a regex so that the manual section is discovered from the first line of each
@@ Commit message
This addition was hinted at in 1b81d8cb19 (help: use command-list.txt for the source of guides, 2018-05-20).
+ Helped-by: Junio C Hamano <[email protected]>
+ ## Documentation/Makefile ##
+@@ Documentation/Makefile: cmds_txt = cmds-ancillaryinterrogators.txt \
+ cmds-plumbingmanipulators.txt \
+ cmds-synchingrepositories.txt \
+ cmds-synchelpers.txt \
++ cmds-guide.txt \
+ cmds-purehelpers.txt \
+ cmds-foreignscminterface.txt
+
+@@ Documentation/Makefile: $(cmds_txt): cmd-list.made
+
+ cmd-list.made: cmd-list.perl ../command-list.txt $(MAN1_TXT)
+ $(QUIET_GEN)$(RM) $@ && \
+- $(PERL_PATH) ./cmd-list.perl ../command-list.txt $(QUIET_STDERR) && \
++ $(PERL_PATH) ./cmd-list.perl ../command-list.txt $(cmds_txt) $(QUIET_STDERR) && \
+ date >$@
+
+ mergetools_txt = mergetools-diff.txt mergetools-merge.txt +
## Documentation/cmd-list.perl ##
@@ Documentation/cmd-list.perl: sub format_one {
my ($out, $nameattr) = @_;
@@ Documentation/cmd-list.perl: sub format_one {
print $out "(deprecated) ";
}
@@ Documentation/cmd-list.perl: sub format_one {
- synchingrepositories
- foreignscminterface
- purehelpers
+ }
+ }
+
+-while (<>) {
++my ($input, @categories) = @ARGV;
++
++open IN, "<$input";
++while (<IN>) {
+ last if /^### command list/;
+ }
+
+ my %cmds = ();
+-for (sort <>) {
++for (sort <IN>) {
+ next if /^#/;
+
+ chomp;
+@@ Documentation/cmd-list.perl: sub format_one {
+ $attr = '' unless defined $attr;
+ push @{$cmds{$cat}}, [$name, " $attr "];
+ }
++close IN;
+
+-for my $cat (qw(ancillaryinterrogators
+- ancillarymanipulators
+- mainporcelain
+- plumbinginterrogators
+- plumbingmanipulators
+- synchingrepositories
+- foreignscminterface
+- purehelpers
- synchelpers)) {
-+ synchelpers
-+ guide)) {
- my $out = "cmds-$cat.txt";
+- my $out = "cmds-$cat.txt";
++for my $out (@categories) {
++ my ($cat) = $out =~ /^cmds-(.*)\.txt$/;
open O, '>', "$out+" or die "Cannot open output file $out+"; for (@{$cmds{$cat}}) {
+ format_one(\*O, $_);
## Documentation/git.txt ##
@@ Documentation/git.txt: users typically do not use them directly.
Signature · 1 line
gitgitgadget
PATCH v2 1/3 command-list.txt: add missing 'gitcredentials' and 'gitremote-helpers'
From: Philippe Blain <[email protected]>
The guides 'gitcredentials' and 'gitremote-helpers' do not currently appear in command-list.txt.
'gitcredentials' was forgotten back when guides were added to command-list.txt in 1b81d8cb19 (help: use command-list.txt for the source of guides, 2018-05-20).
'gitremote-helpers' was moved to section 7 in 439cc74632 (docs: move gitremote-helpers into section 7, 2019-03-25), but command-list.txt was not updated at the time.
Add these two guides to the list of guides in 'command-list.txt', so that they appear in the output of 'git help --guides', and capitalize the first word of the description of 'gitcredentials', as was done in 1b81d8c (help: use command-list.txt for the source of guides, 2018-05-20) for the other guides.
While at it, add a comment in Documentation/Makefile to remind developers to update command-list.txt if they add a new guide.
--- Documentation/Makefile | 1 + Documentation/gitcredentials.txt | 2 +- command-list.txt | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-)
Documentation/Makefile +1 -0
@@ -17,6 +17,7 @@ MAN1_TXT += git.txt MAN1_TXT += gitk.txt MAN1_TXT += gitweb.txt +# man5 / man7 guides (note: new guides should also be added to command-list.txt) MAN5_TXT += gitattributes.txt MAN5_TXT += githooks.txt MAN5_TXT += gitignore.txt
Documentation/gitcredentials.txt +1 -1
@@ -3,7 +3,7 @@ gitcredentials(7) NAME ---- -gitcredentials - providing usernames and passwords to Git +gitcredentials - Providing usernames and passwords to Git SYNOPSIS --------
command-list.txt +2 -0
@@ -195,6 +195,7 @@ git-write-tree plumbingmanipulators gitattributes guide gitcli guide gitcore-tutorial guide +gitcredentials guide gitcvs-migration guide gitdiffcore guide giteveryday guide
@@ -204,6 +205,7 @@ githooks guide gitignore guide gitmodules guide gitnamespaces guide +gitremote-helpers guide gitrepository-layout guide gitrevisions guide gitsubmodules guide
Signature · 1 line
gitgitgadget
PATCH v2 2/3 help: drop usage of 'common' and 'useful' for guides
In reply to Philippe Blain via GitGitGadgetFrom: Philippe Blain <[email protected]>
Since 1b81d8cb19 (help: use command-list.txt for the source of guides, 2018-05-20), all man5/man7 guides listed in command-list.txt appear in the output of 'git help -g'.
However, 'git help -g' still prefixes this list with "The common Git guides are:", which makes one wonder if there are others!
In the same spirit, the man page for 'git help' describes the '--guides' option as listing 'useful' guides, which is not false per se but can also be taken to mean that there are other guides that exist but are not useful.
Instead of 'common' and 'useful', use 'Git concept guides' in both places. To keep the code in line with this change, rename help.c::list_common_guides_help to list_guides_help.
--- Documentation/git-help.txt | 6 +++--- builtin/help.c | 2 +- help.c | 4 ++-- help.h | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-)
Documentation/git-help.txt +3 -3
@@ -21,8 +21,8 @@ on the standard output. If the option `--all` or `-a` is given, all available commands are printed on the standard output. -If the option `--guides` or `-g` is given, a list of the useful -Git guides is also printed on the standard output. +If the option `--guides` or `-g` is given, a list of the +Git concept guides is also printed on the standard output. If a command, or a guide, is given, a manual page for that command or guide is brought up. The 'man' program is used by default for this
@@ -58,7 +58,7 @@ OPTIONS -g:: --guides:: - Prints a list of useful guides on the standard output. This + Prints a list of the Git concept guides on the standard output. This option overrides any given command or guide name. -i::
builtin/help.c +1 -1
@@ -579,7 +579,7 @@ int cmd_help(int argc, const char **argv, const char *prefix) }if (show_guides) -list_common_guides_help (); +list_guides_help ();if (show_all || show_guides) {printf ("%s\n" ,_ (git_more_info_string));
help.c +2 -2
@@ -397,10 +397,10 @@ void list_cmds_by_config(struct string_list *list) } } -void list_common_guides_help (void ) +void list_guides_help (void ) {struct category_description catdesc[] = { - { CAT_guide,N_ ("The common Git guides are:" ) }, + { CAT_guide,N_ ("The Git concept guides are:" ) }, {0 ,NULL } };print_cmd_by_category (catdesc,NULL );
help.h +1 -1
@@ -21,7 +21,7 @@ static inline void mput_char(char c, unsigned int num)void list_common_cmds_help (void );void list_all_cmds_help (void ); -void list_common_guides_help (void ); +void list_guides_help (void );void list_all_main_cmds (struct string_list *list);void list_all_other_cmds (struct string_list *list);
Signature · 1 line
gitgitgadget
PATCH v2 3/3 git.txt: add list of guides
In reply to Philippe Blain via GitGitGadgetFrom: Philippe Blain <[email protected]>
Not all man5/man7 guides are mentioned in the 'git(1)' documentation, which makes the missing ones somewhat hard to find.
Add a list of the guides to git(1) by leveraging the existing Documentation/cmd-list.perl script to generate a file cmds-guide.txt which gets included in git.txt.
Instead of hard-coding the list of command categories in both Documentation/Makefile and Documentation/cmd-list.perl, make the Makefile the authoritative source and tweak cmd-list.perl so that it receives the list of command categories as argument.
Also, do not hard-code the manual section '1'. Instead, use a regex so that the manual section is discovered from the first line of each git*.txt file.
This addition was hinted at in 1b81d8cb19 (help: use command-list.txt for the source of guides, 2018-05-20).
--- Documentation/Makefile | 3 ++- Documentation/cmd-list.perl | 27 ++++++++++++++------------- Documentation/git.txt | 7 +++++++ 3 files changed, 23 insertions(+), 14 deletions(-)
Documentation/Makefile +2 -1
@@ -295,6 +295,7 @@ cmds_txt = cmds-ancillaryinterrogators.txt \ cmds-plumbingmanipulators.txt \ cmds-synchingrepositories.txt \ cmds-synchelpers.txt \ + cmds-guide.txt \ cmds-purehelpers.txt \ cmds-foreignscminterface.txt
@@ -302,7 +303,7 @@ $(cmds_txt): cmd-list.made cmd-list.made: cmd-list.perl ../command-list.txt $(MAN1_TXT) $(QUIET_GEN)$(RM) $@ && \ - $(PERL_PATH) ./cmd-list.perl ../command-list.txt $(QUIET_STDERR) && \ + $(PERL_PATH) ./cmd-list.perl ../command-list.txt $(cmds_txt) $(QUIET_STDERR) && \ date >$@ mergetools_txt = mergetools-diff.txt mergetools-merge.txt
Documentation/cmd-list.perl +14 -13
@@ -6,9 +6,14 @@ sub format_one { my ($out, $nameattr) = @_; my ($name, $attr) = @$nameattr; my ($state, $description); + my $mansection; $state = 0; open I, '<', "$name.txt" or die "No such file $name.txt"; while (<I>) { + if (/^git[a-z0-9-]*\(([0-9])\)$/) { + $mansection = $1; + next; + } if (/^NAME$/) { $state = 1; next;
@@ -27,7 +32,7 @@ sub format_one { die "No description found in $name.txt"; } if (my ($verify_name, $text) = ($description =~ /^($name) - (.*)/)) { - print $out "linkgit:$name\[1\]::\n\t"; + print $out "linkgit:$name\[$mansection\]::\n\t"; if ($attr =~ / deprecated /) { print $out "(deprecated) "; }
@@ -38,12 +43,15 @@ sub format_one { } } -while (<>) { +my ($input, @categories) = @ARGV; + +open IN, "<$input"; +while (<IN>) { last if /^### command list/; } my %cmds = (); -for (sort <>) { +for (sort <IN>) { next if /^#/; chomp;
@@ -51,17 +59,10 @@ sub format_one { $attr = '' unless defined $attr; push @{$cmds{$cat}}, [$name, " $attr "]; } +close IN; -for my $cat (qw(ancillaryinterrogators - ancillarymanipulators - mainporcelain - plumbinginterrogators - plumbingmanipulators - synchingrepositories - foreignscminterface - purehelpers - synchelpers)) { - my $out = "cmds-$cat.txt"; +for my $out (@categories) { + my ($cat) = $out =~ /^cmds-(.*)\.txt$/; open O, '>', "$out+" or die "Cannot open output file $out+"; for (@{$cmds{$cat}}) { format_one(\*O, $_);
Documentation/git.txt +7 -0
@@ -304,6 +304,13 @@ users typically do not use them directly. include::cmds-purehelpers.txt[] +Guides +------ + +The following documentation pages are guides about Git concepts. + +include::cmds-guide.txt[] + Configuration Mechanism -----------------------
Signature · 1 line
gitgitgadget
Quoted 19 lines · Philippe Blain via GitGitGadget
Changes since v1:
* Incorporated Junio's suggestion to reduce duplication.
v1: This series adds a list of the guides to git(1).
The first commit adds the misssing guides 'gitcredentials' and 'gitremote-helpers' to command-list.txt. The only missing guide after this change is 'gitweb.conf', but I think this one is obscure anough, and already linked to in 'gitweb.txt', that it does not matter much.
The second commit drops the usage of 'common' and 'useful' for guides. This was suggested as one of two ways forward by Duy in [1] but was not commented on. I'm CC'ing the people that were CC'ed on that message.
The third commit tweaks '
Documentation/cmd-list.perl' so that it also generates a list of the guides, which gets included in 'git.txt'. I chose to put this list just after the end of the list of commands.
Quoted 7 lines
[1]
https://lore.kernel.org/git/CACsJy8ADj-bTMYDHxRNLOMppOEdPbVwL49u3XCfNBCmoLLZo+A@mail.gmail.com/Philippe Blain (3):
command-list.txt: add missing 'gitcredentials' and 'gitremote-helpers'
help: drop usage of 'common' and 'useful' for guides git.txt: add list of guides
I think the "dedup the list of cmds-$category.txt" is logically a separate step from "we forgot to add guide category so add it", so either (1) "add guide twice, and then refactor" or (2) "refactor before adding guide, and then add guide only in one place" would be more appropriate than (3) "add guide while refactoring". IMHO, (2) would make the most sense.
Thanks.
Quoted 32 lines · Junio C Hamano
Quoted 19 lines · Philippe Blain via GitGitGadget
Changes since v1:
* Incorporated Junio's suggestion to reduce duplication.
v1: This series adds a list of the guides to git(1).
The first commit adds the misssing guides 'gitcredentials' and 'gitremote-helpers' to command-list.txt. The only missing guide after this change is 'gitweb.conf', but I think this one is obscure anough, and already linked to in 'gitweb.txt', that it does not matter much.
The second commit drops the usage of 'common' and 'useful' for guides. This was suggested as one of two ways forward by Duy in [1] but was not commented on. I'm CC'ing the people that were CC'ed on that message.
The third commit tweaks '
Documentation/cmd-list.perl' so that it also generates a list of the guides, which gets included in 'git.txt'. I chose to put this list just after the end of the list of commands.Quoted 7 lines
[1]
https://lore.kernel.org/git/CACsJy8ADj-bTMYDHxRNLOMppOEdPbVwL49u3XCfNBCmoLLZo+A@mail.gmail.com/Philippe Blain (3):
command-list.txt: add missing 'gitcredentials' and 'gitremote-helpers'
help: drop usage of 'common' and 'useful' for guides git.txt: add list of guides
Quoted 7 lines
I think the "dedup the list of cmds-$category.txt" is logically a separate step from "we forgot to add guide category so add it", so either (1) "add guide twice, and then refactor" or (2) "refactor before adding guide, and then add guide only in one place" would be more appropriate than (3) "add guide while refactoring". IMHO, (2) would make the most sense.
I agree that (2) makes the most sense, I've split it for v3. (Your "SQUASH???" message on pb/guide-docs may have mislead me :)
Philippe.
v3 cover List all guides in git(1)
In reply to Philippe Blain via GitGitGadgetChanges since v2:
* Split the third commit following Junio's suggestion
Question for Junio: Since the new commit 3/4 comes entirely from your suggestion, I've attributed authorship to you, but I've added my own sign-off because Gitgitgadget requires sign-off on each commit. Please let me know if I should have proceeded differently.
v2:
* Incorporated Junio's suggestion to reduce duplication.
v1: This series adds a list of the guides to git(1).
The first commit adds the misssing guides 'gitcredentials' and 'gitremote-helpers' to command-list.txt. The only missing guide after this change is 'gitweb.conf', but I think this one is obscure anough, and already linked to in 'gitweb.txt', that it does not matter much.
The second commit drops the usage of 'common' and 'useful' for guides. This was suggested as one of two ways forward by Duy in [1] but was not commented on. I'm CC'ing the people that were CC'ed on that message.
The third commit tweaks 'Documentation/cmd-list.perl' so that it also generates a list of the guides, which gets included in 'git.txt'. I chose to put this list just after the end of the list of commands.
[1]
https://lore.kernel.org/git/CACsJy8ADj-bTMYDHxRNLOMppOEdPbVwL49u3XCfNBCmoLLZo+A@mail.gmail.com/
Junio C Hamano (1):
Documentation: don't hardcode command categories twice
Philippe Blain (3):
command-list.txt: add missing 'gitcredentials' and 'gitremote-helpers'
help: drop usage of 'common' and 'useful' for guides git.txt: add list of guides
Documentation/Makefile | 4 +++- Documentation/cmd-list.perl | 27 ++++++++++++++------------- Documentation/git-help.txt | 6 +++--- Documentation/git.txt | 7 +++++++ Documentation/gitcredentials.txt | 2 +- builtin/help.c | 2 +- command-list.txt | 2 ++ help.c | 4 ++-- help.h | 2 +- 9 files changed, 34 insertions(+), 22 deletions(-)
base-commit: e8ab941b671da6890181aea5b5755d1d9eea24ec
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-691%2Fphil-blain%2Flist-guides-in-git.1-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-691/phil-blain/list-guides-in-git.1-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/691
Range-diff vs v2:
1: 2bd473e0aa = 1: 2bd473e0aa command-list.txt: add missing 'gitcredentials' and 'gitremote-helpers' 2: f49cf08f4f = 2: f49cf08f4f help: drop usage of 'common' and 'useful' for guides -: ---------- > 3: 552444a842 Documentation: don't hardcode command categories twice 3: 4394bb357b ! 4: 840371fb4b git.txt: add list of guides
@@ Commit message
Documentation/cmd-list.perl script to generate a file cmds-guide.txt which gets included in git.txt.
- Instead of hard-coding the list of command categories in both
- Documentation/Makefile and Documentation/cmd-list.perl, make the
- Makefile the authoritative source and tweak cmd-list.perl so that it
- receives the list of command categories as argument.
-
Also, do not hard-code the manual section '1'. Instead, use a regex so that the manual section is discovered from the first line of each git*.txt file.
- This addition was hinted at in 1b81d8cb19 (help: use command-list.txt for
- the source of guides, 2018-05-20).
+ This addition was hinted at in 1b81d8cb19 (help: use command-list.txt
+ for the source of guides, 2018-05-20).
@@ Documentation/Makefile: cmds_txt = cmds-ancillaryinterrogators.txt \
cmds-purehelpers.txt \
cmds-foreignscminterface.txt
-@@ Documentation/Makefile: $(cmds_txt): cmd-list.made -
- cmd-list.made: cmd-list.perl ../command-list.txt $(MAN1_TXT)
- $(QUIET_GEN)$(RM) $@ && \
-- $(PERL_PATH) ./cmd-list.perl ../command-list.txt $(QUIET_STDERR) && \
-+ $(PERL_PATH) ./cmd-list.perl ../command-list.txt $(cmds_txt) $(QUIET_STDERR) && \
- date >$@
-
- mergetools_txt = mergetools-diff.txt mergetools-merge.txt
## Documentation/cmd-list.perl ##
@@ Documentation/cmd-list.perl: sub format_one {
@@ Documentation/cmd-list.perl: sub format_one {
if ($attr =~ / deprecated /) {
print $out "(deprecated) ";
}
-@@ Documentation/cmd-list.perl: sub format_one {
- }
- }
-
--while (<>) {
-+my ($input, @categories) = @ARGV;
-+
-+open IN, "<$input";
-+while (<IN>) {
- last if /^### command list/;
- }
-
- my %cmds = ();
--for (sort <>) {
-+for (sort <IN>) {
- next if /^#/;
-
- chomp;
-@@ Documentation/cmd-list.perl: sub format_one {
- $attr = '' unless defined $attr;
- push @{$cmds{$cat}}, [$name, " $attr "];
- }
-+close IN;
-
--for my $cat (qw(ancillaryinterrogators
-- ancillarymanipulators
-- mainporcelain
-- plumbinginterrogators
-- plumbingmanipulators
-- synchingrepositories
-- foreignscminterface
-- purehelpers
-- synchelpers)) {
-- my $out = "cmds-$cat.txt";
-+for my $out (@categories) {
-+ my ($cat) = $out =~ /^cmds-(.*)\.txt$/;
- open O, '>', "$out+" or die "Cannot open output file $out+";
- for (@{$cmds{$cat}}) {
- format_one(\*O, $_);
## Documentation/git.txt ##
@@ Documentation/git.txt: users typically do not use them directly.
Signature · 1 line
gitgitgadget
PATCH v3 1/4 command-list.txt: add missing 'gitcredentials' and 'gitremote-helpers'
From: Philippe Blain <[email protected]>
The guides 'gitcredentials' and 'gitremote-helpers' do not currently appear in command-list.txt.
'gitcredentials' was forgotten back when guides were added to command-list.txt in 1b81d8cb19 (help: use command-list.txt for the source of guides, 2018-05-20).
'gitremote-helpers' was moved to section 7 in 439cc74632 (docs: move gitremote-helpers into section 7, 2019-03-25), but command-list.txt was not updated at the time.
Add these two guides to the list of guides in 'command-list.txt', so that they appear in the output of 'git help --guides', and capitalize the first word of the description of 'gitcredentials', as was done in 1b81d8c (help: use command-list.txt for the source of guides, 2018-05-20) for the other guides.
While at it, add a comment in Documentation/Makefile to remind developers to update command-list.txt if they add a new guide.
--- Documentation/Makefile | 1 + Documentation/gitcredentials.txt | 2 +- command-list.txt | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-)
Documentation/Makefile +1 -0
@@ -17,6 +17,7 @@ MAN1_TXT += git.txt MAN1_TXT += gitk.txt MAN1_TXT += gitweb.txt +# man5 / man7 guides (note: new guides should also be added to command-list.txt) MAN5_TXT += gitattributes.txt MAN5_TXT += githooks.txt MAN5_TXT += gitignore.txt
Documentation/gitcredentials.txt +1 -1
@@ -3,7 +3,7 @@ gitcredentials(7) NAME ---- -gitcredentials - providing usernames and passwords to Git +gitcredentials - Providing usernames and passwords to Git SYNOPSIS --------
command-list.txt +2 -0
@@ -195,6 +195,7 @@ git-write-tree plumbingmanipulators gitattributes guide gitcli guide gitcore-tutorial guide +gitcredentials guide gitcvs-migration guide gitdiffcore guide giteveryday guide
@@ -204,6 +205,7 @@ githooks guide gitignore guide gitmodules guide gitnamespaces guide +gitremote-helpers guide gitrepository-layout guide gitrevisions guide gitsubmodules guide
Signature · 1 line
gitgitgadget
PATCH v3 2/4 help: drop usage of 'common' and 'useful' for guides
In reply to Philippe Blain via GitGitGadgetFrom: Philippe Blain <[email protected]>
Since 1b81d8cb19 (help: use command-list.txt for the source of guides, 2018-05-20), all man5/man7 guides listed in command-list.txt appear in the output of 'git help -g'.
However, 'git help -g' still prefixes this list with "The common Git guides are:", which makes one wonder if there are others!
In the same spirit, the man page for 'git help' describes the '--guides' option as listing 'useful' guides, which is not false per se but can also be taken to mean that there are other guides that exist but are not useful.
Instead of 'common' and 'useful', use 'Git concept guides' in both places. To keep the code in line with this change, rename help.c::list_common_guides_help to list_guides_help.
--- Documentation/git-help.txt | 6 +++--- builtin/help.c | 2 +- help.c | 4 ++-- help.h | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-)
Documentation/git-help.txt +3 -3
@@ -21,8 +21,8 @@ on the standard output. If the option `--all` or `-a` is given, all available commands are printed on the standard output. -If the option `--guides` or `-g` is given, a list of the useful -Git guides is also printed on the standard output. +If the option `--guides` or `-g` is given, a list of the +Git concept guides is also printed on the standard output. If a command, or a guide, is given, a manual page for that command or guide is brought up. The 'man' program is used by default for this
@@ -58,7 +58,7 @@ OPTIONS -g:: --guides:: - Prints a list of useful guides on the standard output. This + Prints a list of the Git concept guides on the standard output. This option overrides any given command or guide name. -i::
builtin/help.c +1 -1
@@ -579,7 +579,7 @@ int cmd_help(int argc, const char **argv, const char *prefix) }if (show_guides) -list_common_guides_help (); +list_guides_help ();if (show_all || show_guides) {printf ("%s\n" ,_ (git_more_info_string));
help.c +2 -2
@@ -397,10 +397,10 @@ void list_cmds_by_config(struct string_list *list) } } -void list_common_guides_help (void ) +void list_guides_help (void ) {struct category_description catdesc[] = { - { CAT_guide,N_ ("The common Git guides are:" ) }, + { CAT_guide,N_ ("The Git concept guides are:" ) }, {0 ,NULL } };print_cmd_by_category (catdesc,NULL );
help.h +1 -1
@@ -21,7 +21,7 @@ static inline void mput_char(char c, unsigned int num)void list_common_cmds_help (void );void list_all_cmds_help (void ); -void list_common_guides_help (void ); +void list_guides_help (void );void list_all_main_cmds (struct string_list *list);void list_all_other_cmds (struct string_list *list);
Signature · 1 line
gitgitgadget
PATCH v3 3/4 Documentation: don't hardcode command categories twice
In reply to Philippe Blain via GitGitGadgetFrom: Junio C Hamano <[email protected]>
Instead of hard-coding the list of command categories in both Documentation/Makefile and Documentation/cmd-list.perl, make the Makefile the authoritative source and tweak cmd-list.perl so that it receives the list of command categories as argument.
--- Documentation/Makefile | 2 +- Documentation/cmd-list.perl | 20 ++++++++------------ 2 files changed, 9 insertions(+), 13 deletions(-)
Documentation/Makefile +1 -1
@@ -302,7 +302,7 @@ $(cmds_txt): cmd-list.made cmd-list.made: cmd-list.perl ../command-list.txt $(MAN1_TXT) $(QUIET_GEN)$(RM) $@ && \ - $(PERL_PATH) ./cmd-list.perl ../command-list.txt $(QUIET_STDERR) && \ + $(PERL_PATH) ./cmd-list.perl ../command-list.txt $(cmds_txt) $(QUIET_STDERR) && \ date >$@ mergetools_txt = mergetools-diff.txt mergetools-merge.txt
Documentation/cmd-list.perl +8 -12
@@ -38,12 +38,15 @@ sub format_one { } } -while (<>) { +my ($input, @categories) = @ARGV; + +open IN, "<$input"; +while (<IN>) { last if /^### command list/; } my %cmds = (); -for (sort <>) { +for (sort <IN>) { next if /^#/; chomp;
@@ -51,17 +54,10 @@ sub format_one { $attr = '' unless defined $attr; push @{$cmds{$cat}}, [$name, " $attr "]; } +close IN; -for my $cat (qw(ancillaryinterrogators - ancillarymanipulators - mainporcelain - plumbinginterrogators - plumbingmanipulators - synchingrepositories - foreignscminterface - purehelpers - synchelpers)) { - my $out = "cmds-$cat.txt"; +for my $out (@categories) { + my ($cat) = $out =~ /^cmds-(.*)\.txt$/; open O, '>', "$out+" or die "Cannot open output file $out+"; for (@{$cmds{$cat}}) { format_one(\*O, $_);
Signature · 1 line
gitgitgadget
PATCH v3 4/4 git.txt: add list of guides
In reply to Philippe Blain via GitGitGadgetFrom: Philippe Blain <[email protected]>
Not all man5/man7 guides are mentioned in the 'git(1)' documentation, which makes the missing ones somewhat hard to find.
Add a list of the guides to git(1) by leveraging the existing Documentation/cmd-list.perl script to generate a file cmds-guide.txt which gets included in git.txt.
Also, do not hard-code the manual section '1'. Instead, use a regex so that the manual section is discovered from the first line of each git*.txt file.
This addition was hinted at in 1b81d8cb19 (help: use command-list.txt for the source of guides, 2018-05-20).
--- Documentation/Makefile | 1 + Documentation/cmd-list.perl | 7 ++++++- Documentation/git.txt | 7 +++++++ 3 files changed, 14 insertions(+), 1 deletion(-)
Documentation/Makefile +1 -0
@@ -295,6 +295,7 @@ cmds_txt = cmds-ancillaryinterrogators.txt \ cmds-plumbingmanipulators.txt \ cmds-synchingrepositories.txt \ cmds-synchelpers.txt \ + cmds-guide.txt \ cmds-purehelpers.txt \ cmds-foreignscminterface.txt
Documentation/cmd-list.perl +6 -1
@@ -6,9 +6,14 @@ sub format_one { my ($out, $nameattr) = @_; my ($name, $attr) = @$nameattr; my ($state, $description); + my $mansection; $state = 0; open I, '<', "$name.txt" or die "No such file $name.txt"; while (<I>) { + if (/^git[a-z0-9-]*\(([0-9])\)$/) { + $mansection = $1; + next; + } if (/^NAME$/) { $state = 1; next;
@@ -27,7 +32,7 @@ sub format_one { die "No description found in $name.txt"; } if (my ($verify_name, $text) = ($description =~ /^($name) - (.*)/)) { - print $out "linkgit:$name\[1\]::\n\t"; + print $out "linkgit:$name\[$mansection\]::\n\t"; if ($attr =~ / deprecated /) { print $out "(deprecated) "; }
Documentation/git.txt +7 -0
@@ -304,6 +304,13 @@ users typically do not use them directly. include::cmds-purehelpers.txt[] +Guides +------ + +The following documentation pages are guides about Git concepts. + +include::cmds-guide.txt[] + Configuration Mechanism -----------------------
Signature · 1 line
gitgitgadget