diff options
author | Karthik Nayak <knayak@gitlab.com> | 2023-05-04 10:03:59 +0300 |
---|---|---|
committer | Karthik Nayak <knayak@gitlab.com> | 2023-05-31 14:56:59 +0300 |
commit | dcf08678c91e0f64f92c6cc9bf8bdb8d8c891be6 (patch) | |
tree | 7915799cbd31a0027acd534193894d8ae0148ecf | |
parent | 6c6be4c5f5f7158698dd5d143a6f6b7457c853f8 (diff) |
localrepo: Add mode information to `MergeTreeConflictError`
The `MergeTreeConflictError` doesn't contain the mode information of the
conflict files. Let's add this information as its needed by
`ListConflictFiles`.
-rw-r--r-- | internal/git/localrepo/merge.go | 7 | ||||
-rw-r--r-- | internal/git/localrepo/merge_test.go | 20 |
2 files changed, 27 insertions, 0 deletions
diff --git a/internal/git/localrepo/merge.go b/internal/git/localrepo/merge.go index 874a94d9b..4b09f1b01 100644 --- a/internal/git/localrepo/merge.go +++ b/internal/git/localrepo/merge.go @@ -163,6 +163,11 @@ func parseMergeTreeError(objectHash git.ObjectHash, cfg mergeTreeConfig, output return "", fmt.Errorf("parsing conflicting file info: %s", infoLine) } + mode, err := strconv.ParseInt(info[0], 8, 32) + if err != nil { + return "", fmt.Errorf("parsing mode: %w", err) + } + mergeTreeConflictError.ConflictingFileInfo[i].OID, err = objectHash.FromHex(info[1]) if err != nil { return "", fmt.Errorf("hex to oid: %w", err) @@ -177,6 +182,7 @@ func parseMergeTreeError(objectHash git.ObjectHash, cfg mergeTreeConfig, output return "", fmt.Errorf("invalid value for stage: %d", stage) } + mergeTreeConflictError.ConflictingFileInfo[i].Mode = int32(mode) mergeTreeConflictError.ConflictingFileInfo[i].Stage = MergeStage(stage) mergeTreeConflictError.ConflictingFileInfo[i].FileName = infoAndFilename[1] } @@ -213,6 +219,7 @@ func parseMergeTreeError(objectHash git.ObjectHash, cfg mergeTreeConfig, output // ConflictingFileInfo holds the conflicting file info output from git-merge-tree(1). type ConflictingFileInfo struct { FileName string + Mode int32 OID git.ObjectID Stage MergeStage } diff --git a/internal/git/localrepo/merge_test.go b/internal/git/localrepo/merge_test.go index 6e5dc5b70..3106e16d4 100644 --- a/internal/git/localrepo/merge_test.go +++ b/internal/git/localrepo/merge_test.go @@ -175,11 +175,13 @@ func TestMergeTree(t *testing.T) { FileName: "file2", OID: blob1, Stage: MergeStageOurs, + Mode: 0o100644, }, { FileName: "file2", OID: blob2, Stage: MergeStageTheirs, + Mode: 0o100644, }, }, ConflictInfoMessage: []ConflictInfoMessage{ @@ -251,16 +253,19 @@ func TestMergeTree(t *testing.T) { FileName: "file1", OID: blob1, Stage: MergeStageAncestor, + Mode: 0o100644, }, { FileName: "file1", OID: blob2, Stage: MergeStageOurs, + Mode: 0o100644, }, { FileName: "file1", OID: blob3, Stage: MergeStageTheirs, + Mode: 0o100644, }, }, ConflictInfoMessage: []ConflictInfoMessage{ @@ -321,11 +326,13 @@ func TestMergeTree(t *testing.T) { FileName: "file2", OID: blob2, Stage: MergeStageAncestor, + Mode: 0o100644, }, { FileName: "file2", OID: blob2, Stage: MergeStageOurs, + Mode: 0o100644, }, }, ConflictInfoMessage: []ConflictInfoMessage{ @@ -393,21 +400,25 @@ func TestMergeTree(t *testing.T) { FileName: "file2", OID: blob2a, Stage: MergeStageOurs, + Mode: 0o100644, }, { FileName: "file2", OID: blob3a, Stage: MergeStageTheirs, + Mode: 0o100644, }, { FileName: "file3", OID: blob2b, Stage: MergeStageOurs, + Mode: 0o100644, }, { FileName: "file3", OID: blob3b, Stage: MergeStageTheirs, + Mode: 0o100644, }, }, ConflictInfoMessage: []ConflictInfoMessage{ @@ -491,26 +502,31 @@ func TestMergeTree(t *testing.T) { FileName: "file1", OID: blob, Stage: MergeStageAncestor, + Mode: 0o100644, }, { FileName: "file1", OID: blob2a, Stage: MergeStageOurs, + Mode: 0o100644, }, { FileName: "file1", OID: blob3a, Stage: MergeStageTheirs, + Mode: 0o100644, }, { FileName: "file2", OID: blob2b, Stage: MergeStageOurs, + Mode: 0o100644, }, { FileName: "file2", OID: blob3b, Stage: MergeStageTheirs, + Mode: 0o100644, }, }, ConflictInfoMessage: []ConflictInfoMessage{ @@ -588,21 +604,25 @@ func TestMergeTree(t *testing.T) { FileName: "file1", OID: blob, Stage: MergeStageAncestor, + Mode: 0o100644, }, { FileName: "file1", OID: blob3a, Stage: MergeStageTheirs, + Mode: 0o100644, }, { FileName: "file2", OID: blob2b, Stage: MergeStageOurs, + Mode: 0o100644, }, { FileName: "file2", OID: blob3b, Stage: MergeStageTheirs, + Mode: 0o100644, }, }, ConflictInfoMessage: []ConflictInfoMessage{ |