Documentation / cmd-list.perlon commit Documentation: Generate command lists. (72fe6a5)
   1#
   2
   3sub format_one {
   4        my ($out, $name) = @_;
   5        my ($state, $description);
   6        open I, '<', "$name.txt" or die "No such file $name.txt";
   7        while (<I>) {
   8                if (/^NAME$/) {
   9                        $state = 1;
  10                        next;
  11                }
  12                if ($state == 1 && /^----$/) {
  13                        $state = 2;
  14                        next;
  15                }
  16                next if ($state != 2);
  17                chomp;
  18                $description = $_;
  19                last;
  20        }
  21        close I;
  22        if (!defined $description) {
  23                die "No description found in $name.txt";
  24        }
  25        if (my ($verify_name, $text) = ($description =~ /^($name) - (.*)/)) {
  26                print $out "gitlink:$name\[1\]::\n";
  27                print $out "\t$text.\n\n";
  28        }
  29        else {
  30                die "Description does not match $name: $description";
  31        }
  32}
  33
  34my %cmds = ();
  35while (<DATA>) {
  36        next if /^#/;
  37
  38        chomp;
  39        my ($name, $cat) = /^(\S+)\s+(.*)$/;
  40        push @{$cmds{$cat}}, $name;
  41}
  42
  43for my $cat (qw(ancillaryinterrogators
  44                ancillarymanipulators
  45                mainporcelain
  46                plumbinginterrogators
  47                plumbingmanipulators
  48                synchingrepositories)) {
  49        my $out = "cmds-$cat.txt";
  50        open O, '>', "$out+" or die "Cannot open output file $out+";
  51        for (@{$cmds{$cat}}) {
  52                format_one(\*O, $_);
  53        }
  54        close O;
  55        rename "$out+", "$out";
  56}
  57
  58__DATA__
  59git-add                                 mainporcelain
  60git-am                                  mainporcelain
  61git-annotate                            ancillaryinterrogators
  62git-applymbox                           mainporcelain
  63git-applypatch                          ancillarymanipulators
  64git-apply                               plumbingmanipulators
  65git-archimport                          ancillarymanipulators
  66git-archive                             mainporcelain
  67git-bisect                              mainporcelain
  68git-blame                               ancillaryinterrogators
  69git-branch                              mainporcelain
  70git-cat-file                            plumbinginterrogators
  71git-checkout-index                      plumbingmanipulators
  72git-checkout                            mainporcelain
  73git-check-ref-format                    ancillaryinterrogators
  74git-cherry                              ancillaryinterrogators
  75git-cherry-pick                         mainporcelain
  76git-clean                               mainporcelain
  77git-clone                               mainporcelain
  78git-commit                              mainporcelain
  79git-commit-tree                         plumbingmanipulators
  80git-convert-objects                     ancillarymanipulators
  81git-count-objects                       ancillaryinterrogators
  82git-cvsexportcommit                     ancillarymanipulators
  83git-cvsimport                           ancillarymanipulators
  84git-cvsserver                           ancillarymanipulators
  85git-daemon                              ancillaryinterrogators
  86git-describe                            plumbinginterrogators
  87git-diff-files                          plumbinginterrogators
  88git-diff-index                          plumbinginterrogators
  89git-diff                                mainporcelain
  90git-diff-stages                         plumbinginterrogators
  91git-diff-tree                           plumbinginterrogators
  92git-fetch                               mainporcelain
  93git-fetch-pack                          synchingrepositories
  94git-fmt-merge-msg                       ancillaryinterrogators
  95git-for-each-ref                        plumbinginterrogators
  96git-format-patch                        mainporcelain
  97git-fsck-objects                        plumbinginterrogators
  98git-gc                                  ancillarymanipulators
  99git-get-tar-commit-id                   ancillaryinterrogators
 100git-grep                                mainporcelain
 101git-hash-object                         plumbingmanipulators
 102git-http-fetch                          synchingrepositories
 103git-http-push                           synchingrepositories
 104git-imap-send                           ancillaryinterrogators
 105git-index-pack                          plumbingmanipulators
 106git-init                                plumbingmanipulators
 107git-instaweb                            ancillaryinterrogators
 108gitk                                    mainporcelain
 109git-local-fetch                         synchingrepositories
 110git-log                                 mainporcelain
 111git-lost-found                          ancillarymanipulators
 112git-ls-files                            plumbinginterrogators
 113git-ls-remote                           mainporcelain
 114git-ls-tree                             plumbinginterrogators
 115git-mailinfo                            ancillaryinterrogators
 116git-mailsplit                           ancillaryinterrogators
 117git-merge-base                          plumbinginterrogators
 118git-merge-file                          plumbingmanipulators
 119git-merge-index                         plumbingmanipulators
 120git-merge                               mainporcelain
 121git-merge-one-file                      ancillarymanipulators
 122git-merge-tree                          ancillaryinterrogators
 123git-mktag                               plumbingmanipulators
 124git-mktree                              plumbingmanipulators
 125git-mv                                  mainporcelain
 126git-name-rev                            plumbinginterrogators
 127git-pack-objects                        plumbingmanipulators
 128git-pack-redundant                      plumbinginterrogators
 129git-pack-refs                           mainporcelain
 130git-parse-remote                        ancillaryinterrogators
 131git-patch-id                            ancillaryinterrogators
 132git-peek-remote                         synchingrepositories
 133git-prune                               ancillarymanipulators
 134git-prune-packed                        plumbingmanipulators
 135git-pull                                mainporcelain
 136git-push                                mainporcelain
 137git-quiltimport                         ancillarymanipulators
 138git-read-tree                           plumbingmanipulators
 139git-rebase                              mainporcelain
 140git-receive-pack                        synchingrepositories
 141git-reflog                              ancillarymanipulators
 142git-relink                              ancillarymanipulators
 143git-repack                              mainporcelain
 144git-repo-config                         plumbingmanipulators
 145git-request-pull                        ancillaryinterrogators
 146git-rerere                              mainporcelain
 147git-reset                               mainporcelain
 148git-resolve                             mainporcelain
 149git-revert                              mainporcelain
 150git-rev-list                            plumbinginterrogators
 151git-rev-parse                           ancillaryinterrogators
 152git-rm                                  mainporcelain
 153git-runstatus                           ancillaryinterrogators
 154git-send-email                          ancillaryinterrogators
 155git-send-pack                           synchingrepositories
 156git-shell                               synchingrepositories
 157git-shortlog                            mainporcelain
 158git-show                                mainporcelain
 159git-show-branch                         mainporcelain
 160git-show-index                          plumbinginterrogators
 161git-show-ref                            plumbinginterrogators
 162git-sh-setup                            ancillarymanipulators
 163git-ssh-fetch                           synchingrepositories
 164git-ssh-upload                          synchingrepositories
 165git-status                              mainporcelain
 166git-stripspace                          ancillaryinterrogators
 167git-svn                                 ancillarymanipulators
 168git-svnimport                           ancillarymanipulators
 169git-symbolic-ref                        ancillaryinterrogators
 170git-symbolic-ref                        ancillarymanipulators
 171git-tag                                 ancillarymanipulators
 172git-tar-tree                            plumbinginterrogators
 173git-unpack-file                         plumbinginterrogators
 174git-unpack-objects                      plumbingmanipulators
 175git-update-index                        plumbingmanipulators
 176git-update-ref                          ancillarymanipulators
 177git-update-server-info                  synchingrepositories
 178git-upload-archive                      synchingrepositories
 179git-upload-pack                         synchingrepositories
 180git-var                                 plumbinginterrogators
 181git-verify-pack                         plumbinginterrogators
 182git-verify-tag                          mainporcelain
 183git-whatchanged                         mainporcelain
 184git-write-tree                          plumbingmanipulators