[PATCH] Teach revision walker about reflog ranges
From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:44:01
Subsystem:
the rest · Maintainer:
Linus Torvalds
Now you can ask for a revision range
master@{2.weeks.ago..1.day.ago}
or even something like
HEAD@{20..yesterday}
It does this by allocating an strbuf to construct the second ref string
(in the above examples "master@{1.day.ago}" and "HEAD@{yesterday}",
respectively), which is never free()d.
Signed-off-by: Johannes Schindelin <redacted>
---
Another nail in the coffin of libification, but for the common
one-shot command, it is the easiest way to support reflog ranges.
revision.c | 14 ++++++++++++++
1 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/revision.c b/revision.c
index 6e85aaa..3e7a834 100644
--- a/revision.c
+++ b/revision.c@@ -794,10 +794,24 @@ int handle_revision_arg(const char *arg, struct rev_info *revs, const char *this = arg; int symmetric = *next == '.'; unsigned int flags_exclude = flags ^ UNINTERESTING; + const char *at; *dotdot = 0; next += symmetric; + at = strstr(arg, "@{"); + if (at && !strchr(at + 2, '}')) { + struct strbuf buf; + strcpy(dotdot, "}"); + strbuf_init(&buf, 0); + strbuf_insert(&buf, 0, arg, at + 2 - arg); + if (!strcmp(next, "}")) + strbuf_addch(&buf, '0'); + strbuf_addstr(&buf, next); + /* we will not free() this buffer */ + next = buf.buf; + } + if (!*next) next = "HEAD"; if (dotdot == arg)
--
1.5.4.rc2.5.g44b6d-dirty