reorganaize issues fetching in more clear way
This commit is contained in:
		
							parent
							
								
									3f076b3069
								
							
						
					
					
						commit
						b10707b259
					
				@ -1,28 +1,28 @@
 | 
				
			|||||||
# This configuration was generated by `rubocop --auto-gen-config`
 | 
					# This configuration was generated by `rubocop --auto-gen-config`
 | 
				
			||||||
# on 2015-05-22 15:59:03 +0300 using RuboCop version 0.31.0.
 | 
					# on 2015-05-22 17:34:14 +0300 using RuboCop version 0.31.0.
 | 
				
			||||||
# The point is for the user to remove these configuration records
 | 
					# The point is for the user to remove these configuration records
 | 
				
			||||||
# one by one as the offenses are removed from the code base.
 | 
					# one by one as the offenses are removed from the code base.
 | 
				
			||||||
# Note that changes in the inspected code, or installation of new
 | 
					# Note that changes in the inspected code, or installation of new
 | 
				
			||||||
# versions of RuboCop, may require this file to be generated again.
 | 
					# versions of RuboCop, may require this file to be generated again.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Offense count: 17
 | 
					# Offense count: 16
 | 
				
			||||||
Metrics/AbcSize:
 | 
					Metrics/AbcSize:
 | 
				
			||||||
  Max: 73
 | 
					  Max: 73
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Offense count: 2
 | 
					# Offense count: 1
 | 
				
			||||||
Metrics/BlockNesting:
 | 
					Metrics/BlockNesting:
 | 
				
			||||||
  Max: 4
 | 
					  Max: 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Offense count: 3
 | 
					# Offense count: 4
 | 
				
			||||||
# Configuration parameters: CountComments.
 | 
					# Configuration parameters: CountComments.
 | 
				
			||||||
Metrics/ClassLength:
 | 
					Metrics/ClassLength:
 | 
				
			||||||
  Max: 280
 | 
					  Max: 162
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Offense count: 5
 | 
					# Offense count: 4
 | 
				
			||||||
Metrics/CyclomaticComplexity:
 | 
					Metrics/CyclomaticComplexity:
 | 
				
			||||||
  Max: 15
 | 
					  Max: 15
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Offense count: 23
 | 
					# Offense count: 21
 | 
				
			||||||
# Configuration parameters: CountComments.
 | 
					# Configuration parameters: CountComments.
 | 
				
			||||||
Metrics/MethodLength:
 | 
					Metrics/MethodLength:
 | 
				
			||||||
  Max: 121
 | 
					  Max: 121
 | 
				
			||||||
@ -31,7 +31,7 @@ Metrics/MethodLength:
 | 
				
			|||||||
Metrics/PerceivedComplexity:
 | 
					Metrics/PerceivedComplexity:
 | 
				
			||||||
  Max: 18
 | 
					  Max: 18
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Offense count: 4
 | 
					# Offense count: 2
 | 
				
			||||||
Style/AccessorMethodName:
 | 
					Style/AccessorMethodName:
 | 
				
			||||||
  Enabled: false
 | 
					  Enabled: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -44,7 +44,7 @@ Style/Documentation:
 | 
				
			|||||||
Style/GuardClause:
 | 
					Style/GuardClause:
 | 
				
			||||||
  Enabled: false
 | 
					  Enabled: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Offense count: 2
 | 
					# Offense count: 1
 | 
				
			||||||
# Configuration parameters: EnforcedStyle, MinBodyLength, SupportedStyles.
 | 
					# Configuration parameters: EnforcedStyle, MinBodyLength, SupportedStyles.
 | 
				
			||||||
Style/Next:
 | 
					Style/Next:
 | 
				
			||||||
  Enabled: false
 | 
					  Enabled: false
 | 
				
			||||||
 | 
				
			|||||||
@ -10,6 +10,7 @@ require_relative "github_changelog_generator/generator/generator"
 | 
				
			|||||||
require_relative "github_changelog_generator/version"
 | 
					require_relative "github_changelog_generator/version"
 | 
				
			||||||
