forked from tangled.org/core
this repo has no description

knotserver: merge using git-am if format-patch is detected

authored by anirudh.fi and committed by oppi.li 01c324e2 c8b4100f

Changed files
+10 -7
knotserver
+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
··· 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) {