From: Alex Riesen <fork0@users.sourceforge.net>, Alex Riesen <raa.lkml@gmail.com>
To: git@vger.kernel.org
Cc: Junio C Hamano <junkio@cox.net>,
Johannes Schindelin <Johannes.Schindelin@gmx.de>
Subject: [PATCH] Remove calculation of the longest command name from where it is not used
Date: Thu, 28 Aug 2008 19:15:33 +0200 [thread overview]
Message-ID: <20080828171533.GA6024@blimp.local> (raw)
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>
---
And it less code than before (it is even more deletions than
insertions).
BTW, the Johannesses typo-guesser conflicts heavily in recent master.
Pity. I'm going to rebase it and send out the rebased version.
builtin-help.c | 4 ++--
builtin-merge.c | 8 ++++----
help.c | 34 +++++++++++++++-------------------
help.h | 6 +++---
4 files changed, 24 insertions(+), 28 deletions(-)
diff --git a/builtin-help.c b/builtin-help.c
index 391f749..9225102 100644
--- a/builtin-help.c
+++ b/builtin-help.c
@@ -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);
@@ -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;
}
diff --git a/builtin-merge.c b/builtin-merge.c
index d6bcbec..dcd08f7 100644
--- a/builtin-merge.c
+++ b/builtin-merge.c
@@ -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;
@@ -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(¬_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];
diff --git a/help.c b/help.c
index 1afbac0..a17a746 100644
--- a/help.c
+++ b/help.c
@@ -133,11 +133,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;
@@ -145,7 +144,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);
@@ -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");
@@ -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;
@@ -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);
diff --git a/help.h b/help.h
index 3f1ae89..2733433 100644
--- a/help.h
+++ b/help.h
@@ -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 */
--
1.6.0.1.150.g5966
next reply other threads:[~2008-08-28 17:26 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-28 17:15 Alex Riesen, Alex Riesen [this message]
2008-08-28 21:27 ` [PATCH updated] git wrapper: DWIM mistyped commands Alex Riesen
2008-08-28 21:28 ` [PATCH] Add help.autocorrect to enable/disable autocorrecting Alex Riesen
2008-08-29 10:11 ` Andreas Ericsson
2008-09-08 6:50 ` Junio C Hamano
2008-08-29 14:58 ` [PATCH updated] git wrapper: DWIM mistyped commands Mikael Magnusson
2008-08-30 10:12 ` Alex Riesen
2008-08-30 10:33 ` Mikael Magnusson
2008-08-31 13:50 ` [PATCH] " Alex Riesen
2008-08-31 13:54 ` [PATCH] Add help.autocorrect to enable/disable autocorrecting Alex Riesen
2008-08-31 14:49 ` Matthieu Moy
2008-08-31 16:33 ` Junio C Hamano
2008-09-01 14:42 ` [PATCH] git wrapper: DWIM mistyped commands Mikael Magnusson
2008-08-31 13:57 ` [PATCH updated] " Alex Riesen
2008-08-30 15:36 ` Junio C Hamano
2008-08-30 16:44 ` Alex Riesen
2008-08-30 17:13 ` [PATCH] Reuse cmdname->len to store pre-calculated similarity indexes Alex Riesen
2008-08-30 17:26 ` Junio C Hamano
[not found] ` <a2075f4c0808301510g1af01b14kd58da12dc2e80f93@mail.gmail.com>
2008-08-30 22:17 ` [PATCH updated] git wrapper: DWIM mistyped commands Felipe Carvalho Oliveira
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080828171533.GA6024@blimp.local \
--to=fork0@users.sourceforge.net \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=junkio@cox.net \
--cc=raa.lkml@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).