uricp 0.0.24 → 0.0.28

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -0
  3. data/Gemfile.lock +2 -4
  4. data/features/rbd_access.feature +2 -2
  5. data/lib/segment_upload.rb +2 -28
  6. data/lib/uricp/curl_primitives.rb +2 -0
  7. data/lib/uricp/orbit_auth.rb +2 -0
  8. data/lib/uricp/segmenter.rb +3 -1
  9. data/lib/uricp/strategy/cache_common.rb +5 -3
  10. data/lib/uricp/strategy/cached_get.rb +2 -0
  11. data/lib/uricp/strategy/cleaner.rb +2 -0
  12. data/lib/uricp/strategy/common.rb +8 -6
  13. data/lib/uricp/strategy/local_convert.rb +2 -0
  14. data/lib/uricp/strategy/local_link.rb +2 -0
  15. data/lib/uricp/strategy/piped_cache.rb +2 -0
  16. data/lib/uricp/strategy/piped_cache_convert.rb +2 -0
  17. data/lib/uricp/strategy/piped_compress.rb +2 -0
  18. data/lib/uricp/strategy/piped_decompress.rb +2 -0
  19. data/lib/uricp/strategy/piped_local_compress.rb +2 -0
  20. data/lib/uricp/strategy/piped_local_decompress.rb +2 -0
  21. data/lib/uricp/strategy/piped_local_get.rb +2 -0
  22. data/lib/uricp/strategy/piped_local_put.rb +2 -0
  23. data/lib/uricp/strategy/piped_rbd_get.rb +4 -2
  24. data/lib/uricp/strategy/piped_remote_get.rb +2 -0
  25. data/lib/uricp/strategy/rbd_cache_base_snap.rb +3 -1
  26. data/lib/uricp/strategy/rbd_cache_check.rb +2 -0
  27. data/lib/uricp/strategy/rbd_cache_clone.rb +2 -0
  28. data/lib/uricp/strategy/rbd_cache_upload.rb +5 -7
  29. data/lib/uricp/strategy/rbd_cached_get.rb +2 -0
  30. data/lib/uricp/strategy/rbd_cached_put.rb +8 -5
  31. data/lib/uricp/strategy/rbd_put.rb +5 -6
  32. data/lib/uricp/strategy/rbd_snap.rb +6 -4
  33. data/lib/uricp/strategy/rbd_sweeper.rb +2 -0
  34. data/lib/uricp/strategy/remote_put.rb +2 -0
  35. data/lib/uricp/strategy/segmented_remote_put.rb +2 -0
  36. data/lib/uricp/strategy/sweeper.rb +2 -0
  37. data/lib/uricp/uri_strategy.rb +2 -0
  38. data/lib/uricp/version.rb +1 -1
  39. data/uricp.gemspec +14 -14
  40. metadata +28 -42
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ff143aca9aad2f48ac2948322959e24a421b95cd04cb545a8921f18e601139f0
4
- data.tar.gz: 719d814583ab1513f10bbc04f6c8487c0fb803a6ab8fb4a307de6c1bf6d7c39a
3
+ metadata.gz: f38de4de6dab603e4d1afb48ef53953b96ab81ab3c00e43d00175fd70b833ff2
4
+ data.tar.gz: f801e290216b13aad5c8dc18e03415a8892b9833130298ed0bc06d86d3b81edc
5
5
  SHA512:
6
- metadata.gz: 78a4cab2edab9ef6ca65a483dc5fe5cad0b221bfd170f891812af0c5883ae11e9b64e60b49be535fc41829d91f21820016c5fcfb94850c83487b0dcb4ba9c36b
7
- data.tar.gz: 740916783658e36e3346eda72ea799a7a35e58da3cbb40619516c2f788de343c72a976c95229d85beccd5e9a3b5afcc1ebc85b726ed5cc6e85c2a9723877efaf
6
+ metadata.gz: 12a6308de8648ef1695db50ef507fcb86302f53534631dba9949386217f3f07e8f2ed1bd3738b0bcf77b40d6b9f5603d5aa1becd319b8025ba16e8eb6f4821d0
7
+ data.tar.gz: 03f1d0286bf5d74f0c34987f00d35f19634fd3172599241954c443c70621976b59deaa566b615f37351a14d6a3eb55273f4df84fe76698e7c01c69d027ad7c96
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in uricp.gemspec
data/Gemfile.lock CHANGED
@@ -1,12 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- uricp (0.0.24)
4
+ uricp (0.0.28)
5
5
  childprocess (~> 1.0)
