repos / git-pr

a self-hosted git collaboration server
git clone https://github.com/picosh/git-pr.git

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
M cli.go
M pr.go
M __snapshots__/e2e_test.snap
+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
M e2e_test.go
+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