diff --git a/bots-common/git_utils.go b/bots-common/git_utils.go index 84bb8fd..57d2e07 100644 --- a/bots-common/git_utils.go +++ b/bots-common/git_utils.go @@ -761,7 +761,8 @@ const ( GitStatus_Untracked = 0 GitStatus_Modified = 1 GitStatus_Ignored = 2 - GitStatus_Unmerged = 3 + GitStatus_Unmerged = 3 // States[0..3] -- Stage1, Stage2, Stage3 of merge objects + GitStatus_Renamed = 4 // orig name in States[0] ) type GitStatusData struct { @@ -834,6 +835,20 @@ func parseSingleStatusEntry(data io.ByteReader) (*GitStatusData, error) { if err != nil { return nil, err } + case '2': + var err error + if err = skipGitStatusEntry(data, 9); err != nil { + return nil, err + } + ret.Status = GitStatus_Renamed + ret.Path, err = parseGitStatusString(data) + if err != nil { + return nil, err + } + ret.States[0], err = parseGitStatusString(data) + if err != nil { + return nil, err + } case '?': var err error if err = skipGitStatusEntry(data, 1); err != nil { diff --git a/bots-common/git_utils_test.go b/bots-common/git_utils_test.go index ed3cb33..faa4e06 100644 --- a/bots-common/git_utils_test.go +++ b/bots-common/git_utils_test.go @@ -376,6 +376,22 @@ func TestGitStatusParse(t *testing.T) { }, }, }, + { + name: "Renamed file", + data: []byte("1 M. N... 100644 100644 100644 d23eb05d9ca92883ab9f4d28f3ec90c05f667f3a5c8c8e291bd65e03bac9ae3c 896cd09f36d39e782d66ae32dd5614d4f4d83fc689f132aab2dfc019a9f5b6f3 .gitmodules\x002 R. S... 160000 160000 160000 3befe051a34612530acfa84c736d2454278453ec0f78ec028f25d2980f8c3559 3befe051a34612530acfa84c736d2454278453ec0f78ec028f25d2980f8c3559 R100 pkgQ\x00pkgC\x00"), + res: []GitStatusData{ + { + Path: "pkgQ", + Status: GitStatus_Renamed, + States: [3]string{"pkgC"}, + + }, + { + Path: ".gitmodules", + Status: GitStatus_Modified, + }, + }, + }, } for _, test := range testData {