• Junio C Hamano's avatar
    git log/diff: add -G<regexp> that greps in the patch text · f506b8e8
    Junio C Hamano authored
    Teach "-G<regexp>" that is similar to "-S<regexp> --pickaxe-regexp" to the
    "git diff" family of commands.  This limits the diff queue to filepairs
    whose patch text actually has an added or a deleted line that matches the
    given regexp.  Unlike "-S<regexp>", changing other parts of the line that
    has a substring that matches the given regexp IS counted as a change, as
    such a change would appear as one deletion followed by one addition in a
    patch text.
    Unlike -S (pickaxe) that is intended to be used to quickly detect a commit
    that changes the number of occurrences of hits between the preimage and
    the postimage to serve as a part of larger toolchain, this is meant to be
    used as the top-level Porcelain feature.
    The implementation unfortunately has to run "diff" twice if you are
    running "log" family of commands to produce patches in the final output
    (e.g. "git log -p" or "git format-patch").  I think we _could_ cache the
    result in-core if we wanted to, but that would require larger surgery to
    the diffcore machinery (i.e. adding an extra pointer in the filepair
    structure to keep a pointer to a strbuf around, stuff the textual diff to
    the strbuf inside diffgrep_consume(), and make use of it in later stages
    when it is available) and it may not be worth it.
    Signed-off-by: default avatarJunio C Hamano <[email protected]>
diffcore-pickaxe.c 6.81 KB