require_relative "github_changelog_generator/reader"
 | 
					require_relative "github_changelog_generator/reader"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The main module, where placed all classes (now, at least)
 | 
				
			||||||
module GitHubChangelogGenerator
 | 
					module GitHubChangelogGenerator
 | 
				
			||||||
  # Main class and entry point for this script.
 | 
					  # Main class and entry point for this script.
 | 
				
			||||||
  class ChangelogGenerator
 | 
					  class ChangelogGenerator
 | 
				
			||||||
 | 
				
			|||||||
@ -20,18 +20,35 @@ module GitHubChangelogGenerator
 | 
				
			|||||||
      @options = options
 | 
					      @options = options
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      @fetcher = GitHubChangelogGenerator::Fetcher.new @options
 | 
					      @fetcher = GitHubChangelogGenerator::Fetcher.new @options
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      fetch_tags
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      fetch_issues_and_pr
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def fetch_issues_and_pr
 | 
				
			||||||
 | 
					      issues, pull_requests = @fetcher.fetch_closed_issues_and_pr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      @pull_requests = @options[:pulls] ? get_filtered_pull_requests(pull_requests) : []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      @issues = @options[:issues] ? get_filtered_issues(issues) : []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      fetch_events_for_issues_and_pr
 | 
				
			||||||
 | 
					      detect_actual_closed_dates(@issues + @pull_requests)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def fetch_tags
 | 
				
			||||||
      # @all_tags = get_filtered_tags
 | 
					      # @all_tags = get_filtered_tags
 | 
				
			||||||
      @all_tags = @fetcher.get_all_tags
 | 
					      @all_tags = @fetcher.get_all_tags
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # TODO: refactor this double asssign of @issues and @pull_requests and move all logic in one method
 | 
					      fetch_tags_dates
 | 
				
			||||||
      @issues, @pull_requests = @fetcher.fetch_closed_issues_and_pr
 | 
					      sort_tags_by_date
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      @pull_requests = @options[:pulls] ? get_filtered_pull_requests : []
 | 
					    # Sort all tags by date
 | 
				
			||||||
 | 
					    def sort_tags_by_date
 | 
				
			||||||
      @issues = @options[:issues] ? get_filtered_issues : []
 | 
					      puts "Sorting tags..." if @options[:verbose]
 | 
				
			||||||
 | 
					      @all_tags.sort_by! { |x| @fetcher.get_time_of_tag(x) }.reverse!
 | 
				
			||||||
      fetch_event_for_issues_and_pr
 | 
					 | 
				
			||||||
      detect_actual_closed_dates
 | 
					 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Encapsulate characters to make markdown look as expected.
 | 
					    # Encapsulate characters to make markdown look as expected.
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@ module GitHubChangelogGenerator
 | 
				
			|||||||
  class Generator
 | 
					  class Generator
 | 
				
			||||||
    # Fetch event for issues and pull requests
 | 
					    # Fetch event for issues and pull requests
 | 
				
			||||||
    # @return [Array] array of fetched issues
 | 
					    # @return [Array] array of fetched issues
 | 
				
			||||||
    def fetch_event_for_issues_and_pr
 | 
					    def fetch_events_for_issues_and_pr
 | 
				
			||||||
      if @options[:verbose]
 | 
					      if @options[:verbose]
 | 
				
			||||||
        print "Fetching events for issues and PR: 0/#{@issues.count + @pull_requests.count}\r"
 | 
					        print "Fetching events for issues and PR: 0/#{@issues.count + @pull_requests.count}\r"
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
@ -37,28 +37,24 @@ module GitHubChangelogGenerator
 | 
				
			|||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Find correct closed dates, if issues was closed by commits
 | 
					    # Find correct closed dates, if issues was closed by commits
 | 
				
			||||||
    def detect_actual_closed_dates
 | 
					    def detect_actual_closed_dates(issues)
 | 
				
			||||||
      print "Fetching closed dates for issues...\r" if @options[:verbose]
 | 
					      print "Fetching closed dates for issues...\r" if @options[:verbose]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # TODO: implement async fetching with slice!
 | 
				
			||||||
      threads = []
 | 
					      threads = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      @issues.each do |issue|
 | 
					      issues.each do |issue|
 | 
				
			||||||
        threads << Thread.new do
 | 
					        threads << Thread.new do
 | 
				
			||||||
          find_closed_date_by_commit(issue)
 | 
					          find_closed_date_by_commit(issue)
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      @pull_requests.each do |pull_request|
 | 
					 | 
				
			||||||
        threads << Thread.new do
 | 
					 | 
				
			||||||
          find_closed_date_by_commit(pull_request)
 | 
					 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
      end
 | 
					 | 
				
			||||||
      threads.each(&:join)
 | 
					      threads.each(&:join)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      puts "Fetching closed dates for issues: Done!" if @options[:verbose]
 | 
					      puts "Fetching closed dates for issues: Done!" if @options[:verbose]
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Fill :actual_date parameter of specified issue by closed date of the commit, it it was closed by commit.
 | 
					    # Fill :actual_date parameter of specified issue by closed date of the commit, if it was closed by commit.
 | 
				
			||||||
    # @param [Hash] issue
 | 
					    # @param [Hash] issue
 | 
				
			||||||
    def find_closed_date_by_commit(issue)
 | 
					    def find_closed_date_by_commit(issue)
 | 
				
			||||||
      unless issue["events"].nil?
 | 
					      unless issue["events"].nil?
 | 
				
			||||||
