lib: refactor, add embedFileRelative
This commit is contained in:
		
							parent
							
								
									4f8153cf82
								
							
						
					
					
						commit
						550aa408eb
					
				| @ -37,15 +37,19 @@ where | |||||||
| import Control.Monad (liftM, when) | import Control.Monad (liftM, when) | ||||||
| -- import Data.Char | -- import Data.Char | ||||||
| import Data.Default | import Data.Default | ||||||
|  | import Data.FileEmbed (makeRelativeToProject, embedFile) | ||||||
| import Data.List | import Data.List | ||||||
| -- import Data.Maybe | -- import Data.Maybe | ||||||
| -- import Data.PPrint | -- import Data.PPrint | ||||||
|  | import Data.String.Here (hereFile) | ||||||
| import Data.Text (Text) | import Data.Text (Text) | ||||||
| import qualified Data.Text.IO as T | import qualified Data.Text.IO as T | ||||||
| import Data.Time.Clock | import Data.Time.Clock | ||||||
| import Data.Time.LocalTime | import Data.Time.LocalTime | ||||||
| -- import Data.Text (Text) | -- import Data.Text (Text) | ||||||
| -- import qualified Data.Text as T | -- import qualified Data.Text as T | ||||||
|  | import Language.Haskell.TH.Quote (QuasiQuoter(..)) | ||||||
|  | import Language.Haskell.TH.Syntax (Q, Exp) | ||||||
| import System.Directory (getHomeDirectory) | import System.Directory (getHomeDirectory) | ||||||
| import System.FilePath((</>), isRelative) | import System.FilePath((</>), isRelative) | ||||||
| import System.IO | import System.IO | ||||||
| @ -220,6 +224,18 @@ sequence' ms = do | |||||||
| mapM' :: Monad f => (a -> f b) -> [a] -> f [b] | mapM' :: Monad f => (a -> f b) -> [a] -> f [b] | ||||||
| mapM' f = sequence' . map f | mapM' f = sequence' . map f | ||||||
| 
 | 
 | ||||||
|  | -- | Like embedFile, but takes a path relative to the package directory. | ||||||
|  | -- Similar to hereFileRelative ? | ||||||
|  | embedFileRelative :: FilePath -> Q Exp | ||||||
|  | embedFileRelative f = makeRelativeToProject f >>= embedFile | ||||||
|  | 
 | ||||||
|  | -- | Like hereFile, but takes a path relative to the package directory. | ||||||
|  | -- Similar to embedFileRelative ? | ||||||
|  | hereFileRelative :: FilePath -> Q Exp | ||||||
|  | hereFileRelative f = makeRelativeToProject f >>= hereFileExp | ||||||
|  |   where | ||||||
|  |     QuasiQuoter{quoteExp=hereFileExp} = hereFile | ||||||
|  |      | ||||||
| tests_Utils = tests "Utils" [ | tests_Utils = tests "Utils" [ | ||||||
|   tests_Text |   tests_Text | ||||||
|   ] |   ] | ||||||
|  | |||||||
| @ -4,7 +4,7 @@ cabal-version: 1.12 | |||||||
| -- | -- | ||||||
| -- see: https://github.com/sol/hpack | -- see: https://github.com/sol/hpack | ||||||
| -- | -- | ||||||
| -- hash: 510ffa940692e35167ef2f17c5eaa61f6510793dc0a902f0daac254da37fee9e | -- hash: 83c1fff5c5877da9fe972db3b0b57fb31687fbdb4476b7ee0136e76a64e2f69e | ||||||
| 
 | 
 | ||||||
