redsnapper 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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