diff options
author | Junio C Hamano <junkio@cox.net> | 2006-11-07 16:20:02 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-11-07 16:24:37 -0800 |
commit | 7bd9641df5b7cca91b21bfdc587962c59700786c (patch) | |
tree | 9d42e451612128d106190453e1b8250a21b4100b | |
parent | git-pickaxe: -L /regexp/,/regexp/ (diff) | |
download | tgif-7bd9641df5b7cca91b21bfdc587962c59700786c.tar.xz |
git-pickaxe: allow "-L <something>,+N"
With this,
git pickaxe -L '/--progress/,+20' v1.4.0 -- pack-objects.c
gives you 20 lines starting from the first occurrence of
'--progress' in pack-objects, digging from v1.4.0 version.
You can also say
git pickaxe -L '/--progress/,-5' v1.4.0 -- pack-objects.c
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r-- | builtin-pickaxe.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/builtin-pickaxe.c b/builtin-pickaxe.c index 673185f96d..64999f3577 100644 --- a/builtin-pickaxe.c +++ b/builtin-pickaxe.c @@ -1545,6 +1545,25 @@ static const char *parse_loc(const char *spec, regex_t regexp; regmatch_t match[1]; + /* Allow "-L <something>,+20" to mean starting at <something> + * for 20 lines, or "-L <something>,-5" for 5 lines ending at + * <something>. + */ + if (1 < begin && (spec[0] == '+' || spec[0] == '-')) { + num = strtol(spec + 1, &term, 10); + if (term != spec + 1) { + if (spec[0] == '-') + num = 0 - num; + if (0 < num) + *ret = begin + num - 2; + else if (!num) + *ret = begin; + else + *ret = begin + num; + return term; + } + return spec; + } num = strtol(spec, &term, 10); if (term != spec) { *ret = num; |