git-pr

created pr with 75.1 on 2025-08-22T03:15:03Z · by 964fa508
changed pr name to Status comments on 2025-08-22T03:15:55Z · by 964fa508
cmds
checkout latest patchset:
ssh pr.pico.sh print 75 | git am -3
checkout any patchset in a patch request:
ssh pr.pico.sh print 75.[rev] | git am -3
add changes to patch request:
git format-patch main --stdout | ssh pr.pico.sh pr add 75
+12 -12 cli.go #
......@@ -466,15 +466,15 @@ To get started, submit a new patch request:
466466 writer := NewTabWriter(sesh)
467467 fmt.Fprintln(writer, "ID\tRepoID\tName\tStatus\tPatchsets\tUser\tDate")
468468 for _, req := range prs {
469- if onlyAccepted && req.Status != "accepted" {
469+ if onlyAccepted && req.Status != StatusAccepted {
470470 continue
471471 }
472472
473- if onlyClosed && req.Status != "closed" {
473+ if onlyClosed && req.Status != StatusClosed {
474474 continue
475475 }
476476
477- if onlyOpen && req.Status != "open" {
477+ if onlyOpen && req.Status != StatusOpen {
478478 continue
479479 }
480480
......@@ -640,11 +640,11 @@ To get started, submit a new patch request:
640640 return fmt.Errorf("you are not authorized to accept a PR")
641641 }
642642
643- if prq.Status == "accepted" {
643+ if prq.Status == StatusAccepted {
644644 return fmt.Errorf("PR has already been accepted")
645645 }
646646
647- err = pr.UpdatePatchRequestStatus(prID, user.ID, "accepted")
647+ err = pr.UpdatePatchRequestStatus(prID, user.ID, StatusAccepted)
648648 if err != nil {
649649 return err
650650 }
......@@ -701,7 +701,7 @@ To get started, submit a new patch request:
701701 return fmt.Errorf("you are not authorized to change PR status")
702702 }
703703
704- if prq.Status == "closed" {
704+ if prq.Status == StatusClosed {
705705 return fmt.Errorf("PR has already been closed")
706706 }
707707
......@@ -710,7 +710,7 @@ To get started, submit a new patch request:
710710 return err
711711 }
712712
713- err = pr.UpdatePatchRequestStatus(prID, user.ID, "closed")
713+ err = pr.UpdatePatchRequestStatus(prID, user.ID, StatusClosed)
714714 if err != nil {
715715 return err
716716 }
......@@ -760,7 +760,7 @@ To get started, submit a new patch request:
760760 return fmt.Errorf("you are not authorized to change PR status")
761761 }
762762
763- if prq.Status == "open" {
763+ if prq.Status == StatusOpen {
764764 return fmt.Errorf("PR is already open")
765765 }
766766
......@@ -769,7 +769,7 @@ To get started, submit a new patch request:
769769 return err
770770 }
771771
772- err = pr.UpdatePatchRequestStatus(prID, user.ID, "open")
772+ err = pr.UpdatePatchRequestStatus(prID, user.ID, StatusOpen)
773773 if err == nil {
774774 wish.Printf(sesh, "Reopened PR %s (#%d)\n", prq.Name, prq.ID)
775775 }
......@@ -887,17 +887,17 @@ To get started, submit a new patch request:
887887 }
888888
889889 op := OpNormal
890- nextStatus := "open"
890+ nextStatus := StatusOpen
891891 if isReview {
892892 wish.Println(sesh, "Marking patchset as a review")
893893 op = OpReview
894894 } else if isAccept {
895895 wish.Println(sesh, "Marking PR as accepted")
896- nextStatus = "accepted"
896+ nextStatus = StatusAccepted
897897 op = OpAccept
898898 } else if isClose {
899899 wish.Println(sesh, "Marking PR as closed")
900- nextStatus = "closed"
900+ nextStatus = StatusClosed
901901 op = OpClose
902902 }
903903
+10 -1 models.go #
......@@ -7,6 +7,15 @@ import (
77 "github.com/bluekeyes/go-gitdiff/gitdiff"
88 )
99
10+type Status string
11+
12+const (
13+ StatusOpen Status = "open"
14+ StatusClosed Status = "closed"
15+ StatusAccepted Status = "accepted"
16+ StatusReviewed Status = "reviewed"
17+)
18+
1019 // User is a db model for users.
1120 type User struct {
1221 ID int64 `db:"id"`
......@@ -41,7 +50,7 @@ type PatchRequest struct {
4150 RepoID int64 `db:"repo_id"`
4251 Name string `db:"name"`
4352 Text string `db:"text"`
44- Status string `db:"status"`
53+ Status Status `db:"status"`
4554 CreatedAt time.Time `db:"created_at"`
4655 UpdatedAt time.Time `db:"updated_at"`
4756 // only used for aggregate queries
+2 -2 pr.go #
......@@ -43,7 +43,7 @@ type GitPatchRequest interface {
4343 GetPatchsetByID(patchsetID int64) (*Patchset, error)
4444 GetLatestPatchsetByPrID(prID int64) (*Patchset, error)
4545 GetPatchesByPatchsetID(prID int64) ([]*Patch, error)
46- UpdatePatchRequestStatus(prID, userID int64, status string) error
46+ UpdatePatchRequestStatus(prID, userID int64, status Status) error
4747 UpdatePatchRequestName(prID, userID int64, name string) error
4848 DeletePatchsetByID(userID, prID int64, patchsetID int64) error
4949 CreateEventLog(tx *sqlx.Tx, eventLog EventLog) error
......@@ -293,7 +293,7 @@ func (cmd PrCmd) GetPatchRequestByID(prID int64) (*PatchRequest, error) {
293293 }
294294
295295 // Status types: open, closed, accepted, reviewed.
296-func (cmd PrCmd) UpdatePatchRequestStatus(prID int64, userID int64, status string) error {
296+func (cmd PrCmd) UpdatePatchRequestStatus(prID int64, userID int64, status Status) error {
297297 tx, err := cmd.Backend.DB.Beginx()
298298 if err != nil {
299299 return err
+6 -6 web.go #
......@@ -145,8 +145,8 @@ type RepoDetailData struct {
145145 func createPrDataSorter(sort, sortDir string) func(a, b *PrListData) int {
146146 return func(a *PrListData, b *PrListData) int {
147147 if sort == "status" {
148- statusA := strings.ToLower(a.Status)
149- statusB := strings.ToLower(b.Status)
148+ statusA := strings.ToLower(string(a.Status))
149+ statusB := strings.ToLower(string(b.Status))
150150 if sortDir == "asc" {
151151 return strings.Compare(statusA, statusB)
152152 } else {
......@@ -191,9 +191,9 @@ func createPrDataSorter(sort, sortDir string) func(a, b *PrListData) int {
191191
192192 func getPrTableData(web *WebCtx, prs []*PatchRequest, query url.Values) ([]*PrListData, error) {
193193 prdata := []*PrListData{}
194- status := strings.ToLower(query.Get("status"))
194+ status := Status(strings.ToLower(query.Get("status")))
195195 if status == "" {
196- status = "open"
196+ status = StatusOpen
197197 }
198198 username := strings.ToLower(query.Get("user"))
199199 title := strings.ToLower(query.Get("title"))
......@@ -361,7 +361,7 @@ type PrListData struct {
361361 ID int64
362362 DateOrig time.Time
363363 Date string
364- Status string
364+ Status Status
365365 }
366366
367367 func userDetailHandler(w http.ResponseWriter, r *http.Request) {
......@@ -518,7 +518,7 @@ type PrData struct {
518518 ID int64
519519 Title string
520520 Date string
521- Status string
521+ Status Status
522522 }
523523
524524 type PatchFile struct {
Back to top