}
static void combine_diff(const unsigned char *parent, mmfile_t *result_file,
- struct sline *sline, int cnt, int n, int num_parent)
+ struct sline *sline, unsigned int cnt, int n,
+ int num_parent)
{
unsigned int p_lno, lno;
unsigned long nmask = (1UL << n);
unsigned long mark,
unsigned long i,
unsigned long cnt,
- int uninteresting)
+ int look_for_uninteresting)
{
/* We have examined up to i-1 and are about to look at i.
* Find next interesting or uninteresting line. Here,
* that are surrounded by interesting() ones.
*/
while (i <= cnt)
- if (uninteresting
+ if (look_for_uninteresting
? !(sline[i].flag & mark)
: (sline[i].flag & mark))
return i;
unsigned long i;
/* Two groups of interesting lines may have a short gap of
- * unintersting lines. Connect such groups to give them a
+ * uninteresting lines. Connect such groups to give them a
* bit of context.
*
* We first start from what the interesting() function says,
return has_interesting;
}
-static void show_parent_lno(struct sline *sline, unsigned long l0, unsigned long l1, unsigned long cnt, int n)
+static void show_parent_lno(struct sline *sline, unsigned long l0, unsigned long l1, int n)
{
l0 = sline[l0].p_lno[n];
l1 = sline[l1].p_lno[n];
rlines--; /* pointing at the last delete hunk */
for (i = 0; i <= num_parent; i++) putchar(combine_marker);
for (i = 0; i < num_parent; i++)
- show_parent_lno(sline, lno, hunk_end, cnt, i);
+ show_parent_lno(sline, lno, hunk_end, i);
printf(" +%lu,%lu ", lno+1, rlines);
for (i = 0; i <= num_parent; i++) putchar(combine_marker);
putchar('\n');
if (0 <= (fd = open(elem->path, O_RDONLY)) &&
!fstat(fd, &st)) {
int len = st.st_size;
- int cnt = 0;
+ int sz = 0;
elem->mode = canon_mode(st.st_mode);
result_size = len;
result = xmalloc(len + 1);
- while (cnt < len) {
- int done = xread(fd, result+cnt, len-cnt);
+ while (sz < len) {
+ int done = xread(fd, result+sz, len-sz);
if (done == 0)
break;
if (done < 0)
die("read error '%s'", elem->path);
- cnt += done;
+ sz += done;
}
result[len] = 0;
}
/* deleted file */
result_size = 0;
elem->mode = 0;
- result = xmalloc(1);
- result[0] = 0;
+ result = xcalloc(1, 1);
}
if (0 <= fd)
close(fd);
}
- for (cnt = 0, cp = result; cp - result < result_size; cp++) {
+ for (cnt = 0, cp = result; cp < result + result_size; cp++) {
if (*cp == '\n')
cnt++;
}
sline[lno].lost_tail = &sline[lno].lost_head;
sline[lno].flag = 0;
}
- for (lno = 0, cp = result; cp - result < result_size; cp++) {
+ for (lno = 0, cp = result; cp < result + result_size; cp++) {
if (*cp == '\n') {
sline[lno].len = cp - sline[lno].bol;
lno++;
}
free(result);
- for (i = 0; i < cnt; i++) {
- if (sline[i].lost_head) {
- struct lline *ll = sline[i].lost_head;
+ for (lno = 0; lno < cnt; lno++) {
+ if (sline[lno].lost_head) {
+ struct lline *ll = sline[lno].lost_head;
while (ll) {
struct lline *tmp = ll;
ll = ll->next;
struct diff_options *opt = &rev->diffopt;
struct diff_options diffopts;
struct combine_diff_path *p, *paths = NULL;
- int i, num_paths;
+ int i, num_paths, needsep, show_log_first;
diffopts = *opt;
- diffopts.output_format &= ~(DIFF_FORMAT_RAW | DIFF_FORMAT_DIFFSTAT);
+ diffopts.output_format = DIFF_FORMAT_NO_OUTPUT;
diffopts.recursive = 1;
+ show_log_first = !!rev->loginfo;
+ needsep = 0;
/* find set of paths that everybody touches */
for (i = 0; i < num_parent; i++) {
/* show stat against the first parent even
* when doing combined diff.
*/
if (i == 0 && opt->output_format & DIFF_FORMAT_DIFFSTAT)
- diffopts.output_format |= DIFF_FORMAT_DIFFSTAT;
+ diffopts.output_format = DIFF_FORMAT_DIFFSTAT;
else
- diffopts.output_format |= DIFF_FORMAT_NO_OUTPUT;
+ diffopts.output_format = DIFF_FORMAT_NO_OUTPUT;
diff_tree_sha1(parent[i], sha1, "", &diffopts);
diffcore_std(&diffopts);
paths = intersect_paths(paths, i, num_parent);
- if (opt->output_format & DIFF_FORMAT_DIFFSTAT && rev->loginfo)
+ if (show_log_first && i == 0) {
show_log(rev, opt->msg_sep);
-
+ if (rev->verbose_header && opt->output_format)
+ putchar(opt->line_termination);
+ }
diff_flush(&diffopts);
- if (opt->output_format & DIFF_FORMAT_DIFFSTAT)
- putchar('\n');
}
/* find out surviving paths */
if (p->len)
show_raw_diff(p, num_parent, rev);
}
- putchar(opt->line_termination);
+ needsep = 1;
}
+ else if (opt->output_format & DIFF_FORMAT_DIFFSTAT)
+ needsep = 1;
if (opt->output_format & DIFF_FORMAT_PATCH) {
+ if (needsep)
+ putchar(opt->line_termination);
for (p = paths; p; p = p->next) {
if (p->len)
show_patch_diff(p, num_parent, dense,