diffdriver --text support options for diff
authorJoey Hess <joeyh@joeyh.name>
Wed, 5 Jul 2023 19:43:29 +0000 (15:43 -0400)
committerJoey Hess <joeyh@joeyh.name>
Wed, 5 Jul 2023 19:43:29 +0000 (15:43 -0400)
Sponsored-by: KDM on Patreon
Command/DiffDriver.hs
doc/git-annex-diffdriver.mdwn
doc/todo/Improving_diffdriver_--text.mdwn

index c63994d8ab7ee0f4b73cbc1b0edafe838f9e1e2d..d4057763ac1262f717da671ca18ac1d714afb248 100644 (file)
@@ -70,7 +70,9 @@ serializeReq req@(Req {}) = map Param
 
 parseReq :: Options -> (Req, Differ)
 parseReq opts
-       | textDiff opts = (mk (restOptions opts), textDiffer)
+       | textDiff opts = case separate (== "--") (restOptions opts) of
+               (_,[]) -> (mk (restOptions opts), textDiffer [])
+               (ps,rest) -> (mk rest, textDiffer ps)
        | otherwise = case separate (== "--") (restOptions opts) of
                (c:ps, l) -> (mk l, externalDiffer c ps)
                ([],_) -> badopts
@@ -117,13 +119,13 @@ fixupReq req@(Req {}) =
 externalDiffer :: String -> [String] -> Differ
 externalDiffer c ps = \req -> boolSystem c (map Param ps ++ serializeReq req )
 
-textDiffer :: Differ
-textDiffer req = do
+textDiffer :: [String] -> Differ
+textDiffer diffopts req = do
        putStrLn ("diff a/" ++ rPath req ++ " b/" ++ rPath req)
        -- diff exits nonzero on difference, so ignore exit status
-       void $ boolSystem "diff"
+       void $ boolSystem "diff" $
                [ Param "-u"
                , Param (rOldFile req)
                , Param (rNewFile req)
-               ]
+               ] ++ map Param diffopts
        return True
index f0915b0de2cbebb606766ff02903895f63c82fb8..c2c2537cf5f2046bb17a9cca79c422313f311afd 100644 (file)
@@ -4,7 +4,7 @@ git-annex diffdriver - git diff driver
 
 # SYNOPSIS
 
-git annex diffdriver --text
+git annex diffdriver --text [-- --opts --]
 
 git annex diffdriver `-- cmd --opts --`
 
@@ -42,6 +42,7 @@ set `GIT_EXTERNAL_DIFF="git-annex diffdriver -- j-c-diff --"`
 # OPTIONS
 
 To diff text files with diff(1), use the "--text" option.
+To pass additional options to diff(1), use eg "--text -- --color --"
 
 To use an external diff driver command, the options must start with
 "--" followed by the diff driver command, its options, and another "--"
index 36423d5aed0dba82490353d71769ad43940b6acf..4ad12ff20c3acc32c5dc3b0b878a2c36be09f25b 100644 (file)
@@ -28,3 +28,5 @@ How about having `git annex diffdriver --text` always using `diff --text`? That
 Thanks again a ton for git-annex, the Tübix2023-Workshop was well appreciated and lots of fun. 👍
 
 Yann
+
+> [[done]] --[[Joey]]