2016-02-01 12:43:26 +00:00
# frozen_string_literal: true
2007-11-10 07:48:56 +00:00
require 'rubygems/command'
require 'rubygems/indexer'
2009-06-09 21:38:59 +00:00
##
# Generates a index files for use as a gem server.
#
# See `gem help generate_index`
2007-11-10 07:48:56 +00:00
class Gem :: Commands :: GenerateIndexCommand < Gem :: Command
def initialize
super 'generate_index' ,
'Generates the index files for a gem server directory' ,
2012-11-29 06:52:18 +00:00
:directory = > '.' , :build_modern = > true
2007-11-10 07:48:56 +00:00
add_option '-d' , '--directory=DIRNAME' ,
'repository base dir containing gems subdir' do | dir , options |
options [ :directory ] = File . expand_path dir
end
2009-06-09 21:38:59 +00:00
add_option '--[no-]modern' ,
2012-11-29 06:52:18 +00:00
'Generate indexes for RubyGems' ,
'(always true)' do | value , options |
2009-06-09 21:38:59 +00:00
options [ :build_modern ] = value
end
2019-12-13 20:19:08 +09:00
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.' )
2009-06-09 21:38:59 +00:00
add_option '--update' ,
'Update modern indexes with gems added' ,
'since the last update' do | value , options |
options [ :update ] = value
end
2007-11-10 07:48:56 +00:00
end
def defaults_str # :nodoc:
2012-11-29 06:52:18 +00:00
" --directory . --modern "
2007-11-10 07:48:56 +00:00
end
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
2009-06-09 21:38:59 +00:00
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
2007-11-10 07:48:56 +00:00
2012-11-29 06:52:18 +00:00
The . rz extension files are compressed with the inflate algorithm .
2009-06-09 21:38:59 +00:00
The Marshal version number comes from ruby ' s Marshal :: MAJOR_VERSION and
Marshal :: MINOR_VERSION constants . It is used to ensure compatibility .
2007-11-10 07:48:56 +00:00
EOF
end
def execute
2014-01-19 05:43:26 +00:00
# This is always true because it's the only way now.
2012-11-29 06:52:18 +00:00
options [ :build_modern ] = true
2009-06-09 21:38:59 +00:00
2007-11-10 07:48:56 +00:00
if not File . exist? ( options [ :directory ] ) or
2018-11-21 10:20:47 +00:00
not File . directory? ( options [ :directory ] )
2018-02-06 02:58:35 +00:00
alert_error " unknown directory name #{ options [ :directory ] } . "
2007-11-10 07:48:56 +00:00
terminate_interaction 1
else
2009-06-09 21:38:59 +00:00
indexer = Gem :: Indexer . new options . delete ( :directory ) , options
2018-11-21 10:20:47 +00:00
if options [ :update ]
2009-06-09 21:38:59 +00:00
indexer . update_index
else
indexer . generate_index
end
2007-11-10 07:48:56 +00:00
end
end
end