| name:           hledger-lib | name:           hledger-lib | ||||||
| version:        1.12.99 | version:        1.12.99 | ||||||
| @ -121,8 +121,10 @@ library | |||||||
|     , directory |     , directory | ||||||
|     , easytest |     , easytest | ||||||
|     , extra |     , extra | ||||||
|  |     , file-embed >=0.0.10 | ||||||
|     , filepath |     , filepath | ||||||
|     , hashtables >=1.2.3.1 |     , hashtables >=1.2.3.1 | ||||||
|  |     , here | ||||||
|     , megaparsec >=7.0.0 && <8 |     , megaparsec >=7.0.0 && <8 | ||||||
|     , mtl |     , mtl | ||||||
|     , mtl-compat |     , mtl-compat | ||||||
| @ -134,6 +136,7 @@ library | |||||||
|     , safe >=0.2 |     , safe >=0.2 | ||||||
|     , split >=0.1 |     , split >=0.1 | ||||||
|     , tabular >=0.2 |     , tabular >=0.2 | ||||||
|  |     , template-haskell | ||||||
|     , text >=1.2 |     , text >=1.2 | ||||||
|     , time >=1.5 |     , time >=1.5 | ||||||
|     , transformers >=0.2 |     , transformers >=0.2 | ||||||
| @ -221,8 +224,10 @@ test-suite doctests | |||||||
|     , doctest >=0.16 |     , doctest >=0.16 | ||||||
|     , easytest |     , easytest | ||||||
|     , extra |     , extra | ||||||
|  |     , file-embed >=0.0.10 | ||||||
|     , filepath |     , filepath | ||||||
|     , hashtables >=1.2.3.1 |     , hashtables >=1.2.3.1 | ||||||
|  |     , here | ||||||
|     , megaparsec >=7.0.0 && <8 |     , megaparsec >=7.0.0 && <8 | ||||||
|     , mtl |     , mtl | ||||||
|     , mtl-compat |     , mtl-compat | ||||||
| @ -234,6 +239,7 @@ test-suite doctests | |||||||
|     , safe >=0.2 |     , safe >=0.2 | ||||||
|     , split >=0.1 |     , split >=0.1 | ||||||
|     , tabular >=0.2 |     , tabular >=0.2 | ||||||
|  |     , template-haskell | ||||||
|     , text >=1.2 |     , text >=1.2 | ||||||
|     , time >=1.5 |     , time >=1.5 | ||||||
|     , transformers >=0.2 |     , transformers >=0.2 | ||||||
| @ -320,8 +326,10 @@ test-suite easytests | |||||||
|     , directory |     , directory | ||||||
|     , easytest |     , easytest | ||||||
|     , extra |     , extra | ||||||
|  |     , file-embed >=0.0.10 | ||||||
|     , filepath |     , filepath | ||||||
|     , hashtables >=1.2.3.1 |     , hashtables >=1.2.3.1 | ||||||
|  |     , here | ||||||
|     , hledger-lib |     , hledger-lib | ||||||
|     , megaparsec >=7.0.0 && <8 |     , megaparsec >=7.0.0 && <8 | ||||||
|     , mtl |     , mtl | ||||||
| @ -334,6 +342,7 @@ test-suite easytests | |||||||
|     , safe >=0.2 |     , safe >=0.2 | ||||||
|     , split >=0.1 |     , split >=0.1 | ||||||
|     , tabular >=0.2 |     , tabular >=0.2 | ||||||
|  |     , template-haskell | ||||||
|     , text >=1.2 |     , text >=1.2 | ||||||
|     , time >=1.5 |     , time >=1.5 | ||||||
|     , transformers >=0.2 |     , transformers >=0.2 | ||||||
|  | |||||||
| @ -55,8 +55,10 @@ dependencies: | |||||||
| - deepseq | - deepseq | ||||||
| - directory | - directory | ||||||
| - easytest | - easytest | ||||||
|  | - file-embed >=0.0.10 | ||||||
| - filepath | - filepath | ||||||
| - hashtables >=1.2.3.1 | - hashtables >=1.2.3.1 | ||||||
|  | - here | ||||||
| - megaparsec >=7.0.0 && <8 | - megaparsec >=7.0.0 && <8 | ||||||
| - mtl | - mtl | ||||||
| - mtl-compat | - mtl-compat | ||||||
| @ -68,6 +70,7 @@ dependencies: | |||||||
| - safe >=0.2 | - safe >=0.2 | ||||||
| - split >=0.1 | - split >=0.1 | ||||||
| - tabular >=0.2 | - tabular >=0.2 | ||||||
|  | - template-haskell | ||||||
| - text >=1.2 | - text >=1.2 | ||||||
| - time >=1.5 | - time >=1.5 | ||||||
| - transformers >=0.2 | - transformers >=0.2 | ||||||
|  | |||||||
| @ -14,7 +14,6 @@ import System.Console.CmdArgs.Explicit as C | |||||||
| 
 | 
 | ||||||
| import Hledger | import Hledger | ||||||
| import Hledger.Cli.CliOptions | import Hledger.Cli.CliOptions | ||||||
| import Hledger.Cli.Utils (hereFileRelative) |  | ||||||
| 
 | 
 | ||||||
| closemode = hledgerCommandMode | closemode = hledgerCommandMode | ||||||
|   $(hereFileRelative "Hledger/Cli/Commands/Close.md") |   $(hereFileRelative "Hledger/Cli/Commands/Close.md") | ||||||
|  | |||||||
| @ -24,57 +24,56 @@ import Prelude () | |||||||
| import "base-compat-batteries" Prelude.Compat | import "base-compat-batteries" Prelude.Compat | ||||||
| import Data.ByteString (ByteString) | import Data.ByteString (ByteString) | ||||||
| import qualified Data.ByteString.Char8 as BC | import qualified Data.ByteString.Char8 as BC | ||||||
| import Data.FileEmbed |  | ||||||
| import Data.String | import Data.String | ||||||
| import System.IO | import System.IO | ||||||
| import System.IO.Temp | import System.IO.Temp | ||||||
| import System.Process | import System.Process | ||||||
| 
 | 
 | ||||||
| import Hledger.Utils (first3, second3, third3) | import Hledger.Utils (first3, second3, third3, embedFileRelative) | ||||||
| 
 | 
 | ||||||
| type Topic = String | type Topic = String | ||||||
| 
 | 
 | ||||||