6
6
  filesize (= 0.0.2)
7
7
  methadone (~> 2.0.2)
8
8
  open4 (~> 1.3.0)
9
- sendfile (~> 1.2.0)
10
9
 
11
10
  GEM
12
11
  remote: https://rubygems.org/
@@ -41,8 +40,7 @@ GEM
41
40
  rspec-expectations (3.10.1)
42
41
  diff-lcs (>= 1.2.0, < 2.0)
43
42
  rspec-support (~> 3.10.0)
44
- rspec-support (3.10.2)
45
- sendfile (1.2.2)
43
+ rspec-support (3.10.3)
46
44
 
47
45
  PLATFORMS
48
46
  ruby
@@ -32,7 +32,7 @@ Feature: Manipulate file images in ceph
32
32
  """
33
33
  And the output should contain:
34
34
  """
35
- rbd clone --id libvirt 'servers/freedos.qcow2@base' 'servers/srv-testy'
35
+ rbd clone --id libvirt 'servers/freedos.qcow2@base' 'servers/srv-testy' || { [ $? -eq 22 ] && rbd create --id libvirt -s 0 'servers/srv-testy'; };
36
36
  """
37
37
 
38
38
  Scenario: HTTP URI from file cache via unpopulated rbd cache
@@ -41,7 +41,7 @@ Feature: Manipulate file images in ceph
41
41
  When I successfully run `uricp --dry-run --target-format=raw --cache=/tmp/uricp http://orbit.brightbox.com/v1/acc-tqs4c/downloads/freedos.qcow2 rbd:///servers/srv-testy`
42
42
  And the output should contain:
43
43
  """
44
- rbd import --no-progress --id libvirt '/tmp/uricp/cache/freedos.qcow2' 'servers/freedos.qcow2'
44
+ rbd import --no-progress --id libvirt - <'/tmp/uricp/cache/freedos.qcow2' 'servers/freedos.qcow2'
45
45
  """
46
46
  And the output should contain:
47
47
  """
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'uricp/version'
2
4
  require 'uricp/curl_primitives'
3
5
  require 'uricp/orbit_auth'
@@ -6,31 +8,3 @@ require 'uricp/segmenter'
6
8
  module Uricp
7
9
  UnsupportedURLtype = Class.new(ArgumentError)
8
10
  end
9
-
10
- # Monkey patch a copy_stream facility in using 'sendfile'
11
- unless IO.respond_to? :copy_stream
12
- require 'sendfile'
13
-
14
- def IO.copy_stream(src, dst, copy_length = nil, offset = nil)
15
- if src.stat.pipe?
16
- amount = copy_length.to_i
17
- buf_size = [amount, 2**16].min
18
- buffer = ''
19
- while amount > 0
20
- src.read(buf_size, buffer)
21
- amount_read = buffer.length
22
- dst.write(buffer)
23
- amount -= amount_read
24
- break if src.eof?
25
- end
26
- copy_length.to_i - amount
27
- else
28
- current_pos = src.pos
29
- count = dst.sendfile(src, offset || current_pos, copy_length)
30
- src.seek(count, IO::SEEK_CUR)
31
- count
32
- end
33
- rescue EOFError
34
- 0
35
- end
36
- end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Uricp::CurlPrimitives
2
4
  attr_reader :options
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'open-uri'
2
4
  module Uricp
3
5
  class OrbitAuth
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'pathname'
2
4
 
3
5
  module Uricp
@@ -67,7 +69,7 @@ module Uricp
67
69
  end
68
70
 
69
71
  def upload_segment(segment_number)
