--metadata lexicographical comparisons
Change --metadata comparisons < > <= and >= to fall back to lexicographical comparisons when one or both values being compared are not numbers. Sponsored-by: Erik Bjäreholt on Patreon
This commit is contained in:
parent
69499b4452
commit
aa6919737c
4 changed files with 27 additions and 11 deletions
|
@ -104,15 +104,17 @@ parseMetaDataMatcher p = (,)
|
|||
(f, op_v) = break (`elem` "=<>") p
|
||||
matcher = case op_v of
|
||||
('=':v) -> checkglob v
|
||||
('<':'=':v) -> checkcmp (<=) v
|
||||
('<':v) -> checkcmp (<) v
|
||||
('>':'=':v) -> checkcmp (>=) v
|
||||
('>':v) -> checkcmp (>) v
|
||||
('<':'=':v) -> checkcmp (<=) (<=) v
|
||||
('<':v) -> checkcmp (<) (<) v
|
||||
('>':'=':v) -> checkcmp (>=) (>=) v
|
||||
('>':v) -> checkcmp (>) (>) v
|
||||
_ -> checkglob ""
|
||||
checkglob v =
|
||||
let cglob = compileGlob v CaseInsensative (GlobFilePath False)
|
||||
in matchGlob cglob . decodeBS . fromMetaValue
|
||||
checkcmp cmp v v' = case (doubleval v, doubleval (decodeBS (fromMetaValue v'))) of
|
||||
(Just d, Just d') -> d' `cmp` d
|
||||
_ -> False
|
||||
checkcmp cmp cmp' v mv' =
|
||||
let v' = decodeBS (fromMetaValue mv')
|
||||
in case (doubleval v, doubleval v') of
|
||||
(Just d, Just d') -> d' `cmp` d
|
||||
_ -> v' `cmp'` v
|
||||
doubleval v = readish v :: Maybe Double
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue