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 +4 -4
- data/Gemfile +5 -5
- data/README.rdoc +1 -1
- data/VERSION +1 -1
- data/lib/redsnapper.rb +24 -3
- data/redsnapper.gemspec +7 -7
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 062acc09584fa69d3d578a9e3c31f8e43c894e6f
|
4
|
+
data.tar.gz: 802d7dcd2beeef69c6d36e12f81d69717f22137a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c11dfc51cd54450e5e9e1c5304021e06130997e98fa9c8a07539e499dac07b1b4cce05e0d0e519d01fa4d41e005d2743eb4c782f55d26074333982453a2bb5fa
|
7
|
+
data.tar.gz: c09deb701584d816271ad581d276ee58ab472af3329ab0f2badad4c00f7c38f3684013d042b7146d9df992c753b2b49a3b2bcfd22457d6a0817ea89ef1546004
|
data/Gemfile
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
source
|
1
|
+
source 'http://rubygems.org'
|
2
2
|
|
3
|
-
gem
|
3
|
+
gem 'thread', :require => 'thread/pool'
|
4
4
|
|
5
5
|
group :development do
|
6
|
-
gem
|
7
|
-
gem
|
8
|
-
gem
|
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
|
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
|
+
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 =
|
19
|
-
|
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.
|
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.
|
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.
|
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 = "
|
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.
|
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>, ["
|
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>, ["
|
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>, ["
|
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.
|
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:
|
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.
|
108
|
+
rubygems_version: 2.5.1
|
109
109
|
signing_key:
|
110
110
|
specification_version: 4
|
111
111
|
summary: Faster extraction of large tarsnap archives
|