{
static const char *external_diff_cmd = NULL;
static int done_preparing = 0;
+ const char *env_diff_opts;
if (done_preparing)
return external_diff_cmd;
*
* GIT_DIFF_OPTS="-c";
*/
- if (gitenv("GIT_EXTERNAL_DIFF"))
- external_diff_cmd = gitenv("GIT_EXTERNAL_DIFF");
+ external_diff_cmd = getenv("GIT_EXTERNAL_DIFF");
/* In case external diff fails... */
- diff_opts = gitenv("GIT_DIFF_OPTS") ? : diff_opts;
+ env_diff_opts = getenv("GIT_DIFF_OPTS");
+ if (env_diff_opts) diff_opts = env_diff_opts;
done_preparing = 1;
return external_diff_cmd;
return 0;
}
-void diff_free_filespec_data(struct diff_filespec *s)
+void diff_free_filespec(struct diff_filespec *s)
{
if (s->should_free)
free(s->data);
else if (s->should_munmap)
munmap(s->data, s->size);
- s->should_free = s->should_munmap = 0;
- s->data = NULL;
+ free(s);
}
static void prep_temp_blob(struct diff_tempfile *temp,
pid_t pid;
int status;
static int atexit_asked = 0;
+ const char *othername;
+ othername = (other? other : name);
if (one && two) {
prepare_temp_file(name, &temp[0], one);
- prepare_temp_file(other ? : name, &temp[1], two);
+ prepare_temp_file(othername, &temp[1], two);
if (! atexit_asked &&
(temp[0].name == temp[0].tmp_path ||
temp[1].name == temp[1].tmp_path)) {
* otherwise we use the built-in one.
*/
if (one && two)
- builtin_diff(name, other ? : name, temp, xfrm_msg,
+ builtin_diff(name, othername, temp, xfrm_msg,
complete_rewrite);
else
printf("* Unmerged path %s\n", name);
scale *= 10;
num = num * 10 + ch - '0';
}
- *cp++;
+ cp++;
}
*cp_p = cp;
void diff_free_filepair(struct diff_filepair *p)
{
- diff_free_filespec_data(p->one);
- diff_free_filespec_data(p->two);
+ diff_free_filespec(p->one);
+ diff_free_filespec(p->two);
free(p);
}
void diff_debug_filespec(struct diff_filespec *s, int x, const char *one)
{
fprintf(stderr, "queue[%d] %s (%s) %s %06o %s\n",
- x, one ? : "",
+ x, one ? one : "",
s->path,
DIFF_FILE_VALID(s) ? "valid" : "invalid",
s->mode,
s->sha1_valid ? sha1_to_hex(s->sha1) : "");
fprintf(stderr, "queue[%d] %s size %lu flags %d\n",
- x, one ? : "",
+ x, one ? one : "",
s->size, s->xfrm_flags);
}
diff_debug_filespec(p->one, i, "one");
diff_debug_filespec(p->two, i, "two");
fprintf(stderr, "score %d, status %c stays %d broken %d\n",
- p->score, p->status ? : '?',
+ p->score, p->status ? p->status : '?',
p->source_stays, p->broken_pair);
}
}
/* See if there is some other filepair that
* copies from the same source as us. If so
- * we are a copy. Otherwise we are a rename.
+ * we are a copy. Otherwise we are either a
+ * copy if the path stays, or a rename if it
+ * does not, but we already handled "stays" case.
*/
for (j = i + 1; j < q->nr; j++) {
pp = q->queue[j];
diff_flush_name(p, line_termination);
break;
}
- }
- for (i = 0; i < q->nr; i++)
diff_free_filepair(q->queue[i]);
+ }
free(q->queue);
q->queue = NULL;
q->nr = q->alloc = 0;