Add support for filtering based on property exclusion.

For example, allow commands like:

  # exclude issues from context "abc"
  pit list -C abc

  # exclude issues delegated to John Doe
  pit list -P "delgated-to:John Doe"
This commit is contained in:
2022-07-22 10:23:53 -05:00
parent de3ee05680
commit a373af0658
4 changed files with 56 additions and 6 deletions

View File

@ -24,6 +24,7 @@ type
fullMatch*, summaryMatch*: Option[Regex]
hasTags*: seq[string]
properties*: TableRef[string, string]
exclProperties*: TableRef[string, seq[string]]
PitConfig* = ref object
tasksDir*: string
@ -114,7 +115,8 @@ proc initFilter*(): IssueFilter =
fullMatch: none(Regex),
summaryMatch: none(Regex),
hasTags: @[],
properties: newTable[string, string]())
properties: newTable[string, string](),
exclProperties: newTable[string,seq[string]]())
proc propsFilter*(props: TableRef[string, string]): IssueFilter =
if isNil(props):
@ -347,6 +349,12 @@ proc filter*(issues: seq[Issue], filter: IssueFilter): seq[Issue] =
for k,v in filter.properties:
result = result.filterIt(it.hasProp(k) and it[k] == v)
for k,v in filter.exclProperties:
result = result.filter(proc (iss: Issue): bool =
not iss.hasProp(k) or
not v.anyIt(it == iss[k])
)
if filter.completedRange.isSome:
let range = filter.completedRange.get
result = result.filterIt(