From 140a06b01e1cc84cb0953b9c57be14357426f371 Mon Sep 17 00:00:00 2001 From: Andreas Pauley Date: Sun, 5 May 2019 22:49:35 +0200 Subject: [PATCH 1/9] Move verbose into a MainParams record --- app/Main.hs | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/app/Main.hs b/app/Main.hs index 8b62989..a9de5d4 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -22,33 +22,34 @@ data SubcommandParams = SubcommandParams { maybeBaseDir :: Maybe FilePath deriving (Show) data Command = Import SubcommandParams | Report SubcommandParams deriving (Show) -data BaseCommand = Version | Command { verbose :: Bool, command :: Command } deriving (Show) +data MainParams = MainParams { verbose :: Bool } deriving (Show) +data BaseCommand = Version | Command { mainParams :: MainParams, command :: Command } deriving (Show) main :: IO () main = do cmd <- options "An hledger workflow focusing on automated statement import and classification:\nhttps://github.com/apauley/hledger-flow#readme" baseCommandParser case cmd of - Version -> stdout $ select versionInfo - Command verbose' (Import subParams) -> toImportOptions verbose' subParams >>= importCSVs - Command verbose' (Report subParams) -> toReportOptions verbose' subParams >>= generateReports + Version -> stdout $ select versionInfo + Command mainParams' (Import subParams) -> toImportOptions mainParams' subParams >>= importCSVs + Command mainParams' (Report subParams) -> toReportOptions mainParams' subParams >>= generateReports -toImportOptions :: Bool -> SubcommandParams -> IO IT.ImportOptions -toImportOptions verbose' params = do +toImportOptions :: MainParams -> SubcommandParams -> IO IT.ImportOptions +toImportOptions mainParams' params = do bd <- determineBaseDir $ maybeBaseDir params hli <- hledgerInfoFromPath $ hledgerPathOpt params return IT.ImportOptions { IT.baseDir = bd , IT.hledgerInfo = hli - , IT.verbose = verbose' + , IT.verbose = verbose mainParams' , IT.showOptions = showOpts params , IT.sequential = sequential params } -toReportOptions :: Bool -> SubcommandParams -> IO RT.ReportOptions -toReportOptions verbose' params = do +toReportOptions :: MainParams -> SubcommandParams -> IO RT.ReportOptions +toReportOptions mainParams' params = do bd <- determineBaseDir $ maybeBaseDir params hli <- hledgerInfoFromPath $ hledgerPathOpt params return RT.ReportOptions { RT.baseDir = bd , RT.hledgerInfo = hli - , RT.verbose = verbose' + , RT.verbose = verbose mainParams' , RT.showOptions = showOpts params , RT.sequential = sequential params } @@ -60,8 +61,9 @@ commandParser :: Parser Command commandParser = fmap Import (subcommand "import" "Converts CSV transactions into categorised journal files" subcommandParser) <|> fmap Report (subcommand "report" "Generate Reports" subcommandParser) -verboseParser :: Parser Bool -verboseParser = switch (long "verbose" <> short 'v' <> help "Print more verbose output") +verboseParser :: Parser MainParams +verboseParser = MainParams + <$> switch (long "verbose" <> short 'v' <> help "Print more verbose output") subcommandParser :: Parser SubcommandParams subcommandParser = SubcommandParams From 3544259b9a021e8b560c96b3bdd2cd761152291b Mon Sep 17 00:00:00 2001 From: Andreas Pauley Date: Sun, 5 May 2019 22:58:20 +0200 Subject: [PATCH 2/9] Move hledger path, showOpts and sequential into MainParams --- app/Main.hs | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/app/Main.hs b/app/Main.hs index a9de5d4..fe5d066 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -14,15 +14,14 @@ import Hledger.Flow.Common import Hledger.Flow.Reports import Hledger.Flow.CSVImport -data SubcommandParams = SubcommandParams { maybeBaseDir :: Maybe FilePath - , hledgerPathOpt :: Maybe FilePath - , showOpts :: Bool - , sequential :: Bool - } - deriving (Show) +data SubcommandParams = SubcommandParams { maybeBaseDir :: Maybe FilePath } deriving (Show) data Command = Import SubcommandParams | Report SubcommandParams deriving (Show) -data MainParams = MainParams { verbose :: Bool } deriving (Show) +data MainParams = MainParams { verbose :: Bool + , hledgerPathOpt :: Maybe FilePath + , showOpts :: Bool + , sequential :: Bool + } deriving (Show) data BaseCommand = Version | Command { mainParams :: MainParams, command :: Command } deriving (Show) main :: IO () @@ -34,24 +33,24 @@ main = do Command mainParams' (Report subParams) -> toReportOptions mainParams' subParams >>= generateReports toImportOptions :: MainParams -> SubcommandParams -> IO IT.ImportOptions -toImportOptions mainParams' params = do - bd <- determineBaseDir $ maybeBaseDir params - hli <- hledgerInfoFromPath $ hledgerPathOpt params +toImportOptions mainParams' subParams' = do + bd <- determineBaseDir $ maybeBaseDir subParams' + hli <- hledgerInfoFromPath $ hledgerPathOpt mainParams' return IT.ImportOptions { IT.baseDir = bd , IT.hledgerInfo = hli , IT.verbose = verbose mainParams' - , IT.showOptions = showOpts params - , IT.sequential = sequential params } + , IT.showOptions = showOpts mainParams' + , IT.sequential = sequential mainParams' } toReportOptions :: MainParams -> SubcommandParams -> IO RT.ReportOptions -toReportOptions mainParams' params = do - bd <- determineBaseDir $ maybeBaseDir params - hli <- hledgerInfoFromPath $ hledgerPathOpt params +toReportOptions mainParams' subParams' = do + bd <- determineBaseDir $ maybeBaseDir subParams' + hli <- hledgerInfoFromPath $ hledgerPathOpt mainParams' return RT.ReportOptions { RT.baseDir = bd , RT.hledgerInfo = hli , RT.verbose = verbose mainParams' - , RT.showOptions = showOpts params - , RT.sequential = sequential params } + , RT.showOptions = showOpts mainParams' + , RT.sequential = sequential mainParams' } baseCommandParser :: Parser BaseCommand baseCommandParser = (Command <$> verboseParser <*> commandParser) @@ -64,10 +63,10 @@ commandParser = fmap Import (subcommand "import" "Converts CSV transactions into verboseParser :: Parser MainParams verboseParser = MainParams <$> switch (long "verbose" <> short 'v' <> help "Print more verbose output") + <*> optional (optPath "hledger-path" 'H' "The full path to an hledger executable") + <*> switch (long "show-options" <> help "Print the options this program will run with") + <*> switch (long "sequential" <> help "Disable parallel processing") subcommandParser :: Parser SubcommandParams subcommandParser = SubcommandParams <$> optional (argPath "basedir" "The hledger-flow base directory") - <*> optional (optPath "hledger-path" 'H' "The full path to an hledger executable") - <*> switch (long "show-options" <> help "Print the options this program will run with") - <*> switch (long "sequential" <> help "Disable parallel processing") From 0ba2b74afe51f9298264ef227fd19214c5557dad Mon Sep 17 00:00:00 2001 From: Andreas Pauley Date: Sun, 5 May 2019 22:59:54 +0200 Subject: [PATCH 3/9] De-emphasise CSV format in help text - it can be other formats as well --- app/Main.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Main.hs b/app/Main.hs index fe5d066..35db709 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -57,7 +57,7 @@ baseCommandParser = (Command <$> verboseParser <*> commandParser) <|> flag' Version (long "version" <> short 'V' <> help "Display version information") commandParser :: Parser Command -commandParser = fmap Import (subcommand "import" "Converts CSV transactions into categorised journal files" subcommandParser) +commandParser = fmap Import (subcommand "import" "Converts electronic transactions into categorised journal files" subcommandParser) <|> fmap Report (subcommand "report" "Generate Reports" subcommandParser) verboseParser :: Parser MainParams From 04054bb9f030f62c55714d5abd3f29ac3ce70a04 Mon Sep 17 00:00:00 2001 From: Andreas Pauley Date: Sun, 5 May 2019 23:09:55 +0200 Subject: [PATCH 4/9] Seperate error message from user error brackets () --- src/Hledger/Flow/Common.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Hledger/Flow/Common.hs b/src/Hledger/Flow/Common.hs index 719d51a..5abf9dd 100644 --- a/src/Hledger/Flow/Common.hs +++ b/src/Hledger/Flow/Common.hs @@ -393,9 +393,9 @@ changeOutputPath newOutputLocation srcFile = mconcat $ map changeSrcDir $ splitD where changeSrcDir file = if (file == "1-in/" || file == "2-preprocessed/") then newOutputLocation else file errorMessageBaseDir :: FilePath -> Text -errorMessageBaseDir startDir = format ("Unable to find an hledger-flow import directory at '"%fp +errorMessageBaseDir startDir = format ("\nUnable to find an hledger-flow import directory at '"%fp %"' (or in any of its parent directories).\n\n" - %"Have a look at the documentation for more information:\n"%s) + %"Have a look at the documentation for more information:\n"%s%"\n") startDir (docURL "input-files") determineBaseDir :: Maybe FilePath -> IO FilePath From c257789953cb981bd41d1b7a7dd93768dace42a8 Mon Sep 17 00:00:00 2001 From: Andreas Pauley Date: Sun, 5 May 2019 23:17:28 +0200 Subject: [PATCH 5/9] Bump version number to 0.12 and update ChangeLog --- ChangeLog.md | 8 ++++++++ package.yaml | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ChangeLog.md b/ChangeLog.md index 133bc84..aa8a020 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,5 +1,13 @@ # Changelog for [hledger-flow](https://github.com/apauley/hledger-flow) +## 0.12.0 + +- Re-organised the command-line interface: + moved various command-line options out of subcommands, into the top-level. +- Added a [contributor's agreement](https://github.com/apauley/hledger-flow/blob/master/CONTRIBUTING.org) + after receiving some more valued contributions from + [jecaro](https://github.com/apauley/hledger-flow/pull/42) + ## 0.11.3 - Detect the hledger-flow base directory correctly, even when in a subdirectory. Similar to how git behaves. diff --git a/package.yaml b/package.yaml index 74f72e3..25322ba 100644 --- a/package.yaml +++ b/package.yaml @@ -1,5 +1,5 @@ name: hledger-flow -version: 0.11.3.0 +version: 0.12.0.0 synopsis: An hledger workflow focusing on automated statement import and classification. category: Finance, Console license: GPL-3 From 1a4495cefeb9edee225a830d66e987168ba4b990 Mon Sep 17 00:00:00 2001 From: Andreas Pauley Date: Sun, 5 May 2019 23:20:42 +0200 Subject: [PATCH 6/9] Change command-line options in CI --- .circleci/config.yml | 4 ++-- .travis.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index dad6b28..e3438ae 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -45,10 +45,10 @@ jobs: command: git clone --recurse-submodules https://github.com/apauley/hledger-flow-example.git $HOME/hledger-flow-example - run: name: hledger-flow import - command: ~/.local/bin/hledger-flow --verbose import --show-options $HOME/hledger-flow-example + command: ~/.local/bin/hledger-flow --verbose --show-options import $HOME/hledger-flow-example - run: name: hledger-flow report - command: ~/.local/bin/hledger-flow --verbose report --show-options $HOME/hledger-flow-example + command: ~/.local/bin/hledger-flow --verbose --show-options report $HOME/hledger-flow-example - run: name: Undo package.yaml change before cache_save command: git checkout HEAD package.yaml diff --git a/.travis.yml b/.travis.yml index f00e51d..145ea9b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -56,8 +56,8 @@ install: script: - stack test --interleaved-output - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then git checkout HEAD package.yaml; fi - - hledger-flow --verbose import --show-options $HOME/hledger-flow-example - - hledger-flow --verbose report --show-options $HOME/hledger-flow-example + - hledger-flow --verbose --show-options import $HOME/hledger-flow-example + - hledger-flow --verbose --show-options report $HOME/hledger-flow-example deploy: - provider: releases From 63cf4aaf1da8877db5ce2af70ad91c5f760d765a Mon Sep 17 00:00:00 2001 From: Andreas Pauley Date: Sun, 5 May 2019 23:23:09 +0200 Subject: [PATCH 7/9] Add `hledger-flow --help` to CI --- .circleci/config.yml | 3 +++ .travis.yml | 1 + 2 files changed, 4 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index e3438ae..6262693 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -25,6 +25,9 @@ jobs: - run: name: Install hledger-flow executable command: stack install + - run: + name: hledger-flow --help + command: ~/.local/bin/hledger-flow --help - run: name: hledger-flow --version command: ~/.local/bin/hledger-flow --version diff --git a/.travis.yml b/.travis.yml index 145ea9b..85d4a23 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,6 +45,7 @@ install: - stack build --interleaved-output --test --bench --no-run-tests --no-run-benchmarks - stack install - which hledger-flow + - hledger-flow --help - hledger-flow --version - ldd $(which hledger-flow) || true - ./bin/release-tarball ~/.local/bin/hledger-flow From 77c407797cccc18317e8665552a99bc6636fc468 Mon Sep 17 00:00:00 2001 From: Andreas Pauley Date: Sun, 5 May 2019 23:39:20 +0200 Subject: [PATCH 8/9] Small renaming --- src/Hledger/Flow/Common.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Hledger/Flow/Common.hs b/src/Hledger/Flow/Common.hs index 5abf9dd..d71161e 100644 --- a/src/Hledger/Flow/Common.hs +++ b/src/Hledger/Flow/Common.hs @@ -404,8 +404,8 @@ determineBaseDir Nothing = pwd >>= determineBaseDir' determineBaseDir' :: FilePath -> IO FilePath determineBaseDir' startDir = do - ee <- determineBaseDir'' startDir startDir - case ee of + ebd <- determineBaseDir'' startDir startDir + case ebd of Right bd -> return bd Left t -> die t From f3898ccede6bf7b903fb7a22356ad81df7b9b91e Mon Sep 17 00:00:00 2001 From: Andreas Pauley Date: Sun, 5 May 2019 23:42:19 +0200 Subject: [PATCH 9/9] Link to getting-started if we can't find a basedir --- README.org | 4 ++-- src/Hledger/Flow/Common.hs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.org b/README.org index d66a52d..eba7e62 100644 --- a/README.org +++ b/README.org @@ -113,9 +113,9 @@ likely change. Let me know if you can think of some improvements. -* Detailed Step-By-Step Guide +* Getting Started :PROPERTIES: - :CUSTOM_ID: detailed-step-by-step-guide + :CUSTOM_ID: getting-started :END: Have a look at the [[file:docs/README.org][detailed step-by-step diff --git a/src/Hledger/Flow/Common.hs b/src/Hledger/Flow/Common.hs index d71161e..e3f34b5 100644 --- a/src/Hledger/Flow/Common.hs +++ b/src/Hledger/Flow/Common.hs @@ -396,7 +396,7 @@ errorMessageBaseDir :: FilePath -> Text errorMessageBaseDir startDir = format ("\nUnable to find an hledger-flow import directory at '"%fp %"' (or in any of its parent directories).\n\n" %"Have a look at the documentation for more information:\n"%s%"\n") - startDir (docURL "input-files") + startDir (docURL "getting-started") determineBaseDir :: Maybe FilePath -> IO FilePath determineBaseDir (Just suppliedDir) = determineBaseDir' suppliedDir