mirror of
https://github.com/unmojang/meta.git
synced 2025-09-24 03:31:03 -04:00
fix: reformat code
This commit is contained in:
parent
a9ebc59353
commit
f65b2666a0
@ -7,6 +7,7 @@ from metautil import *
|
||||
|
||||
PMC_DIR = os.environ["PMC_DIR"]
|
||||
|
||||
|
||||
# with open(PMC_DIR + '/index.json', 'r', encoding='utf-8') as index:
|
||||
# packages = PolyMCPackageIndex(json.load(index))
|
||||
|
||||
@ -17,6 +18,7 @@ class DownloadType(Enum):
|
||||
NORMAL = 1
|
||||
FORGE_XZ = 2
|
||||
|
||||
|
||||
class DownloadEntry:
|
||||
def __init__(self, url: str, kind: DownloadType, name: GradleSpecifier):
|
||||
self.name = name
|
||||
@ -41,6 +43,7 @@ class DownloadEntry:
|
||||
def __repr__(self):
|
||||
return "DownloadEntry('" + self.toString() + "')"
|
||||
|
||||
|
||||
class MojangLibrary(JsonObject):
|
||||
extract = ObjectProperty(MojangLibraryExtractRules, exclude_if_none=True, default=None)
|
||||
name = GradleSpecifierProperty(required=True)
|
||||
@ -48,6 +51,7 @@ class MojangLibrary (JsonObject):
|
||||
natives = DictProperty(StringProperty, exclude_if_none=True, default=None)
|
||||
rules = ListProperty(MojangRule, exclude_if_none=True, default=None)
|
||||
|
||||
|
||||
class PolyMCLibrary(MojangLibrary):
|
||||
url = StringProperty(exclude_if_none=True, default=None)
|
||||
mmcHint = StringProperty(name="MMC-hint", exclude_if_none=True, default=None) # this is supposed to be MMC-hint!
|
||||
@ -69,7 +73,6 @@ def GetLibraryDownload (library : PolyMCLibrary):
|
||||
if url.endswith('.zip'):
|
||||
name.extension = 'zip'
|
||||
|
||||
|
||||
if library.downloads:
|
||||
url = library.downloads.artifact.url
|
||||
else:
|
||||
@ -80,6 +83,7 @@ def GetLibraryDownload (library : PolyMCLibrary):
|
||||
|
||||
return DownloadEntry(url, kind, name)
|
||||
|
||||
|
||||
with open(PMC_DIR + '/net.minecraftforge/index.json', 'r', encoding='utf-8') as forgeIndex:
|
||||
forgeVersions = PolyMCVersionIndex(json.load(forgeIndex))
|
||||
|
||||
|
@ -7,14 +7,17 @@ class FabricInstallerArguments(JsonObject):
|
||||
common = ListProperty(StringProperty)
|
||||
server = ListProperty(StringProperty)
|
||||
|
||||
|
||||
class FabricInstallerLaunchwrapper(JsonObject):
|
||||
tweakers = ObjectProperty(FabricInstallerArguments, required=True)
|
||||
|
||||
|
||||
class FabricInstallerLibraries(JsonObject):
|
||||
client = ListProperty(PolyMCLibrary)
|
||||
common = ListProperty(PolyMCLibrary)
|
||||
server = ListProperty(PolyMCLibrary)
|
||||
|
||||
|
||||
class FabricInstallerDataV1(JsonObject):
|
||||
version = IntegerProperty(required=True)
|
||||
libraries = ObjectProperty(FabricInstallerLibraries, required=True)
|
||||
@ -22,6 +25,7 @@ class FabricInstallerDataV1(JsonObject):
|
||||
arguments = ObjectProperty(FabricInstallerArguments, required=False)
|
||||
launchwrapper = ObjectProperty(FabricInstallerLaunchwrapper, required=False)
|
||||
|
||||
|
||||
class FabricJarInfo(JsonObject):
|
||||
releaseTime = ISOTimestampProperty()
|
||||
size = IntegerProperty()
|
||||
|
23
forgeutil.py
23
forgeutil.py
@ -73,6 +73,7 @@ class ForgeVersion:
|
||||
|
||||
return True
|
||||
|
||||
|
||||
class ForgeFile(JsonObject):
|
||||
classifier = StringProperty(required=True)
|
||||
hash = StringProperty(required=True)
|
||||
@ -82,7 +83,9 @@ class ForgeFile(JsonObject):
|
||||
return "%s-%s-%s.%s" % ("forge", longversion, self.classifier, self.extension)
|
||||
|
||||
def url(self, longversion):
|
||||
return "https://files.minecraftforge.net/maven/net/minecraftforge/forge/%s/%s" % (longversion, self.filename(longversion))
|
||||
return "https://files.minecraftforge.net/maven/net/minecraftforge/forge/%s/%s" % (
|
||||
longversion, self.filename(longversion))
|
||||
|
||||
|
||||
class ForgeEntry(JsonObject):
|
||||
longversion = StringProperty(required=True)
|
||||
@ -94,15 +97,18 @@ class ForgeEntry(JsonObject):
|
||||
recommended = BooleanProperty()
|
||||
files = DictProperty(ForgeFile)
|
||||
|
||||
|
||||
class ForgeMcVersionInfo(JsonObject):
|
||||
latest = StringProperty()
|
||||
recommended = StringProperty()
|
||||
versions = ListProperty(StringProperty())
|
||||
|
||||
|
||||
class DerivedForgeIndex(JsonObject):
|
||||
versions = DictProperty(ForgeEntry)
|
||||
by_mcversion = DictProperty(ForgeMcVersionInfo)
|
||||
|
||||
|
||||
'''
|
||||
FML library mappings - these are added to legacy Forge versions because Forge no longer can download these
|
||||
by itself - the locations have changed and some of this has to be rehosted on PolyMC servers.
|
||||
@ -185,6 +191,8 @@ fmlLibsMapping["1.5.2"] = [
|
||||
"modList":"none"
|
||||
},
|
||||
'''
|
||||
|
||||
|
||||
class ForgeInstallerProfileInstallSection(JsonObject):
|
||||
profileName = StringProperty(required=True)
|
||||
target = StringProperty(required=True)
|
||||
@ -197,6 +205,7 @@ class ForgeInstallerProfileInstallSection(JsonObject):
|
||||
mirrorList = StringProperty(required=True)
|
||||
modList = StringProperty(exclude_if_none=True, default=None)
|
||||
|
||||
|
||||
class ForgeLibrary(MojangLibrary):
|
||||
url = StringProperty(exclude_if_none=True)
|
||||
serverreq = BooleanProperty(exclude_if_none=True, default=None)
|
||||
@ -204,11 +213,13 @@ class ForgeLibrary (MojangLibrary):
|
||||
checksums = ListProperty(StringProperty)
|
||||
comment = StringProperty()
|
||||
|
||||
|
||||
class ForgeVersionFile(MojangVersionFile):
|
||||
libraries = ListProperty(ForgeLibrary, exclude_if_none=True, default=None) # overrides Mojang libraries
|
||||
inheritsFrom = StringProperty()
|
||||
jar = StringProperty()
|
||||
|
||||
|
||||
'''
|
||||
"optionals": [
|
||||
{
|
||||
@ -224,6 +235,8 @@ class ForgeVersionFile (MojangVersionFile):
|
||||
}
|
||||
]
|
||||
'''
|
||||
|
||||
|
||||
class ForgeOptional(JsonObject):
|
||||
name = StringProperty()
|
||||
client = BooleanProperty()
|
||||
@ -235,24 +248,29 @@ class ForgeOptional (JsonObject):
|
||||
artifact = GradleSpecifierProperty()
|
||||
maven = StringProperty()
|
||||
|
||||
|
||||
class ForgeInstallerProfile(JsonObject):
|
||||
install = ObjectProperty(ForgeInstallerProfileInstallSection, required=True)
|
||||
versionInfo = ObjectProperty(ForgeVersionFile, required=True)
|
||||
optionals = ListProperty(ForgeOptional)
|
||||
|
||||
|
||||
class ForgeLegacyInfo(JsonObject):
|
||||
releaseTime = ISOTimestampProperty()
|
||||
size = IntegerProperty()
|
||||
sha256 = StringProperty()
|
||||
sha1 = StringProperty()
|
||||
|
||||
|
||||
class ForgeLegacyInfoList(JsonObject):
|
||||
number = DictProperty(ForgeLegacyInfo)
|
||||
|
||||
|
||||
class DataSpec(JsonObject):
|
||||
client = StringProperty()
|
||||
server = StringProperty()
|
||||
|
||||
|
||||
class ProcessorSpec(JsonObject):
|
||||
jar = StringProperty()
|
||||
classpath = ListProperty(StringProperty)
|
||||
@ -260,6 +278,7 @@ class ProcessorSpec(JsonObject):
|
||||
outputs = DictProperty(StringProperty)
|
||||
sides = ListProperty(StringProperty, exclude_if_none=True, default=None)
|
||||
|
||||
|
||||
# Note: This is only used in one version (1.12.2-14.23.5.2851) and we don't even use the installer profile in it.
|
||||
# It's here just so it parses and we can continue...
|
||||
class ForgeInstallerProfileV1_5(JsonObject):
|
||||
@ -279,6 +298,7 @@ class ForgeInstallerProfileV1_5(JsonObject):
|
||||
libraries = ListProperty(MojangLibrary)
|
||||
mirrorList = StringProperty(exclude_if_none=True, default=None)
|
||||
|
||||
|
||||
class ForgeInstallerProfileV2(JsonObject):
|
||||
_comment = ListProperty(StringProperty)
|
||||
spec = IntegerProperty()
|
||||
@ -296,6 +316,7 @@ class ForgeInstallerProfileV2(JsonObject):
|
||||
mirrorList = StringProperty(exclude_if_none=True, default=None)
|
||||
serverJarPath = StringProperty(exclude_if_none=True, default=None)
|
||||
|
||||
|
||||
class InstallerInfo(JsonObject):
|
||||
sha1hash = StringProperty()
|
||||
sha256hash = StringProperty()
|
||||
|
@ -9,17 +9,22 @@ loaderVersions = []
|
||||
intermediaryRecommended = []
|
||||
intermediaryVersions = []
|
||||
|
||||
|
||||
def mkdirs(path):
|
||||
if not os.path.exists(path):
|
||||
os.makedirs(path)
|
||||
|
||||
|
||||
mkdirs(PMC_DIR + "/net.fabricmc.fabric-loader")
|
||||
mkdirs(PMC_DIR + "/net.fabricmc.intermediary")
|
||||
|
||||
|
||||
def loadJarInfo(mavenKey):
|
||||
with open(UPSTREAM_DIR + "/fabric/jars/" + mavenKey.replace(":", ".") + ".json", 'r', encoding='utf-8') as jarInfoFile:
|
||||
with open(UPSTREAM_DIR + "/fabric/jars/" + mavenKey.replace(":", ".") + ".json", 'r',
|
||||
encoding='utf-8') as jarInfoFile:
|
||||
return FabricJarInfo(json.load(jarInfoFile))
|
||||
|
||||
|
||||
def processLoaderVersion(loaderVersion, it, loaderData):
|
||||
verStable = it["stable"]
|
||||
if (len(loaderRecommended) < 1) and verStable:
|
||||
@ -41,6 +46,7 @@ def processLoaderVersion(loaderVersion, it, loaderData):
|
||||
version.libraries.append(loaderLib)
|
||||
loaderVersions.append(version)
|
||||
|
||||
|
||||
def processIntermediaryVersion(it):
|
||||
intermediaryRecommended.append(it["version"])
|
||||
versionJarInfo = loadJarInfo(it["maven"])
|
||||
@ -55,11 +61,13 @@ def processIntermediaryVersion(it):
|
||||
version.libraries.append(mappingLib)
|
||||
intermediaryVersions.append(version)
|
||||
|
||||
|
||||
with open(UPSTREAM_DIR + "/fabric/meta-v2/loader.json", 'r', encoding='utf-8') as loaderVersionIndexFile:
|
||||
loaderVersionIndex = json.load(loaderVersionIndexFile)
|
||||
for it in loaderVersionIndex:
|
||||
version = it["version"]
|
||||
with open(UPSTREAM_DIR + "/fabric/loader-installer-json/" + version + ".json", 'r', encoding='utf-8') as loaderVersionFile:
|
||||
with open(UPSTREAM_DIR + "/fabric/loader-installer-json/" + version + ".json", 'r',
|
||||
encoding='utf-8') as loaderVersionFile:
|
||||
ldata = json.load(loaderVersionFile)
|
||||
ldata = FabricInstallerDataV1(ldata)
|
||||
processLoaderVersion(version, it, ldata)
|
||||
|
@ -8,11 +8,15 @@ from metautil import *
|
||||
PMC_DIR = os.environ["PMC_DIR"]
|
||||
UPSTREAM_DIR = os.environ["UPSTREAM_DIR"]
|
||||
|
||||
|
||||
def eprint(*args, **kwargs):
|
||||
print(*args, file=sys.stderr, **kwargs)
|
||||
|
||||
|
||||
# Contruct a set of libraries out of a Minecraft version file, for filtering.
|
||||
mcVersionCache = {}
|
||||
|
||||
|
||||
def loadMcVersionFilter(version):
|
||||
if version in mcVersionCache:
|
||||
return mcVersionCache[version]
|
||||
@ -24,11 +28,14 @@ def loadMcVersionFilter(version):
|
||||
mcVersionCache[version] = libSet
|
||||
return libSet
|
||||
|
||||
|
||||
'''
|
||||
Match a library coordinate to a set of library coordinates.
|
||||
* Block those that pass completely.
|
||||
* For others, block those with lower versions than in the set.
|
||||
'''
|
||||
|
||||
|
||||
def shouldIgnoreArtifact(libSet, match):
|
||||
for ver in libSet:
|
||||
if ver.group == match.group and ver.artifact == match.artifact and ver.classifier == match.classifier:
|
||||
@ -45,6 +52,7 @@ def shouldIgnoreArtifact(libSet, match):
|
||||
# No match found in the set - we need to keep this
|
||||
return False
|
||||
|
||||
|
||||
def versionFromProfile(profile, version):
|
||||
result = PolyMCVersionFile({"name": "Forge", "version": version.rawVersion, "uid": "net.minecraftforge"})
|
||||
mcversion = profile.install.minecraft
|
||||
@ -92,6 +100,7 @@ def versionFromProfile(profile, version):
|
||||
result.order = 5
|
||||
return result
|
||||
|
||||
|
||||
def versionFromModernizedInstaller(installerVersion: MojangVersionFile, version: ForgeVersion):
|
||||
eprint("Generating Modernized Forge %s." % version.longVersion)
|
||||
result = PolyMCVersionFile({"name": "Forge", "version": version.rawVersion, "uid": "net.minecraftforge"})
|
||||
@ -146,6 +155,7 @@ def versionFromModernizedInstaller(installerVersion : MojangVersionFile, version
|
||||
result.order = 5
|
||||
return result
|
||||
|
||||
|
||||
def versionFromLegacy(version, legacyinfo: ForgeLegacyInfo):
|
||||
result = PolyMCVersionFile({"name": "Forge", "version": version.rawVersion, "uid": "net.minecraftforge"})
|
||||
mcversion = version.mcversion_sane
|
||||
@ -171,7 +181,9 @@ def versionFromLegacy(version, legacyinfo : ForgeLegacyInfo):
|
||||
result.jarMods = [mainmod]
|
||||
return result
|
||||
|
||||
def versionFromBuildSystemInstaller(installerVersion : MojangVersionFile, installerProfile: ForgeInstallerProfileV2, version: ForgeVersion):
|
||||
|
||||
def versionFromBuildSystemInstaller(installerVersion: MojangVersionFile, installerProfile: ForgeInstallerProfileV2,
|
||||
version: ForgeVersion):
|
||||
eprint("Generating Forge %s." % version.longVersion)
|
||||
result = PolyMCVersionFile({"name": "Forge", "version": version.rawVersion, "uid": "net.minecraftforge"})
|
||||
result.requires = [DependencyEntry(uid='net.minecraft', equals=version.mcversion_sane)]
|
||||
@ -183,10 +195,12 @@ def versionFromBuildSystemInstaller(installerVersion : MojangVersionFile, instal
|
||||
# load the locally cached installer file info and use it to add the installer entry in the json
|
||||
with open(UPSTREAM_DIR + "/forge/installer_info/%s.json" % version.longVersion, 'r', encoding='utf-8') as f:
|
||||
installerInfo = InstallerInfo(json.load(f))
|
||||
InstallerLib = PolyMCLibrary(name=GradleSpecifier("net.minecraftforge:forge:%s:installer" % (version.longVersion)))
|
||||
InstallerLib = PolyMCLibrary(
|
||||
name=GradleSpecifier("net.minecraftforge:forge:%s:installer" % (version.longVersion)))
|
||||
InstallerLib.downloads = MojangLibraryDownloads()
|
||||
InstallerLib.downloads.artifact = MojangArtifact()
|
||||
InstallerLib.downloads.artifact.url = "https://files.minecraftforge.net/maven/%s" % (InstallerLib.name.getPath())
|
||||
InstallerLib.downloads.artifact.url = "https://files.minecraftforge.net/maven/%s" % (
|
||||
InstallerLib.name.getPath())
|
||||
InstallerLib.downloads.artifact.sha1 = installerInfo.sha1hash
|
||||
InstallerLib.downloads.artifact.size = installerInfo.size
|
||||
mavenLibs.append(InstallerLib)
|
||||
|
@ -3,13 +3,16 @@ from liteloaderutil import *
|
||||
PMC_DIR = os.environ["PMC_DIR"]
|
||||
UPSTREAM_DIR = os.environ["UPSTREAM_DIR"]
|
||||
|
||||
|
||||
# load the locally cached version list
|
||||
def loadLiteloaderJson():
|
||||
with open(UPSTREAM_DIR + "/liteloader/versions.json", 'r', encoding='utf-8') as f:
|
||||
return LiteloaderIndex(json.load(f))
|
||||
|
||||
|
||||
remoteVersionlist = loadLiteloaderJson()
|
||||
|
||||
|
||||
def processArtefacts(mcVersion, liteloader, notSnapshots):
|
||||
versions = []
|
||||
lookup = {}
|
||||
@ -50,6 +53,7 @@ def processArtefacts(mcVersion, liteloader, notSnapshots):
|
||||
latest = lookup[latestVersion]
|
||||
return versions, latest
|
||||
|
||||
|
||||
allVersions = []
|
||||
recommended = []
|
||||
for mcVersion, versionObject in remoteVersionlist.versions.items():
|
||||
|
@ -25,7 +25,7 @@ LOG4J_HASHES = {
|
||||
"sha1": "ca499d751f4ddd8afb016ef698c30be0da1d09f7",
|
||||
"size": 21268
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
# LWJGL versions we want
|
||||
passVariants = [
|
||||
@ -51,6 +51,7 @@ badVariants = [
|
||||
"0034e86cec334f9142ca4ace843c91eb649017fd", # 3.2.1 (2019-02-13 16:12:08+00:00)
|
||||
]
|
||||
|
||||
|
||||
def addOrGetBucket(buckets, rules):
|
||||
ruleHash = None
|
||||
if rules:
|
||||
@ -71,18 +72,22 @@ def addOrGetBucket(buckets, rules):
|
||||
buckets[ruleHash] = bucket
|
||||
return bucket
|
||||
|
||||
|
||||
def hashVersion(lwjgl):
|
||||
lwjglObjectCopy = copy.deepcopy(lwjgl)
|
||||
lwjglObjectCopy.releaseTime = datetime.datetime.fromtimestamp(0)
|
||||
return hashlib.sha1(json.dumps(lwjglObjectCopy.to_json(), sort_keys=True).encode("utf-8", "strict")).hexdigest()
|
||||
|
||||
|
||||
def sort_libs_by_name(library):
|
||||
return library.name
|
||||
|
||||
|
||||
LWJGLEntry = namedtuple('LWJGLEntry', ('version', 'sha1'))
|
||||
|
||||
lwjglVersionVariants = defaultdict(list)
|
||||
|
||||
|
||||
def addLWJGLVersion(versionVariants, lwjglObject):
|
||||
lwjglObjectCopy = copy.deepcopy(lwjglObject)
|
||||
libraries = list(lwjglObjectCopy.libraries)
|
||||
@ -101,6 +106,7 @@ def addLWJGLVersion(versionVariants, lwjglObject):
|
||||
print("!!! New variant for LWJGL version %s" % (lwjglVersion))
|
||||
versionVariants[lwjglVersion].append(LWJGLEntry(version=lwjglObjectCopy, sha1=lwjglObjectHash))
|
||||
|
||||
|
||||
def removePathsFromLib(lib):
|
||||
if pmcLib.downloads.artifact:
|
||||
pmcLib.downloads.artifact.path = None
|
||||
@ -108,6 +114,7 @@ def removePathsFromLib(lib):
|
||||
for key, value in pmcLib.downloads.classifiers.items():
|
||||
value.path = None
|
||||
|
||||
|
||||
def adaptNewStyleArguments(arguments):
|
||||
outarr = []
|
||||
# we ignore the jvm arguments entirely.
|
||||
@ -128,6 +135,7 @@ def adaptNewStyleArguments(arguments):
|
||||
pprint(arg)
|
||||
return ' '.join(outarr)
|
||||
|
||||
|
||||
def isOnlyMacOS(rules, specifier):
|
||||
allowsOSX = False
|
||||
allowsAll = False
|
||||
@ -185,7 +193,8 @@ for filename in os.listdir(UPSTREAM_DIR + '/mojang/versions'):
|
||||
else:
|
||||
# FIXME: workaround for insane log4j nonsense from December 2021. Probably needs adjustment.
|
||||
if pmcLib.name.isLog4j():
|
||||
replacementLib = PolyMCLibrary(name=GradleSpecifier("org.apache.logging.log4j:%s:%s" % (pmcLib.name.artifact, LOG4J_VERSION_OVERRIDE)))
|
||||
replacementLib = PolyMCLibrary(name=GradleSpecifier(
|
||||
"org.apache.logging.log4j:%s:%s" % (pmcLib.name.artifact, LOG4J_VERSION_OVERRIDE)))
|
||||
replacementLib.downloads = MojangLibraryDownloads()
|
||||
replacementLib.downloads.artifact = MojangArtifact()
|
||||
replacementLib.downloads.artifact.url = LOG4J_MAVEN_REPO % (replacementLib.name.getPath())
|
||||
@ -262,6 +271,7 @@ for filename in os.listdir(UPSTREAM_DIR + '/mojang/versions'):
|
||||
with open(filenameOut, 'w') as outfile:
|
||||
json.dump(versionFile.to_json(), outfile, sort_keys=True, indent=4)
|
||||
|
||||
|
||||
def processSingleVariant(lwjglVariant):
|
||||
lwjglVersion = lwjglVariant.version
|
||||
versionObj = copy.deepcopy(lwjglVariant)
|
||||
@ -276,7 +286,8 @@ def processSingleVariant(lwjglVariant):
|
||||
versionObj.uid = 'org.lwjgl3'
|
||||
versionObj.conflicts = [DependencyEntry(uid='org.lwjgl')]
|
||||
# remove jutils and jinput from LWJGL 3 -- this is a dependency that Mojang kept in, but doesn't belong there anymore
|
||||
filteredLibraries = list(filter(lambda lib: not lib.name.artifact in ["jutils", "jinput"], versionObj.libraries))
|
||||
filteredLibraries = list(
|
||||
filter(lambda lib: not lib.name.artifact in ["jutils", "jinput"], versionObj.libraries))
|
||||
versionObj.libraries = filteredLibraries
|
||||
else:
|
||||
raise Exception("LWJGL version not recognized: %s" % versionObj.version)
|
||||
@ -296,7 +307,8 @@ def processSingleVariant(lwjglVariant):
|
||||
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())
|
||||
print("Missing download for classifier!", versionObj.version, lib.name, bakedEntry,
|
||||
lib.downloads.classifiers.keys())
|
||||
good = False
|
||||
break
|
||||
if good:
|
||||
@ -329,7 +341,8 @@ for lwjglVersionVariant in lwjglVersionVariants:
|
||||
if decidedVariant and passedVariants == 1 and unknownVariants == 0:
|
||||
processSingleVariant(decidedVariant.version)
|
||||
else:
|
||||
raise Exception("No variant decided for version %s out of %d possible ones and %d unknown ones." % (lwjglVersionVariant, passedVariants, unknownVariants))
|
||||
raise Exception("No variant decided for version %s out of %d possible ones and %d unknown ones." % (
|
||||
lwjglVersionVariant, passedVariants, unknownVariants))
|
||||
|
||||
lwjglSharedData = PolyMCSharedPackageData(uid='org.lwjgl', name='LWJGL 2')
|
||||
lwjglSharedData.recommended = ['2.9.4-nightly-20150209']
|
||||
|
2
index.py
2
index.py
@ -5,6 +5,7 @@ from metautil import *
|
||||
|
||||
PMC_DIR = os.environ["PMC_DIR"]
|
||||
|
||||
|
||||
# take the hash type (like hashlib.md5) and filename, return hex string of hash
|
||||
def HashFile(hash, fname):
|
||||
hash_instance = hash()
|
||||
@ -13,6 +14,7 @@ def HashFile(hash, fname):
|
||||
hash_instance.update(chunk)
|
||||
return hash_instance.hexdigest()
|
||||
|
||||
|
||||
# ignore these files when indexing versions
|
||||
ignore = set(["index.json", "package.json", ".git"])
|
||||
|
||||
|
@ -8,7 +8,6 @@ import datetime
|
||||
from . import properties
|
||||
import re
|
||||
|
||||
|
||||
re_date = re.compile(r'^(\d{4})\D?(0[1-9]|1[0-2])\D?([12]\d|0[1-9]|3[01])$')
|
||||
re_time = re.compile(
|
||||
r'^([01]\d|2[0-3])\D?([0-5]\d)\D?([0-5]\d)?\D?(\d{3,6})?$')
|
||||
|
@ -10,7 +10,6 @@ from .exceptions import (
|
||||
from .base_properties import JsonProperty, DefaultProperty
|
||||
from .utils import check_type
|
||||
|
||||
|
||||
JsonObjectClassSettings = namedtuple('JsonObjectClassSettings', ['type_config'])
|
||||
|
||||
CLASS_SETTINGS_ATTR = '_$_class_settings'
|
||||
@ -60,6 +59,7 @@ class TypeConfig(object):
|
||||
instead of the default.
|
||||
|
||||
"""
|
||||
|
||||
def __init__(self, properties=None, string_conversions=None):
|
||||
self._properties = properties if properties is not None else {}
|
||||
|
||||
@ -108,11 +108,11 @@ class TypeConfig(object):
|
||||
result.append((pattern, conversion))
|
||||
return result
|
||||
|
||||
|
||||
META_ATTRS = ('properties', 'string_conversions', 'update_properties')
|
||||
|
||||
|
||||
class JsonObjectMeta(type):
|
||||
|
||||
class Meta(object):
|
||||
pass
|
||||
|
||||
@ -181,7 +181,6 @@ class _JsonObjectPrivateInstanceVariables(object):
|
||||
|
||||
@six.add_metaclass(JsonObjectMeta)
|
||||
class JsonObjectBase(object):
|
||||
|
||||
_allow_dynamic_properties = False
|
||||
_validate_required_lazily = False
|
||||
|
||||
|
@ -13,7 +13,6 @@ else:
|
||||
|
||||
|
||||
class JsonProperty(object):
|
||||
|
||||
default = None
|
||||
type_config = None
|
||||
|
||||
@ -124,7 +123,6 @@ class JsonProperty(object):
|
||||
|
||||
|
||||
class JsonContainerProperty(JsonProperty):
|
||||
|
||||
_type = default = None
|
||||
container_class = None
|
||||
|
||||
@ -290,7 +288,6 @@ class AssertTypeProperty(JsonProperty):
|
||||
|
||||
|
||||
class AbstractDateProperty(JsonProperty):
|
||||
|
||||
_type = None
|
||||
|
||||
def __init__(self, exact=False, *args, **kwargs):
|
||||
|
@ -3,6 +3,7 @@ from .base_properties import DefaultProperty
|
||||
from .utils import check_type, SimpleDict
|
||||
import copy
|
||||
|
||||
|
||||
class JsonArray(list):
|
||||
def __init__(self, _obj=None, wrapper=None, type_config=None):
|
||||
super(JsonArray, self).__init__()
|
||||
|
@ -14,7 +14,6 @@ from .base_properties import (
|
||||
)
|
||||
from .containers import JsonArray, JsonDict, JsonSet
|
||||
|
||||
|
||||
if sys.version > '3':
|
||||
unicode = str
|
||||
long = int
|
||||
@ -62,7 +61,6 @@ class DecimalProperty(JsonProperty):
|
||||
|
||||
|
||||
class DateProperty(AbstractDateProperty):
|
||||
|
||||
_type = datetime.date
|
||||
|
||||
def _wrap(self, value):
|
||||
@ -77,7 +75,6 @@ class DateProperty(AbstractDateProperty):
|
||||
|
||||
|
||||
class DateTimeProperty(AbstractDateProperty):
|
||||
|
||||
_type = datetime.datetime
|
||||
|
||||
def _wrap(self, value):
|
||||
@ -103,7 +100,6 @@ class DateTimeProperty(AbstractDateProperty):
|
||||
|
||||
|
||||
class TimeProperty(AbstractDateProperty):
|
||||
|
||||
_type = datetime.time
|
||||
|
||||
def _wrap(self, value):
|
||||
@ -124,7 +120,6 @@ class TimeProperty(AbstractDateProperty):
|
||||
|
||||
|
||||
class ObjectProperty(JsonContainerProperty):
|
||||
|
||||
default = lambda self: self.item_type()
|
||||
|
||||
def wrap(self, obj, string_conversions=None):
|
||||
@ -137,7 +132,6 @@ class ObjectProperty(JsonContainerProperty):
|
||||
|
||||
|
||||
class ListProperty(JsonContainerProperty):
|
||||
|
||||
_type = default = list
|
||||
container_class = JsonArray
|
||||
|
||||
@ -146,7 +140,6 @@ class ListProperty(JsonContainerProperty):
|
||||
|
||||
|
||||
class DictProperty(JsonContainerProperty):
|
||||
|
||||
_type = default = dict
|
||||
container_class = JsonDict
|
||||
|
||||
@ -155,7 +148,6 @@ class DictProperty(JsonContainerProperty):
|
||||
|
||||
|
||||
class SetProperty(JsonContainerProperty):
|
||||
|
||||
_type = default = set
|
||||
container_class = JsonSet
|
||||
|
||||
|
@ -16,6 +16,7 @@ class SimpleDict(dict):
|
||||
Re-implements destructive methods of dict
|
||||
to use only setitem and getitem and delitem
|
||||
"""
|
||||
|
||||
def update(self, E=None, **F):
|
||||
for dct in (E, F):
|
||||
if dct:
|
||||
|
@ -1,6 +1,5 @@
|
||||
from metautil import *
|
||||
|
||||
|
||||
'''
|
||||
"repo":{
|
||||
"stream":"RELEASE",
|
||||
@ -9,12 +8,15 @@ from metautil import *
|
||||
"classifier":""
|
||||
},
|
||||
'''
|
||||
|
||||
|
||||
class LiteloaderRepo(JsonObject):
|
||||
stream = StringProperty(required=True)
|
||||
type = StringProperty(required=True)
|
||||
url = StringProperty(required=True)
|
||||
classifier = StringProperty(required=True)
|
||||
|
||||
|
||||
'''
|
||||
"53639d52340479ccf206a04f5e16606f":{
|
||||
"tweakClass":"com.mumfrey.liteloader.launch.LiteLoaderTweaker",
|
||||
@ -36,6 +38,8 @@ class LiteloaderRepo(JsonObject):
|
||||
"timestamp":"1367366420"
|
||||
},
|
||||
'''
|
||||
|
||||
|
||||
class LiteloaderArtefact(JsonObject):
|
||||
tweakClass = StringProperty(required=True)
|
||||
libraries = ListProperty(PolyMCLibrary, required=True)
|
||||
@ -48,21 +52,26 @@ class LiteloaderArtefact(JsonObject):
|
||||
srcJar = StringProperty(default=None, exclude_if_none=True)
|
||||
mcpJar = StringProperty(default=None, exclude_if_none=True)
|
||||
|
||||
|
||||
class LiteloaderDev(JsonObject):
|
||||
fgVersion = StringProperty(default=None, exclude_if_none=True)
|
||||
mappings = StringProperty(required=None, exclude_if_none=True)
|
||||
mcp = StringProperty(default=None, exclude_if_none=True)
|
||||
|
||||
|
||||
class LiteloaderArtefacts(JsonObject):
|
||||
liteloader = DictProperty(LiteloaderArtefact, name="com.mumfrey:liteloader", required=True)
|
||||
|
||||
|
||||
class LiteloaderSnapshot(LiteloaderArtefact):
|
||||
lastSuccessfulBuild = IntegerProperty()
|
||||
|
||||
|
||||
class LiteloaderSnapshots(JsonObject):
|
||||
libraries = ListProperty(PolyMCLibrary, required=True)
|
||||
liteloader = DictProperty(LiteloaderSnapshot, name="com.mumfrey:liteloader", required=True)
|
||||
|
||||
|
||||
'''
|
||||
"1.10.2":{
|
||||
"dev": { ... },
|
||||
@ -75,12 +84,15 @@ class LiteloaderSnapshots(JsonObject):
|
||||
...
|
||||
}
|
||||
'''
|
||||
|
||||
|
||||
class LiteloaderEntry(JsonObject):
|
||||
dev = ObjectProperty(LiteloaderDev, default=None, exclude_if_none=True)
|
||||
repo = ObjectProperty(LiteloaderRepo, required=True)
|
||||
artefacts = ObjectProperty(LiteloaderArtefacts, default=None, exclude_if_none=True)
|
||||
snapshots = ObjectProperty(LiteloaderSnapshots, default=None, exclude_if_none=True)
|
||||
|
||||
|
||||
'''
|
||||
"meta":{
|
||||
"description":"LiteLoader is a lightweight mod bootstrap designed to provide basic loader functionality for mods which don't need to modify game mechanics.",
|
||||
@ -90,6 +102,8 @@ class LiteloaderEntry(JsonObject):
|
||||
"updatedTime":1487763247
|
||||
},
|
||||
'''
|
||||
|
||||
|
||||
class LiteloaderMeta(JsonObject):
|
||||
description = StringProperty(required=True)
|
||||
authors = StringProperty(required=True)
|
||||
@ -97,6 +111,7 @@ class LiteloaderMeta(JsonObject):
|
||||
updated = ISOTimestampProperty(required=True)
|
||||
updatedTime = IntegerProperty(required=True)
|
||||
|
||||
|
||||
# The raw Forge version index
|
||||
class LiteloaderIndex(JsonObject):
|
||||
meta = ObjectProperty(LiteloaderMeta, required=True)
|
||||
|
57
metautil.py
57
metautil.py
@ -7,8 +7,8 @@ from jsonobject import *
|
||||
|
||||
PMC_DIR = os.environ["PMC_DIR"]
|
||||
|
||||
class ISOTimestampProperty(AbstractDateProperty):
|
||||
|
||||
class ISOTimestampProperty(AbstractDateProperty):
|
||||
_type = datetime.datetime
|
||||
|
||||
def _wrap(self, value):
|
||||
@ -68,7 +68,6 @@ class GradleSpecifier:
|
||||
def getPath(self):
|
||||
return self.getBase() + self.getFilename()
|
||||
|
||||
|
||||
def __repr__(self):
|
||||
return "GradleSpecifier('" + self.toString() + "')"
|
||||
|
||||
@ -78,7 +77,6 @@ class GradleSpecifier:
|
||||
def isLog4j(self):
|
||||
return self.group == "org.apache.logging.log4j"
|
||||
|
||||
|
||||
def __lt__(self, other):
|
||||
return self.toString() < other.toString()
|
||||
|
||||
@ -91,6 +89,7 @@ class GradleSpecifier:
|
||||
def __hash__(self):
|
||||
return self.toString().__hash__()
|
||||
|
||||
|
||||
class GradleSpecifierProperty(JsonProperty):
|
||||
def wrap(self, value):
|
||||
return GradleSpecifier(value)
|
||||
@ -98,6 +97,7 @@ class GradleSpecifierProperty(JsonProperty):
|
||||
def unwrap(self, value):
|
||||
return value, value.toString()
|
||||
|
||||
|
||||
'''
|
||||
Mojang index files look like this:
|
||||
{
|
||||
@ -119,6 +119,7 @@ Mojang index files look like this:
|
||||
}
|
||||
'''
|
||||
|
||||
|
||||
class MojangIndexEntry(JsonObject):
|
||||
id = StringProperty()
|
||||
releaseTime = ISOTimestampProperty()
|
||||
@ -128,10 +129,12 @@ class MojangIndexEntry(JsonObject):
|
||||
sha1 = StringProperty(exclude_if_none=True, default=None)
|
||||
complianceLevel = IntegerProperty(exclude_if_none=True, default=None)
|
||||
|
||||
|
||||
class MojangIndex(JsonObject):
|
||||
latest = DictProperty(StringProperty)
|
||||
versions = ListProperty(MojangIndexEntry)
|
||||
|
||||
|
||||
class MojangIndexWrap:
|
||||
def __init__(self, json):
|
||||
self.index = MojangIndex.wrap(json)
|
||||
@ -147,20 +150,25 @@ class MojangArtifactBase (JsonObject):
|
||||
size = IntegerProperty(exclude_if_none=True, default=None)
|
||||
url = StringProperty()
|
||||
|
||||
|
||||
class MojangArtifact(MojangArtifactBase):
|
||||
path = StringProperty(exclude_if_none=True, default=None)
|
||||
|
||||
|
||||
class MojangAssets(MojangArtifactBase):
|
||||
id = StringProperty()
|
||||
totalSize = IntegerProperty()
|
||||
|
||||
|
||||
class MojangLibraryDownloads(JsonObject):
|
||||
artifact = ObjectProperty(MojangArtifact, exclude_if_none=True, default=None)
|
||||
classifiers = DictProperty(MojangArtifact, exclude_if_none=True, default=None)
|
||||
|
||||
|
||||
class MojangLibraryExtractRules(JsonObject):
|
||||
exclude = ListProperty(StringProperty)
|
||||
|
||||
|
||||
'''
|
||||
"rules": [
|
||||
{
|
||||
@ -175,14 +183,17 @@ class MojangLibraryExtractRules(JsonObject):
|
||||
]
|
||||
'''
|
||||
|
||||
|
||||
class OSRule(JsonObject):
|
||||
name = StringProperty(choices=["osx", "linux", "windows"], required=True)
|
||||
version = StringProperty(exclude_if_none=True, default=None)
|
||||
|
||||
|
||||
class MojangRule(JsonObject):
|
||||
action = StringProperty(choices=["allow", "disallow"], required=True)
|
||||
os = ObjectProperty(OSRule, exclude_if_none=True, default=None)
|
||||
|
||||
|
||||
class MojangLibrary(JsonObject):
|
||||
extract = ObjectProperty(MojangLibraryExtractRules, exclude_if_none=True, default=None)
|
||||
name = GradleSpecifierProperty(required=True)
|
||||
@ -190,35 +201,44 @@ class MojangLibrary (JsonObject):
|
||||
natives = DictProperty(StringProperty, exclude_if_none=True, default=None)
|
||||
rules = ListProperty(MojangRule, exclude_if_none=True, default=None)
|
||||
|
||||
|
||||
class MojangLoggingArtifact(MojangArtifactBase):
|
||||
id = StringProperty()
|
||||
|
||||
|
||||
class MojangLogging(JsonObject):
|
||||
file = ObjectProperty(MojangLoggingArtifact, required=True)
|
||||
argument = StringProperty(required=True)
|
||||
type = StringProperty(required=True, choices=["log4j2-xml"])
|
||||
|
||||
|
||||
class MojangArguments(JsonObject):
|
||||
game = ListProperty(exclude_if_none=True, default=None)
|
||||
jvm = ListProperty(exclude_if_none=True, default=None)
|
||||
|
||||
|
||||
class JavaVersion(JsonObject):
|
||||
component = StringProperty(default="jre-legacy")
|
||||
majorVersion = IntegerProperty(default=8)
|
||||
|
||||
|
||||
class UnknownVersionException(Exception):
|
||||
"""Exception raised for unknown Mojang version file format versions.
|
||||
|
||||
Attributes:
|
||||
message -- explanation of the error
|
||||
"""
|
||||
|
||||
def __init__(self, message):
|
||||
self.message = message
|
||||
|
||||
|
||||
def validateSupportedMojangVersion(version):
|
||||
supportedVersion = 21
|
||||
if version > supportedVersion:
|
||||
raise UnknownVersionException("Unsupported Mojang format version: %d. Max supported is: %d" % (version, supportedVersion))
|
||||
raise UnknownVersionException(
|
||||
"Unsupported Mojang format version: %d. Max supported is: %d" % (version, supportedVersion))
|
||||
|
||||
|
||||
class MojangVersionFile(JsonObject):
|
||||
arguments = ObjectProperty(MojangArguments, exclude_if_none=True, default=None)
|
||||
@ -230,7 +250,8 @@ class MojangVersionFile (JsonObject):
|
||||
mainClass = StringProperty(exclude_if_none=True, default=None)
|
||||
processArguments = StringProperty(exclude_if_none=True, default=None)
|
||||
minecraftArguments = StringProperty(exclude_if_none=True, default=None)
|
||||
minimumLauncherVersion = IntegerProperty(exclude_if_none=True, default=None, validators=validateSupportedMojangVersion)
|
||||
minimumLauncherVersion = IntegerProperty(exclude_if_none=True, default=None,
|
||||
validators=validateSupportedMojangVersion)
|
||||
releaseTime = ISOTimestampProperty(exclude_if_none=True, default=None)
|
||||
time = ISOTimestampProperty(exclude_if_none=True, default=None)
|
||||
type = StringProperty(exclude_if_none=True, default=None)
|
||||
@ -239,23 +260,31 @@ class MojangVersionFile (JsonObject):
|
||||
complianceLevel = IntegerProperty(exclude_if_none=True, default=None)
|
||||
javaVersion = ObjectProperty(JavaVersion, exclude_if_none=True, default=None)
|
||||
|
||||
|
||||
CurrentPolyMCFormatVersion = 1
|
||||
|
||||
|
||||
def validateSupportedPolyMCVersion(version):
|
||||
if version > CurrentPolyMCFormatVersion:
|
||||
raise UnknownVersionException("Unsupported PolyMC format version: %d. Max supported is: %d" % (version, CurrentPolyMCFormatVersion))
|
||||
raise UnknownVersionException(
|
||||
"Unsupported PolyMC format version: %d. Max supported is: %d" % (version, CurrentPolyMCFormatVersion))
|
||||
|
||||
|
||||
class PolyMCLibrary(MojangLibrary):
|
||||
url = StringProperty(exclude_if_none=True, default=None)
|
||||
mmcHint = StringProperty(name="MMC-hint", exclude_if_none=True, default=None) # this is supposed to be MMC-hint!
|
||||
|
||||
|
||||
class VersionedJsonObject(JsonObject):
|
||||
formatVersion = IntegerProperty(default=CurrentPolyMCFormatVersion, validators=validateSupportedPolyMCVersion)
|
||||
|
||||
|
||||
class DependencyEntry(JsonObject):
|
||||
uid = StringProperty(required=True)
|
||||
equals = StringProperty(exclude_if_none=True, default=None)
|
||||
suggests = StringProperty(exclude_if_none=True, default=None)
|
||||
|
||||
|
||||
class PolyMCVersionFile(VersionedJsonObject):
|
||||
name = StringProperty(required=True)
|
||||
version = StringProperty(required=True)
|
||||
@ -277,12 +306,14 @@ class PolyMCVersionFile (VersionedJsonObject):
|
||||
addTweakers = ListProperty(StringProperty, name="+tweakers", exclude_if_none=True, default=None)
|
||||
order = IntegerProperty(exclude_if_none=True, default=None)
|
||||
|
||||
|
||||
class UnknownComplianceLevelException(Exception):
|
||||
"""Exception raised for unknown Mojang compliance level
|
||||
|
||||
Attributes:
|
||||
message -- explanation of the error
|
||||
"""
|
||||
|
||||
def __init__(self, message):
|
||||
self.message = message
|
||||
|
||||
@ -327,9 +358,11 @@ def MojangToPolyMC (file, name, uid, version):
|
||||
pmcFile.addTraits = []
|
||||
pmcFile.addTraits.append("XR:Initial")
|
||||
else:
|
||||
raise UnknownComplianceLevelException("Unsupported Mojang compliance level: %d. Max supported is: %d" % (file.complianceLevel, maxSupportedLevel))
|
||||
raise UnknownComplianceLevelException("Unsupported Mojang compliance level: %d. Max supported is: %d" % (
|
||||
file.complianceLevel, maxSupportedLevel))
|
||||
return pmcFile
|
||||
|
||||
|
||||
class PolyMCSharedPackageData(VersionedJsonObject):
|
||||
name = StringProperty(required=True)
|
||||
uid = StringProperty(required=True)
|
||||
@ -345,6 +378,7 @@ class PolyMCSharedPackageData(VersionedJsonObject):
|
||||
except EnvironmentError as e:
|
||||
print("Error while trying to save shared packaged data for %s:" % self.uid, e)
|
||||
|
||||
|
||||
def writeSharedPackageData(uid, name):
|
||||
desc = PolyMCSharedPackageData({
|
||||
'name': name,
|
||||
@ -353,10 +387,12 @@ def writeSharedPackageData(uid, name):
|
||||
with open(PMC_DIR + "/%s/package.json" % uid, 'w') as file:
|
||||
json.dump(desc.to_json(), file, sort_keys=True, indent=4)
|
||||
|
||||
|
||||
def readSharedPackageData(uid):
|
||||
with open(PMC_DIR + "/%s/package.json" % uid, 'r') as file:
|
||||
return PolyMCSharedPackageData(json.load(file))
|
||||
|
||||
|
||||
class PolyMCVersionIndexEntry(JsonObject):
|
||||
version = StringProperty()
|
||||
type = StringProperty(exclude_if_none=True, default=None)
|
||||
@ -367,19 +403,23 @@ class PolyMCVersionIndexEntry(JsonObject):
|
||||
volatile = BooleanProperty(exclude_if_none=True, default=None)
|
||||
sha256 = StringProperty()
|
||||
|
||||
|
||||
class PolyMCVersionIndex(VersionedJsonObject):
|
||||
name = StringProperty()
|
||||
uid = StringProperty()
|
||||
versions = ListProperty(PolyMCVersionIndexEntry)
|
||||
|
||||
|
||||
class PolyMCPackageIndexEntry(JsonObject):
|
||||
name = StringProperty()
|
||||
uid = StringProperty()
|
||||
sha256 = StringProperty()
|
||||
|
||||
|
||||
class PolyMCPackageIndex(VersionedJsonObject):
|
||||
packages = ListProperty(PolyMCPackageIndexEntry)
|
||||
|
||||
|
||||
'''
|
||||
The PolyMC static override file for legacy looks like this:
|
||||
{
|
||||
@ -399,15 +439,18 @@ The PolyMC static override file for legacy looks like this:
|
||||
}
|
||||
'''
|
||||
|
||||
|
||||
class LegacyOverrideEntry(JsonObject):
|
||||
releaseTime = ISOTimestampProperty(exclude_if_none=True, default=None)
|
||||
mainClass = StringProperty(exclude_if_none=True, default=None)
|
||||
appletClass = StringProperty(exclude_if_none=True, default=None)
|
||||
addTraits = ListProperty(StringProperty, name="+traits", exclude_if_none=True, default=None)
|
||||
|
||||
|
||||
class LegacyOverrideIndex(JsonObject):
|
||||
versions = DictProperty(LegacyOverrideEntry)
|
||||
|
||||
|
||||
def ApplyLegacyOverride(pmcFile, legacyOverride):
|
||||
# simply hard override classes
|
||||
pmcFile.mainClass = legacyOverride.mainClass
|
||||
|
@ -11,10 +11,12 @@ UPSTREAM_DIR = os.environ["UPSTREAM_DIR"]
|
||||
forever_cache = FileCache('caches/http_cache', forever=True)
|
||||
sess = CacheControl(requests.Session(), forever_cache)
|
||||
|
||||
|
||||
def mkdirs(path):
|
||||
if not os.path.exists(path):
|
||||
os.makedirs(path)
|
||||
|
||||
|
||||
def filehash(filename, hashtype, blocksize=65536):
|
||||
hash = hashtype()
|
||||
with open(filename, "rb") as f:
|
||||
@ -22,12 +24,14 @@ def filehash(filename, hashtype, blocksize=65536):
|
||||
hash.update(block)
|
||||
return hash.hexdigest()
|
||||
|
||||
|
||||
def get_maven_url(mavenKey, server, ext):
|
||||
mavenParts = mavenKey.split(":", 3)
|
||||
mavenVerUrl = server + mavenParts[0].replace(".", "/") + "/" + mavenParts[1] + "/" + mavenParts[2] + "/"
|
||||
mavenUrl = mavenVerUrl + mavenParts[1] + "-" + mavenParts[2] + ext
|
||||
return mavenUrl
|
||||
|
||||
|
||||
def get_json_file(path, url):
|
||||
with open(path, 'w', encoding='utf-8') as f:
|
||||
r = sess.get(url)
|
||||
@ -36,6 +40,7 @@ def get_json_file(path, url):
|
||||
json.dump(version_json, f, sort_keys=True, indent=4)
|
||||
return version_json
|
||||
|
||||
|
||||
def get_binary_file(path, url):
|
||||
with open(path, 'w', encoding='utf-8') as f:
|
||||
r = sess.get(url)
|
||||
@ -44,6 +49,7 @@ def get_binary_file(path, url):
|
||||
for chunk in r.iter_content(chunk_size=128):
|
||||
f.write(chunk)
|
||||
|
||||
|
||||
def compute_jar_file(path, url):
|
||||
jarPath = path + ".jar"
|
||||
get_binary_file(jarPath, url)
|
||||
@ -62,13 +68,15 @@ def compute_jar_file(path, url):
|
||||
with open(path + ".json", 'w') as outfile:
|
||||
json.dump(data.to_json(), outfile, sort_keys=True, indent=4)
|
||||
|
||||
|
||||
mkdirs(UPSTREAM_DIR + "/fabric/meta-v2")
|
||||
mkdirs(UPSTREAM_DIR + "/fabric/loader-installer-json")
|
||||
mkdirs(UPSTREAM_DIR + "/fabric/jars")
|
||||
|
||||
# get the version list for each component we are interested in
|
||||
for component in ["intermediary", "loader"]:
|
||||
index = get_json_file(UPSTREAM_DIR + "/fabric/meta-v2/" + component + ".json", "https://meta.fabricmc.net/v2/versions/" + component)
|
||||
index = get_json_file(UPSTREAM_DIR + "/fabric/meta-v2/" + component + ".json",
|
||||
"https://meta.fabricmc.net/v2/versions/" + component)
|
||||
for it in index:
|
||||
jarMavenUrl = get_maven_url(it["maven"], "https://maven.fabricmc.net/", ".jar")
|
||||
compute_jar_file(UPSTREAM_DIR + "/fabric/jars/" + it["maven"].replace(":", "."), jarMavenUrl)
|
||||
|
@ -18,9 +18,11 @@ from metautil import *
|
||||
|
||||
UPSTREAM_DIR = os.environ["UPSTREAM_DIR"]
|
||||
|
||||
|
||||
def eprint(*args, **kwargs):
|
||||
print(*args, file=sys.stderr, **kwargs)
|
||||
|
||||
|
||||
def filehash(filename, hashtype, blocksize=65536):
|
||||
hash = hashtype()
|
||||
with open(filename, "rb") as f:
|
||||
@ -28,6 +30,7 @@ def filehash(filename, hashtype, blocksize=65536):
|
||||
hash.update(block)
|
||||
return hash.hexdigest()
|
||||
|
||||
|
||||
forever_cache = FileCache('caches/http_cache', forever=True)
|
||||
sess = CacheControl(requests.Session(), forever_cache)
|
||||
|
||||
@ -73,7 +76,9 @@ for promoKey, shortversion in promotions_json.get('promos').items():
|
||||
else:
|
||||
assert False
|
||||
|
||||
versionExpression = re.compile("^(?P<mc>[0-9a-zA-Z_\\.]+)-(?P<ver>[0-9\\.]+\\.(?P<build>[0-9]+))(-(?P<branch>[a-zA-Z0-9\\.]+))?$")
|
||||
versionExpression = re.compile(
|
||||
"^(?P<mc>[0-9a-zA-Z_\\.]+)-(?P<ver>[0-9\\.]+\\.(?P<build>[0-9]+))(-(?P<branch>[a-zA-Z0-9\\.]+))?$")
|
||||
|
||||
|
||||
def getSingleForgeFilesManifest(longversion):
|
||||
pathThing = UPSTREAM_DIR + "/forge/files_manifests/%s.json" % longversion
|
||||
@ -138,6 +143,7 @@ def getSingleForgeFilesManifest(longversion):
|
||||
|
||||
return retDict
|
||||
|
||||
|
||||
print("")
|
||||
print("Making dirs...")
|
||||
os.makedirs(UPSTREAM_DIR + "/forge/jars/", exist_ok=True)
|
||||
|
@ -11,13 +11,14 @@ from liteloaderutil import *
|
||||
|
||||
UPSTREAM_DIR = os.environ["UPSTREAM_DIR"]
|
||||
|
||||
|
||||
def eprint(*args, **kwargs):
|
||||
print(*args, file=sys.stderr, **kwargs)
|
||||
|
||||
|
||||
forever_cache = FileCache('caches/http_cache', forever=True)
|
||||
sess = CacheControl(requests.Session(), forever_cache)
|
||||
|
||||
|
||||
# get the remote version list
|
||||
r = sess.get('http://dl.liteloader.com/versions/versions.json')
|
||||
r.raise_for_status()
|
||||
|
@ -8,6 +8,7 @@ UPSTREAM_DIR = os.environ["UPSTREAM_DIR"]
|
||||
forever_cache = FileCache('caches/http_cache', forever=True)
|
||||
sess = CacheControl(requests.Session(), forever_cache)
|
||||
|
||||
|
||||
def get_version_file(path, url):
|
||||
with open(path, 'w', encoding='utf-8') as f:
|
||||
r = sess.get(url)
|
||||
@ -18,6 +19,7 @@ def get_version_file(path, url):
|
||||
json.dump(version_json, f, sort_keys=True, indent=4)
|
||||
return assetId, assetUrl
|
||||
|
||||
|
||||
def get_file(path, url):
|
||||
with open(path, 'w', encoding='utf-8') as f:
|
||||
r = sess.get(url)
|
||||
@ -25,6 +27,7 @@ def get_file(path, url):
|
||||
version_json = r.json()
|
||||
json.dump(version_json, f, sort_keys=True, indent=4)
|
||||
|
||||
|
||||
# get the local version list
|
||||
localVersionlist = None
|
||||
try:
|
||||
|
Loading…
x
Reference in New Issue
Block a user