From 870410be512e49da9c3953430dfbea704af79e93 Mon Sep 17 00:00:00 2001 From: Joel Longtine Date: Mon, 6 Dec 2021 15:30:38 -0700 Subject: [PATCH 1/2] First pass at private repos Signed-off-by: Joel Longtine --- mod/require.go | 23 +++++++++++++++++++++++ mod/require_test.go | 46 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/mod/require.go b/mod/require.go index 4e04ee07..529e93da 100644 --- a/mod/require.go +++ b/mod/require.go @@ -29,6 +29,8 @@ func newRequire(repoName, versionConstraint string) (*Require, error) { return parseGithubRepoName(repoName, versionConstraint) case strings.HasPrefix(repoName, stdlib.ModuleName): return parseDaggerRepoName(repoName, versionConstraint) + case strings.Contains(repoName, ".git"): + return parseGitRepoName(repoName, versionConstraint) default: return nil, fmt.Errorf("repo name does not match suported providers") } @@ -74,6 +76,27 @@ func parseDaggerRepoName(repoName, versionConstraint string) (*Require, error) { }, nil } +// TODO: Get real URL regex +var gitRepoNameRegex = regexp.MustCompile(`^([a-zA-Z0-9_.-]+\.[a-zA-Z0-9]+(?::\d*)?/[a-zA-Z0-9_.-/]+?\.git)([a-zA-Z0-9/_.-]*)?@?([0-9a-zA-Z.-]*)`) + +func parseGitRepoName(repoName, versionConstraint string) (*Require, error) { + repoMatches := gitRepoNameRegex.FindStringSubmatch(repoName) + + if len(repoMatches) < 3 { + return nil, fmt.Errorf("issue when parsing git repo") + } + + return &Require{ + repo: repoMatches[1], + path: repoMatches[2], + version: repoMatches[3], + versionConstraint: versionConstraint, + + cloneRepo: repoMatches[1], + clonePath: repoMatches[2], + }, nil +} + func (r *Require) String() string { return fmt.Sprintf("%s@%s", r.fullPath(), r.version) } diff --git a/mod/require_test.go b/mod/require_test.go index bdc3857a..26e3954d 100644 --- a/mod/require_test.go +++ b/mod/require_test.go @@ -94,6 +94,52 @@ func TestParseArgument(t *testing.T) { version: "26a1d46d1b3c", }, }, + { + name: "Unspecified provider without folder", + in: "dagger.io/dagger/universe.git@main", + want: &Require{ + repo: "dagger.io/dagger/universe.git", + path: "", + version: "main", + }, + }, + { + name: "Unspecified provider without folder", + in: "dagger.io/dagger/universe.git/stdlib/alpha.dagger.io/dagger@v0.1.0", + want: &Require{ + repo: "dagger.io/dagger/universe.git", + path: "/stdlib/alpha.dagger.io/dagger", + version: "v0.1.0", + }, + }, + { + name: "Unspecified provider without folder", + in: "dagger.io/dagger/universe.git/stdlib@v5", + want: &Require{ + repo: "dagger.io/dagger/universe.git", + path: "/stdlib", + version: "v5", + }, + }, + { + name: "Unspecified provider without folder", + in: "dagger.io/dagger/universe.git", + want: &Require{ + repo: "dagger.io/dagger/universe.git", + path: "", + version: "", + }, + }, + { + name: "Unspecified provider without folder", + in: "dagger.io/dagger/universe.git/stdlib/alpha.dagger.io/dagger", + want: &Require{ + repo: "dagger.io/dagger/universe.git", + path: "/stdlib/alpha.dagger.io/dagger", + version: "", + }, + }, + // TODO: Add more tests for ports! } for _, c := range cases { From ec427aff668924a373ca5aac1e220e2d6a411924 Mon Sep 17 00:00:00 2001 From: Joel Longtine Date: Mon, 13 Dec 2021 16:21:08 -0700 Subject: [PATCH 2/2] Clean up tests Signed-off-by: Joel Longtine --- mod/require_test.go | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/mod/require_test.go b/mod/require_test.go index 26e3954d..602abf45 100644 --- a/mod/require_test.go +++ b/mod/require_test.go @@ -95,50 +95,59 @@ func TestParseArgument(t *testing.T) { }, }, { - name: "Unspecified provider without folder", - in: "dagger.io/dagger/universe.git@main", + name: "Custom git provider without folder", + in: "git.blocklayer.com/dagger/universe.git@main", want: &Require{ - repo: "dagger.io/dagger/universe.git", + repo: "git.blocklayer.com/dagger/universe.git", path: "", version: "main", }, }, { - name: "Unspecified provider without folder", - in: "dagger.io/dagger/universe.git/stdlib/alpha.dagger.io/dagger@v0.1.0", + name: "Custom git provider with folder and version", + in: "git.blocklayer.com/dagger/universe.git/stdlib/alpha.dagger.io/dagger@v0.1.0", want: &Require{ - repo: "dagger.io/dagger/universe.git", + repo: "git.blocklayer.com/dagger/universe.git", path: "/stdlib/alpha.dagger.io/dagger", version: "v0.1.0", }, }, { - name: "Unspecified provider without folder", - in: "dagger.io/dagger/universe.git/stdlib@v5", + name: "Custom git provider with folder and version", + in: "git.blocklayer.com/dagger/universe.git/stdlib@v5", want: &Require{ - repo: "dagger.io/dagger/universe.git", + repo: "git.blocklayer.com/dagger/universe.git", path: "/stdlib", version: "v5", }, }, { - name: "Unspecified provider without folder", - in: "dagger.io/dagger/universe.git", + name: "Custom git provider without folder", + in: "git.blocklayer.com/dagger/universe.git", want: &Require{ - repo: "dagger.io/dagger/universe.git", + repo: "git.blocklayer.com/dagger/universe.git", path: "", version: "", }, }, { - name: "Unspecified provider without folder", - in: "dagger.io/dagger/universe.git/stdlib/alpha.dagger.io/dagger", + name: "Custom git provider with folder, no version", + in: "git.blocklayer.com/dagger/universe.git/stdlib/alpha.dagger.io/dagger", want: &Require{ - repo: "dagger.io/dagger/universe.git", + repo: "git.blocklayer.com/dagger/universe.git", path: "/stdlib/alpha.dagger.io/dagger", version: "", }, }, + { + name: "Custom git provider with custom port, folder, and version", + in: "git.blocklayer.com:7999/ops/dagger.git/stuff/here@v5", + want: &Require{ + repo: "git.blocklayer.com:7999/ops/dagger.git", + path: "/stuff/here", + version: "v5", + }, + }, // TODO: Add more tests for ports! }