git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Miklos Vajna <vmiklos@frugalware.org>
Cc: "To: Junio C Hamano" <gitster@pobox.com>,
	git@vger.kernel.org,
	Johannes Schindelin <Johannes.Schindelin@gmx.de>,
	Olivier Marin <dkr@freesurf.fr>
Subject: Re: [PATCH] Build in merge
Date: Mon, 07 Jul 2008 17:32:50 -0700	[thread overview]
Message-ID: <7v63rhz03x.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: <1215474140-11220-1-git-send-email-vmiklos@frugalware.org> (Miklos Vajna's message of "Tue, 8 Jul 2008 01:42:20 +0200")

Miklos Vajna <vmiklos@frugalware.org> writes:

> Mentored-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
> Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
> ---
>
> On Mon, Jul 07, 2008 at 11:15:09AM -0700, Junio C Hamano <gitster@pobox.com> wrote:
>> I do not get you on this point.  Which one is nicer?
>>
>>  (1) Have two lists, perhaps all_* and user_*.  The logic that finds a
>>      strategy searches in two lists.  The logic that checks if a given
>>      strategy is built-in checks if it is on all_* list.
>>
>>  (2) Have a single list, but add a boolean "unsigned is_builtin:1" to
>>  each
>>      element of it.  The logic that finds a strategy looks in this
>>      single
>>      list.  The logic that checks if a given strategy is built-in
>>      looks at
>>      the strategy instance and it has the bit already.
>>
>> You seem to be advocating (1) but I do not understand why...
>
> Ah, OK. For now, I just added an "unsigned enabled:1;". Later we can add
> an "unsigned is_buildin:1;" as well, but currently we die with earlier
> with a "Could not find merge strategy" error message, so is_builtin
> would be always true.
>
> So here is a version, this time without the use_strategies list.

That is not what I meant.  I am afraid perhaps I misunderstood what you
were talking about.

When/if you allow user defined new strategies, then you have a choice:

 (1) find "git-merge-*" in path, add them to the single all_strategies[]
     list (but you will do the ALLOC_GROW() business so you would need to
     use the one you currently have as static form to prime the real list),
     and look for "foo" strategy when "-s foo" is given from that single
     list, or

 (2) find "git-merge-*" in path, add them to a separate user_strategies[]
     list, and look for "foo" strategy when "-s foo" is given from the
     user_strategies[] list and all_strategies[] list (all_strategies[]
     should perhaps be renamed to builtin_strategies[] if you go that
     route).

The comparison I gave was between the above two.  But the change you are
talking about is completely different, isn't it?

The part that records which strategies were specified from the command
line *in what order* via "-s foo" switches should remain list of pointers
into "struct strategy", which is called "struct strategy **use_strategies"
in the code and corresponds to the $use_strategies variable in the
scripted version.  The order of these is important, as that defines in
which order the strategies are tried [*1*].  If you go route (1), these
pointers will all be pointing at elements in all_strategies[]; with route
(2) they may be pointing at either all_strageties[] element or
user_strategies[] element.

If you are never going to say "available strategies are these" after you
start supporting user-defined strategy, then you do not necessarily need
to do the "find 'git-merge-*' in path, add them to ..." step above, in
which case it would be Ok not to scan the path and add them to
all_strategies[] (in route (1)) nor user_strategies[] (in route (2)).
Instead, you would just create a new "struct strategy" instance lazily
when the user gave "-s foo" and "foo" is not one of the built-in strategy.
You would put that at the tail of "struct strategy **use_strategy" array,
and iterate over use_strategy in the order they are given on the command
line.


[Footnote]

*1* Personally, I find the importance of this dubious in practice, as I
said earlier, I do not think it would work well to try different
strategies and pick the best one --- evaluating which result is the *best*
is difficult.  If you want to stay compatible with the scripted version,
however, you cannot just mark entries in all_strategies[] with boolean and
iterate over them in the order that all_strageties[] define them.  You
need to try them in the order the user specified.

  reply	other threads:[~2008-07-08  0:34 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-27 16:21 [PATCH 00/15] Build in merge Miklos Vajna
2008-06-27 16:21 ` [PATCH 01/15] Move split_cmdline() to alias.c Miklos Vajna
2008-06-27 16:21   ` [PATCH 02/15] Move commit_list_count() to commit.c Miklos Vajna
2008-06-27 16:21     ` [PATCH 03/15] Move parse-options's skip_prefix() to git-compat-util.h Miklos Vajna
2008-06-27 16:21       ` [PATCH 04/15] Add new test to ensure git-merge handles pull.twohead and pull.octopus Miklos Vajna
2008-06-27 16:21         ` [PATCH 05/15] Move read_cache_unmerged() to read-cache.c Miklos Vajna
2008-06-27 16:21           ` [PATCH 06/15] git-fmt-merge-msg: make it usable from other builtins Miklos Vajna
2008-06-27 16:22             ` [PATCH 07/15] Introduce get_octopus_merge_bases() in commit.c Miklos Vajna
2008-06-27 16:22               ` [PATCH 08/15] Add new test to ensure git-merge handles more than 25 refs Miklos Vajna
2008-06-27 16:22                 ` [PATCH 09/15] Introduce get_merge_bases_many() Miklos Vajna
2008-06-27 16:22                   ` [PATCH 10/15] Introduce reduce_heads() Miklos Vajna
2008-06-27 16:22                     ` [PATCH 11/15] Add strbuf_vaddf(), use it in strbuf_addf(), and add strbuf_initf() Miklos Vajna
2008-06-27 16:22                       ` [PATCH 12/15] strbuf_vaddf(): support %*s, too Miklos Vajna
2008-06-27 16:22                         ` [PATCH 13/15] Add new test case to ensure git-merge reduces octopus parents when possible Miklos Vajna
2008-06-27 16:22                           ` [PATCH 14/15] Add new test case to ensure git-merge prepends the custom merge message Miklos Vajna
2008-06-27 16:22                             ` [PATCH 15/15] Build in merge Miklos Vajna
2008-06-27 17:09                               ` Miklos Vajna
2008-06-28  2:00                       ` [PATCH 11/15] Add strbuf_vaddf(), use it in strbuf_addf(), and add strbuf_initf() Junio C Hamano
2008-06-28  2:33                         ` Miklos Vajna
2008-06-28  2:38                           ` [PATCH 13/13] Build in merge Miklos Vajna
2008-06-29  7:46                             ` Junio C Hamano
2008-06-29  8:11                               ` Jakub Narebski
2008-06-30  1:36                               ` Miklos Vajna
2008-06-30  1:39                                 ` Miklos Vajna
2008-06-30  5:44                                   ` Junio C Hamano
2008-06-30 17:41                                     ` Alex Riesen
2008-07-01  2:13                                     ` Miklos Vajna
2008-07-01  2:22                                       ` [PATCH 13/14] git-commit-tree: make it usable from other builtins Miklos Vajna
2008-07-01  5:07                                         ` Johannes Schindelin
2008-07-01  5:50                                         ` Junio C Hamano
2008-07-01 12:09                                           ` Miklos Vajna
2008-07-01  2:22                                       ` [PATCH 14/14] Build in merge Miklos Vajna
2008-07-01  2:37                                         ` [PATCH 00/14] " Miklos Vajna
2008-07-01  2:37                                           ` [PATCH 08/14] Add new test to ensure git-merge handles more than 25 refs Miklos Vajna
2008-07-01  2:37                                             ` [PATCH 13/14] git-commit-tree: make it usable from other builtins Miklos Vajna
2008-07-01  2:37                                               ` [PATCH 14/14] Build in merge Miklos Vajna
2008-07-01  6:23                                                 ` Junio C Hamano
2008-07-01 12:50                                                   ` Miklos Vajna
2008-07-01 13:18                                                     ` Miklos Vajna
2008-07-01 23:55                                                       ` Junio C Hamano
2008-07-02  7:43                                                         ` Miklos Vajna
2008-07-06  8:50                                                       ` Junio C Hamano
2008-07-06  9:43                                                         ` Junio C Hamano
2008-07-07 17:17                                                           ` Miklos Vajna
2008-07-07 18:15                                                             ` Junio C Hamano
2008-07-07 23:42                                                               ` [PATCH] " Miklos Vajna
2008-07-08  0:32                                                                 ` Junio C Hamano [this message]
2008-07-08  0:53                                                                   ` Junio C Hamano
2008-07-08  1:18                                                                     ` Miklos Vajna
2008-07-08  1:00                                                                   ` Miklos Vajna
2008-07-08  1:05                                                                     ` Junio C Hamano
2008-07-08  1:41                                                                       ` Miklos Vajna
2008-07-06 12:38                                                         ` [PATCH 14/14] " Johannes Schindelin
2008-07-06 19:39                                                           ` Junio C Hamano
2008-07-07 17:24                                                         ` [PATCH] " Miklos Vajna
2008-07-07 17:35                                                           ` Miklos Vajna
2008-07-01  7:27                                                 ` [PATCH 14/14] " Junio C Hamano
2008-07-01 12:55                                                   ` Miklos Vajna
2008-06-30 22:44                                   ` [PATCH 13/13] " Olivier Marin
2008-06-30 22:58                                     ` Miklos Vajna
2008-06-30  5:40                                 ` Junio C Hamano
2008-06-30 22:48                                   ` Miklos Vajna
2008-06-28 17:33                         ` [PATCH 11/15] Add strbuf_vaddf(), use it in strbuf_addf(), and add strbuf_initf() Johannes Schindelin
2008-06-29  8:07                           ` Junio C Hamano
2008-06-29 13:40                             ` Johannes Schindelin
2008-06-29 20:17                               ` Alex Riesen
2008-06-29 20:24                                 ` Junio C Hamano
2008-06-29 20:30                                   ` Sverre Rabbelier
2008-06-27 17:06                 ` [PATCH 08/15] Add new test to ensure git-merge handles more than 25 refs Miklos Vajna
2008-06-29 13:30         ` [PATCH 04/15] Add new test to ensure git-merge handles pull.twohead and pull.octopus Olivier Marin
2008-06-29 14:51           ` [PATCH] " Miklos Vajna
2008-06-29 15:11             ` Miklos Vajna
2008-07-04 16:34         ` [PATCH 04/15] " Mike Ralphson
2008-07-05  0:26           ` Miklos Vajna
2008-07-05  0:32             ` [PATCH] Fix t7601-merge-pull-config.sh on AIX Miklos Vajna
2008-07-05  1:49               ` Junio C Hamano
2008-06-29 14:05   ` [PATCH 01/15] Move split_cmdline() to alias.c Olivier Marin
2008-06-29 14:15     ` Johannes Schindelin
2008-06-29 14:29       ` Olivier Marin
2008-06-29 14:43         ` Johannes Schindelin
2008-06-30 22:51           ` Olivier Marin

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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7v63rhz03x.fsf@gitster.siamese.dyndns.org \
    --to=gitster@pobox.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=dkr@freesurf.fr \
    --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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).