Skip to content

Commit d286698

Browse files
authoredFeb 27, 2019
Merge pull request #221 from vmarkovtsev/master
Fix the --couples combination bugs
2 parents b9eeab1 + 462c080 commit d286698

File tree

5 files changed

+27
-12
lines changed

5 files changed

+27
-12
lines changed
 

‎internal/pb/pb.pb.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎internal/pb/pb.proto

+2-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ message CouplesAnalysisResults {
8080
Couples people_couples = 7;
8181
// order corresponds to `people_couples::index`
8282
repeated TouchedFiles people_files = 8;
83-
// order corresponds to `files_couples::index`
83+
// order corresponds to `file_couples::index`
8484
repeated int32 files_lines = 9;
8585
}
8686

@@ -109,6 +109,7 @@ message ShotnessAnalysisResults {
109109

110110
message FileHistory {
111111
repeated string commits = 1;
112+
//map<int32, int32> changes_by_developer = 2;
112113
}
113114

114115
message FileHistoryResultMessage {

‎internal/test_data/couples.pb

75 Bytes
Binary file not shown.

‎leaves/couples.go

+21-10
Original file line numberDiff line numberDiff line change
@@ -295,12 +295,18 @@ func (couples *CouplesAnalysis) Deserialize(pbmessage []byte) (interface{}, erro
295295
reversedPeopleDict: message.PeopleCouples.Index,
296296
}
297297
for i, files := range message.PeopleFiles {
298-
result.FilesLines[i] = int(message.FilesLines[i])
299298
result.PeopleFiles[i] = make([]int, len(files.Files))
300299
for j, val := range files.Files {
301300
result.PeopleFiles[i][j] = int(val)
302301
}
303302
}
303+
if len(message.FileCouples.Index) != len(message.FilesLines) {
304+
log.Panicf("Couples PB message integrity violation: file_couples (%d) != file_lines (%d)",
305+
len(message.FileCouples.Index), len(message.FilesLines))
306+
}
307+
for i, v := range message.FilesLines {
308+
result.FilesLines[i] = int(v)
309+
}
304310
convertCSR := func(dest []map[int]int64, src *pb.CompressedSparseRowMatrix) {
305311
for indptr := range src.Indptr {
306312
if indptr == 0 {
@@ -323,9 +329,9 @@ func (couples *CouplesAnalysis) MergeResults(r1, r2 interface{}, c1, c2 *core.Co
323329
cr2 := r2.(CouplesResult)
324330
merged := CouplesResult{}
325331
var people, files map[string][3]int
326-
people, merged.reversedPeopleDict = identity.Detector{}.MergeReversedDicts(
327-
cr1.reversedPeopleDict, cr2.reversedPeopleDict)
328-
files, merged.Files = identity.Detector{}.MergeReversedDicts(cr1.Files, cr2.Files)
332+
id := identity.Detector{}
333+
people, merged.reversedPeopleDict = id.MergeReversedDicts(cr1.reversedPeopleDict, cr2.reversedPeopleDict)
334+
files, merged.Files = id.MergeReversedDicts(cr1.Files, cr2.Files)
329335
merged.FilesLines = make([]int, len(merged.Files))
330336
for i, name := range merged.Files {
331337
idxs := files[name]
@@ -364,8 +370,7 @@ func (couples *CouplesAnalysis) MergeResults(r1, r2 interface{}, c1, c2 *core.Co
364370
sort.Ints(merged.PeopleFiles[i])
365371
}
366372
merged.PeopleMatrix = make([]map[int]int64, len(merged.reversedPeopleDict)+1)
367-
addPeople := func(peopleMatrix []map[int]int64, reversedPeopleDict []string,
368-
reversedFilesDict []string) {
373+
addPeople := func(peopleMatrix []map[int]int64, reversedPeopleDict []string) {
369374
for pi, pc := range peopleMatrix {
370375
var idx int
371376
if pi < len(reversedPeopleDict) {
@@ -378,13 +383,19 @@ func (couples *CouplesAnalysis) MergeResults(r1, r2 interface{}, c1, c2 *core.Co
378383
m = map[int]int64{}
379384
merged.PeopleMatrix[idx] = m
380385
}
381-
for file, val := range pc {
382-
m[files[reversedFilesDict[file]][0]] += val
386+
for otherDev, val := range pc {
387+
var otherIdx int
388+
if otherDev < len(reversedPeopleDict) {
389+
otherIdx = people[reversedPeopleDict[otherDev]][0]
390+
} else {
391+
otherIdx = len(merged.reversedPeopleDict)
392+
}
393+
m[otherIdx] += val
383394
}
384395
}
385396
}
386-
addPeople(cr1.PeopleMatrix, cr1.reversedPeopleDict, cr1.Files)
387-
addPeople(cr2.PeopleMatrix, cr2.reversedPeopleDict, cr2.Files)
397+
addPeople(cr1.PeopleMatrix, cr1.reversedPeopleDict)
398+
addPeople(cr2.PeopleMatrix, cr2.reversedPeopleDict)
388399
merged.FilesMatrix = make([]map[int]int64, len(merged.Files))
389400
addFiles := func(filesMatrix []map[int]int64, reversedFilesDict []string) {
390401
for fi, fc := range filesMatrix {

‎leaves/couples_test.go

+3
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,9 @@ func TestCouplesDeserialize(t *testing.T) {
455455
assert.Len(t, result.PeopleMatrix, 3)
456456
assert.Len(t, result.Files, 74)
457457
assert.Len(t, result.FilesLines, 74)
458+
for _, v := range result.FilesLines {
459+
assert.True(t, v > 0)
460+
}
458461
assert.Len(t, result.FilesMatrix, 74)
459462
}
460463

0 commit comments

Comments
 (0)
Please sign in to comment.