···
146
-
func (g *GitRepo) applyPatch(tmpDir, patchFile string, checkOnly bool, opts *MergeOptions) error {
146
+
func (g *GitRepo) checkPatch(tmpDir, patchFile string) error {
151
-
cmd = exec.Command("git", "-C", tmpDir, "apply", "--check", "-v", patchFile)
153
-
// if patch is a format-patch, apply using 'git am'
154
-
if opts.FormatPatch {
155
-
amCmd := exec.Command("git", "-C", tmpDir, "am", patchFile)
156
-
amCmd.Stderr = &stderr
157
-
if err := amCmd.Run(); err != nil {
158
-
return fmt.Errorf("patch application failed: %s", stderr.String())
149
+
cmd := exec.Command("git", "-C", tmpDir, "apply", "--check", "-v", patchFile)
150
+
cmd.Stderr = &stderr
152
+
if err := cmd.Run(); err != nil {
153
+
conflicts := parseGitApplyErrors(stderr.String())
155
+
Message: "patch cannot be applied cleanly",
156
+
Conflicts: conflicts,
157
+
HasConflict: len(conflicts) > 0,
163
-
// else, apply using 'git apply' and commit it manually
164
-
exec.Command("git", "-C", tmpDir, "config", "advice.mergeConflict", "false").Run()
166
-
applyCmd := exec.Command("git", "-C", tmpDir, "apply", patchFile)
167
-
applyCmd.Stderr = &stderr
168
-
if err := applyCmd.Run(); err != nil {
169
-
return fmt.Errorf("patch application failed: %s", stderr.String())
164
+
func (g *GitRepo) applyPatch(tmpDir, patchFile string, opts *MergeOptions) error {
165
+
var stderr bytes.Buffer
172
-
stageCmd := exec.Command("git", "-C", tmpDir, "add", ".")
173
-
if err := stageCmd.Run(); err != nil {
174
-
return fmt.Errorf("failed to stage changes: %w", err)
168
+
// if patch is a format-patch, apply using 'git am'
169
+
if opts.FormatPatch {
170
+
amCmd := exec.Command("git", "-C", tmpDir, "am", patchFile)
171
+
amCmd.Stderr = &stderr
172
+
if err := amCmd.Run(); err != nil {
173
+
return fmt.Errorf("patch application failed: %s", stderr.String())
177
-
commitArgs := []string{"-C", tmpDir, "commit"}
178
+
// else, apply using 'git apply' and commit it manually
179
+
exec.Command("git", "-C", tmpDir, "config", "advice.mergeConflict", "false").Run()
181
+
applyCmd := exec.Command("git", "-C", tmpDir, "apply", patchFile)
182
+
applyCmd.Stderr = &stderr
183
+
if err := applyCmd.Run(); err != nil {
184
+
return fmt.Errorf("patch application failed: %s", stderr.String())
179
-
// Set author if provided
180
-
authorName := opts.AuthorName
181
-
authorEmail := opts.AuthorEmail
187
+
stageCmd := exec.Command("git", "-C", tmpDir, "add", ".")
188
+
if err := stageCmd.Run(); err != nil {
189
+
return fmt.Errorf("failed to stage changes: %w", err)
183
-
if authorEmail == "" {
184
-
authorEmail = "noreply@tangled.sh"
192
+
commitArgs := []string{"-C", tmpDir, "commit"}
187
-
if authorName == "" {
188
-
authorName = "Tangled"
194
+
// Set author if provided
195
+
authorName := opts.AuthorName
196
+
authorEmail := opts.AuthorEmail
191
-
if authorName != "" {
192
-
commitArgs = append(commitArgs, "--author", fmt.Sprintf("%s <%s>", authorName, authorEmail))
198
+
if authorEmail == "" {
199
+
authorEmail = "noreply@tangled.sh"
195
-
commitArgs = append(commitArgs, "-m", opts.CommitMessage)
202
+
if authorName == "" {
203
+
authorName = "Tangled"
197
-
if opts.CommitBody != "" {
198
-
commitArgs = append(commitArgs, "-m", opts.CommitBody)
206
+
if authorName != "" {
207
+
commitArgs = append(commitArgs, "--author", fmt.Sprintf("%s <%s>", authorName, authorEmail))
210
+
commitArgs = append(commitArgs, "-m", opts.CommitMessage)
201
-
cmd = exec.Command("git", commitArgs...)
203
-
// If no commit message specified, use git-am which automatically creates a commit
204
-
cmd = exec.Command("git", "-C", tmpDir, "am", patchFile)
212
+
if opts.CommitBody != "" {
213
+
commitArgs = append(commitArgs, "-m", opts.CommitBody)
216
+
cmd = exec.Command("git", commitArgs...)
218
+
// If no commit message specified, use git-am which automatically creates a commit
219
+
cmd = exec.Command("git", "-C", tmpDir, "am", patchFile)
if err := cmd.Run(); err != nil {
212
-
conflicts := parseGitApplyErrors(stderr.String())
214
-
Message: "patch cannot be applied cleanly",
215
-
Conflicts: conflicts,
216
-
HasConflict: len(conflicts) > 0,
return fmt.Errorf("patch application failed: %s", stderr.String())
···
231
-
var opts MergeOptions
232
-
opts.FormatPatch = patchutil.IsFormatPatch(string(patchData))
patchFile, err := g.createTempFileWithPatch(patchData)
···
defer os.RemoveAll(tmpDir)
252
-
result := g.applyPatch(tmpDir, patchFile, true, &opts)
254
+
result := g.checkPatch(tmpDir, patchFile)
mergeCheckCache.Set(g, patchData, targetBranch, result)
···
defer os.RemoveAll(tmpDir)
280
-
if err := g.applyPatch(tmpDir, patchFile, false, opts); err != nil {
282
+
if err := g.applyPatch(tmpDir, patchFile, opts); err != nil {