Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-11-08 03:20:02 +0300
committerJunio C Hamano <junkio@cox.net>2006-11-08 03:24:37 +0300
commit7bd9641df5b7cca91b21bfdc587962c59700786c (patch)
tree9d42e451612128d106190453e1b8250a21b4100b
parent931233bc666b40de039d50f82f12279c94e5e5f0 (diff)
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.c19
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;