- commit
- da52573
- parent
- b8ce91a
- author
- Eric Bower
- date
- 2024-11-06 22:25:45 -0500 EST
fix: single tenant doesnt require user namespace
4 files changed,
+30,
-8
+3,
-2
1@@ -1,7 +1,8 @@
2
3 [TestE2E - 1]
4-ID RepoID Name Status Patchsets User Date
5-1 test feat: lets build an rnn [open] 1 admin
6+ID RepoID Name Status Patchsets User Date
7+2 test feat: lets build an rnn [open] 1 contributor
8+1 test feat: lets build an rnn [open] 1 admin
9
10 ---
11
M
cli.go
+13,
-4
1@@ -489,14 +489,23 @@ Here's how it works:
2 rawRepoNs = args.First()
3 }
4 repoUsername, repoName := be.SplitRepoNs(rawRepoNs)
5- repoUser := user
6- if repoUsername != "" {
7- repoUser, err = pr.GetUserByName(repoUsername)
8+ var repo *Repo
9+ if repoUsername == "" {
10+ if be.Cfg.CreateRepo == "admin" {
11+ // single tenant default user to admin
12+ repo, _ = pr.GetRepoByName(nil, repoName)
13+ } else {
14+ // multi tenant default user to contributor
15+ repo, _ = pr.GetRepoByName(user, repoName)
16+ }
17+ } else {
18+ repoUser, err := pr.GetUserByName(repoUsername)
19 if err != nil {
20 return err
21 }
22+ repo, _ = pr.GetRepoByName(repoUser, repoName)
23 }
24- repo, _ := pr.GetRepoByName(repoUser, repoName)
25+
26 err = be.CanCreateRepo(repo, user)
27 if err != nil {
28 return err
+5,
-0
1@@ -27,12 +27,17 @@ func testSingleTenantE2E(t *testing.T) {
2 go GitSshServer(suite.cfg, done)
3 // Hack to wait for startup
4 time.Sleep(time.Millisecond * 100)
5+
6+ t.Log("User cannot create repo")
7 _, err := suite.userKey.Cmd(suite.patch, "pr create test")
8 if err == nil {
9 t.Fatal("user should not be able to create a PR")
10 }
11 suite.adminKey.MustCmd(suite.patch, "pr create test")
12
13+ t.Log("User should be able to create a patch")
14+ suite.userKey.MustCmd(suite.patch, "pr create test")
15+
16 t.Log("Snapshot test ls command")
17 actual, err := suite.userKey.Cmd(nil, "pr ls")
18 bail(err)
M
pr.go
+9,
-2
1@@ -147,9 +147,16 @@ func (pr PrCmd) GetRepos() (repos []*Repo, err error) {
2
3 func (pr PrCmd) GetRepoByName(user *User, repoName string) (*Repo, error) {
4 var repo Repo
5- err := pr.Backend.DB.Get(&repo, "SELECT * FROM repos WHERE user_id=? AND name=?", user.ID, repoName)
6+ var err error
7+
8+ if user == nil {
9+ err = pr.Backend.DB.Get(&repo, "SELECT * FROM repos WHERE name=?", repoName)
10+ } else {
11+ err = pr.Backend.DB.Get(&repo, "SELECT * FROM repos WHERE user_id=? AND name=?", user.ID, repoName)
12+ }
13+
14 if err != nil {
15- return nil, fmt.Errorf("repo not found: %s/%s", user.Name, repoName)
16+ return nil, fmt.Errorf("repo not found: %s", repoName)
17 }
18
19 return &repo, nil