| docFiles :: [(Topic, (ByteString, ByteString, ByteString))] | docFiles :: [(Topic, (ByteString, ByteString, ByteString))] | ||||||
| docFiles = [ | docFiles = [ | ||||||
|    ("hledger", |    ("hledger", | ||||||
|     ($(makeRelativeToProject "embeddedfiles/hledger.1" >>= embedFile) |     ($(embedFileRelative "embeddedfiles/hledger.1") | ||||||
|     ,$(makeRelativeToProject "embeddedfiles/hledger.txt" >>= embedFile) |     ,$(embedFileRelative "embeddedfiles/hledger.txt") | ||||||
|     ,$(makeRelativeToProject "embeddedfiles/hledger.info" >>= embedFile) |     ,$(embedFileRelative "embeddedfiles/hledger.info") | ||||||
|     )) |     )) | ||||||
|   ,("hledger-ui", |   ,("hledger-ui", | ||||||
|     ($(makeRelativeToProject "embeddedfiles/hledger-ui.1" >>= embedFile) |     ($(embedFileRelative "embeddedfiles/hledger-ui.1") | ||||||
|     ,$(makeRelativeToProject "embeddedfiles/hledger-ui.txt" >>= embedFile) |     ,$(embedFileRelative "embeddedfiles/hledger-ui.txt") | ||||||
|     ,$(makeRelativeToProject "embeddedfiles/hledger-ui.info" >>= embedFile) |     ,$(embedFileRelative "embeddedfiles/hledger-ui.info") | ||||||
|     )) |     )) | ||||||
|   ,("hledger-web", |   ,("hledger-web", | ||||||
|     ($(makeRelativeToProject "embeddedfiles/hledger-web.1" >>= embedFile) |     ($(embedFileRelative "embeddedfiles/hledger-web.1") | ||||||
|     ,$(makeRelativeToProject "embeddedfiles/hledger-web.txt" >>= embedFile) |     ,$(embedFileRelative "embeddedfiles/hledger-web.txt") | ||||||
|     ,$(makeRelativeToProject "embeddedfiles/hledger-web.info" >>= embedFile) |     ,$(embedFileRelative "embeddedfiles/hledger-web.info") | ||||||
|     )) |     )) | ||||||
|   ,("hledger-api", |   ,("hledger-api", | ||||||
|     ($(makeRelativeToProject "embeddedfiles/hledger-api.1" >>= embedFile) |     ($(embedFileRelative "embeddedfiles/hledger-api.1") | ||||||
|     ,$(makeRelativeToProject "embeddedfiles/hledger-api.txt" >>= embedFile) |     ,$(embedFileRelative "embeddedfiles/hledger-api.txt") | ||||||
|     ,$(makeRelativeToProject "embeddedfiles/hledger-api.info" >>= embedFile) |     ,$(embedFileRelative "embeddedfiles/hledger-api.info") | ||||||
|     )) |     )) | ||||||
|   ,("journal", |   ,("journal", | ||||||
|     ($(makeRelativeToProject "embeddedfiles/hledger_journal.5" >>= embedFile) |     ($(embedFileRelative "embeddedfiles/hledger_journal.5") | ||||||
|     ,$(makeRelativeToProject "embeddedfiles/hledger_journal.txt" >>= embedFile) |     ,$(embedFileRelative "embeddedfiles/hledger_journal.txt") | ||||||
|     ,$(makeRelativeToProject "embeddedfiles/hledger_journal.info" >>= embedFile) |     ,$(embedFileRelative "embeddedfiles/hledger_journal.info") | ||||||
|     )) |     )) | ||||||
|   ,("csv", |   ,("csv", | ||||||
|     ($(makeRelativeToProject "embeddedfiles/hledger_csv.5" >>= embedFile) |     ($(embedFileRelative "embeddedfiles/hledger_csv.5") | ||||||
|     ,$(makeRelativeToProject "embeddedfiles/hledger_csv.txt" >>= embedFile) |     ,$(embedFileRelative "embeddedfiles/hledger_csv.txt") | ||||||
|     ,$(makeRelativeToProject "embeddedfiles/hledger_csv.info" >>= embedFile) |     ,$(embedFileRelative "embeddedfiles/hledger_csv.info") | ||||||
|     )) |     )) | ||||||
|   ,("timeclock", |   ,("timeclock", | ||||||
|     ($(makeRelativeToProject "embeddedfiles/hledger_timeclock.5" >>= embedFile) |     ($(embedFileRelative "embeddedfiles/hledger_timeclock.5") | ||||||
|     ,$(makeRelativeToProject "embeddedfiles/hledger_timeclock.txt" >>= embedFile) |     ,$(embedFileRelative "embeddedfiles/hledger_timeclock.txt") | ||||||
|     ,$(makeRelativeToProject "embeddedfiles/hledger_timeclock.info" >>= embedFile) |     ,$(embedFileRelative "embeddedfiles/hledger_timeclock.info") | ||||||
|     )) |     )) | ||||||
|   ,("timedot", |   ,("timedot", | ||||||
|     ($(makeRelativeToProject "embeddedfiles/hledger_timedot.5" >>= embedFile) |     ($(embedFileRelative "embeddedfiles/hledger_timedot.5") | ||||||
|     ,$(makeRelativeToProject "embeddedfiles/hledger_timedot.txt" >>= embedFile) |     ,$(embedFileRelative "embeddedfiles/hledger_timedot.txt") | ||||||
|     ,$(makeRelativeToProject "embeddedfiles/hledger_timedot.info" >>= embedFile) |     ,$(embedFileRelative "embeddedfiles/hledger_timedot.info") | ||||||
|     )) |     )) | ||||||
|   ] |   ] | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -9,7 +9,6 @@ Hledger.Utils. | |||||||
| 
 | 
 | ||||||
