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>
This commit is contained in:
parent
931233bc66
commit
7bd9641df5
@ -1545,6 +1545,25 @@ static const char *parse_loc(const char *spec,
|
|||||||
regex_t regexp;
|
regex_t regexp;
|
||||||
regmatch_t match[1];
|
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);
|
num = strtol(spec, &term, 10);
|
||||||
if (term != spec) {
|
if (term != spec) {
|
||||||
*ret = num;
|
*ret = num;
|
||||||
|
Loading…
Reference in New Issue
Block a user