🚚 Add command-line scripts from ssn repo
This commit is contained in:
parent
d37a12eac8
commit
e46faff11b
10 changed files with 160 additions and 6 deletions
|
@ -1,4 +1,4 @@
|
|||
This repository contains command-line tools for handling patches. It uses the functions exposed by the `ssn` library and makes them available for use on the shell.
|
||||
This repository contains command-line tools for handling patches. It uses the functions exposed by the [ssn](/swtor/ssn) library and makes them available for use on the shell.
|
||||
|
||||
# Installation
|
||||
For this tool to work, `tsc` and `tslint` must be globally available, e.g. by running:
|
||||
|
@ -16,7 +16,7 @@ npm install && npm start
|
|||
For a better command line experience, add the following to your `~/.bashrc` file:
|
||||
|
||||
```bash
|
||||
alias swtor_install='node /path/to/installation/patcher/dist/installPatch.js'
|
||||
alias swtor_install='node /path/to/installation/ssn-tools/dist/installPatch.js'
|
||||
|
||||
complete -W 'assets_swtor_de_de assets_swtor_en_us assets_swtor_fr_fr assets_swtor_main assets_swtor_test_de_de assets_swtor_test_en_us assets_swtor_test_fr_fr assets_swtor_test_main eualas movies_de_de movies_en_us movies_fr_fr patcher2014 patcher2017 retailclient_liveqatest retailclient_swtor retailclient_publictest' 'swtor_install'
|
||||
```
|
||||
|
|
12
package-lock.json
generated
12
package-lock.json
generated
|
@ -3,21 +3,27 @@
|
|||
"requires": true,
|
||||
"lockfileVersion": 1,
|
||||
"dependencies": {
|
||||
"@types/node": {
|
||||
"version": "10.12.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.0.tgz",
|
||||
"integrity": "sha512-3TUHC3jsBAB7qVRGxT6lWyYo2v96BMmD2PTcl47H25Lu7UXtFH/2qqmKiVrnel6Ne//0TFYf6uvNX+HW2FRkLQ==",
|
||||
"dev": true
|
||||
},
|
||||
"sax": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
|
||||
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
|
||||
},
|
||||
"ssn": {
|
||||
"version": "git+https://git.jedipedia.net/swtor/ssn.git#6d05939ef4c3139d689102544e01e7a849bf196c",
|
||||
"version": "git+https://git.jedipedia.net/swtor/ssn.git#684a123a7689ae2bc12a7ba00a6466366fc5bc19",
|
||||
"from": "git+https://git.jedipedia.net/swtor/ssn.git",
|
||||
"requires": {
|
||||
"ssn-installer": "git+https://git.jedipedia.net/swtor/ssn-installer.git#8c8c5cf68a1a74527de5ccd268db0aa34b795e13",
|
||||
"ssn-installer": "git+https://git.jedipedia.net/swtor/ssn-installer.git#01926cfe97a3166cff46a2061dda519f9c262d40",
|
||||
"xml-js": "^1.6.8"
|
||||
}
|
||||
},
|
||||
"ssn-installer": {
|
||||
"version": "git+https://git.jedipedia.net/swtor/ssn-installer.git#8c8c5cf68a1a74527de5ccd268db0aa34b795e13",
|
||||
"version": "git+https://git.jedipedia.net/swtor/ssn-installer.git#01926cfe97a3166cff46a2061dda519f9c262d40",
|
||||
"from": "git+https://git.jedipedia.net/swtor/ssn-installer.git"
|
||||
},
|
||||
"xml-js": {
|
||||
|
|
|
@ -13,5 +13,8 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"ssn": "git+https://git.jedipedia.net/swtor/ssn.git"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^10.12.0"
|
||||
}
|
||||
}
|
||||
|
|
7
src/failWithError.ts
Normal file
7
src/failWithError.ts
Normal file
|
@ -0,0 +1,7 @@
|
|||
export default function failWithError(usage: string, msg?: string) {
|
||||
if (msg !== undefined) {
|
||||
process.stderr.write(`Error: ${msg.trim()}\n`);
|
||||
}
|
||||
process.stderr.write(`Usage: ${usage} \n`);
|
||||
process.exit(1);
|
||||
}
|
20
src/getManifest.ts
Normal file
20
src/getManifest.ts
Normal file
|
@ -0,0 +1,20 @@
|
|||
import { getManifest, IManifest, Product, verifyProductName } from 'ssn';
|
||||
import failWithError from './failWithError';
|
||||
|
||||
const failFunction = failWithError.bind(null, 'node dist/getManifest.js <product>');
|
||||
|
||||
if (process.argv.length !== 3) {
|
||||
failFunction(`Expected 1 argument but ${process.argv.length - 2} arguments were supplied.`);
|
||||
}
|
||||
|
||||
//Check that product name is valid
|
||||
const product = process.argv[2];
|
||||
if (!verifyProductName(product)) {
|
||||
failFunction(`"${product} is not a valid product name.`);
|
||||
}
|
||||
|
||||
//Get manifest and write output to stdout
|
||||
getManifest(product as Product).then((output: IManifest) => {
|
||||
process.stdout.write(JSON.stringify(output));
|
||||
//process.exit(0);
|
||||
});
|
30
src/getSolidpkg.ts
Normal file
30
src/getSolidpkg.ts
Normal file
|
@ -0,0 +1,30 @@
|
|||
import { getSolidpkg, ISolidSimple, Product, verifyProductName } from 'ssn';
|
||||
import failWithError from './failWithError';
|
||||
|
||||
const failFunction = failWithError.bind(null, 'node dist/getSolidpkg.js <product> <from> <to>');
|
||||
|
||||
if (process.argv.length !== 5) {
|
||||
failFunction(`Expected 3 arguments but ${process.argv.length - 2} arguments were supplied.`);
|
||||
}
|
||||
|
||||
//Check that product name is valid
|
||||
const product = process.argv[2];
|
||||
if (!verifyProductName(product)) {
|
||||
failFunction(`"${product.substring(0, 300)}" is not a valid product name.`);
|
||||
}
|
||||
|
||||
//Check that from and to are valid numbers
|
||||
const from = process.argv[3];
|
||||
const to = process.argv[4];
|
||||
if (!from.match(/^(-1|0|[1-9][0-9]{0,2})$/)) {
|
||||
failFunction(`from value "${from.substring(0, 300)}" is not a valid integer; it must be in range [-1, 999].`);
|
||||
}
|
||||
if (!to.match(/^(0|[1-9][0-9]{0,2})$/)) {
|
||||
failFunction(`to value "${to.substring(0, 300)}" is not a valid integer; it must be in range [0, 999].`);
|
||||
}
|
||||
|
||||
//Get solidpkg and write output to stdout
|
||||
getSolidpkg(product as Product, Number(from), Number(to)).then((output: ISolidSimple) => {
|
||||
process.stdout.write(JSON.stringify(output));
|
||||
//process.exit(0);
|
||||
});
|
30
src/getSolidpkgZip.ts
Normal file
30
src/getSolidpkgZip.ts
Normal file
|
@ -0,0 +1,30 @@
|
|||
import { getSolidpkgZip, ISsnFileEntry, Product, verifyProductName } from 'ssn';
|
||||
import failWithError from './failWithError';
|
||||
|
||||
const failFunction = failWithError.bind(null, 'node dist/getSolidpkgZip.js <product> <from> <to>');
|
||||
|
||||
if (process.argv.length !== 5) {
|
||||
failFunction(`Expected 3 arguments but ${process.argv.length - 2} arguments were supplied.`);
|
||||
}
|
||||
|
||||
//Check that product name is valid
|
||||
const product = process.argv[2];
|
||||
if (!verifyProductName(product)) {
|
||||
failFunction(`"${product.substring(0, 300)}" is not a valid product name.`);
|
||||
}
|
||||
|
||||
//Check that from and to are valid numbers
|
||||
const from = process.argv[3];
|
||||
const to = process.argv[4];
|
||||
if (!from.match(/^(-1|0|[1-9][0-9]{0,2})$/)) {
|
||||
failFunction(`from value "${from.substring(0, 300)}" is not a valid integer; it must be in range [-1, 999].`);
|
||||
}
|
||||
if (!to.match(/^(0|[1-9][0-9]{0,2})$/)) {
|
||||
failFunction(`to value "${to.substring(0, 300)}" is not a valid integer; it must be in range [0, 999].`);
|
||||
}
|
||||
|
||||
//Get solidpkg's .zip file and write output to stdout
|
||||
getSolidpkgZip(product as Product, Number(from), Number(to)).then((output: ISsnFileEntry[]) => {
|
||||
process.stdout.write(JSON.stringify(output));
|
||||
//process.exit(0);
|
||||
});
|
|
@ -1 +0,0 @@
|
|||
//TODO
|
43
src/installPatch.ts
Normal file
43
src/installPatch.ts
Normal file
|
@ -0,0 +1,43 @@
|
|||
import { getPatch, Product, verifyProductName } from 'ssn';
|
||||
import failWithError from './failWithError';
|
||||
|
||||
const failFunction = failWithError.bind(null, 'node dist/installPatch.js <product> <from> <to>');
|
||||
|
||||
if (process.argv.length !== 5) {
|
||||
failFunction(`Expected 3 arguments but ${process.argv.length - 2} arguments were supplied.`);
|
||||
}
|
||||
|
||||
//Check that product name is valid
|
||||
const product = process.argv[2];
|
||||
if (!verifyProductName(product)) {
|
||||
failFunction(`"${product.substring(0, 300)}" is not a valid product name.`);
|
||||
}
|
||||
|
||||
//Check that from and to are valid numbers
|
||||
const from = process.argv[3];
|
||||
const to = process.argv[4];
|
||||
if (!from.match(/^(-1|0|[1-9][0-9]{0,2})$/)) {
|
||||
failFunction(`from value "${from.substring(0, 300)}" is not a valid integer; it must be in range [-1, 999].`);
|
||||
}
|
||||
if (!to.match(/^(0|[1-9][0-9]{0,2})$/)) {
|
||||
failFunction(`to value "${to.substring(0, 300)}" is not a valid integer; it must be in range [0, 999].`);
|
||||
}
|
||||
|
||||
//TODO: set directory with existing patch data
|
||||
//TODO: set target directory where patch should be installed
|
||||
//TODO: set temp directory where patch files should be stored.
|
||||
//TODO: set location of xdelta3 executable
|
||||
//TODO: set from=any so it detects current version automatically (based on .version files)
|
||||
//TODO: set to=manifest/current to install whatever is the current version in manifest/on CDN
|
||||
|
||||
(async () => {
|
||||
await getPatch({
|
||||
/* tslint:disable:object-literal-sort-keys */
|
||||
product: product as Product,
|
||||
from: Number(from),
|
||||
to: Number(to),
|
||||
sourceDirectory: process.cwd(),
|
||||
targetDirectory: process.cwd(),
|
||||
/* tslint:enable:object-literal-sort-keys */
|
||||
});
|
||||
})();
|
16
src/tslint.json
Normal file
16
src/tslint.json
Normal file
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"defaultSeverity": "error",
|
||||
"extends": [
|
||||
"tslint:recommended"
|
||||
],
|
||||
"jsRules": {},
|
||||
"rules": {
|
||||
"comment-format": false,
|
||||
"indent": [true, "spaces", 2],
|
||||
"max-line-length": false,
|
||||
"no-bitwise": false,
|
||||
"no-console": false,
|
||||
"quotemark": [true, "single"]
|
||||
},
|
||||
"rulesDirectory": []
|
||||
}
|
Loading…
Reference in a new issue