Re: Git log: filtering by date and by lines do not work together
- From
René Scharfe <l.s.r@web.de>
- Date
- Jul 4, 2020, 12:56 UTC
- Message-ID
- <2c4a6657-1a47-cfbb-21cd-04f131d2ed49@web.de>
- In-Reply-To
- <CAD6JL5SRvB_yXcqJ5HGADQaGtZAiKrtd447vtHLSagJqNGPChA@mail.gmail.com>
Am 03.07.20 um 16:14 schrieb Мария Долгополова:
Show 31 quoted lines
> Hi! I would like to report the bug. > > I want to get commits that change specific lines in a specific file > and were made before a specific date. > > Steps: > 1) I apply filtering by date: --before="2016-11-18" > Result is in the picture FilteringByDate.png. Commit > 570778797effd69bd4536c51125b7d2e8f654c08 is presented. > > 2) I apply filtering by lines: > -L33,34:src/main/java/org/toradocu/translator/Subject.java > Result is in the picture FilteringByLines.png . Commit > 570778797effd69bd4536c51125b7d2e8f654c08 is presented. > > 3) Finally, I apply filtering by lines and by date: > --before="2016-11-18" > -L33,34:src/main/java/org/toradocu/translator/Subject.java > Result is in the picture FilteringByDatesAndLines.png . Commit > 570778797effd69bd4536c51125b7d2e8f654c08 is NOT presented. > > Expected Result: the commit is presented in filter 1 and in filter 2, > so it must be presented in filter “1 AND 2” > > Actual Result: the commit is NOT presented in filter “1 AND 2” > > Environment: git version 2.27.0.windows.1 > > I beg you to provide me with a workaround. I am doing research work > on analyzing commits in open source projects. Therefore, this > functionality is very important to me.
You could do the date filtering on the output of git log, e.g.:
git log -L33,34:src/main/java/org/toradocu/translator/Subject.java --date=short --color=always |
awk -v before=2016-11-18 '
/^[^ ]*commit/ {state=1; header=""}
/^[^ ]*Date:/ {if ($2 <= before) {state=2; printf "%s", header} else {state=0}}
state == 1 {header = header $0 ORS}
state == 2 {print}
'This command is a bit unwieldy, so you might want to put the AWK script into a file, then you could use it like this:
git log -L33,34:src/main/java/org/toradocu/translator/Subject.java --date=short --color=always | awk -v before=2016-11-18 -f gitlogbefore.awk
René