70
- segment_name = File.join(to.to_s, manifest_suffix, '%08d' % segment_number)
72
+ segment_name = File.join(to.to_s, manifest_suffix, format('%08d', segment_number))
71
73
  debug "Uploading with #{curl_upload_from('-', segment_name)}"
72
74
  open('|' + curl_upload_from('-', segment_name), 'w') do |destination|
73
75
  copy_length = IO.copy_stream(@source, destination, segment_size)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'fileutils'
2
4
 
3
5
  module Uricp::Strategy
@@ -25,11 +27,11 @@ module Uricp::Strategy
25
27
  end
26
28
 
27
29
  def without_active_cache
28
- unless cache_root
29
- yield
30
- else
30
+ if cache_root
31
31
  debug "#{self.class.name}: cache active - not appropriate"
32
32
  false
33
+ else
34
+ yield
33
35
  end
34
36
  end
35
37
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'uri'
2
4
 
3
5
  module Uricp::Strategy
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Uricp::Strategy
2
4
  class Cleaner
3
5
  include Uricp::Strategy::Common
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Uricp::Strategy
2
4
  module Common
3
5
  include Methadone::CLILogging
@@ -92,10 +94,10 @@ module Uricp::Strategy
92
94
  end
93
95
 
94
96
  PIPE_URI = URI('pipe:/')
95
- DRY_SNAP = 'uricp_snap'.freeze
97
+ DRY_SNAP = 'uricp_snap'
96
98
 
97
99
  def rbd_base_name
98
- 'base'.freeze
100
+ 'base'
99
101
  end
100
102
 
101
103
  def rbd_snapshot_name
@@ -104,7 +106,7 @@ module Uricp::Strategy
104
106
 
105
107
  def get_temp_filename(base_dir)
106
108
  t = Time.now.strftime('%Y%m%d')
107
- File.join(base_dir, "uricp-#{t}-#{$$}-#{rand(0x100000000).to_s(36)}")
109
+ File.join(base_dir, "uricp-#{t}-#{$PROCESS_ID}-#{rand(0x100000000).to_s(36)}")
108
110
  end
109
111
 
110
112
  def proposed_path
@@ -131,7 +133,7 @@ module Uricp::Strategy
131
133
  options['rbd_cache_name']
132
134
  end
133
135
 
134
- def rbd_clone_snapshot(cache=rbd_cache_name)
136
+ def rbd_clone_snapshot(cache = rbd_cache_name)
135
137
  "#{cache}@#{rbd_base_name}"
136
138
  end
137
139
 
@@ -167,9 +169,9 @@ module Uricp::Strategy
167
169
  command = "rbd status --id #{rbd_id} --format json #{target} 2>/dev/null"
168
170
  if dry_run?
169
171
  if options['dry-cache'] == :partial_rbd && options['cache_name'] !~ /srv-...../
170
- command = "exit 0"
172
+ command = 'exit 0'
171
173
  else
172
- command = "exit 2"
174
+ command = 'exit 2'
173
175
  end
174
176
  end
175
177
  sh!(command)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Uricp::Strategy
2
4
  class LocalConvert
3
5
  include Uricp::Strategy::Common
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Uricp::Strategy
2
4
  class LocalLink
3
5
  include Uricp::Strategy::Common
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'fileutils'
2
4
 
3
5
  module Uricp::Strategy
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'fileutils'
2
4
 
3
5
  module Uricp::Strategy
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Uricp::Strategy
2
4
  class PipedCompress
3
5
  include Uricp::Strategy::Common
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Uricp::Strategy
2
4
  class PipedDecompress
3
5
  include Uricp::Strategy::Common
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Uricp::Strategy
2
4
  class PipedLocalCompress
3
5
  include Uricp::Strategy::Common
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Uricp::Strategy
2
4
  class PipedLocalDecompress
3
5
  include Uricp::Strategy::Common
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Uricp::Strategy
2
4
  class PipedLocalGet
3
5
  include Uricp::Strategy::Common
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Uricp::Strategy
2
4
  class PipedLocalPut
