-
-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Project and VCS repository #11
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
In GH-9 [1] the store and configuration for applications has been implemented. In "wand" applications are not standalone but part of a project which in turn is stored in a repository of a VCS like Git [2]. In case of "wand" this can also be a monorepo [3] to manage multiple applications, but there is always only a single project which all these applications are part of. To store project and VCS repository information, some of the newly implemented packages provide the following types: - <T> "pkg/project.Metadata" - A "struct" type that stores information and metadata of a project. - <T> "pkg/project.GoModuleID" - A "struct" type that stores partial information to identify a Go module [4]. - <T> "pkg/vcs.Kind" - A "struct" type that defines the kind of a "pkg/vcs.Repository". - <I> "pkg/vcs.Repository" - A "interface" type to represents a VCS repository that provides methods to receive repository information: - "Kind() Kind" - returns the repository "pkg/vcs.Kind". - "DeriveVersion() error" - derives the repository version based on the "pkg/vcs.Kind". - "Version() interface{}" - returns the repository version. - <T> "pkg/vcs/git.Git" - A "struct" type that implements "pkg/vcs.Repository" to represent a Git [5] repository. - <T> "pkg/vcs/git.Version" - A "struct" type that stores version information and metadata derived from a Git [5] repository. - <T> "pkg/vcs/none.None" - A "struct" type that implements "pkg/vcs.Repository" to represent a nonexistent repository. [1]: #9 [2]: https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control [3]: https://trunkbaseddevelopment.com/monorepos [4]: https://golang.org/ref/mod [5]: https://git-scm.com GH-10
Instead of surrounding the "switch/case" block, that checkt the repository version based on the underlying VCS, with a "if" block to handle the case where no repository type is set, it no simply includes the "none" VCS kind as a noop case. Also the returned error now simply creates a new error instead of formatting the error message as new error. GH-10
Wrapped all error returned from external package to prevent errors become part of the public API. Also the maximum search amount of suitable Git tag candidates in all commits of the current has been extracte into a constant. GH-10
Closed
svengreb
added a commit
that referenced
this pull request
Nov 17, 2020
In GH-15 [1] some parts of the "wand" API have been implemented in form of spell "incantations", "kinds" and "casters", inspired by the fantasy novel "Harry Potter" [2] as an abstract view to define interfaces. In GH-9 [3] and GH-11 [4] the API implementations for an application configuration store as well as project and VCS repository metadata were introduced. These implementations are now usable in a combined form via the basic "wand" API that consists of the following types: - <I> `wand.Wand` - A `interface` type that manages a project and its applications and stores their metadata. Applications are registered using a unique name and the stored metadata can be received based on this name: - `GetAppConfig(appName string) (app.Config, error)` - returns an application configuration. - `GetProjectMetadata() project.Metadata` - returns the project metadata. - `RegisterApp(name, displayName, pathRel string) error` - registers a new application. - <T> `wand.ctxKey` - A `struct` type that serves as context key used to wrap a `wand.Wand`. - <F> `wand.GetCtxKey() interface{}` - A `func` type that returns the key used to wrap a `wand.Wand`. - <F> `wand.WrapCtx(context.Context,Wand) context.Context` - A `func` type that wraps the given `wand.Wand` into the parent context. Use `wand.GetCtxKey() interface{}` to receive the key used to wrap the `wand.Wand`. [1]: #15 [2]: https://en.wikipedia.org/wiki/Harry_Potter [3]: #9 [4]: #11 GH-16
svengreb
added a commit
that referenced
this pull request
Nov 17, 2020
In GH-15 [1] some parts of the "wand" API have been implemented in form of spell "incantations", "kinds" and "casters", inspired by the fantasy novel "Harry Potter" [2] as an abstract view to define interfaces. In GH-9 [3] and GH-11 [4] the API implementations for an application configuration store as well as project and VCS repository metadata were introduced. These implementations are now usable in a combined form via the basic "wand" API that consists of the following types: - <I> `wand.Wand` - A `interface` type that manages a project and its applications and stores their metadata. Applications are registered using a unique name and the stored metadata can be received based on this name: - `GetAppConfig(appName string) (app.Config, error)` - returns an application configuration. - `GetProjectMetadata() project.Metadata` - returns the project metadata. - `RegisterApp(name, displayName, pathRel string) error` - registers a new application. - <T> `wand.ctxKey` - A `struct` type that serves as context key used to wrap a `wand.Wand`. - <F> `wand.GetCtxKey() interface{}` - A `func` type that returns the key used to wrap a `wand.Wand`. - <F> `wand.WrapCtx(context.Context,Wand) context.Context` - A `func` type that wraps the given `wand.Wand` into the parent context. Use `wand.GetCtxKey() interface{}` to receive the key used to wrap the `wand.Wand`. [1]: #15 [2]: https://en.wikipedia.org/wiki/Harry_Potter [3]: #9 [4]: #11 GH-16
svengreb
added a commit
that referenced
this pull request
Nov 17, 2020
In GH-15 [1] some parts of the "wand" API have been implemented in form of spell "incantations", "kinds" and "casters", inspired by the fantasy novel "Harry Potter" [2] as an abstract view to define interfaces. In GH-9 [3] and GH-11 [4] the API implementations for an application configuration store as well as project and VCS repository metadata were introduced. These implementations are now usable in a combined form via the basic "wand" API that consists of the following types: - <I> `wand.Wand` - A `interface` type that manages a project and its applications and stores their metadata. Applications are registered using a unique name and the stored metadata can be received based on this name: - `GetAppConfig(appName string) (app.Config, error)` - returns an application configuration. - `GetProjectMetadata() project.Metadata` - returns the project metadata. - `RegisterApp(name, displayName, pathRel string) error` - registers a new application. - <T> `wand.ctxKey` - A `struct` type that serves as context key used to wrap a `wand.Wand`. - <F> `wand.GetCtxKey() interface{}` - A `func` type that returns the key used to wrap a `wand.Wand`. - <F> `wand.WrapCtx(context.Context,Wand) context.Context` - A `func` type that wraps the given `wand.Wand` into the parent context. Use `wand.GetCtxKey() interface{}` to receive the key used to wrap the `wand.Wand`. [1]: #15 [2]: https://en.wikipedia.org/wiki/Harry_Potter [3]: #9 [4]: #11 Closes GH-16
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Resolves #10