Skip to content

Commit 057be7b

Browse files
committed
fix
1 parent a9cceb0 commit 057be7b

File tree

6 files changed

+125
-115
lines changed

6 files changed

+125
-115
lines changed

cmd/hook.go

+52-51
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package cmd
66
import (
77
"bufio"
88
"bytes"
9+
"context"
910
"fmt"
1011
"io"
1112
"net/http"
@@ -167,11 +168,11 @@ func runHookPreReceive(c *cli.Context) error {
167168
ctx, cancel := installSignals()
168169
defer cancel()
169170

170-
setup("hooks/pre-receive.log", c.Bool("debug"))
171+
setup(ctx, c.Bool("debug"))
171172

172173
if len(os.Getenv("SSH_ORIGINAL_COMMAND")) == 0 {
173174
if setting.OnlyAllowPushIfGiteaEnvironmentSet {
174-
return fail(`Rejecting changes as Gitea environment not set.
175+
return fail(ctx, `Rejecting changes as Gitea environment not set.
175176
If you are pushing over SSH you must push with a key managed by
176177
Gitea or set your environment appropriately.`, "")
177178
}
@@ -262,9 +263,9 @@ Gitea or set your environment appropriately.`, "")
262263
case http.StatusOK:
263264
// no-op
264265
case http.StatusInternalServerError:
265-
return fail("Internal Server Error", msg)
266+
return fail(ctx, "HookPreReceive: Internal Server Error (500)", msg)
266267
default:
267-
return fail(msg, "")
268+
return fail(ctx, fmt.Sprintf("HookPreReceive: %s", msg), msg)
268269
}
269270
count = 0
270271
lastline = 0
@@ -288,9 +289,9 @@ Gitea or set your environment appropriately.`, "")
288289
statusCode, msg := private.HookPreReceive(ctx, username, reponame, hookOptions)
289290
switch statusCode {
290291
case http.StatusInternalServerError:
291-
return fail("Internal Server Error", msg)
292+
return fail(ctx, "Internal Server Error", msg)
292293
case http.StatusForbidden:
293-
return fail(msg, "")
294+
return fail(ctx, msg, "")
294295
}
295296
} else if lastline > 0 {
296297
fmt.Fprintf(out, "\n")
@@ -309,7 +310,7 @@ func runHookPostReceive(c *cli.Context) error {
309310
ctx, cancel := installSignals()
310311
defer cancel()
311312

312-
setup("hooks/post-receive.log", c.Bool("debug"))
313+
setup(ctx, c.Bool("debug"))
313314

314315
// First of all run update-server-info no matter what
315316
if _, _, err := git.NewCommand(ctx, "update-server-info").RunStdString(nil); err != nil {
@@ -323,7 +324,7 @@ func runHookPostReceive(c *cli.Context) error {
323324

324325
if len(os.Getenv("SSH_ORIGINAL_COMMAND")) == 0 {
325326
if setting.OnlyAllowPushIfGiteaEnvironmentSet {
326-
return fail(`Rejecting changes as Gitea environment not set.
327+
return fail(ctx, `Rejecting changes as Gitea environment not set.
327328
If you are pushing over SSH you must push with a key managed by
328329
Gitea or set your environment appropriately.`, "")
329330
}
@@ -398,7 +399,7 @@ Gitea or set your environment appropriately.`, "")
398399
if resp == nil {
399400
_ = dWriter.Close()
400401
hookPrintResults(results)
401-
return fail("Internal Server Error", err)
402+
return fail(ctx, "Internal Server Error", err)
402403
}
403404
wasEmpty = wasEmpty || resp.RepoWasEmpty
404405
results = append(results, resp.Results...)
@@ -411,7 +412,7 @@ Gitea or set your environment appropriately.`, "")
411412
// We need to tell the repo to reset the default branch to master
412413
err := private.SetDefaultBranch(ctx, repoUser, repoName, "master")
413414
if err != nil {
414-
return fail("Internal Server Error", "SetDefaultBranch failed with Error: %v", err)
415+
return fail(ctx, "Internal Server Error", "SetDefaultBranch failed with Error: %v", err)
415416
}
416417
}
417418
fmt.Fprintf(out, "Processed %d references in total\n", total)
@@ -431,7 +432,7 @@ Gitea or set your environment appropriately.`, "")
431432
if resp == nil {
432433
_ = dWriter.Close()
433434
hookPrintResults(results)
434-
return fail("Internal Server Error", err)
435+
return fail(ctx, "Internal Server Error", err)
435436
}
436437
wasEmpty = wasEmpty || resp.RepoWasEmpty
437438
results = append(results, resp.Results...)
@@ -442,7 +443,7 @@ Gitea or set your environment appropriately.`, "")
442443
// We need to tell the repo to reset the default branch to master
443444
err := private.SetDefaultBranch(ctx, repoUser, repoName, "master")
444445
if err != nil {
445-
return fail("Internal Server Error", "SetDefaultBranch failed with Error: %v", err)
446+
return fail(ctx, "Internal Server Error", "SetDefaultBranch failed with Error: %v", err)
446447
}
447448
}
448449
_ = dWriter.Close()
@@ -485,22 +486,22 @@ func pushOptions() map[string]string {
485486
}
486487

