redsnapper 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c0d4acc365403c91f7779fc0a9ffa9723a13d341
4
- data.tar.gz: 0ff227db6340be603d4b84f73daf9e5dd9eba276
3
+ metadata.gz: 062acc09584fa69d3d578a9e3c31f8e43c894e6f
4
+ data.tar.gz: 802d7dcd2beeef69c6d36e12f81d69717f22137a
5
5
  SHA512:
6
- metadata.gz: 7ca902005eec06e869a7f2181e526854105a507b73be717e3a63723f1781c8cf33fa7cd75da018acbf543c640227508c3be2820ab1ec44a93e2c837762de4cfe
7
- data.tar.gz: 7e1f7e53bc1e1a58fe01ac1a3250411d9350d1a7b2cd5e49ffb75b89e420ad0c8713ca3d125fa38d3fbecb8ea0b468a79c371ce01c3006b5e7c91456f78cef72
6
+ metadata.gz: c11dfc51cd54450e5e9e1c5304021e06130997e98fa9c8a07539e499dac07b1b4cce05e0d0e519d01fa4d41e005d2743eb4c782f55d26074333982453a2bb5fa
7
+ data.tar.gz: c09deb701584d816271ad581d276ee58ab472af3329ab0f2badad4c00f7c38f3684013d042b7146d9df992c753b2b49a3b2bcfd22457d6a0817ea89ef1546004
data/Gemfile CHANGED
@@ -1,9 +1,9 @@
1
- source "http://rubygems.org"
1
+ source 'http://rubygems.org'
2
2
 
3
- gem "thread", "~> 0", :require => "thread/pool"
3
+ gem 'thread', :require => 'thread/pool'
4
4
 
5
5
  group :development do
6
- gem "rdoc", "~> 3.12"
7
- gem "bundler", "~> 1.0"
8
- gem "jeweler", "~> 2.0"
6
+ gem 'rdoc', '~> 3.12'
7
+ gem 'bundler', '~> 1.0'
8
+ gem 'jeweler', '~> 2.0'
9
9
  end
data/README.rdoc CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Simple tool to run parallel tarsnap clients to do faster extractions of archives
4
4
  with lots of files. Note, extraction will be slower on small archives since this
5
- tool first has to build a list of files to extract. It then runs 25 clients in
5
+ tool first has to build a list of files to extract. It then runs 10 clients in
6
6
  parallel delivering approximately a 5x speedup in extracting large archives.
7
7
 
8
8
  Usage: redsnapper archive [-d DIR] [-- [TARSNAP OPTIONS]]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.2.0
data/lib/redsnapper.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'thread/pool'
2
2
  require 'open3'
3
+ require 'set'
3
4
 
4
5
  class RedSnapper
5
6
  TARSNAP = 'tarsnap'
@@ -15,11 +16,31 @@ class RedSnapper
15
16
  command = [ TARSNAP, '-tf', @archive, *@options[:tarsnap_options] ]
16
17
  command.push(@options[:directory]) if @options[:directory]
17
18
 
18
- files = Open3.popen3(*command) do |_, out, _|
19
- out.gets(nil).split.reject { |f| f.end_with?('/') }
19
+ files = []
20
+ dirs = Set.new
21
+
22
+ Open3.popen3(*command) do |_, out, _|
23
+ out.gets(nil).split("\n").each do |entry|
24
+ if entry.end_with?('/')
25
+ dirs.add(entry)
26
+ else
27
+ files.push(entry)
28
+ end
29
+ end
30
+ end
31
+
32
+ files.each { |f| dirs.delete(File.dirname(f) + '/') }
33
+ empty_dirs = dirs.clone
34
+
35
+ dirs.each do |dir|
36
+ components = dir.split('/')
37
+ components.each_with_index do |component, i|
38
+ empty_dirs.delete(components[0, i].join('/') + '/')
39
+ end
20
40
  end
21
41
 
22
- files.each_slice([ (files.size.to_f / THREAD_POOL_SIZE).ceil, MAX_FILES_PER_JOB].min).to_a
42
+ files.push(*empty_dirs)
43
+ files.each_slice([ (files.size.to_f / THREAD_POOL_SIZE).ceil, MAX_FILES_PER_JOB ].min).to_a
23
44
  end
24
45
 
25
46
  def run
data/redsnapper.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: redsnapper 0.1.3 ruby lib
5
+ # stub: redsnapper 0.2.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "redsnapper"
9
- s.version = "0.1.3"
9
+ s.version = "0.2.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Scott Wheeler"]
14
- s.date = "2014-04-02"
14
+ s.date = "2016-12-16"
15
15
  s.description = "Faster extraction of large tarsnap archives using a pool of parallel tarsnap clients"
16
16
  s.email = "scott@directededge.com"
17
17
  s.executables = ["redsnapper"]
@@ -32,25 +32,25 @@ Gem::Specification.new do |s|
32
32
  ]
33
33
  s.homepage = "http://github.com/directededge/redsnapper"
34
34
  s.licenses = ["MIT"]
35
- s.rubygems_version = "2.2.2"
35
+ s.rubygems_version = "2.5.1"
36
36
  s.summary = "Faster extraction of large tarsnap archives"
37
37
 
38
38
  if s.respond_to? :specification_version then
39
39
  s.specification_version = 4
40
40
 
41
41
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
42
- s.add_runtime_dependency(%q<thread>, ["~> 0"])
42
+ s.add_runtime_dependency(%q<thread>, [">= 0"])
43
43
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
44
44
  s.add_development_dependency(%q<bundler>, ["~> 1.0"])
45
45
  s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
46
46
  else
47
- s.add_dependency(%q<thread>, ["~> 0"])
47
+ s.add_dependency(%q<thread>, [">= 0"])
48
48
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
49
49
  s.add_dependency(%q<bundler>, ["~> 1.0"])
50
50
  s.add_dependency(%q<jeweler>, ["~> 2.0"])
51
51
  end
52
52
  else
53
- s.add_dependency(%q<thread>, ["~> 0"])
53
+ s.add_dependency(%q<thread>, [">= 0"])
54
54
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
55
55
  s.add_dependency(%q<bundler>, ["~> 1.0"])
56
56
  s.add_dependency(%q<jeweler>, ["~> 2.0"])
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redsnapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Wheeler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-02 00:00:00.000000000 Z
11
+ date: 2016-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thread
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
@@ -105,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
105
  version: '0'
106
106
  requirements: []
107
107
  rubyforge_project:
108
- rubygems_version: 2.2.2
108
+ rubygems_version: 2.5.1
109
109
  signing_key:
110
110
  specification_version: 4
111
111
  summary: Faster extraction of large tarsnap archives