diff options
author | Junio C Hamano <junkio@cox.net> | 2006-12-25 03:27:41 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-12-25 03:27:41 -0800 |
commit | d4ada4876d5ab7b271857917231f6006f2160bca (patch) | |
tree | dc69a89700ed2ac8889145bf5ba859cd6241f0c7 /revision.c | |
parent | 6f38e0372266b5d674972e7039f8bd4156589558 (diff) | |
parent | d5db6c9ee79cfa1794d75847b8376430f08b203f (diff) | |
download | git-d4ada4876d5ab7b271857917231f6006f2160bca.tar.gz git-d4ada4876d5ab7b271857917231f6006f2160bca.tar.xz |
Merge branch 'jc/skip-count'
* jc/skip-count:
revision: --skip=<n>
Diffstat (limited to 'revision.c')
-rw-r--r-- | revision.c | 46 |
1 files changed, 32 insertions, 14 deletions
diff --git a/revision.c b/revision.c index 4dae5342e..e7eccd918 100644 --- a/revision.c +++ b/revision.c @@ -526,6 +526,7 @@ void init_revisions(struct rev_info *revs, const char *prefix) revs->prefix = prefix; revs->max_age = -1; revs->min_age = -1; + revs->skip_count = -1; revs->max_count = -1; revs->prune_fn = NULL; @@ -762,6 +763,10 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch revs->max_count = atoi(arg + 12); continue; } + if (!strncmp(arg, "--skip=", 7)) { + revs->skip_count = atoi(arg + 7); + continue; + } /* accept -<digit>, like traditional "head" */ if ((*arg == '-') && isdigit(arg[1])) { revs->max_count = atoi(arg + 1); @@ -1129,23 +1134,11 @@ static int commit_match(struct commit *commit, struct rev_info *opt) commit->buffer, strlen(commit->buffer)); } -struct commit *get_revision(struct rev_info *revs) +static struct commit *get_revision_1(struct rev_info *revs) { - struct commit_list *list = revs->commits; - - if (!list) + if (!revs->commits) return NULL; - /* Check the max_count ... */ - switch (revs->max_count) { - case -1: - break; - case 0: - return NULL; - default: - revs->max_count--; - } - do { struct commit_list *entry = revs->commits; struct commit *commit = entry->item; @@ -1212,3 +1205,28 @@ struct commit *get_revision(struct rev_info *revs) } while (revs->commits); return NULL; } + +struct commit *get_revision(struct rev_info *revs) +{ + struct commit *c = NULL; + + if (0 < revs->skip_count) { + while ((c = get_revision_1(revs)) != NULL) { + if (revs->skip_count-- <= 0) + break; + } + } + + /* Check the max_count ... */ + switch (revs->max_count) { + case -1: + break; + case 0: + return NULL; + default: + revs->max_count--; + } + if (c) + return c; + return get_revision_1(revs); +} |