reaver 0.7.1 → 0.10.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
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +7 -0
- data/README.md +22 -3
- data/bin/reaver +1 -1
- data/lib/reaver/collection.rb +43 -22
- data/lib/reaver/version.rb +1 -1
- data/lib/reaver/walk.rb +64 -0
- data/lib/reaver.rb +21 -15
- data/reaver.gemspec +5 -4
- data.tar.gz.sig +0 -0
- metadata +44 -29
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3dfb30ee44d119ba98c2d8f0aa24a12db7d333447aac2acd371a3a0a668c6685
|
4
|
+
data.tar.gz: 7ce4e56102a407c06ed8895dc1a9191c1070bcf3705fe4f61c8d6af9dc9a89b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d51222bcd09ef5f123f14d17219fee0b2e59053b3743bea8efecf303004c8c7523176fd0afec27d5b396f68ac7246cc35bd3daf911941e09de23d61fb0e90c1
|
7
|
+
data.tar.gz: 98d6e1025629ac00371ae10c909363439662e80adb4d5d7ed233c34d2b1beb8921ea32868fc2b89cd7b271c21743a0b1e3d186d1c3fb5cdf3face02cc06887fe
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
## 0.10.0, release 10/2024
|
2
|
+
- New variable for collections, all_into_dir, things.dest_dir, keep_name and
|
3
|
+
force_download.
|
4
|
+
-** Use [Marcel](https://github.com/rails/marcel) to detect file mime.
|
5
|
+
- Can decompress archive `zip` or `tar.gz (gzip)` using unzip and tar from `unix`.
|
6
|
+
- Cam move files to specific directory.
|
7
|
+
|
1
8
|
## 0.7.0, release 12/24/22
|
2
9
|
|
3
10
|
* Each collections download things in separate directory.
|
data/README.md
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
# reaver
|
2
2
|
|
3
3
|
A tool that allows to download and track the latest version of stuff on the net.
|
4
|
-
Define your collections in .yml and launch Reaver to retrieve everything
|
4
|
+
Define your collections in .yml and launch Reaver to retrieve everything and
|
5
|
+
move things to the right spot.
|
6
|
+
|
7
|
+
## Dependencies
|
8
|
+
|
9
|
+
Reaver need only `unzip` and `tar`.
|
5
10
|
|
6
11
|
## Collections
|
7
12
|
|
@@ -30,10 +35,24 @@ things:
|
|
30
35
|
- name: nerdtree.tar.gz
|
31
36
|
url: https://github.com/preservim/nerdtree/archive/refs/heads/master.tar.gz
|
32
37
|
time: 86000
|
38
|
+
all_into_dir: ~/.config/pack/myvimpluggins/start
|
39
|
+
keep_name: true
|
33
40
|
```
|
34
41
|
|
35
|
-
|
36
|
-
|
42
|
+
To see more examples, go
|
43
|
+
[here](https://github.com/szorfein/dots/tree/ansible/home/private_dot_config/reaver)
|
44
|
+
|
45
|
+
A collection can include:
|
46
|
+
- `all_into_dir: <dirname>` if all files go in a directory. Directory is created
|
47
|
+
if not exist.
|
48
|
+
- `keep_name: <boolean>`, if `true`, use the name of the thing for the dest, e.g, for a name `ombre.tar.gz`, the final dest will be `all_into_dir/ombre` or `dest_dir/ombre`.
|
49
|
+
- `force_download: <boolean>`, if you make change and want to download now, change to `true`.
|
50
|
+
- `things.dest_dir: <dirname>`, if each files go in differents directory, use this.
|
51
|
+
- `things.name` the new name after download, may include the file extension.
|
52
|
+
- `things.url: <string>`
|
53
|
+
- `time: 86000` (in second) is for search every day ( 60 * 60 * 24 ).
|
54
|
+
|
55
|
+
If `all_into_dir` is defined, `things.dest_dir` is not used.
|
37
56
|
|
38
57
|
And start reaver simply with:
|
39
58
|
|
data/bin/reaver
CHANGED
data/lib/reaver/collection.rb
CHANGED
@@ -5,6 +5,7 @@ require 'time'
|
|
5
5
|
require 'digest'
|
6
6
|
|
7
7
|
module Reaver
|
8
|
+
# Loading collection from ~/.config/reaver/<filename.yml> and threat them
|
8
9
|
class Collection
|
9
10
|
attr_reader :tasks
|
10
11
|
|
@@ -15,39 +16,59 @@ module Reaver
|
|
15
16
|
|
16
17
|
def load_yaml
|
17
18
|
puts ">> Loading #{@file}..."
|
18
|
-
if RUBY_VERSION >= '3.0'
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
rescue =>
|
24
|
-
raise
|
19
|
+
@tasks = if RUBY_VERSION >= '3.0'
|
20
|
+
YAML.load_file(@file, permitted_classes: [Time, Symbol])
|
21
|
+
else
|
22
|
+
@tasks = YAML.load_file(@file)
|
23
|
+
end
|
24
|
+
rescue => e
|
25
|
+
raise e, "loading YAML fail for #{@file}: #{e.message}"
|
26
|
+
end
|
27
|
+
|
28
|
+
def save_yaml
|
29
|
+
in_yaml = YAML.dump(@tasks)
|
30
|
+
File.write(@file, in_yaml)
|
25
31
|
end
|
26
32
|
|
27
33
|
def launch(metadata)
|
28
|
-
return unless @tasks
|
34
|
+
return unless @tasks || @tasks['things'].length.zero?
|
29
35
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
@changed = true
|
36
|
-
end
|
36
|
+
@tasks['things'].each do |task|
|
37
|
+
do_thing(task)
|
38
|
+
metadata.info['changed'] = @changed
|
39
|
+
end
|
40
|
+
end
|
37
41
|
|
38
|
-
|
39
|
-
compare_hash(t['name'], old_hash) if old_hash
|
42
|
+
protected
|
40
43
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
+
def do_thing(task)
|
45
|
+
hash_exist(task['name'])
|
46
|
+
Reaver.download(task['url'], task['name'])
|
47
|
+
compare_to_old_hash(task['name']) if @old_hash
|
48
|
+
need_to_do_something_with(task) if @changed || !@old_hash
|
49
|
+
@tasks['force_download'] = false
|
50
|
+
@changed = false
|
44
51
|
end
|
45
52
|
|
46
53
|
private
|
47
54
|
|
48
|
-
def
|
55
|
+
def hash_exist(file)
|
56
|
+
if File.exist? file
|
57
|
+
@old_hash = Digest::MD5.file file
|
58
|
+
else
|
59
|
+
@changed = true
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def compare_to_old_hash(filename)
|
49
64
|
hash = Digest::MD5.file filename
|
50
|
-
@changed = true if old_hash.hexdigest != hash.hexdigest
|
65
|
+
@changed = true if @old_hash.hexdigest != hash.hexdigest
|
66
|
+
end
|
67
|
+
|
68
|
+
def need_to_do_something_with(file)
|
69
|
+
dest = @tasks['all_to_dest_dir'] || file['dest_dir']
|
70
|
+
keep_name = @tasks['keep_name'] || false
|
71
|
+
Reaver::Walk.new(file['name'], dest, keep_name) if dest
|
51
72
|
end
|
52
73
|
end
|
53
74
|
end
|
data/lib/reaver/version.rb
CHANGED
data/lib/reaver/walk.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'marcel'
|
4
|
+
require 'fileutils'
|
5
|
+
|
6
|
+
module Reaver
|
7
|
+
# extract, move file if need
|
8
|
+
class Walk
|
9
|
+
def initialize(filename, dest, keep_name)
|
10
|
+
@filename = filename
|
11
|
+
@dest = dest
|
12
|
+
@keep_name = keep_name || false
|
13
|
+
check_extension
|
14
|
+
check_name
|
15
|
+
x
|
16
|
+
end
|
17
|
+
|
18
|
+
def x
|
19
|
+
case @extension
|
20
|
+
when %r{^image/jpeg} || %r{^image/png}
|
21
|
+
copy_file
|
22
|
+
when %r{^application/zip}
|
23
|
+
extract_zip
|
24
|
+
when %r{^application/gzip}
|
25
|
+
extract_gzip
|
26
|
+
when %r{^font/ttf}
|
27
|
+
copy_file
|
28
|
+
else
|
29
|
+
puts "Filetype #{@extension} not yet supported, skipping..."
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def check_extension
|
36
|
+
File.open @filename do |f|
|
37
|
+
@extension = Marcel::MimeType.for f
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def check_name
|
42
|
+
name = @filename.split('.').first
|
43
|
+
@final_dest = @keep_name ? "#{@dest}/#{name}" : @dest
|
44
|
+
end
|
45
|
+
|
46
|
+
def copy_file
|
47
|
+
puts "Copying file #{@filename} at #{@final_dest}..."
|
48
|
+
FileUtils.mkdir_p @final_dest
|
49
|
+
FileUtils.cp @filename, "#{@final_dest}/#{@filename}"
|
50
|
+
end
|
51
|
+
|
52
|
+
def extract_zip
|
53
|
+
puts "Extracting zip archive #{@filename} at #{@final_dest}..."
|
54
|
+
FileUtils.mkdir_p @final_dest
|
55
|
+
`unzip -j #{@filename} -d #{@final_dest}`
|
56
|
+
end
|
57
|
+
|
58
|
+
def extract_gzip
|
59
|
+
puts "Extracting gzip archive #{@filename} at #{@final_dest}..."
|
60
|
+
FileUtils.mkdir_p @final_dest
|
61
|
+
`tar -x --strip-components=1 -f #{@filename} --one-top-level=#{@final_dest}`
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/lib/reaver.rb
CHANGED
@@ -5,6 +5,7 @@ require_relative 'reaver/banner'
|
|
5
5
|
require_relative 'reaver/download'
|
6
6
|
require_relative 'reaver/metadata'
|
7
7
|
require_relative 'reaver/collection'
|
8
|
+
require_relative 'reaver/walk'
|
8
9
|
|
9
10
|
require 'whirly'
|
10
11
|
require 'fileutils'
|
@@ -22,8 +23,8 @@ module Reaver
|
|
22
23
|
|
23
24
|
# Configure Whirly
|
24
25
|
Whirly.configure spinner: 'bouncingBar',
|
25
|
-
|
26
|
-
|
26
|
+
color: true,
|
27
|
+
ambiguous_characters_width: 1
|
27
28
|
|
28
29
|
def self.main
|
29
30
|
FileUtils.mkdir_p(WORKDIR)
|
@@ -40,22 +41,27 @@ module Reaver
|
|
40
41
|
collection = Collection.new(f)
|
41
42
|
collection.load_yaml
|
42
43
|
|
43
|
-
|
44
|
-
metadata = MetaData.new(workdir, collection)
|
45
|
-
metadata.load_yaml
|
46
|
-
next_download = metadata.info['next']
|
44
|
+
#puts collection.tasks
|
47
45
|
|
48
|
-
|
46
|
+
next unless collection.tasks
|
47
|
+
|
48
|
+
metadata = MetaData.new(workdir, collection)
|
49
|
+
metadata.load_yaml
|
50
|
+
next_download = metadata.info['next']
|
51
|
+
force_download = collection.tasks['force_download'] || false
|
52
|
+
#puts "should we force #{force_download}"
|
53
|
+
|
54
|
+
if next_download < Time.new || force_download
|
49
55
|
#puts ' >> Download time for ' + name
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
metadata.save_yaml
|
56
|
+
FileUtils.chdir(workdir)
|
57
|
+
#puts " > chdir #{workdir}"
|
58
|
+
collection.launch(metadata)
|
59
|
+
collection.save_yaml if force_download
|
60
|
+
else
|
61
|
+
puts " > Next download > #{next_download}"
|
58
62
|
end
|
63
|
+
|
64
|
+
metadata.save_yaml
|
59
65
|
end
|
60
66
|
end
|
61
67
|
end
|
data/reaver.gemspec
CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |s|
|
|
24
24
|
'changelog_uri' => 'https://github.com/szorfein/reaver/blob/main/CHANGELOG.md',
|
25
25
|
'source_code_uri' => 'https://github.com/szorfein/reaver',
|
26
26
|
'wiki_uri' => 'https://github.com/szorfein/reaver/wiki',
|
27
|
-
'funding_uri' => 'https://patreon.com/szorfein'
|
27
|
+
'funding_uri' => 'https://patreon.com/szorfein'
|
28
28
|
}
|
29
29
|
|
30
30
|
s.files = Dir.glob('{lib,bin}/**/*', File::FNM_DOTMATCH).reject do |f|
|
@@ -38,10 +38,11 @@ Gem::Specification.new do |s|
|
|
38
38
|
s.executables << 'reaver'
|
39
39
|
s.extra_rdoc_files = %w[README.md]
|
40
40
|
|
41
|
-
s.cert_chain = %w[certs/szorfein.pem]
|
42
|
-
s.signing_key = File.expand_path('~/.ssh/gem-private_key.pem')
|
41
|
+
# s.cert_chain = %w[certs/szorfein.pem]
|
42
|
+
# s.signing_key = File.expand_path('~/.ssh/gem-private_key.pem')
|
43
43
|
|
44
44
|
s.required_ruby_version = '>=2.6'
|
45
|
-
s.add_dependency '
|
45
|
+
s.add_dependency 'marcel'
|
46
46
|
s.add_dependency 'paint', '~> 2.3'
|
47
|
+
s.add_dependency 'whirly', '~> 0.3'
|
47
48
|
end
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reaver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- szorfein
|
@@ -12,46 +12,46 @@ cert_chain:
|
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
13
|
MIIEhTCCAu2gAwIBAgIBATANBgkqhkiG9w0BAQsFADBEMREwDwYDVQQDDAhzem9y
|
14
14
|
ZmVpbjEaMBgGCgmSJomT8ixkARkWCnByb3Rvbm1haWwxEzARBgoJkiaJk/IsZAEZ
|
15
|
-
|
15
|
+
FgNjb20wHhcNMjMxMDIzMTcyMTA4WhcNMjQxMDIyMTcyMTA4WjBEMREwDwYDVQQD
|
16
16
|
DAhzem9yZmVpbjEaMBgGCgmSJomT8ixkARkWCnByb3Rvbm1haWwxEzARBgoJkiaJ
|
17
|
-
k/
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
AaOBgTB/
|
27
|
-
|
17
|
+
k/IsZAEZFgNjb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCqe1yx
|
18
|
+
EG2oM25jeHp08A8zkaDNmbI3MujjrRM/WPEYZX2dVwOxkIS20hQVuxcAsBBA4W/W
|
19
|
+
kuPbqRkvLboaGaxLrllkSEJw9HA/GesTdXLyCFYmNzSFqGh5BafNSkxoiDhTavxp
|
20
|
+
xvYzAkYR/3CzSOWSxJk73wIg+F7w/nWJPTt2tgJE9hgR8uuFY+EzPOlFZhkFTdCV
|
21
|
+
88sBGuZPMjq7ASQVBE3UA+Y1xJeXE3/FhIhYvLnjevkkDLSLFmox0ZQf6nx6abuL
|
22
|
+
KTOGRA1bfLfkW5HMh5X5JwViliwG3RWhqAukJUgHTUk+oKtejlzSDqupwOenKZf0
|
23
|
+
xI2/BnS8zOsS6Te08iLxqZfI/lsG8wcPduekSetRI4VIOZ5QoRK54PiQjrOBhbnD
|
24
|
+
OQBB/XF1C80imZtRtdUqh6bK9WeWI4RYZ2/KwXL1AScEbXkBkkOECWoVrD18WgRm
|
25
|
+
siuX6RkNIelhtb0En7f3bizgPqlO0qPQV+wPi9TSBxdVG12C0OmjCQYMQD0CAwEA
|
26
|
+
AaOBgTB/MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBTlKnQ3qMUF
|
27
|
+
zydvZaKwdP+dnj2uajAiBgNVHREEGzAZgRdzem9yZmVpbkBwcm90b25tYWlsLmNv
|
28
28
|
bTAiBgNVHRIEGzAZgRdzem9yZmVpbkBwcm90b25tYWlsLmNvbTANBgkqhkiG9w0B
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
29
|
+
AQsFAAOCAYEAFjnBWWfaMeA8hP0Q76WmBCFckGN5I42X5RQkVYRRXIaeXIS1td/t
|
30
|
+
O1v1iQLo6ABfASMi6We7T16+ita68xwNOmSkMNHHXBr/fdGbHExxFSX7BXNRbwla
|
31
|
+
SS6Vy0bXKMDJbXcvkrmIolpYhEFm1218FCRCT6ogM1oWAJAfhfF9pMeRxrxjQYFn
|
32
|
+
ko8XgjIHxb83miOILgdq/lgJ4gfD7PsGfJtLCLiCKCcxIb4TtmKAzRwCDVpb6wqM
|
33
|
+
5xJZffAmHI7v8lVer53sPzm3INPu5xFZyfZ/SXYXPKKwln0efH63K5vuXYwEN7NI
|
34
|
+
SBSRTN03Hb65t86m6/r084SrNnLntQjCSqApzFBt1QwJ5cmiVilODN4V7y2hZpyK
|
35
|
+
hSk3b2VOotDPiWIm1p/IPXQDfm5x67Z5fJQPAlBTsse4jKyVyW1lZLmERSBuRZ2O
|
36
|
+
urXgRIzALxd/xazPCnoLSXPzfJSI6Y77S1EBvhPd9RaSO8IyH9RhPDP9mnTvW2Kl
|
37
|
+
NAUnoL+txK5a
|
38
38
|
-----END CERTIFICATE-----
|
39
|
-
date:
|
39
|
+
date: 2024-10-06 00:00:00.000000000 Z
|
40
40
|
dependencies:
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: marcel
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0
|
47
|
+
version: '0'
|
48
48
|
type: :runtime
|
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
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: paint
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '2.3'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: whirly
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.3'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.3'
|
69
83
|
description: |2
|
70
84
|
A tool that allows to download and track the latest version of stuff on the net.
|
71
85
|
Define your collections in .yml and launch Reaver to retrieve everything.
|
@@ -86,6 +100,7 @@ files:
|
|
86
100
|
- lib/reaver/download.rb
|
87
101
|
- lib/reaver/metadata.rb
|
88
102
|
- lib/reaver/version.rb
|
103
|
+
- lib/reaver/walk.rb
|
89
104
|
- reaver.gemspec
|
90
105
|
homepage: https://github.com/szorfein/reaver
|
91
106
|
licenses:
|
@@ -111,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
126
|
- !ruby/object:Gem::Version
|
112
127
|
version: '0'
|
113
128
|
requirements: []
|
114
|
-
rubygems_version: 3.3.
|
129
|
+
rubygems_version: 3.3.25
|
115
130
|
signing_key:
|
116
131
|
specification_version: 4
|
117
132
|
summary: A tool to downloads and track updates of things on the Net.
|
metadata.gz.sig
CHANGED
Binary file
|