3
5
  include Uricp::Strategy::Common
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'json'
2
4
  module Uricp::Strategy
3
5
  class PipedRbdGet
@@ -7,8 +9,8 @@ module Uricp::Strategy
7
9
  def appropriate?
8
10
  without_active_cache do
9
11
  if from.scheme == 'rbd' &&
10
- rbd_snapshot_spec?(from) &&
11
- to.scheme != 'rbd'
12
+ rbd_snapshot_spec?(from) &&
13
+ to.scheme != 'rbd'
12
14
  return proposal unless sequence_complete?
13
15
  end
14
16
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'open-uri'
2
4
  module Uricp::Strategy
3
5
  class PipedRemoteGet
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Uricp::Strategy
2
4
  class RbdCacheBaseSnap
3
5
  include Uricp::Strategy::Common
4
6
 
5
7
  def appropriate?
6
8
  if rbd_cache_name &&
7
- rbd_image_spec(from) == rbd_cache_name
9
+ rbd_image_spec(from) == rbd_cache_name
8
10
  return proposal
9
11
  end
10
12
  debug "#{self.class.name}: not appropriate"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'uri'
2
4
 
3
5
  module Uricp::Strategy
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'uri'
2
4
 
3
5
  module Uricp::Strategy
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Uricp::Strategy
2
4
  class RbdCacheUpload
3
5
  include Uricp::Strategy::Common
@@ -18,7 +20,7 @@ module Uricp::Strategy
18
20
  end
19
21
 
20
22
  def command
21
- "rbd import --no-progress --id #{rbd_id} #{data_source} '#{rbd_cache_name}';"
23
+ "rbd import --no-progress --id #{rbd_id} -#{data_source} '#{rbd_cache_name}';"
22
24
  end
23
25
 
24
26
  def proposal
@@ -28,12 +30,8 @@ module Uricp::Strategy
28
30
  end
29
31
 
30
32
  def data_source
31
- if from.scheme == 'pipe'
32
- '-'
33
- else
34
- "'#{from.path}'"
35
- end
33
+ return if from.scheme == 'pipe'
34
+ " <'#{from.path}'"
36
35
  end
37
-
38
36
  end
39
37
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'uri'
2
4
 
3
5
  module Uricp::Strategy
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Uricp::Strategy
2
4
  class RbdCachedPut
3
5
  include Uricp::Strategy::Common
@@ -5,16 +7,18 @@ module Uricp::Strategy
5
7
 
6
8
  def appropriate?
7
9
  return proposal if to.scheme == 'rbd' &&
8
- rbd_snapshot_spec?(from) &&
9
- rbd_cache_name.nil? &&
10
- !rbd_sequence_complete?
10
+ rbd_snapshot_spec?(from) &&
11
+ rbd_cache_name.nil? &&
12
+ !rbd_sequence_complete?
11
13
 
12
14
  debug "#{self.class.name}: not appropriate"
13
15
  false
14
16
  end
15
17
 
16
18
  def command
17
- "rbd clone --id #{rbd_id} '#{rbd_image_spec(from)}' '#{rbd_image_spec(to)}';"
19
+ "rbd clone --id #{rbd_id} '#{rbd_image_spec(from)}' "\
20
+ "'#{rbd_image_spec(to)}' || { [ $? -eq 22 ] && "\
21
+ "rbd create --id #{rbd_id} -s 0 '#{rbd_image_spec(to)}'; };"
18
22
  end
19
23
 
20
24
  def proposal
@@ -27,6 +31,5 @@ module Uricp::Strategy
27
31
  end
28
32
  self
29
33
  end
30
-
31
34
  end
32
35
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Uricp::Strategy
2
4
  class RbdPut
3
5
  include Uricp::Strategy::Common
@@ -20,7 +22,7 @@ module Uricp::Strategy
20
22
  end
21
23
 
22
24
  def command
23
- "rbd import --no-progress --id #{rbd_id} #{data_source} '#{rbd_image_spec(to)}';"
25
+ "rbd import --no-progress --id #{rbd_id} -#{data_source} '#{rbd_image_spec(to)}';"
24
26
  end
