-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
11 changed files
with
128 additions
and
6 deletions.
There are no files selected for viewing
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
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
digraph G { | ||
"vcs *" -> "user-lib *"; | ||
"user-lib *" -> "executable (eio)"; | ||
"git-cli" -> "vcs-git-provider"; | ||
eio -> "vcs-git-provider"; | ||
"vcs-git-provider" -> "executable (eio)"; | ||
} |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
digraph G { | ||
"vcs *" -> "user-lib *"; | ||
"user-lib *" -> "executable (eio)"; | ||
"ocaml-git-eio" -> "ocaml-git-provider"; | ||
eio -> "ocaml-git-provider"; | ||
"ocaml-git-provider" -> "executable (eio)"; | ||
} |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
#!/bin/bash -e | ||
|
||
# Change the current working directory to the directory where the script is located | ||
cd "$(dirname "$0")" | ||
|
||
for i in `ls *.dot`; do | ||
echo "Processing $i ..." | ||
dot -Tpng $i -o `echo $i | sed 's/.dot/.png/'` | ||
done |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
digraph G { | ||
"vcs *" -> "user-lib *"; | ||
"user-lib *" -> "executable (blocking)"; | ||
"git-cli" -> "vcs-git-blocking"; | ||
stdlib -> "vcs-git-blocking"; | ||
"vcs-git-blocking" -> "executable (blocking)"; | ||
} |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
# The Power of Traits in `Vcs` | ||
|
||
The `Vcs` library leverages the `provider`-based parametric model to offer a | ||
flexible and adaptable interface for Git interaction. This model, also used in | ||
the `Eio` library (`Eio.Resource`), allows us to define small scopes of | ||
functionality, or `Traits`, within the `Vcs` library. | ||
|
||
## Experience with `providers` | ||
|
||
Our use of the [provider](https://github.com/mbarbin/provider) based parametric | ||
library in `Vcs` serves as a practical, real-world case study of this pattern. | ||
|
||
We aim to bring this pattern to the attention of the community, fostering a | ||
general understanding that can be applied to other projects using the same | ||
pattern. In essence, understanding the parametrized model of `Vcs` equates to | ||
understanding `Eio.Resource`, and vice versa. | ||
|
||
## Granularity of the Interface via Trait Granularity | ||
|
||
The `Trait` design of `provider` allows us to define specific and isolated | ||
sub-functionalities within the `Vcs` library. This granularity enables different | ||
providers to choose which `Trait` they wish to implement, offering a level of | ||
flexibility not possible with a monolithic functor. | ||
|
||
With `Traits`, you can select a provider with the specific set of traits you | ||
need, without changing any other code. As explained | ||
[here](https://mbarbin.github.io/provider/provider/Provider/Interface/index.html#type-t), | ||
provider interfaces come with some notion of phantom types, offering additional | ||
compiler assistance. | ||
|
||
In summary, the use of `Traits` in `Vcs` provides a flexible, adaptable, and | ||
granular interface for Git interaction, promoting a broader understanding and | ||
application of the `provider`-based parametric model. |
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
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