Skip to content

Commit 9dfa002

Browse files
committed
refactor
1 parent 057be7b commit 9dfa002

31 files changed

+480
-794
lines changed

build/generate-emoji.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,13 @@ func main() {
6060
// generate data
6161
buf, err := generate()
6262
if err != nil {
63-
log.Fatal(err)
63+
log.Fatalf("generate err: %v", err)
6464
}
6565

6666
// write
6767
err = os.WriteFile(*flagOut, buf, 0o644)
6868
if err != nil {
69-
log.Fatal(err)
69+
log.Fatalf("WriteFile err: %v", err)
7070
}
7171
}
7272

cmd/hook.go

+35-54
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"context"
1010
"fmt"
1111
"io"
12-
"net/http"
1312
"os"
1413
"strconv"
1514
"strings"
@@ -258,14 +257,9 @@ Gitea or set your environment appropriately.`, "")
258257
hookOptions.OldCommitIDs = oldCommitIDs
259258
hookOptions.NewCommitIDs = newCommitIDs
260259
hookOptions.RefFullNames = refFullNames
261-
statusCode, msg := private.HookPreReceive(ctx, username, reponame, hookOptions)
262-
switch statusCode {
263-
case http.StatusOK:
264-
// no-op
265-
case http.StatusInternalServerError:
266-
return fail(ctx, "HookPreReceive: Internal Server Error (500)", msg)
267-
default:
268-
return fail(ctx, fmt.Sprintf("HookPreReceive: %s", msg), msg)
260+
extra := private.HookPreReceive(ctx, username, reponame, hookOptions)
261+
if extra.HasError() {
262+
return fail(ctx, extra.UserMsg, "HookPreReceive(batch) failed: %v", extra.Error)
269263
}
270264
count = 0
271265
lastline = 0
@@ -286,12 +280,9 @@ Gitea or set your environment appropriately.`, "")
286280

287281
fmt.Fprintf(out, " Checking %d references\n", count)
288282

