Place repositories (git/oci) behind the Repository interface and use a Factory to create instances of implementations #171
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR refactors the existing Porch code to make it easier to introduce a database cache.
It reinforces the structure of the code so that repository implementations (git/oci) are behind the interface and are only used by calling the interface. The
repoimpl
package is introduced as a package that contains "final" repository implementations. The following list details the refactors:pkg/repoimpl
package is introduced, this package contains a factory for creating implementations of theRepository
type that store packages that are source or target packages for Porch (such as git and oci), that isRepository
implementations that are not Porch internal cachespkg/git' package is moved to
pkg/repoimpl/git`pkg/oci' package is moved to
pkg/repoimpl/oci`repoimpl
factory are inpkg/repoimpl/types
(to avoid circular imports)RepoImplFactory
interface is introduced to create instances of repos (git or oci today)CreateRepoImpl
function inpkg/repoimpl/repoimpl.go
creates an instance of a repo based on the incoming configuration, calling the factory in either git or ociRepoImplOptions
struct containing the options that theRepoImpl
implementations use but the cache does not useCacheFactory
interface is introduced for creating cache implementations, where the implementation of the cache is behind the factory interlaceCacheFactory
implementation is added to the memory cache.