Class: Gem::Commands::GenerateIndexCommand

Inherits:
Gem::Command 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 Attribute Summary

Attributes inherited from Gem::Command

#command, #defaults, #options, #program_name, #summary

Instance Method Summary collapse

Methods inherited from Gem::Command

add_common_option, #add_extra_args, #add_option, add_specific_extra_args, #arguments, #begins?, build_args, build_args=, common_options, extra_args, extra_args=, #get_all_gem_names, #get_one_gem_name, #get_one_optional_argument, #handle_options, #handles?, #invoke, #merge_options, #remove_option, #show_help, #show_lookup_failure, specific_extra_args, specific_extra_args_hash, #usage, #when_invoked

Methods included from UserInteraction

#alert, #alert_error, #alert_warning, #ask, #ask_for_password, #ask_yes_no, #choose_from_list, #say, #terminate_interaction

Methods included from DefaultUserInteraction

ui, #ui, ui=, #ui=, use_ui, #use_ui

Constructor Details

#initializeGenerateIndexCommand

Returns a new instance of GenerateIndexCommand.



11
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/rubygems/commands/generate_index_command.rb', line 11

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

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

  add_option '--[no-]legacy',
             'Generate Marshal.4.8' do |value, options|
    unless options[:build_modern] or value then
      raise OptionParser::InvalidOption, 'no indicies will be built'
    end

    options[:build_legacy] = value
  end

  add_option '--[no-]modern',
             'Generate indexes for RubyGems newer',
             'than 1.2.0' do |value, options|
    unless options[:build_legacy] or value then
      raise OptionParser::InvalidOption, 'no indicies will be built'
    end

    options[:build_modern] = value
  end

  add_option '--update',
             'Update modern indexes with gems added',
             'since the last update' do |value, options|
    options[:update] = value
  end

  add_option :RSS, '--rss-gems-host=GEM_HOST',
             'Host name where gems are served from,',
             'used for GUID and enclosure values' do |value, options|
    options[:rss_gems_host] = value
  end

  add_option :RSS, '--rss-host=HOST',
             'Host name for more gems information,',
             'used for RSS feed link' do |value, options|
    options[:rss_host] = value
  end

  add_option :RSS, '--rss-title=TITLE',
             'Set title for RSS feed' do |value, options|
    options[:rss_title] = value
  end
end

Instance Method Details

#defaults_strObject

:nodoc:



64
65
66
# File 'lib/rubygems/commands/generate_index_command.rb', line 64

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

#descriptionObject

:nodoc:



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/rubygems/commands/generate_index_command.rb', line 68

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

# these files support legacy RubyGems
Marshal.<version>
Marshal.<version>.Z                          # Marshal full index

The .Z and .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.

If --rss-host and --rss-gem-host are given an RSS feed will be generated at
index.rss containing gems released in the last two days.
  EOF
end

#executeObject



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

def execute
  if options[:update] and
     (options[:rss_host] or options[:rss_gems_host]) then
    alert_error '--update not compatible with RSS generation'
    terminate_interaction 1
  end

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

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