25
27
 
26
28
  def proposal
@@ -30,11 +32,8 @@ module Uricp::Strategy
30
32
  end
31
33
 
32
34
  def data_source
33
- if from.scheme == 'pipe'
34
- '-'
35
- else
36
- "'#{from.path}'"
37
- end
35
+ return if from.scheme == 'pipe'
36
+ " <'#{from.path}'"
38
37
  end
39
38
  end
40
39
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'json'
2
4
  module Uricp::Strategy
3
5
  class RbdSnap
@@ -7,10 +9,10 @@ module Uricp::Strategy
7
9
  def appropriate?
8
10
  without_active_cache do
9
11
  if from.scheme == 'rbd' &&
10
- options['rbd_snapshot'].nil? &&
11
- !rbd_snapshot_spec?(from) &&
12
- (rbd_cache_name.nil? ||
13
- !from.path.include?(rbd_cache_name))
12
+ options['rbd_snapshot'].nil? &&
13
+ !rbd_snapshot_spec?(from) &&
14
+ (rbd_cache_name.nil? ||
15
+ !from.path.include?(rbd_cache_name))
14
16
  if snap_in_progress?
15
17
  debug "#{self.class.name}: detected snapshot in progress"
16
18
  else
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Uricp::Strategy
2
4
  class RbdSweeper
3
5
  include Uricp::Strategy::Common
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Uricp::Strategy
2
4
  class RemotePut
3
5
  include Uricp::Strategy::Common
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Uricp::Strategy
2
4
  class SegmentedRemotePut
3
5
  include Uricp::Strategy::Common
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Uricp::Strategy
2
4
  class Sweeper
3
5
  include Uricp::Strategy::Common
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'uri'
2
4
 
3
5
  module Uricp
data/lib/uricp/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Uricp
4
- VERSION = '0.0.24'
4
+ VERSION = '0.0.28'
5
5
  DEFAULT_SEGMENT_SIZE = '5 GiB'
6
6
  end
