reaver 0.7.1 → 0.10.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
  SHA256:
3
- metadata.gz: 32fb1834d726c5f6883514c899661f2a3ad42ed4dd53c5ab64fc0a97bcafe96e
4
- data.tar.gz: fd73c58c53c159e86cc523960b795b30e3ca91a4333ef5340207bc438d71f6e9
3
+ metadata.gz: 3dfb30ee44d119ba98c2d8f0aa24a12db7d333447aac2acd371a3a0a668c6685
4
+ data.tar.gz: 7ce4e56102a407c06ed8895dc1a9191c1070bcf3705fe4f61c8d6af9dc9a89b2
5
5
  SHA512:
6
- metadata.gz: 54ce812f876370d2579221723c9d005abfd6abb1568ff8617f2272016287a4cc98990e2a55202a8ab4a791d4d1148c7c5b0715e3d8fd3b4e74064687dde84c15
7
- data.tar.gz: 1e247b45ec3a47c90fa161c8e2677ae90dc8bea56b81e615db2a2c3f9c2ca68af82dc706825d412941b5aaabb398d5d06393bfd51c87c7780cadc638ecb2720f
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
- `time: 86000` (in second) is for search every day ( 60 * 60 * 24 ).
36
- The `name` must contain the path extension for now.
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
@@ -7,4 +7,4 @@ puts Reaver.banner
7
7
 
8
8
  Reaver.main
9
9
 
10
- puts "\nReaver v" + Reaver::VERSION
10
+ puts "\nReaver v#{Reaver::VERSION}"
@@ -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
- @tasks = YAML.load_file(@file, permitted_classes: [Time, Symbol])
20
- else
21
- @tasks = YAML.load_file(@file)
22
- end
23
- rescue => error
24
- raise error, "loading YAML fail for #{@file}: #{error.message}"
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
- if @tasks['things'].length >= 1
31
- @tasks['things'].each do |t|
32
- if File.exist? t['name']
33
- old_hash = Digest::MD5.file t['name']
34
- else
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
- Reaver.download(t['url'], t['name'])
39
- compare_hash(t['name'], old_hash) if old_hash
42
+ protected
40
43
 
41
- metadata.info['changed'] = @changed
42
- end
43
- end
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 compare_hash(filename, old_hash)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Reaver
4
- VERSION = '0.7.1'
4
+ VERSION = '0.10.0'
5
5
  end
@@ -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
- color: true,
26
- ambiguous_characters_width: 1
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
- if collection.tasks
44
- metadata = MetaData.new(workdir, collection)
45
- metadata.load_yaml
46
- next_download = metadata.info['next']
44
+ #puts collection.tasks
47
45
 
48
- if next_download < Time.new
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
- FileUtils.chdir(workdir)
51
- #puts " > chdir #{workdir}"
52
- collection.launch(metadata)
53
- else
54
- puts " > Next download > #{next_download}"
55
- end
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 'whirly', '~> 0.3'
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.7.1
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
- FgNjb20wHhcNMjIwOTA4MDYyNjE5WhcNMjMwOTA4MDYyNjE5WjBEMREwDwYDVQQD
15
+ FgNjb20wHhcNMjMxMDIzMTcyMTA4WhcNMjQxMDIyMTcyMTA4WjBEMREwDwYDVQQD
16
16
  DAhzem9yZmVpbjEaMBgGCgmSJomT8ixkARkWCnByb3Rvbm1haWwxEzARBgoJkiaJ
17
- k/IsZAEZFgNjb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDEJNhl
18
- Gd0JNHLXysR7GvbCKD+y1prQbmS333GpoFgPR2chEGv8Y7l0We2UFXCZ59CVOs1v
19
- KBVQhhNvxWAHWhfe/8stb1JFBxZpnCi7S0BGpqeblaGBXVlhBOzbZ6d1NrOwMfDS
20
- 6EzdX4WAOH55HnAz29T5KREUdbONVLU7HJNIIFVZvf6ethOv84pnkWbdWjV0RB3A
21
- ERYste5QHGx1YQOYGTuJMlu8113kqTbB8wpEw6X00aJwmXcJvnKXkhN5mxd06yss
22
- EE96lOk16raTWCh7DeYR3/ilVet3DpLlCvpFNtMIuko1HFa3HTW+57003VxD8Ozk
23
- VGQKn823D+ReujKh+jgxbl8Q+r652C9Wl1N+C5CSma4mDtNGKr0XmEOEQycpSx0z
24
- Z9J6/27wS8s6SJ0rLxueFQ6gb2oPEQb8jKJuNEuXWLmO3Idrwlv9Z7ymhnksjyqM
25
- fAw+NMGEOCITNphXmssazlLX+bnxcbpr7rbTHa1xBmmHoUVudAnxAG43PrMCAwEA
26
- AaOBgTB/MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBRzxda94CPF
27
- Ll9UQ5l55l65RCZuEzAiBgNVHREEGzAZgRdzem9yZmVpbkBwcm90b25tYWlsLmNv
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
- AQsFAAOCAYEAPhavFyzIP60Zw7y40zJhzQpMK2IWtdw9HrRJq313Ea4UT1Kgv7F9
30
- lCFtQzI5XMzooYiLMoPz7xBMXaUz+DDFOOcgGSinVrFbfPA4rOGEkBjnlwC39lBc
31
- AiyXFzCV7Wqn4VhtqQQyvmoNYL4Q666K+nL8/nsXZWsXtRQ119LeAvrI2A+xmYAb
32
- FPE5bD3Jx1JCoJdVN1DmE4YYdM8mVmb0XjCK9Tp1M01EDKDvAX7f3B+X6A5D7uBq
33
- 63X6Kx09VkntVOrifd3W4TwjDlyAMpB+50OIi3ErPnH2R4i09qnCiZmcVWATBVKw
34
- e2QSloIAUZJwEFkrRqWPNVi8sr+BcMeuKpXaOwpbkP+xq/W2EKlUQKhPXMXS4jvC
35
- MuTi+RjpSNKZxzBrOlK2eMIpiFrugF7nzKcM9EGnWRWUb899drCcD4VJhjPtgpn+
36
- aEJeKq4/BlIwMlXPe+W5C8zp2i8hgG1/OYbwbGE1p2iRi1NIK7G/HyRqQjOqJxzE
37
- LLknX69FN7/G
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: 2022-12-28 00:00:00.000000000 Z
39
+ date: 2024-10-06 00:00:00.000000000 Z
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
42
- name: whirly
42
+ name: marcel
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '0.3'
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.3'
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.23
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