Add package info and filter out bad LWJGL versions

This commit is contained in:
Petr Mrázek 2017-03-30 09:44:51 +02:00
parent 585e3e8f85
commit ed91f63702
4 changed files with 69 additions and 16 deletions

View File

@ -47,7 +47,9 @@ def shouldIgnoreArtifact(libSet, match):
def versionFromProfile(profile, version):
result = MultiMCVersionFile({"name":"Forge", "version":version.longVersion, "uid":"net.minecraftforge" })
result.mcVersion = profile.install.minecraft
mcversion = profile.install.minecraft
result.parentUid ='net.minecraft'
result.requires ={'net.minecraft': mcversion}
result.mainClass = profile.versionInfo.mainClass
args = profile.versionInfo.minecraftArguments
tweakers = []
@ -63,7 +65,7 @@ def versionFromProfile(profile, version):
# result.minecraftArguments = args
result.releaseTime = profile.versionInfo.time
libs = []
mcFilter = loadMcVersionFilter(result.mcVersion)
mcFilter = loadMcVersionFilter(mcversion)
for forgeLib in profile.versionInfo.libraries:
if forgeLib.name.isLwjgl():
continue
@ -74,7 +76,7 @@ def versionFromProfile(profile, version):
if fixedName.artifact == "minecraftforge":
fixedName.artifact = "forge"
fixedName.classifier = "universal"
fixedName.version = "%s-%s" % (result.mcVersion, fixedName.version)
fixedName.version = "%s-%s" % (mcversion, fixedName.version)
elif fixedName.artifact == "forge":
fixedName.classifier = "universal"
ourLib = MultiMCLibrary(name=fixedName)
@ -83,6 +85,7 @@ def versionFromProfile(profile, version):
ourLib.mmcHint = "forge-pack-xz"
libs.append(ourLib)
result.libraries = libs
result.order = 5
return result
# load the locally cached version list
@ -92,6 +95,8 @@ with open("upstream/forge/index.json", 'r', encoding='utf-8') as f:
versions = []
writeSharedPackageData('net.minecraftforge', 'Forge', 'net.minecraft')
for id, entry in remoteVersionlist.number.items():
if entry.mcversion == None:
eprint ("Skipping %d with invalid MC version" % entry.build)

View File

@ -83,6 +83,8 @@ for filename in os.listdir('upstream/mojang/versions'):
addLWJGLVersion(lwjglVersions, keyBucket)
versionFile.libraries = libs_minecraft
versionFile.id = mojangVersionFile.id
versionFile.requires = {'org.lwjgl': '*'}
versionFile.order = -2
filenameOut = "multimc/net.minecraft/%s.json" % versionFile.version
if versionFile.version in staticVersionlist.versions:
ApplyLegacyOverride (versionFile, staticVersionlist.versions[versionFile.version])
@ -91,6 +93,29 @@ for filename in os.listdir('upstream/mojang/versions'):
for version in lwjglVersions:
versionObj = lwjglVersions[version]
versionObj.order = -1
filename = "multimc/org.lwjgl/%s.json" % version
good = True
for lib in versionObj.libraries:
if not lib.natives:
continue
checkedDict = {'linux', 'windows', 'osx'}
if not checkedDict.issubset(lib.natives.keys()):
print("Missing system classifier!", versionObj.version, lib.name, lib.natives.keys())
good = False
break
if lib.downloads:
for entry in checkedDict:
bakedEntry = lib.natives[entry]
if not bakedEntry in lib.downloads.classifiers:
print("Missing download for classifier!", versionObj.version, lib.name, bakedEntry, lib.downloads.classifiers.keys())
good = False
break
if good:
with open(filename, 'w') as outfile:
json.dump(versionObj.to_json(), outfile, sort_keys=True, indent=4)
else:
print("Skipped LWJGL", versionObj.version)
writeSharedPackageData('org.lwjgl', 'LWJGL', None)
writeSharedPackageData('net.minecraft', 'Minecraft', None)

View File

