Nguyen Thai Ngoc Duy <> writes:

> On Wed, Sep 26, 2012 at 9:07 PM, Junio C Hamano <> wrote:
>> Nguyễn Thái Ngọc Duy  <> writes:
>>> Both "git log" and "git reflog show" recognize this option.
>>> Signed-off-by: Nguyễn Thái Ngọc Duy <>
>>> ---
>> How well does it interact with --grep and/or --all-match?
> Good point. It currently works like and operator. But people might
> expect to combine them in different ways.

The current commit_match() runs grep_buffer() on commit->buffer.  It
probably makes sense to instead notice from opt that we are running
log with "-g", prepare a temporary strbuf and add in the reflog
message to the string in commit->buffer, and run grep_buffer() on
that temporary strbuf on it.

I personally think it is sufficient ot just reuse --grep on
concatenation of commit->buffer with "Reflog message: checkout:
moving from as/check-ignore to pu".

If you really want to go fancier, you could add --grep-reflog option
that behaves like the existing --author and --committer options to
add "header match" elements to the grep expression, splice a fake
"reflog " header to the string copied from commit->buffer, e.g.
prepare something like this in your temporary strbuf:

    tree b4429f218782165faf101ccb0f4ba1cdd6d1d349
    parent de5cd03876e546d6d264ab28a01daa978f3eae78
    parent b378e5a25658e07e6d0c0f4db79e87cb21de5489
    author Junio C Hamano <> 1348616180 -0700
    committer Junio C Hamano <> 1348616180 -0700
    reflog checkout: moving from as/check-ignore to pu

    Merge branch 'jk/lua-hackery' into pu

    * jk/lua-hackery:
      Minimum compilation fixup
      Makefile: make "lua" a bit more configurable
      add a "lua" pretty format
      add basic lua infrastructure
      pretty: make some commit-parsing helpers more public

that way, you can take advantage of the existing logic used for the
author/committer match that matches only in the commit object

Again, I personally doubt the fancier option is worth it, but the
starting point may look something like this.

 revision.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git c/revision.c w/revision.c
index ae12e11..b0f4d5b 100644
--- c/revision.c
+++ w/revision.c
@@ -2212,8 +2212,20 @@ static int commit_match(struct commit *commit, struct 
rev_info *opt)
        if (!opt->grep_filter.pattern_list && !opt->grep_filter.header_list)
                return 1;
-       return grep_buffer(&opt->grep_filter,
-                          commit->buffer, strlen(commit->buffer));
+       if (opt->reflog_info) {
+               int retval;
+               struct strbuf buf = STRBUF_INIT;
+               strbuf_addf(&buf, "reflog %s\n", opt->reflog_info->message);
+               strbuf_addstr(&buf, commit->buffer);
+               retval = grep_buffer(&opt->grep_filter,
+                                    buf.buf, buf.len);
+               strbuf_release(&buf);
+               return retval;
+       } else {
+               return grep_buffer(&opt->grep_filter,
+                                  commit->buffer, strlen(commit->buffer));
+       }
 static inline int want_ancestry(struct rev_info *revs)
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to
More majordomo info at

Reply via email to