Skip to content

Commit

Permalink
Nicer output from 'git'
Browse files Browse the repository at this point in the history
[jc: with suggestions by Jan-Benedict Glaw]

Signed-off-by: Fredrik Kuivinen <freku045@student.liu.se>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Fredrik Kuivinen authored and Junio C Hamano committed Mar 9, 2006
1 parent b4f2a6a commit a87cd02
Show file tree
Hide file tree
Showing 5 changed files with 96 additions and 18 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -121,6 +121,7 @@ git-write-tree
git-core-*/?*
test-date
test-delta
common-cmds.h
*.tar.gz
*.dsc
*.deb
Expand Down
11 changes: 6 additions & 5 deletions Documentation/git.txt
Expand Up @@ -20,15 +20,16 @@ brings your stuff to the plumbing).
OPTIONS
-------
--version::
prints the git suite version that the 'git' program came from.
Prints the git suite version that the 'git' program came from.

--help::
prints the synopsis and a list of available commands.
If a git command is named this option will bring up the
man-page for that command.
Prints the synopsis and a list of the most commonly used
commands. If a git command is named this option will bring up
the man-page for that command. If the option '--all' or '-a' is
given then all available commands are printed.

--exec-path::
path to wherever your core git programs are installed.
Path to wherever your core git programs are installed.
This can also be controlled by setting the GIT_EXEC_PATH
environment variable. If no path is given 'git' will print
the current setting and then exit.
Expand Down
7 changes: 5 additions & 2 deletions Makefile
Expand Up @@ -452,10 +452,13 @@ all:
strip: $(PROGRAMS) git$X
$(STRIP) $(STRIP_OPTS) $(PROGRAMS) git$X

git$X: git.c $(LIB_FILE)
git$X: git.c common-cmds.h $(LIB_FILE)
$(CC) -DGIT_VERSION='"$(GIT_VERSION)"' \
$(ALL_CFLAGS) -o $@ $(filter %.c,$^) $(LIB_FILE) $(LIBS)

common-cmds.h: Documentation/git-*.txt
./generate-cmdlist.sh > $@

$(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
rm -f $@
sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
Expand Down Expand Up @@ -612,7 +615,7 @@ rpm: dist
clean:
rm -f *.o mozilla-sha1/*.o arm/*.o ppc/*.o compat/*.o $(LIB_FILE)
rm -f $(ALL_PROGRAMS) git$X
rm -f *.spec *.pyc *.pyo */*.pyc */*.pyo
rm -f *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h
rm -rf $(GIT_TARNAME)
rm -f $(GIT_TARNAME).tar.gz git-core_$(GIT_VERSION)-*.tar.gz
$(MAKE) -C Documentation/ clean
Expand Down
48 changes: 48 additions & 0 deletions generate-cmdlist.sh
@@ -0,0 +1,48 @@
#!/bin/sh

echo "/* Automatically generated by $0 */
struct cmdname_help
{
char name[16];
char help[64];
};
struct cmdname_help common_cmds[] = {"

sort <<\EOF |
add
apply
bisect
branch
checkout
cherry-pick
clone
commit
diff
fetch
grep
init-db
log
merge
mv
prune
pull
push
rebase
reset
revert
rm
show
show-branch
status
tag
verify-tag
whatchanged
EOF
while read cmd
do
sed -n "/NAME/,/git-$cmd/H;
\$ {x; s/.*git-$cmd - \\(.*\\)/ {\"$cmd\", \"\1\"},/; p}" \
"Documentation/git-$cmd.txt"
done
echo "};"
47 changes: 36 additions & 11 deletions git.c
Expand Up @@ -11,6 +11,7 @@
#include <sys/ioctl.h>
#include "git-compat-util.h"
#include "exec_cmd.h"
#include "common-cmds.h"

#include "cache.h"
#include "commit.h"
Expand Down Expand Up @@ -171,11 +172,29 @@ static void list_commands(const char *exec_path, const char *pattern)
putchar('\n');
}

static void list_common_cmds_help()
{
int i, longest = 0;

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:");
for (i = 0; i < ARRAY_SIZE(common_cmds); i++) {
printf(" %s", common_cmds[i].name);
mput_char(' ', longest - strlen(common_cmds[i].name) + 4);
puts(common_cmds[i].help);
}
puts("(use 'git help -a' to get a list of all installed git commands)");
}

#ifdef __GNUC__
static void cmd_usage(const char *exec_path, const char *fmt, ...)
__attribute__((__format__(__printf__, 2, 3), __noreturn__));
static void cmd_usage(int show_all, const char *exec_path, const char *fmt, ...)
__attribute__((__format__(__printf__, 3, 4), __noreturn__));
#endif
static void cmd_usage(const char *exec_path, const char *fmt, ...)
static void cmd_usage(int show_all, const char *exec_path, const char *fmt, ...)
{
if (fmt) {
va_list ap;
Expand All @@ -189,10 +208,13 @@ static void cmd_usage(const char *exec_path, const char *fmt, ...)
else
puts(git_usage);

putchar('\n');

if(exec_path)
list_commands(exec_path, "git-*");
if (exec_path) {
putchar('\n');
if (show_all)
list_commands(exec_path, "git-*");
else
list_common_cmds_help();
}

exit(1);
}
Expand Down Expand Up @@ -244,8 +266,11 @@ static int cmd_help(int argc, const char **argv, char **envp)
{
const char *help_cmd = argv[1];
if (!help_cmd)
cmd_usage(git_exec_path(), NULL);
show_man_page(help_cmd);
cmd_usage(0, git_exec_path(), NULL);
else if (!strcmp(help_cmd, "--all") || !strcmp(help_cmd, "-a"))
cmd_usage(1, git_exec_path(), NULL);
else
show_man_page(help_cmd);
return 0;
}

Expand Down Expand Up @@ -418,7 +443,7 @@ int main(int argc, const char **argv, char **envp)
puts(git_exec_path());
exit(0);
}
cmd_usage(NULL, NULL);
cmd_usage(0, NULL, NULL);
}
argv[0] = cmd;

Expand All @@ -441,7 +466,7 @@ int main(int argc, const char **argv, char **envp)
execv_git_cmd(argv);

if (errno == ENOENT)
cmd_usage(exec_path, "'%s' is not a git-command", cmd);
cmd_usage(0, exec_path, "'%s' is not a git-command", cmd);

fprintf(stderr, "Failed to run command '%s': %s\n",
git_command, strerror(errno));
Expand Down

0 comments on commit a87cd02

Please sign in to comment.