@@ -5,17 +5,16 @@ type Repositories []Repository
5
5
6
6
// repositories take a slice of sessions and returns the repositories.
7
7
func repositories (sessions Sessions ) Repositories {
8
- filesByRepo := repositoryPathFile (sessions )
9
- repos := make (Repositories , 0 )
10
-
11
- for repositoryName , filenameFileMap := range filesByRepo {
12
- var durationMs int64
13
- files := make ([] AggregatedFile , 0 )
14
- for _ , file := range filenameFileMap {
15
- files = append (files , file )
16
- durationMs += file .DurationMs
8
+ namesWithFiles := repositoryNamesWithFiles (sessions )
9
+ repos := make (Repositories , 0 , len ( namesWithFiles ) )
10
+
11
+ for repositoryName , filepathFile := range namesWithFiles {
12
+ files := make ( AggregatedFiles , 0 , len ( filepathFile ))
13
+ repo := Repository { Name : repositoryName , Files : files }
14
+ for _ , file := range filepathFile {
15
+ repo . Files = append (repo . Files , file )
16
+ repo . DurationMs += file .DurationMs
17
17
}
18
- repo := Repository {Name : repositoryName , Files : files , DurationMs : durationMs }
19
18
repos = append (repos , repo )
20
19
}
21
20
@@ -34,25 +33,20 @@ func repositoriesByName(repos Repositories) map[string]Repository {
34
33
35
34
// merge takes two lists of repositories, merges them, and returns the result.
36
35
func (r Repositories ) merge (b Repositories ) Repositories {
37
- mergedRepositories := make ([]Repository , 0 )
38
- aRepoMap , bRepoMap := repositoriesByName (r ), repositoriesByName (b )
39
-
40
- // Add repos that are unique for a and merge collisions.
41
- for _ , aRepo := range r {
42
- if bRepo , ok := bRepoMap [aRepo .Name ]; ! ok {
43
- mergedRepositories = append (mergedRepositories , aRepo )
44
- } else {
45
- mergedRepositories = append (mergedRepositories , aRepo .merge (bRepo ))
46
- }
36
+ aNames , bNames := repositoriesByName (r ), repositoriesByName (b )
37
+ allNames := make (map [string ]bool )
38
+ for name := range aNames {
39
+ allNames [name ] = true
47
40
}
48
-
49
- // The merging is done at this point. Here we'll add the
50
- // repositories that are unique to the new session.
51
- for _ , newRepo := range b {
52
- if _ , ok := aRepoMap [newRepo .Name ]; ! ok {
53
- mergedRepositories = append (mergedRepositories , newRepo )
54
- }
41
+ for name := range bNames {
42
+ allNames [name ] = true
55
43
}
56
44
45
+ mergedRepositories := make ([]Repository , 0 )
46
+ for name := range allNames {
47
+ aRepo := aNames [name ]
48
+ bRepo := bNames [name ]
49
+ mergedRepositories = append (mergedRepositories , aRepo .merge (bRepo ))
50
+ }
57
51
return mergedRepositories
58
52
}
0 commit comments