@ -67,22 +63,30 @@ module GitHubChangelogGenerator
 | 
				
			|||||||
        # reverse! - to find latest closed event. (event goes in date order)
 | 
					        # reverse! - to find latest closed event. (event goes in date order)
 | 
				
			||||||
        issue["events"].reverse!.each do |event|
 | 
					        issue["events"].reverse!.each do |event|
 | 
				
			||||||
          if event[:event].eql? compare_string
 | 
					          if event[:event].eql? compare_string
 | 
				
			||||||
            if event[:commit_id].nil?
 | 
					            set_date_from_event(event, issue)
 | 
				
			||||||
              issue[:actual_date] = issue[:closed_at]
 | 
					 | 
				
			||||||
            else
 | 
					 | 
				
			||||||
              begin
 | 
					 | 
				
			||||||
                commit = @fetcher.fetch_commit(event)
 | 
					 | 
				
			||||||
                issue[:actual_date] = commit[:author][:date]
 | 
					 | 
				
			||||||
              rescue
 | 
					 | 
				
			||||||
                puts "Warning: Can't fetch commit #{event[:commit_id]}. It is probably referenced from another repo.".yellow
 | 
					 | 
				
			||||||
                issue[:actual_date] = issue[:closed_at]
 | 
					 | 
				
			||||||
              end
 | 
					 | 
				
			||||||
            end
 | 
					 | 
				
			||||||
            break
 | 
					            break
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
      # TODO: assert issues, that remain without 'actual_date' hash for some reason.
 | 
					      # TODO: assert issues, that remain without 'actual_date' hash for some reason.
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Set closed date from this issue
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # @param [Hash] event
 | 
				
			||||||
 | 
					    # @param [Hash] issue
 | 
				
			||||||
 | 
					    def set_date_from_event(event, issue)
 | 
				
			||||||
 | 
					      if event[:commit_id].nil?
 | 
				
			||||||
 | 
					        issue[:actual_date] = issue[:closed_at]
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        begin
 | 
				
			||||||
 | 
					          commit = @fetcher.fetch_commit(event)
 | 
				
			||||||
 | 
					          issue[:actual_date] = commit[:author][:date]
 | 
				
			||||||
 | 
					        rescue
 | 
				
			||||||
 | 
					          puts "Warning: Can't fetch commit #{event[:commit_id]}. It is probably referenced from another repo.".yellow
 | 
				
			||||||
 | 
					          issue[:actual_date] = issue[:closed_at]
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
@ -109,20 +109,9 @@ module GitHubChangelogGenerator
 | 
				
			|||||||
    # The full cycle of generation for whole project
 | 
					    # The full cycle of generation for whole project
 | 
				
			||||||
    # @return [String] The complete change log
 | 
					    # @return [String] The complete change log
 | 
				
			||||||
    def generate_log_for_all_tags
 | 
					    def generate_log_for_all_tags
 | 
				
			||||||
      fetch_tags_dates
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      puts "Sorting tags..." if @options[:verbose]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      @all_tags.sort_by! { |x| @fetcher.get_time_of_tag(x) }.reverse!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      puts "Generating log..." if @options[:verbose]
 | 
					      puts "Generating log..." if @options[:verbose]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      log = ""
 | 
					      log = generate_unreleased_section
 | 
				
			||||||
 | 
					 | 
				
			||||||
      if @options[:unreleased] && @all_tags.count != 0
 | 
					 | 
				
			||||||
        unreleased_log = generate_log_between_tags(all_tags[0], nil)
 | 
					 | 
				
			||||||
        log += unreleased_log if unreleased_log
 | 
					 | 
				
			||||||
      end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
      (1...all_tags.size).each do |index|
 | 
					      (1...all_tags.size).each do |index|
 | 
				
			||||||
        log += generate_log_between_tags(all_tags[index], all_tags[index - 1])
 | 
					        log += generate_log_between_tags(all_tags[index], all_tags[index - 1])
 | 
				
			||||||
