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
63
64
65
66
67
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
|
# File 'lib/redis-copy/cli.rb', line 20
def initialize(argv = ARGV)
argv = argv.dup
options = {}
OptionParser.new do |opts|
opts.version = RedisCopy::VERSION
opts.banner = "#{opts.program_name} v#{opts.version}\n" +
"Usage: #{opts.program_name} [options] <source> <destination>"
indent_desc = proc do |desc|
desc.split("\n").join("\n#{opts.summary_indent}#{' '*opts.summary_width} ")
end
opts.separator " <source> and <destination> must be redis connection uris"
opts.separator " like [redis://]<hostname>[:<port>][/<db>]"
opts.separator ''
opts.separator "Specific options:"
opts.on('--strategy STRATEGY', [:auto, :new, :classic],
indent_desc.(
"Select strategy (auto, new, classic) (default #{DEFAULTS[:strategy]})\n" +
" auto: uses new if available, otherwise fallback\n" +
" new: use redis DUMP and RESTORE commands (faster)\n" +
" classic: migrates via multiple type-specific commands"
)
) do |strategy|
options[:strategy] = strategy
end
opts.on('--[no-]pipeline',
"Use redis pipeline where available (default #{DEFAULTS[:pipeline]})"
) do |pipeline|
options[:pipeline] = pipeline
end
opts.on('-d', '--[no-]debug', "Write debug output (default #{DEFAULTS[:debug]})") do |debug|
options[:debug] = debug
end
opts.on('-t', '--[no-]trace', "Enable backtrace on failure (default #{DEFAULTS[:trace]})") do |trace|
options[:trace] = trace
end
opts.on('-f', '--[no-]fail-fast', "Abort on first failure (default #{DEFAULTS[:fail_fast]})") do |ff|
options[:fail_fast] = ff
end
opts.on('--[no-]prompt', "Prompt for confirmation (default #{DEFAULTS[:prompt]})") do
options[:prompt] = true
end
opts.on('--[no-]allow-nonempty', "Allow non-empty destination (default #{DEFAULTS[:allow_nonempty]})") do |allow_nonempty|
options[:allow_nonempty] = allow_nonempty
end
opts.on('--[no-]dry-run', 'Output configuration and exit') do |d|
options[:dry_run] = true
end
opts.parse!(argv)
unless argv.size == 2
opts.abort "Source and Destination must be specified\n\n" +
opts.help
end
@source = argv.shift
@destination = argv.shift
opts.abort "source is not valid URI" unless @source =~ REDIS_URI
opts.abort "destination is not valid URI" unless @destination =~ REDIS_URI
end
@config = DEFAULTS.merge(options)
end
|