aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2008-06-22 00:27:46 -0700
committerJunio C Hamano <gitster@pobox.com>2008-06-22 00:54:40 -0700
commit51e0d0a67b8d31e92d52e15b577afb079359ec63 (patch)
treed48e6fe34e18dc7e4ad3c98f39be4fcf690a366d
parenta1b32fdc3d1d05395f186bfa06e92174519dab8d (diff)
downloadgit-51e0d0a67b8d31e92d52e15b577afb079359ec63.tar.gz
git-51e0d0a67b8d31e92d52e15b577afb079359ec63.tar.xz
rerere: remove dubious "tail_optimization"
It is dubious if it is cheaper to shift entries repeatedly using memmove() to collect entries that needs to be written out in front of an array than simply marking the entries to be skipped. In addition, the label called this "tail optimization", but this obviously is not what people usually call with that name. Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin-rerere.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/builtin-rerere.c b/builtin-rerere.c
index addc5c73d..0eec1f937 100644
--- a/builtin-rerere.c
+++ b/builtin-rerere.c
@@ -66,8 +66,12 @@ static int write_rr(struct path_list *rr, int out_fd)
{
int i;
for (i = 0; i < rr->nr; i++) {
- const char *path = rr->items[i].path;
- int length = strlen(path) + 1;
+ const char *path;
+ int length;
+ if (!rr->items[i].util)
+ continue;
+ path = rr->items[i].path;
+ length = strlen(path) + 1;
if (write_in_full(out_fd, rr->items[i].util, 40) != 40 ||
write_in_full(out_fd, "\t", 1) != 1 ||
write_in_full(out_fd, path, length) != length)
@@ -319,7 +323,7 @@ static int do_plain_rerere(struct path_list *rr, int fd)
if (!merge(name, path)) {
fprintf(stderr, "Resolved '%s' using "
"previous resolution.\n", path);
- goto tail_optimization;
+ goto mark_resolved;
}
}
@@ -330,13 +334,8 @@ static int do_plain_rerere(struct path_list *rr, int fd)
fprintf(stderr, "Recorded resolution for '%s'.\n", path);
copy_file(rr_path(name, "postimage"), path, 0666);
-tail_optimization:
- if (i < rr->nr - 1)
- memmove(rr->items + i,
- rr->items + i + 1,
- sizeof(rr->items[0]) * (rr->nr - i - 1));
- rr->nr--;
- i--;
+ mark_resolved:
+ rr->items[i].util = NULL;
}
return write_rr(rr, fd);