Class: Gem::Commands::GenerateIndexCommand

Inherits:
Gem::Command
  • Object
show all
Defined in:
lib/rubygems/commands/generate_index_command.rb

Overview

Generates a index files for use as a gem server.

See ‘gem help generate_index`

Instance Method Summary collapse

Constructor Details

#initializeGenerateIndexCommand

Returns a new instance of GenerateIndexCommand.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/rubygems/commands/generate_index_command.rb', line 12

def initialize
  super "generate_index",
        "Generates the index files for a gem server directory",
        :directory => ".", :build_modern => true, :build_compact => true

  @deprecated_options = { "generate_index" => {} } unless defined?(@deprecated_options)

  add_option "-d", "--directory=DIRNAME",
             "repository base dir containing gems subdir" do |dir, options|
    options[:directory] = File.expand_path dir
  end

  add_option "--[no-]modern",
             "Generate indexes for RubyGems",
             "(always true)" do |value, options|
    options[:build_modern] = value
  end

  deprecate_option("--modern", version: "4.0", extra_msg: "Modern indexes (specs, latest_specs, and prerelease_specs) are always generated, so this option is not needed.")
  deprecate_option("--no-modern", version: "4.0", extra_msg: "The `--no-modern` option is currently ignored. Modern indexes (specs, latest_specs, and prerelease_specs) are always generated.")

  add_option "--[no-]compact",
              "Generate compact index files" do |value, options|
    options[:build_compact] = value
  end

  add_option "--update",
             "Update modern and compact indices with gems added",
             "since the last update" do |value, options|
    options[:update] = value
  end
end

Instance Method Details

#check_deprecated_options(options) ⇒ Object



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/rubygems/commands/generate_index_command.rb', line 99

def check_deprecated_options(options)
  options.each do |option|
    next unless option_is_deprecated?(option)
    deprecation = @deprecated_options[command][option]
    version_to_expire = deprecation["rg_version_to_expire"]

    deprecate_option_msg = if version_to_expire
      "The \"#{option}\" option has been deprecated and will be removed in Rubygems #{version_to_expire}."
    else
      "The \"#{option}\" option has been deprecated and will be removed in future versions of Rubygems."
    end

    extra_msg = deprecation["extra_msg"]

    deprecate_option_msg += " #{extra_msg}" if extra_msg

    alert_warning(deprecate_option_msg)
  end
end

#defaults_strObject

:nodoc:



45
46
47
# File 'lib/rubygems/commands/generate_index_command.rb', line 45

def defaults_str # :nodoc:
  "--directory . --modern --compact"
end

#deprecate_option(name, version: nil, extra_msg: nil) ⇒ Object



95
96
97
# File 'lib/rubygems/commands/generate_index_command.rb', line 95

def deprecate_option(name, version: nil, extra_msg: nil)
  @deprecated_options[command].merge!({ name => { "rg_version_to_expire" => version, "extra_msg" => extra_msg } })
end

#descriptionObject

:nodoc:



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/rubygems/commands/generate_index_command.rb', line 49

def description # :nodoc:
  <<-EOF
The generate_index command creates a set of indexes for serving gems
statically.  The command expects a 'gems' directory under the path given to
the --directory option.  The given directory will be the directory you serve
as the gem repository.

For `gem generate_index --directory /path/to/repo`, expose /path/to/repo via
your HTTP server configuration (not /path/to/repo/gems).

When done, it will generate a set of files like this:

gems/*.gem                                   # .gem files you want to
                                             # index

specs.<version>.gz                           # specs index
latest_specs.<version>.gz                    # latest specs index
prerelease_specs.<version>.gz                # prerelease specs index
quick/Marshal.<version>/<gemname>.gemspec.rz # Marshal quick index file

The .rz extension files are compressed with the inflate algorithm.
The Marshal version number comes from ruby's Marshal::MAJOR_VERSION and
Marshal::MINOR_VERSION constants.  It is used to ensure compatibility.
  EOF
end

#executeObject



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/rubygems/commands/generate_index_command.rb', line 75

def execute
  # This is always true because it's the only way now.
  options[:build_modern] = true

  if !File.exist?(options[:directory]) ||
     !File.directory?(options[:directory])
    alert_error "unknown directory name #{options[:directory]}."
    terminate_interaction 1
  else
    indexer = Gem::Indexer.new options.delete(:directory), options

    if options[:update]
      indexer.update_index
    else
      indexer.generate_index
    end
  end
end

#handle_options(args) ⇒ Object



119
120
121
122
# File 'lib/rubygems/commands/generate_index_command.rb', line 119

def handle_options(args)
  super
  check_deprecated_options(args)
end