@@ -130,3 +130,109 @@ func TestHasPreviousCommit(t *testing.T) {
130130 assert .NoError (t , err )
131131 assert .False (t , selfNot )
132132}
133+
134+ func TestParseCommitFileStatus (t * testing.T ) {
135+ type testcase struct {
136+ output string
137+ added []string
138+ removed []string
139+ modified []string
140+ }
141+
142+ kases := []testcase {
143+ {
144+ // Merge commit
145+ output : "MM\x00 options/locale/locale_en-US.ini\x00 " ,
146+ modified : []string {
147+ "options/locale/locale_en-US.ini" ,
148+ },
149+ added : []string {},
150+ removed : []string {},
151+ },
152+ {
153+ // Spaces commit
154+ output : "D\x00 b\x00 D\x00 b b/b\x00 A\x00 b b/b b/b b/b\x00 A\x00 b b/b b/b b/b b/b\x00 " ,
155+ removed : []string {
156+ "b" ,
157+ "b b/b" ,
158+ },
159+ modified : []string {},
160+ added : []string {
161+ "b b/b b/b b/b" ,
162+ "b b/b b/b b/b b/b" ,
163+ },
164+ },
165+ {
166+ // larger commit
167+ output : "M\x00 go.mod\x00 M\x00 go.sum\x00 M\x00 modules/ssh/ssh.go\x00 M\x00 vendor/github.com/gliderlabs/ssh/circle.yml\x00 M\x00 vendor/github.com/gliderlabs/ssh/context.go\x00 A\x00 vendor/github.com/gliderlabs/ssh/go.mod\x00 A\x00 vendor/github.com/gliderlabs/ssh/go.sum\x00 M\x00 vendor/github.com/gliderlabs/ssh/server.go\x00 M\x00 vendor/github.com/gliderlabs/ssh/session.go\x00 M\x00 vendor/github.com/gliderlabs/ssh/ssh.go\x00 M\x00 vendor/golang.org/x/sys/unix/mkerrors.sh\x00 M\x00 vendor/golang.org/x/sys/unix/syscall_darwin.go\x00 M\x00 vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go\x00 M\x00 vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go\x00 M\x00 vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go\x00 M\x00 vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go\x00 M\x00 vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go\x00 M\x00 vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go\x00 M\x00 vendor/golang.org/x/sys/unix/zerrors_linux.go\x00 M\x00 vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go\x00 M\x00 vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go\x00 M\x00 vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go\x00 M\x00 vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go\x00 M\x00 vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go\x00 M\x00 vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go\x00 M\x00 vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go\x00 M\x00 vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go\x00 M\x00 vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go\x00 M\x00 vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go\x00 M\x00 vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go\x00 M\x00 vendor/modules.txt\x00 " ,
168+ modified : []string {
169+ "go.mod" ,
170+ "go.sum" ,
171+ "modules/ssh/ssh.go" ,
172+ "vendor/github.com/gliderlabs/ssh/circle.yml" ,
173+ "vendor/github.com/gliderlabs/ssh/context.go" ,
174+ "vendor/github.com/gliderlabs/ssh/server.go" ,
175+ "vendor/github.com/gliderlabs/ssh/session.go" ,
176+ "vendor/github.com/gliderlabs/ssh/ssh.go" ,
177+ "vendor/golang.org/x/sys/unix/mkerrors.sh" ,
178+ "vendor/golang.org/x/sys/unix/syscall_darwin.go" ,
179+ "vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go" ,
180+ "vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go" ,
181+ "vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go" ,
182+ "vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go" ,
183+ "vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go" ,
184+ "vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go" ,
185+ "vendor/golang.org/x/sys/unix/zerrors_linux.go" ,
186+ "vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go" ,
187+ "vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go" ,
188+ "vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go" ,
189+ "vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go" ,
190+ "vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go" ,
191+ "vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go" ,
192+ "vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go" ,
193+ "vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go" ,
194+ "vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go" ,
195+ "vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go" ,
196+ "vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go" ,
197+ "vendor/modules.txt" ,
198+ },
199+ added : []string {
200+ "vendor/github.com/gliderlabs/ssh/go.mod" ,
201+ "vendor/github.com/gliderlabs/ssh/go.sum" ,
202+ },
203+ removed : []string {},
204+ },
205+ {
206+ // git 1.7.2 adds an unnecessary \x00 on merge commit
207+ output : "\x00 MM\x00 options/locale/locale_en-US.ini\x00 " ,
208+ modified : []string {
209+ "options/locale/locale_en-US.ini" ,
210+ },
211+ added : []string {},
212+ removed : []string {},
213+ },
214+ {
215+ // git 1.7.2 adds an unnecessary \n on normal commit
216+ output : "\n D\x00 b\x00 D\x00 b b/b\x00 A\x00 b b/b b/b b/b\x00 A\x00 b b/b b/b b/b b/b\x00 " ,
217+ removed : []string {
218+ "b" ,
219+ "b b/b" ,
220+ },
221+ modified : []string {},
222+ added : []string {
223+ "b b/b b/b b/b" ,
224+ "b b/b b/b b/b b/b" ,
225+ },
226+ },
227+ }
228+
229+ for _ , kase := range kases {
230+ fileStatus := NewCommitFileStatus ()
231+ parseCommitFileStatus (fileStatus , strings .NewReader (kase .output ))
232+
233+ assert .Equal (t , kase .added , fileStatus .Added )
234+ assert .Equal (t , kase .removed , fileStatus .Removed )
235+ assert .Equal (t , kase .modified , fileStatus .Modified )
236+ }
237+
238+ }
0 commit comments