wonko_the_sane 0.1.2 → 0.1.4

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.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/bin/wonko_the_sane +12 -28
  3. data/data/sources.json +0 -5
  4. data/lib/wonko_the_sane.rb +6 -26
  5. data/lib/wonko_the_sane/input/base_input.rb +5 -10
  6. data/lib/wonko_the_sane/input/forge_installer_profile_input.rb +29 -47
  7. data/lib/wonko_the_sane/input/forgefiles_mods_input.rb +4 -7
  8. data/lib/wonko_the_sane/input/jenkins_input.rb +11 -15
  9. data/lib/wonko_the_sane/input/mojang_input.rb +52 -61
  10. data/lib/wonko_the_sane/{reader_writer.rb → new_format.rb} +31 -35
  11. data/lib/wonko_the_sane/old_format.rb +123 -0
  12. data/lib/wonko_the_sane/registry.rb +38 -23
  13. data/lib/wonko_the_sane/rules.rb +6 -6
  14. data/lib/wonko_the_sane/timestamps.rb +4 -4
  15. data/lib/wonko_the_sane/tools/update_nem.rb +20 -18
  16. data/lib/wonko_the_sane/util/configuration.rb +54 -2
  17. data/lib/wonko_the_sane/util/deep_storage_cache.rb +10 -8
  18. data/lib/wonko_the_sane/util/extraction_cache.rb +5 -4
  19. data/lib/wonko_the_sane/util/file_hash_cache.rb +6 -6
  20. data/lib/wonko_the_sane/util/http_cache.rb +50 -105
  21. data/lib/wonko_the_sane/util/maven_identifier.rb +8 -14
  22. data/lib/wonko_the_sane/util/task_stack.rb +7 -6
  23. data/lib/wonko_the_sane/{version_parser.rb → util/version_parser.rb} +10 -14
  24. data/lib/wonko_the_sane/version.rb +1 -1
  25. data/lib/wonko_the_sane/versionlists/base_version_list.rb +22 -15
  26. data/lib/wonko_the_sane/versionlists/curse_version_list.rb +15 -16
  27. data/lib/wonko_the_sane/versionlists/forge_version_list.rb +34 -37
  28. data/lib/wonko_the_sane/versionlists/forgefiles_mods_list.rb +3 -7
  29. data/lib/wonko_the_sane/versionlists/jenkins_version_list.rb +6 -15
  30. data/lib/wonko_the_sane/versionlists/liteloader_version_list.rb +18 -28
  31. data/lib/wonko_the_sane/versionlists/vanilla_legacy_version_list.rb +6 -6
  32. data/lib/wonko_the_sane/versionlists/vanilla_version_list.rb +6 -8
  33. data/lib/wonko_the_sane/wonko_version.rb +32 -12
  34. metadata +71 -15
  35. data/lib/wonko_the_sane/wonkoweb_uploader.rb +0 -162
@@ -2,11 +2,11 @@ require_relative 'base_version_list'
2
2
 
3
3
  class VanillaLegacyVersionList < BaseVersionList
4
4
  def initialize
5
- super('net.minecraft')
5
+ super 'net.minecraft'
6
6
  end
7
7
 
8
8
  def get_versions
9
- WonkoTheSane.data_json('minecraft.json')[:versions].map do |obj| [obj[:id], obj] end
9
+ WonkoTheSane.data_json('minecraft.json')[:versions].map { |obj| [obj[:id], obj] }
10
10
  end
11
11
 
12
12
  def get_version(id)
@@ -20,10 +20,10 @@ class VanillaLegacyVersionList < BaseVersionList
20
20
  file.client.extra[:processArguments] = data[:processArguments]
21
21
  file.client.mainClass = data[:mainClass] if data.has_key? :mainClass
22
22
  file.client.appletClass = data[:appletClass] if data.has_key? :appletClass