data/uricp.gemspec CHANGED
@@ -1,32 +1,32 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  lib = File.expand_path('../lib', __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'uricp/version'
5
6
 
6
7
  Gem::Specification.new do |spec|
7
- spec.name = "uricp"
8
+ spec.name = 'uricp'
8
9
  spec.version = Uricp::VERSION
9
- spec.authors = ["Neil Wilson"]
10
- spec.email = ["neil@aldur.co.uk"]
11
- spec.summary = %q{Copy one URL to another with optional cacheing}
12
- spec.description = %q{Copy one URL to another with optional cacheing}
13
- spec.homepage = ""
14
- spec.license = "gplv3"
10
+ spec.authors = ['Neil Wilson']
11
+ spec.email = ['neil@aldur.co.uk']
12
+ spec.summary = 'Copy one URL to another with optional cacheing'
13
+ spec.description = 'Copy one URL to another with optional cacheing'
14
+ spec.homepage = ''
15
+ spec.license = 'gplv3'
15
16
 
16
17
  spec.files = `git ls-files -z`.split("\x0")
17
18
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
20
+ spec.require_paths = ['lib']
20
21
 
21
- spec.add_development_dependency "bundler", "~> 1.7"
22
- spec.add_development_dependency('rdoc', '~> 4.2.0')
23
22
  spec.add_development_dependency('aruba', '~> 0.6.0')
23
+ spec.add_development_dependency 'bundler', '~> 1.7'
24
24
  spec.add_development_dependency('cucumber', '~> 1.3')
25
+ spec.add_development_dependency('inifile', '~> 1.1')
25
26
  spec.add_development_dependency('rake', '~> 12.3')
27
+ spec.add_development_dependency('rdoc', '~> 4.2.0')
26
28
  spec.add_dependency('childprocess', '~> 1.0')
29
+ spec.add_dependency('filesize', '= 0.0.2')
27
30
  spec.add_dependency('methadone', '~> 2.0.2')
28
31
  spec.add_dependency('open4', '~> 1.3.0')
29
- spec.add_dependency('filesize', '= 0.0.2')
30
- spec.add_dependency('sendfile', '~> 1.2.0')
31
- spec.add_development_dependency('inifile', '~> 1.1')
32
32
  end
metadata CHANGED
@@ -1,71 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uricp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.24
4
+ version: 0.0.28
5
5
  platform: ruby
6
6
  authors:
7
7
  - Neil Wilson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-28 00:00:00.000000000 Z
11
+ date: 2022-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: aruba
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.7'
19
+ version: 0.6.0
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.7'
26
+ version: 0.6.0
27
27
  - !ruby/object:Gem::Dependency
28
- name: rdoc
28
+ name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 4.2.0
33
+ version: '1.7'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 4.2.0
40
+ version: '1.7'
41
41
  - !ruby/object:Gem::Dependency
42
- name: aruba
42
+ name: cucumber
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.6.0
47
+ version: '1.3'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.6.0
54
+ version: '1.3'
55
55
  - !ruby/object:Gem::Dependency
56
- name: cucumber
56
+ name: inifile
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '1.3'
61
+ version: '1.1'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '1.3'
68
+ version: '1.1'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -81,47 +81,33 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '12.3'
83
83
  - !ruby/object:Gem::Dependency
84
- name: childprocess
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '1.0'
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '1.0'
97
- - !ruby/object:Gem::Dependency
98
- name: methadone
84
+ name: rdoc
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
87
  - - "~>"
102
88
  - !ruby/object:Gem::Version
103
- version: 2.0.2
104
- type: :runtime
89
+ version: 4.2.0
90
+ type: :development
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
94
  - - "~>"
109
95
  - !ruby/object:Gem::Version
110
- version: 2.0.2
96
+ version: 4.2.0
111
97
  - !ruby/object:Gem::Dependency
112
- name: open4
98
+ name: childprocess
113
99
  requirement: !ruby/object:Gem::Requirement
114
100
  requirements:
115
101
  - - "~>"
116
102
  - !ruby/object:Gem::Version
117
- version: 1.3.0
103
+ version: '1.0'
118
104
  type: :runtime
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
107
  requirements:
122
108
  - - "~>"
123
109
  - !ruby/object:Gem::Version
124
- version: 1.3.0
110
+ version: '1.0'
125
111
  - !ruby/object:Gem::Dependency
126
112
  name: filesize
127
113
  requirement: !ruby/object:Gem::Requirement
@@ -137,33 +123,33 @@ dependencies:
137
123
  - !ruby/object:Gem::Version
138
124
  version: 0.0.2
139
125
  - !ruby/object:Gem::Dependency
140
- name: sendfile
126
+ name: methadone
141
127
  requirement: !ruby/object:Gem::Requirement
142
128
  requirements:
143
129
  - - "~>"
144
130
  - !ruby/object:Gem::Version
145
- version: 1.2.0
131
+ version: 2.0.2
146
132
  type: :runtime
147
133
  prerelease: false
148
134
  version_requirements: !ruby/object:Gem::Requirement
149
135
  requirements:
150
136
  - - "~>"
151
137
  - !ruby/object:Gem::Version
152
- version: 1.2.0
138
+ version: 2.0.2
153
139
  - !ruby/object:Gem::Dependency
154
- name: inifile
140
+ name: open4
155
141
  requirement: !ruby/object:Gem::Requirement
156
142
  requirements:
157
143
  - - "~>"
158
144
  - !ruby/object:Gem::Version
159
- version: '1.1'
160
- type: :development
145
+ version: 1.3.0
146
+ type: :runtime
161
147
  prerelease: false
162
148
  version_requirements: !ruby/object:Gem::Requirement
163
149
  requirements:
164
150
  - - "~>"
165
151
  - !ruby/object:Gem::Version
166
- version: '1.1'
152
+ version: 1.3.0
167
153
  description: Copy one URL to another with optional cacheing
168
154
  email:
169
155
  - neil@aldur.co.uk