summaryrefslogtreecommitdiffstats
path: root/builtin/name-rev.c
diff options
context:
space:
mode:
authorRené Scharfe <l.s.r@web.de>2022-04-22 20:44:40 +0200
committerJunio C Hamano <gitster@pobox.com>2022-04-23 18:46:40 +0200
commit45a14f578e14ef5440d4bf971a9103795dac0c3a (patch)
tree03880ca257044c8a227f7de86422193530284af3 /builtin/name-rev.c
parentname-rev: prefer shorter names over following merges (diff)
downloadgit-45a14f578e14ef5440d4bf971a9103795dac0c3a.tar.xz
git-45a14f578e14ef5440d4bf971a9103795dac0c3a.zip
Revert "name-rev: release unused name strings"
This reverts commit 2d53975488df195e1431c3f90bfb5b60018d5bf6. 3656f84278 (name-rev: prefer shorter names over following merges, 2021-12-04) broke the assumption of 2d53975488 (name-rev: release unused name strings, 2020-02-04) that a better name for a child is a better name for all of its ancestors as well, because it added a penalty for generation > 0. This leads to strings being free(3)'d that are still needed. 079f970971 (name-rev: sort tip names before applying, 2020-02-05) already reduced the number of free(3) calls for the use case that motivated the original patch (name-rev --all in the Chromium repository) from ca. 44000 to 5, and 3656f84278 eliminated even those few. So this revert won't affect name-rev's performance on that particular repo. Reported-by: Thomas Hurst <tom@hur.st> Helped-by: Elijah Newren <newren@gmail.com> Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to '')
-rw-r--r--builtin/name-rev.c21
1 files changed, 5 insertions, 16 deletions
diff --git a/builtin/name-rev.c b/builtin/name-rev.c
index 27f60153a6..228eab4398 100644
--- a/builtin/name-rev.c
+++ b/builtin/name-rev.c
@@ -17,7 +17,7 @@
#define CUTOFF_DATE_SLOP 86400
struct rev_name {
- char *tip_name;
+ const char *tip_name;
timestamp_t taggerdate;
int generation;
int distance;
@@ -34,7 +34,7 @@ static struct commit_rev_name rev_names;
static int is_valid_rev_name(const struct rev_name *name)
{
- return name && (name->generation || name->tip_name);
+ return name && name->tip_name;
}
static struct rev_name *get_commit_rev_name(const struct commit *commit)
@@ -96,20 +96,9 @@ static struct rev_name *create_or_update_name(struct commit *commit,
{
struct rev_name *name = commit_rev_name_at(&rev_names, commit);
- if (is_valid_rev_name(name)) {
- if (!is_better_name(name, taggerdate, generation, distance, from_tag))
- return NULL;
-
- /*
- * This string might still be shared with ancestors
- * (generation > 0). We can release it here regardless,
- * because the new name that has just won will be better
- * for them as well, so name_rev() will replace these
- * stale pointers when it processes the parents.
- */
- if (!name->generation)
- free(name->tip_name);
- }
+ if (is_valid_rev_name(name) &&
+ !is_better_name(name, taggerdate, generation, distance, from_tag))
+ return NULL;
name->taggerdate = taggerdate;
name->generation = generation;