mirror of
https://github.com/git/git.git
synced 2024-11-27 20:14:30 +08:00
refactor merge flags into xmparam_t
Include the merge level, favor, and style flags into the xmparam_t struct. This removes the bit twiddling with these three values into the one flags parameter. Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
cd1d61c44f
commit
560119b9ab
@ -27,17 +27,14 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix)
|
||||
mmbuffer_t result = {NULL, 0};
|
||||
xmparam_t xmp = {{XDF_NEED_MINIMAL}};
|
||||
int ret = 0, i = 0, to_stdout = 0;
|
||||
int level = XDL_MERGE_ZEALOUS_ALNUM;
|
||||
int style = 0, quiet = 0;
|
||||
int favor = 0;
|
||||
int quiet = 0;
|
||||
int nongit;
|
||||
|
||||
struct option options[] = {
|
||||
OPT_BOOLEAN('p', "stdout", &to_stdout, "send results to standard output"),
|
||||
OPT_SET_INT(0, "diff3", &style, "use a diff3 based merge", XDL_MERGE_DIFF3),
|
||||
OPT_SET_INT(0, "ours", &favor, "for conflicts, use our version",
|
||||
OPT_SET_INT(0, "diff3", &xmp.style, "use a diff3 based merge", XDL_MERGE_DIFF3),
|
||||
OPT_SET_INT(0, "ours", &xmp.favor, "for conflicts, use our version",
|
||||
XDL_MERGE_FAVOR_OURS),
|
||||
OPT_SET_INT(0, "theirs", &favor, "for conflicts, use their version",
|
||||
OPT_SET_INT(0, "theirs", &xmp.favor, "for conflicts, use their version",
|
||||
XDL_MERGE_FAVOR_THEIRS),
|
||||
OPT__QUIET(&quiet),
|
||||
OPT_CALLBACK('L', NULL, names, "name",
|
||||
@ -45,12 +42,16 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix)
|
||||
OPT_END(),
|
||||
};
|
||||
|
||||
xmp.level = XDL_MERGE_ZEALOUS_ALNUM;
|
||||
xmp.style = 0;
|
||||
xmp.favor = 0;
|
||||
|
||||
prefix = setup_git_directory_gently(&nongit);
|
||||
if (!nongit) {
|
||||
/* Read the configuration file */
|
||||
git_config(git_xmerge_config, NULL);
|
||||
if (0 <= git_xmerge_style)
|
||||
style = git_xmerge_style;
|
||||
xmp.style = git_xmerge_style;
|
||||
}
|
||||
|
||||
argc = parse_options(argc, argv, prefix, options, merge_file_usage, 0);
|
||||
@ -73,7 +74,7 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix)
|
||||
}
|
||||
|
||||
ret = xdl_merge(mmfs + 1, mmfs + 0, names[0], mmfs + 2, names[2],
|
||||
&xmp, XDL_MERGE_FLAGS(level, style, favor), &result);
|
||||
&xmp, &result);
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
free(mmfs[i].ptr);
|
||||
|
12
ll-merge.c
12
ll-merge.c
@ -63,8 +63,6 @@ static int ll_xdl_merge(const struct ll_merge_driver *drv_unused,
|
||||
int flag, int marker_size)
|
||||
{
|
||||
xmparam_t xmp;
|
||||
int style = 0;
|
||||
int favor = (flag >> 1) & 03;
|
||||
|
||||
if (buffer_is_binary(orig->ptr, orig->size) ||
|
||||
buffer_is_binary(src1->ptr, src1->size) ||
|
||||
@ -79,15 +77,13 @@ static int ll_xdl_merge(const struct ll_merge_driver *drv_unused,
|
||||
}
|
||||
|
||||
memset(&xmp, 0, sizeof(xmp));
|
||||
xmp.level = XDL_MERGE_ZEALOUS;
|
||||
xmp.favor= (flag >> 1) & 03;
|
||||
if (git_xmerge_style >= 0)
|
||||
style = git_xmerge_style;
|
||||
xmp.style = git_xmerge_style;
|
||||
if (marker_size > 0)
|
||||
xmp.marker_size = marker_size;
|
||||
return xdl_merge(orig,
|
||||
src1, name1,
|
||||
src2, name2,
|
||||
&xmp, XDL_MERGE_FLAGS(XDL_MERGE_ZEALOUS, style, favor),
|
||||
result);
|
||||
return xdl_merge(orig, src1, name1, src2, name2, &xmp, result);
|
||||
}
|
||||
|
||||
static int ll_union_merge(const struct ll_merge_driver *drv_unused,
|
||||
|
@ -56,18 +56,14 @@ extern "C" {
|
||||
#define XDL_MERGE_EAGER 1
|
||||
#define XDL_MERGE_ZEALOUS 2
|
||||
#define XDL_MERGE_ZEALOUS_ALNUM 3
|
||||
#define XDL_MERGE_LEVEL_MASK 0x0f
|
||||
|
||||
/* merge favor modes */
|
||||
#define XDL_MERGE_FAVOR_OURS 1
|
||||
#define XDL_MERGE_FAVOR_THEIRS 2
|
||||
#define XDL_MERGE_FAVOR_UNION 3
|
||||
#define XDL_MERGE_FAVOR(flags) (((flags)>>4) & 3)
|
||||
#define XDL_MERGE_FLAGS(level, style, favor) ((level)|(style)|((favor)<<4))
|
||||
|
||||
/* merge output styles */
|
||||
#define XDL_MERGE_DIFF3 0x8000
|
||||
#define XDL_MERGE_STYLE_MASK 0x8000
|
||||
#define XDL_MERGE_DIFF3 1
|
||||
|
||||
typedef struct s_mmfile {
|
||||
char *ptr;
|
||||
@ -118,13 +114,16 @@ int xdl_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
|
||||
typedef struct s_xmparam {
|
||||
xpparam_t xpp;
|
||||
int marker_size;
|
||||
int level;
|
||||
int favor;
|
||||
int style;
|
||||
} xmparam_t;
|
||||
|
||||
#define DEFAULT_CONFLICT_MARKER_SIZE 7
|
||||
|
||||
int xdl_merge(mmfile_t *orig, mmfile_t *mf1, const char *name1,
|
||||
mmfile_t *mf2, const char *name2,
|
||||
xmparam_t const *xmp, int flags, mmbuffer_t *result);
|
||||
xmparam_t const *xmp, mmbuffer_t *result);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -400,13 +400,13 @@ static int xdl_simplify_non_conflicts(xdfenv_t *xe1, xdmerge_t *m,
|
||||
*/
|
||||
static int xdl_do_merge(xdfenv_t *xe1, xdchange_t *xscr1, const char *name1,
|
||||
xdfenv_t *xe2, xdchange_t *xscr2, const char *name2,
|
||||
int flags, xmparam_t const *xmp, mmbuffer_t *result) {
|
||||
xmparam_t const *xmp, mmbuffer_t *result) {
|
||||
xdmerge_t *changes, *c;
|
||||
xpparam_t const *xpp = &xmp->xpp;
|
||||
int i0, i1, i2, chg0, chg1, chg2;
|
||||
int level = flags & XDL_MERGE_LEVEL_MASK;
|
||||
int style = flags & XDL_MERGE_STYLE_MASK;
|
||||
int favor = XDL_MERGE_FAVOR(flags);
|
||||
int level = xmp->level;
|
||||
int style = xmp->style;
|
||||
int favor = xmp->favor;
|
||||
|
||||
if (style == XDL_MERGE_DIFF3) {
|
||||
/*
|
||||
@ -556,7 +556,7 @@ static int xdl_do_merge(xdfenv_t *xe1, xdchange_t *xscr1, const char *name1,
|
||||
|
||||
int xdl_merge(mmfile_t *orig, mmfile_t *mf1, const char *name1,
|
||||
mmfile_t *mf2, const char *name2,
|
||||
xmparam_t const *xmp, int flags, mmbuffer_t *result) {
|
||||
xmparam_t const *xmp, mmbuffer_t *result) {
|
||||
xdchange_t *xscr1, *xscr2;
|
||||
xdfenv_t xe1, xe2;
|
||||
int status;
|
||||
@ -593,7 +593,7 @@ int xdl_merge(mmfile_t *orig, mmfile_t *mf1, const char *name1,
|
||||
} else {
|
||||
status = xdl_do_merge(&xe1, xscr1, name1,
|
||||
&xe2, xscr2, name2,
|
||||
flags, xmp, result);
|
||||
xmp, result);
|
||||
}
|
||||
xdl_free_script(xscr1);
|
||||
xdl_free_script(xscr2);
|
||||
|
Loading…
Reference in New Issue
Block a user