Filter expression
FinalGit support a powerful filter expression to filter commits.
Usage
When you input $
in the commit filter. Then you will use the filter expression.
here is some examples:
expression | meaning |
---|---|
since=2020-01-02 | get commits since 2020-01-02 |
HEAD~1 | commits before HEAD~1 |
123456 234567 | pick commit 123456 and 234567 |
author=cathaysia | commits with author is cathaysia |
123456..234567 | commits in range [123456, 234567) |
reference
// ex: set ft=antlr:
// https://git-scm.com/docs/revisions#Documentation/revisions.txt
// https://git-scm.com/docs/git-rev-list/zh_HANS-CN
grammar reversion;
import reversionRules;
@header {
// @ts-ignore
}
reversion: rules EOF;
rules: rev # revSingle
| rev_expression # revExpression
| 'since' '=' date # revSince
| 'until' '=' date # revUntil
| 'after' '=' date # revAfter
| 'skip' '=' DIGIT # revSkip
| 'before' '=' date # revBefore
| 'max-age' '=' date # revMaxAge
| 'min-age' '=' date # revMinAge
| 'author' '=' ANY+ # revAuthor
| 'commiter' '=' ANY+ # revCommiter
| 'grep' '=' ANY+ # revGrep
| 'exclude' '=' rules # revExclude
| rules '..' # revRangeAfter1
| rules '...' # revRangeAfter2
| rules (' ' rules)+ # revMulti
| rules '..' rules # revRange1
| rules '...' rules # revRange2
| '..' rules # revRangeBefore1
| '...' rules # revRangeBefore2
;
rev: refname # refName
| OID # refOID
| '^' rev # refExclude
;
refname: 'HEAD'
| '@'
;
rev_expression: rev rev_direction rev_position # exprPos
| rev rev_direction DIGIT # exprDigit
| ':/' (ANY | ' ')+ # exprText
| rev ':' ANY+ # exprRevText
| ':' DIGIT ':' ANY+ # exprDigitText
;
rev_position: '@' # posHead
| '!' # posExclude
| SIGNED_DIGIT # posNeg
| '-' # posReverse
| '{' ref_anchor? '}' # posAnchor
;
rev_direction: '@'
| '^'
| '~'
;
ref_anchor: date # anchorDate
| SIGNED_DIGIT # anchorSignedDigit
| DIGIT # anchorDigit
| '/' ANY+? # anchorText
| iso_8601 # anchorIso
;
date: 'yesterday' # dateYesterday
| 'today' # dateToday
| iso_8601 # dateIso8601
| time_point (' ' time_point)* ' ' time_direction # dateTimePoint
;
time_point: time_value ' ' time_unit # timePointValue
| DIGIT ' ' time_unit # timePointDigit
;
time_value: 'one'
| 'two'
| 'three'
| 'four'
| 'five'
| 'six'
| 'seven'
| 'eight'
| 'nine'
| 'ten'
;
time_unit: 'second'
| 'minute'
| 'hour'
| 'day'
| 'week'
| 'month'
| 'year'
| 'seconds'
| 'minutes'
| 'hours'
| 'days'
| 'weeks'
| 'months'
| 'years'
;
time_direction: 'ago' | 'after' ;
// iso 8061
iso_8601: ISO_DATE (' ' ISO_TIME IS_TIME_POSTFIX?)?
;