repos / git-pr

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

commit
8014605
parent
d15bf3c
author
Eric Bower
date
2024-07-21 11:02:27 -0400 EDT
refactor: create events within tx
3 files changed,  +92, -27
M cli.go
M pr.go
M cli.go
+1, -1
1@@ -231,7 +231,7 @@ Here's how it works:
2 								return fmt.Errorf("you are not authorized to delete a patchset")
3 							}
4 
5-							err = pr.DeletePatchsetByID(patchsetID)
6+							err = pr.DeletePatchsetByID(user.ID, patchset.PatchRequestID, patchsetID)
7 							if err != nil {
8 								return err
9 							}
M pr.go
+89, -26
  1@@ -39,8 +39,8 @@ type GitPatchRequest interface {
  2 	GetPatchesByPatchsetID(prID int64) ([]*Patch, error)
  3 	UpdatePatchRequestStatus(prID, userID int64, status string) error
  4 	UpdatePatchRequestName(prID, userID int64, name string) error
  5-	DeletePatchsetByID(patchsetID int64) error
  6-	CreateEventLog(eventLog EventLog) error
  7+	DeletePatchsetByID(userID, prID int64, patchsetID int64) error
  8+	CreateEventLog(tx *sqlx.Tx, eventLog EventLog) error
  9 	GetEventLogs() ([]*EventLog, error)
 10 	GetEventLogsByRepoID(repoID string) ([]*EventLog, error)
 11 	GetEventLogsByPrID(prID int64) ([]*EventLog, error)
 12@@ -297,18 +297,35 @@ func (cmd PrCmd) GetPatchRequestByID(prID int64) (*PatchRequest, error) {
 13 
 14 // Status types: open, closed, accepted, reviewed.
 15 func (cmd PrCmd) UpdatePatchRequestStatus(prID int64, userID int64, status string) error {
 16-	_, err := cmd.Backend.DB.Exec(
 17+	tx, err := cmd.Backend.DB.Beginx()
 18+	if err != nil {
 19+		return err
 20+	}
 21+
 22+	defer func() {
 23+		_ = tx.Rollback()
 24+	}()
 25+
 26+	_, err = tx.Exec(
 27 		"UPDATE patch_requests SET status=? WHERE id=?",
 28 		status,
 29 		prID,
 30 	)
 31-	_ = cmd.CreateEventLog(EventLog{
 32+	if err != nil {
 33+		return err
 34+	}
 35+
 36+	err = cmd.CreateEventLog(tx, EventLog{
 37 		UserID:         userID,
 38 		PatchRequestID: sql.NullInt64{Int64: prID},
 39 		Event:          "pr_status_changed",
 40 		Data:           fmt.Sprintf(`{"status":"%s"}`, status),
 41 	})
 42-	return err
 43+	if err != nil {
 44+		return err
 45+	}
 46+
 47+	return tx.Commit()
 48 }
 49 
 50 func (cmd PrCmd) UpdatePatchRequestName(prID int64, userID int64, name string) error {
 51@@ -316,24 +333,41 @@ func (cmd PrCmd) UpdatePatchRequestName(prID int64, userID int64, name string) e
 52 		return fmt.Errorf("must provide name or text in order to update patch request")
 53 	}
 54 
 55-	_, err := cmd.Backend.DB.Exec(
 56+	tx, err := cmd.Backend.DB.Beginx()
 57+	if err != nil {
 58+		return err
 59+	}
 60+
 61+	defer func() {
 62+		_ = tx.Rollback()
 63+	}()
 64+
 65+	_, err = tx.Exec(
 66 		"UPDATE patch_requests SET name=? WHERE id=?",
 67 		name,
 68 		prID,
 69 	)
 70-	_ = cmd.CreateEventLog(EventLog{
 71+	if err != nil {
 72+		return err
 73+	}
 74+
 75+	err = cmd.CreateEventLog(tx, EventLog{
 76 		UserID:         userID,
 77 		PatchRequestID: sql.NullInt64{Int64: prID},
 78 		Event:          "pr_name_changed",
 79 		Data:           fmt.Sprintf(`{"name":"%s"}`, name),
 80 	})
 81-	return err
 82+	if err != nil {
 83+		return err
 84+	}
 85+
 86+	return tx.Commit()
 87 }
 88 
 89-func (cmd PrCmd) CreateEventLog(eventLog EventLog) error {
 90+func (cmd PrCmd) CreateEventLog(tx *sqlx.Tx, eventLog EventLog) error {
 91 	if eventLog.RepoID == "" && eventLog.PatchRequestID.Valid {
 92 		var pr PatchRequest
 93-		err := cmd.Backend.DB.Get(
 94+		err := tx.Get(
 95 			&pr,
 96 			"SELECT repo_id FROM patch_requests WHERE id=?",
 97 			eventLog.PatchRequestID,
 98@@ -348,7 +382,7 @@ func (cmd PrCmd) CreateEventLog(eventLog EventLog) error {
 99 		eventLog.RepoID = pr.RepoID
100 	}
101 
102-	_, err := cmd.Backend.DB.Exec(
103+	_, err := tx.Exec(
104 		"INSERT INTO event_logs (user_id, repo_id, patch_request_id, patchset_id, event, data) VALUES (?, ?, ?, ?, ?, ?)",
105 		eventLog.UserID,
106 		eventLog.RepoID,
107@@ -471,17 +505,20 @@ func (cmd PrCmd) SubmitPatchRequest(repoID string, userID int64, patchset io.Rea
108 		}
109 	}
110 
111-	err = tx.Commit()
112-	if err != nil {
113-		return nil, err
114-	}
115-
116-	_ = cmd.CreateEventLog(EventLog{
117+	err = cmd.CreateEventLog(tx, EventLog{
118 		UserID:         userID,
119 		PatchRequestID: sql.NullInt64{Int64: prID},
120 		PatchsetID:     sql.NullInt64{Int64: patchsetID},
121 		Event:          "pr_created",
122 	})
123+	if err != nil {
124+		return nil, err
125+	}
126+
127+	err = tx.Commit()
128+	if err != nil {
129+		return nil, err
130+	}
131 
132 	var pr PatchRequest
133 	err = cmd.Backend.DB.Get(&pr, "SELECT * FROM patch_requests WHERE id=?", prID)
134@@ -533,33 +570,59 @@ func (cmd PrCmd) SubmitPatchset(prID int64, userID int64, op PatchsetOp, patchse
135 		}
136 	}
137 
138-	err = tx.Commit()
139-	if err != nil {
140-		return fin, err
141-	}
142-
143 	if len(fin) > 0 {
144 		event := "pr_patchset_added"
145 		if op == OpReview {
146 			event = "pr_reviewed"
147 		}
148 
149-		_ = cmd.CreateEventLog(EventLog{
150+		err = cmd.CreateEventLog(tx, EventLog{
151 			UserID:         userID,
152 			PatchRequestID: sql.NullInt64{Int64: prID},
153 			PatchsetID:     sql.NullInt64{Int64: patchsetID},
154 			Event:          event,
155 		})
156+		if err != nil {
157+			return fin, err
158+		}
159+	}
160+
161+	err = tx.Commit()
162+	if err != nil {
163+		return fin, err
164 	}
165 
166 	return fin, err
167 }
168 
169-func (cmd PrCmd) DeletePatchsetByID(patchsetID int64) error {
170-	_, err := cmd.Backend.DB.Exec(
171+func (cmd PrCmd) DeletePatchsetByID(userID int64, prID int64, patchsetID int64) error {
172+	tx, err := cmd.Backend.DB.Beginx()
173+	if err != nil {
174+		return err
175+	}
176+
177+	defer func() {
178+		_ = tx.Rollback()
179+	}()
180+
181+	_, err = tx.Exec(
182 		"DELETE FROM patchsets WHERE id=?", patchsetID,
183 	)
184-	return err
185+	if err != nil {
186+		return err
187+	}
188+
189+	err = cmd.CreateEventLog(tx, EventLog{
190+		UserID:         userID,
191+		PatchRequestID: sql.NullInt64{Int64: prID},
192+		PatchsetID:     sql.NullInt64{Int64: patchsetID},
193+		Event:          "pr_patchset_deleted",
194+	})
195+	if err != nil {
196+		return err
197+	}
198+
199+	return tx.Commit()
200 }
201 
202 func (cmd PrCmd) GetEventLogs() ([]*EventLog, error) {
M tmpl/pr-detail.html
+2, -0
1@@ -29,6 +29,8 @@
2           created pr with <code>{{.FormattedPatchsetID}}</code>
3         {{else if eq .Event "pr_patchset_added"}}
4           added <code>{{.FormattedPatchsetID}}</code>
5+        {{else if eq .Event "pr_patchset_deleted"}}
6+          deleted <code>{{.FormattedPatchsetID}}</code>
7         {{else if eq .Event "pr_reviewed"}}
8           reviewed pr with <code class="pill-review">{{.FormattedPatchsetID}}</code>
9         {{else if eq .Event "pr_patchset_replaced"}}