@ -134,6 +123,15 @@ module GitHubChangelogGenerator
 | 
				
			|||||||
      log
 | 
					      log
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def generate_unreleased_section
 | 
				
			||||||
 | 
					      log = ""
 | 
				
			||||||
 | 
					      if @options[:unreleased] && @all_tags.count != 0
 | 
				
			||||||
 | 
					        unreleased_log = generate_log_between_tags(all_tags[0], nil)
 | 
				
			||||||
 | 
					        log += unreleased_log if unreleased_log
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					      log
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Parse issue and generate single line formatted issue line.
 | 
					    # Parse issue and generate single line formatted issue line.
 | 
				
			||||||
    #
 | 
					    #
 | 
				
			||||||
    # Example output:
 | 
					    # Example output:
 | 
				
			||||||
 | 
				
			|||||||
@ -85,45 +85,6 @@ module GitHubChangelogGenerator
 | 
				
			|||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # This method fetches missing params for PR and filter them by specified options
 | 
					 | 
				
			||||||
    # It include add all PR's with labels from @options[:include_labels] array
 | 
					 | 
				
			||||||
    # And exclude all from :exclude_labels array.
 | 
					 | 
				
			||||||
    # @return [Array] filtered PR's
 | 
					 | 
				
			||||||
    def get_filtered_pull_requests
 | 
					 | 
				
			||||||
      filter_merged_pull_requests
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      filtered_pull_requests = include_issues_by_labels(@pull_requests)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      filtered_pull_requests = exclude_issues_by_labels(filtered_pull_requests)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      if @options[:verbose]
 | 
					 | 
				
			||||||
        puts "Filtered pull requests: #{filtered_pull_requests.count}"
 | 
					 | 
				
			||||||
      end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      filtered_pull_requests
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # This method filter only merged PR and
 | 
					 | 
				
			||||||
    # fetch missing required attributes for pull requests
 | 
					 | 
				
			||||||
    # :merged_at - is a date, when issue PR was merged.
 | 
					 | 
				
			||||||
    # More correct to use merged date, rather than closed date.
 | 
					 | 
				
			||||||
    def filter_merged_pull_requests
 | 
					 | 
				
			||||||
      print "Fetching merged dates...\r" if @options[:verbose]
 | 
					 | 
				
			||||||
      pull_requests = @fetcher.fetch_closed_pull_requests
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      @pull_requests.each do |pr|
 | 
					 | 
				
			||||||
        fetched_pr = pull_requests.find do |fpr|
 | 
					 | 
				
			||||||
          fpr.number == pr.number
 | 
					 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
        pr[:merged_at] = fetched_pr[:merged_at]
 | 
					 | 
				
			||||||
        pull_requests.delete(fetched_pr)
 | 
					 | 
				
			||||||
      end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      @pull_requests.select! do |pr|
 | 
					 | 
				
			||||||
        !pr[:merged_at].nil?
 | 
					 | 
				
			||||||
      end
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Include issues with labels, specified in :include_labels
 | 
					    # Include issues with labels, specified in :include_labels
 | 
				
			||||||
    # @param [Array] issues to filter
 | 
					    # @param [Array] issues to filter
 | 
				
			||||||
    # @return [Array] filtered array of issues
 | 
					    # @return [Array] filtered array of issues
 | 
				
			||||||
@ -159,16 +120,55 @@ module GitHubChangelogGenerator
 | 
				
			|||||||
      filtered_tags
 | 
					      filtered_tags
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # General filtered function
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # @param [Array] all_issues
 | 
				
			||||||
 | 
					    # @return [Array] filtered issues
 | 
				
			||||||
 | 
					    def filter_array_by_labels(all_issues)
 | 
				
			||||||
 | 
					      filtered_issues = include_issues_by_labels(all_issues)
 | 
				
			||||||
 | 
					      exclude_issues_by_labels(filtered_issues)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Filter issues according labels
 | 
					    # Filter issues according labels
 | 
				
			||||||
    # @return [Array] Filtered issues
 | 
					    # @return [Array] Filtered issues
 | 
				
			||||||
    def get_filtered_issues
 | 
					    def get_filtered_issues(issues)
 | 
				
			||||||
      filtered_issues = include_issues_by_labels(@issues)
 | 
					      issues = filter_array_by_labels(issues)
 | 
				
			||||||
 | 
					      puts "Filtered issues: #{issues.count}" if @options[:verbose]
 | 
				
			||||||
 | 
					      issues
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      filtered_issues = exclude_issues_by_labels(filtered_issues)
 | 
					    # This method fetches missing params for PR and filter them by specified options
 | 
				
			||||||
 | 
					    # It include add all PR's with labels from @options[:include_labels] array
 | 
				
			||||||
 | 
					    # And exclude all from :exclude_labels array.
 | 
				
			||||||
 | 
					    # @return [Array] filtered PR's
 | 
				
			||||||
 | 
					    def get_filtered_pull_requests(pull_requests)
 | 
				
			||||||
 | 
					      pull_requests = filter_array_by_labels(pull_requests)
 | 
				
			||||||
 | 
					      pull_requests = filter_merged_pull_requests(pull_requests)
 | 
				
			||||||
 | 
					      puts "Filtered pull requests: #{pull_requests.count}" if @options[:verbose]
 | 
				
			||||||
 | 
					      pull_requests
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      puts "Filtered issues: #{filtered_issues.count}" if @options[:verbose]
 | 
					    # This method filter only merged PR and
 | 
				
			||||||
 | 
					    # fetch missing required attributes for pull requests
 | 
				
			||||||
 | 
					    # :merged_at - is a date, when issue PR was merged.
 | 
				
			||||||
 | 
					    # More correct to use merged date, rather than closed date.
 | 
				
			||||||
 | 
					    def filter_merged_pull_requests(pull_requests)
 | 
				
			||||||
 | 
					      print "Fetching merged dates...\r" if @options[:verbose]
 | 
				
			||||||
 | 
					      closed_pull_requests = @fetcher.fetch_closed_pull_requests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      filtered_issues
 | 
					      pull_requests.each do |pr|
 | 
				
			||||||
 | 
					        fetched_pr = closed_pull_requests.find do |fpr|
 | 
				
			||||||
 | 
					          fpr.number == pr.number
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					        pr[:merged_at] = fetched_pr[:merged_at]
 | 
				
			||||||
 | 
					        closed_pull_requests.delete(fetched_pr)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      pull_requests.select! do |pr|
 | 
				
			||||||
 | 
					        !pr[:merged_at].nil?
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      pull_requests
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user