| module Hledger.Cli.Utils | module Hledger.Cli.Utils | ||||||
|     ( |     ( | ||||||
|      hereFileRelative, |  | ||||||
|      withJournalDo, |      withJournalDo, | ||||||
|      writeOutput, |      writeOutput, | ||||||
|      journalTransform, |      journalTransform, | ||||||
| @ -32,16 +31,12 @@ import Control.Exception as C | |||||||
| import Control.Monad | import Control.Monad | ||||||
| 
 | 
 | ||||||
| import Data.Hashable (hash) | import Data.Hashable (hash) | ||||||
| import Data.FileEmbed (makeRelativeToProject) |  | ||||||
| import Data.List | import Data.List | ||||||
| import Data.Maybe | import Data.Maybe | ||||||
| import qualified Data.Text as T | import qualified Data.Text as T | ||||||
| import qualified Data.Text.IO as T | import qualified Data.Text.IO as T | ||||||
| import Data.String.Here (hereFile) |  | ||||||
| import Data.Time (Day, addDays) | import Data.Time (Day, addDays) | ||||||
| import Data.Word | import Data.Word | ||||||
| import Language.Haskell.TH.Quote (QuasiQuoter(..)) |  | ||||||
| import Language.Haskell.TH.Syntax (Q, Exp) |  | ||||||
| import Numeric | import Numeric | ||||||
| import Safe (readMay) | import Safe (readMay) | ||||||
| import System.Console.CmdArgs | import System.Console.CmdArgs | ||||||
| @ -63,13 +58,6 @@ import Hledger.Read | |||||||
| import Hledger.Reports | import Hledger.Reports | ||||||
| import Hledger.Utils | import Hledger.Utils | ||||||
| 
 | 
 | ||||||
| -- XXX hereFile or embedFile ? QQ or TH ? does it matter ? |  | ||||||
| -- | Embed the contents of a file, given a path relative to the current package. |  | ||||||
| hereFileRelative :: FilePath -> Q Exp |  | ||||||
| hereFileRelative f = makeRelativeToProject f >>= hereFileExp |  | ||||||
|   where |  | ||||||
|     QuasiQuoter{quoteExp=hereFileExp} = hereFile |  | ||||||
|      |  | ||||||
| -- | Parse the user's specified journal file(s) as a Journal, maybe apply some | -- | Parse the user's specified journal file(s) as a Journal, maybe apply some | ||||||
| -- transformations according to options, and run a hledger command with it.  | -- transformations according to options, and run a hledger command with it.  | ||||||
| -- Or, throw an error. | -- Or, throw an error. | ||||||
|  | |||||||
| @ -4,7 +4,7 @@ cabal-version: 1.12 | |||||||
| -- | -- | ||||||
| -- see: https://github.com/sol/hpack | -- see: https://github.com/sol/hpack | ||||||
| -- | -- | ||||||
| -- hash: 2b1a58e0e13c29b497037f556b0bbe5836e1667dc222aafc546683392fd9c211 | -- hash: f7e09ce5d14e5c6c98b49831e7542ad9c40c969033841ca17e144a06bcda89cb | ||||||
| 
 | 
 | ||||||
| name:           hledger | name:           hledger | ||||||
| version:        1.12.99 | version:        1.12.99 | ||||||
| @ -125,7 +125,6 @@ library | |||||||
|     , data-default >=0.5 |     , data-default >=0.5 | ||||||
|     , directory |     , directory | ||||||
|     , easytest |     , easytest | ||||||
|     , file-embed >=0.0.10 |  | ||||||
|     , filepath |     , filepath | ||||||
|     , hashable >=1.2.4 |     , hashable >=1.2.4 | ||||||
|     , haskeline >=0.6 |     , haskeline >=0.6 | ||||||
| @ -145,7 +144,6 @@ library | |||||||
|     , shakespeare >=2.0.2.2 |     , shakespeare >=2.0.2.2 | ||||||
|     , split >=0.1 |     , split >=0.1 | ||||||
|     , tabular >=0.2 |     , tabular >=0.2 | ||||||
|     , template-haskell |  | ||||||
|     , temporary |     , temporary | ||||||
|     , text >=0.11 |     , text >=0.11 | ||||||
|     , time >=1.5 |     , time >=1.5 | ||||||
| @ -178,7 +176,6 @@ executable hledger | |||||||
|     , data-default >=0.5 |     , data-default >=0.5 | ||||||
|     , directory |     , directory | ||||||
|     , easytest |     , easytest | ||||||
|     , file-embed >=0.0.10 |  | ||||||
|     , filepath |     , filepath | ||||||
|     , haskeline >=0.6 |     , haskeline >=0.6 | ||||||
|     , here |     , here | ||||||
| @ -197,7 +194,6 @@ executable hledger | |||||||
|     , shakespeare >=2.0.2.2 |     , shakespeare >=2.0.2.2 | ||||||
|     , split >=0.1 |     , split >=0.1 | ||||||
|     , tabular >=0.2 |     , tabular >=0.2 | ||||||
|     , template-haskell |  | ||||||
|     , temporary |     , temporary | ||||||
|     , text >=0.11 |     , text >=0.11 | ||||||
|     , time >=1.5 |     , time >=1.5 | ||||||
| @ -233,7 +229,6 @@ test-suite test | |||||||
|     , data-default >=0.5 |     , data-default >=0.5 | ||||||
|     , directory |     , directory | ||||||
|     , easytest |     , easytest | ||||||
|     , file-embed >=0.0.10 |  | ||||||
|     , filepath |     , filepath | ||||||
|     , haskeline >=0.6 |     , haskeline >=0.6 | ||||||
|     , here |     , here | ||||||
| @ -252,7 +247,6 @@ test-suite test | |||||||
|     , shakespeare >=2.0.2.2 |     , shakespeare >=2.0.2.2 | ||||||
|     , split >=0.1 |     , split >=0.1 | ||||||
|     , tabular >=0.2 |     , tabular >=0.2 | ||||||
|     , template-haskell |  | ||||||
|     , temporary |     , temporary | ||||||
|     , test-framework |     , test-framework | ||||||
|     , test-framework-hunit |     , test-framework-hunit | ||||||
| @ -288,7 +282,6 @@ benchmark bench | |||||||
|     , data-default >=0.5 |     , data-default >=0.5 | ||||||
|     , directory |     , directory | ||||||
|     , easytest |     , easytest | ||||||
|     , file-embed >=0.0.10 |  | ||||||
|     , filepath |     , filepath | ||||||
|     , haskeline >=0.6 |     , haskeline >=0.6 | ||||||
|     , here |     , here | ||||||
| @ -308,7 +301,6 @@ benchmark bench | |||||||
|     , shakespeare >=2.0.2.2 |     , shakespeare >=2.0.2.2 | ||||||
|     , split >=0.1 |     , split >=0.1 | ||||||
|     , tabular >=0.2 |     , tabular >=0.2 | ||||||
|     , template-haskell |  | ||||||
|     , temporary |     , temporary | ||||||
|     , text >=0.11 |     , text >=0.11 | ||||||
|     , time >=1.5 |     , time >=1.5 | ||||||
|  | |||||||
| @ -89,7 +89,6 @@ dependencies: | |||||||
| - Decimal | - Decimal | ||||||
| - directory | - directory | ||||||
| - easytest | - easytest | ||||||
| - file-embed >=0.0.10 |  | ||||||
| - filepath | - filepath | ||||||
| - haskeline >=0.6 | - haskeline >=0.6 | ||||||
| - here | - here | ||||||
| @ -104,7 +103,6 @@ dependencies: | |||||||
| - safe >=0.2 | - safe >=0.2 | ||||||
| - shakespeare >=2.0.2.2 | - shakespeare >=2.0.2.2 | ||||||
| - split >=0.1 | - split >=0.1 | ||||||
| - template-haskell |  | ||||||
| - math-functions >=0.2.0.0 | - math-functions >=0.2.0.0 | ||||||
| - tabular >=0.2 | - tabular >=0.2 | ||||||
| - temporary | - temporary | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user