Remove calculation of the longest command name from where it is not used

Just calculate it where it is needed - it is cheap and trivial,
as all the lengths are already there (stored when creating the
command lists).

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Alex Riesen
2008-08-28 19:15:33 +02:00
committed by Junio C Hamano
parent 63e8aea74e
commit e321180ed3
4 changed files with 24 additions and 28 deletions

View File

@ -418,7 +418,7 @@ int cmd_help(int argc, const char **argv, const char *prefix)
{ {
int nongit; int nongit;
const char *alias; const char *alias;
unsigned int longest = load_command_list("git-", &main_cmds, &other_cmds); load_command_list("git-", &main_cmds, &other_cmds);
setup_git_directory_gently(&nongit); setup_git_directory_gently(&nongit);
git_config(git_help_config, NULL); git_config(git_help_config, NULL);
@ -428,7 +428,7 @@ int cmd_help(int argc, const char **argv, const char *prefix)
if (show_all) { if (show_all) {
printf("usage: %s\n\n", git_usage_string); printf("usage: %s\n\n", git_usage_string);
list_commands("git commands", longest, &main_cmds, &other_cmds); list_commands("git commands", &main_cmds, &other_cmds);
printf("%s\n", git_more_info_string); printf("%s\n", git_more_info_string);
return 0; return 0;
} }

View File

@ -80,7 +80,7 @@ static struct strategy *get_strategy(const char *name)
int i; int i;
struct strategy *ret; struct strategy *ret;
static struct cmdnames main_cmds, other_cmds; static struct cmdnames main_cmds, other_cmds;
static int longest; static int loaded;
if (!name) if (!name)
return NULL; return NULL;
@ -89,14 +89,14 @@ static struct strategy *get_strategy(const char *name)
if (!strcmp(name, all_strategy[i].name)) if (!strcmp(name, all_strategy[i].name))
return &all_strategy[i]; return &all_strategy[i];
if (!longest) { if (!loaded) {
struct cmdnames not_strategies; struct cmdnames not_strategies;
loaded = 1;
memset(&main_cmds, 0, sizeof(struct cmdnames)); memset(&main_cmds, 0, sizeof(struct cmdnames));
memset(&other_cmds, 0, sizeof(struct cmdnames)); memset(&other_cmds, 0, sizeof(struct cmdnames));
memset(&not_strategies, 0, sizeof(struct cmdnames)); memset(&not_strategies, 0, sizeof(struct cmdnames));
longest = load_command_list("git-merge-", &main_cmds, load_command_list("git-merge-", &main_cmds, &other_cmds);
&other_cmds);
for (i = 0; i < main_cmds.cnt; i++) { for (i = 0; i < main_cmds.cnt; i++) {
int j, found = 0; int j, found = 0;
struct cmdname *ent = main_cmds.names[i]; struct cmdname *ent = main_cmds.names[i];

34
help.c
View File

@ -133,11 +133,10 @@ static int is_executable(const char *name)
return st.st_mode & S_IXUSR; return st.st_mode & S_IXUSR;
} }
static unsigned int list_commands_in_dir(struct cmdnames *cmds, static void list_commands_in_dir(struct cmdnames *cmds,
const char *path, const char *path,
const char *prefix) const char *prefix)
{ {
unsigned int longest = 0;
int prefix_len; int prefix_len;
DIR *dir = opendir(path); DIR *dir = opendir(path);
struct dirent *de; struct dirent *de;
@ -145,7 +144,7 @@ static unsigned int list_commands_in_dir(struct cmdnames *cmds,
int len; int len;
if (!dir) if (!dir)
return 0; return;
if (!prefix) if (!prefix)
prefix = "git-"; prefix = "git-";
prefix_len = strlen(prefix); prefix_len = strlen(prefix);
@ -168,29 +167,22 @@ static unsigned int list_commands_in_dir(struct cmdnames *cmds,
if (has_extension(de->d_name, ".exe")) if (has_extension(de->d_name, ".exe"))
entlen -= 4; entlen -= 4;
if (longest < entlen)
longest = entlen;
add_cmdname(cmds, de->d_name + prefix_len, entlen); add_cmdname(cmds, de->d_name + prefix_len, entlen);
} }
closedir(dir); closedir(dir);
strbuf_release(&buf); strbuf_release(&buf);
return longest;
} }
unsigned int load_command_list(const char *prefix, void load_command_list(const char *prefix,
struct cmdnames *main_cmds, struct cmdnames *main_cmds,
struct cmdnames *other_cmds) struct cmdnames *other_cmds)
{ {
unsigned int longest = 0;
unsigned int len;
const char *env_path = getenv("PATH"); const char *env_path = getenv("PATH");
char *paths, *path, *colon; char *paths, *path, *colon;
const char *exec_path = git_exec_path(); const char *exec_path = git_exec_path();
if (exec_path) if (exec_path)
longest = list_commands_in_dir(main_cmds, exec_path, prefix); list_commands_in_dir(main_cmds, exec_path, prefix);
if (!env_path) { if (!env_path) {
fprintf(stderr, "PATH not set\n"); fprintf(stderr, "PATH not set\n");
@ -202,9 +194,7 @@ unsigned int load_command_list(const char *prefix,
if ((colon = strchr(path, PATH_SEP))) if ((colon = strchr(path, PATH_SEP)))
*colon = 0; *colon = 0;
len = list_commands_in_dir(other_cmds, path, prefix); list_commands_in_dir(other_cmds, path, prefix);
if (len > longest)
longest = len;
if (!colon) if (!colon)
break; break;
@ -220,14 +210,20 @@ unsigned int load_command_list(const char *prefix,
sizeof(*other_cmds->names), cmdname_compare); sizeof(*other_cmds->names), cmdname_compare);
uniq(other_cmds); uniq(other_cmds);
exclude_cmds(other_cmds, main_cmds); exclude_cmds(other_cmds, main_cmds);
return longest;
} }
void list_commands(const char *title, unsigned int longest, void list_commands(const char *title, struct cmdnames *main_cmds,
struct cmdnames *main_cmds, struct cmdnames *other_cmds) struct cmdnames *other_cmds)
{ {
const char *exec_path = git_exec_path(); const char *exec_path = git_exec_path();
int i, longest = 0;
for (i = 0; i < main_cmds->cnt; i++)
if (longest < main_cmds->names[i]->len)
longest = main_cmds->names[i]->len;
for (i = 0; i < other_cmds->cnt; i++)
if (longest < other_cmds->names[i]->len)
longest = other_cmds->names[i]->len;
if (main_cmds->cnt) { if (main_cmds->cnt) {
printf("available %s in '%s'\n", title, exec_path); printf("available %s in '%s'\n", title, exec_path);

6
help.h
View File

@ -16,14 +16,14 @@ static inline void mput_char(char c, unsigned int num)
putchar(c); putchar(c);
} }
unsigned int load_command_list(const char *prefix, void load_command_list(const char *prefix,
struct cmdnames *main_cmds, struct cmdnames *main_cmds,
struct cmdnames *other_cmds); struct cmdnames *other_cmds);
void add_cmdname(struct cmdnames *cmds, const char *name, int len); void add_cmdname(struct cmdnames *cmds, const char *name, int len);
/* Here we require that excludes is a sorted list. */ /* Here we require that excludes is a sorted list. */
void exclude_cmds(struct cmdnames *cmds, struct cmdnames *excludes); void exclude_cmds(struct cmdnames *cmds, struct cmdnames *excludes);
int is_in_cmdlist(struct cmdnames *c, const char *s); int is_in_cmdlist(struct cmdnames *c, const char *s);
void list_commands(const char *title, unsigned int longest, void list_commands(const char *title, struct cmdnames *main_cmds,
struct cmdnames *main_cmds, struct cmdnames *other_cmds); struct cmdnames *other_cmds);
#endif /* HELP_H */ #endif /* HELP_H */