Re: [PATCH 14/14] Build in merge

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

Re: [PATCH 14/14] Build in merge

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:44:53

Junio C Hamano [off-list ref] writes:
You would perhaps define:

	#define DEFAULT_TWOHEAD (1<<0)
	#define DEFAULT_OCTOPUS (1<<1)
	#define NO_FAST_FORWARD (1<<2)
	#define NO_TRIVIAL	(1<<3)

	static struct strategy {
        	char *name;
                unsigned attr;
	} all_strategy[] = {
                { "octopus",    DEFAULT_OCTOPUS },
                { "ours",       (NO_FAST_FORWARD | NO_TRIVIAL) },
                { "recur",      NO_TRIVIAL },
                { "recursive",  (DEFAULT_TWOHEAD | NO_TRIVIAL) },
                { "resolve",    0 },
                { "stupid",     0 },
                { "subtree",    (NO_FAST_FORWARD | NO_TRIVIAL) },
        };

And "unsorted_path_list_lookup()" can now become much more natural,
perhaps:

	static struct strategy *get_strategy(const char *name);

which has a more natural function signature and much better name.

Then, you would keep an array of pointers into all_strategy[] array to
represent the list of "-s strategy" given by the user:

	static struct strategy *use_strategy;
	static int use_strategy_alloc, use_strategy_nr;
Sorry, I have an obvious typo here.  "use_strategy" will be dynamic array
of pointers into all_strategy[] so its definition would be:

	static struct strategy **use_strategy;
and have a function that use s the standard ALLOC_GROW() and friends to
grow this.  The function will be named and written more naturally
(i.e. path_list_append_strategy() can go) --- this does not have anything
to do with path_list, but it is about "merge strategy".

Re: [PATCH 14/14] Build in merge

From: Miklos Vajna <hidden>
Date: 2016-06-15 22:44:54

On Sun, Jul 06, 2008 at 02:43:41AM -0700, Junio C Hamano [off-list ref] wrote:
quoted
Then, you would keep an array of pointers into all_strategy[] array to
represent the list of "-s strategy" given by the user:

	static struct strategy *use_strategy;
	static int use_strategy_alloc, use_strategy_nr;
Sorry, I have an obvious typo here.  "use_strategy" will be dynamic array
of pointers into all_strategy[] so its definition would be:

	static struct strategy **use_strategy;
I think there are two possibilities here:

1) Append custom strategies to all_strategy and have only pointers in
use_strategy.

This is what you suggest in your second mail.

2) Copy the names and attributes from all_strategy to use_strategies and
append custom strategies there.

This is what I do at the moment.

I think it's better not to modify all_strategy, it serves as a
reference, for example later this would allow us to check if the used
merge strategy is a predefined or a custom one.

Or is there any strong reason introducing all_strategy_alloc,
all_strategy_nr and using ALLOC_GROW() with all_strategy instead of with
use_strategy?

Thanks.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help