487488
func runHookProcReceive(c *cli.Context) error {
488-
setup("hooks/proc-receive.log", c.Bool("debug"))
489+
ctx, cancel := installSignals()
490+
defer cancel()
491+
492+
setup(ctx, c.Bool("debug"))
489493

490494
if len(os.Getenv("SSH_ORIGINAL_COMMAND")) == 0 {
491495
if setting.OnlyAllowPushIfGiteaEnvironmentSet {
492-
return fail(`Rejecting changes as Gitea environment not set.
496+
return fail(ctx, `Rejecting changes as Gitea environment not set.
493497
If you are pushing over SSH you must push with a key managed by
494498
Gitea or set your environment appropriately.`, "")
495499
}
496500
return nil
497501
}
498502

499-
ctx, cancel := installSignals()
500-
defer cancel()
501-
502503
if git.CheckGitVersionAtLeast("2.29") != nil {
503-
return fail("Internal Server Error", "git not support proc-receive.")
504+
return fail(ctx, "Internal Server Error", "git not support proc-receive.")
504505
}
505506

506507
reader := bufio.NewReader(os.Stdin)
@@ -515,7 +516,7 @@ Gitea or set your environment appropriately.`, "")
515516
// H: PKT-LINE(version=1\0push-options...)
516517
// H: flush-pkt
517518

518-
rs, err := readPktLine(reader, pktLineTypeData)
519+
rs, err := readPktLine(ctx, reader, pktLineTypeData)
519520
if err != nil {
520521
return err
521522
}
@@ -530,19 +531,19 @@ Gitea or set your environment appropriately.`, "")
530531

531532
index := bytes.IndexByte(rs.Data, byte(0))
532533
if index >= len(rs.Data) {
533-
return fail("Internal Server Error", "pkt-line: format error "+fmt.Sprint(rs.Data))
534+
return fail(ctx, "Internal Server Error", "pkt-line: format error "+fmt.Sprint(rs.Data))
534535
}
535536

536537
if index < 0 {
537538
if len(rs.Data) == 10 && rs.Data[9] == '\n' {
538539
index = 9
539540
} else {
540-
return fail("Internal Server Error", "pkt-line: format error "+fmt.Sprint(rs.Data))
541+
return fail(ctx, "Internal Server Error", "pkt-line: format error "+fmt.Sprint(rs.Data))
541542
}
542543
}
543544

544545
if string(rs.Data[0:index]) != VersionHead {
545-
return fail("Internal Server Error", "Received unsupported version: %s", string(rs.Data[0:index]))
546+
return fail(ctx, "Internal Server Error", "Received unsupported version: %s", string(rs.Data[0:index]))
546547
}
547548
requestOptions = strings.Split(string(rs.Data[index+1:]), " ")
548549

@@ -555,17 +556,17 @@ Gitea or set your environment appropriately.`, "")
555556
}
556557
response = append(response, '\n')
557558

558-
_, err = readPktLine(reader, pktLineTypeFlush)
559+
_, err = readPktLine(ctx, reader, pktLineTypeFlush)
559560
if err != nil {
560561
return err
561562
}
562563

563-
err = writeDataPktLine(os.Stdout, response)
564+
err = writeDataPktLine(ctx, os.Stdout, response)
564565
if err != nil {
565566
return err
566567
}
567568

568-
err = writeFlushPktLine(os.Stdout)
569+
err = writeFlushPktLine(ctx, os.Stdout)
569570
if err != nil {
570571
return err
571572
}
@@ -588,7 +589,7 @@ Gitea or set your environment appropriately.`, "")
588589

589590
for {
590591
// note: pktLineTypeUnknow means pktLineTypeFlush and pktLineTypeData all allowed
591-
rs, err = readPktLine(reader, pktLineTypeUnknow)
592+
rs, err = readPktLine(ctx, reader, pktLineTypeUnknow)
592593
if err != nil {
593594
return err
594595
}
@@ -609,7 +610,7 @@ Gitea or set your environment appropriately.`, "")
609610

