From eba7e30e25604d8f06e727aaa3694f5b8110e675 Mon Sep 17 00:00:00 2001 From: Jonathan Monnet Date: Mon, 9 May 2022 13:06:10 +0200 Subject: [PATCH] in: chnage way how to pull diff from MR use diff file and apply it Signed-off-by: Jonathan Monnet --- pkg/in/command.go | 57 ++++++++++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/pkg/in/command.go b/pkg/in/command.go index d287475..bcfd6d6 100644 --- a/pkg/in/command.go +++ b/pkg/in/command.go @@ -41,37 +41,37 @@ func (command *Command) Run(destination string, request Request) (Response, erro return Response{}, err } + change, _, err := command.client.MergeRequests.GetMergeRequestChanges(request.Source.GetProjectPath(), request.Version.ID, &gitlab.GetMergeRequestChangesOptions{}) + if err != nil { + return Response{}, err + } mr.UpdatedAt = request.Version.UpdatedAt target, err := command.createRepositoryUrl(mr.TargetProjectID, request.Source.PrivateToken) if err != nil { return Response{}, err } - source, err := command.createRepositoryUrl(mr.SourceProjectID, request.Source.PrivateToken) + + commit, _, err := command.client.MergeRequests.GetMergeRequestCommits(mr.ProjectID, mr.IID, &gitlab.GetMergeRequestCommitsOptions{}) if err != nil { return Response{}, err } - commit, _, err := command.client.Commits.GetCommit(mr.SourceProjectID, mr.SHA) + err = command.runner.Run("clone", "-c", "http.sslVerify="+strconv.FormatBool(!request.Source.Insecure), "-o", "target", "-b", mr.TargetBranch, target.String(), destination) if err != nil { return Response{}, err } - err = command.runner.Run("clone", "-c", "http.sslVerify="+strconv.FormatBool(!request.Source.Insecure), "-o", "target", "-b", mr.TargetBranch, target.String(), destination) + os.Chdir(destination) + + err = createDiffPatchFromApi(change) if err != nil { return Response{}, err } - os.Chdir(destination) - command.runner.Run("remote", "add", "source", source.String()) - command.runner.Run("remote", "update") - command.runner.Run("merge", "--no-ff", "--no-commit", mr.SHA) + command.runner.Run("apply", ".git/mr-id_"+strconv.Itoa(mr.ID)+".patch", "--whitespace=nowarn") if err != nil { - createDiffPatchFromApi(mr) - command.runner.Run("am", ".git/mr-id_"+strconv.Itoa(mr.ID)+".patch") - if err != nil { - return Response{}, err - } + return Response{}, err } notes, _ := json.Marshal(mr) @@ -85,7 +85,13 @@ func (command *Command) Run(destination string, request Request) (Response, erro return Response{}, err } - response := Response{Version: request.Version, Metadata: buildMetadata(mr, commit)} + jsonChanges, _ := json.Marshal(change) + err = ioutil.WriteFile(".git/merge-request-changes", jsonChanges, 0644) + if err != nil { + return Response{}, err + } + + response := Response{Version: request.Version, Metadata: buildMetadata(mr, commit[0])} return response, nil } @@ -105,30 +111,31 @@ func (command *Command) createRepositoryUrl(pid int, token string) (*url.URL, er return u, nil } -func createDiffPatchFromApi(mr *gitlab.MergeRequest) error { - fileName := fmt.Sprintf(".git/mr-id_%d.patch", mr.ID) +func createDiffPatchFromApi(mrChange *gitlab.MergeRequest) error { + fileName := fmt.Sprintf(".git/mr-id_" + strconv.Itoa(mrChange.ID) + ".patch") var data string _, err := os.Create(fileName) if err != nil { log.Fatal(err) } - for _, change := range mr.Changes { + for _, change := range mrChange.Changes { if change.NewFile { - data = fmt.Sprintf("new file mode %s\n--- /dev/null\n+++ %s\n%s", change.AMode, change.NewPath, change.Diff) + data = fmt.Sprintf(data+"new file mode %s\n--- /dev/null\n+++ b/%s\n%s", change.AMode, change.NewPath, change.Diff) } else if change.DeletedFile { - data = fmt.Sprintf("deleted file mode %s\n--- %s\n+++ /dev/null\n%s", change.AMode, change.OldPath, change.Diff) + data = fmt.Sprintf(data+"deleted file mode %s\n--- a/%s\n+++ /dev/null\n%s", change.AMode, change.OldPath, change.Diff) } else if change.RenamedFile { - data = fmt.Sprintf("--- %s\n+++ %s\n%s", change.OldPath, change.NewPath, change.Diff) + data = fmt.Sprintf(data+"--- a/%s\n+++ b/%s\n%s", change.OldPath, change.NewPath, change.Diff) } else { - data = fmt.Sprintf("--- %s\n+++ %s\n%s\n", change.OldPath, change.NewPath, change.Diff) + data = fmt.Sprintf(data+"--- a/%s\n+++ b/%s\n%s\n", change.OldPath, change.NewPath, change.Diff) } - ioutil.WriteFile(fileName, []byte(data), 0644) + } - return nil + ioutil.WriteFile(fileName, []byte(data), 0644) + return err } func buildMetadata(mr *gitlab.MergeRequest, commit *gitlab.Commit) pkg.Metadata { return []pkg.MetadataField{ @@ -145,9 +152,13 @@ func buildMetadata(mr *gitlab.MergeRequest, commit *gitlab.Commit) pkg.Metadata Value: mr.SHA, }, { - Name: "message", + Name: "commit title", Value: commit.Title, }, + { + Name: "commit message", + Value: commit.Message, + }, { Name: "title", Value: mr.Title,