+6
-7
knotserver/git/merge.go
+6
-7
knotserver/git/merge.go
···
31
CommitBody string
32
AuthorName string
33
AuthorEmail string
34
}
35
36
func (e ErrMerge) Error() string {
···
86
func (g *GitRepo) applyPatch(tmpDir, patchFile string, checkOnly bool, opts *MergeOptions) error {
87
var stderr bytes.Buffer
88
var cmd *exec.Cmd
89
-
var formatPatch = false
90
-
91
-
if patchutil.IsFormatPatch(patchFile) {
92
-
formatPatch = true
93
-
}
94
95
if checkOnly {
96
cmd = exec.Command("git", "-C", tmpDir, "apply", "--check", "-v", patchFile)
97
} else {
98
// if patch is a format-patch, apply using 'git am'
99
-
if formatPatch {
100
amCmd := exec.Command("git", "-C", tmpDir, "am", patchFile)
101
amCmd.Stderr = &stderr
102
if err := amCmd.Run(); err != nil {
···
169
}
170
171
func (g *GitRepo) MergeCheck(patchData []byte, targetBranch string) error {
172
patchFile, err := g.createTempFileWithPatch(patchData)
173
if err != nil {
174
return &ErrMerge{
···
187
}
188
defer os.RemoveAll(tmpDir)
189
190
-
return g.applyPatch(tmpDir, patchFile, true, nil)
191
}
192
193
func (g *GitRepo) Merge(patchData []byte, targetBranch string) error {
···
31
CommitBody string
32
AuthorName string
33
AuthorEmail string
34
+
FormatPatch bool
35
}
36
37
func (e ErrMerge) Error() string {
···
87
func (g *GitRepo) applyPatch(tmpDir, patchFile string, checkOnly bool, opts *MergeOptions) error {
88
var stderr bytes.Buffer
89
var cmd *exec.Cmd
90
91
if checkOnly {
92
cmd = exec.Command("git", "-C", tmpDir, "apply", "--check", "-v", patchFile)
93
} else {
94
// if patch is a format-patch, apply using 'git am'
95
+
if opts.FormatPatch {
96
amCmd := exec.Command("git", "-C", tmpDir, "am", patchFile)
97
amCmd.Stderr = &stderr
98
if err := amCmd.Run(); err != nil {
···
165
}
166
167
func (g *GitRepo) MergeCheck(patchData []byte, targetBranch string) error {
168
+
var opts MergeOptions
169
+
opts.FormatPatch = patchutil.IsFormatPatch(string(patchData))
170
+
171
patchFile, err := g.createTempFileWithPatch(patchData)
172
if err != nil {
173
return &ErrMerge{
···
186
}
187
defer os.RemoveAll(tmpDir)
188
189
+
return g.applyPatch(tmpDir, patchFile, true, &opts)
190
}
191
192
func (g *GitRepo) Merge(patchData []byte, targetBranch string) error {
+4
knotserver/routes.go
+4
knotserver/routes.go
···
24
"github.com/go-git/go-git/v5/plumbing/object"
25
"tangled.sh/tangled.sh/core/knotserver/db"
26
"tangled.sh/tangled.sh/core/knotserver/git"
27
"tangled.sh/tangled.sh/core/types"
28
)
29
···
687
notFound(w)
688
return
689
}
690
if err := gr.MergeWithOptions([]byte(patch), branch, mo); err != nil {
691
var mergeErr *git.ErrMerge
692
if errors.As(err, &mergeErr) {
···
24
"github.com/go-git/go-git/v5/plumbing/object"
25
"tangled.sh/tangled.sh/core/knotserver/db"
26
"tangled.sh/tangled.sh/core/knotserver/git"
27
+
"tangled.sh/tangled.sh/core/patchutil"
28
"tangled.sh/tangled.sh/core/types"
29
)
30
···
688
notFound(w)
689
return
690
}
691
+
692
+
mo.FormatPatch = patchutil.IsFormatPatch(patch)
693
+
694
if err := gr.MergeWithOptions([]byte(patch), branch, mo); err != nil {
695
var mergeErr *git.ErrMerge
696
if errors.As(err, &mergeErr) {