git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Miklos Vajna <vmiklos@frugalware.org>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 4/5] builtin-merge: allow using a custom strategy
Date: Tue, 29 Jul 2008 12:47:05 -0700	[thread overview]
Message-ID: <7v4p68eame.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: 722d66a5a897b694f374aa96bd58aff01a2a5932.1217344803.git.vmiklos@frugalware.org

Miklos Vajna <vmiklos@frugalware.org> writes:

> Allow using a custom strategy, as long as it's named git-merge-foo. The
> error handling is now done using is_git_command(). The list of available
> strategies is now shown by list_commands().
>
> If an invalid strategy is supplied, like -s foobar, then git-merge would
> list all git-merge-* commands. This is not perfect, since for example
> git-merge-index is not a valid strategy.
> ...
> +	if (!is_git_command(name, "git-merge-")) {
> +		struct cmdnames not_strategies;
> +
> +		memset(&not_strategies, 0, sizeof(struct cmdnames));
> +		for (i = 0; i < main_cmds.cnt; i++) {
> +			int j, found = 0;
> +			struct cmdname *ent = main_cmds.names[i];
> +			for (j = 0; j < ARRAY_SIZE(all_strategy); j++)
> +				if (!strncmp(ent->name, all_strategy[j].name, ent->len)
> +						&& !all_strategy[j].name[ent->len])
> +					found = 1;
> +			if (!found)
> +				add_cmdname(&not_strategies, ent->name, ent->len);
> +		}

This feels overly wasteful.  Granted, this is not a performance critical
codepath, but you list all commands that begin with "git-merge-" in
is_git_command(), only to discard it and then iterate over 140+ main_cmds
list only to cull the ones whose name do not appear in the strategies
list.

Perhaps this shows that changing the function is_git_command() is a wrong
approach (for one thing, with the custom prefix, it is not about "Is it a
git command" anymore).  Wouldn't it be easier to read if you did this part
like this instead?

 * make load_command_list capable of loading into a "struct cmdnames" (or
   pair if you want) supplied by the caller;

 * use it to grab all commands whose name begin with "git-merge-" here;

 * Check if name appears in that list; if it doesn't, you already have the
   list of commands that could be merge strategy for error reporting.

If you also update list_commands() not to run load_command_list() itself
but take caller-supplied list of commands, then the API would become much
cleaner.  The caller would not be limited to "filter with prefix" anymore.

Hmm?

  parent reply	other threads:[~2008-07-29 19:48 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-26 11:54 [PATCH 0/7] Allow custom merge strategies Miklos Vajna
2008-07-26 11:54 ` [PATCH 1/7] Make is_git_command() usable outside builtin-help Miklos Vajna
2008-07-26 18:12   ` Jonathan Nieder
2008-07-28  1:18     ` Miklos Vajna
2008-07-28  1:21 ` [PATCH 0/6] Allow custom merge strategies, take 2 Miklos Vajna
2008-07-28  1:21   ` [PATCH 1/6] builtin-help: make is_git_command() usable outside builtin-help Miklos Vajna
2008-07-28  1:21     ` [PATCH 2/6] builtin-help: make list_commands() a bit more generic Miklos Vajna
2008-07-28  1:21       ` [PATCH 3/6] builtin-help: make it possible to exclude some commands in list_commands() Miklos Vajna
2008-07-28  1:21         ` [PATCH 4/6] builtin-merge: allow using a custom strategy Miklos Vajna
2008-07-28  1:21           ` [PATCH 5/6] builtin-merge: avoid non-strategy git-merge commands in error message Miklos Vajna
2008-07-28  1:21             ` [PATCH 6/6] Add a new test for using a custom merge strategy Miklos Vajna
2008-07-28 13:12               ` Johannes Schindelin
2008-07-28 23:39                 ` Miklos Vajna
2008-07-28 23:54                   ` Johannes Schindelin
2008-07-28 23:58                     ` Miklos Vajna
2008-07-29  0:01                       ` Miklos Vajna
2008-07-28 13:06             ` [PATCH 5/6] builtin-merge: avoid non-strategy git-merge commands in error message Johannes Schindelin
2008-07-28 23:48               ` [PATCH] builtin-merge: allow using a custom strategy Miklos Vajna
2008-07-28 23:59                 ` Johannes Schindelin
2008-07-28  1:36         ` [PATCH 3/6] builtin-help: make it possible to exclude some commands in list_commands() Junio C Hamano
2008-07-28  2:43           ` Johannes Schindelin
2008-07-28  3:05             ` Junio C Hamano
2008-07-28  4:29               ` Junio C Hamano
2008-07-28  9:58               ` Johannes Schindelin
2008-07-28 23:24           ` Miklos Vajna
2008-07-29 15:24   ` [PATCH 0/5] Allow custom merge strategies, take 3 Miklos Vajna
2008-07-29 15:24     ` [PATCH 1/5] builtin-help: make is_git_command() usable outside builtin-help Miklos Vajna
2008-07-29 15:25       ` [PATCH 2/5] builtin-help: make list_commands() a bit more generic Miklos Vajna
2008-07-29 15:25         ` [PATCH 3/5] builtin-help: make it possible to exclude some commands in list_commands() Miklos Vajna
2008-07-29 15:25           ` [PATCH 4/5] builtin-merge: allow using a custom strategy Miklos Vajna
2008-07-29 15:25             ` [PATCH 5/5] Add a new test for using a custom merge strategy Miklos Vajna
2008-07-29 19:47             ` Junio C Hamano [this message]
2008-07-29 23:16               ` [PATCH 0/4] Allow custom merge strategies, take 4 Miklos Vajna
2008-07-29 23:16                 ` [PATCH 1/4] builtin-help: make some internal functions available to other builtins Miklos Vajna
2008-07-29 23:16                   ` [PATCH 2/4] builtin-merge: allow using a custom strategy Miklos Vajna
2008-07-29 23:17                     ` [PATCH 3/4] Add a new test for using a custom merge strategy Miklos Vajna
2008-07-29 23:17                       ` [PATCH 4/4] Add a second testcase for handling invalid strategies in git-merge Miklos Vajna
2008-07-29 23:42                         ` Junio C Hamano
2008-07-30 17:27                           ` Miklos Vajna
2008-07-29 23:43                       ` [PATCH 3/4] Add a new test for using a custom merge strategy Junio C Hamano
2008-07-30 17:25                         ` Miklos Vajna
2008-07-30  6:21                   ` [PATCH 1/4] builtin-help: make some internal functions available to other builtins Junio C Hamano
2008-07-29 19:46           ` [PATCH 3/5] builtin-help: make it possible to exclude some commands in list_commands() Junio C Hamano
2008-07-29 21:25             ` Miklos Vajna
  -- strict thread matches above, loose matches on Subject: below --
2008-07-21 16:10 [PATCH] builtin-merge: give a proper error message for invalid strategies in config Miklos Vajna
2008-07-22  5:01 ` Junio C Hamano
2008-07-22  5:22   ` Junio C Hamano
2008-07-22  7:39   ` Miklos Vajna
2008-07-22  8:24     ` Junio C Hamano
2008-07-22 17:05       ` [PATCH] t7601: extend the 'merge picks up the best result' test Miklos Vajna
2008-07-26 11:54       ` Miklos Vajna
2008-07-26 11:54         ` [PATCH 2/7] builtin-help: change the current directory back in list_commands_in_dir() Miklos Vajna
2008-07-26 11:54           ` [PATCH 3/7] builtin-help: make list_commands() a bit more generic Miklos Vajna
2008-07-26 11:54             ` [PATCH 4/7] builtin-merge: allow using a custom strategy Miklos Vajna
2008-07-26 11:54               ` [PATCH 5/7] Add a new test for using a custom merge strategy Miklos Vajna
2008-07-26 11:54                 ` [PATCH 6/7] builtin-help: make it possible to exclude some commands in list_commands() Miklos Vajna
2008-07-26 11:54                   ` [PATCH 7/7] builtin-merge: avoid non-strategy git-merge commands in error message Miklos Vajna
2008-07-26 15:08                     ` Johannes Schindelin
2008-07-26 15:25                       ` Miklos Vajna
2008-07-26 15:27                         ` Miklos Vajna
2008-07-26 15:38                         ` Johannes Schindelin
2008-07-26 16:00                           ` Miklos Vajna
2008-07-26 17:01                             ` Johannes Schindelin
2008-07-26 17:12                               ` [PATCH] " Miklos Vajna
2008-07-26 18:28             ` [PATCH 3/7] builtin-help: make list_commands() a bit more generic Jonathan Nieder
2008-07-26 21:40               ` Miklos Vajna
2008-07-26 14:58           ` [PATCH 2/7] builtin-help: change the current directory back in list_commands_in_dir() Johannes Schindelin
2008-07-27 20:02           ` Junio C Hamano
2008-07-27 20:21             ` Johannes Schindelin
2008-07-27 20:34               ` [PATCH] Avoid chdir() " Johannes Schindelin
2008-07-26 12:33         ` [PATCH] t7601: extend the 'merge picks up the best result' test Miklos Vajna

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=7v4p68eame.fsf@gitster.siamese.dyndns.org \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=vmiklos@frugalware.org \
    /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).