23
- mainLib = VersionLibrary.new
24
- mainLib.name = 'net.minecraft:minecraft:' + file.version
25
- mainLib.url = 'http://s3.amazonaws.com/Minecraft.Download/versions/' + file.version + '/' + file.version + '.jar'
26
- file.client.downloads = [ mainLib ]
23
+ main_lib = VersionLibrary.new
24
+ main_lib.name = 'net.minecraft:minecraft:' + file.version
25
+ main_lib.url = 'http://s3.amazonaws.com/Minecraft.Download/versions/' + file.version + '/' + file.version + '.jar'
26
+ file.client.downloads = [ main_lib ]
27
27
 
28
28
  file.client.folders['minecraft/screenshots'] = ['general.screenshots']
29
29
  file.client.folders['minecraft/resourcepackks'] = ['mc.resourcepacks'] if file.time >= 1372430921
@@ -3,8 +3,8 @@ require 'date'
3
3
 
4
4
  class VanillaVersionList < BaseVersionList
5
5
  def initialize
6
- super('net.minecraft')
7
- @input = MojangInput.new('net.minecraft')
6
+ super 'net.minecraft'
7
+ @input = MojangInput.new 'net.minecraft'
8
8
  end
9
9
 
10
10
  def get_versions
@@ -12,7 +12,7 @@ class VanillaVersionList < BaseVersionList
12
12
  @latest_release = result[:latest][:release]
13
13
  @latest_snapshot = result[:latest][:snapshot]
14
14
 
15
- return result[:versions].map do |obj| obj[:id] end
15
+ result[:versions].map { |obj| obj[:id] }
16
16
  end
17
17
 
18
18
  def get_version(id)
@@ -23,13 +23,11 @@ class VanillaVersionList < BaseVersionList
23
23
  get_json_cached url
24
24
  end
25
25
  files = @input.parse json
26
- mcfile = files.find do |file|
27
- file.uid == 'net.minecraft'
28
- end
29
- if mcfile and mcfile.time > DateTime.iso8601('2013-06-25T15:08:56+02:00').to_time.to_i
26
+ mcfile = files.find { |file| file.uid == 'net.minecraft' }
27
+ if mcfile && mcfile.time > DateTime.iso8601('2013-06-25T15:08:56+02:00').to_time.to_i
30
28
  files
31
29
  else
32
30
  []
33
31
  end
34
32
  end
35
- end
33
+ end
@@ -1,10 +1,14 @@
1
1
  class Download
2
- attr_accessor :internalUrl # not serialized, used for DownloadsFixer when the url isn't direct (requires user interaction)
2
+ attr_accessor :internal_url # not serialized, used for DownloadsFixer when the url isn't direct (requires user interaction)
3
3
  attr_accessor :url
4
4
  attr_accessor :size
5
5
  attr_accessor :sha256
6
6
  attr_accessor :rules # [Rule]
7
7
 
8
+ def usable_url
9
+ internal_url.nil? ? url : internal_url
10
+ end
11
+
8
12
  def type
9
13
  'general.downloads'
10
14
  end
@@ -35,6 +39,8 @@ class Download
35
39
  dl = VersionLibraryNative.new
36
40
  when 'general.downloads'
37
41
  dl = FileDownload.new
42
+ when 'mc.jarmods'
43
+ dl = Jarmod.new
38
44
  end
39
45
 
40
46
  dl.from_json json
@@ -64,13 +70,27 @@ end
64
70
 
65
71
  class VersionLibrary < Download
66
72
  attr_accessor :name
67
- attr_accessor :mavenBaseUrl
73
+ attr_accessor :maven_base_url
74
+
75
+ def ==(other)
76
+ self.class == other.class && name == other.name && url == other.url && sha256 == other.sha256 && rules == other.rules
77
+ end
68
78
 
69
79
  def type
70
80
  'java.libraries'
71
81
  end
72
82
  def url
73
- @url ? @url : (@mavenBaseUrl + WonkoTheSane::Util::MavenIdentifier.new(@name).to_path)
83
+ if @url
84
+ @url
85
+ elsif @maven_base_url
86
+ @maven_base_url + WonkoTheSane::Util::MavenIdentifier.new(@name).to_path
87
+ else
88
+ nil
89
+ end
90
+ end
91
+
92
+ def explicit_url?
93
+ !@url.nil?
74
94
  end
