aboutsummaryrefslogtreecommitdiff
path: root/Opts.hs
diff options
context:
space:
mode:
authorMirek Kratochvil <exa.exa@gmail.com>2025-07-18 15:21:08 +0200
committerMirek Kratochvil <exa.exa@gmail.com>2025-07-18 15:21:08 +0200
commitcb5257b285e162127e7d2def86e6ae47435650db (patch)
treebbffa083d4dfde28785c41bf5a73c3096e8174c7 /Opts.hs
parent56cf7c69a948ee04100b8363206b51d680bc4664 (diff)
downloadwerge-cb5257b285e162127e7d2def86e6ae47435650db.tar.gz
werge-cb5257b285e162127e7d2def86e6ae47435650db.tar.bz2
make diff+patch work together, document
Diffstat (limited to 'Opts.hs')
-rw-r--r--Opts.hs60
1 files changed, 48 insertions, 12 deletions
diff --git a/Opts.hs b/Opts.hs
index dcb3330..1c321aa 100644
--- a/Opts.hs
+++ b/Opts.hs
@@ -224,9 +224,15 @@ data Command
, gmDoAdd :: Bool
}
| CmdDiff
- { diffOld :: FilePath
- , diffNew :: FilePath
- }
+ { diffOld :: FilePath
+ , diffYour :: FilePath
+ , diffUnified :: Maybe Int
+ }
+ | CmdPatch
+ { patchMy :: FilePath
+ }
+ | CmdBreak
+ | CmdGlue
deriving (Show)
cmdDiff3 :: Parser Command
@@ -254,12 +260,11 @@ cmdGitMerge = do
]
gmDoAdd <-
asum
- [ flag'
- True
- (long "add"
- <> short 'a'
- <> help "Run `git add' for fully merged files")
- , flag' False (long "no-add" <> help "Prevent running `git add'")
+ [ flag' True
+ $ long "add"
+ <> short 'a'
+ <> help "Run `git add' for fully merged files"
+ , flag' False $ long "no-add" <> help "Prevent running `git add'"
, pure False
]
pure CmdGitMerge {..}
@@ -267,9 +272,31 @@ cmdGitMerge = do
cmdDiff :: Parser Command
cmdDiff = do
diffOld <- strArgument $ metavar "OLDFILE" <> help "Original file version"
- diffNew <- strArgument $ metavar "NEWFILE" <> help "File version with changes"
+ diffYour <-
+ strArgument $ metavar "YOURFILE" <> help "File version with changes"
+ diffUnified <-
+ asum
+ [ flag' (Just 20)
+ $ long "unified"
+ <> short 'u'
+ <> help
+ "Produce unified-diff-like output for `patch' with default context size (20)"
+ , fmap Just . option auto
+ $ long "unified-size"
+ <> short 'U'
+ <> help "Produce unified diff with this context size"
+ , flag Nothing Nothing
+ $ long "merge"
+ <> short 'm'
+ <> help "Highlight the differences as with `merge' (default)"
+ ]
pure CmdDiff {..}
+cmdPatch :: Parser Command
+cmdPatch = do
+ patchMy <- strArgument $ metavar "MYFILE" <> help "File to be modified"
+ pure CmdPatch {..}
+
-- TODO have some option to output the (partially merged) my/old/your files so
-- that folks can continue with external program or so (such as meld)
cmd :: Parser Command
@@ -284,12 +311,21 @@ cmd =
$ progDesc "Automerge unmerged files in git conflict"
, command "diff"
$ info cmdDiff
- $ progDesc "Highlight differences between two files"
+ $ progDesc "Find differences between two files"
+ , command "patch"
+ $ info cmdPatch
+ $ progDesc "Apply a patch from `diff' to file"
+ , command "break"
+ $ info (pure CmdBreak)
+ $ progDesc "Break text to tokens"
+ , command "glue"
+ $ info (pure CmdGlue)
+ $ progDesc "Glue tokens back to text"
]
parseOpts :: IO (Config, Command)
parseOpts =
- customExecParser (prefs helpShowGlobals)
+ customExecParser (prefs $ helpShowGlobals <> subparserInline)
$ info
(liftA2 (,) config cmd
<**> helper