-#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;
-}