75
95
 
76
96
  def maven
@@ -80,9 +100,9 @@ class VersionLibrary < Download
80
100
  def to_json
81
101
  obj = super
82
102
  obj[:name] = @name
83
- obj[:mavenBaseUrl] = @mavenBaseUrl if @mavenBaseUrl
103
+ obj[:@maven_base_url] = @maven_base_url if @maven_base_url
84
104
 
85
- if not @url
105
+ unless @url
86
106
  obj.delete :url
87
107
  end
88
108
 
@@ -92,10 +112,10 @@ class VersionLibrary < Download
92
112
  def from_json(json)
93
113
  super
94
114
  @name = json[:name]
95
- @mavenBaseUrl = json[:mavenBaseUrl]
115
+ @maven_base_url = json[:@maven_base_url]
96
116
 
97
117
  # if the absolute url is equal to the expected maven url we clear the absolute url
98
- if @mavenBaseUrl && @url == url
118
+ if @maven_base_url && @url == url
99
119
  @url = nil
100
120
  end
101
121
  end
@@ -109,7 +129,7 @@ end
109
129
 
110
130
  class Jarmod < VersionLibrary
111
131
  def type
112
- 'mc.jarmod'
132
+ 'mc.jarmods'
113
133
  end
114
134
  end
115
135
 
@@ -123,7 +143,7 @@ class Referenced
123
143
  end
124
144
 
125
145
  def ==(other)
126
- @uid == other.uid and @version == other.version
146
+ self.class == other.class && @uid == other.uid && @version == other.version
127
147
  end
128
148
  end
129
149
 
@@ -160,9 +180,9 @@ class WonkoVersion
160
180
  end
161
181
  end
162
182
 
163
- attr_reader :client
164
- attr_reader :server
165
- attr_reader :common
183
+ attr_accessor :client
184
+ attr_accessor :server
185
+ attr_accessor :common
166
186
 
167
187
  def initialize
168
188
  @requires = []
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wonko_the_sane
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - 02JanDal
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-05-25 00:00:00.000000000 Z
13
+ date: 2015-10-03 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -167,7 +167,7 @@ dependencies:
167
167
  - !ruby/object:Gem::Version
168
168
  version: '0'
169
169
  - !ruby/object:Gem::Dependency
170
- name: hashie
170
+ name: yajl-ruby
171
171
  requirement: !ruby/object:Gem::Requirement
172
172
  requirements:
173
173
  - - ">="
@@ -181,7 +181,7 @@ dependencies:
181
181
  - !ruby/object:Gem::Version
182
182
  version: '0'
183
183
  - !ruby/object:Gem::Dependency
184
- name: yajl-ruby
184
+ name: colorize
185
185
  requirement: !ruby/object:Gem::Requirement
186
186
  requirements:
187
187
  - - ">="
@@ -195,7 +195,7 @@ dependencies:
195
195
  - !ruby/object:Gem::Version
196
196
  version: '0'
197
197
  - !ruby/object:Gem::Dependency
198
- name: colorize
198
+ name: oga
199
199
  requirement: !ruby/object:Gem::Requirement
200
200
  requirements:
201
201
  - - ">="
@@ -209,7 +209,7 @@ dependencies:
209
209
  - !ruby/object:Gem::Version
210
210
  version: '0'
211
211
  - !ruby/object:Gem::Dependency
212
- name: oga
212
+ name: logging
213
213
  requirement: !ruby/object:Gem::Requirement
214
214
  requirements:
215
215
  - - ">="
@@ -223,7 +223,7 @@ dependencies:
223
223
  - !ruby/object:Gem::Version
224
224
  version: '0'
225
225
  - !ruby/object:Gem::Dependency
226
- name: logging
226
+ name: aws-sdk
227
227
  requirement: !ruby/object:Gem::Requirement
228
228
  requirements:
229
229
  - - ">="