610611
if hasPushOptions {
611612
for {
612-
rs, err = readPktLine(reader, pktLineTypeUnknow)
613+
rs, err = readPktLine(ctx, reader, pktLineTypeUnknow)
613614
if err != nil {
614615
return err
615616
}
@@ -628,7 +629,7 @@ Gitea or set your environment appropriately.`, "")
628629
// 3. run hook
629630
resp, err := private.HookProcReceive(ctx, repoUser, repoName, hookOptions)
630631
if err != nil {
631-
return fail("Internal Server Error", "run proc-receive hook failed :%v", err)
632+
return fail(ctx, "Internal Server Error", "run proc-receive hook failed :%v", err)
632633
}
633634

634635
// 4. response result to service
@@ -649,51 +650,51 @@ Gitea or set your environment appropriately.`, "")
649650

650651
for _, rs := range resp.Results {
651652
if len(rs.Err) > 0 {
652-
err = writeDataPktLine(os.Stdout, []byte("ng "+rs.OriginalRef+" "+rs.Err))
653+
err = writeDataPktLine(ctx, os.Stdout, []byte("ng "+rs.OriginalRef+" "+rs.Err))
653654
if err != nil {
654655
return err
655656
}
656657
continue
657658
}
658659

659660
if rs.IsNotMatched {
660-
err = writeDataPktLine(os.Stdout, []byte("ok "+rs.OriginalRef))
661+
err = writeDataPktLine(ctx, os.Stdout, []byte("ok "+rs.OriginalRef))
661662
if err != nil {
662663
return err
663664
}
664-
err = writeDataPktLine(os.Stdout, []byte("option fall-through"))
665+
err = writeDataPktLine(ctx, os.Stdout, []byte("option fall-through"))
665666
if err != nil {
666667
return err
667668
}
668669
continue
669670
}
670671

671-
err = writeDataPktLine(os.Stdout, []byte("ok "+rs.OriginalRef))
672+
err = writeDataPktLine(ctx, os.Stdout, []byte("ok "+rs.OriginalRef))
672673
if err != nil {
673674
return err
674675
}
675-
err = writeDataPktLine(os.Stdout, []byte("option refname "+rs.Ref))
676+
err = writeDataPktLine(ctx, os.Stdout, []byte("option refname "+rs.Ref))
676677
if err != nil {
677678
return err
678679
}
679680
if rs.OldOID != git.EmptySHA {
680-
err = writeDataPktLine(os.Stdout, []byte("option old-oid "+rs.OldOID))
681+
err = writeDataPktLine(ctx, os.Stdout, []byte("option old-oid "+rs.OldOID))
681682
if err != nil {
682683
return err
683684
}
684685
}
685-
err = writeDataPktLine(os.Stdout, []byte("option new-oid "+rs.NewOID))
686+
err = writeDataPktLine(ctx, os.Stdout, []byte("option new-oid "+rs.NewOID))
686687
if err != nil {
687688
return err
688689
}
689690
if rs.IsForcePush {
690-
err = writeDataPktLine(os.Stdout, []byte("option forced-update"))
691+
err = writeDataPktLine(ctx, os.Stdout, []byte("option forced-update"))
691692
if err != nil {
692693
return err
693694
}
694695
}
695696
}
696-
err = writeFlushPktLine(os.Stdout)
697+
err = writeFlushPktLine(ctx, os.Stdout)
697698

698699
return err
699700
}
@@ -718,7 +719,7 @@ type gitPktLine struct {
718719
Data []byte
719720
}
720721

721-
func readPktLine(in *bufio.Reader, requestType pktLineType) (*gitPktLine, error) {
722+
func readPktLine(ctx context.Context, in *bufio.Reader, requestType pktLineType) (*gitPktLine, error) {
722723
var (
723724
err error
724725
r *gitPktLine
@@ -729,33 +730,33 @@ func readPktLine(in *bufio.Reader, requestType pktLineType) (*gitPktLine, error)
729730
for i := 0; i < 4; i++ {
730731
lengthBytes[i], err = in.ReadByte()
731732
if err != nil {
732-
return nil, fail("Internal Server Error", "Pkt-Line: read stdin failed : %v", err)
733+
return nil, fail(ctx, "Internal Server Error", "Pkt-Line: read stdin failed : %v", err)
733734
}
734735
}
735736

736737
r = new(gitPktLine)
737738
r.Length, err = strconv.ParseUint(string(lengthBytes), 16, 32)
738739
if err != nil {
739-
return nil, fail("Internal Server Error", "Pkt-Line format is wrong :%v", err)
740+
return nil, fail(ctx, "Internal Server Error", "Pkt-Line format is wrong :%v", err)
740741
}
741742

742743
if r.Length == 0 {
743744
if requestType == pktLineTypeData {
744-
return nil, fail("Internal Server Error", "Pkt-Line format is wrong")
745+
return nil, fail(ctx, "Internal Server Error", "Pkt-Line format is wrong")
745746
}
746747
r.Type = pktLineTypeFlush
747748
return r, nil
748749
}
749750

750751
if r.Length <= 4 || r.Length > 65520 || requestType == pktLineTypeFlush {
751-
return nil, fail("Internal Server Error", "Pkt-Line format is wrong")
752+
return nil, fail(ctx, "Internal Server Error", "Pkt-Line format is wrong")
752753
}
753754

754755
r.Data = make([]byte, r.Length-4)
755756
for i := range r.Data {
756757
r.Data[i], err = in.ReadByte()
757758
if err != nil {
758-
return nil, fail("Internal Server Error", "Pkt-Line: read stdin failed : %v", err)
759+
return nil, fail(ctx, "Internal Server Error", "Pkt-Line: read stdin failed : %v", err)
759760
}
760761
}
761762

@@ -764,19 +765,19 @@ func readPktLine(in *bufio.Reader, requestType pktLineType) (*gitPktLine, error)
764765
return r, nil
765766
}
766767

767-
func writeFlushPktLine(out io.Writer) error {
768+
func writeFlushPktLine(ctx context.Context, out io.Writer) error {
768769
l, err := out.Write([]byte("0000"))
769770
if err != nil {
770-
return fail("Internal Server Error", "Pkt-Line response failed: %v", err)
771+
return fail(ctx, "Internal Server Error", "Pkt-Line response failed: %v", err)
771772
}
772773
if l != 4 {
773-
return fail("Internal Server Error", "Pkt-Line response failed: %v", err)
774+
return fail(ctx, "Internal Server Error", "Pkt-Line response failed: %v", err)
774775
}
775776

776777
return nil
777778
}
778779

779-
func writeDataPktLine(out io.Writer, data []byte) error {
780+
func writeDataPktLine(ctx context.Context, out io.Writer, data []byte) error {
780781
hexchar := []byte("0123456789abcdef")
781782
hex := func(n uint64) byte {
782783
return hexchar[(n)&15]
@@ -791,18 +792,18 @@ func writeDataPktLine(out io.Writer, data []byte) error {
791792

792793
lr, err := out.Write(tmp)
793794
if err != nil {
794-
return fail("Internal Server Error", "Pkt-Line response failed: %v", err)
795+
return fail(ctx, "Internal Server Error", "Pkt-Line response failed: %v", err)
795796
}
796797
if lr != 4 {
797-
return fail("Internal Server Error", "Pkt-Line response failed: %v", err)
798+
return fail(ctx, "Internal Server Error", "Pkt-Line response failed: %v", err)
798799
}
799800

800801
lr, err = out.Write(data)
801802
if err != nil {
802-
return fail("Internal Server Error", "Pkt-Line response failed: %v", err)
803+
return fail(ctx, "Internal Server Error", "Pkt-Line response failed: %v", err)
803804
}
804805
if int(length-4) != lr {
805-
return fail("Internal Server Error", "Pkt-Line response failed: %v", err)
806+
return fail(ctx, "Internal Server Error", "Pkt-Line response failed: %v", err)
806807
}
807808

808809
return nil

cmd/keys.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ func runKeys(c *cli.Context) error {
6464
ctx, cancel := installSignals()
6565
defer cancel()
6666

67-
setup("keys.log", false)
67+
setup(ctx, false)
6868

6969
authorizedString, err := private.AuthorizedPublicKeyByContent(ctx, content)
7070
if err != nil {

0 commit comments

Comments
 (0)