| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  | require "pathname" | 
					
						
							|  |  |  | require "resource" | 
					
						
							|  |  |  | require "metafiles" | 
					
						
							| 
									
										
										
										
											2015-11-17 16:49:55 +05:30
										 |  |  | require "utils" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module DiskUsageExtension | 
					
						
							|  |  |  |   def disk_usage | 
					
						
							|  |  |  |     return @disk_usage if @disk_usage | 
					
						
							|  |  |  |     compute_disk_usage | 
					
						
							|  |  |  |     @disk_usage | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def file_count | 
					
						
							|  |  |  |     return @file_count if @file_count | 
					
						
							|  |  |  |     compute_disk_usage | 
					
						
							|  |  |  |     @file_count | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def abv | 
					
						
							|  |  |  |     out = "" | 
					
						
							|  |  |  |     compute_disk_usage | 
					
						
							|  |  |  |     out << "#{number_readable(@file_count)} files, " if @file_count > 1
 | 
					
						
							| 
									
										
										
										
											2016-09-11 17:53:00 +01:00
										 |  |  |     out << disk_usage_readable(@disk_usage).to_s | 
					
						
							| 
									
										
										
										
											2015-11-17 16:49:55 +05:30
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   private | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def compute_disk_usage | 
					
						
							| 
									
										
										
										
											2015-12-30 20:44:13 +00:00
										 |  |  |     if directory? | 
					
						
							| 
									
										
										
										
											2016-04-01 11:08:29 +08:00
										 |  |  |       scanned_files = Set.new | 
					
						
							| 
									
										
										
										
											2015-12-30 16:27:15 +08:00
										 |  |  |       @file_count = 0
 | 
					
						
							|  |  |  |       @disk_usage = 0
 | 
					
						
							| 
									
										
										
										
											2015-12-30 20:44:13 +00:00
										 |  |  |       find do |f| | 
					
						
							| 
									
										
										
										
											2016-04-01 11:08:29 +08:00
										 |  |  |         if f.directory? | 
					
						
							|  |  |  |           @disk_usage += f.lstat.size | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |           @file_count += 1 if f.basename.to_s != ".DS_Store" | 
					
						
							|  |  |  |           # use Pathname#lstat instead of Pathname#stat to get info of symlink itself. | 
					
						
							|  |  |  |           stat = f.lstat | 
					
						
							|  |  |  |           file_id = [stat.dev, stat.ino] | 
					
						
							|  |  |  |           # count hardlinks only once. | 
					
						
							|  |  |  |           unless scanned_files.include?(file_id) | 
					
						
							|  |  |  |             @disk_usage += stat.size | 
					
						
							|  |  |  |             scanned_files.add(file_id) | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2015-11-17 16:49:55 +05:30
										 |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       @file_count = 1
 | 
					
						
							| 
									
										
										
										
											2016-04-01 11:08:29 +08:00
										 |  |  |       @disk_usage = lstat.size | 
					
						
							| 
									
										
										
										
											2015-11-17 16:49:55 +05:30
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							| 
									
										
										
										
											2009-07-31 02:51:17 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  | # Homebrew extends Ruby's `Pathname` to make our code more readable. | 
					
						
							|  |  |  | # @see http://ruby-doc.org/stdlib-1.8.7/libdoc/pathname/rdoc/Pathname.html  Ruby's Pathname API | 
					
						
							| 
									
										
										
										
											2009-07-31 02:51:17 +01:00
										 |  |  | class Pathname | 
					
						
							| 
									
										
										
										
											2015-11-17 16:49:55 +05:30
										 |  |  |   include DiskUsageExtension | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # @private | 
					
						
							| 
									
										
										
										
											2015-03-31 10:23:31 -07:00
										 |  |  |   BOTTLE_EXTNAME_RX = /(\.[a-z0-9_]+\.bottle\.(\d+\.)?tar\.gz)$/ | 
					
						
							| 
									
										
										
										
											2012-07-05 20:29:31 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # Moves a file from the original location to the {Pathname}'s. | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |   def install(*sources) | 
					
						
							| 
									
										
										
										
											2012-02-09 18:43:47 -08:00
										 |  |  |     sources.each do |src| | 
					
						
							|  |  |  |       case src | 
					
						
							| 
									
										
										
										
											2013-08-06 19:52:58 -07:00
										 |  |  |       when Resource | 
					
						
							|  |  |  |         src.stage(self) | 
					
						
							| 
									
										
										
										
											2013-09-17 21:25:43 -05:00
										 |  |  |       when Resource::Partial | 
					
						
							|  |  |  |         src.resource.stage { install(*src.files) } | 
					
						
							| 
									
										
										
										
											2012-02-09 18:43:47 -08:00
										 |  |  |       when Array | 
					
						
							| 
									
										
										
										
											2012-03-30 22:34:42 -07:00
										 |  |  |         if src.empty? | 
					
						
							| 
									
										
										
										
											2012-03-30 23:02:32 -07:00
										 |  |  |           opoo "tried to install empty array to #{self}" | 
					
						
							| 
									
										
										
										
											2016-09-21 09:58:26 +02:00
										 |  |  |           break | 
					
						
							| 
									
										
										
										
											2012-03-30 22:34:42 -07:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2015-03-23 21:03:55 -04:00
										 |  |  |         src.each { |s| install_p(s, File.basename(s)) } | 
					
						
							| 
									
										
										
										
											2012-02-09 18:43:47 -08:00
										 |  |  |       when Hash | 
					
						
							| 
									
										
										
										
											2012-03-30 22:34:42 -07:00
										 |  |  |         if src.empty? | 
					
						
							| 
									
										
										
										
											2012-03-30 23:02:32 -07:00
										 |  |  |           opoo "tried to install empty hash to #{self}" | 
					
						
							| 
									
										
										
										
											2016-09-21 09:58:26 +02:00
										 |  |  |           break | 
					
						
							| 
									
										
										
										
											2012-03-30 22:34:42 -07:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2015-03-23 21:03:55 -04:00
										 |  |  |         src.each { |s, new_basename| install_p(s, new_basename) } | 
					
						
							| 
									
										
										
										
											2012-02-09 18:43:47 -08:00
										 |  |  |       else | 
					
						
							| 
									
										
										
										
											2015-03-23 21:03:55 -04:00
										 |  |  |         install_p(src, File.basename(src)) | 
					
						
							| 
									
										
										
										
											2012-02-09 18:43:47 -08:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2009-07-31 02:51:17 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-02-19 13:13:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-23 21:03:55 -04:00
										 |  |  |   def install_p(src, new_basename) | 
					
						
							| 
									
										
										
										
											2014-07-10 21:26:54 -05:00
										 |  |  |     raise Errno::ENOENT, src.to_s unless File.symlink?(src) || File.exist?(src) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-26 22:22:45 -04:00
										 |  |  |     src = Pathname(src) | 
					
						
							|  |  |  |     dst = join(new_basename) | 
					
						
							| 
									
										
										
										
											2013-10-06 22:04:46 +01:00
										 |  |  |     dst = yield(src, dst) if block_given? | 
					
						
							| 
									
										
										
										
											2016-03-07 15:11:00 +00:00
										 |  |  |     return unless dst | 
					
						
							| 
									
										
										
										
											2013-10-06 22:04:46 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-19 13:13:42 +00:00
										 |  |  |     mkpath | 
					
						
							| 
									
										
										
										
											2014-07-10 15:39:55 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Use FileUtils.mv over File.rename to handle filesystem boundaries. If src | 
					
						
							|  |  |  |     # is a symlink, and its target is moved first, FileUtils.mv will fail: | 
					
						
							|  |  |  |     #   https://bugs.ruby-lang.org/issues/7707 | 
					
						
							|  |  |  |     # In that case, use the system "mv" command. | 
					
						
							| 
									
										
										
										
											2015-03-26 22:22:45 -04:00
										 |  |  |     if src.symlink? | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |       raise unless Kernel.system "mv", src, dst | 
					
						
							| 
									
										
										
										
											2010-02-19 13:13:42 +00:00
										 |  |  |     else | 
					
						
							|  |  |  |       FileUtils.mv src, dst | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2015-03-24 21:08:12 -04:00
										 |  |  |   private :install_p | 
					
						
							| 
									
										
										
										
											2010-02-19 13:13:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-02-12 10:36:16 -08:00
										 |  |  |   # Creates symlinks to sources in this folder. | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |   def install_symlink(*sources) | 
					
						
							| 
									
										
										
										
											2012-02-12 10:36:16 -08:00
										 |  |  |     sources.each do |src| | 
					
						
							|  |  |  |       case src | 
					
						
							|  |  |  |       when Array | 
					
						
							| 
									
										
										
										
											2015-03-24 21:05:34 -04:00
										 |  |  |         src.each { |s| install_symlink_p(s, File.basename(s)) } | 
					
						
							| 
									
										
										
										
											2012-02-12 10:36:16 -08:00
										 |  |  |       when Hash | 
					
						
							| 
									
										
										
										
											2015-03-24 21:05:34 -04:00
										 |  |  |         src.each { |s, new_basename| install_symlink_p(s, new_basename) } | 
					
						
							| 
									
										
										
										
											2012-02-12 10:36:16 -08:00
										 |  |  |       else | 
					
						
							| 
									
										
										
										
											2015-03-24 21:05:34 -04:00
										 |  |  |         install_symlink_p(src, File.basename(src)) | 
					
						
							| 
									
										
										
										
											2012-02-12 10:36:16 -08:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-24 21:05:34 -04:00
										 |  |  |   def install_symlink_p(src, new_basename) | 
					
						
							| 
									
										
										
										
											2014-03-19 15:56:51 -05:00
										 |  |  |     src = Pathname(src).expand_path(self) | 
					
						
							| 
									
										
										
										
											2015-03-24 21:05:34 -04:00
										 |  |  |     dst = join(new_basename) | 
					
						
							| 
									
										
										
										
											2012-02-12 10:36:16 -08:00
										 |  |  |     mkpath | 
					
						
							| 
									
										
										
										
											2015-03-24 21:05:34 -04:00
										 |  |  |     FileUtils.ln_sf(src.relative_path_from(dst.parent), dst) | 
					
						
							| 
									
										
										
										
											2012-02-12 10:36:16 -08:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2015-03-24 21:08:12 -04:00
										 |  |  |   private :install_symlink_p | 
					
						
							| 
									
										
										
										
											2012-02-12 10:36:16 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   if method_defined?(:write) | 
					
						
							|  |  |  |     # @private | 
					
						
							| 
									
										
										
										
											2016-09-23 18:13:48 +02:00
										 |  |  |     alias old_write write | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-31 22:34:42 -06:00
										 |  |  |   # we assume this pathname object is a file obviously | 
					
						
							| 
									
										
										
										
											2014-06-17 09:31:31 -05:00
										 |  |  |   def write(content, *open_args) | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |     raise "Will not overwrite #{self}" if exist? | 
					
						
							| 
									
										
										
										
											2009-08-31 22:34:42 -06:00
										 |  |  |     dirname.mkpath | 
					
						
							| 
									
										
										
										
											2014-06-17 09:31:31 -05:00
										 |  |  |     open("w", *open_args) { |f| f.write(content) } | 
					
						
							| 
									
										
										
										
											2009-08-31 22:34:42 -06:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2009-07-31 02:51:17 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-16 16:34:51 +00:00
										 |  |  |   # Only appends to a file that is already created. | 
					
						
							|  |  |  |   def append_lines(content, *open_args) | 
					
						
							|  |  |  |     raise "Cannot append file that doesn't exist: #{self}" unless exist? | 
					
						
							|  |  |  |     open("a", *open_args) { |f| f.puts(content) } | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-27 16:21:35 -07:00
										 |  |  |   def binwrite(contents, *open_args) | 
					
						
							|  |  |  |     open("wb", *open_args) { |f| f.write(contents) } | 
					
						
							|  |  |  |   end unless method_defined?(:binwrite) | 
					
						
							| 
									
										
										
										
											2014-07-27 10:34:14 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-28 21:11:35 -07:00
										 |  |  |   def binread(*open_args) | 
					
						
							| 
									
										
										
										
											2016-09-11 17:53:00 +01:00
										 |  |  |     open("rb", *open_args, &:read) | 
					
						
							| 
									
										
										
										
											2014-07-28 21:11:35 -07:00
										 |  |  |   end unless method_defined?(:binread) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-16 12:58:39 +00:00
										 |  |  |   # NOTE always overwrites | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |   def atomic_write(content) | 
					
						
							| 
									
										
										
										
											2014-03-22 10:20:39 -05:00
										 |  |  |     require "tempfile" | 
					
						
							| 
									
										
										
										
											2014-09-20 17:11:16 -05:00
										 |  |  |     tf = Tempfile.new(basename.to_s, dirname) | 
					
						
							| 
									
										
										
										
											2014-03-22 10:20:39 -05:00
										 |  |  |     begin | 
					
						
							| 
									
										
										
										
											2014-11-09 18:17:10 -06:00
										 |  |  |       tf.binmode | 
					
						
							|  |  |  |       tf.write(content) | 
					
						
							| 
									
										
										
										
											2014-03-22 10:20:39 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-09 18:17:10 -06:00
										 |  |  |       begin | 
					
						
							|  |  |  |         old_stat = stat | 
					
						
							|  |  |  |       rescue Errno::ENOENT | 
					
						
							|  |  |  |         old_stat = default_stat | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2014-03-26 13:45:46 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-09 18:17:10 -06:00
										 |  |  |       uid = Process.uid | 
					
						
							|  |  |  |       gid = Process.groups.delete(old_stat.gid) { Process.gid } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       begin | 
					
						
							|  |  |  |         tf.chown(uid, gid) | 
					
						
							|  |  |  |         tf.chmod(old_stat.mode) | 
					
						
							|  |  |  |       rescue Errno::EPERM | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2014-09-20 17:11:16 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-09 18:17:10 -06:00
										 |  |  |       File.rename(tf.path, self) | 
					
						
							|  |  |  |     ensure | 
					
						
							|  |  |  |       tf.close! | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2014-03-22 10:20:39 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def default_stat | 
					
						
							|  |  |  |     sentinel = parent.join(".brew.#{Process.pid}.#{rand(Time.now.to_i)}") | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |     sentinel.open("w") {} | 
					
						
							| 
									
										
										
										
											2014-03-22 10:20:39 -05:00
										 |  |  |     sentinel.stat | 
					
						
							|  |  |  |   ensure | 
					
						
							|  |  |  |     sentinel.unlink | 
					
						
							| 
									
										
										
										
											2012-03-16 12:58:39 +00:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2014-03-22 10:20:39 -05:00
										 |  |  |   private :default_stat | 
					
						
							| 
									
										
										
										
											2012-03-16 12:58:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # @private | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |   def cp_path_sub(pattern, replacement) | 
					
						
							| 
									
										
										
										
											2016-09-11 17:53:00 +01:00
										 |  |  |     raise "#{self} does not exist" unless exist? | 
					
						
							| 
									
										
										
										
											2013-10-05 20:29:02 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-26 22:22:45 -04:00
										 |  |  |     dst = sub(pattern, replacement) | 
					
						
							| 
									
										
										
										
											2013-10-05 20:29:02 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-26 22:22:45 -04:00
										 |  |  |     raise "#{self} is the same file as #{dst}" if self == dst | 
					
						
							| 
									
										
										
										
											2013-10-05 20:29:02 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-26 22:22:45 -04:00
										 |  |  |     if directory? | 
					
						
							|  |  |  |       dst.mkpath | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       dst.dirname.mkpath | 
					
						
							|  |  |  |       dst = yield(self, dst) if block_given? | 
					
						
							|  |  |  |       FileUtils.cp(self, dst) | 
					
						
							| 
									
										
										
										
											2013-10-05 20:29:02 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # @private | 
					
						
							| 
									
										
										
										
											2016-09-23 18:13:48 +02:00
										 |  |  |   alias extname_old extname | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   # extended to support common double extensions | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |   def extname(path = to_s) | 
					
						
							| 
									
										
										
										
											2016-08-23 02:36:21 +02:00
										 |  |  |     bottle_ext = path[BOTTLE_EXTNAME_RX, 1] | 
					
						
							|  |  |  |     return bottle_ext if bottle_ext | 
					
						
							|  |  |  |     archive_ext = path[/(\.(tar|cpio|pax)\.(gz|bz2|lz|xz|Z))$/, 1] | 
					
						
							|  |  |  |     return archive_ext if archive_ext | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |     File.extname(path) | 
					
						
							| 
									
										
										
										
											2009-07-31 02:51:17 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # for filetypes we support, basename without extension | 
					
						
							|  |  |  |   def stem | 
					
						
							| 
									
										
										
										
											2013-04-20 13:48:49 -05:00
										 |  |  |     File.basename((path = to_s), extname(path)) | 
					
						
							| 
									
										
										
										
											2009-07-31 02:51:17 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-10 16:48:30 +01:00
										 |  |  |   # I don't trust the children.length == 0 check particularly, not to mention | 
					
						
							|  |  |  |   # it is slow to enumerate the whole directory just to see if it is empty, | 
					
						
							|  |  |  |   # instead rely on good ol' libc and the filesystem | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # @private | 
					
						
							| 
									
										
										
										
											2009-08-10 16:48:30 +01:00
										 |  |  |   def rmdir_if_possible | 
					
						
							|  |  |  |     rmdir | 
					
						
							| 
									
										
										
										
											2009-09-02 14:31:28 +01:00
										 |  |  |     true | 
					
						
							| 
									
										
										
										
											2013-04-27 15:21:05 -05:00
										 |  |  |   rescue Errno::ENOTEMPTY | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |     if (ds_store = self+".DS_Store").exist? && children.length == 1
 | 
					
						
							| 
									
										
										
										
											2013-04-27 15:21:05 -05:00
										 |  |  |       ds_store.unlink | 
					
						
							| 
									
										
										
										
											2012-11-11 11:39:09 -08:00
										 |  |  |       retry | 
					
						
							| 
									
										
										
										
											2013-04-27 15:21:05 -05:00
										 |  |  |     else | 
					
						
							|  |  |  |       false | 
					
						
							| 
									
										
										
										
											2012-11-11 11:39:09 -08:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2013-04-27 15:21:05 -05:00
										 |  |  |   rescue Errno::EACCES, Errno::ENOENT | 
					
						
							| 
									
										
										
										
											2009-09-02 14:31:28 +01:00
										 |  |  |     false | 
					
						
							| 
									
										
										
										
											2009-08-10 16:48:30 +01:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2012-01-22 22:12:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # @private | 
					
						
							| 
									
										
										
										
											2009-07-31 02:51:17 +01:00
										 |  |  |   def version | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |     require "version" | 
					
						
							| 
									
										
										
										
											2016-03-31 17:08:00 +08:00
										 |  |  |     Version.parse(basename) | 
					
						
							| 
									
										
										
										
											2009-07-31 02:51:17 +01:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2012-01-22 22:12:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # @private | 
					
						
							| 
									
										
										
										
											2012-04-29 11:45:46 -07:00
										 |  |  |   def compression_type | 
					
						
							| 
									
										
										
										
											2014-04-06 11:18:25 -05:00
										 |  |  |     case extname | 
					
						
							|  |  |  |     when ".jar", ".war" | 
					
						
							|  |  |  |       # Don't treat jars or wars as compressed | 
					
						
							|  |  |  |       return | 
					
						
							|  |  |  |     when ".gz" | 
					
						
							|  |  |  |       # If the filename ends with .gz not preceded by .tar | 
					
						
							|  |  |  |       # then we want to gunzip but not tar | 
					
						
							|  |  |  |       return :gzip_only | 
					
						
							| 
									
										
										
										
											2014-04-06 11:19:30 -05:00
										 |  |  |     when ".bz2" | 
					
						
							|  |  |  |       return :bzip2_only | 
					
						
							| 
									
										
										
										
											2015-04-26 11:11:33 -07:00
										 |  |  |     when ".lha", ".lzh" | 
					
						
							|  |  |  |       return :lha | 
					
						
							| 
									
										
										
										
											2014-04-06 11:18:25 -05:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2013-06-08 10:27:47 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-03 20:31:00 -07:00
										 |  |  |     # Get enough of the file to detect common file types | 
					
						
							|  |  |  |     # POSIX tar magic has a 257 byte offset | 
					
						
							| 
									
										
										
										
											2012-04-29 11:45:46 -07:00
										 |  |  |     # magic numbers stolen from /usr/share/file/magic/ | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |     case open("rb") { |f| f.read(262) } | 
					
						
							| 
									
										
										
										
											2013-04-03 23:30:32 -05:00
										 |  |  |     when /^PK\003\004/n         then :zip | 
					
						
							|  |  |  |     when /^\037\213/n           then :gzip | 
					
						
							|  |  |  |     when /^BZh/n                then :bzip2 | 
					
						
							|  |  |  |     when /^\037\235/n           then :compress | 
					
						
							|  |  |  |     when /^.{257}ustar/n        then :tar | 
					
						
							|  |  |  |     when /^\xFD7zXZ\x00/n       then :xz | 
					
						
							| 
									
										
										
										
											2013-11-29 10:10:28 -08:00
										 |  |  |     when /^LZIP/n               then :lzip | 
					
						
							| 
									
										
										
										
											2013-04-03 23:30:32 -05:00
										 |  |  |     when /^Rar!/n               then :rar | 
					
						
							|  |  |  |     when /^7z\xBC\xAF\x27\x1C/n then :p7zip | 
					
						
							| 
									
										
										
										
											2014-04-06 12:34:42 -05:00
										 |  |  |     when /^xar!/n               then :xar | 
					
						
							| 
									
										
										
										
											2014-12-09 01:22:55 -05:00
										 |  |  |     when /^\xed\xab\xee\xdb/n   then :rpm | 
					
						
							| 
									
										
										
										
											2012-04-29 11:45:46 -07:00
										 |  |  |     else | 
					
						
							| 
									
										
										
										
											2012-08-22 09:33:10 -04:00
										 |  |  |       # This code so that bad-tarballs and zips produce good error messages | 
					
						
							|  |  |  |       # when they don't unarchive properly. | 
					
						
							|  |  |  |       case extname | 
					
						
							| 
									
										
										
										
											2013-04-03 23:30:32 -05:00
										 |  |  |       when ".tar.gz", ".tgz", ".tar.bz2", ".tbz" then :tar | 
					
						
							|  |  |  |       when ".zip" then :zip | 
					
						
							| 
									
										
										
										
											2012-08-22 09:33:10 -04:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2012-04-29 11:45:46 -07:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # @private | 
					
						
							| 
									
										
										
										
											2012-05-25 23:44:11 -05:00
										 |  |  |   def text_executable? | 
					
						
							| 
									
										
										
										
											2016-09-11 17:53:00 +01:00
										 |  |  |     /^#!\s*\S+/ =~ open("r") { |f| f.read(1024) } | 
					
						
							| 
									
										
										
										
											2012-05-25 23:44:11 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # @private | 
					
						
							| 
									
										
										
										
											2014-06-11 12:05:19 -05:00
										 |  |  |   def incremental_hash(klass) | 
					
						
							|  |  |  |     digest = klass.new | 
					
						
							|  |  |  |     if digest.respond_to?(:file) | 
					
						
							|  |  |  |       digest.file(self) | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       buf = "" | 
					
						
							| 
									
										
										
										
											2015-01-05 10:45:05 -05:00
										 |  |  |       open("rb") { |f| digest << buf while f.read(16384, buf) } | 
					
						
							| 
									
										
										
										
											2014-06-11 12:05:19 -05:00
										 |  |  |     end | 
					
						
							|  |  |  |     digest.hexdigest | 
					
						
							| 
									
										
										
										
											2010-03-27 10:41:24 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-14 22:05:30 -05:00
										 |  |  |   def sha256 | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |     require "digest/sha2" | 
					
						
							| 
									
										
										
										
											2010-03-27 10:41:24 -05:00
										 |  |  |     incremental_hash(Digest::SHA2) | 
					
						
							| 
									
										
										
										
											2009-12-30 18:56:46 +00:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2012-06-18 19:58:35 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |   def verify_checksum(expected) | 
					
						
							|  |  |  |     raise ChecksumMissingError if expected.nil? || expected.empty? | 
					
						
							| 
									
										
										
										
											2012-06-18 19:58:35 -05:00
										 |  |  |     actual = Checksum.new(expected.hash_type, send(expected.hash_type).downcase) | 
					
						
							| 
									
										
										
										
											2014-02-18 13:27:35 -05:00
										 |  |  |     raise ChecksumMismatchError.new(self, expected, actual) unless expected == actual | 
					
						
							| 
									
										
										
										
											2012-06-18 19:58:35 -05:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2009-12-30 18:56:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |   # FIXME: eliminate the places where we rely on this method | 
					
						
							| 
									
										
										
										
											2016-09-23 18:13:48 +02:00
										 |  |  |   alias to_str to_s unless method_defined?(:to_str) | 
					
						
							| 
									
										
										
										
											2010-02-27 12:29:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def cd | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |     Dir.chdir(self) { yield } | 
					
						
							| 
									
										
										
										
											2010-02-27 12:29:45 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def subdirs | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |     children.select(&:directory?) | 
					
						
							| 
									
										
										
										
											2010-02-27 12:29:45 +00:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-06-14 11:56:27 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # @private | 
					
						
							| 
									
										
										
										
											2010-07-25 12:07:35 -07:00
										 |  |  |   def resolved_path | 
					
						
							| 
									
										
										
										
											2016-09-11 17:53:00 +01:00
										 |  |  |     symlink? ? dirname+readlink : self | 
					
						
							| 
									
										
										
										
											2010-07-25 12:07:35 -07:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # @private | 
					
						
							| 
									
										
										
										
											2010-06-14 11:56:27 -07:00
										 |  |  |   def resolved_path_exists? | 
					
						
							| 
									
										
										
										
											2013-07-13 16:38:30 -05:00
										 |  |  |     link = readlink | 
					
						
							|  |  |  |   rescue ArgumentError | 
					
						
							|  |  |  |     # The link target contains NUL bytes | 
					
						
							|  |  |  |     false | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     (dirname+link).exist? | 
					
						
							| 
									
										
										
										
											2010-06-14 11:56:27 -07:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-08-08 09:13:27 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # @private | 
					
						
							| 
									
										
										
										
											2014-04-21 09:40:23 -05:00
										 |  |  |   def make_relative_symlink(src) | 
					
						
							| 
									
										
										
										
											2014-03-27 18:39:54 -05:00
										 |  |  |     dirname.mkpath | 
					
						
							| 
									
										
										
										
											2014-04-21 09:40:23 -05:00
										 |  |  |     File.symlink(src.relative_path_from(dirname), self) | 
					
						
							| 
									
										
										
										
											2010-08-15 17:17:26 -07:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-09-12 21:52:30 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-11 16:11:53 -05:00
										 |  |  |   def /(other) | 
					
						
							|  |  |  |     unless other.respond_to?(:to_str) || other.respond_to?(:to_path) | 
					
						
							|  |  |  |       opoo "Pathname#/ called on #{inspect} with #{other.inspect} as an argument" | 
					
						
							|  |  |  |       puts "This behavior is deprecated, please pass either a String or a Pathname" | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     self + other.to_s | 
					
						
							| 
									
										
										
										
											2014-05-05 15:30:28 -05:00
										 |  |  |   end unless method_defined?(:/) | 
					
						
							| 
									
										
										
										
											2010-05-10 01:10:49 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # @private | 
					
						
							| 
									
										
										
										
											2010-05-10 01:10:49 +01:00
										 |  |  |   def ensure_writable | 
					
						
							| 
									
										
										
										
											2011-06-16 17:38:52 +01:00
										 |  |  |     saved_perms = nil | 
					
						
							| 
									
										
										
										
											2012-07-28 11:36:08 -07:00
										 |  |  |     unless writable_real? | 
					
						
							| 
									
										
										
										
											2011-06-16 17:38:52 +01:00
										 |  |  |       saved_perms = stat.mode | 
					
						
							| 
									
										
										
										
											2010-05-10 01:10:49 +01:00
										 |  |  |       chmod 0644
 | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     yield | 
					
						
							|  |  |  |   ensure | 
					
						
							|  |  |  |     chmod saved_perms if saved_perms | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2012-01-21 00:51:20 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # @private | 
					
						
							| 
									
										
										
										
											2012-01-21 00:51:20 +01:00
										 |  |  |   def install_info | 
					
						
							| 
									
										
										
										
											2014-04-14 21:32:31 -05:00
										 |  |  |     quiet_system "/usr/bin/install-info", "--quiet", to_s, "#{dirname}/dir" | 
					
						
							| 
									
										
										
										
											2012-01-21 00:51:20 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  |   # @private | 
					
						
							| 
									
										
										
										
											2012-01-21 00:51:20 +01:00
										 |  |  |   def uninstall_info | 
					
						
							| 
									
										
										
										
											2014-04-14 21:32:31 -05:00
										 |  |  |     quiet_system "/usr/bin/install-info", "--delete", "--quiet", to_s, "#{dirname}/dir" | 
					
						
							| 
									
										
										
										
											2012-01-21 00:51:20 +01:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2012-03-02 20:28:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-07 11:16:45 -07:00
										 |  |  |   # Writes an exec script in this folder for each target pathname | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |   def write_exec_script(*targets) | 
					
						
							| 
									
										
										
										
											2013-06-20 16:18:01 -05:00
										 |  |  |     targets.flatten! | 
					
						
							| 
									
										
										
										
											2012-08-07 11:16:45 -07:00
										 |  |  |     if targets.empty? | 
					
						
							| 
									
										
										
										
											2013-07-22 10:57:51 -07:00
										 |  |  |       opoo "tried to write exec scripts to #{self} for an empty list of targets" | 
					
						
							| 
									
										
										
										
											2013-12-12 08:21:22 -08:00
										 |  |  |       return | 
					
						
							| 
									
										
										
										
											2012-08-07 11:16:45 -07:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2014-06-17 21:41:22 -05:00
										 |  |  |     mkpath | 
					
						
							| 
									
										
										
										
											2012-08-07 11:16:45 -07:00
										 |  |  |     targets.each do |target| | 
					
						
							|  |  |  |       target = Pathname.new(target) # allow pathnames or strings | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |       (self+target.basename).write <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2013-12-12 08:21:22 -08:00
										 |  |  |         #!/bin/bash | 
					
						
							|  |  |  |         exec "#{target}" "$@" | 
					
						
							| 
									
										
										
										
											2012-08-07 11:16:45 -07:00
										 |  |  |       EOS | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-04 12:49:38 +00:00
										 |  |  |   # Writes an exec script that sets environment variables | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |   def write_env_script(target, env) | 
					
						
							|  |  |  |     env_export = "" | 
					
						
							|  |  |  |     env.each { |key, value| env_export += "#{key}=\"#{value}\" " } | 
					
						
							| 
									
										
										
										
											2014-06-17 21:44:13 -05:00
										 |  |  |     dirname.mkpath | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |     write <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2014-01-04 12:49:38 +00:00
										 |  |  |     #!/bin/bash | 
					
						
							|  |  |  |     #{env_export}exec "#{target}" "$@" | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # Writes a wrapper env script and moves all files to the dst | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |   def env_script_all_files(dst, env) | 
					
						
							| 
									
										
										
										
											2014-01-04 12:49:38 +00:00
										 |  |  |     dst.mkpath | 
					
						
							| 
									
										
										
										
											2014-05-31 23:53:46 -05:00
										 |  |  |     Pathname.glob("#{self}/*") do |file| | 
					
						
							| 
									
										
										
										
											2015-02-25 18:10:03 +08:00
										 |  |  |       next if file.directory? | 
					
						
							| 
									
										
										
										
											2015-03-23 21:01:50 -04:00
										 |  |  |       dst.install(file) | 
					
						
							| 
									
										
										
										
											2014-01-04 12:49:38 +00:00
										 |  |  |       new_file = dst+file.basename | 
					
						
							|  |  |  |       file.write_env_script(new_file, env) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-07 11:16:45 -07:00
										 |  |  |   # Writes an exec script that invokes a java jar | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |   def write_jar_script(target_jar, script_name, java_opts = "") | 
					
						
							| 
									
										
										
										
											2014-06-17 21:41:49 -05:00
										 |  |  |     mkpath | 
					
						
							| 
									
										
										
										
											2012-08-07 11:16:45 -07:00
										 |  |  |     (self+script_name).write <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2013-12-12 08:21:22 -08:00
										 |  |  |       #!/bin/bash | 
					
						
							|  |  |  |       exec java #{java_opts} -jar #{target_jar} "$@" | 
					
						
							| 
									
										
										
										
											2012-08-07 11:16:45 -07:00
										 |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |   def install_metafiles(from = Pathname.pwd) | 
					
						
							| 
									
										
										
										
											2014-06-07 17:52:11 -05:00
										 |  |  |     Pathname(from).children.each do |p| | 
					
						
							| 
									
										
										
										
											2012-11-11 10:45:58 -08:00
										 |  |  |       next if p.directory? | 
					
						
							| 
									
										
										
										
											2014-06-07 23:40:26 -05:00
										 |  |  |       next unless Metafiles.copy?(p.basename.to_s) | 
					
						
							| 
									
										
										
										
											2012-11-11 10:45:58 -08:00
										 |  |  |       # Some software symlinks these files (see help2man.rb) | 
					
						
							|  |  |  |       filename = p.resolved_path | 
					
						
							| 
									
										
										
										
											2012-11-12 20:56:05 -08:00
										 |  |  |       # Some software links metafiles together, so by the time we iterate to one of them | 
					
						
							|  |  |  |       # we may have already moved it. libxml2's COPYING and Copyright are affected by this. | 
					
						
							|  |  |  |       next unless filename.exist? | 
					
						
							| 
									
										
										
										
											2012-11-11 10:45:58 -08:00
										 |  |  |       filename.chmod 0644
 | 
					
						
							| 
									
										
										
										
											2014-06-07 17:52:11 -05:00
										 |  |  |       install(filename) | 
					
						
							| 
									
										
										
										
											2012-11-11 10:45:58 -08:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-23 02:36:21 +02:00
										 |  |  |   # https://bugs.ruby-lang.org/issues/9915 | 
					
						
							| 
									
										
										
										
											2016-08-18 14:35:39 +08:00
										 |  |  |   if RUBY_VERSION == "2.0.0" | 
					
						
							| 
									
										
										
										
											2014-06-08 20:00:52 -05:00
										 |  |  |     prepend Module.new { | 
					
						
							|  |  |  |       def inspect | 
					
						
							| 
									
										
										
										
											2014-06-08 20:04:16 -05:00
										 |  |  |         super.force_encoding(@path.encoding) | 
					
						
							| 
									
										
										
										
											2014-06-08 20:00:52 -05:00
										 |  |  |       end | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2013-04-14 21:50:57 -05:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2009-07-31 02:51:17 +01:00
										 |  |  | end | 
					
						
							| 
									
										
										
										
											2009-08-10 16:48:30 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-29 10:56:24 +01:00
										 |  |  | # @private | 
					
						
							| 
									
										
										
										
											2009-08-10 16:48:30 +01:00
										 |  |  | module ObserverPathnameExtension | 
					
						
							| 
									
										
										
										
											2013-08-09 21:09:48 -05:00
										 |  |  |   class << self | 
					
						
							|  |  |  |     attr_accessor :n, :d | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def reset_counts! | 
					
						
							|  |  |  |       @n = @d = 0
 | 
					
						
							| 
									
										
										
										
											2015-09-30 13:49:47 +08:00
										 |  |  |       @put_verbose_trimmed_warning = false | 
					
						
							| 
									
										
										
										
											2013-08-09 21:09:48 -05:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def total | 
					
						
							|  |  |  |       n + d | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def counts | 
					
						
							|  |  |  |       [n, d] | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2015-09-30 13:49:47 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     MAXIMUM_VERBOSE_OUTPUT = 100
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def verbose? | 
					
						
							|  |  |  |       return ARGV.verbose? unless ENV["TRAVIS"] | 
					
						
							|  |  |  |       return false unless ARGV.verbose? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       if total < MAXIMUM_VERBOSE_OUTPUT | 
					
						
							|  |  |  |         true | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         unless @put_verbose_trimmed_warning | 
					
						
							|  |  |  |           puts "Only the first #{MAXIMUM_VERBOSE_OUTPUT} operations were output." | 
					
						
							|  |  |  |           @put_verbose_trimmed_warning = true | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         false | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2013-08-09 21:09:48 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-10 16:48:30 +01:00
										 |  |  |   def unlink | 
					
						
							|  |  |  |     super | 
					
						
							| 
									
										
										
										
											2015-09-30 13:49:47 +08:00
										 |  |  |     puts "rm #{self}" if ObserverPathnameExtension.verbose? | 
					
						
							| 
									
										
										
										
											2013-08-09 21:09:48 -05:00
										 |  |  |     ObserverPathnameExtension.n += 1
 | 
					
						
							| 
									
										
										
										
											2009-08-10 16:48:30 +01:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-15 13:07:58 +02:00
										 |  |  |   def mkpath | 
					
						
							|  |  |  |     super | 
					
						
							|  |  |  |     puts "mkdir -p #{self}" if ObserverPathnameExtension.verbose? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-10 16:48:30 +01:00
										 |  |  |   def rmdir | 
					
						
							|  |  |  |     super | 
					
						
							| 
									
										
										
										
											2015-09-30 13:49:47 +08:00
										 |  |  |     puts "rmdir #{self}" if ObserverPathnameExtension.verbose? | 
					
						
							| 
									
										
										
										
											2013-08-09 21:09:48 -05:00
										 |  |  |     ObserverPathnameExtension.d += 1
 | 
					
						
							| 
									
										
										
										
											2009-08-10 16:48:30 +01:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def make_relative_symlink(src) | 
					
						
							| 
									
										
										
										
											2010-08-15 17:17:26 -07:00
										 |  |  |     super | 
					
						
							| 
									
										
										
										
											2015-09-30 13:49:47 +08:00
										 |  |  |     puts "ln -s #{src.relative_path_from(dirname)} #{basename}" if ObserverPathnameExtension.verbose? | 
					
						
							| 
									
										
										
										
											2013-08-09 21:09:48 -05:00
										 |  |  |     ObserverPathnameExtension.n += 1
 | 
					
						
							| 
									
										
										
										
											2009-08-10 16:48:30 +01:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-21 00:51:20 +01:00
										 |  |  |   def install_info | 
					
						
							|  |  |  |     super | 
					
						
							| 
									
										
										
										
											2015-09-30 13:49:47 +08:00
										 |  |  |     puts "info #{self}" if ObserverPathnameExtension.verbose? | 
					
						
							| 
									
										
										
										
											2012-01-21 00:51:20 +01:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-21 00:51:20 +01:00
										 |  |  |   def uninstall_info | 
					
						
							|  |  |  |     super | 
					
						
							| 
									
										
										
										
											2015-09-30 13:49:47 +08:00
										 |  |  |     puts "uninfo #{self}" if ObserverPathnameExtension.verbose? | 
					
						
							| 
									
										
										
										
											2012-01-21 00:51:20 +01:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2009-08-10 16:48:30 +01:00
										 |  |  | end |