@ -343,8 +343,10 @@ func checkConflicts(pr *models.PullRequest, gitRepo *git.Repository, tmpBasePath
if prConfig . IgnoreWhitespaceConflicts {
if prConfig . IgnoreWhitespaceConflicts {
args = append ( args , "--ignore-whitespace" )
args = append ( args , "--ignore-whitespace" )
}
}
is3way := false
if git . CheckGitVersionAtLeast ( "2.32.0" ) == nil {
if git . CheckGitVersionAtLeast ( "2.32.0" ) == nil {
args = append ( args , "--3way" )
args = append ( args , "--3way" )
is3way = true
}
}
args = append ( args , patchPath )
args = append ( args , patchPath )
pr . ConflictedFiles = make ( [ ] string , 0 , 5 )
pr . ConflictedFiles = make ( [ ] string , 0 , 5 )
@ -383,6 +385,9 @@ func checkConflicts(pr *models.PullRequest, gitRepo *git.Repository, tmpBasePath
const prefix = "error: patch failed:"
const prefix = "error: patch failed:"
const errorPrefix = "error: "
const errorPrefix = "error: "
const threewayFailed = "Failed to perform three-way merge..."
const appliedPatchPrefix = "Applied patch to '"
const withConflicts = "' with conflicts."
conflictMap := map [ string ] bool { }
conflictMap := map [ string ] bool { }
@ -394,6 +399,8 @@ func checkConflicts(pr *models.PullRequest, gitRepo *git.Repository, tmpBasePath
conflict = true
conflict = true
filepath := strings . TrimSpace ( strings . Split ( line [ len ( prefix ) : ] , ":" ) [ 0 ] )
filepath := strings . TrimSpace ( strings . Split ( line [ len ( prefix ) : ] , ":" ) [ 0 ] )
conflictMap [ filepath ] = true
conflictMap [ filepath ] = true
} else if is3way && line == threewayFailed {
conflict = true
} else if strings . HasPrefix ( line , errorPrefix ) {
} else if strings . HasPrefix ( line , errorPrefix ) {
conflict = true
conflict = true
for _ , suffix := range patchErrorSuffices {
for _ , suffix := range patchErrorSuffices {
@ -405,6 +412,12 @@ func checkConflicts(pr *models.PullRequest, gitRepo *git.Repository, tmpBasePath
break
break
}
}
}
}
} else if is3way && strings . HasPrefix ( line , appliedPatchPrefix ) && strings . HasSuffix ( line , withConflicts ) {
conflict = true
filepath := strings . TrimPrefix ( strings . TrimSuffix ( line , withConflicts ) , appliedPatchPrefix )
if filepath != "" {
conflictMap [ filepath ] = true
}
}
}
// only list 10 conflicted files
// only list 10 conflicted files
if len ( conflictMap ) >= 10 {
if len ( conflictMap ) >= 10 {