Revert clock-skew based attempt to optimize tag --contains traversal
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
188c35e36d
commit
c6d72c4972
1
.gitignore
vendored
1
.gitignore
vendored
@ -132,7 +132,6 @@
|
|||||||
/git-show-branch
|
/git-show-branch
|
||||||
/git-show-index
|
/git-show-index
|
||||||
/git-show-ref
|
/git-show-ref
|
||||||
/git-skew
|
|
||||||
/git-stage
|
/git-stage
|
||||||
/git-stash
|
/git-stash
|
||||||
/git-status
|
/git-status
|
||||||
|
1
Makefile
1
Makefile
@ -725,7 +725,6 @@ BUILTIN_OBJS += builtin/send-pack.o
|
|||||||
BUILTIN_OBJS += builtin/shortlog.o
|
BUILTIN_OBJS += builtin/shortlog.o
|
||||||
BUILTIN_OBJS += builtin/show-branch.o
|
BUILTIN_OBJS += builtin/show-branch.o
|
||||||
BUILTIN_OBJS += builtin/show-ref.o
|
BUILTIN_OBJS += builtin/show-ref.o
|
||||||
BUILTIN_OBJS += builtin/skew.o
|
|
||||||
BUILTIN_OBJS += builtin/stripspace.o
|
BUILTIN_OBJS += builtin/stripspace.o
|
||||||
BUILTIN_OBJS += builtin/symbolic-ref.o
|
BUILTIN_OBJS += builtin/symbolic-ref.o
|
||||||
BUILTIN_OBJS += builtin/tag.o
|
BUILTIN_OBJS += builtin/tag.o
|
||||||
|
@ -141,6 +141,5 @@ extern int cmd_verify_pack(int argc, const char **argv, const char *prefix);
|
|||||||
extern int cmd_show_ref(int argc, const char **argv, const char *prefix);
|
extern int cmd_show_ref(int argc, const char **argv, const char *prefix);
|
||||||
extern int cmd_pack_refs(int argc, const char **argv, const char *prefix);
|
extern int cmd_pack_refs(int argc, const char **argv, const char *prefix);
|
||||||
extern int cmd_replace(int argc, const char **argv, const char *prefix);
|
extern int cmd_replace(int argc, const char **argv, const char *prefix);
|
||||||
extern int cmd_skew(int argc, const char **argv, const char *prefix);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,50 +0,0 @@
|
|||||||
#include "cache.h"
|
|
||||||
#include "commit.h"
|
|
||||||
#include "diff.h"
|
|
||||||
#include "revision.h"
|
|
||||||
|
|
||||||
unsigned long worst_skew = 0;
|
|
||||||
|
|
||||||
static void check_skew_recurse(struct commit *c, unsigned long when)
|
|
||||||
{
|
|
||||||
struct commit_list *p;
|
|
||||||
|
|
||||||
if (c->object.flags & SEEN)
|
|
||||||
return;
|
|
||||||
c->object.flags |= SEEN;
|
|
||||||
|
|
||||||
if (parse_commit(c) < 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (c->date > when) {
|
|
||||||
unsigned long skew = c->date - when;
|
|
||||||
if (skew > worst_skew)
|
|
||||||
worst_skew = skew;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (p = c->parents; p; p = p->next)
|
|
||||||
check_skew_recurse(p->item, c->date < when ? c->date : when);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void check_skew(struct commit *c)
|
|
||||||
{
|
|
||||||
check_skew_recurse(c, time(NULL));
|
|
||||||
}
|
|
||||||
|
|
||||||
int cmd_skew(int argc, const char **argv, const char *prefix) {
|
|
||||||
struct rev_info revs;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
git_config(git_default_config, NULL);
|
|
||||||
init_revisions(&revs, prefix);
|
|
||||||
argc = setup_revisions(argc, argv, &revs, NULL);
|
|
||||||
|
|
||||||
for (i = 0; i < revs.pending.nr; i++) {
|
|
||||||
struct object *o = revs.pending.objects[i].item;
|
|
||||||
if (o->type == OBJ_COMMIT)
|
|
||||||
check_skew((struct commit *)o);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("%lu\n", worst_skew);
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -25,8 +25,6 @@ static const char * const git_tag_usage[] = {
|
|||||||
|
|
||||||
static char signingkey[1000];
|
static char signingkey[1000];
|
||||||
|
|
||||||
static int core_clock_skew = 86400;
|
|
||||||
|
|
||||||
struct tag_filter {
|
struct tag_filter {
|
||||||
const char *pattern;
|
const char *pattern;
|
||||||
int lines;
|
int lines;
|
||||||
@ -44,8 +42,7 @@ static int in_commit_list(const struct commit_list *want, struct commit *c)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int contains_recurse(struct commit *candidate,
|
static int contains_recurse(struct commit *candidate,
|
||||||
const struct commit_list *want,
|
const struct commit_list *want)
|
||||||
unsigned long cutoff)
|
|
||||||
{
|
{
|
||||||
struct commit_list *p;
|
struct commit_list *p;
|
||||||
|
|
||||||
@ -62,13 +59,9 @@ static int contains_recurse(struct commit *candidate,
|
|||||||
if (parse_commit(candidate) < 0)
|
if (parse_commit(candidate) < 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* stop searching if we go too far back in time */
|
|
||||||
if (candidate->date < cutoff)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* Otherwise recurse and mark ourselves for future traversals. */
|
/* Otherwise recurse and mark ourselves for future traversals. */
|
||||||
for (p = candidate->parents; p; p = p->next) {
|
for (p = candidate->parents; p; p = p->next) {
|
||||||
if (contains_recurse(p->item, want, cutoff)) {
|
if (contains_recurse(p->item, want)) {
|
||||||
candidate->object.flags |= TMP_MARK;
|
candidate->object.flags |= TMP_MARK;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -79,22 +72,7 @@ static int contains_recurse(struct commit *candidate,
|
|||||||
|
|
||||||
static int contains(struct commit *candidate, const struct commit_list *want)
|
static int contains(struct commit *candidate, const struct commit_list *want)
|
||||||
{
|
{
|
||||||
unsigned long cutoff = 0;
|
return contains_recurse(candidate, want);
|
||||||
|
|
||||||
if (core_clock_skew >= 0) {
|
|
||||||
const struct commit_list *c;
|
|
||||||
unsigned long min_date = ULONG_MAX;
|
|
||||||
for (c = want; c; c = c->next) {
|
|
||||||
if (parse_commit(c->item) < 0)
|
|
||||||
continue;
|
|
||||||
if (c->item->date < min_date)
|
|
||||||
min_date = c->item->date;
|
|
||||||
}
|
|
||||||
if (min_date > core_clock_skew)
|
|
||||||
cutoff = min_date - core_clock_skew;
|
|
||||||
}
|
|
||||||
|
|
||||||
return contains_recurse(candidate, want, cutoff);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int show_reference(const char *refname, const unsigned char *sha1,
|
static int show_reference(const char *refname, const unsigned char *sha1,
|
||||||
@ -301,14 +279,6 @@ static int git_tag_config(const char *var, const char *value, void *cb)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strcmp(var, "core.clockskew")) {
|
|
||||||
if (!value || !strcmp(value, "none"))
|
|
||||||
core_clock_skew = -1;
|
|
||||||
else
|
|
||||||
core_clock_skew = git_config_int(var, value);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return git_default_config(var, value, cb);
|
return git_default_config(var, value, cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1
git.c
1
git.c
@ -399,7 +399,6 @@ static void handle_internal_command(int argc, const char **argv)
|
|||||||
{ "verify-pack", cmd_verify_pack },
|
{ "verify-pack", cmd_verify_pack },
|
||||||
{ "show-ref", cmd_show_ref, RUN_SETUP },
|
{ "show-ref", cmd_show_ref, RUN_SETUP },
|
||||||
{ "pack-refs", cmd_pack_refs, RUN_SETUP },
|
{ "pack-refs", cmd_pack_refs, RUN_SETUP },
|
||||||
{ "skew", cmd_skew, RUN_SETUP },
|
|
||||||
};
|
};
|
||||||
int i;
|
int i;
|
||||||
static const char ext[] = STRIP_EXTENSION;
|
static const char ext[] = STRIP_EXTENSION;
|
||||||
|
Loading…
Reference in New Issue
Block a user