Skip to content

Commit

Permalink
Merge pull request #221 from vmarkovtsev/master
Browse files Browse the repository at this point in the history
Fix the --couples combination bugs
  • Loading branch information
vmarkovtsev committed Feb 27, 2019
2 parents b9eeab1 + 462c080 commit d286698
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 12 deletions.
2 changes: 1 addition & 1 deletion internal/pb/pb.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion internal/pb/pb.proto
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ message CouplesAnalysisResults {
Couples people_couples = 7;
// order corresponds to `people_couples::index`
repeated TouchedFiles people_files = 8;
// order corresponds to `files_couples::index`
// order corresponds to `file_couples::index`
repeated int32 files_lines = 9;
}

Expand Down Expand Up @@ -109,6 +109,7 @@ message ShotnessAnalysisResults {

message FileHistory {
repeated string commits = 1;
//map<int32, int32> changes_by_developer = 2;
}

message FileHistoryResultMessage {
Expand Down
Binary file modified internal/test_data/couples.pb
Binary file not shown.
31 changes: 21 additions & 10 deletions leaves/couples.go
Original file line number Diff line number Diff line change
Expand Up @@ -295,12 +295,18 @@ func (couples *CouplesAnalysis) Deserialize(pbmessage []byte) (interface{}, erro
reversedPeopleDict: message.PeopleCouples.Index,
}
for i, files := range message.PeopleFiles {
result.FilesLines[i] = int(message.FilesLines[i])
result.PeopleFiles[i] = make([]int, len(files.Files))
for j, val := range files.Files {
result.PeopleFiles[i][j] = int(val)
}
}
if len(message.FileCouples.Index) != len(message.FilesLines) {
log.Panicf("Couples PB message integrity violation: file_couples (%d) != file_lines (%d)",
len(message.FileCouples.Index), len(message.FilesLines))
}
for i, v := range message.FilesLines {
result.FilesLines[i] = int(v)
}
convertCSR := func(dest []map[int]int64, src *pb.CompressedSparseRowMatrix) {
for indptr := range src.Indptr {
if indptr == 0 {
Expand All @@ -323,9 +329,9 @@ func (couples *CouplesAnalysis) MergeResults(r1, r2 interface{}, c1, c2 *core.Co
cr2 := r2.(CouplesResult)
merged := CouplesResult{}
var people, files map[string][3]int
people, merged.reversedPeopleDict = identity.Detector{}.MergeReversedDicts(
cr1.reversedPeopleDict, cr2.reversedPeopleDict)
files, merged.Files = identity.Detector{}.MergeReversedDicts(cr1.Files, cr2.Files)
id := identity.Detector{}
people, merged.reversedPeopleDict = id.MergeReversedDicts(cr1.reversedPeopleDict, cr2.reversedPeopleDict)
files, merged.Files = id.MergeReversedDicts(cr1.Files, cr2.Files)
merged.FilesLines = make([]int, len(merged.Files))
for i, name := range merged.Files {
idxs := files[name]
Expand Down Expand Up @@ -364,8 +370,7 @@ func (couples *CouplesAnalysis) MergeResults(r1, r2 interface{}, c1, c2 *core.Co
sort.Ints(merged.PeopleFiles[i])
}
merged.PeopleMatrix = make([]map[int]int64, len(merged.reversedPeopleDict)+1)
addPeople := func(peopleMatrix []map[int]int64, reversedPeopleDict []string,
reversedFilesDict []string) {
addPeople := func(peopleMatrix []map[int]int64, reversedPeopleDict []string) {
for pi, pc := range peopleMatrix {
var idx int
if pi < len(reversedPeopleDict) {
Expand All @@ -378,13 +383,19 @@ func (couples *CouplesAnalysis) MergeResults(r1, r2 interface{}, c1, c2 *core.Co
m = map[int]int64{}
merged.PeopleMatrix[idx] = m
}
for file, val := range pc {
m[files[reversedFilesDict[file]][0]] += val
for otherDev, val := range pc {
var otherIdx int
if otherDev < len(reversedPeopleDict) {
otherIdx = people[reversedPeopleDict[otherDev]][0]
} else {
otherIdx = len(merged.reversedPeopleDict)
}
m[otherIdx] += val
}
}
}
addPeople(cr1.PeopleMatrix, cr1.reversedPeopleDict, cr1.Files)
addPeople(cr2.PeopleMatrix, cr2.reversedPeopleDict, cr2.Files)
addPeople(cr1.PeopleMatrix, cr1.reversedPeopleDict)
addPeople(cr2.PeopleMatrix, cr2.reversedPeopleDict)
merged.FilesMatrix = make([]map[int]int64, len(merged.Files))
addFiles := func(filesMatrix []map[int]int64, reversedFilesDict []string) {
for fi, fc := range filesMatrix {
Expand Down
3 changes: 3 additions & 0 deletions leaves/couples_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -455,6 +455,9 @@ func TestCouplesDeserialize(t *testing.T) {
assert.Len(t, result.PeopleMatrix, 3)
assert.Len(t, result.Files, 74)
assert.Len(t, result.FilesLines, 74)
for _, v := range result.FilesLines {
assert.True(t, v > 0)
}
assert.Len(t, result.FilesMatrix, 74)
}

Expand Down

0 comments on commit d286698

Please sign in to comment.