summaryrefslogtreecommitdiff
path: root/help.c
diff options
context:
space:
mode:
Diffstat (limited to 'help.c')
-rw-r--r--help.c77
1 files changed, 35 insertions, 42 deletions
diff --git a/help.c b/help.c
index 74499bf840..300cd38a9f 100644
--- a/help.c
+++ b/help.c
@@ -144,11 +144,10 @@ 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;
@@ -156,7 +155,7 @@ static unsigned int list_commands_in_dir(struct cmdnames *cmds,
int len;
if (!dir)
- return 0;
+ return;
if (!prefix)
prefix = "git-";
prefix_len = strlen(prefix);
@@ -179,68 +178,62 @@ 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);
-
- if (!env_path) {
- fprintf(stderr, "PATH not set\n");
- exit(1);
+ if (exec_path) {
+ list_commands_in_dir(main_cmds, exec_path, prefix);
+ qsort(main_cmds->names, main_cmds->cnt,
+ sizeof(*main_cmds->names), cmdname_compare);
+ uniq(main_cmds);
}
- path = paths = xstrdup(env_path);
- while (1) {
- if ((colon = strchr(path, PATH_SEP)))
- *colon = 0;
-
- len = list_commands_in_dir(other_cmds, path, prefix);
- if (len > longest)
- longest = len;
+ if (env_path) {
+ char *paths, *path, *colon;
+ path = paths = xstrdup(env_path);
+ while (1) {
+ if ((colon = strchr(path, PATH_SEP)))
+ *colon = 0;
- if (!colon)
- break;
- path = colon + 1;
- }
- free(paths);
+ list_commands_in_dir(other_cmds, path, prefix);
- qsort(main_cmds->names, main_cmds->cnt,
- sizeof(*main_cmds->names), cmdname_compare);
- uniq(main_cmds);
+ if (!colon)
+ break;
+ path = colon + 1;
+ }
+ free(paths);
- qsort(other_cmds->names, other_cmds->cnt,
- sizeof(*other_cmds->names), cmdname_compare);
- uniq(other_cmds);
+ qsort(other_cmds->names, other_cmds->cnt,
+ 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) {
+ const char *exec_path = git_exec_path();
printf("available %s in '%s'\n", title, exec_path);
printf("----------------");
mput_char('-', strlen(title) + strlen(exec_path));