Compare commits
4 Commits
f60f2eb376
...
1e526899ad
| Author | SHA1 | Date | |
|---|---|---|---|
| 1e526899ad | |||
| 7a0ae4eb99 | |||
| fbf7551fc2 | |||
| 0b6fc9174e |
32
package-lock.json
generated
32
package-lock.json
generated
@ -4,15 +4,47 @@
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"flex-exec": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/flex-exec/-/flex-exec-1.0.0.tgz",
|
||||
"integrity": "sha1-BpdLaFMoOdKhLDLevNsSN4IA/fA="
|
||||
},
|
||||
"follow-redirects": {
|
||||
"version": "1.13.0",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz",
|
||||
"integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA=="
|
||||
},
|
||||
"gift": {
|
||||
"version": "0.10.2",
|
||||
"resolved": "https://registry.npmjs.org/gift/-/gift-0.10.2.tgz",
|
||||
"integrity": "sha512-wC9aKnQpjfOTWX+JG4DPJkS89ux6sl8EN4hXhv/2vBoXCDTEz1JiTeGTSeuKYlCqIgUFM1JwPVym34Sys3hvzw==",
|
||||
"requires": {
|
||||
"flex-exec": "^1.0.0",
|
||||
"underscore": "^1.8.3"
|
||||
}
|
||||
},
|
||||
"gradle-to-js": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/gradle-to-js/-/gradle-to-js-2.0.0.tgz",
|
||||
"integrity": "sha512-eoYJiSoreHG0cS5aUmv7ISJhajuULlqdqG3QKVti6x1EFkBXE8rGH6ipGKWEesXpCkfNgzBrhzo5ztIH1JWZMw==",
|
||||
"requires": {
|
||||
"lodash.merge": "4.6.2"
|
||||
}
|
||||
},
|
||||
"lodash.merge": {
|
||||
"version": "4.6.2",
|
||||
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
|
||||
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
|
||||
},
|
||||
"node-json-minify": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/node-json-minify/-/node-json-minify-1.0.0.tgz",
|
||||
"integrity": "sha1-e7NDL5ZYtr6x2ZP9XVOzyinQ15w="
|
||||
},
|
||||
"underscore": {
|
||||
"version": "1.12.0",
|
||||
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.0.tgz",
|
||||
"integrity": "sha512-21rQzss/XPMjolTiIezSu3JAjgagXKROtNrYFEOWK109qY1Uv2tVjPTZ1ci2HgvQDA16gHYSthQIJfB+XId/rQ=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -14,6 +14,8 @@
|
||||
"license": "LGPL-3.0",
|
||||
"dependencies": {
|
||||
"follow-redirects": "^1.13.0",
|
||||
"gift": "^0.10.2",
|
||||
"gradle-to-js": "^2.0.0",
|
||||
"node-json-minify": "^1.0.0"
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,6 +5,7 @@ function main() {
|
||||
let downloadStarted = false;
|
||||
let dep = new Map();
|
||||
mods_lock = new Map(Object.entries(mods_lock));
|
||||
if(global.config.mods.curse.length === 0) globCallback("curse", {});
|
||||
global.config.mods.curse.forEach(mod => {
|
||||
getData(`search?categoryId=0&gameId=432&gameVersion=${encodeURI(global.config.gameVersion)}&index=0&pageSize=1&searchFilter=${encodeURI(mod)}§ionId=6&sort=0`, (result) => { // resolve projectID
|
||||
resolveDep(result[0].id, downloadMods);
|
||||
@ -63,7 +64,7 @@ function main() {
|
||||
function downloadMods() {
|
||||
if(!downloadStarted) {
|
||||
downloadStarted = true;
|
||||
globCallback(Object.fromEntries(dep));
|
||||
globCallback("curse", Object.fromEntries(dep));
|
||||
dep.forEach((mod, modId) => {
|
||||
let path = getPath(mod)
|
||||
if(mods_lock.has(modId)) {
|
||||
|
||||
95
src/git.js
Normal file
95
src/git.js
Normal file
@ -0,0 +1,95 @@
|
||||
const git = require("gift");
|
||||
const glob = require("glob");
|
||||
const childProcess = require("child_process");
|
||||
const fs = require("fs");
|
||||
const g2js = require('gradle-to-js/lib/parser');
|
||||
let modsLock;
|
||||
let globCallback;
|
||||
let loopCounter = 0;
|
||||
function main () {
|
||||
modsLock = new Map(Object.entries(modsLock));
|
||||
let deleteMods = new Map(modsLock);
|
||||
let cacheDir = process.env.XDG_CACHE_HOME;
|
||||
if(cacheDir == null) cacheDir = `${process.env.HOME}/.cache`;
|
||||
let repoPathRoot = `${cacheDir}/minecraft-mod-packager`;
|
||||
global.config.mods.git.forEach((gitRepo) => {
|
||||
++loopCounter;
|
||||
deleteMods.delete(gitRepo.url);
|
||||
let repoPath = `${repoPathRoot}/${gitRepo.url.replace("://", "+")}/${gitRepo.branch}`;
|
||||
fs.access(repoPath, (err) => {
|
||||
if(err) {
|
||||
if(err.code !== "ENOENT") throw err;
|
||||
git.clone(gitRepo.url, repoPath, undefined, gitRepo.branch, (err, repo) => {
|
||||
if(err) throw err;
|
||||
build(repo, repoPath, gitRepo);
|
||||
});
|
||||
}
|
||||
else {
|
||||
let repo = git(repoPath);
|
||||
repo.pull(["origin"], gitRepo.branch, (err) => {
|
||||
if(err) throw err;
|
||||
build(repo, repoPath, gitRepo);
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
deleteMods.forEach((mod, url) => {
|
||||
modsLock.delete(url);
|
||||
fs.unlink(modPath(mod.filename), (err) => {
|
||||
if(err) throw err;
|
||||
});
|
||||
});
|
||||
mayCb();
|
||||
}
|
||||
|
||||
function build(repo, repoPath, gitRepo) {
|
||||
if(modsLock.has(gitRepo.url)) newLock = modsLock.get(gitRepo.url);
|
||||
else {
|
||||
newLock = {};
|
||||
modsLock.set(gitRepo.url, newLock);
|
||||
}
|
||||
repo.current_commit((err, commit) => {
|
||||
if(err) throw err;
|
||||
if(commit.id === newLock.commitId) cbDecrease();
|
||||
else {
|
||||
newLock.commitId = commit.id;
|
||||
childProcess.execFile("gradle", ["build"], {cwd: repoPath}, (err) => {
|
||||
if(err) throw err;
|
||||
let buildPath = `${repoPath}/build/libs`;
|
||||
fs.readFile(`${repoPath}/gradle.properties`, "utf-8", (err, data) => {
|
||||
if(err) throw err;
|
||||
g2js.parseText(data).then((gradleProp) => {
|
||||
let modFile = `${gradleProp.archives_base_name}-${gradleProp.mod_version}.jar`;
|
||||
if(newLock.filename != null) fs.unlink(`mods/${newLock.filename}`, (err) => {
|
||||
if(err) throw err;
|
||||
});
|
||||
fs.copyFile(`${buildPath}/${modFile}`, `mods/${modFile}`, (err) => {
|
||||
if(err) throw err;
|
||||
});
|
||||
newLock.filename = modFile;
|
||||
cbDecrease();
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function cbDecrease() {
|
||||
--loopCounter;
|
||||
mayCb();
|
||||
}
|
||||
|
||||
function mayCb() {
|
||||
if(loopCounter <= 0) globCallback("git", Object.fromEntries(modsLock));
|
||||
}
|
||||
|
||||
function modPath(filename) {
|
||||
return `mods/${filename}`;
|
||||
}
|
||||
|
||||
module.exports = (mods_lock_p, cb) => {
|
||||
globCallback = cb;
|
||||
modsLock = mods_lock_p;
|
||||
main()
|
||||
}
|
||||
@ -17,14 +17,15 @@ try {
|
||||
}
|
||||
catch(err) {
|
||||
if(err.errno !== -2) throw err;
|
||||
modsLock = {curse: new Map()};
|
||||
modsLock = {curse: {}, git: {}};
|
||||
}
|
||||
const numberCallback = 1;
|
||||
const numberCallback = 2;
|
||||
let callbackCounter = 0;
|
||||
require("./curse.js")(modsLock.curse, finnish);
|
||||
require("./git.js")(modsLock.git, finnish);
|
||||
|
||||
function finnish(curse) {
|
||||
save_mods_lock.curse = curse;
|
||||
function finnish(name, data) {
|
||||
save_mods_lock[name] = data;
|
||||
if(++callbackCounter == numberCallback) {
|
||||
fs.writeFile(modLockPath, JSON.stringify(save_mods_lock), (err) => {
|
||||
if(err) throw err;
|
||||
|
||||
Reference in New Issue
Block a user