Nicer output from 'git'
[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>
This commit is contained in:
parent
b4f2a6ac92
commit
a87cd02ce0
1
.gitignore
vendored
1
.gitignore
vendored
@ -121,6 +121,7 @@ git-write-tree
|
||||
git-core-*/?*
|
||||
test-date
|
||||
test-delta
|
||||
common-cmds.h
|
||||
*.tar.gz
|
||||
*.dsc
|
||||
*.deb
|
||||
|
@ -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.
|
||||
|
7
Makefile
7
Makefile
@ -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)|' \
|
||||
@ -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
|
||||
|
48
generate-cmdlist.sh
Executable file
48
generate-cmdlist.sh
Executable file
@ -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
git.c
47
git.c
@ -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"
|
||||
@ -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;
|
||||
@ -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);
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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));
|
||||
|
Loading…
Reference in New Issue
Block a user