* [core] Convert HashService into an effect Hasher
* [core] LocalFileStreamSuite fix prep of test env
* [core] LocalFileStreamSuite Refactor
* [core] Add Hasher.hashObjectChunk
* [core] make MD5HashGenerator private
Moved MD5HashGenerator into package hasher and made it private to that
package, together with the Hasher effect which is the only permitted
user of it. Added hex and digest methods to Hasher.
Similar for the ETageGenerator in [storage-aws], moved into a hasher
package and made private. It can only be accessed using the S3Hasher
effect.
* [domain] Add Monoid
* [domain] Sources use Monoid
* [core] ActionGenerator Refactor
* [core] Use >>= and *> operators
* [config] Refactoring
* [storage-aws] Refactoring
* [domain] Refactoring
* [core] Refactoring
* [config] refactoring
* Refactoring
* [core] PlanBuilder Refactoring
* [core] Make PlanBuilder into an object
* [storate-aws] Copier Reduce the number of parameters
* [config] merge config package object with Config object
* [config] Only extract batchMode value where used
Don't pull it out early then pass a boolean around
* [config] new module
* [config] stub module
* [domain] Rename domain.Config as domain.LegacyConfig
* [config] Move LegacyConfig to config module
* [config] Move config parsing and validation into module
* [config] Complete migration to module for Config
* [config] Config You should not name methods after their defining object
* [config] Rename LegacyConfig as Configuration
Also remove redundant uses
* [core] LocalFileStream Refactoring
* [changelog] update
* [console] Rename MyConsole as Console
* [console] break infinite loop
* [console] fix typo
* [console] clean up helpers
* [cli] Main use ZIO#provide to run program
* [cli] Main define Program type alias
* [cli] Program handle cli args in Program
* [cli] Program doesn't extend PlanBuilder
* [cli] refactoring
* [cli] rename ParseArgs as CliArgs
* [cli] CliArgs#apply renamed a parse
* [storage-aws] S3StorageService renamed as S3Storage
* [storage-api] Rename StorageService as Storage.Service
* [storage-api] make Storage.copy effectTotal
* [storage-api] make Storage.delete effectTotal
* [storage-api] make Storage.shutdown effectTotal
* [storage-api] make Storage.upload effectTotal
* [storage-aws] Lister refactoring
* [storage-aws] make Lister into a trait
* [storage-aws] make Copier into a trait
* [storage-aws] make Deleter into a trait
* [storate-aws] make Uploader into a trait
* [storage-aws] AmazonS3 move error handling out of client wrapper
* [storage-aws] DeleterTest added
* [storage-aws] ListerTest added
* [storage-aws] Uploader refactoring
* [storage-aws] CopierTest test Copier directly
* [storage-aws] DeleterTest test Deleter directly
* [storate-aws] ListerTest test Lister directly
* [storage-aws] UploaderTest added
* [storage-aws] S3Storage.Live replaces S3StorageServiceBuilder
* Complete migration to Module for Storage
* [cli] Main define LiveThorpApp object
* [core] Add CoreTypes
* [cli] Program Refactoring
* [core] PlanBuilding Refactoring
* [changelog] updated
* [console] Console.Live Usage of get on optional type
* [storage-aws] AmazonS3ClientTestFixture Use wildcards when selecting more than 6 elements
* [sbt] Add ZIO dependency to storage-api
* Convert to use ZIO
* [sbt] remove cats-effect dependency
* [changelog] updated
* [cli] Program restore actions to correct order (copy, upload, delete)
* [cli] Program You should not name methods after their defining object
* [core] ConfigValidationException Redundant braces after class definition
* [core] LocalFileStreamSuite Usage of get on optional type.
* [core] PlanBuilderTest Usage of get on optional type.
* [domain] Drop use of Lenses macro and only create used lenses
* [core] Drop use of Lenses macro and only create used lenses
* [sbt] drop paradise plugin
* [changelog] updated
* [core] Add test file that we create incorrect hash for
By 'incorrect' we mean "not what AWS S3 think is correct" for this
file.
* [domain] HexEncoder rewritten to correctly decode hex
* [domain] HexEncoder encode to uppercase
* [sbt] Add monocle for support for lenses
* [domain] UploadEventListener make a case class
* [domain] Add @Lenses to all case classes
* [core] Add @Lenses to case classes
* [core] ActionGenerator use lense
* [core] ConfigOption use Lenses
* [core] ConfigurationBuilder remove unused fields
* [core] ConfigurationBuilder refactoring
* [core] SyncLogging use lenses
* [core] syncLogging refactoring
* [scalafmt] Add .scalafmt
* [sbt] Add unused import warning and make them errors
* [core] ConfigurationBuilder remove unused import
* [core] ConfigurationBuilder apply scalafmt
* [domain] reformat
* [storage-api] reformat
* [core] reformat and some refactoring
* [storage-aws] reformat
* [cli] reformat
* [core] post rebase fix up
* [storage-aws] UploaderSuite tidy up
* [domain] MD5Hash tweak
Without doing this we have a file that we don't create a valid md5
hash for. See #103
* [storage-aws] UploaderSuite remove unused import
* [storage-aws] StorageServiceSuite reformatted
* [sbt] consistent settings for all modules
Can't enable as stubbing TransferManager attempts to use the default
constructor for TransferManager.
* [storage-aws] Add AmazonTransferManager
This gives us an interface we can safely stub in unit tests without
the compiler failing the build because TransferManager's default
constructor is deprecated.
* [storage-aws] Add AmazonUpload
Prevents deprecation errors due to deprecated parameters on Transfer.
* [sbt] mode import to top of file
* [domain] Config defaults to an empty Sources list
* [core] ConfigurationBuilterTest add test for parsing .thorp.conf
* [core] ConfigQuery if no Sources given returns current dir
* [core] rewrote config loader
- Only settings from explicit sources are used
* [changelog] updated
* [core] Remove stray println statements
* [core] SyncLogging tidy up multi-source messages
* [changelog] updated
* [readme] updated
* [core] ConfigQuery added sources()
* [cli] ParseArgs allow specifying multiple sources
* [domain,core,cli] Source datatype changed to Path
* [domain] Sources added to hold multiple paths in order
* [domain] Config sources change datatype to Sources
* [core] Scan sources for .thorp.config and include any sources listed
This allows the inclusion of a `.thorp.config` file in a source with a
single line `source = ....` that causes that other source to also be
synched into the same remote prefix as the current source.
* [core] ConfigurationBuilderTest add more pending tests
* [[core] ConfigurationBuilderTest rewrite using loan-pattern for fixtures
* [core] ConfigOptionTest use TemporaryFolder
* [core] ConfigOptionTest remove unused fields
* [cli] ParseArgsTest don't use get on an Option
* [core] ConfigurationBuilderTest don't use get on Either
* [core] TemporaryFolder Move import to top of file
* [core] TemporaryFolder use Try over try-finally
* [core] ConfigurationBuilderTest don't use get on Either
* [core] TemporaryFolders.withDirectory propogate errors
* [core] TemporaryFolders add writeFile and createFile
* [core] PlanBuilderTest create a plan with two sources with unique files in both
* [core] ActionGenerator only upload file by name in first source
create a plan
two sources
same filename in both
- only upload file in first source
* [domain] LastModified with no params is now()
* [core] PlanBuilderTest 2 sources w/remote only in 2nd src do nothing
* [core] PlanBuilderTest 2 sources w/remote only in 2nd src do nothing
* [domain] RemoteKey map to a file when prefix is empty
* [domain] S3ObjectData defaults to empty
* [core] KeyGenerator Avoid delimiter when empty prefix key
* [core] PlanBuilderTest when remote not in sources delete from remote
* [core] PlanBuilderTest extract helper md5Hash()
* [core] PlanBuilderTest one source a file no matching remote key
* [core] PlanBuildingTest file with matching key and hash do nothing
* [core] PlanBuilderTest file w/matching remote key and different hash
* [core] PlanBuilderTest a remote key with and without local file
* [core] DummyStorageService Use wildcards when selecting more than 6 elements
* [changelog] updated
* [core] Wrap Stream[LocalFile] as LocalFiles
* [core] LocalFiles counts files
* [core] LocalFiles sums file lengths
* [core] Restore logFileScan
* [storage-aws] Lister logs when fetching object summaries
* [storage-aws] Extract ListerLogger
* [core] Synchronise use leftMap
* [core] Syncronise extract assemblePlan
* [core] Wrap Stream[Action] in SyncPlan
* [core] Copy the file count and totalSizeBytes across to SyncPlan
* [cli] Program rename actions as syncPlan
* [cli] Program extract thorpArchive def
* [cli] Program extract createPlan def
* [cli] Program refactoring
* [cli] Program remove println showing version
* [cli] Program rename actions parameter as syncPlan
* [core] ThorpArchive add an index to each action
* [cli] Program make SyncPlan available to ThorpArchive
* [core] Pass SyncTotals to Archive
* [domain] Move SyncTotals into module
* [domain] Pass index and SyncTotals to UploadEventListener
* [domain] UploadEventLogger add file count a size progress bars
* [domain] UploadEventLogger better display stability and add file index
* [cli] Index files in correct order
* [cli] Program extends Synchronise
* [core] Rename Synchronise as PlanBuilder
* [cli] Program add test to check actions don't get reordered from plan
* [core] collect file size totals
* [domain] UploadEventLogger include percentage
* [cli] ProgramTest Use wildcards when selecting more than 6 elements
* [changelog] updated
* [sbt] Specify sonatypeProfileName in commonSettings
This prevents the value being overridded by the `organization` value
from `inThisBuild`.
* [changelog] Updated
* [readme] Updated
* [domain] Config Add batch-mode flag
* [core] ConfigOption Add BatchMode option
* [core] ConfigQuery Add batchMode query
Also replaced verbose exists case clauses with a simple contains.
* [core] ConfigOptions added to replace Seq[ConfigOption]
* [core] Syncronise rename method to createPlan
* [cli] Program rename apply as run
* [storage-aws] S3StorageServiceBuilder stop using IO to create object
* [storage-aws] S3StorageServiceBuilder make default service lazy
* [storage-aws] Rename S3ClientCopier => Copier
* [storage-aws] Rename S3ClientDeleter => Deleter
* [storage-aws] Rename S3ClientObjectLister => Lister
* [storage-aws] Only attach upload listener when in batch mode
Only detects batch mode when selected as a command line option
* [core] Synchronise use leftMap rather than swap.map.swap
* [cli] ParseArgs add `-B` and `--batch` options to enable batch mode
* [core] ThorpArchive logs file uploaded when in batch mode
* [sbt] make name and version available within Scala
Available as `thorp.BuildInfo._`
* [core] ConfigOption Add Version option
* [cli] ParseArgs add command-line options `-V` and `--version`
* [core] ConfigQuery add showVersion query
* [cli] Program shows version then exit
* [cli] Main don't show "Done"
* [sbt] set name for assembly jar
* [travis] run assembly prior to release
* [sbt] disable publishing non-cli or thorp-lib modules
* [travis] alternate format for multiple commands in script