-
Notifications
You must be signed in to change notification settings - Fork 85
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
pisi: sync to v3.12, add dep on python2-ordered-set
**Summary** - Sync with pisi v3.12 upstream release, which always installs baselayout eopkg first if they are present in any given install/upgrade order. - Add rundep on python2-ordered-set package - Make pisi co-installable with the eopkg(py3) package - Miscellaneous shebang and file name extension changes - Sort pspec.xml file sections lexically for ease of reading/tweaking - Change long_description to indicate that pisi is now considered legacy - Create new comar/manager.py3 and comar/package.py3 build scripts in preparation for enabling building pisi with `eopkg.py3 build`. Thank you to @ultr4_l4s3r for the porting work. The current comar/*.py scripts are still python2 for now. Signed-off-by: Rune Morling <[email protected]>
- Loading branch information
Showing
4 changed files
with
321 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,253 @@ | ||
#!/usr/bin/env python3 | ||
# -*- coding: utf-8 -*- | ||
# | ||
# Copyright (C) 2005-2009 TUBITAK/UEKAE | ||
# | ||
# This program is free software; you can redistribute it and/or modify it under | ||
# the terms of the GNU General Public License as published by the Free | ||
# Software Foundation; either version 2 of the License, or (at your option) | ||
# any later version. | ||
# | ||
# Please read the COPYING file. | ||
# | ||
|
||
# Disable cyclic garbage collector of Python to avoid comar segmentation | ||
# faults under high load (#11110) | ||
import gc | ||
gc.disable() | ||
|
||
import os | ||
import os.path | ||
import locale | ||
import string | ||
|
||
# FIXME: later this will be Comar's job | ||
systemlocale = open("/etc/mudur/locale", "r").readline().strip() | ||
|
||
# for pisi | ||
os.environ["LC_ALL"] = systemlocale | ||
|
||
# for system error messages | ||
locale.setlocale(locale.LC_ALL, systemlocale) | ||
|
||
try: | ||
import pisi.api | ||
import pisi.db | ||
import pisi.ui | ||
import pisi.util as util | ||
import pisi.configfile | ||
from pisi.version import Version | ||
except KeyboardInterrupt: | ||
notify("System.Manager", "cancelled", "") | ||
|
||
class UI(pisi.ui.UI): | ||
def error(self, msg): | ||
notify("System.Manager", "error", str(msg)) | ||
|
||
def warning(self, msg): | ||
notify("System.Manager", "warning", str(msg)) | ||
|
||
def notify(self, event, **keywords): | ||
if event == pisi.ui.installing: | ||
pkgname = keywords["package"].name | ||
notify("System.Manager", "status", ("installing", pkgname, "", "")) | ||
elif event == pisi.ui.configuring: | ||
pkgname = keywords["package"].name | ||
notify("System.Manager", "status", ("configuring", pkgname, "", "")) | ||
elif event == pisi.ui.extracting: | ||
pkgname = keywords["package"].name | ||
notify("System.Manager", "status", ("extracting", pkgname, "", "")) | ||
elif event == pisi.ui.updatingrepo: | ||
reponame = keywords["name"] | ||
notify("System.Manager", "status", ("updatingrepo", reponame, "", "")) | ||
elif event == pisi.ui.removing: | ||
pkgname = keywords["package"].name | ||
notify("System.Manager", "status", ("removing", pkgname, "", "")) | ||
elif event == pisi.ui.cached: | ||
total = str(keywords["total"]) | ||
cached = str(keywords["cached"]) | ||
notify("System.Manager", "status", ("cached", total, cached, "")) | ||
elif event == pisi.ui.installed: | ||
notify("System.Manager", "status", ("installed", "", "", "")) | ||
elif event == pisi.ui.removed: | ||
notify("System.Manager", "status", ("removed", "", "", "")) | ||
elif event == pisi.ui.upgraded: | ||
notify("System.Manager", "status", ("upgraded", "", "", "")) | ||
elif event == pisi.ui.packagestogo: | ||
notify("System.Manager", "status", ("order", "", "", "")) | ||
elif event == pisi.ui.desktopfile: | ||
filepath = keywords["desktopfile"] | ||
notify("System.Manager", "status", ("desktopfile", filepath, "", "")) | ||
elif event == pisi.ui.systemconf: | ||
notify("System.Manager", "status", ("systemconf", "", "", "")) | ||
else: | ||
return | ||
|
||
def ack(self, msg): | ||
return True | ||
|
||
def confirm(self, msg): | ||
return True | ||
|
||
def display_progress(self, operation, percent, info="", **kw): | ||
if operation == "fetching": | ||
file_name = kw["filename"] | ||
if not file_name.startswith("eopkg-index.xml"): | ||
file_name = pisi.util.parse_package_name(file_name)[0] | ||
out = (operation, file_name, str(percent), int(kw["rate"]), kw["symbol"], int(kw["downloaded_size"]), int(kw["total_size"])) | ||
else: | ||
out = (operation, str(percent), info, 0, 0, 0, 0) | ||
notify("System.Manager", "progress", out) | ||
|
||
def _init_pisi(): | ||
ui = UI() | ||
try: | ||
pisi.api.set_userinterface(ui) | ||
except KeyboardInterrupt: | ||
cancelled() | ||
|
||
def _get_eopkg_config(): | ||
if os.path.exists("/etc/eopkg/eopkg.conf"): | ||
return "/etc/eopkg/eopkg.conf" | ||
return "/usr/share/defaults/eopkg/eopkg.conf" | ||
|
||
def cancelled(): | ||
notify("System.Manager", "cancelled", None) | ||
|
||
def started(operation=""): | ||
notify("System.Manager", "started", operation) | ||
|
||
def finished(operation=""): | ||
if operation in ["System.Manager.setCache", "System.Manager.installPackage", "System.Manager.removePackage", "System.Manager.updatePackage"]: | ||
__checkCacheLimits() | ||
|
||
notify("System.Manager", "finished", operation) | ||
|
||
def privileged(func): | ||
""" | ||
Decorator for synchronizing privileged functions | ||
""" | ||
def wrapper(*__args,**__kw): | ||
operation = "System.Manager.%s" % func.__name__ | ||
|
||
started(operation) | ||
_init_pisi() | ||
try: | ||
func(*__args,**__kw) | ||
except KeyboardInterrupt: | ||
cancelled() | ||
return | ||
except Exception(e): | ||
notify("System.Manager", "error", str(e)) | ||
return | ||
finished(operation) | ||
|
||
return wrapper | ||
|
||
@privileged | ||
def installPackage(package=None): | ||
if package: | ||
package = package.split(",") | ||
reinstall = package[0].endswith(".eopkg") | ||
pisi.api.install(package, ignore_file_conflicts=True, reinstall=reinstall) | ||
|
||
@privileged | ||
def reinstallPackage(package=None): | ||
if package: | ||
package = package.split(",") | ||
pisi.api.install(package, ignore_file_conflicts=True, reinstall=True) | ||
|
||
@privileged | ||
def updatePackage(package=None): | ||
if package is None: | ||
package = [] | ||
else: | ||
package = package.split(",") | ||
pisi.api.upgrade(package) | ||
|
||
@privileged | ||
def removePackage(package=None): | ||
if package: | ||
package = package.split(",") | ||
pisi.api.remove(package) | ||
|
||
@privileged | ||
def updateRepository(repository=None): | ||
if repository: | ||
pisi.api.update_repo(repository) | ||
|
||
@privileged | ||
def updateAllRepositories(): | ||
repos = pisi.db.repodb.RepoDB().list_repos() | ||
for repo in repos: | ||
try: | ||
pisi.api.update_repo(repo) | ||
except pisi.db.repodb.RepoError(e): | ||
notify("System.Manager", "error", str(e)) | ||
|
||
@privileged | ||
def addRepository(name=None,uri=None): | ||
if name and uri: | ||
pisi.api.add_repo(name,uri) | ||
|
||
@privileged | ||
def removeRepository(repo=None): | ||
if repo: | ||
pisi.api.remove_repo(repo) | ||
|
||
@privileged | ||
def setRepoActivities(repos=None): | ||
if repos: | ||
for repo, active in list(repos.items()): | ||
pisi.api.set_repo_activity(repo, active) | ||
|
||
@privileged | ||
def setRepositories(repos): | ||
oldRepos = pisi.db.repodb.RepoDB().list_repos(only_active=False) | ||
|
||
for repo in oldRepos: | ||
pisi.api.remove_repo(repo) | ||
|
||
for repo in repos: | ||
pisi.api.add_repo(repo[0], repo[1]) | ||
|
||
@privileged | ||
# ex: setConfig("general", "bandwidth_limit", "30") | ||
def setConfig(category, name, value): | ||
config = pisi.configfile.ConfigurationFile("/etc/eopkg/eopkg.conf") | ||
config.set(category, name, value) | ||
|
||
config.write_config() | ||
|
||
@privileged | ||
def setCache(enabled, limit): | ||
config = pisi.configfile.ConfigurationFile("/etc/eopkg/eopkg.conf") | ||
config.set("general", "package_cache", str(enabled)) | ||
config.set("general", "package_cache_limit", str(limit)) | ||
|
||
config.write_config() | ||
|
||
@privileged | ||
def takeSnapshot(): | ||
pisi.api.snapshot() | ||
|
||
@privileged | ||
def takeBack(operation): | ||
pisi.api.takeback(operation) | ||
|
||
@privileged | ||
def clearCache(cacheDir, limit): | ||
pisi.api.clearCache(int(limit) == 0) | ||
|
||
def __checkCacheLimits(): | ||
cached_pkgs_dir = "/var/cache/eopkg/packages" | ||
config = pisi.configfile.ConfigurationFile(_get_eopkg_config()) | ||
cache = config.get("general", "package_cache") | ||
if cache == "True": | ||
limit = config.get("general", "package_cache_limit") | ||
|
||
# If PackageCache is used and limit is 0. It means limitless. | ||
if limit and int(limit) != 0: | ||
clearCache(cached_pkgs_dir, int(limit) * 1024 * 1024) | ||
elif cache == "False": | ||
clearCache(cached_pkgs_dir, 0) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
#!/usr/bin/env python3 | ||
|
||
import os | ||
|
||
def postInstall(fromVersion, fromRelease, toVersion, toRelease): | ||
if not os.path.exists("/var/lib/pisi/package"): | ||
os.system("mkdir /var/lib/pisi/package") | ||
os.system("mv /var/lib/pisi/* /var/lib/pisi/package/") | ||
os.system("mv /var/lib/pisi/package/scripts /var/lib/pisi/") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,13 +12,14 @@ | |
<IsA>app:console</IsA> | ||
<Summary>PISI</Summary> | ||
<Description>PISI is a modern package management system implemented in Python. Some of its main features are: package sources are written in XML and python, implements all functions through a simple-to-use API, integrates low-level and high-level package management features.</Description> | ||
<Archive sha1sum="3e71b2bbd5a3016c03ad52a5076a51b67dda9e09" type="targz">https://github.com/getsolus/eopkg/archive/refs/tags/v3.11.tar.gz</Archive> | ||
<Archive sha1sum="55bc114eea82ec1678ea11a2b88a2f12fbd5a9f4" type="targz">https://github.com/getsolus/eopkg/archive/refs/tags/v3.12.tar.gz</Archive> | ||
<BuildDependencies> | ||
<Dependency>python</Dependency> | ||
<Dependency>python2-xattr</Dependency> | ||
<Dependency>db5</Dependency> | ||
<Dependency>piksemel</Dependency> | ||
<Dependency>intltool</Dependency> | ||
<Dependency>piksemel</Dependency> | ||
<Dependency>python</Dependency> | ||
<Dependency>python2-ordered-set</Dependency> | ||
<Dependency>python2-xattr</Dependency> | ||
</BuildDependencies> | ||
|
||
<Patches> | ||
|
@@ -28,40 +29,65 @@ | |
<Package> | ||
<Name>pisi</Name> | ||
<Files> | ||
<Path fileType="config">/etc/pisi/pisi.conf</Path> | ||
<Path fileType="config">/etc/mudur/locale</Path> | ||
<Path fileType="data">/usr/lib/tmpfiles.d/pisi.conf</Path> | ||
<Path fileType="data">/usr/share/defaults/eopkg</Path> | ||
<Path fileType="data">/usr/share/factory/var/db/comar3/scripts/System.Manager/pisi.py</Path> | ||
<Path fileType="data">/usr/share/mime/packages</Path> | ||
<Path fileType="doc">/usr/share/doc</Path> | ||
<Path fileType="doc">/usr/share/man/man1</Path> | ||
<Path fileType="executable">/usr/bin</Path> | ||
<Path fileType="executable">/usr/sbin</Path> | ||
<Path fileType="library">/usr/lib/python*</Path> | ||
<Path fileType="localedata">/usr/share/locale</Path> | ||
<Path fileType="doc">/usr/share/doc</Path> | ||
<Path fileType="doc">/usr/share/man/man1</Path> | ||
<Path fileType="data">/usr/share/defaults/eopkg</Path> | ||
<Path fileType="config">/etc/pisi/pisi.conf</Path> | ||
<Path fileType="config">/etc/mudur/locale</Path> | ||
<Path fileType="data">/usr/share/mime/packages</Path> | ||
<Path fileType="data">/usr/share/factory/var/db/comar3/scripts/System.Manager/pisi.py</Path> | ||
<Path fileType="data">/usr/lib/tmpfiles.d/pisi.conf</Path> | ||
</Files> | ||
<AdditionalFiles> | ||
<AdditionalFile owner="root" permission="0644" target="/usr/lib/tmpfiles.d/pisi.conf">pisi.tmpfiles</AdditionalFile> | ||
<!-- BEGIN should be owned by eopkg(py3) after the epoch bump --> | ||
<AdditionalFile owner="root" permission="0644" target="/usr/share/defaults/eopkg/mirrors.conf">mirrors.conf</AdditionalFile> | ||
<AdditionalFile owner="root" permission="0644" target="/usr/share/defaults/eopkg/sandbox.conf">sandbox.conf</AdditionalFile> | ||
<AdditionalFile owner="root" permission="0644" target="/usr/lib/tmpfiles.d/pisi.conf">pisi.tmpfiles</AdditionalFile> | ||
<!-- END should be owned by eopkg(py3) after the epoch bump --> | ||
<AdditionalFile owner="root" permission="0644" target="/usr/share/factory/var/db/comar3/scripts/System.Manager/pisi.py">manager.py</AdditionalFile> | ||
<!-- BEGIN should be owned by eopkg(py3) after the epoch bump --> | ||
<AdditionalFile owner="root" permission="0644" target="/usr/share/man/man1/eopkg.1">eopkg.1</AdditionalFile> | ||
<!-- END should be owned by eopkg(py3) after the epoch bump --> | ||
</AdditionalFiles> | ||
<Provides> | ||
<COMAR script="package.py">System.Package</COMAR> | ||
<COMAR script="manager.py">System.Manager</COMAR> | ||
</Provides> | ||
<RuntimeDependencies> | ||
<Dependency>python</Dependency> | ||
<Dependency>python2-xattr</Dependency> | ||
<Dependency>db5</Dependency> | ||
<!-- for documentation etc. once pisi / eopkg.py2 is the "lesser" twin (after epoch bump) | ||
<Dependency>eopkg</Dependency> | ||
--> | ||
<Dependency>piksemel</Dependency> | ||
<Dependency>python</Dependency> | ||
<Dependency>python2-ordered-set</Dependency> | ||
<Dependency>python2-xattr</Dependency> | ||
<Dependency>usysconf</Dependency> | ||
</RuntimeDependencies> | ||
</Package> | ||
|
||
<History> | ||
<Update release="112"> | ||
<Date>24-06-2024</Date> | ||
<Version>3.12</Version> | ||
<Comment>sync to v3.12, add dep on python2-ordered-set | ||
**Summary** | ||
- Sync with pisi v3.12 upstream release, which always installs baselayout eopkg first if they are present in any given install/upgrade order. | ||
- Add rundep on python2-ordered-set package | ||
- Make pisi co-installable with the eopkg(py3) package | ||
- Miscellaneous shebang and file name extension changes | ||
- Sort pspec.xml file sections lexically for ease of reading/tweaking | ||
- Change long_description to indicate that pisi is now considered legacy | ||
- Create new comar/manager.py3 and comar/package.py3 build scripts in preparation for enabling building pisi with `eopkg.py3 build`. | ||
Thank you to @ultr4_l4s3r for the porting work. The current comar/*.py scripts are still python2 for now. | ||
</Comment> | ||
<Name>Rune Morling</Name> | ||
<Email>[email protected]</Email> | ||
</Update> | ||
<Update release="111"> | ||
<Date>10-06-2024</Date> | ||
<Version>3.11</Version> | ||
|