wonko_the_sane 0.1.2 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
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