Browse Source

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>
maint
Fredrik Kuivinen 19 years ago committed by Junio C Hamano
parent
commit
a87cd02ce0
  1. 1
      .gitignore
  2. 11
      Documentation/git.txt
  3. 7
      Makefile
  4. 48
      generate-cmdlist.sh
  5. 47
      git.c

1
.gitignore vendored

@ -121,6 +121,7 @@ git-write-tree
git-core-*/?* git-core-*/?*
test-date test-date
test-delta test-delta
common-cmds.h
*.tar.gz *.tar.gz
*.dsc *.dsc
*.deb *.deb

11
Documentation/git.txt

@ -20,15 +20,16 @@ brings your stuff to the plumbing).
OPTIONS OPTIONS
------- -------
--version:: --version::
prints the git suite version that the 'git' program came from. Prints the git suite version that the 'git' program came from.


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


--exec-path:: --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 This can also be controlled by setting the GIT_EXEC_PATH
environment variable. If no path is given 'git' will print environment variable. If no path is given 'git' will print
the current setting and then exit. the current setting and then exit.

7
Makefile

@ -452,10 +452,13 @@ all:
strip: $(PROGRAMS) git$X strip: $(PROGRAMS) git$X
$(STRIP) $(STRIP_OPTS) $(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)"' \ $(CC) -DGIT_VERSION='"$(GIT_VERSION)"' \
$(ALL_CFLAGS) -o $@ $(filter %.c,$^) $(LIB_FILE) $(LIBS) $(ALL_CFLAGS) -o $@ $(filter %.c,$^) $(LIB_FILE) $(LIBS)


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

$(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh $(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
rm -f $@ rm -f $@
sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \ sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
@ -612,7 +615,7 @@ rpm: dist
clean: clean:
rm -f *.o mozilla-sha1/*.o arm/*.o ppc/*.o compat/*.o $(LIB_FILE) rm -f *.o mozilla-sha1/*.o arm/*.o ppc/*.o compat/*.o $(LIB_FILE)
rm -f $(ALL_PROGRAMS) git$X 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 -rf $(GIT_TARNAME)
rm -f $(GIT_TARNAME).tar.gz git-core_$(GIT_VERSION)-*.tar.gz rm -f $(GIT_TARNAME).tar.gz git-core_$(GIT_VERSION)-*.tar.gz
$(MAKE) -C Documentation/ clean $(MAKE) -C Documentation/ clean

48
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
git.c

@ -11,6 +11,7 @@
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include "git-compat-util.h" #include "git-compat-util.h"
#include "exec_cmd.h" #include "exec_cmd.h"
#include "common-cmds.h"


#include "cache.h" #include "cache.h"
#include "commit.h" #include "commit.h"
@ -171,11 +172,29 @@ static void list_commands(const char *exec_path, const char *pattern)
putchar('\n'); 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__ #ifdef __GNUC__
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, ...)
__attribute__((__format__(__printf__, 2, 3), __noreturn__)); __attribute__((__format__(__printf__, 3, 4), __noreturn__));
#endif #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) { if (fmt) {
va_list ap; va_list ap;
@ -189,10 +208,13 @@ static void cmd_usage(const char *exec_path, const char *fmt, ...)
else else
puts(git_usage); puts(git_usage);


putchar('\n'); if (exec_path) {

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


exit(1); exit(1);
} }
@ -244,8 +266,11 @@ static int cmd_help(int argc, const char **argv, char **envp)
{ {
const char *help_cmd = argv[1]; const char *help_cmd = argv[1];
if (!help_cmd) if (!help_cmd)
cmd_usage(git_exec_path(), NULL); cmd_usage(0, git_exec_path(), NULL);
show_man_page(help_cmd); 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; return 0;
} }


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


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


if (errno == ENOENT) 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", fprintf(stderr, "Failed to run command '%s': %s\n",
git_command, strerror(errno)); git_command, strerror(errno));

Loading…
Cancel
Save