Skip to content

Commit

Permalink
Merge pull request #257 from serokell/aeqz/#254-revise-dump-config-co…
Browse files Browse the repository at this point in the history
…mmand

[#254] Revise dump-config command
  • Loading branch information
aeqz authored Dec 29, 2022
2 parents 16041d0 + c9486e7 commit 9213017
Show file tree
Hide file tree
Showing 8 changed files with 134 additions and 22 deletions.
3 changes: 3 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ Unreleased
* [#231](https://github.com/serokell/xrefcheck/pull/231)
+ Anchor analysis takes now into account the appropriate case-sensitivity depending on
the configured Markdown flavour.
* [#254](https://github.com/serokell/xrefcheck/pull/254)
+ Now the `dump-config` command does not overwrite a file unless explicitly told with a
`--force` flag. Also, a `--stdout` flag allows to print the config to stdout instead.

0.2.2
==========
Expand Down
10 changes: 8 additions & 2 deletions exec/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ import Universum
import Main.Utf8 (withUtf8)
import System.IO.CodePage (withCP65001)

import Xrefcheck.CLI (Command (..), getCommand)
import System.Directory (doesFileExist)
import Xrefcheck.CLI (Command (..), DumpConfigMode (..), getCommand)
import Xrefcheck.Command (defaultAction)
import Xrefcheck.Config (defConfigText)

Expand All @@ -20,5 +21,10 @@ main = withUtf8 $ withCP65001 $ do
case command of
DefaultCommand options ->
defaultAction options
DumpConfig repoType path ->
DumpConfig repoType (DCMFile forceFlag path) -> do
whenM ((not forceFlag &&) <$> doesFileExist path) do
putTextLn "Output file exists. Use --force to overwrite."
exitFailure
writeFile path (defConfigText repoType)
DumpConfig repoType DCMStdout ->
putStr (defConfigText repoType)
33 changes: 17 additions & 16 deletions package.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,11 @@ default-extensions:
- StandaloneDeriving
- TemplateHaskell
- TupleSections
- TypeApplications
- TypeFamilies
- TypeOperators
- UndecidableInstances
- ViewPatterns
- TypeApplications
- TypeOperators

ghc-options:
- -Weverything
Expand Down Expand Up @@ -85,8 +85,8 @@ library:
- aeson-casing
- async
- bytestring
- containers
- cmark-gfm >= 0.2.5
- containers
- directory
- dlist
- filepath
Expand All @@ -96,14 +96,17 @@ library:
- http-client
- http-types
- lens
- pretty-terminal
- modern-uri
- mtl
- nyan-interpolation
- o-clock
- optparse-applicative
- pretty-terminal
- process
- reflection
- regex-tdfa
- req
- safe-exceptions
- tagsoup
- text
- text-metrics
Expand All @@ -112,9 +115,6 @@ library:
- universum
- uri-bytestring
- yaml
- reflection
- nyan-interpolation
- safe-exceptions

executables:
xrefcheck:
Expand All @@ -128,10 +128,11 @@ executables:
- -with-rtsopts=-N
- -O2
dependencies:
- xrefcheck
- code-page
- directory
- universum
- with-utf8
- code-page
- xrefcheck

tests:
xrefcheck-tests:
Expand All @@ -142,24 +143,24 @@ tests:
- Paths_xrefcheck
dependencies:
- case-insensitive
- containers
- cmark-gfm
- firefly
- xrefcheck
- containers
- directory
- firefly
- http-types
- modern-uri
- nyan-interpolation
- o-clock
- reflection
- regex-tdfa
- tasty
- tasty-hunit
- tasty-quickcheck
- time
- universum
- modern-uri
- uri-bytestring
- xrefcheck
- yaml
- reflection
- nyan-interpolation

ftp-tests:
main: Main.hs
Expand All @@ -172,5 +173,5 @@ tests:
- tagged
- tasty
- tasty-hunit
- xrefcheck
- universum
- xrefcheck
25 changes: 23 additions & 2 deletions src/Xrefcheck/CLI.hs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ module Xrefcheck.CLI
( VerifyMode (..)
, ExclusionOptions (..)
, Command (..)
, DumpConfigMode (..)
, Options (..)
, NetworkingOptions (..)

Expand Down Expand Up @@ -70,7 +71,11 @@ modes =

data Command
= DefaultCommand Options
| DumpConfig Flavor FilePath
| DumpConfig Flavor DumpConfigMode

data DumpConfigMode
= DCMFile Bool FilePath
| DCMStdout

data Options = Options
{ oConfigPath :: Maybe FilePath
Expand Down Expand Up @@ -218,7 +223,7 @@ dumpConfigOptions = hsubparser $
info parser $
progDesc "Dump default configuration into a file."
where
parser = DumpConfig <$> repoTypeOption <*> outputOption
parser = DumpConfig <$> repoTypeOption <*> mode

repoTypeOption =
option repoTypeReadM $
Expand All @@ -231,6 +236,22 @@ dumpConfigOptions = hsubparser $
Case insensitive.
|]

mode =
stdoutMode <|> fileMode

fileMode =
DCMFile <$> forceMode <*> outputOption

stdoutMode =
flag' DCMStdout $
long "stdout" <>
help "Write the config file to stdout."

forceMode =
switch $
long "force" <>
help "Overwrite the config file if it already exists."

outputOption =
filepathOption $
short 'o' <>
Expand Down
4 changes: 2 additions & 2 deletions tests/Test/Xrefcheck/ConfigSpec.hs
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,14 @@ test_config =

, testGroup "Filled default config matches the expected format"
-- The config we match against can be regenerated with
-- stack exec xrefcheck -- dump-config -t GitHub -o tests/configs/github-config.yaml
-- stack exec xrefcheck -- dump-config -t GitHub -o tests/configs/github-config.yaml --force
[ testCase "Config matches" $ do
config <- readFile "tests/configs/github-config.yaml"
when (config /= defConfigText GitHub) $
assertFailure $ toString $ unwords
[ "Config does not match the expected format."
, "Run"
, "`stack exec xrefcheck -- dump-config -t GitHub -o tests/configs/github-config.yaml`"
, "`stack exec xrefcheck -- dump-config -t GitHub -o tests/configs/github-config.yaml --force`"
, "and verify changes"
]
]
Expand Down
3 changes: 3 additions & 0 deletions tests/golden/check-dump-config/.config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# SPDX-FileCopyrightText: 2022 Serokell <https://serokell.io>
#
# SPDX-License-Identifier: MPL-2.0
3 changes: 3 additions & 0 deletions tests/golden/check-dump-config/.xrefcheck.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# SPDX-FileCopyrightText: 2022 Serokell <https://serokell.io>
#
# SPDX-License-Identifier: MPL-2.0
75 changes: 75 additions & 0 deletions tests/golden/check-dump-config/check-dump-config.bats
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
#!/usr/bin/env bats

# SPDX-FileCopyrightText: 2022 Serokell <https://serokell.io>
#
# SPDX-License-Identifier: MPL-2.0

load '../helpers/bats-support/load'
load '../helpers/bats-assert/load'
load '../helpers/bats-file/load'
load '../helpers'


@test "Dump config to stdout" {
to_temp xrefcheck dump-config --stdout -t GitHub

assert_diff ../../configs/github-config.yaml
}

@test "Dump config to existent default file error" {
run xrefcheck dump-config -t GitHub

assert_failure

assert_output "Output file exists. Use --force to overwrite."
}

@test "Dump config to existent file error" {
run xrefcheck dump-config -o .config.yaml -t GitHub

assert_failure

assert_output "Output file exists. Use --force to overwrite."
}

@test "Dump config to non existent default file" {
cd $TEST_TEMP_DIR

run xrefcheck dump-config -t GitHub

assert_success

assert_exists .xrefcheck.yaml
}

@test "Dump config to non existent file" {
cd $TEST_TEMP_DIR

run xrefcheck dump-config -o .config.yaml -t GitHub

assert_success

assert_exists .config.yaml
}

@test "Dump config to existent default file with force" {
cp .xrefcheck.yaml $TEST_TEMP_DIR
cd $TEST_TEMP_DIR

run xrefcheck dump-config -t GitHub --force

assert_success

assert_exists .xrefcheck.yaml
}

@test "Dump config to existent file with force" {
cp .config.yaml $TEST_TEMP_DIR
cd $TEST_TEMP_DIR

run xrefcheck dump-config -o .config.yaml -t GitHub --force

assert_success

assert_exists .config.yaml
}

0 comments on commit 9213017

Please sign in to comment.