git-read-tree: some "final" cleanups
Looking good, but hey, it's not like I even have a real testcase for any of this. But unlike the mess that this was yerstday, today read-cache is pretty readable and understandable. Which is always a good sign.
This commit is contained in:
parent
d723c69063
commit
451322512f
24
read-tree.c
24
read-tree.c
@ -221,7 +221,9 @@ static void check_updates(struct cache_entry **src, int nr)
|
||||
}
|
||||
}
|
||||
|
||||
static void merge_cache(struct cache_entry **src, int nr, int (*fn)(struct cache_entry **, struct cache_entry **))
|
||||
typedef int (*merge_fn_t)(struct cache_entry **, struct cache_entry **);
|
||||
|
||||
static void merge_cache(struct cache_entry **src, int nr, merge_fn_t fn)
|
||||
{
|
||||
struct cache_entry **dst = src;
|
||||
|
||||
@ -296,20 +298,14 @@ int main(int argc, char **argv)
|
||||
stage++;
|
||||
}
|
||||
if (merge) {
|
||||
switch (stage) {
|
||||
case 4: /* Three-way merge */
|
||||
merge_cache(active_cache, active_nr, threeway_merge);
|
||||
break;
|
||||
case 3: /* Update from one tree to another */
|
||||
merge_cache(active_cache, active_nr, twoway_merge);
|
||||
check_updates(active_cache, active_nr);
|
||||
break;
|
||||
case 2: /* Just read a tree, merge with old cache contents */
|
||||
merge_cache(active_cache, active_nr, oneway_merge);
|
||||
break;
|
||||
default:
|
||||
static const merge_fn_t merge_function[] = {
|
||||
[1] = oneway_merge,
|
||||
[2] = twoway_merge,
|
||||
[3] = threeway_merge,
|
||||
};
|
||||
if (stage < 2 || stage > 4)
|
||||
die("just how do you expect me to merge %d trees?", stage-1);
|
||||
}
|
||||
merge_cache(active_cache, active_nr, merge_function[stage-1]);
|
||||
}
|
||||
if (write_cache(newfd, active_cache, active_nr) ||
|
||||
commit_index_file(&cache_file))
|
||||
|
Loading…
Reference in New Issue
Block a user