| 
									
										
										
										
											2009-09-08 00:02:28 +02:00
										 |  |  | class RefreshBrew | 
					
						
							| 
									
										
										
										
											2010-07-01 09:22:55 -07:00
										 |  |  |   RESPOSITORY_URL  = 'http://github.com/mxcl/homebrew.git' | 
					
						
							| 
									
										
										
										
											2010-05-08 15:35:06 +10:00
										 |  |  |   INIT_COMMAND     = "git init" | 
					
						
							| 
									
										
										
										
											2009-11-12 03:55:09 +00:00
										 |  |  |   CHECKOUT_COMMAND = 'git checkout -q master' | 
					
						
							|  |  |  |   UPDATE_COMMAND   = "git pull #{RESPOSITORY_URL} master" | 
					
						
							|  |  |  |   REVISION_COMMAND = 'git log -l -1 --pretty=format:%H 2> /dev/null' | 
					
						
							| 
									
										
										
										
											2010-02-13 13:12:40 +00:00
										 |  |  |   GIT_UP_TO_DATE   = 'Already up-to-date.' | 
					
						
							| 
									
										
										
										
											2010-07-23 17:32:43 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-20 17:54:10 +02:00
										 |  |  |   formula_regexp   = 'Library/Formula/(.+?)\.rb' | 
					
						
							|  |  |  |   ADDED_FORMULA    = %r{^\s+create mode \d+ #{formula_regexp}$} | 
					
						
							|  |  |  |   UPDATED_FORMULA  = %r{^\s+#{formula_regexp}\s} | 
					
						
							| 
									
										
										
										
											2010-02-18 19:24:03 -05:00
										 |  |  |   DELETED_FORMULA  = %r{^\s+delete mode \d+ #{formula_regexp}$} | 
					
						
							| 
									
										
										
										
											2010-07-23 17:32:43 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   example_regexp   = 'Library/Contributions/examples/([^.\s]+).*' | 
					
						
							|  |  |  |   ADDED_EXAMPLE    = %r{^\s+create mode \d+ #{example_regexp}$} | 
					
						
							|  |  |  |   UPDATED_EXAMPLE  = %r{^\s+#{example_regexp}} | 
					
						
							|  |  |  |   DELETED_EXAMPLE  = %r{^\s+delete mode \d+ #{example_regexp}$} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-31 14:15:26 -07:00
										 |  |  |   attr_reader :added_formulae, :updated_formulae, :deleted_formulae, :initial_revision | 
					
						
							| 
									
										
										
										
											2010-07-23 17:32:43 -07:00
										 |  |  |   attr_reader :added_examples, :updated_examples, :deleted_examples | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-08 00:02:28 +02:00
										 |  |  |   def initialize | 
					
						
							| 
									
										
										
										
											2010-02-18 19:24:03 -05:00
										 |  |  |     @added_formulae, @updated_formulae, @deleted_formulae = [], [], [] | 
					
						
							| 
									
										
										
										
											2010-07-23 17:32:43 -07:00
										 |  |  |     @added_examples, @updated_examples, @deleted_examples = [], [], [] | 
					
						
							| 
									
										
										
										
											2010-05-31 14:15:26 -07:00
										 |  |  |     @initial_revision = self.current_revision | 
					
						
							| 
									
										
										
										
											2009-09-08 00:02:28 +02:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-07-23 17:32:43 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-08 00:02:28 +02:00
										 |  |  |   # Performs an update of the homebrew source. Returns +true+ if a newer | 
					
						
							| 
									
										
										
										
											2009-09-11 19:17:50 +02:00
										 |  |  |   # version was available, +false+ if already up-to-date. | 
					
						
							| 
									
										
										
										
											2009-09-08 00:02:28 +02:00
										 |  |  |   def update_from_masterbrew! | 
					
						
							| 
									
										
										
										
											2009-11-12 03:55:09 +00:00
										 |  |  |     output = '' | 
					
						
							| 
									
										
										
										
											2010-07-23 17:37:03 -07:00
										 |  |  |     HOMEBREW_REPOSITORY.cd do | 
					
						
							| 
									
										
										
										
											2009-11-12 03:55:09 +00:00
										 |  |  |       if File.directory? '.git' | 
					
						
							|  |  |  |         safe_system CHECKOUT_COMMAND | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         safe_system "git init" | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |       output = execute(UPDATE_COMMAND) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-20 17:54:10 +02:00
										 |  |  |     output.split("\n").reverse.each do |line| | 
					
						
							|  |  |  |       case line | 
					
						
							|  |  |  |       when ADDED_FORMULA | 
					
						
							|  |  |  |         @added_formulae << $1 | 
					
						
							| 
									
										
										
										
											2010-02-18 19:24:03 -05:00
										 |  |  |       when DELETED_FORMULA | 
					
						
							|  |  |  |         @deleted_formulae << $1 | 
					
						
							| 
									
										
										
										
											2009-09-20 17:54:10 +02:00
										 |  |  |       when UPDATED_FORMULA | 
					
						
							| 
									
										
										
										
											2010-02-18 19:24:03 -05:00
										 |  |  |         @updated_formulae << $1 unless @added_formulae.include?($1) or @deleted_formulae.include?($1) | 
					
						
							| 
									
										
										
										
											2010-07-23 17:32:43 -07:00
										 |  |  |       when ADDED_EXAMPLE | 
					
						
							|  |  |  |         @added_examples << $1 | 
					
						
							|  |  |  |       when DELETED_EXAMPLE | 
					
						
							|  |  |  |         @deleted_examples << $1 | 
					
						
							|  |  |  |       when UPDATED_EXAMPLE | 
					
						
							|  |  |  |         @updated_examples << $1 unless @added_examples.include?($1) or @deleted_examples.include?($1) | 
					
						
							| 
									
										
										
										
											2009-09-20 17:54:10 +02:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2009-09-08 00:02:28 +02:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2009-09-20 17:54:10 +02:00
										 |  |  |     @added_formulae.sort! | 
					
						
							|  |  |  |     @updated_formulae.sort! | 
					
						
							| 
									
										
										
										
											2010-02-18 19:24:03 -05:00
										 |  |  |     @deleted_formulae.sort! | 
					
						
							| 
									
										
										
										
											2010-07-23 17:32:43 -07:00
										 |  |  |     @added_examples.sort! | 
					
						
							|  |  |  |     @updated_examples.sort! | 
					
						
							|  |  |  |     @deleted_examples.sort! | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-08 00:02:28 +02:00
										 |  |  |     output.strip != GIT_UP_TO_DATE | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-07-23 17:32:43 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-08 00:02:28 +02:00
										 |  |  |   def pending_formulae_changes? | 
					
						
							|  |  |  |     !@updated_formulae.empty? | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-07-23 17:32:43 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-18 19:24:03 -05:00
										 |  |  |   def pending_new_formulae? | 
					
						
							|  |  |  |     !@added_formulae.empty? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def deleted_formulae? | 
					
						
							|  |  |  |     !@deleted_formulae.empty? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-23 17:32:43 -07:00
										 |  |  |   def pending_examples_changes? | 
					
						
							|  |  |  |     !@updated_examples.empty? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def pending_new_examples? | 
					
						
							|  |  |  |     !@added_examples.empty? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def deleted_examples? | 
					
						
							|  |  |  |     !@deleted_examples.empty? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-08 00:02:28 +02:00
										 |  |  |   def current_revision | 
					
						
							| 
									
										
										
										
											2010-07-23 17:37:03 -07:00
										 |  |  |     HOMEBREW_REPOSITORY.cd { execute(REVISION_COMMAND).strip } | 
					
						
							| 
									
										
										
										
											2009-11-12 03:55:09 +00:00
										 |  |  |   rescue | 
					
						
							|  |  |  |     'TAIL' | 
					
						
							| 
									
										
										
										
											2009-09-08 00:02:28 +02:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-07-23 17:32:43 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def report | 
					
						
							|  |  |  |     puts "Updated Homebrew from #{initial_revision[0,8]} to #{current_revision[0,8]}." | 
					
						
							|  |  |  |     ## New Formulae | 
					
						
							|  |  |  |     if pending_new_formulae? | 
					
						
							|  |  |  |       ohai "The following formulae are new:" | 
					
						
							|  |  |  |       puts_columns added_formulae | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     ## Deleted Formulae | 
					
						
							|  |  |  |     if deleted_formulae? | 
					
						
							|  |  |  |       ohai "The following formulae were removed:" | 
					
						
							|  |  |  |       puts_columns deleted_formulae | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     ## Updated Formulae | 
					
						
							|  |  |  |     if pending_formulae_changes? | 
					
						
							|  |  |  |       ohai "The following formulae were updated:" | 
					
						
							|  |  |  |       puts_columns updated_formulae | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       puts "No formulae were updated." | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     ## New examples | 
					
						
							|  |  |  |     if pending_new_examples? | 
					
						
							|  |  |  |       ohai "The following external commands are new:" | 
					
						
							|  |  |  |       puts_columns added_examples | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     ## Deleted examples | 
					
						
							|  |  |  |     if deleted_examples? | 
					
						
							|  |  |  |       ohai "The following external commands were removed:" | 
					
						
							|  |  |  |       puts_columns deleted_examples | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     ## Updated Formulae | 
					
						
							|  |  |  |     if pending_examples_changes? | 
					
						
							|  |  |  |       ohai "The following external commands were updated:" | 
					
						
							|  |  |  |       puts_columns updated_examples | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       puts "No external commands were updated." | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-08 00:02:28 +02:00
										 |  |  |   private | 
					
						
							| 
									
										
										
										
											2010-07-23 17:37:03 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-11 20:09:39 +02:00
										 |  |  |   def execute(cmd) | 
					
						
							|  |  |  |     out = `#{cmd}` | 
					
						
							| 
									
										
										
										
											2010-05-08 15:35:06 +10:00
										 |  |  |     if $? && !$?.success? | 
					
						
							| 
									
										
										
										
											2009-09-11 20:58:41 +02:00
										 |  |  |       puts out | 
					
						
							| 
									
										
										
										
											2009-09-20 17:54:10 +02:00
										 |  |  |       raise "Failed while executing #{cmd}" | 
					
						
							| 
									
										
										
										
											2009-09-11 20:58:41 +02:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2009-09-17 18:26:31 +01:00
										 |  |  |     ohai(cmd, out) if ARGV.verbose? | 
					
						
							| 
									
										
										
										
											2009-09-11 20:09:39 +02:00
										 |  |  |     out | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2009-09-17 18:40:21 +01:00
										 |  |  | end |