repos / git-pr

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

commit
812fb51
parent
34e6566
author
Eric Bower
date
2025-08-22 10:15:41 -0400 EDT
fix: linter
8 files changed,  +80, -50
M cli.go
M web.go
A .golangci.yml
+12, -0
 1@@ -0,0 +1,12 @@
 2+version: "2"
 3+
 4+linters:
 5+  enable:
 6+    - godot
 7+
 8+formatters:
 9+  enable:
10+    - goimports
11+
12+run:
13+  timeout: 10m
M Makefile
+1, -1
1@@ -9,7 +9,7 @@ fmt:
2 .PHONY: fmt
3 
4 lint:
5-	golangci-lint run -E goimports -E godot --timeout 10m
6+	golangci-lint run
7 .PHONY: lint
8 
9 test:
M cli.go
+15, -15
  1@@ -77,13 +77,13 @@ func prSummary(be *Backend, pr GitPatchRequest, sesh ssh.Session, prID int64) er
  2 	wish.Printf(sesh, "Repo: %s\n\n", be.CreateRepoNs(repoUser.Name, repo.Name))
  3 
  4 	writer := NewTabWriter(sesh)
  5-	fmt.Fprintln(writer, "ID\tName\tStatus\tDate")
  6-	fmt.Fprintf(
  7+	_, _ = fmt.Fprintln(writer, "ID\tName\tStatus\tDate")
  8+	_, _ = fmt.Fprintf(
  9 		writer,
 10 		"%d\t%s\t[%s]\t%s\n",
 11 		request.ID, request.Name, request.Status, request.CreatedAt.Format(be.Cfg.TimeFormat),
 12 	)
 13-	writer.Flush()
 14+	_ = writer.Flush()
 15 
 16 	patchsets, err := pr.GetPatchsetsByPrID(prID)
 17 	if err != nil {
 18@@ -93,7 +93,7 @@ func prSummary(be *Backend, pr GitPatchRequest, sesh ssh.Session, prID int64) er
 19 	wish.Printf(sesh, "\nPatchsets\n====\n")
 20 
 21 	writerSet := NewTabWriter(sesh)
 22-	fmt.Fprintln(writerSet, "ID\tType\tUser\tDate")
 23+	_, _ = fmt.Fprintln(writerSet, "ID\tType\tUser\tDate")
 24 	for _, patchset := range patchsets {
 25 		user, err := pr.GetUserByID(patchset.UserID)
 26 		if err != nil {
 27@@ -105,7 +105,7 @@ func prSummary(be *Backend, pr GitPatchRequest, sesh ssh.Session, prID int64) er
 28 			isReview = "[review]"
 29 		}
 30 
 31-		fmt.Fprintf(
 32+		_, _ = fmt.Fprintf(
 33 			writerSet,
 34 			"%s\t%s\t%s\t%s\n",
 35 			getFormattedPatchsetID(patchset.ID),
 36@@ -114,7 +114,7 @@ func prSummary(be *Backend, pr GitPatchRequest, sesh ssh.Session, prID int64) er
 37 			patchset.CreatedAt.Format(be.Cfg.TimeFormat),
 38 		)
 39 	}
 40-	writerSet.Flush()
 41+	_ = writerSet.Flush()
 42 
 43 	latest, err := getPatchsetFromOpt(patchsets, "")
 44 	if err != nil {
 45@@ -130,10 +130,10 @@ func prSummary(be *Backend, pr GitPatchRequest, sesh ssh.Session, prID int64) er
 46 
 47 	opatches := patches
 48 	w := NewTabWriter(sesh)
 49-	fmt.Fprintln(w, "Idx\tTitle\tCommit\tAuthor\tDate")
 50+	_, _ = fmt.Fprintln(w, "Idx\tTitle\tCommit\tAuthor\tDate")
 51 	for idx, patch := range opatches {
 52 		timestamp := patch.AuthorDate.Format(be.Cfg.TimeFormat)
 53-		fmt.Fprintf(
 54+		_, _ = fmt.Fprintf(
 55 			w,
 56 			"%d\t%s\t%s\t%s <%s>\t%s\n",
 57 			idx,
 58@@ -144,7 +144,7 @@ func prSummary(be *Backend, pr GitPatchRequest, sesh ssh.Session, prID int64) er
 59 			timestamp,
 60 		)
 61 	}
 62-	w.Flush()
 63+	_ = w.Flush()
 64 	return nil
 65 }
 66 
 67@@ -263,7 +263,7 @@ To get started, submit a new patch request:
 68 					}
 69 
 70 					writer := NewTabWriter(sesh)
 71-					fmt.Fprintln(writer, "RepoID\tPrID\tPatchsetID\tEvent\tCreated\tData")
 72+					_, _ = fmt.Fprintln(writer, "RepoID\tPrID\tPatchsetID\tEvent\tCreated\tData")
 73 					for _, eventLog := range eventLogs {
 74 						repo, err := pr.GetRepoByID(eventLog.RepoID.Int64)
 75 						if err != nil {
 76@@ -275,7 +275,7 @@ To get started, submit a new patch request:
 77 							be.Logger.Error("repo user not found", "repo", repo, "err", err)
 78 							continue
 79 						}
 80-						fmt.Fprintf(
 81+						_, _ = fmt.Fprintf(
 82 							writer,
 83 							"%s\t%d\t%s\t%s\t%s\t%s\n",
 84 							be.CreateRepoNs(repoUser.Name, repo.Name),
 85@@ -286,7 +286,7 @@ To get started, submit a new patch request:
 86 							eventLog.Data,
 87 						)
 88 					}
 89-					writer.Flush()
 90+					_ = writer.Flush()
 91 					return nil
 92 				},
 93 			},
 94@@ -464,7 +464,7 @@ To get started, submit a new patch request:
 95 							onlyMine := cCtx.Bool("mine")
 96 
 97 							writer := NewTabWriter(sesh)
 98-							fmt.Fprintln(writer, "ID\tRepoID\tName\tStatus\tPatchsets\tUser\tDate")
 99+							_, _ = fmt.Fprintln(writer, "ID\tRepoID\tName\tStatus\tPatchsets\tUser\tDate")
100 							for _, req := range prs {
101 								if onlyAccepted && req.Status != StatusAccepted {
102 									continue
103@@ -506,7 +506,7 @@ To get started, submit a new patch request:
104 									continue
105 								}
106 
107-								fmt.Fprintf(
108+								_, _ = fmt.Fprintf(
109 									writer,
110 									"%d\t%s\t%s\t[%s]\t%d\t%s\t%s\n",
111 									req.ID,
112@@ -518,7 +518,7 @@ To get started, submit a new patch request:
113 									req.CreatedAt.Format(be.Cfg.TimeFormat),
114 								)
115 							}
116-							writer.Flush()
117+							_ = writer.Flush()
118 							return nil
119 						},
120 					},
M contrib/dev/main.go
+7, -3
 1@@ -29,7 +29,7 @@ func main() {
 2 	dataDir := util.CreateTmpDir()
 3 	defer func() {
 4 		if *cleanupFlag {
 5-			os.RemoveAll(dataDir)
 6+			_ = os.RemoveAll(dataDir)
 7 		}
 8 	}()
 9 
10@@ -39,11 +39,15 @@ func main() {
11 	cfg := git.NewGitCfg(logger)
12 
13 	s := git.GitSshServer(cfg)
14-	go s.ListenAndServe()
15+	go func() {
16+		_ = s.ListenAndServe()
17+	}()
18 	time.Sleep(time.Millisecond * 100)
19 	w := git.GitWebServer(cfg)
20 	addr := fmt.Sprintf("%s:%s", cfg.Host, cfg.WebPort)
21-	go http.ListenAndServe(addr, w)
22+	go func() {
23+		_ = http.ListenAndServe(addr, w)
24+	}()
25 
26 	// Hack to wait for startup
27 	time.Sleep(time.Millisecond * 100)
M e2e_test.go
+10, -6
 1@@ -21,11 +21,13 @@ func testSingleTenantE2E(t *testing.T) {
 2 	t.Log("single tenant end-to-end tests")
 3 	dataDir := util.CreateTmpDir()
 4 	defer func() {
 5-		os.RemoveAll(dataDir)
 6+		_ = os.RemoveAll(dataDir)
 7 	}()
 8 	suite := setupTest(dataDir, cfgSingleTenantTmpl)
 9 	s := GitSshServer(suite.cfg)
10-	go s.ListenAndServe()
11+	go func() {
12+		_ = s.ListenAndServe()
13+	}()
14 	// Hack to wait for startup
15 	time.Sleep(time.Millisecond * 100)
16 
17@@ -44,18 +46,20 @@ func testSingleTenantE2E(t *testing.T) {
18 	bail(err)
19 	snaps.MatchSnapshot(t, actual)
20 
21-	s.Shutdown(context.Background())
22+	_ = s.Shutdown(context.Background())
23 }
24 
25 func testMultiTenantE2E(t *testing.T) {
26 	t.Log("multi tenant end-to-end tests")
27 	dataDir := util.CreateTmpDir()
28 	defer func() {
29-		os.RemoveAll(dataDir)
30+		_ = os.RemoveAll(dataDir)
31 	}()
32 	suite := setupTest(dataDir, cfgMultiTenantTmpl)
33 	s := GitSshServer(suite.cfg)
34-	go s.ListenAndServe()
35+	go func() {
36+		_ = s.ListenAndServe()
37+	}()
38 
39 	time.Sleep(time.Millisecond * 100)
40 
41@@ -121,7 +125,7 @@ func testMultiTenantE2E(t *testing.T) {
42 	bail(err)
43 	snaps.MatchSnapshot(t, actual)
44 
45-	s.Shutdown(context.Background())
46+	_ = s.Shutdown(context.Background())
47 }
48 
49 type TestSuite struct {
M sqlite.go
+1, -1
1@@ -208,7 +208,7 @@ func SqliteOpen(dsn string, logger *slog.Logger) (*sqlx.DB, error) {
2 
3 	err = sqliteUpgrade(db)
4 	if err != nil {
5-		db.Close()
6+		_ = db.Close()
7 		return nil, err
8 	}
9 
M util/util.go
+9, -5
 1@@ -26,8 +26,8 @@ func CreateCfgFile(dataDir, cfgTmpl string, adminKey UserSSH) string {
 2 	if err != nil {
 3 		panic(err)
 4 	}
 5-	_, _ = cfgFi.WriteString(fmt.Sprintf(cfgTmpl, dataDir, adminKey.Public()))
 6-	cfgFi.Close()
 7+	_, _ = fmt.Fprintf(cfgFi, cfgTmpl, dataDir, adminKey.Public())
 8+	_ = cfgFi.Close()
 9 	return cfgPath
10 }
11 
12@@ -71,13 +71,17 @@ func (s UserSSH) Cmd(patch []byte, cmd string) (string, error) {
13 	if err != nil {
14 		return "", err
15 	}
16-	defer client.Close()
17+	defer func() {
18+		_ = client.Close()
19+	}()
20 
21 	session, err := client.NewSession()
22 	if err != nil {
23 		return "", err
24 	}
25-	defer session.Close()
26+	defer func() {
27+		_ = session.Close()
28+	}()
29 
30 	stdinPipe, err := session.StdinPipe()
31 	if err != nil {
32@@ -100,7 +104,7 @@ func (s UserSSH) Cmd(patch []byte, cmd string) (string, error) {
33 		}
34 	}
35 
36-	stdinPipe.Close()
37+	_ = stdinPipe.Close()
38 
39 	if err := session.Wait(); err != nil {
40 		return "", err
M web.go
+25, -19
 1@@ -584,26 +584,32 @@ func createPrDetail(page string) http.HandlerFunc {
 2 
 3 		var pr *PatchRequest
 4 		var ps *Patchset
 5-		if page == "pr" {
 6-			pr, err = web.Pr.GetPatchRequestByID(int64(prID))
 7-			if err != nil {
 8-				web.Pr.Backend.Logger.Error("cannot get prs", "err", err)
 9-				w.WriteHeader(http.StatusInternalServerError)
10-				return
11-			}
12-		} else if page == "ps" || page == "rd" {
13-			ps, err = web.Pr.GetPatchsetByID(int64(prID))
14-			if err != nil {
15-				web.Pr.Backend.Logger.Error("cannot get patchset", "err", err)
16-				w.WriteHeader(http.StatusInternalServerError)
17-				return
18+		switch page {
19+		case "pr":
20+			{
21+				pr, err = web.Pr.GetPatchRequestByID(int64(prID))
22+				if err != nil {
23+					web.Pr.Backend.Logger.Error("cannot get prs", "err", err)
24+					w.WriteHeader(http.StatusInternalServerError)
25+					return
26+				}
27 			}
28+		case "ps":
29+		case "rd":
30+			{
31+				ps, err = web.Pr.GetPatchsetByID(int64(prID))
32+				if err != nil {
33+					web.Pr.Backend.Logger.Error("cannot get patchset", "err", err)
34+					w.WriteHeader(http.StatusInternalServerError)
35+					return
36+				}
37 
38-			pr, err = web.Pr.GetPatchRequestByID(int64(ps.PatchRequestID))
39-			if err != nil {
40-				web.Pr.Backend.Logger.Error("cannot get pr", "err", err)
41-				w.WriteHeader(http.StatusInternalServerError)
42-				return
43+				pr, err = web.Pr.GetPatchRequestByID(int64(ps.PatchRequestID))
44+				if err != nil {
45+					web.Pr.Backend.Logger.Error("cannot get pr", "err", err)
46+					w.WriteHeader(http.StatusInternalServerError)
47+					return
48+				}
49 			}
50 		}
51 
52@@ -685,7 +691,7 @@ func createPrDetail(page string) http.HandlerFunc {
53 				if psID != data.ID {
54 					continue
55 				}
56-				if !data.Patchset.Review {
57+				if !data.Review {
58 					continue
59 				}
60