@@ -237,7 +237,7 @@ dependencies:
237
237
  - !ruby/object:Gem::Version
238
238
  version: '0'
239
239
  - !ruby/object:Gem::Dependency
240
- name: aws-sdk
240
+ name: httparty
241
241
  requirement: !ruby/object:Gem::Requirement
242
242
  requirements:
243
243
  - - ">="
@@ -251,7 +251,7 @@ dependencies:
251
251
  - !ruby/object:Gem::Version
252
252
  version: '0'
253
253
  - !ruby/object:Gem::Dependency
254
- name: configliere
254
+ name: activesupport
255
255
  requirement: !ruby/object:Gem::Requirement
256
256
  requirements:
257
257
  - - ">="
@@ -265,7 +265,7 @@ dependencies:
265
265
  - !ruby/object:Gem::Version
266
266
  version: '0'
267
267
  - !ruby/object:Gem::Dependency
268
- name: httparty
268
+ name: faraday
269
269
  requirement: !ruby/object:Gem::Requirement
270
270
  requirements:
271
271
  - - ">="
@@ -279,7 +279,63 @@ dependencies:
279
279
  - !ruby/object:Gem::Version
280
280
  version: '0'
281
281
  - !ruby/object:Gem::Dependency
282
- name: activesupport
282
+ name: faraday-http-cache
283
+ requirement: !ruby/object:Gem::Requirement
284
+ requirements:
285
+ - - ">="
286
+ - !ruby/object:Gem::Version
287
+ version: '0'
288
+ type: :runtime
289
+ prerelease: false
290
+ version_requirements: !ruby/object:Gem::Requirement
291
+ requirements:
292
+ - - ">="
293
+ - !ruby/object:Gem::Version
294
+ version: '0'
295
+ - !ruby/object:Gem::Dependency
296
+ name: faraday-request-timer
297
+ requirement: !ruby/object:Gem::Requirement
298
+ requirements:
299
+ - - ">="
300
+ - !ruby/object:Gem::Version
301
+ version: '0'
302
+ type: :runtime
303
+ prerelease: false
304
+ version_requirements: !ruby/object:Gem::Requirement
305
+ requirements:
306
+ - - ">="
307
+ - !ruby/object:Gem::Version
308
+ version: '0'
309
+ - !ruby/object:Gem::Dependency
310
+ name: faraday_middleware
311
+ requirement: !ruby/object:Gem::Requirement
312
+ requirements:
313
+ - - ">="
314
+ - !ruby/object:Gem::Version
315
+ version: '0'
316
+ type: :runtime
317
+ prerelease: false
318
+ version_requirements: !ruby/object:Gem::Requirement
319
+ requirements:
320
+ - - ">="
321
+ - !ruby/object:Gem::Version
322
+ version: '0'
323
+ - !ruby/object:Gem::Dependency
324
+ name: faraday-cookie_jar
325
+ requirement: !ruby/object:Gem::Requirement
326
+ requirements:
327
+ - - ">="
328
+ - !ruby/object:Gem::Version
329
+ version: '0'
330
+ type: :runtime
331
+ prerelease: false
332
+ version_requirements: !ruby/object:Gem::Requirement
333
+ requirements:
334
+ - - ">="
335
+ - !ruby/object:Gem::Version
336
+ version: '0'
337
+ - !ruby/object:Gem::Dependency
338
+ name: faraday_connection_pool
283
339
  requirement: !ruby/object:Gem::Requirement
284
340
  requirements:
285
341
  - - ">="
@@ -313,7 +369,8 @@ files:
313
369
  - lib/wonko_the_sane/input/forgefiles_mods_input.rb
314
370
  - lib/wonko_the_sane/input/jenkins_input.rb
315
371
  - lib/wonko_the_sane/input/mojang_input.rb
316
- - lib/wonko_the_sane/reader_writer.rb
372
+ - lib/wonko_the_sane/new_format.rb
373
+ - lib/wonko_the_sane/old_format.rb
317
374
  - lib/wonko_the_sane/registry.rb
