Add support for global and user configuration files (#73)
* [core] ConfigurationBuilder reads user and global config files * [changelog] updated * [readme] updated
This commit is contained in:
parent
910688ee32
commit
0a92667d3c
3 changed files with 52 additions and 6 deletions
|
@ -9,15 +9,31 @@ The format is based on [[https://keepachangelog.com/en/1.0.0/][Keep a Changelog]
|
||||||
|
|
||||||
** Added
|
** Added
|
||||||
|
|
||||||
- ~-d~, ~--debug~ flag for log messages
|
- Add ~thorp-lib~ module (#66)
|
||||||
|
- Enable running outside of sbt (#55)
|
||||||
|
- ~-d~, ~--debug~ flag for log messages (#60)
|
||||||
|
- Read config from ~.thorp.conf~ in source directory (#71)
|
||||||
|
- Read config from ~$HOME/.config/thorp.conf~ and ~/etc/thorp.conf~
|
||||||
|
(#73)
|
||||||
|
|
||||||
** Changed
|
** Changed
|
||||||
|
|
||||||
- Suppress Transfer event messages
|
- Rename project as 'thorp' (#75)
|
||||||
|
- Suppress Transfer event messages (#64)
|
||||||
|
- Better error message when source not found (#51)
|
||||||
|
- Reduced logging (#59)
|
||||||
|
|
||||||
|
** Fixed
|
||||||
|
|
||||||
|
- Error when calculating md5 hash for large files (#56)
|
||||||
|
|
||||||
** Removed
|
** Removed
|
||||||
|
|
||||||
- ~-v~ verbosity flag
|
- ~-v~ verbosity flag (#63)
|
||||||
|
|
||||||
|
** Dependencies
|
||||||
|
|
||||||
|
- Upgrade ~aws-java-sdk-s3~ from ~1.11.569~ to ~1.11.570~ (#57)
|
||||||
|
|
||||||
* [0.4.0] - 2019-06-11
|
* [0.4.0] - 2019-06-11
|
||||||
|
|
||||||
|
|
20
README.org
20
README.org
|
@ -24,8 +24,28 @@ hash of the file contents.
|
||||||
-d, --debug Enable debug logging
|
-d, --debug Enable debug logging
|
||||||
#+end_example
|
#+end_example
|
||||||
|
|
||||||
|
If you don't provide a ~source~ the current diretory will be used.
|
||||||
|
|
||||||
The ~--include~ and ~--exclude~ parameters can be used more than once.
|
The ~--include~ and ~--exclude~ parameters can be used more than once.
|
||||||
|
|
||||||
|
* Configuration
|
||||||
|
|
||||||
|
Configuration will be read from these files:
|
||||||
|
|
||||||
|
- Global: ~/etc/thorp.conf~
|
||||||
|
- User: ~~/.config/thorp.conf~
|
||||||
|
- Source: ~${source}/.thorp.conf~
|
||||||
|
|
||||||
|
Command line arguments override those in Source, which override those
|
||||||
|
in User, which override those Global, which override any built-in
|
||||||
|
config.
|
||||||
|
|
||||||
|
Built-in config consists of using the current working directory as the
|
||||||
|
~source~.
|
||||||
|
|
||||||
|
Note, that ~include~ and ~exclude~ are cumulative across all
|
||||||
|
configuration files.
|
||||||
|
|
||||||
* Behaviour
|
* Behaviour
|
||||||
|
|
||||||
When considering a local file, the following table governs what should happen:
|
When considering a local file, the following table governs what should happen:
|
||||||
|
|
|
@ -6,8 +6,8 @@ import java.nio.file.Paths
|
||||||
import cats.data.NonEmptyChain
|
import cats.data.NonEmptyChain
|
||||||
import cats.effect.IO
|
import cats.effect.IO
|
||||||
import net.kemitix.thorp.core.ConfigValidator.validateConfig
|
import net.kemitix.thorp.core.ConfigValidator.validateConfig
|
||||||
import net.kemitix.thorp.domain.Config
|
|
||||||
import net.kemitix.thorp.core.ParseConfigFile.parseFile
|
import net.kemitix.thorp.core.ParseConfigFile.parseFile
|
||||||
|
import net.kemitix.thorp.domain.Config
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Builds a configuration from settings in a file within the
|
* Builds a configuration from settings in a file within the
|
||||||
|
@ -22,8 +22,10 @@ trait ConfigurationBuilder {
|
||||||
def buildConfig(priorityOptions: Seq[ConfigOption]): IO[Either[NonEmptyChain[ConfigValidation], Config]] = {
|
def buildConfig(priorityOptions: Seq[ConfigOption]): IO[Either[NonEmptyChain[ConfigValidation], Config]] = {
|
||||||
val source = findSource(priorityOptions)
|
val source = findSource(priorityOptions)
|
||||||
for {
|
for {
|
||||||
options <- sourceOptions(source)
|
sourceOptions <- sourceOptions(source)
|
||||||
collected = priorityOptions ++ options
|
userOptions <- userOptions()
|
||||||
|
globalOptions <- globalOptions()
|
||||||
|
collected = priorityOptions ++ sourceOptions ++ userOptions ++ globalOptions
|
||||||
config = collateOptions(collected)
|
config = collateOptions(collected)
|
||||||
} yield validateConfig(config).toEither
|
} yield validateConfig(config).toEither
|
||||||
}
|
}
|
||||||
|
@ -37,6 +39,14 @@ trait ConfigurationBuilder {
|
||||||
private def sourceOptions(source: File): IO[Seq[ConfigOption]] =
|
private def sourceOptions(source: File): IO[Seq[ConfigOption]] =
|
||||||
readFile(source, ".thorp.conf")
|
readFile(source, ".thorp.conf")
|
||||||
|
|
||||||
|
private def userOptions(): IO[Seq[ConfigOption]] =
|
||||||
|
readFile(userHome, ".config/thorp.conf")
|
||||||
|
|
||||||
|
private def globalOptions(): IO[Seq[ConfigOption]] =
|
||||||
|
parseFile(Paths.get("/etc/thorp.conf"))
|
||||||
|
|
||||||
|
private def userHome = new File(System.getProperty("user.home"))
|
||||||
|
|
||||||
private def readFile(source: File, filename: String): IO[Seq[ConfigOption]] =
|
private def readFile(source: File, filename: String): IO[Seq[ConfigOption]] =
|
||||||
parseFile(source.toPath.resolve(filename))
|
parseFile(source.toPath.resolve(filename))
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue