| 
									
										
										
										
											2021-02-04 17:00:50 +05:30
										 |  |  | # typed: false | 
					
						
							|  |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require "cli/parser" | 
					
						
							|  |  |  | require "utils/github" | 
					
						
							| 
									
										
										
										
											2021-05-22 05:57:19 +05:30
										 |  |  | require "dev-cmd/generate-man-completions" | 
					
						
							| 
									
										
										
										
											2021-02-04 17:00:50 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | module Homebrew | 
					
						
							|  |  |  |   extend T::Sig | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   module_function | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   sig { returns(CLI::Parser) } | 
					
						
							|  |  |  |   def update_maintainers_args | 
					
						
							|  |  |  |     Homebrew::CLI::Parser.new do | 
					
						
							|  |  |  |       description <<~EOS | 
					
						
							|  |  |  |         Update the list of maintainers in the `Homebrew/brew` README. | 
					
						
							|  |  |  |       EOS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       named_args :none | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def update_maintainers | 
					
						
							|  |  |  |     update_maintainers_args.parse | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # We assume that only public members wish to be included in the README | 
					
						
							|  |  |  |     public_members = GitHub.public_member_usernames("Homebrew") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-06 02:58:17 +05:30
										 |  |  |     members = { | 
					
						
							|  |  |  |       plc:   GitHub.members_by_team("Homebrew", "plc"), | 
					
						
							|  |  |  |       tsc:   GitHub.members_by_team("Homebrew", "tsc"), | 
					
						
							|  |  |  |       linux: GitHub.members_by_team("Homebrew", "linux"), | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     members[:other] = GitHub.members_by_team("Homebrew", "maintainers") | 
					
						
							|  |  |  |                             .except(*members.values.map(&:keys).flatten.uniq) | 
					
						
							| 
									
										
										
										
											2021-02-04 17:00:50 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-06 02:58:17 +05:30
										 |  |  |     sentences = {} | 
					
						
							|  |  |  |     members.each do |group, hash| | 
					
						
							|  |  |  |       hash.slice!(*public_members) | 
					
						
							|  |  |  |       hash.each { |login, name| hash[login] = "[#{name}](https://github.com/#{login})" } | 
					
						
							|  |  |  |       sentences[group] = hash.values.sort.to_sentence | 
					
						
							| 
									
										
										
										
											2021-02-04 17:00:50 +05:30
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     readme = HOMEBREW_REPOSITORY/"README.md" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     content = readme.read | 
					
						
							|  |  |  |     content.gsub!(/(Homebrew's \[Project Leadership Committee.*) is .*\./, | 
					
						
							| 
									
										
										
										
											2021-02-06 02:58:17 +05:30
										 |  |  |                   "\\1 is #{sentences[:plc]}.") | 
					
						
							| 
									
										
										
										
											2021-02-04 17:00:50 +05:30
										 |  |  |     content.gsub!(/(Homebrew's \[Technical Steering Committee.*) is .*\./, | 
					
						
							| 
									
										
										
										
											2021-02-06 02:58:17 +05:30
										 |  |  |                   "\\1 is #{sentences[:tsc]}.") | 
					
						
							| 
									
										
										
										
											2021-02-05 01:43:07 +05:30
										 |  |  |     content.gsub!(/(Homebrew's Linux maintainers are).*\./, | 
					
						
							| 
									
										
										
										
											2021-02-06 02:58:17 +05:30
										 |  |  |                   "\\1 #{sentences[:linux]}.") | 
					
						
							| 
									
										
										
										
											2021-02-04 17:00:50 +05:30
										 |  |  |     content.gsub!(/(Homebrew's other current maintainers are).*\./, | 
					
						
							| 
									
										
										
										
											2021-02-06 02:58:17 +05:30
										 |  |  |                   "\\1 #{sentences[:other]}.") | 
					
						
							| 
									
										
										
										
											2021-02-04 17:00:50 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-23 14:49:05 -05:00
										 |  |  |     File.write(readme, content) | 
					
						
							| 
									
										
										
										
											2021-02-04 17:00:50 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |     diff = system_command "git", args: [ | 
					
						
							|  |  |  |       "-C", HOMEBREW_REPOSITORY, "diff", "--exit-code", "README.md" | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  |     if diff.status.success? | 
					
						
							|  |  |  |       puts "No changes to list of maintainers." | 
					
						
							|  |  |  |     else | 
					
						
							| 
									
										
										
										
											2021-02-09 21:08:57 +00:00
										 |  |  |       Homebrew.regenerate_man_pages(preserve_date: true, quiet: true) | 
					
						
							|  |  |  |       puts "List of maintainers updated in the README and the generated man pages." | 
					
						
							| 
									
										
										
										
											2021-02-04 17:00:50 +05:30
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |