summaryrefslogtreecommitdiff
path: root/pkg/config/lib
diff options
context:
space:
mode:
authorNicolas Paul <n@nc0.fr>2023-05-31 13:22:43 +0200
committerNicolas Paul <n@nc0.fr>2023-05-31 13:23:13 +0200
commit3e64b1b9323ea17eb8f87dfed6d897683c6196be (patch)
treea68e9fe9a6d76751c07747d5f7308edd1930bb8c /pkg/config/lib
parentde2a79eed5de749470d2d66263f7f9836706f4ec (diff)
Move intern functions into prelude lib to avoid cyclic imports
Signed-off-by: Nicolas Paul <n@nc0.fr>
Diffstat (limited to 'pkg/config/lib')
-rw-r--r--pkg/config/lib/bzr/bzr.go4
-rw-r--r--pkg/config/lib/fossil/fossil.go4
-rw-r--r--pkg/config/lib/git/git.go4
-rw-r--r--pkg/config/lib/git/git.star20
-rw-r--r--pkg/config/lib/hg/hg.go4
-rw-r--r--pkg/config/lib/prelude/prelude.go93
-rw-r--r--pkg/config/lib/svn/svn.go4
7 files changed, 113 insertions, 20 deletions
diff --git a/pkg/config/lib/bzr/bzr.go b/pkg/config/lib/bzr/bzr.go
index 81b0177..53cc2cf 100644
--- a/pkg/config/lib/bzr/bzr.go
+++ b/pkg/config/lib/bzr/bzr.go
@@ -2,7 +2,7 @@ package bzr
import (
_ "embed"
- "go.nc0.fr/svgu/pkg/config"
+ "go.nc0.fr/svgu/pkg/config/lib/prelude"
"go.starlark.net/starlark"
"go.starlark.net/starlarkstruct"
"sync"
@@ -21,7 +21,7 @@ func LoadBzrModule(t *starlark.Thread) (starlark.StringDict, error) {
once.Do(func() {
env := starlark.StringDict{
"module": starlark.NewBuiltin("module",
- config.InternModule),
+ prelude.InternModule),
"make_module": starlark.NewBuiltin("mod",
starlarkstruct.MakeModule),
}
diff --git a/pkg/config/lib/fossil/fossil.go b/pkg/config/lib/fossil/fossil.go
index bf49882..bc7f6da 100644
--- a/pkg/config/lib/fossil/fossil.go
+++ b/pkg/config/lib/fossil/fossil.go
@@ -2,7 +2,7 @@ package fossil
import (
_ "embed"
- "go.nc0.fr/svgu/pkg/config"
+ "go.nc0.fr/svgu/pkg/config/lib/prelude"
"go.starlark.net/starlark"
"go.starlark.net/starlarkstruct"
"sync"
@@ -21,7 +21,7 @@ func LoadFossilModule(t *starlark.Thread) (starlark.StringDict, error) {
once.Do(func() {
env := starlark.StringDict{
"module": starlark.NewBuiltin("module",
- config.InternModule),
+ prelude.InternModule),
"make_module": starlark.NewBuiltin("mod",
starlarkstruct.MakeModule),
}
diff --git a/pkg/config/lib/git/git.go b/pkg/config/lib/git/git.go
index f1e0607..d9dbe71 100644
--- a/pkg/config/lib/git/git.go
+++ b/pkg/config/lib/git/git.go
@@ -4,7 +4,7 @@ package git
import (
_ "embed"
- "go.nc0.fr/svgu/pkg/config"
+ "go.nc0.fr/svgu/pkg/config/lib/prelude"
"go.starlark.net/starlark"
"go.starlark.net/starlarkstruct"
"sync"
@@ -23,7 +23,7 @@ func LoadGitModule(t *starlark.Thread) (starlark.StringDict, error) {
once.Do(func() {
env := starlark.StringDict{
"module": starlark.NewBuiltin("module",
- config.InternModule),
+ prelude.InternModule),
"make_module": starlark.NewBuiltin("mod",
starlarkstruct.MakeModule),
}
diff --git a/pkg/config/lib/git/git.star b/pkg/config/lib/git/git.star
index debefc6..cf31524 100644
--- a/pkg/config/lib/git/git.star
+++ b/pkg/config/lib/git/git.star
@@ -4,13 +4,13 @@ _GIT = "git"
# https://github.com/github/renaming
_GITHUB_DEFAULT_INSTANCE = "https://github.com"
-_GITHUB_DEFAULT_MASTER = "main"
+_GITHUB_DEFAULT_REF = "main"
def _github(
name,
user,
repo,
- ref = _GITHUB_DEFAULT_MASTER,
+ ref = _GITHUB_DEFAULT_REF,
instance = _GITHUB_DEFAULT_INSTANCE):
"""Register a module hosted on GitHub.
@@ -19,7 +19,7 @@ def _github(
user (str): The name of the user or organization.
repo (str): The name of the repository.
ref (str): The name of the ref.
- Defaults to `git.GITHUB_DEFAULT_MASTER`.
+ Defaults to `git.GITHUB_DEFAULT_REF`.
instance (str): The name of the instance.
Defaults to `git.GITHUB_DEFAULT_INSTANCE`.
"""
@@ -34,7 +34,7 @@ def _github(
)
_SOURCEHUT_DEFAULT_INSTANCE = "git.sr.ht"
-_SOURCEHUT_DEFAULT_MASTER = "master"
+_SOURCEHUT_DEFAULT_REF = "master"
# TODO(nc0): See the status for organizations and groups, as they are expected
# to use another symbol than `~`.
@@ -42,7 +42,7 @@ def _sourcehut(
name,
user,
repo,
- ref = _SOURCEHUT_DEFAULT_MASTER,
+ ref = _SOURCEHUT_DEFAULT_REF,
instance = _SOURCEHUT_DEFAULT_INSTANCE):
"""Register a module hosted on Source Hut's Git hosting.
@@ -51,7 +51,7 @@ def _sourcehut(
user (str): The name of the user or organization.
repo (str): The name of the repository.
ref (str): The name of the ref.
- Defaults to `git.SOURCEHUT_DEFAULT_MASTER`.
+ Defaults to `git.SOURCEHUT_DEFAULT_REF`.
instance (str): The name of the instance.
Defaults to `git.SOURCEHUT_DEFAULT_INSTANCE`.
"""
@@ -68,13 +68,13 @@ def _sourcehut(
# https://about.gitlab.com/blog/2021/03/10/new-git-default-branch-name/
_GITLAB_DEFAULT_INSTANCE = "https://gitlab.com"
-_GITLAB_DEFAULT_MASTER = "main"
+_GITLAB_DEFAULT_REF = "main"
def _gitlab(
name,
user,
repo,
- ref = _GITLAB_DEFAULT_MASTER,
+ ref = _GITLAB_DEFAULT_REF,
instance = _GITLAB_DEFAULT_INSTANCE):
"""Register a module hosted on GitLab.
@@ -83,7 +83,7 @@ def _gitlab(
user (str): The name of the user or organization.
repo (str): The name of the repository.
ref (str): The name of the ref.
- Defaults to `git.GITLAB_DEFAULT_MASTER`.
+ Defaults to `git.GITLAB_DEFAULT_REF`.
instance (str): The name of the instance.
Defaults to `git.GITLAB_DEFAULT_INSTANCE`.
"""
@@ -130,7 +130,7 @@ def _bitbucket(
repo = "%s/%s/%s" % (instance, workspace, repo),
dir = "%s/%s/%s/src/%s{/dir}" % (instance, workspace, repo, ref),
file = "%s/%s/%s/src/%s{/dir}/{file}#{file}-{line}" %
- (instance, user, repo, ref),
+ (instance, workspace, repo, ref),
)
_GITILES_DEFAULT_REF = "master"
diff --git a/pkg/config/lib/hg/hg.go b/pkg/config/lib/hg/hg.go
index d06e5aa..edba44a 100644
--- a/pkg/config/lib/hg/hg.go
+++ b/pkg/config/lib/hg/hg.go
@@ -2,7 +2,7 @@ package hg
import (
_ "embed"
- "go.nc0.fr/svgu/pkg/config"
+ "go.nc0.fr/svgu/pkg/config/lib/prelude"
"go.starlark.net/starlark"
"go.starlark.net/starlarkstruct"
"sync"
@@ -21,7 +21,7 @@ func LoadHgModule(t *starlark.Thread) (starlark.StringDict, error) {
once.Do(func() {
env := starlark.StringDict{
"module": starlark.NewBuiltin("module",
- config.InternModule),
+ prelude.InternModule),
"make_module": starlark.NewBuiltin("mod",
starlarkstruct.MakeModule),
}
diff --git a/pkg/config/lib/prelude/prelude.go b/pkg/config/lib/prelude/prelude.go
new file mode 100644
index 0000000..c1e42f4
--- /dev/null
+++ b/pkg/config/lib/prelude/prelude.go
@@ -0,0 +1,93 @@
+package prelude
+
+import (
+ "fmt"
+ "go.nc0.fr/svgu/pkg/types"
+ "go.starlark.net/starlark"
+ "strings"
+)
+
+// https://stackoverflow.com/questions/1976007/what-characters-are-forbidden-in-windows-and-linux-directory-names
+const invalidName string = "..\\/<>:\"|?* \t\n\r\b\findex"
+
+// Registered represents the index of registered modules.
+var Registered types.Index
+
+// InternIndex represents the built-in function "index".
+// index(domain) initializes a new index with the given domain.
+func InternIndex(_ *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple,
+ kwargs []starlark.Tuple) (starlark.Value, error) {
+ var domain string
+ if err := starlark.UnpackArgs("index", args, kwargs,
+ "domain", &domain); err != nil {
+ return nil, err
+ }
+
+ Registered.SetDomain(domain)
+
+ return starlark.None, nil
+}
+
+// InternModule represents the built-in function "module".
+// module(name, vcs, repo, dir, file) registers a new module into the
+// index.
+func InternModule(_ *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple,
+ kwargs []starlark.Tuple) (starlark.Value, error) {
+
+ var name, vcs, repo, dir, file string
+ if err := starlark.UnpackArgs("module", args, kwargs, "name",
+ &name, "vcs", &vcs, "repo", &repo, "dir", &dir, "file", &file); err != nil {
+ return nil, err
+ }
+
+ if Registered.Domain == "" {
+ return nil, fmt.Errorf("index not initialized")
+ }
+
+ if name == "" {
+ return nil, fmt.Errorf("module name cannot be empty")
+ }
+
+ if vcs == "" {
+ return nil, fmt.Errorf("module %q vcs cannot be empty", name)
+ }
+
+ if repo == "" {
+ return nil, fmt.Errorf("module %q repo cannot be empty", name)
+ }
+
+ // Check for name conditions.
+ if strings.Contains(invalidName, name) {
+ return nil, fmt.Errorf("module %q name is invalid", name)
+ }
+
+ if Registered.CheckModule(name) {
+ return nil, fmt.Errorf("module %q already exists", name)
+ }
+
+ var v types.Vcs
+ switch vcs {
+ case "git":
+ v = types.VcsGit
+ case "hg":
+ v = types.VcsMercurial
+ case "svn":
+ v = types.VcsSubversion
+ case "fossil":
+ v = types.VcsFossil
+ case "bzr":
+ v = types.VcsBazaar
+ default:
+ return nil, fmt.Errorf("unknown vcs %q", vcs)
+ }
+
+ Registered.AddModule(name, types.Module{
+ Path: name,
+ Vcs: v,
+ Repo: repo,
+ Dir: dir,
+ File: file,
+ })
+
+ return starlark.None, nil
+}
diff --git a/pkg/config/lib/svn/svn.go b/pkg/config/lib/svn/svn.go
index 6d71259..d68f3ec 100644
--- a/pkg/config/lib/svn/svn.go
+++ b/pkg/config/lib/svn/svn.go
@@ -2,7 +2,7 @@ package svn
import (
_ "embed"
- "go.nc0.fr/svgu/pkg/config"
+ "go.nc0.fr/svgu/pkg/config/lib/prelude"
"go.starlark.net/starlark"
"go.starlark.net/starlarkstruct"
"sync"
@@ -21,7 +21,7 @@ func LoadSvnModule(t *starlark.Thread) (starlark.StringDict, error) {
once.Do(func() {
env := starlark.StringDict{
"module": starlark.NewBuiltin("module",
- config.InternModule),
+ prelude.InternModule),
"make_module": starlark.NewBuiltin("mod",
starlarkstruct.MakeModule),
}