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.
- checksums.yaml +4 -4
- data/bin/wonko_the_sane +12 -28
- data/data/sources.json +0 -5
- data/lib/wonko_the_sane.rb +6 -26
- data/lib/wonko_the_sane/input/base_input.rb +5 -10
- data/lib/wonko_the_sane/input/forge_installer_profile_input.rb +29 -47
- data/lib/wonko_the_sane/input/forgefiles_mods_input.rb +4 -7
- data/lib/wonko_the_sane/input/jenkins_input.rb +11 -15
- data/lib/wonko_the_sane/input/mojang_input.rb +52 -61
- data/lib/wonko_the_sane/{reader_writer.rb → new_format.rb} +31 -35
- data/lib/wonko_the_sane/old_format.rb +123 -0
- data/lib/wonko_the_sane/registry.rb +38 -23
- data/lib/wonko_the_sane/rules.rb +6 -6
- data/lib/wonko_the_sane/timestamps.rb +4 -4
- data/lib/wonko_the_sane/tools/update_nem.rb +20 -18
- data/lib/wonko_the_sane/util/configuration.rb +54 -2
- data/lib/wonko_the_sane/util/deep_storage_cache.rb +10 -8
- data/lib/wonko_the_sane/util/extraction_cache.rb +5 -4
- data/lib/wonko_the_sane/util/file_hash_cache.rb +6 -6
- data/lib/wonko_the_sane/util/http_cache.rb +50 -105
- data/lib/wonko_the_sane/util/maven_identifier.rb +8 -14
- data/lib/wonko_the_sane/util/task_stack.rb +7 -6
- data/lib/wonko_the_sane/{version_parser.rb → util/version_parser.rb} +10 -14
- data/lib/wonko_the_sane/version.rb +1 -1
- data/lib/wonko_the_sane/versionlists/base_version_list.rb +22 -15
- data/lib/wonko_the_sane/versionlists/curse_version_list.rb +15 -16
- data/lib/wonko_the_sane/versionlists/forge_version_list.rb +34 -37
- data/lib/wonko_the_sane/versionlists/forgefiles_mods_list.rb +3 -7
- data/lib/wonko_the_sane/versionlists/jenkins_version_list.rb +6 -15
- data/lib/wonko_the_sane/versionlists/liteloader_version_list.rb +18 -28
- data/lib/wonko_the_sane/versionlists/vanilla_legacy_version_list.rb +6 -6
- data/lib/wonko_the_sane/versionlists/vanilla_version_list.rb +6 -8
- data/lib/wonko_the_sane/wonko_version.rb +32 -12
- metadata +71 -15
- data/lib/wonko_the_sane/wonkoweb_uploader.rb +0 -162
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7aa648a065bfbc6fea0c7f581308ae4466a578fb
|
4
|
+
data.tar.gz: b7049aa48d98789256ce1cb5142553f43e29a34e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3140975588a58455426f638079786fed82ef3e0a525811ed11f0117083a2e8da6095806fc0bce1586f9c32f858cb202f9024d90a9535b80696687df71cb45b8
|
7
|
+
data.tar.gz: 400710a7384eb938b851c8c018746d3fbc0b3ffe57e0c070b82cf559d270aea6d69212cbe62ed3bc041fb393d6369b475aefbd69109e42908a5cb92314788872
|
data/bin/wonko_the_sane
CHANGED
@@ -34,40 +34,34 @@ OptionParser.new do |opts|
|
|
34
34
|
opts.banner = 'Usage: main.rb [options]'
|
35
35
|
|
36
36
|
opts.on '-rID', '--refresh=ID', 'Refresh the specified list' do |id|
|
37
|
-
|
38
|
-
|
39
|
-
|
37
|
+
list = WonkoTheSane.lists.find { |l| l.artifact == id }
|
38
|
+
if list.nil?
|
39
|
+
Logging.logger['General'].warn "Couldn't find the specified list #{id.cyan}"
|
40
|
+
else
|
40
41
|
TaskStack.push(Proc.new do
|
41
42
|
Logging.logger[list.artifact].info 'Refreshing'
|
42
43
|
list.refresh
|
43
|
-
Logging.logger[list.artifact].error list.
|
44
|
+
Logging.logger[list.artifact].error list.last_error if list.last_error
|
44
45
|
end)
|
45
|
-
foundList = true
|
46
|
-
end
|
47
46
|
end
|
48
|
-
|
49
|
-
Logging.logger['General'].warn "Couldn't find the specified list #{id.cyan}" if !foundList
|
50
47
|
end
|
51
48
|
opts.on '-a', '--refresh-all', 'Refresh all lists' do
|
52
49
|
WonkoTheSane.lists.each do |list|
|
53
50
|
TaskStack.push(Proc.new do
|
54
51
|
Logging.logger[list.artifact].info 'Refreshing'
|
55
52
|
list.refresh
|
56
|
-
Logging.logger[list.artifact].error list.
|
53
|
+
Logging.logger[list.artifact].error list.last_error if list.last_error
|
57
54
|
end)
|
58
55
|
end
|
59
56
|
end
|
60
57
|
opts.on '--invalidate=ID', 'Invalidates all versions on the specified list' do |id|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
end
|
58
|
+
list = WonkoTheSane.lists.find { |l| l.artifact == id }
|
59
|
+
if list.nil?
|
60
|
+
Logging.logger['General'].warn "Couldn't find the specified list #{id.cyan}"
|
61
|
+
else
|
62
|
+
Logging.logger[list.artifact].info 'Invalidating'
|
63
|
+
list.invalidate
|
68
64
|
end
|
69
|
-
|
70
|
-
Logging.logger['General'].warn "Couldn't find the specified list #{id.cyan}" if !foundList
|
71
65
|
end
|
72
66
|
opts.on '--invalidate-all', 'Invalidates all versions on all lists' do
|
73
67
|
WonkoTheSane.lists.each do |list|
|
@@ -83,15 +77,6 @@ OptionParser.new do |opts|
|
|
83
77
|
opts.on '--update-nem', 'Updates sources.json with data from NEM' do
|
84
78
|
update_nem
|
85
79
|
end
|
86
|
-
opts.on '--set-config=VAL', 'Sets a configuration value' do |val|
|
87
|
-
parts = val.match /([^:=]*)([:=](.*))?/
|
88
|
-
if parts.length == 4 && !parts[3].nil?
|
89
|
-
Settings[parts[1]] = parts[3]
|
90
|
-
else
|
91
|
-
Settings.delete parts[1]
|
92
|
-
end
|
93
|
-
Settings.save! WonkoTheSane.settings_file
|
94
|
-
end
|
95
80
|
opts.on '-h', '--help', 'Prints this help' do
|
96
81
|
puts opts
|
97
82
|
exit
|
@@ -99,4 +84,3 @@ OptionParser.new do |opts|
|
|
99
84
|
end.parse!
|
100
85
|
|
101
86
|
TaskStack.pop_all
|
102
|
-
WonkoTheSane.wonkoweb_uploader.upload_changes!
|
data/data/sources.json
CHANGED
@@ -171,11 +171,6 @@
|
|
171
171
|
"url": "http://jamesmckay.id.au:8080",
|
172
172
|
"artifact": "Power%20Converters"
|
173
173
|
},
|
174
|
-
{
|
175
|
-
"uid": "galacticraft",
|
176
|
-
"url": "http://ci.micdoodle8.com:8080",
|
177
|
-
"artifact": "Galacticraft-1.7"
|
178
|
-
},
|
179
174
|
{
|
180
175
|
"uid": "artifice",
|
181
176
|
"url": "http://76.72.175.100:8080",
|
data/lib/wonko_the_sane.rb
CHANGED
@@ -10,9 +10,8 @@ require 'digest'
|
|
10
10
|
require 'date'
|
11
11
|
require 'time'
|
12
12
|
require 'oga'
|
13
|
-
require 'configliere'
|
14
|
-
require 'httparty'
|
15
13
|
require 'active_support/core_ext/hash/indifferent_access'
|
14
|
+
require 'active_support/core_ext/object/blank'
|
16
15
|
|
17
16
|
require 'wonko_the_sane/version'
|
18
17
|
require 'wonko_the_sane/tools/update_nem'
|
@@ -24,6 +23,7 @@ require 'wonko_the_sane/util/file_hash_cache'
|
|
24
23
|
require 'wonko_the_sane/util/http_cache'
|
25
24
|
require 'wonko_the_sane/util/maven_identifier'
|
26
25
|
require 'wonko_the_sane/util/task_stack'
|
26
|
+
require 'wonko_the_sane/util/version_parser'
|
27
27
|
|
28
28
|
require 'wonko_the_sane/input/base_input'
|
29
29
|
require 'wonko_the_sane/input/forge_installer_profile_input'
|
@@ -40,13 +40,12 @@ require 'wonko_the_sane/versionlists/liteloader_version_list'
|
|
40
40
|
require 'wonko_the_sane/versionlists/vanilla_legacy_version_list'
|
41
41
|
require 'wonko_the_sane/versionlists/vanilla_version_list'
|
42
42
|
|
43
|
-
require 'wonko_the_sane/
|
44
|
-
require 'wonko_the_sane/
|
43
|
+
require 'wonko_the_sane/new_format'
|
44
|
+
require 'wonko_the_sane/old_format'
|
45
45
|
require 'wonko_the_sane/registry'
|
46
46
|
require 'wonko_the_sane/rules'
|
47
47
|
require 'wonko_the_sane/timestamps'
|
48
48
|
require 'wonko_the_sane/version_index'
|
49
|
-
require 'wonko_the_sane/version_parser'
|
50
49
|
require 'wonko_the_sane/wonko_version'
|
51
50
|
|
52
51
|
module WonkoTheSane
|
@@ -82,26 +81,7 @@ module WonkoTheSane
|
|
82
81
|
def self.configuration
|
83
82
|
@configuration ||= Util::Configuration.new
|
84
83
|
end
|
85
|
-
private_class_method :configuration
|
86
84
|
end
|
87
85
|
|
88
|
-
|
89
|
-
|
90
|
-
aws: {
|
91
|
-
client_id: nil,
|
92
|
-
client_secret: nil
|
93
|
-
},
|
94
|
-
wonkoweb: {
|
95
|
-
host: nil,
|
96
|
-
email: nil,
|
97
|
-
token: nil
|
98
|
-
}
|
99
|
-
})
|
100
|
-
Settings.define 'aws.client_id', encrypted: true
|
101
|
-
Settings.define 'aws.client_secret', encrypted: true
|
102
|
-
Settings.define 'wonkoweb.host'
|
103
|
-
Settings.define 'wonkoweb.name'
|
104
|
-
Settings.define 'wonkoweb.token', encrypted: true
|
105
|
-
Settings.read WonkoTheSane.settings_file
|
106
|
-
Settings[:encrypt_pass] = ENV['ENCRYPT_PASS'] || (print 'Password: '; pwd = STDIN.noecho(&:gets).chomp; puts; pwd)
|
107
|
-
Settings.resolve!
|
86
|
+
WonkoTheSane.configuration.load_from_file 'wts.yml' if File.exists? 'wts.yml'
|
87
|
+
WonkoTheSane.configuration.load_from_env
|
@@ -14,7 +14,6 @@ class BaseSanitizer
|
|
14
14
|
sanitizers.each do |sanitizer|
|
15
15
|
tmp = []
|
16
16
|
output.each do |file|
|
17
|
-
#puts "Running #{sanitizer.to_s} on #{file.id}"
|
18
17
|
result = sanitizer.sanitize(file.clone)
|
19
18
|
if result.is_a? Array
|
20
19
|
tmp = tmp + result
|
@@ -24,29 +23,25 @@ class BaseSanitizer
|
|
24
23
|
end
|
25
24
|
output = tmp
|
26
25
|
end
|
27
|
-
|
26
|
+
output
|
28
27
|
end
|
29
28
|
end
|
30
29
|
|
31
30
|
class DownloadsFixer < BaseSanitizer
|
32
31
|
def self.sanitize(file)
|
33
32
|
file.client.downloads.map! do |download|
|
34
|
-
if
|
35
|
-
|
36
|
-
info = WonkoTheSane::Util::DeepStorageCache.get_info url, ctxt: file.uid
|
33
|
+
if !download.size || download.sha256.blank?
|
34
|
+
info = WonkoTheSane::Util::DeepStorageCache.get_info download.usable_url, ctxt: file.uid
|
37
35
|
download.size = info[:size]
|
38
36
|
download.sha256 = info[:sha256]
|
39
|
-
download
|
40
37
|
end
|
41
38
|
download
|
42
39
|
end
|
43
40
|
file.server.downloads.map! do |download|
|
44
|
-
if
|
45
|
-
|
46
|
-
info = WonkoTheSane::Util::DeepStorageCache.get_info url, ctxt: file.uid
|
41
|
+
if !download.size || download.sha256.blank?
|
42
|
+
info = WonkoTheSane::Util::DeepStorageCache.get_info download.usable_url, ctxt: file.uid
|
47
43
|
download.size = info[:size]
|
48
44
|
download.sha256 = info[:sha256]
|
49
|
-
download
|
50
45
|
end
|
51
46
|
download
|
52
47
|
end
|
@@ -16,9 +16,7 @@ class ForgeInstallerProfileInput < BaseInput
|
|
16
16
|
file.client.minecraftArguments = info[:minecraftArguments]
|
17
17
|
file.client.assets = info[:assets]
|
18
18
|
file.requires << Referenced.new('net.minecraft', object[:install][:minecraft])
|
19
|
-
libraries = info[:libraries].map
|
20
|
-
MojangInput.sanetize_mojang_library obj
|
21
|
-
end.flatten 1
|
19
|
+
libraries = info[:libraries].map { |obj| MojangInput.sanitize_mojang_library obj }.flatten 1
|
22
20
|
file.client.downloads = libraries
|
23
21
|
file.common.folders['minecraft/mods'] = ['mc.forgemods']
|
24
22
|
file.common.folders['minecraft/mods'] << 'mc.forgecoremods' if object[:install][:minecraft].match /[^1]*1\.[0-6]/
|
@@ -27,7 +25,13 @@ class ForgeInstallerProfileInput < BaseInput
|
|
27
25
|
file.server.launchMethod = 'java.mainClass'
|
28
26
|
file.server.extra[:forgeLibraryName] = %W(net.minecraftforge:forge:#{object[:install][:minecraft]}-#{version}:universal net.minecraftforge:forge:#{object[:install][:minecraft]}-#{version} net.minecraftforge:forge:#{version}:universal net.minecraftforge:forge:#{version} net.minecraftforge:minecraftforge:#{object[:install][:minecraft]}-#{version}:universal net.minecraftforge:minecraftforge:#{object[:install][:minecraft]}-#{version} net.minecraftforge:minecraftforge:#{version}:universal net.minecraftforge:minecraftforge:#{version})
|
29
27
|
|
30
|
-
|
28
|
+
BaseSanitizer.sanitize file,
|
29
|
+
MojangExtractTweakersSanitizer,
|
30
|
+
MojangSplitLWJGLSanitizer,
|
31
|
+
ForgeRemoveMinecraftSanitizer,
|
32
|
+
ForgeFixJarSanitizer,
|
33
|
+
ForgePackXZUrlsSanitizer,
|
34
|
+
ForgeServerMainClassSanitizer
|
31
35
|
end
|
32
36
|
end
|
33
37
|
|
@@ -36,17 +40,12 @@ class ForgeFixJarSanitizer < BaseSanitizer
|
|
36
40
|
file.client.downloads.map! do |lib|
|
37
41
|
ident = WonkoTheSane::Util::MavenIdentifier.new(lib.name)
|
38
42
|
ident.artifact = 'forge' if 'net.minecraftforge' == ident.group && 'minecraftforge' == ident.artifact
|
39
|
-
if
|
40
|
-
mcversion = nil
|
41
|
-
file.requires.each do |req|
|
42
|
-
if req.uid == 'net.minecraft'
|
43
|
-
mcversion = req.version
|
44
|
-
end
|
45
|
-
end
|
43
|
+
if %w(forge fml).include?(ident.artifact) && %w(net.minecraftforge cpw.mods).include?(ident.group)
|
44
|
+
mcversion = file.requires.find { |r| r.uid == 'net.minecraft' }.version rescue nil
|
46
45
|
lib = lib.clone
|
47
46
|
ident.classifier = 'universal'
|
48
47
|
ident.version = "#{mcversion}-#{ident.version}" unless ident.version.start_with? "#{mcversion}"
|
49
|
-
lib.name = ident.to_name
|
48
|
+
lib.name = ident.to_name
|
50
49
|
end
|
51
50
|
lib
|
52
51
|
end
|
@@ -59,53 +58,41 @@ class ForgeRemoveMinecraftSanitizer < BaseSanitizer
|
|
59
58
|
def self.sanitize(file)
|
60
59
|
return nil if file.uid == 'org.lwjgl' # remove lwjgl, it's managed by minecraft
|
61
60
|
return file if file.uid != 'net.minecraftforge'
|
62
|
-
mcversion = nil
|
63
|
-
|
64
|
-
if req.uid == 'net.minecraft'
|
65
|
-
mcversion = req.version
|
66
|
-
end
|
67
|
-
end
|
61
|
+
mcversion = file.requires.find { |r| r.uid == 'net.minecraft' }.version rescue nil
|
62
|
+
|
68
63
|
minecraft = Registry.instance.retrieve 'net.minecraft', mcversion
|
69
|
-
if
|
64
|
+
if minecraft.nil?
|
70
65
|
# if we can't find the wanted version on the first try we try reloading the list to see if we get something
|
71
|
-
WonkoTheSane.lists.
|
72
|
-
list.refresh if list.artifact == 'net.minecraft'
|
73
|
-
end
|
66
|
+
WonkoTheSane.lists.find { |l| l.artifact == 'net.minecraft' }.refresh
|
74
67
|
minecraft = Registry.instance.retrieve 'net.minecraft', mcversion
|
75
68
|
end
|
69
|
+
|
76
70
|
if minecraft
|
77
71
|
file.client.mainClass = nil if minecraft.client.mainClass == file.client.mainClass
|
78
72
|
file.client.minecraftArguments = nil if minecraft.client.minecraftArguments == file.client.minecraftArguments
|
79
73
|
file.client.assets = nil if minecraft.client.assets == file.client.assets
|
80
|
-
file.client.downloads.
|
81
|
-
|
82
|
-
lib.name == mcLib.name
|
83
|
-
end
|
74
|
+
file.client.downloads.reject! do |lib|
|
75
|
+
minecraft.client.downloads.find { |mcLib| lib.name == mcLib.name } != nil
|
84
76
|
end
|
85
|
-
file.requires.
|
86
|
-
|
87
|
-
nil == minecraft.requires.find do |mcReq|
|
88
|
-
req == mcReq
|
89
|
-
end
|
90
|
-
else
|
91
|
-
true
|
92
|
-
end
|
77
|
+
file.requires.reject! do |req|
|
78
|
+
minecraft.requires.find { |mcReq| req == mcReq } != nil
|
93
79
|
end
|
94
80
|
else
|
95
81
|
# don't know which version of minecraft this is, so we can't know which parts to eliminate
|
96
82
|
end
|
83
|
+
|
97
84
|
file
|
98
85
|
end
|
99
86
|
end
|
100
87
|
|
101
88
|
class ForgePackXZUrlsSanitizer < BaseSanitizer
|
102
|
-
|
89
|
+
class << self; attr_accessor :pack_xz_libs; end
|
90
|
+
self.pack_xz_libs = ['org.scala-lang', 'com.typesafe', 'com.typesafe.akka']
|
103
91
|
|
104
92
|
def self.sanitize(file)
|
105
93
|
file.client.downloads.map! do |lib|
|
106
|
-
if
|
107
|
-
lib =
|
108
|
-
lib.mavenBaseUrl = 'http://repo.spongepowered.org/maven/'
|
94
|
+
if self.pack_xz_libs.include? WonkoTheSane::Util::MavenIdentifier.new(lib.name).group
|
95
|
+
lib.maven_base_url = 'http://repo.spongepowered.org/maven/'
|
109
96
|
end
|
110
97
|
lib
|
111
98
|
end
|
@@ -117,16 +104,11 @@ class ForgeServerMainClassSanitizer < BaseSanitizer
|
|
117
104
|
def self.sanitize(file)
|
118
105
|
file.server.downloads.each do |download|
|
119
106
|
if file.server.extra[:forgeLibraryName].include? download.name
|
120
|
-
|
121
|
-
libFile = HTTPCache.file(url, ctxt: file.uid, check_stale: false)
|
107
|
+
lib_file = HTTPCache.file(download.usable_url, ctxt: file.uid, check_stale: false)
|
122
108
|
# Handle entries one by one
|
123
|
-
text = ExtractionCache.get(
|
124
|
-
|
125
|
-
|
126
|
-
if l =~ /Main-Class: (.*)/
|
127
|
-
file.server.mainClass = $1.strip
|
128
|
-
end
|
129
|
-
end
|
109
|
+
text = ExtractionCache.get(lib_file, :zip, 'META-INF/MANIFEST.MF')
|
110
|
+
match = text.lines.find { |l| l.match /Main-Class: (.*)/ }
|
111
|
+
file.server.mainClass = match[1] unless match.nil?
|
130
112
|
end
|
131
113
|
end
|
132
114
|
file
|
@@ -9,22 +9,19 @@ class ForgeFilesModsInput < BaseInput
|
|
9
9
|
file.uid = @artifact
|
10
10
|
file.version = version
|
11
11
|
file.time = data[:info]
|
12
|
+
file.requires << Referenced.new('net.minecraft', data[:mcver])
|
12
13
|
|
13
|
-
f = data[:files].find
|
14
|
-
|
15
|
-
(file[:ext] == 'jar' or file[:ext] == 'zip') and (type == 'universal' or type == 'client' or type == 'main') #not type.include? 'src' and not type.include? 'deobf' and not type.include? 'api' and not type.include? 'backup'
|
16
|
-
end
|
17
|
-
if not f
|
14
|
+
f = data[:files].find { |f| %w(jar zip).include?(f[:ext]) && %(universal client main).include?(f[:buildtype].downcase) }
|
15
|
+
if f.nil?
|
18
16
|
logger.warn 'No file found for ' + file.uid + ' version ' + file.version
|
19
17
|
return []
|
20
18
|
end
|
21
|
-
file.requires << Referenced.new('net.minecraft', f[:mcver])
|
22
19
|
|
23
20
|
dl = FileDownload.new
|
24
21
|
dl.url = f[:url]
|
25
22
|
dl.destination = "mods/#{file.uid}-#{file.version}.jar"
|
26
23
|
file.common.downloads << dl
|
27
24
|
|
28
|
-
|
25
|
+
BaseSanitizer.sanitize file
|
29
26
|
end
|
30
27
|
end
|
@@ -1,30 +1,27 @@
|
|
1
1
|
class JenkinsInput < BaseInput
|
2
|
-
def initialize(artifact,
|
2
|
+
def initialize(artifact, file_regex)
|
3
3
|
@artifact = artifact
|
4
|
-
@
|
4
|
+
@file_regex = file_regex
|
5
5
|
end
|
6
6
|
|
7
7
|
def parse(data)
|
8
|
-
if data[:result] != 'SUCCESS'
|
9
|
-
return nil
|
10
|
-
end
|
8
|
+
return nil if data[:result] != 'SUCCESS'
|
11
9
|
|
12
10
|
file = WonkoVersion.new
|
13
|
-
|
14
11
|
file.uid = @artifact
|
15
12
|
file.version = data[:number].to_s
|
16
13
|
file.time = data[:timestamp]
|
17
14
|
|
18
15
|
artifact = data[:artifacts].find do |art|
|
19
16
|
path = art[:fileName]
|
20
|
-
if @
|
21
|
-
path.match @
|
17
|
+
if @file_regex
|
18
|
+
path.match @file_regex
|
22
19
|
else
|
23
|
-
|
20
|
+
%w(-api. -deobf. -dev. -javadoc. -library. -sources. -src. -util.).find { |infix| path.include? infix }.nil?
|
24
21
|
end
|
25
22
|
end
|
26
23
|
|
27
|
-
if
|
24
|
+
if artifact.nil?
|
28
25
|
logger.warn 'No valid artifact found for ' + file.version
|
29
26
|
else
|
30
27
|
dl = FileDownload.new
|
@@ -33,14 +30,13 @@ class JenkinsInput < BaseInput
|
|
33
30
|
file.common.downloads << dl
|
34
31
|
end
|
35
32
|
|
36
|
-
|
33
|
+
BaseSanitizer.sanitize file
|
37
34
|
end
|
38
35
|
|
39
36
|
private
|
37
|
+
|
40
38
|
def clean_url(url)
|
41
|
-
if url[url.length - 1] == '/'
|
42
|
-
|
43
|
-
end
|
44
|
-
return url
|
39
|
+
url[url.length - 1] = '' if url[url.length - 1] == '/'
|
40
|
+
url
|
45
41
|
end
|
46
42
|
end
|
@@ -1,77 +1,72 @@
|
|
1
|
-
def
|
1
|
+
def allowed_platforms_for_rules(rules)
|
2
2
|
possible = ['win32', 'win64', 'lin32', 'lin64', 'osx64']
|
3
3
|
|
4
4
|
allowed = possible
|
5
5
|
if rules
|
6
6
|
rules.each do |rule|
|
7
|
-
if rule.
|
8
|
-
if rule.
|
9
|
-
if rule.os == 'windows'
|
10
|
-
allowed << 'win32'
|
11
|
-
allowed << 'win64'
|
12
|
-
elsif rule.os == 'linux'
|
13
|
-
allowed << 'lin32'
|
14
|
-
allowed << 'lin64'
|
15
|
-
elsif rule.os == 'osx'
|
16
|
-
allowed << 'osx64'
|
17
|
-
end
|
18
|
-
elsif rule.is_a? ImplicitRule
|
7
|
+
if rule.is_a? ImplicitRule
|
8
|
+
if rule.action == :allow
|
19
9
|
allowed = possible
|
10
|
+
else
|
11
|
+
allowed = []
|
20
12
|
end
|
21
|
-
elsif rule.
|
22
|
-
if rule.
|
23
|
-
|
13
|
+
elsif rule.is_a? OsRule
|
14
|
+
if rule.action == :allow
|
15
|
+
case rule.os
|
16
|
+
when 'windows'
|
17
|
+
allowed << 'win32' << 'win64'
|
18
|
+
when 'linux'
|
19
|
+
allowed << 'lin32' << 'lin64'
|
20
|
+
when 'osx'
|
21
|
+
allowed << 'osx64'
|
22
|
+
end
|
23
|
+
elsif rule.action == :disallow
|
24
|
+
case rule.os
|
25
|
+
when 'windows'
|
24
26
|
allowed.delete 'win32'
|
25
27
|
allowed.delete 'win64'
|
26
|
-
|
28
|
+
when 'linux'
|
27
29
|
allowed.delete 'lin32'
|
28
30
|
allowed.delete 'lin64'
|
29
|
-
|
31
|
+
when 'osx'
|
30
32
|
allowed.delete 'osx64'
|
31
33
|
end
|
32
|
-
elsif rule.is_a? ImplicitRule
|
33
|
-
allowed = []
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
|
39
|
+
allowed
|
40
40
|
end
|
41
41
|
|
42
42
|
class MojangInput
|
43
43
|
# reads a general mojang-style library
|
44
|
-
def self.
|
45
|
-
lib =
|
44
|
+
def self.sanitize_mojang_library(object)
|
45
|
+
lib = object.key?(:natives) ? VersionLibraryNative.new : VersionLibrary.new
|
46
46
|
lib.name = object[:name]
|
47
|
-
lib.
|
48
|
-
|
47
|
+
lib.maven_base_url = object.key?(:url) ? object[:url] : 'https://libraries.minecraft.net/'
|
49
48
|
lib.rules = object[:rules].map do |obj| Rule.from_json obj end if object[:rules]
|
50
49
|
|
51
50
|
libs = []
|
52
|
-
if
|
51
|
+
if !lib.is_a? VersionLibraryNative
|
53
52
|
libs << lib
|
54
53
|
else
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
nativeIds['osx64'] = natives[:osx].gsub "${arch}", '64'
|
68
|
-
end
|
54
|
+
native_ids = {}
|
55
|
+
natives = object[:natives]
|
56
|
+
if natives.key? :windows
|
57
|
+
native_ids['win32'] = natives[:windows].gsub "${arch}", '32'
|
58
|
+
native_ids['win64'] = natives[:windows].gsub "${arch}", '64'
|
59
|
+
end
|
60
|
+
if natives.key? :linux
|
61
|
+
native_ids['lin32'] = natives[:linux].gsub "${arch}", '32'
|
62
|
+
native_ids['lin64'] = natives[:linux].gsub "${arch}", '64'
|
63
|
+
end
|
64
|
+
if natives.key? :osx
|
65
|
+
native_ids['osx64'] = natives[:osx].gsub "${arch}", '64'
|
69
66
|
end
|
70
67
|
|
71
|
-
|
72
|
-
|
73
|
-
next
|
74
|
-
end
|
68
|
+
allowed_platforms_for_rules(lib.rules).uniq.each do |platform|
|
69
|
+
next unless native_ids.key? platform
|
75
70
|
|
76
71
|
native = lib.clone
|
77
72
|
native.rules = [
|
@@ -81,12 +76,12 @@ class MojangInput
|
|
81
76
|
nil,
|
82
77
|
{'win32': '32', 'win64': '64', 'lin32': '32', 'lin64': '64', 'osx64': '64'}[platform.to_sym])
|
83
78
|
]
|
84
|
-
native.url = native.url.sub '.jar', ('-' +
|
79
|
+
native.url = native.url.sub '.jar', ('-' + native_ids[platform] + '.jar')
|
85
80
|
libs << native
|
86
81
|
end
|
87
82
|
end
|
88
83
|
|
89
|
-
|
84
|
+
libs
|
90
85
|
end
|
91
86
|
|
92
87
|
def initialize(artifact)
|
@@ -97,7 +92,7 @@ class MojangInput
|
|
97
92
|
object = data.class == Hash ? data : JSON.parse(data, symbolize_names: true)
|
98
93
|
|
99
94
|
if object[:minimumLauncherVersion] and object[:minimumLauncherVersion] > 14
|
100
|
-
|
95
|
+
logger.warn 'To high minimumLauncherVersion encountered for ' + object[:id] + ': ' + object[:minimumLauncherVersion]
|
101
96
|
return []
|
102
97
|
end
|
103
98
|
|
@@ -111,9 +106,7 @@ class MojangInput
|
|
111
106
|
file.client.assets = object[:assets]
|
112
107
|
file.client.minecraftArguments = object[:minecraftArguments]
|
113
108
|
file.client.jarModTarget = "net.minecraft:minecraft:#{file.version}"
|
114
|
-
file.client.downloads = object[:libraries].map
|
115
|
-
MojangInput.sanetize_mojang_library obj
|
116
|
-
end.flatten 1
|
109
|
+
file.client.downloads = object[:libraries].map { |obj| MojangInput.sanitize_mojang_library obj }.flatten 1
|
117
110
|
main_lib = VersionLibrary.new
|
118
111
|
main_lib.name = "net.minecraft:minecraft:#{file.version}"
|
119
112
|
main_lib.url = 'http://s3.amazonaws.com/Minecraft.Download/versions/' + file.version + '/' + file.version + '.jar'
|
@@ -134,7 +127,7 @@ class MojangInput
|
|
134
127
|
file.client.folders['minecraft/saves'] = ['mc.saves.region'] if file.time >= 1298325600 and file.time < 1330552800
|
135
128
|
file.client.folders['minecraft/saves'] = ['mc.saves.infdev'] if file.time >= 1291327200 and file.time < 1298325600
|
136
129
|
|
137
|
-
|
130
|
+
BaseSanitizer.sanitize file, MojangSplitLWJGLSanitizer
|
138
131
|
end
|
139
132
|
end
|
140
133
|
|
@@ -142,28 +135,28 @@ class MojangExtractTweakersSanitizer < BaseSanitizer
|
|
142
135
|
def self.sanitize(file)
|
143
136
|
file.client.tweakers = file.client.minecraftArguments.scan(/--tweakClass ([^ ]*)/).flatten
|
144
137
|
file.client.minecraftArguments = file.client.minecraftArguments.gsub /\ ?--tweakClass ([^ ]*)/, ''
|
145
|
-
|
138
|
+
file
|
146
139
|
end
|
147
140
|
end
|
148
141
|
|
149
142
|
# extract lwjgl specific libraries and natives
|
150
143
|
class MojangSplitLWJGLSanitizer < BaseSanitizer
|
151
|
-
|
152
|
-
|
144
|
+
class << self; attr_accessor :lwjgl_list, :lwjgl_extras; end
|
145
|
+
self.lwjgl_list = %w(org.lwjgl net.java.jinput net.java.jutils)
|
146
|
+
self.lwjgl_extras = %w(net.java.jinput net.java.jutils)
|
153
147
|
|
154
148
|
def self.sanitize(file)
|
155
149
|
file.requires = [] if file.requires.nil?
|
156
150
|
file.requires << Referenced.new('org.lwjgl')
|
157
151
|
|
158
152
|
extras = [] # [Download]
|
159
|
-
versioned = {} # String => [Download]
|
153
|
+
versioned = Hash.new { |hash, key| hash[key] = [] } # String => [Download]
|
160
154
|
file.client.downloads.select! do |lib|
|
161
|
-
nil ==
|
162
|
-
if lib.name.include?
|
163
|
-
if
|
155
|
+
nil == self.lwjgl_list.find do |lwjgl_candidate|
|
156
|
+
if lib.name.include? lwjgl_candidate
|
157
|
+
if self.lwjgl_extras.include? lib.maven.group
|
164
158
|
extras << lib
|
165
159
|
else
|
166
|
-
versioned[lib.maven.version] ||= []
|
167
160
|
versioned[lib.maven.version] << lib
|
168
161
|
end
|
169
162
|
true
|
@@ -190,8 +183,6 @@ end
|
|
190
183
|
|
191
184
|
class MojangTraitsSanitizer < BaseSanitizer
|
192
185
|
def self.sanitize(file)
|
193
|
-
if file.uid == 'net.minecraft'
|
194
|
-
end
|
195
186
|
file
|
196
187
|
end
|
197
188
|
end
|