@@ -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 {
0 commit comments