Skip to content

Commit

Permalink
combine-diff: combine_diff_path.len is not needed anymore
Browse files Browse the repository at this point in the history
The field was used in order to speed-up name comparison and also to
mark removed paths by setting it to 0.

Because the updated code does significantly less strcmp and also
just removes paths from the list and free right after we know a path
will not be needed, it is not needed anymore.

Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Kirill Smelkov authored and Junio C Hamano committed Feb 24, 2014
1 parent 8518ff8 commit af82c78
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 24 deletions.
30 changes: 9 additions & 21 deletions combine-diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ static struct combine_diff_path *intersect_paths(struct combine_diff_path *curr,
p->path = (char *) &(p->parent[num_parent]);
memcpy(p->path, path, len);
p->path[len] = 0;
p->len = len;
p->next = NULL;
memset(p->parent, 0,
sizeof(p->parent[0]) * num_parent);
Expand Down Expand Up @@ -1234,8 +1233,6 @@ void show_combined_diff(struct combine_diff_path *p,
{
struct diff_options *opt = &rev->diffopt;

if (!p->len)
return;
if (opt->output_format & (DIFF_FORMAT_RAW |
DIFF_FORMAT_NAME |
DIFF_FORMAT_NAME_STATUS))
Expand Down Expand Up @@ -1299,11 +1296,8 @@ static void handle_combined_callback(struct diff_options *opt,
q.queue = xcalloc(num_paths, sizeof(struct diff_filepair *));
q.alloc = num_paths;
q.nr = num_paths;
for (i = 0, p = paths; p; p = p->next) {
if (!p->len)
continue;
for (i = 0, p = paths; p; p = p->next)
q.queue[i++] = combined_pair(p, num_parent);
}
opt->format_callback(&q, opt, opt->format_callback_data);
for (i = 0; i < num_paths; i++)
free_combined_pair(q.queue[i]);
Expand Down Expand Up @@ -1369,11 +1363,9 @@ void diff_tree_combined(const unsigned char *sha1,
diff_flush(&diffopts);
}

/* find out surviving paths */
for (num_paths = 0, p = paths; p; p = p->next) {
if (p->len)
num_paths++;
}
/* find out number of surviving paths */
for (num_paths = 0, p = paths; p; p = p->next)
num_paths++;

/* order paths according to diffcore_order */
if (opt->orderfile && num_paths) {
Expand All @@ -1399,10 +1391,8 @@ void diff_tree_combined(const unsigned char *sha1,
if (opt->output_format & (DIFF_FORMAT_RAW |
DIFF_FORMAT_NAME |
DIFF_FORMAT_NAME_STATUS)) {
for (p = paths; p; p = p->next) {
if (p->len)
show_raw_diff(p, num_parent, rev);
}
for (p = paths; p; p = p->next)
show_raw_diff(p, num_parent, rev);
needsep = 1;
}
else if (opt->output_format &
Expand All @@ -1415,11 +1405,9 @@ void diff_tree_combined(const unsigned char *sha1,
if (needsep)
printf("%s%c", diff_line_prefix(opt),
opt->line_termination);
for (p = paths; p; p = p->next) {
if (p->len)
show_patch_diff(p, num_parent, dense,
0, rev);
}
for (p = paths; p; p = p->next)
show_patch_diff(p, num_parent, dense,
0, rev);
}
}

Expand Down
2 changes: 0 additions & 2 deletions diff-lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,6 @@ int run_diff_files(struct rev_info *revs, unsigned int option)
dpath->path = (char *) &(dpath->parent[5]);

dpath->next = NULL;
dpath->len = path_len;
memcpy(dpath->path, ce->name, path_len);
dpath->path[path_len] = '\0';
hashclr(dpath->sha1);
Expand Down Expand Up @@ -326,7 +325,6 @@ static int show_modified(struct rev_info *revs,
p = xmalloc(combine_diff_path_size(2, pathlen));
p->path = (char *) &p->parent[2];
p->next = NULL;
p->len = pathlen;
memcpy(p->path, new->name, pathlen);
p->path[pathlen] = 0;
p->mode = mode;
Expand Down
1 change: 0 additions & 1 deletion diff.h
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,6 @@ extern int diff_root_tree_sha1(const unsigned char *new, const char *base,

struct combine_diff_path {
struct combine_diff_path *next;
int len;
char *path;
unsigned int mode;
unsigned char sha1[20];
Expand Down

0 comments on commit af82c78

Please sign in to comment.