318
375
  - lib/wonko_the_sane/rules.rb
319
376
  - lib/wonko_the_sane/timestamps.rb
@@ -327,9 +384,9 @@ files:
327
384
  - lib/wonko_the_sane/util/http_cache.rb
328
385
  - lib/wonko_the_sane/util/maven_identifier.rb
329
386
  - lib/wonko_the_sane/util/task_stack.rb
387
+ - lib/wonko_the_sane/util/version_parser.rb
330
388
  - lib/wonko_the_sane/version.rb
331
389
  - lib/wonko_the_sane/version_index.rb
332
- - lib/wonko_the_sane/version_parser.rb
333
390
  - lib/wonko_the_sane/versionlists/base_version_list.rb
334
391
  - lib/wonko_the_sane/versionlists/curse_version_list.rb
335
392
  - lib/wonko_the_sane/versionlists/forge_version_list.rb
@@ -339,7 +396,6 @@ files:
339
396
  - lib/wonko_the_sane/versionlists/vanilla_legacy_version_list.rb
340
397
  - lib/wonko_the_sane/versionlists/vanilla_version_list.rb
341
398
  - lib/wonko_the_sane/wonko_version.rb
342
- - lib/wonko_the_sane/wonkoweb_uploader.rb
343
399
  homepage: https://github.com/MultiMC/WonkoTheSane
344
400
  licenses:
345
401
  - MIT
@@ -360,7 +416,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
360
416
  version: '0'
361
417
  requirements: []
362
418
  rubyforge_project:
363
- rubygems_version: 2.4.6
419
+ rubygems_version: 2.4.8
364
420
  signing_key:
365
421
  specification_version: 4
366
422
  summary: Pre-processing and format-unification of various resources mainly related
