class Gem::Commands::PatchCommand

Public Class Methods

new() click to toggle source
Calls superclass method
# File lib/rubygems/commands/patch_command.rb, line 5
def initialize
  super "patch", "Patches the gem with the given patches and generates patched gem.",
    :output => Dir.pwd, :strip => 0

  # Same as 'patch -pNUMBER' on Linux machines
  add_option('-pNUMBER', '--strip=NUMBER', 'Set the file name strip count to NUMBER.') do |number, options|
    options[:strip] = number
  end
  
  # Number of lines to ignore in looking for places to install a hunk
  add_option('-FNUMBER', '--fuzz=NUMBER', 'Set NUMBER of lines to ignore in looking for places to install a hunk.') do |number, options|
    options[:fuzz] = number
  end
  
  # Set output file to FILE instead of overwritting
  add_option('-oFILE', '--output=FILE', 'Set output FILE.') do |file, options|
    options[:outfile] = file
  end
  
  # Dry run only shows expected output from the patching process
  add_option('--dry-run', 'Print the results from patching, but do not change any files.') do |file, options|
    options[:dry_run] = true
  end
end

Public Instance Methods

execute() click to toggle source
# File lib/rubygems/commands/patch_command.rb, line 51
def execute
  gemfile = options[:args].shift
  patches = options[:args]
  
  # No gem
  unless gemfile
    raise Gem::CommandLineError,
      "Please specify a gem file on the command line (e.g. gem patch foo-0.1.0.gem PATCH [PATCH ...])"
  end

  # No patches
  if patches.empty?
    raise Gem::CommandLineError,
      "Please specify patches to apply (e.g. gem patch foo-0.1.0.gem foo.patch bar.patch ...)"
  end

  patcher = Gem::Patcher.new(gemfile, options[:output])
  patcher.patch_with(patches, options) 
  patcher.print_results
end