···
securejoin "github.com/cyphar/filepath-securejoin"
"github.com/go-chi/chi/v5"
"github.com/go-chi/chi/v5/middleware"
16
+
"github.com/go-git/go-git/v5/plumbing"
"tangled.org/core/api/tangled"
19
+
"tangled.org/core/idresolver"
"tangled.org/core/knotserver/config"
"tangled.org/core/knotserver/db"
"tangled.org/core/knotserver/git"
···
123
+
if (line.NewSha.String() != line.OldSha.String()) && line.OldSha.IsZero() {
124
+
msg, err := h.replyCompare(line, gitUserDid, gitRelativeDir, repoName, r.Context())
126
+
l.Error("failed to reply with compare link", "err", err, "line", line, "did", gitUserDid, "repo", gitRelativeDir)
129
+
for msgLine := range msg {
130
+
resp.Messages = append(resp.Messages, msg[msgLine])
err = h.triggerPipeline(&resp.Messages, line, gitUserDid, repoDid, repoName, pushOptions)
l.Error("failed to trigger pipeline", "err", err, "line", line, "did", gitUserDid, "repo", gitRelativeDir)
···
145
+
func (h *InternalHandle) replyCompare(line git.PostReceiveLine, gitUserDid string, gitRelativeDir string, repoName string, ctx context.Context) ([]string, error) {
146
+
l := h.l.With("handler", "replyCompare")
147
+
userIdent, err := idresolver.DefaultResolver().ResolveIdent(ctx, gitUserDid)
150
+
l.Error("Failed to fetch user identity", "err", err)
153
+
user = userIdent.Handle.String()
155
+
gr, err := git.PlainOpen(gitRelativeDir)
157
+
l.Error("Failed to open git repository", "err", err)
158
+
return []string{}, err
160
+
defaultBranch, err := gr.FindMainBranch()
162
+
l.Error("Failed to fetch default branch", "err", err)
163
+
return []string{}, err
165
+
if line.Ref == plumbing.NewBranchReferenceName(defaultBranch).String() {
166
+
return []string{}, nil
170
+
msg = append(msg, ZWS)
171
+
msg = append(msg, fmt.Sprintf("Create a PR pointing to %s", defaultBranch))
172
+
msg = append(msg, fmt.Sprintf("\t%s/%s/%s/compare/%s...%s", h.c.AppViewEndpoint, user, repoName, defaultBranch, strings.TrimPrefix(line.Ref, "refs/heads/")))
173
+
msg = append(msg, ZWS)
func (h *InternalHandle) insertRefUpdate(line git.PostReceiveLine, gitUserDid, repoDid, repoName string) error {
didSlashRepo, err := securejoin.SecureJoin(repoDid, repoName)