@ -422,6 +422,50 @@ func GetDiffRange(repoPath, beforeCommitID string, afterCommitID string, maxLine
return diff , nil
return diff , nil
}
}
func GetDiffCommit ( repoPath , commitId string , maxLines , maxLineCharacteres , maxFiles int ) ( * Diff , error ) {
func GetRawDiff ( repoPath , commitID , diffType string ) ( string , error ) {
return GetDiffRange ( repoPath , "" , commitId , maxLines , maxLineCharacteres , maxFiles )
repo , err := git . OpenRepository ( repoPath )
if err != nil {
return "" , err
}
commit , err := repo . GetCommit ( commitID )
if err != nil {
return "" , err
}
var cmd * exec . Cmd
switch diffType {
case "diff" :
if commit . ParentCount ( ) == 0 {
cmd = exec . Command ( "git" , "show" , commitID )
} else {
c , _ := commit . Parent ( 0 )
cmd = exec . Command ( "git" , "diff" , "-M" , c . ID . String ( ) , commitID )
}
case "patch" :
if commit . ParentCount ( ) == 0 {
cmd = exec . Command ( "git" , "format-patch" , "--no-signature" , "--stdout" , "--root" , commitID )
} else {
c , _ := commit . Parent ( 0 )
query := fmt . Sprintf ( "%s...%s" , commitID , c . ID . String ( ) )
cmd = exec . Command ( "git" , "format-patch" , "--no-signature" , "--stdout" , query )
}
default :
return "" , fmt . Errorf ( "Invalid diffType '%s'" , diffType )
}
stderr := new ( bytes . Buffer )
cmd . Dir = repoPath
cmd . Stderr = stderr
stdout , err := cmd . Output ( )
if err != nil {
return "" , fmt . Errorf ( "%v - %s" , err , stderr )
}
return string ( stdout ) , nil
}
func GetDiffCommit ( repoPath , commitID string , maxLines , maxLineCharacteres , maxFiles int ) ( * Diff , error ) {
return GetDiffRange ( repoPath , "" , commitID , maxLines , maxLineCharacteres , maxFiles )
}
}