github_repo_statistics 2.2.28 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 2992ae14c4b2bab0ffc8cdee2c5c2e33a0b7dcc08f2fdb62b194975e944dd625
         | 
| 4 | 
            +
              data.tar.gz: 43837ce970edb37d1f52fc88a97a4799d7cf72d33057788d06e71bee9e90e4e7
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: f1566d02371061b2a29bd5177438c5fc399c0e554144f110940b686b865c6f7959ca7f7bd54db700ae4745725d430457ec7508c8eb5be0ebf3cbd682c5efca3d
         | 
| 7 | 
            +
              data.tar.gz: f13509d5a8de4daa42c02a5194b3814a75d2110b15ab63b0cfb503ac6d2a76aa75d9d1a496b613b723e6f3596ea0d113ba59577f738ae501a1b2d762161a03dd
         | 
| @@ -181,6 +181,10 @@ class GithubRepoStatistics | |
| 181 181 | 
             
                `git log origin/master --pretty=format:"%s" --since="#{start_date}" --until="#{end_date}" -- "#{file}"`
         | 
| 182 182 | 
             
              end
         | 
| 183 183 |  | 
| 184 | 
            +
              def new_changes?(file:)
         | 
| 185 | 
            +
                git_commit_info(file:, start_date: DateTime.now - 1, end_date: DateTime.now) == "" ? false : true
         | 
| 186 | 
            +
              end
         | 
| 187 | 
            +
             | 
| 184 188 | 
             
              def analyze_changed_files(uniq_code_files_with_changes:, start_date:, end_date:)
         | 
| 185 189 | 
             
                all_teams = []
         | 
| 186 190 | 
             
                cross_teams_count = 0
         | 
| @@ -192,6 +196,13 @@ class GithubRepoStatistics | |
| 192 196 | 
             
                  filename = File.basename(file)
         | 
| 193 197 | 
             
                  commit_count = git_commit_count(file:, start_date:, end_date:).to_i
         | 
| 194 198 | 
             
                  git_log = git_commit_info(file:, start_date:, end_date:).split("\n")
         | 
| 199 | 
            +
                  prs = git_log.map do |pr|
         | 
| 200 | 
            +
                    match = pr.match(/#(\d+)/)
         | 
| 201 | 
            +
                    if match
         | 
| 202 | 
            +
                      match[0]
         | 
| 203 | 
            +
                    end
         | 
| 204 | 
            +
                  end.uniq
         | 
| 205 | 
            +
             | 
| 195 206 | 
             
                  teams = git_log.map do |team|
         | 
| 196 207 | 
             
                    team.match(/#{TEAM_REGEX}/)[0].upcase
         | 
| 197 208 | 
             
                  end.reject { |e| EXCLUSIONS&.include?(e) }
         | 
| @@ -202,7 +213,7 @@ class GithubRepoStatistics | |
| 202 213 |  | 
| 203 214 | 
             
                  if teams.count > 1
         | 
| 204 215 | 
             
                    files_changed_by_many_teams += 1
         | 
| 205 | 
            -
                    file_team_map.merge!(file.to_s => [teams, commit_count])
         | 
| 216 | 
            +
                    file_team_map.merge!(file.to_s => [teams, prs, commit_count])
         | 
| 206 217 | 
             
                    cross_teams_count += teams.count
         | 
| 207 218 | 
             
                  else
         | 
| 208 219 | 
             
                    single_ownership_teams_count += 1
         | 
| @@ -238,7 +249,7 @@ class GithubRepoStatistics | |
| 238 249 | 
             
                occurrences = all_teams.flatten.compact.tally
         | 
| 239 250 | 
             
                sorted_occurrences = occurrences.sort_by { |element, count| [-count, element] }
         | 
| 240 251 | 
             
                contributors = Hash[sorted_occurrences]
         | 
| 241 | 
            -
                churn_count = file_team_map.values.map { |value| value | 
| 252 | 
            +
                churn_count = file_team_map.values.map { |value| value.last }.sum
         | 
| 242 253 | 
             
                hotspot_changes_percentage = ((churn_count.to_f / total_changes) * 100).round(2)
         | 
| 243 254 | 
             
                # Filter files based on extension, existence and size
         | 
| 244 255 | 
             
                filtered_files = filter_files(file_team_map:)
         | 
| @@ -322,15 +333,17 @@ class GithubRepoStatistics | |
| 322 333 | 
             
                    lines_of_code = count_lines_of_code(file)
         | 
| 323 334 | 
             
                    commits = line.last.last
         | 
| 324 335 | 
             
                    owner = find_owner(file:)
         | 
| 336 | 
            +
                    prs = line.last[1]
         | 
| 337 | 
            +
                    new_change = new_changes?(file:)
         | 
| 325 338 |  | 
| 326 | 
            -
                    hotspot_output << [file.gsub(@directory_path, ''), contributors, lines_of_code, commits, owner]
         | 
| 339 | 
            +
                    hotspot_output << [file.gsub(@directory_path, ''), new_change, contributors, lines_of_code, commits, owner, prs]
         | 
| 327 340 | 
             
                  end
         | 
| 328 341 |  | 
| 329 | 
            -
                  hotspot_output.sort_by! { |row| -row[ | 
| 342 | 
            +
                  hotspot_output.sort_by! { |row| -row[3] }
         | 
| 330 343 |  | 
| 331 344 | 
             
                  if FILE_OUTPUT
         | 
| 332 345 | 
             
                    CSV.open('hotspot.csv', 'w') do |csv|
         | 
| 333 | 
            -
                      csv << ['File', 'Contributors', 'Lines', 'Commits', 'Owner']
         | 
| 346 | 
            +
                      csv << ['File', 'New change', 'Contributors', 'Lines', 'Commits', 'Owner', 'PRs']
         | 
| 334 347 | 
             
                      hotspot_output.each do |row|
         | 
| 335 348 | 
             
                        csv << row
         | 
| 336 349 | 
             
                      end
         | 
| @@ -338,7 +351,7 @@ class GithubRepoStatistics | |
| 338 351 | 
             
                  else
         | 
| 339 352 | 
             
                    puts "\n   *Hotspot files(#{filtered_top_touched_files.count}):*\n"
         | 
| 340 353 | 
             
                    hotspot_output.each do |row|
         | 
| 341 | 
            -
                      puts "     #{row[0]} Contributors: #{row[1]}  | 
| 354 | 
            +
                      puts "     #{row[0]} Contributors: #{row[1]} New change: #{row[2]} Lines: #{row[3]} Commits: #{row[4]} Owner: #{row[5]} PRs: #{row[6]}"
         | 
| 342 355 | 
             
                    end
         | 
| 343 356 | 
             
                  end
         | 
| 344 357 | 
             
                end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: github_repo_statistics
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 2. | 
| 4 | 
            +
              version: 2.3.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Serghei Moret
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2024-05- | 
| 11 | 
            +
            date: 2024-05-07 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: date
         |