@@ -1,162 +0,0 @@
1
- module WonkoTheSane
2
- class WonkoWeb
3
- include HTTParty
4
-
5
- class UploadError < ResponseError
6
- attr_reader :errors
7
-
8
- def initialize(errors)
9
- @errors = errors
10
- end
11
- end
12
-
13
- def initialize(benchmark)
14
- self.class.base_uri Settings[:wonkoweb][:host]
15
- self.class.headers 'X-Uploader-Name' => Settings[:wonkoweb][:name],
16
- 'X-Uploader-Token' => Settings[:wonkoweb][:token],
17
- 'X-WUR-Enabled' => 'true',
18
- 'Content-Type' => 'application/json'
19
-
20
- @benchmark = benchmark
21
- end
22
-
23
- def index
24
- self.class.get(path 'index').with_indifferent_access
25
- end
26
-
27
- def file(uid)
28
- self.class.get(path uid).with_indifferent_access
29
- end
30
-
31
- def version(uid, version)
32
- self.class.get(path uid, version).with_indifferent_access
33
- end
34
-
35
- def upload_file(data)
36
- return if data.nil?
37
- uid = data[:uid]
38
- theirs = @benchmark.benchmark('upload_file.theirs') { file uid rescue nil }
39
-
40
- data.delete :versions # only stubs here
41
- data[:name] ||= data[:uid]
42
-
43
- upload_hash path, path(uid), data, theirs, false
44
- end
45
-
46
- def upload_version(data)
47
- return if data.nil?
48
- uid = data[:uid]
49
- version = data[:version]
50
- theirs = @benchmark.benchmark('upload_version.theirs') { version uid, version rescue nil }
51
- upload_hash path(uid), path(uid, version), data, theirs, true
52
- end
53
-
54
- private
55
-
56
- def upload_hash(create_path, update_path, ours, theirs, allow_overwrite)
57
- caller = ours[:version] ? 'upload_version' : 'upload_file'
58
- res = if theirs.nil? || (theirs[:errors] && theirs[:errors].size > 0)
59
- # upload entire file
60
- @benchmark.benchmark(caller + '.create') { self.class.post create_path, body: JSON.generate(ours) }
61
- else
62
- # upload changes
63
-
64
- body = JSON.parse JSON.generate ours # round-trip to "normalize" things
65
- # keep_if modifies in-place (why isn't it named keep_if! ????????)
66
- body.keep_if { |k, v| !(theirs[k.to_sym] == v) }
67
- body.keep_if { |k, v| theirs[k.to_sym].nil? || theirs[k.to_sym].to_s.empty? } unless allow_overwrite
68
- @benchmark.benchmark(caller + '.update') { self.class.patch update_path, body: JSON.generate(body) } unless body.empty?
69
- end
70
-
71
- if !res.nil? && (res.code >= 300 || JSON.parse(res.body).key?('errors'))
72
- binding.pry
73
- fail UploadError.new res.body[:errors]
74
- end
75
- end
76
-
77
- def path(*args)
78
- return '/api/v1.json' if args.nil? || args.empty?
79
- '/api/v1/' + args.map(&:to_s).join('/') + '.json'
80
- end
81
- end
82
-
83
- class WonkoWebUploader
84
- def initialize
85
- data = JSON.parse File.read 'uploader_queue.json' if File.exists? 'uploader_queue.json'
86
- data ||= {}
87
- data = data.with_indifferent_access
88
- @changed_files = data[:files] || []
89
- @changed_versions = data[:versions] || {}
90
-
91
- @benchmark = WonkoTheSane::Util::Benchmark.new
92
- @client = WonkoWeb.new @benchmark
93
- end
94
-
95
- def file_changed(uid)
96
- @changed_files << uid
97
- save_changes!
98
- end
99
-
100
- def version_changed(uid, version)
101
- @changed_versions[uid] ||= []
102
- @changed_versions[uid] << version
103
- save_changes!
104
- end
105
-
106
- def upload_changes!
107
- @changed_files.uniq!
108
- return if Settings[:wonkoweb][:host].nil?
109
-
110
- existing_uids = @benchmark.benchmark('initial index') { @client.index }[:index].map { |obj| obj[:uid] }
111
- logger.info "Uploading #{@changed_files.size} changed files to WonkoWeb at #{Settings[:wonkoweb][:host]}..."
112
- @changed_files.dup.each do |uid|
113
- begin
114
- @client.upload_file $rw.write_version_index Registry.instance.version_index uid
115
- existing_uids << uid
116
- @changed_files.delete uid
117
- rescue => e
118
- logger.error "Unable to upload file for #{uid} to WonkoWeb: #{e.message}"
119
- logger.warn e.backtrace.first
120
- binding.pry if $stdout.isatty && ENV['DEBUG_ON_ERROR']
121
- end
122
- end
123
- logger.info 'Done.'
124
- @benchmark.print_times true
125
-
126
- num_versions = @changed_versions.collect { |k, v| v.size }.inject :+
127
- logger.info "Uploading #{num_versions} changed versions to WonkoWeb at #{Settings[:wonkoweb][:host]}..."
128
- @changed_versions.dup.each do |uid, versions|
129
- versions.dup.each do |version|
130
- begin
131
- @client.upload_file $rw.write_version_index Registry.instance.version_index uid unless existing_uids.include? uid
132
- @client.upload_version $rw.write_version Registry.instance.retrieve uid, version
133
- versions.delete version
134
- rescue => e
135
- logger.error "Unable to upload version #{version} of #{uid} to WonkoWeb: #{e.message}"
136
- logger.warn e.backtrace.first
137
- binding.pry if $stdout.isatty && ENV['DEBUG_ON_ERROR']
138
- end
139
- @changed_versions.delete uid if versions.empty?
140
- end
141
- end
142
- logger.info 'Done.'
143
- @benchmark.print_times true
144
-
145
- save_changes!
146
- end
147
-
148
- private
149
-
150
- def logger
151
- Logging.logger[self]
152
- end
153
-
154
- def save_changes!
155
- data = {
156
- files: @changed_files,
157
- versions: @changed_versions
158
- }
159
- File.write 'uploader_queue.json', JSON.pretty_generate(data)
160
- end
161
- end
162
- end