289-
statusCode, msg := private.HookPreReceive(ctx, username, reponame, hookOptions)
290-
switch statusCode {
291-
case http.StatusInternalServerError:
292-
return fail(ctx, "Internal Server Error", msg)
293-
case http.StatusForbidden:
294-
return fail(ctx, msg, "")
283+
extra := private.HookPreReceive(ctx, username, reponame, hookOptions)
284+
if extra.HasError() {
285+
return fail(ctx, extra.UserMsg, "HookPreReceive(last) failed: %v", extra.Error)
295286
}
296287
} else if lastline > 0 {
297288
fmt.Fprintf(out, "\n")
@@ -395,11 +386,11 @@ Gitea or set your environment appropriately.`, "")
395386
hookOptions.OldCommitIDs = oldCommitIDs
396387
hookOptions.NewCommitIDs = newCommitIDs
397388
hookOptions.RefFullNames = refFullNames
398-
resp, err := private.HookPostReceive(ctx, repoUser, repoName, hookOptions)
399-
if resp == nil {
389+
resp, extra := private.HookPostReceive(ctx, repoUser, repoName, hookOptions)
390+
if extra.HasError() {
400391
_ = dWriter.Close()
401392
hookPrintResults(results)
402-
return fail(ctx, "Internal Server Error", err)
393+
return fail(ctx, extra.UserMsg, "HookPostReceive failed: %v", extra.Error)
403394
}
404395
wasEmpty = wasEmpty || resp.RepoWasEmpty
405396
results = append(results, resp.Results...)
@@ -410,9 +401,9 @@ Gitea or set your environment appropriately.`, "")
410401
if count == 0 {
411402
if wasEmpty && masterPushed {
412403
// We need to tell the repo to reset the default branch to master
413-
err := private.SetDefaultBranch(ctx, repoUser, repoName, "master")
414-
if err != nil {
415-
return fail(ctx, "Internal Server Error", "SetDefaultBranch failed with Error: %v", err)
404+
extra := private.SetDefaultBranch(ctx, repoUser, repoName, "master")
405+
if extra.HasError() {
406+
return fail(ctx, extra.UserMsg, "SetDefaultBranch failed: %v", extra.Error)
416407
}
417408
}
418409
fmt.Fprintf(out, "Processed %d references in total\n", total)
@@ -428,11 +419,11 @@ Gitea or set your environment appropriately.`, "")
428419

429420
fmt.Fprintf(out, " Processing %d references\n", count)
430421

431-
resp, err := private.HookPostReceive(ctx, repoUser, repoName, hookOptions)
422+
resp, extra := private.HookPostReceive(ctx, repoUser, repoName, hookOptions)
432423
if resp == nil {
433424
_ = dWriter.Close()
434425
hookPrintResults(results)
435-
return fail(ctx, "Internal Server Error", err)
426+
return fail(ctx, extra.UserMsg, "HookPostReceive failed: %v", extra.Error)
436427
}
437428
wasEmpty = wasEmpty || resp.RepoWasEmpty
438429
results = append(results, resp.Results...)
@@ -441,9 +432,9 @@ Gitea or set your environment appropriately.`, "")
441432

442433
if wasEmpty && masterPushed {
443434
// We need to tell the repo to reset the default branch to master
444-
err := private.SetDefaultBranch(ctx, repoUser, repoName, "master")
445-
if err != nil {
446-
return fail(ctx, "Internal Server Error", "SetDefaultBranch failed with Error: %v", err)
435+
extra := private.SetDefaultBranch(ctx, repoUser, repoName, "master")
436+
if extra.HasError() {
437+
return fail(ctx, extra.UserMsg, "SetDefaultBranch failed: %v", extra.Error)
447438
}
448439
}
449440
_ = dWriter.Close()
@@ -501,7 +492,7 @@ Gitea or set your environment appropriately.`, "")
501492
}
502493

503494
if git.CheckGitVersionAtLeast("2.29") != nil {
504-
return fail(ctx, "Internal Server Error", "git not support proc-receive.")
495+
return fail(ctx, "No proc-receive support", "current git version doesn't support proc-receive.")
505496
}
506497

507498
reader := bufio.NewReader(os.Stdin)
@@ -531,19 +522,19 @@ Gitea or set your environment appropriately.`, "")
531522

532523
index := bytes.IndexByte(rs.Data, byte(0))
533524
if index >= len(rs.Data) {
534-
return fail(ctx, "Internal Server Error", "pkt-line: format error "+fmt.Sprint(rs.Data))
525+
return fail(ctx, "Protocol: format error", "pkt-line: format error "+fmt.Sprint(rs.Data))
535526
}
536527

537528
if index < 0 {
538529
if len(rs.Data) == 10 && rs.Data[9] == '\n' {
539530
index = 9
540531
} else {
541-
return fail(ctx, "Internal Server Error", "pkt-line: format error "+fmt.Sprint(rs.Data))
532+
return fail(ctx, "Protocol: format error", "pkt-line: format error "+fmt.Sprint(rs.Data))
542533
}
543534
}
544535

545536
if string(rs.Data[0:index]) != VersionHead {
546-
return fail(ctx, "Internal Server Error", "Received unsupported version: %s", string(rs.Data[0:index]))
537+
return fail(ctx, "Protocol: version error", "Received unsupported version: %s", string(rs.Data[0:index]))
547538
}
548539
requestOptions = strings.Split(string(rs.Data[index+1:]), " ")
549540

@@ -627,9 +618,9 @@ Gitea or set your environment appropriately.`, "")
627618
}
628619

629620
// 3. run hook
630-
resp, err := private.HookProcReceive(ctx, repoUser, repoName, hookOptions)
631-
if err != nil {
632-
return fail(ctx, "Internal Server Error", "run proc-receive hook failed :%v", err)
621+
resp, extra := private.HookProcReceive(ctx, repoUser, repoName, hookOptions)
622+
if extra.HasError() {
623+
return fail(ctx, extra.UserMsg, "HookProcReceive failed: %v", extra.Error)
633624
}
634625

635626
// 4. response result to service
@@ -730,33 +721,33 @@ func readPktLine(ctx context.Context, in *bufio.Reader, requestType pktLineType)
730721
for i := 0; i < 4; i++ {
731722
lengthBytes[i], err = in.ReadByte()
732723
if err != nil {
733-
return nil, fail(ctx, "Internal Server Error", "Pkt-Line: read stdin failed : %v", err)
724+
return nil, fail(ctx, "Protocol: stdin error", "Pkt-Line: read stdin failed : %v", err)
734725
}
735726
}
736727

737728
r = new(gitPktLine)
738729
r.Length, err = strconv.ParseUint(string(lengthBytes), 16, 32)
739730
if err != nil {
740-
return nil, fail(ctx, "Internal Server Error", "Pkt-Line format is wrong :%v", err)
731+
return nil, fail(ctx, "Protocol: format parse error", "Pkt-Line format is wrong :%v", err)
741732
}
742733

743734
if r.Length == 0 {
744735
if requestType == pktLineTypeData {
745-
return nil, fail(ctx, "Internal Server Error", "Pkt-Line format is wrong")
736+
return nil, fail(ctx, "Protocol: format data error", "Pkt-Line format is wrong")
746737
}
747738
r.Type = pktLineTypeFlush
748739
return r, nil
749740
}
750741

751742
if r.Length <= 4 || r.Length > 65520 || requestType == pktLineTypeFlush {
752-
return nil, fail(ctx, "Internal Server Error", "Pkt-Line format is wrong")
743+
return nil, fail(ctx, "Protocol: format length error", "Pkt-Line format is wrong")
753744
}
754745

755746
r.Data = make([]byte, r.Length-4)
756747
for i := range r.Data {
757748
r.Data[i], err = in.ReadByte()
758749
if err != nil {
759-
return nil, fail(ctx, "Internal Server Error", "Pkt-Line: read stdin failed : %v", err)
750+
return nil, fail(ctx, "Protocol: data error", "Pkt-Line: read stdin failed : %v", err)
760751
}
761752
}
762753

@@ -767,13 +758,9 @@ func readPktLine(ctx context.Context, in *bufio.Reader, requestType pktLineType)
767758

768759
func writeFlushPktLine(ctx context.Context, out io.Writer) error {
769760
l, err := out.Write([]byte("0000"))
770-
if err != nil {
771-
return fail(ctx, "Internal Server Error", "Pkt-Line response failed: %v", err)
772-
}
773-
if l != 4 {
774-
return fail(ctx, "Internal Server Error", "Pkt-Line response failed: %v", err)
761+
if err != nil || l != 4 {
762+
return fail(ctx, "Protocol: write error", "Pkt-Line response failed: %v", err)
775763
}
776-
777764
return nil
778765
}
779766

@@ -791,19 +778,13 @@ func writeDataPktLine(ctx context.Context, out io.Writer, data []byte) error {
791778
tmp[3] = hex(length)
792779

793780
lr, err := out.Write(tmp)
794-
if err != nil {
795-
return fail(ctx, "Internal Server Error", "Pkt-Line response failed: %v", err)
796-
}
797-
if lr != 4 {
798-
return fail(ctx, "Internal Server Error", "Pkt-Line response failed: %v", err)
781+
if err != nil || lr != 4 {
782+
return fail(ctx, "Protocol: write error", "Pkt-Line response failed: %v", err)
799783
}
800784

801785
lr, err = out.Write(data)
802-
if err != nil {
803-
return fail(ctx, "Internal Server Error", "Pkt-Line response failed: %v", err)
804-
}
805-
if int(length-4) != lr {
806-
return fail(ctx, "Internal Server Error", "Pkt-Line response failed: %v", err)
786+
if err != nil || int(length-4) != lr {
787+
return fail(ctx, "Protocol: write error", "Pkt-Line response failed: %v", err)
807788
}
808789

809790
return nil

cmd/hook_test.go

+6-4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package cmd
66
import (
77
"bufio"
88
"bytes"
9+
"context"
910
"strings"
1011
"testing"
1112

@@ -14,27 +15,28 @@ import (
1415

1516
func TestPktLine(t *testing.T) {
1617
// test read
18+
ctx := context.Background()
1719
s := strings.NewReader("0000")
1820
r := bufio.NewReader(s)
19-
result, err := readPktLine(r, pktLineTypeFlush)
21+
result, err := readPktLine(ctx, r, pktLineTypeFlush)
2022
assert.NoError(t, err)
2123
assert.Equal(t, pktLineTypeFlush, result.Type)
2224

2325
s = strings.NewReader("0006a\n")
2426
r = bufio.NewReader(s)
25-
result, err = readPktLine(r, pktLineTypeData)
27+
result, err = readPktLine(ctx, r, pktLineTypeData)
2628
assert.NoError(t, err)
2729
assert.Equal(t, pktLineTypeData, result.Type)
2830
assert.Equal(t, []byte("a\n"), result.Data)
2931

3032
// test write
3133
w := bytes.NewBuffer([]byte{})
32-
err = writeFlushPktLine(w)
34+
err = writeFlushPktLine(ctx, w)
3335
assert.NoError(t, err)
3436
assert.Equal(t, []byte("0000"), w.Bytes())
3537

3638
w.Reset()
37-
err = writeDataPktLine(w, []byte("a\nb"))
39+
err = writeDataPktLine(ctx, w, []byte("a\nb"))
3840
assert.NoError(t, err)
3941
assert.Equal(t, []byte("0007a\nb"), w.Bytes())
4042
}

cmd/keys.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,10 @@ func runKeys(c *cli.Context) error {
6666

6767
setup(ctx, false)
6868

69-
authorizedString, err := private.AuthorizedPublicKeyByContent(ctx, content)
70-
if err != nil {
71-
return err
69+
authorizedString, extra := private.AuthorizedPublicKeyByContent(ctx, content)
70+
// do not use handleCliResponseExtra or cli.NewExitError, if it exists immediately, it breaks some tests like Test_CmdKeys
71+
if extra.Error != nil {
72+
return extra.Error
7273
}
7374
fmt.Println(strings.TrimSpace(authorizedString))
7475
return nil

cmd/mailer.go

+4-8
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ package cmd
55

66
import (
77
"fmt"
8-
"net/http"
98

109
"code.gitea.io/gitea/modules/private"
1110
"code.gitea.io/gitea/modules/setting"
@@ -43,13 +42,10 @@ func runSendMail(c *cli.Context) error {
4342
}
4443
}
4544

46-
status, message := private.SendEmail(ctx, subject, body, nil)
47-
if status != http.StatusOK {
48-
fmt.Printf("error: %s\n", message)
49-
return nil
45+
respText, extra := private.SendEmail(ctx, subject, body, nil)
46+
if extra.HasError() {
47+
return handleCliResponseExtra(extra)
5048
}
51-
52-
fmt.Printf("Success: %s\n", message)
53-
49+
_ = fmt.Sprintf("Sent %s email(s) to all users", respText)
5450
return nil
5551
}

cmd/manager.go

+8-33
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
package cmd
55

66
import (
7-
"fmt"
8-
"net/http"
97
"os"
108
"time"
119

@@ -104,56 +102,33 @@ func runShutdown(c *cli.Context) error {
104102
defer cancel()
105103

106104
setup(ctx, c.Bool("debug"))
107-
statusCode, msg := private.Shutdown(ctx)
108-
switch statusCode {
109-
case http.StatusInternalServerError:
110-
return fail(ctx, "InternalServerError", msg)
111-
}
112-
113-
fmt.Fprintln(os.Stdout, msg)
114-
return nil
105+
extra := private.Shutdown(ctx)
106+
return handleCliResponseExtra(extra)
115107
}
116108

117109
func runRestart(c *cli.Context) error {
118110
ctx, cancel := installSignals()
119111
defer cancel()
120112

121113
setup(ctx, c.Bool("debug"))
122-
statusCode, msg := private.Restart(ctx)
123-
switch statusCode {
124-
case http.StatusInternalServerError:
125-
return fail(ctx, "InternalServerError", msg)
126-
}
127-
128-
fmt.Fprintln(os.Stdout, msg)
129-
return nil
114+
extra := private.Restart(ctx)
115+
return handleCliResponseExtra(extra)
130116
}
131117

132118
func runFlushQueues(c *cli.Context) error {
133119
ctx, cancel := installSignals()
134120
defer cancel()
135121

136122
setup(ctx, c.Bool("debug"))
137-
statusCode, msg := private.FlushQueues(ctx, c.Duration("timeout"), c.Bool("non-blocking"))
138-
switch statusCode {
139-
case http.StatusInternalServerError:
140-
return fail(ctx, "InternalServerError", msg)
141-
}
142-
143-
fmt.Fprintln(os.Stdout, msg)
144-
return nil
123+
extra := private.FlushQueues(ctx, c.Duration("timeout"), c.Bool("non-blocking"))
124+
return handleCliResponseExtra(extra)
145125
}
146126

147127
func runProcesses(c *cli.Context) error {
148128
ctx, cancel := installSignals()
149129
defer cancel()
150130

151131
setup(ctx, c.Bool("debug"))
152-
statusCode, msg := private.Processes(ctx, os.Stdout, c.Bool("flat"), c.Bool("no-system"), c.Bool("stacktraces"), c.Bool("json"), c.String("cancel"))
153-
switch statusCode {
154-
case http.StatusInternalServerError:
155-
return fail(ctx, "InternalServerError", msg)
156-
}
157-
158-
return nil
132+
extra := private.Processes(ctx, os.Stdout, c.Bool("flat"), c.Bool("no-system"), c.Bool("stacktraces"), c.Bool("json"), c.String("cancel"))
133+
return handleCliResponseExtra(extra)
159134
}

0 commit comments

Comments
 (0)