Browse Source

Merge branch 'lt/diff'

* lt/diff:
  git diff: support "-U" and "--unified" options properly
maint
Junio C Hamano 19 years ago
parent
commit
05f743f328
  1. 1
      combine-diff.c
  2. 52
      diff.c
  3. 1
      diff.h

1
combine-diff.c

@ -608,6 +608,7 @@ static int show_patch_diff(struct combine_diff_path *elem, int num_parent, @@ -608,6 +608,7 @@ static int show_patch_diff(struct combine_diff_path *elem, int num_parent,
int abbrev = opt->full_index ? 40 : DEFAULT_ABBREV;
mmfile_t result_file;

context = opt->context;
/* Read the result of merge first */
if (!working_tree_file)
result = grab_blob(elem->sha1, &result_size);

52
diff.c

@ -563,7 +563,7 @@ static void builtin_diff(const char *name_a, @@ -563,7 +563,7 @@ static void builtin_diff(const char *name_a,

ecbdata.label_path = lbl;
xpp.flags = XDF_NEED_MINIMAL;
xecfg.ctxlen = 3;
xecfg.ctxlen = o->context;
xecfg.flags = XDL_EMIT_FUNCNAMES;
if (!diffopts)
;
@ -1187,6 +1187,7 @@ void diff_setup(struct diff_options *options) @@ -1187,6 +1187,7 @@ void diff_setup(struct diff_options *options)
options->line_termination = '\n';
options->break_opt = -1;
options->rename_limit = -1;
options->context = 3;

options->change = diff_change;
options->add_remove = diff_addremove;
@ -1227,11 +1228,60 @@ int diff_setup_done(struct diff_options *options) @@ -1227,11 +1228,60 @@ int diff_setup_done(struct diff_options *options)
return 0;
}

int opt_arg(const char *arg, int arg_short, const char *arg_long, int *val)
{
char c, *eq;
int len;

if (*arg != '-')
return 0;
c = *++arg;
if (!c)
return 0;
if (c == arg_short) {
c = *++arg;
if (!c)
return 1;
if (val && isdigit(c)) {
char *end;
int n = strtoul(arg, &end, 10);
if (*end)
return 0;
*val = n;
return 1;
}
return 0;
}
if (c != '-')
return 0;
arg++;
eq = strchr(arg, '=');
if (eq)
len = eq - arg;
else
len = strlen(arg);
if (!len || strncmp(arg, arg_long, len))
return 0;
if (eq) {
int n;
char *end;
if (!isdigit(*++eq))
return 0;
n = strtoul(eq, &end, 10);
if (*end)
return 0;
*val = n;
}
return 1;
}

int diff_opt_parse(struct diff_options *options, const char **av, int ac)
{
const char *arg = av[0];
if (!strcmp(arg, "-p") || !strcmp(arg, "-u"))
options->output_format = DIFF_FORMAT_PATCH;
else if (opt_arg(arg, 'U', "unified", &options->context))
options->output_format = DIFF_FORMAT_PATCH;
else if (!strcmp(arg, "--patch-with-raw")) {
options->output_format = DIFF_FORMAT_PATCH;
options->with_raw = 1;

1
diff.h

@ -32,6 +32,7 @@ struct diff_options { @@ -32,6 +32,7 @@ struct diff_options {
full_index:1,
silent_on_remove:1,
find_copies_harder:1;
int context;
int break_opt;
int detect_rename;
int line_termination;

Loading…
Cancel
Save