@ -16,7 +16,7 @@ def HashFile(hash, fname):
return hash_instance.hexdigest()
# ignore these files when indexing versions
ignore = set(["index.json", ".git"])
ignore = set(["index.json", "package.json", ".git"])
# initialize output structures - package list level
packages = MultiMCPackageIndex()
@ -26,11 +26,15 @@ for package in os.listdir('multimc'):
if package in ignore:
continue
sharedData = readSharedPackageData(package)
# initialize output structures - version list level
versionList = MultiMCVersionIndex()
versionList.uid = package
versionList.parentUid = sharedData.parentUid
versionList.name = sharedData.name
latest = {}
name = None
# walk through all the versions of the package
for filename in os.listdir("multimc/%s" % (package)):
@ -50,9 +54,7 @@ for package in os.listdir('multimc'):
versionEntry.type = versionFile.type
versionEntry.releaseTime = versionFile.releaseTime
versionEntry.sha256 = filehash
if name == None:
name = versionFile.name
versionEntry.requires = versionFile.requires
# update the latest version of particular type (if needed)
if versionFile.type:
if versionFile.type in latest:
@ -65,9 +67,6 @@ for package in os.listdir('multimc'):
# sort the versions in descending order by time of release
versionList.versions = sorted(versionList.versions, key=itemgetter('releaseTime'), reverse=True)
# assign some values derived from the version files
versionList.name = name
# if the latest version dict was populated, transform it into output
if latest:
versionList.latest = {}
@ -83,10 +82,11 @@ for package in os.listdir('multimc'):
packageEntry = MultiMCPackageIndexEntry(
{
"uid" : package,
"name" : name,
"name" : sharedData.name,
"sha256": HashFile(hashlib.sha256, outFilePath)
}
)
packageEntry.parentUid = sharedData.parentUid
packages.packages.append(packageEntry)
# write the repository package index

View File

@ -213,7 +213,8 @@ class MultiMCVersionFile (VersionedJsonObject):
version = StringProperty(required=True)
uid = StringProperty(required=True)
id = StringProperty(exclude_if_none=True, default=None) # DEPRECATED this is the main Minecraft version ID Mojang uses...
mcVersion = StringProperty(exclude_if_none=True, default=None) # DEPRECATED - replace with proper depends
parentUid = StringProperty(exclude_if_none=True, default=None)
requires = DictProperty(StringProperty, exclude_if_none=True, default=None)
assetIndex = ObjectProperty(MojangAssets, exclude_if_none=True, default=None)
downloads = DictProperty(MojangArtifactBase, exclude_if_none=True, default=None)
libraries = ListProperty(MultiMCLibrary, exclude_if_none=True, default=None)
@ -224,6 +225,7 @@ class MultiMCVersionFile (VersionedJsonObject):
type = StringProperty(exclude_if_none=True, default=None)
addTraits = ListProperty(StringProperty, name="+traits", exclude_if_none=True, default=None)
addTweakers = ListProperty(StringProperty, name="+tweakers", exclude_if_none=True, default=None)
order = IntegerProperty()
# Convert Mojang version file object to a MultiMC version file object
def MojangToMultiMC (file, name, uid, version):
@ -244,15 +246,35 @@ def MojangToMultiMC (file, name, uid, version):
mmcFile.type = file.type
return mmcFile
class MultiMCSharedPackageData(JsonObject):
name = StringProperty(required=True)
uid = StringProperty(required=True)
parentUid = StringProperty(exclude_if_none=True, default=None)
def writeSharedPackageData(uid, name, parentUid = None):
desc = MultiMCSharedPackageData({
'name': name,
'uid': uid
})
desc.parentUid = parentUid
with open("multimc/%s/package.json" % uid, 'w') as file:
json.dump(desc.to_json(), file, sort_keys=True, indent=4)
def readSharedPackageData(uid):
with open("multimc/%s/package.json" % uid, 'r') as file:
return MultiMCSharedPackageData(json.load(file))
class MultiMCVersionIndexEntry(JsonObject):
version = StringProperty()
type = StringProperty()
type = StringProperty(exclude_if_none=True, default=None)
releaseTime = ISOTimestampProperty()
requires = DictProperty(StringProperty, exclude_if_none=True, default=None)
sha256 = StringProperty()
class MultiMCVersionIndex(VersionedJsonObject):
name = StringProperty()
uid = StringProperty()
parentUid = StringProperty(exclude_if_none=True, default=None)
latest = DictProperty(StringProperty, exclude_if_none=True, default=None)
recommended = DictProperty(StringProperty, exclude_if_none=True, default=None)
versions = ListProperty(MultiMCVersionIndexEntry)
@ -260,6 +282,7 @@ class MultiMCVersionIndex(VersionedJsonObject):
class MultiMCPackageIndexEntry(JsonObject):
name = StringProperty()
uid = StringProperty()
parentUid = StringProperty(exclude_if_none=True, default=None)
sha256 = StringProperty()
class MultiMCPackageIndex(VersionedJsonObject):