;shake: use --dry-run instead of changelogs-dry

This commit is contained in:
Simon Michael 2020-09-07 10:22:56 -07:00
parent 00e12c626c
commit 731cda3f65

View File

@ -62,27 +62,25 @@ usage =
let scriptname = "Shake" in replaceRe [re|/Shake|] ('/':scriptname) $ let scriptname = "Shake" in replaceRe [re|/Shake|] ('/':scriptname) $
unlines unlines
---------------------------------------79-------------------------------------- ---------------------------------------79--------------------------------------
["hledger developer scripts that didn't fit in Makefile. See also: make help" ["hledger developer scripts. See also: make help"
,"Usage:" ,"Usage:"
,"./Shake.hs [CMD [ARGS]] run CMD, compiling this script first if needed" ,"./Shake.hs [CMD [ARGS]] run CMD, compiling this script first if needed"
,"./Shake [CMD [ARGS]] run CMD, using the compiled version of this script" ,"./Shake [CMD [ARGS]] run CMD, using the compiled version of this script"
,"./Shake [help] show this help" ,"./Shake [help] show this help"
,"./Shake commandtxts build plain text docs for hledger CLI command help" ,"./Shake setversion [VER] [PKGS]"
,"./Shake manuals build txt/man/info/web manuals for all packages" ," update version strings from */.version (or VER)"
,"./Shake webmanuals build web manuals (in site/) for all packages" ,"./Shake commandtxts update hledger CLI commands' usage texts"
-- TODO: commit, show commit ,"./Shake manuals update txt/man/info/web manuals for all packages"
,"./Shake setversion [VER] [PKGS] set version strings from */.version (or VER)" ,"./Shake webmanuals update just the web manuals"
-- TODO: commit, show commit ,"./Shake changelogs [--dry-run]"
,"./Shake changelogs[-dry] add new commits, headings to */CHANGES.md" ," add new commits & headings to */CHANGES.md"
-- ,"./Shake [PKG/]CHANGES.md[-dry] update (or preview) one changelog" ,"./Shake cabalfiles update */*.cabal from */package.yaml"
,"./Shake cabalfiles update .cabal files from */package.yaml"
,"./Shake build [PKGS] build hledger packages and their embedded docs" ,"./Shake build [PKGS] build hledger packages and their embedded docs"
,"./Shake clean clean generated help texts, manuals" ,"./Shake clean remove generated texts, manuals"
,"./Shake Clean also clean object files, Shake's cache" ,"./Shake Clean also remove object files, Shake's cache"
,"./Shake FILE build any individual file" ,"./Shake FILE build any individual file"
,"./Shake --help list Shake options (--color, --rebuild, ...)" ,"./Shake --help list Shake's options (--color, --rebuild, etc.)"
,"" ,"Keep Shake option arguments adjacent to their flag."
,"Option arguments should be adjacent to their flag."
] ]
-- groff = "groff -c" ++ " -Wall" -- see "groff" below -- groff = "groff -c" ++ " -Wall" -- see "groff" below
@ -128,7 +126,10 @@ main = do
-- Option arguments should be kept adjacent to their flag or this will go wrong. -- Option arguments should be kept adjacent to their flag or this will go wrong.
(opts, args) <- partition ("-" `isPrefixOf`) <$> getArgs (opts, args) <- partition ("-" `isPrefixOf`) <$> getArgs
let let
ruleoptnames = [ "--commit" ] ruleoptnames = [
"--commit", "-c"
,"--dry-run", "--dry", "-n"
]
(ruleopts, shakeopts) = partition (`elem` ruleoptnames) opts (ruleopts, shakeopts) = partition (`elem` ruleoptnames) opts
(shakearg, ruleargs) = splitAt 1 args (shakearg, ruleargs) = splitAt 1 args
shakeargs = shakeopts ++ shakearg shakeargs = shakeopts ++ shakearg
@ -143,7 +144,7 @@ main = do
want ["help"] want ["help"]
phony "help" $ liftIO $ putStrLn usage phony "help" $ liftIO $ putStr usage
-- NAMES, FILES, URIS.. -- NAMES, FILES, URIS..
@ -419,10 +420,6 @@ main = do
-- update all changelogs with latest commits -- update all changelogs with latest commits
phony "changelogs" $ need changelogs phony "changelogs" $ need changelogs
phony "changelogs-dry" $ need $ map (++"-dry") changelogs
-- show the changelogs updates that would be written
-- phony "changelogs-dry" $ need changelogsdry
-- [PKG/]CHANGES.md -- [PKG/]CHANGES.md
-- Add any new non-boring commits to the specified changelog, in -- Add any new non-boring commits to the specified changelog, in
@ -444,15 +441,12 @@ main = do
-- package has a release version set, otherwise a dev heading -- package has a release version set, otherwise a dev heading
-- with the current HEAD revision). -- with the current HEAD revision).
-- --
-- [PKG/]CHANGES.md-dry -- With --dry-run, print new content to stdout instead of
-- When invoked with -dry suffix, don't update the changelog; -- updating the changelog.
-- just print the items to stdout.
-- --
phonys (\out' -> if phonys (\out -> if
| not $ out' `elem` (changelogs ++ map (++"-dry") changelogs) -> Nothing | not $ out `elem` changelogs -> Nothing
| otherwise -> Just $ do | otherwise -> Just $ do
let (out, dryrun) | "-dry" `isSuffixOf` out' = (take (length out' - 4) out', True)
| otherwise = (out', False)
oldlines <- liftIO $ lines <$> readFileStrictly out oldlines <- liftIO $ lines <$> readFileStrictly out
let let
(preamble, oldheading:rest) = span isnotheading oldlines (preamble, oldheading:rest) = span isnotheading oldlines
@ -489,6 +483,7 @@ main = do
,if isCommitHash changelogversion then [] else [oldheading] ,if isCommitHash changelogversion then [] else [oldheading]
,rest ,rest
] ]
dryrun = any (`elem` ruleopts) ["--dry-run", "--dry", "-n"]
liftIO $ if liftIO $ if
| lastrev == newrev -> putStrLn $ out ++ ": up to date" | lastrev == newrev -> putStrLn $ out ++ ": up to date"