mirror of
https://github.com/MeexReay/poshlostios.git
synced 2025-06-24 02:22:58 +03:00
171 lines
5.2 KiB
JavaScript
171 lines
5.2 KiB
JavaScript
/*
|
||
|
||
PPM - Poshliy Package Manager
|
||
|
||
*/
|
||
|
||
let config = JSON.parse(readFile("/config/ppm.json"))
|
||
|
||
async function remove(name) {
|
||
let pkg = await getInstalledPackage(name)
|
||
if (pkg != null) {
|
||
await removePackage(name)
|
||
|
||
await writeStdout(`Пакет ${pkg['name']} удален и все его конфиги тоже\n`)
|
||
if ("depends" in pkg) {
|
||
await writeStdout(`Вот пакеты от которых он зависил которые не удалены: \n${pkg["depends"]}\n`)
|
||
}
|
||
|
||
return 0
|
||
}
|
||
|
||
await writeStdout("Биспокойся произошла ошибко\n")
|
||
return 1
|
||
}
|
||
|
||
async function listInstalled() {
|
||
return (await listPackages())
|
||
}
|
||
|
||
async function listOutdated() {
|
||
let packages = []
|
||
|
||
for (const pkg of (await listPackages())) {
|
||
for (const repo of config["repositories"]) {
|
||
let fetched = await fetchPackage(repo+"/"+pkg["name"])
|
||
if (fetched != null) {
|
||
if (fetched["version"] == pkg["version"]) {
|
||
await writeStdout(`Пакет ${pkg['name']}-${pkg['version']} уже на последней версии\n`)
|
||
break
|
||
}
|
||
|
||
packages.push(pkg)
|
||
}
|
||
}
|
||
}
|
||
|
||
return packages
|
||
}
|
||
|
||
async function update(name) {
|
||
for (const repo of config["repositories"]) {
|
||
let status = await updatePackage(name, repo+"/"+name)
|
||
|
||
if (status == 0) {
|
||
let pkg = await getInstalledPackage(name)
|
||
|
||
await installDepends(pkg)
|
||
|
||
await writeStdout(`Пакет ${pkg['name']}-${pkg['version']} обновлен\n`)
|
||
return 0
|
||
} else if (status == 1) {
|
||
await writeStdout("чувак пакет не найден\n")
|
||
return 1
|
||
}
|
||
}
|
||
await writeStdout("чувак пакет не может быть обновлен\n")
|
||
return 1
|
||
}
|
||
|
||
async function installDepends(pkg) {
|
||
if ("depends" in pkg) {
|
||
for (const dep of pkg.depends) {
|
||
let status = await updateOrInstall(dep)
|
||
|
||
if (status != 0) {
|
||
return status
|
||
}
|
||
}
|
||
}
|
||
|
||
return 0
|
||
}
|
||
|
||
async function updateOrInstall(name) {
|
||
if (await getInstalledPackage(name) == null) {
|
||
return await install(name)
|
||
} else {
|
||
return await update(name)
|
||
}
|
||
}
|
||
|
||
async function install(name) {
|
||
for (const repo of config["repositories"]) {
|
||
// await writeStdout(`Фетчим ${package} на репозитории ${repo}\n`)
|
||
|
||
let status = await installPackage(repo+"/"+name)
|
||
|
||
if (status == 0) {
|
||
let pkg = await getInstalledPackage(name)
|
||
|
||
await installDepends(pkg)
|
||
|
||
await writeStdout(`Пакет ${pkg['name']}-${pkg['version']} установлен\n`)
|
||
return 0
|
||
} else if (status == 1) {
|
||
await writeStdout("Пакет не установлен тк он уже установлен чувааак\n")
|
||
return 1
|
||
}
|
||
}
|
||
|
||
return 1
|
||
}
|
||
|
||
async function main(args) {
|
||
if (args.length == 3 && "iurs".includes(args[1])) {
|
||
let package = args[2]
|
||
|
||
if (args[1] == "i") {
|
||
return await install(package)
|
||
} else if (args[1] == "u") {
|
||
return await update(package)
|
||
} else if (args[1] == "r") {
|
||
return await remove(package)
|
||
} else if (args[1] == "s") {
|
||
let pkg = await getInstalledPackage(package)
|
||
for (const [key, value] of Object.entries(pkg)) {
|
||
await writeStdout(key.charAt(0).toUpperCase()+key.slice(1)+": "+value+"\n")
|
||
}
|
||
return 0
|
||
}
|
||
} else if (args.length == 2 && args[1] == "l") {
|
||
await writeStdout("ваши покеты:\n")
|
||
for (const package of (await listPackages())) {
|
||
await writeStdout("- "+package["name"]+"-"+package["version"]+"\n")
|
||
}
|
||
return 0
|
||
} else if (args.length == 2 && args[1] == "a") {
|
||
for (let pkg of (await listOutdated())) {
|
||
let status = await update(pkg["name"])
|
||
|
||
if (status != 0) {
|
||
return status
|
||
}
|
||
}
|
||
|
||
await writeStdout("Обнова прошла успешна\n")
|
||
return 0
|
||
} else if (args.length == 2 && args[1] == "A") {
|
||
for (let pkg of (await listPackages())) {
|
||
let status = await update(pkg["name"])
|
||
|
||
if (status != 0) {
|
||
return status
|
||
}
|
||
}
|
||
|
||
await writeStdout("Обнова прошла успешна\n")
|
||
return 0
|
||
} else {
|
||
await writeStdout("Использование:\n")
|
||
await writeStdout(" ppm i <пакет> - установить пакет\n")
|
||
await writeStdout(" ppm u <пакет> - обновить пакет\n")
|
||
await writeStdout(" ppm r <пакет> - удалить пакет\n")
|
||
await writeStdout(" ppm s <пакет> - показать инфу о пакете\n")
|
||
await writeStdout(" ppm l - показать инфу о пакете\n")
|
||
await writeStdout(" ppm a - обновить все пакеты\n")
|
||
await writeStdout(" ppm A - обновить все пакеты принудительно\n")
|
||
}
|
||
|
||
return 1
|
||
} |