Skip to content

Commit

Permalink
Remove calculation of the longest command name from where it is not used
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Alex Riesen authored and Junio C Hamano committed Aug 29, 2008
1 parent 63e8aea commit e321180
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 28 deletions.
4 changes: 2 additions & 2 deletions builtin-help.c
Original file line number Diff line number Diff line change
Expand Up @@ -418,7 +418,7 @@ int cmd_help(int argc, const char **argv, const char *prefix)
{
int nongit;
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);
git_config(git_help_config, NULL);
Expand All @@ -428,7 +428,7 @@ int cmd_help(int argc, const char **argv, const char *prefix)

if (show_all) {
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);
return 0;
}
Expand Down
8 changes: 4 additions & 4 deletions builtin-merge.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ static struct strategy *get_strategy(const char *name)
int i;
struct strategy *ret;
static struct cmdnames main_cmds, other_cmds;
static int longest;
static int loaded;

if (!name)
return NULL;
Expand All @@ -89,14 +89,14 @@ static struct strategy *get_strategy(const char *name)
if (!strcmp(name, all_strategy[i].name))
return &all_strategy[i];

if (!longest) {
if (!loaded) {
struct cmdnames not_strategies;
loaded = 1;

memset(&main_cmds, 0, sizeof(struct cmdnames));
memset(&other_cmds, 0, sizeof(struct cmdnames));
memset(&not_strategies, 0, sizeof(struct cmdnames));
longest = load_command_list("git-merge-", &main_cmds,
&other_cmds);
load_command_list("git-merge-", &main_cmds, &other_cmds);
for (i = 0; i < main_cmds.cnt; i++) {
int j, found = 0;
struct cmdname *ent = main_cmds.names[i];
Expand Down
34 changes: 15 additions & 19 deletions help.c
Original file line number Diff line number Diff line change
Expand Up @@ -133,19 +133,18 @@ static int is_executable(const char *name)
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 *prefix)
{
unsigned int longest = 0;
int prefix_len;
DIR *dir = opendir(path);
struct dirent *de;
struct strbuf buf = STRBUF_INIT;
int len;

if (!dir)
return 0;
return;
if (!prefix)
prefix = "git-";
prefix_len = strlen(prefix);
Expand All @@ -168,29 +167,22 @@ static unsigned int list_commands_in_dir(struct cmdnames *cmds,
if (has_extension(de->d_name, ".exe"))
entlen -= 4;

if (longest < entlen)
longest = entlen;

add_cmdname(cmds, de->d_name + prefix_len, entlen);
}
closedir(dir);
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 *other_cmds)
{
unsigned int longest = 0;
unsigned int len;
const char *env_path = getenv("PATH");
char *paths, *path, *colon;
const char *exec_path = git_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) {
fprintf(stderr, "PATH not set\n");
Expand All @@ -202,9 +194,7 @@ unsigned int load_command_list(const char *prefix,
if ((colon = strchr(path, PATH_SEP)))
*colon = 0;

len = list_commands_in_dir(other_cmds, path, prefix);
if (len > longest)
longest = len;
list_commands_in_dir(other_cmds, path, prefix);

if (!colon)
break;
Expand All @@ -220,14 +210,20 @@ unsigned int load_command_list(const char *prefix,
sizeof(*other_cmds->names), cmdname_compare);
uniq(other_cmds);
exclude_cmds(other_cmds, main_cmds);

return longest;
}

void list_commands(const char *title, unsigned int longest,
struct cmdnames *main_cmds, struct cmdnames *other_cmds)
void list_commands(const char *title, struct cmdnames *main_cmds,
struct cmdnames *other_cmds)
{
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) {
printf("available %s in '%s'\n", title, exec_path);
Expand Down
6 changes: 3 additions & 3 deletions help.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@ static inline void mput_char(char c, unsigned int num)
putchar(c);
}

unsigned int load_command_list(const char *prefix,
void load_command_list(const char *prefix,
struct cmdnames *main_cmds,
struct cmdnames *other_cmds);
void add_cmdname(struct cmdnames *cmds, const char *name, int len);
/* Here we require that excludes is a sorted list. */
void exclude_cmds(struct cmdnames *cmds, struct cmdnames *excludes);
int is_in_cmdlist(struct cmdnames *c, const char *s);
void list_commands(const char *title, unsigned int longest,
struct cmdnames *main_cmds, struct cmdnames *other_cmds);
void list_commands(const char *title, struct cmdnames *main_cmds,
struct cmdnames *other_cmds);

#endif /* HELP_H */

0 comments on commit e321180

Please sign in to comment.