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".