reaver 0.4.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +14 -0
- data/README.md +4 -2
- data/lib/reaver/collection.rb +19 -18
- data/lib/reaver/download.rb +17 -16
- data/lib/reaver/metadata.rb +41 -0
- data/lib/reaver/version.rb +1 -1
- data/lib/reaver.rb +24 -17
- data/reaver.gemspec +3 -2
- data.tar.gz.sig +0 -0
- metadata +7 -5
- 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: 0df9b0a453544115410d64b72a65ac9589e5ad3639d58d733409c21d33c0513d
|
4
|
+
data.tar.gz: c08d7470fcbd1bfdb84d381e30360076f0ec9bdcb842aa4ebb4c0a39e16618a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ebf121f3da646562cd05108de7dfa32151ba3e31d3e7126d9b78000294c30855231fb1941f728496cfd8fb74a7b0875c87e89c62da8a42d2c0d3142b35754731
|
7
|
+
data.tar.gz: fa25fbb70ae82e631deaa4dd925900fb31d8b03c310ddfbc2b825ac6931c36d590ec3f520cc13220610e1a34b3420050cb82671cffad61b9b9fa7831ff842deb
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
## 0.7.0, release 12/24/22
|
2
|
+
|
3
|
+
* Each collections download things in separate directory.
|
4
|
+
* Add a `changed` boolean if a file change.
|
5
|
+
* Stop modifying collection content, add them in a file called `metadata.yml`.
|
6
|
+
* Improve runtime.
|
7
|
+
|
8
|
+
## 0.4.0, release 12/22/22
|
9
|
+
|
10
|
+
* Renaming project.
|
11
|
+
* Add a banner.
|
12
|
+
* Separate main.
|
13
|
+
* Add collection yml.
|
14
|
+
* Download stack.
|
1
15
|
|
2
16
|
## 0.0.1, release 12/21/22
|
3
17
|
* Initial push, code freeying !
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# reaver
|
2
2
|
|
3
|
-
A
|
4
|
-
|
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.
|
5
5
|
|
6
6
|
## Collections
|
7
7
|
|
@@ -38,3 +38,5 @@ The `name` must contain the path extension for now.
|
|
38
38
|
And start reaver simply with:
|
39
39
|
|
40
40
|
$ reaver
|
41
|
+
|
42
|
+
Reaver download all files in `~/.cache/reaver` by default.
|
data/lib/reaver/collection.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'yaml'
|
4
4
|
require 'time'
|
5
|
+
require 'digest'
|
5
6
|
|
6
7
|
module Reaver
|
7
8
|
class Collection
|
@@ -9,41 +10,41 @@ module Reaver
|
|
9
10
|
|
10
11
|
def initialize(file)
|
11
12
|
@file = file
|
13
|
+
@changed = false
|
12
14
|
end
|
13
15
|
|
14
16
|
def load_yaml
|
15
|
-
puts "
|
17
|
+
puts ">> Loading #{@file}..."
|
16
18
|
@tasks = YAML.load_file(@file, permitted_classes: [Time, Symbol])
|
17
19
|
# puts @tasks.inspect
|
18
20
|
rescue => error
|
19
21
|
raise error, "loading YAML fail for #{@file}: #{error.message}"
|
20
22
|
end
|
21
23
|
|
22
|
-
def launch
|
24
|
+
def launch(metadata)
|
23
25
|
return unless @tasks
|
24
26
|
|
25
27
|
if @tasks['things'].length >= 1
|
26
|
-
@tasks['things'].each
|
28
|
+
@tasks['things'].each do |t|
|
29
|
+
if File.exist? t['name']
|
30
|
+
old_hash = Digest::MD5.file t['name']
|
31
|
+
else
|
32
|
+
@changed = true
|
33
|
+
end
|
34
|
+
|
35
|
+
Reaver.download(t['url'], t['name'])
|
36
|
+
compare_hash(t['name'], old_hash) if old_hash
|
37
|
+
|
38
|
+
metadata.info['changed'] = @changed
|
39
|
+
end
|
27
40
|
end
|
28
|
-
|
29
|
-
update_time
|
30
|
-
end
|
31
|
-
|
32
|
-
def save_yaml
|
33
|
-
return if @tasks == nil
|
34
|
-
|
35
|
-
File.open(@file, 'w') { |f| YAML.dump(@tasks, f) }
|
36
41
|
end
|
37
42
|
|
38
43
|
private
|
39
44
|
|
40
|
-
def
|
41
|
-
|
42
|
-
|
43
|
-
now = Time.new
|
44
|
-
n = @tasks['time'] if @tasks['time'].is_a?(Integer)
|
45
|
-
@tasks['next'] = now + n ||= 0
|
46
|
-
@tasks['last_download'] = now
|
45
|
+
def compare_hash(filename, old_hash)
|
46
|
+
hash = Digest::MD5.file filename
|
47
|
+
@changed = true if old_hash.hexdigest != hash.hexdigest
|
47
48
|
end
|
48
49
|
end
|
49
50
|
end
|
data/lib/reaver/download.rb
CHANGED
@@ -2,13 +2,14 @@
|
|
2
2
|
|
3
3
|
require 'open-uri'
|
4
4
|
require 'net/http'
|
5
|
-
require 'whirly'
|
6
5
|
require 'tempfile'
|
7
6
|
require 'fileutils'
|
8
7
|
|
9
8
|
module Reaver
|
10
|
-
|
11
|
-
|
9
|
+
extend self
|
10
|
+
|
11
|
+
def download(url, name)
|
12
|
+
dest = name
|
12
13
|
url = URI(url)
|
13
14
|
raise Error, "url was invalid" if !url.respond_to?(:open)
|
14
15
|
|
@@ -19,21 +20,21 @@ module Reaver
|
|
19
20
|
Whirly.start do
|
20
21
|
Whirly.status = "downloading #{dest}"
|
21
22
|
downloaded_file = URI.open(url, options)
|
22
|
-
end
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
24
|
+
# open-uri will return a StringIO instead of a Tempfile if the filesize
|
25
|
+
# is less than 10 KB, so we patch this behaviour by converting it into
|
26
|
+
# a Tempfile.
|
27
|
+
if downloaded_file.is_a?(StringIO)
|
28
|
+
tempfile = Tempfile.new('open-uri', binmode: true)
|
29
|
+
IO.copy_stream(downloaded_file, tempfile.path)
|
30
|
+
downloaded_file = tempfile
|
31
|
+
FileUtils.mv downloaded_file.path, dest
|
32
|
+
else
|
33
|
+
IO.copy_stream(downloaded_file, dest)
|
34
|
+
end
|
35
35
|
|
36
|
-
|
36
|
+
downloaded_file
|
37
|
+
end
|
37
38
|
end
|
38
39
|
end
|
39
40
|
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Reaver
|
4
|
+
class MetaData
|
5
|
+
attr_accessor :info
|
6
|
+
|
7
|
+
def initialize(dirname, collection)
|
8
|
+
@dirname = dirname
|
9
|
+
@collection = collection
|
10
|
+
@file = "#{@dirname}/metadata.yml"
|
11
|
+
@info = { 'changed' => false, 'next' => Time.new }
|
12
|
+
end
|
13
|
+
|
14
|
+
def load_yaml
|
15
|
+
if File.exist? @file
|
16
|
+
#puts "loading metadata #{@file}..."
|
17
|
+
@info = YAML.load_file(@file, permitted_classes: [Time, Symbol])
|
18
|
+
# puts @info.inspect
|
19
|
+
else
|
20
|
+
File.open(@file, 'w') { |f| YAML.dump(@info, f) }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def save_yaml
|
25
|
+
update_time
|
26
|
+
|
27
|
+
File.open(@file, 'w') { |f| YAML.dump(@info, f) }
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def update_time
|
33
|
+
return unless @collection.tasks['things'].length >= 1
|
34
|
+
|
35
|
+
now = Time.new
|
36
|
+
n = @collection.tasks['time'] if @collection.tasks['time'].is_a?(Integer)
|
37
|
+
@info['next'] = now + n ||= now
|
38
|
+
@info['last_download'] = now
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/reaver/version.rb
CHANGED
data/lib/reaver.rb
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
require_relative 'reaver/version'
|
4
4
|
require_relative 'reaver/banner'
|
5
5
|
require_relative 'reaver/download'
|
6
|
+
require_relative 'reaver/metadata'
|
6
7
|
require_relative 'reaver/collection'
|
7
8
|
|
8
9
|
require 'whirly'
|
@@ -25,29 +26,35 @@ module Reaver
|
|
25
26
|
ambiguous_characters_width: 1
|
26
27
|
|
27
28
|
def self.main
|
28
|
-
FileUtils.mkdir_p(CACHE_DIR)
|
29
29
|
FileUtils.mkdir_p(WORKDIR)
|
30
30
|
|
31
|
-
puts ">> Search collections in #{WORKDIR}"
|
31
|
+
#puts ">> Search collections in #{WORKDIR}"
|
32
32
|
|
33
33
|
Dir.glob("#{WORKDIR}/*.yml").each do |f|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
34
|
+
name = f.split('/').last
|
35
|
+
name = name.split('.').first
|
36
|
+
workdir = "#{CACHE_DIR}/#{name}"
|
37
|
+
|
38
|
+
FileUtils.mkdir_p(workdir)
|
39
|
+
|
40
|
+
collection = Collection.new(f)
|
41
|
+
collection.load_yaml
|
42
|
+
|
43
|
+
if collection.tasks
|
44
|
+
metadata = MetaData.new(workdir, collection)
|
45
|
+
metadata.load_yaml
|
46
|
+
next_download = metadata.info['next']
|
47
|
+
|
48
|
+
if next_download < Time.new
|
49
|
+
#puts ' >> Download time for ' + name
|
50
|
+
FileUtils.chdir(workdir)
|
51
|
+
#puts " > chdir #{workdir}"
|
52
|
+
collection.launch(metadata)
|
53
|
+
else
|
54
|
+
puts " > Next download > #{next_download}"
|
48
55
|
end
|
49
56
|
|
50
|
-
|
57
|
+
metadata.save_yaml
|
51
58
|
end
|
52
59
|
end
|
53
60
|
end
|
data/reaver.gemspec
CHANGED
@@ -5,12 +5,13 @@ require_relative 'lib/reaver/version'
|
|
5
5
|
# https://guides.rubygems.org/specification-reference/
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = 'reaver'
|
8
|
-
s.summary = 'A tool to downloads and
|
8
|
+
s.summary = 'A tool to downloads and track updates of things on the Net.'
|
9
9
|
s.version = Reaver::VERSION
|
10
10
|
s.platform = Gem::Platform::RUBY
|
11
11
|
|
12
12
|
s.description = <<-DESCRIPTION
|
13
|
-
A tool to download and
|
13
|
+
A tool that allows to download and track the latest version of stuff on the net.
|
14
|
+
Define your collections in .yml and launch Reaver to retrieve everything.
|
14
15
|
DESCRIPTION
|
15
16
|
|
16
17
|
s.email = 'szorfein@protonmail.com'
|
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.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- szorfein
|
@@ -36,7 +36,7 @@ cert_chain:
|
|
36
36
|
aEJeKq4/BlIwMlXPe+W5C8zp2i8hgG1/OYbwbGE1p2iRi1NIK7G/HyRqQjOqJxzE
|
37
37
|
LLknX69FN7/G
|
38
38
|
-----END CERTIFICATE-----
|
39
|
-
date: 2022-12-
|
39
|
+
date: 2022-12-24 00:00:00.000000000 Z
|
40
40
|
dependencies:
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: whirly
|
@@ -66,8 +66,9 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '2.3'
|
69
|
-
description:
|
70
|
-
|
69
|
+
description: |2
|
70
|
+
A tool that allows to download and track the latest version of stuff on the net.
|
71
|
+
Define your collections in .yml and launch Reaver to retrieve everything.
|
71
72
|
email: szorfein@protonmail.com
|
72
73
|
executables:
|
73
74
|
- reaver
|
@@ -83,6 +84,7 @@ files:
|
|
83
84
|
- lib/reaver/banner.rb
|
84
85
|
- lib/reaver/collection.rb
|
85
86
|
- lib/reaver/download.rb
|
87
|
+
- lib/reaver/metadata.rb
|
86
88
|
- lib/reaver/version.rb
|
87
89
|
- reaver.gemspec
|
88
90
|
homepage: https://github.com/szorfein/reaver
|
@@ -112,5 +114,5 @@ requirements: []
|
|
112
114
|
rubygems_version: 3.3.23
|
113
115
|
signing_key:
|
114
116
|
specification_version: 4
|
115
|
-
summary: A tool to downloads and
|
117
|
+
summary: A tool to downloads and track updates of things on the Net.
|
116
118
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|