mirror of
https://github.com/spalencsar/bearhub.git
synced 2026-07-07 00:04:15 +02:00
[arch] feature -> AUR: custom actions to allow/ignore rebuild-detector for a given package
This commit is contained in:
@@ -16,6 +16,15 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||
<img src="https://raw.githubusercontent.com/vinifmor/bauh-files/master/pictures/releases/0.9.12/rebuild_detector.png">
|
||||
</p>
|
||||
|
||||
- new package actions to Allow/Ignore rebuild check for a specific package. Useful for binary packages (e.g: package-bin).
|
||||
<p align="center">
|
||||
<img src="https://raw.githubusercontent.com/vinifmor/bauh-files/master/pictures/releases/0.9.12/allow_rebuild_check.png">
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<img src="https://raw.githubusercontent.com/vinifmor/bauh-files/master/pictures/releases/0.9.12/ignore_rebuild_check.png">
|
||||
</p>
|
||||
|
||||
- form some reason **rebuild-detector** hangs when executed within PyCharm (this integration is disabled regarding this particular scenario for now)
|
||||
|
||||
- new custom action to quickly reinstall a package
|
||||
|
||||
@@ -188,6 +188,8 @@ database:
|
||||
- **clean cache**: it cleans the pacman cache directory (default: `/var/cache/pacman/pkg`)
|
||||
- **mark PKGBUILD as editable**: it marks a given PKGBUILD of a package as editable (a popup with the PKGBUILD will be displayed before upgrading/downgrading this package). Action only available when the configuration property **edit_aur_pkgbuild** is not **false**.
|
||||
- **unmark PKGBUILD as editable**: reverts the action described above. Action only available when the configuration property **edit_aur_pkgbuild** is not **false**.
|
||||
- **allow reinstallation check**: it allows to check if a given AUR packages requires to be rebuilt
|
||||
- **ignore reinstallation check**: it does not to check if a given AUR packages requires to be rebuilt
|
||||
- **check Snaps support**: checks if the Snapd services are properly enabled.
|
||||
- Installed AUR packages have their **PKGBUILD** files cached at **~/.cache/bauh/arch/installed/$pkgname**
|
||||
- Packages with ignored updates are defined at **~/.config/bauh/arch/updates_ignored.txt**
|
||||
|
||||
@@ -18,6 +18,7 @@ CONFIG_FILE = '{}/arch.yml'.format(CONFIG_PATH)
|
||||
SUGGESTIONS_FILE = 'https://raw.githubusercontent.com/vinifmor/bauh-files/master/arch/aur_suggestions.txt'
|
||||
UPDATES_IGNORED_FILE = '{}/updates_ignored.txt'.format(CONFIG_DIR)
|
||||
EDITABLE_PKGBUILDS_FILE = '{}/aur/editable_pkgbuilds.txt'.format(CONFIG_DIR)
|
||||
IGNORED_REBUILD_CHECK_FILE = '{}/aur/ignored_rebuild_check.txt'.format(CONFIG_DIR)
|
||||
|
||||
|
||||
def get_icon_path() -> str:
|
||||
|
||||
@@ -449,7 +449,7 @@ class ArchManager(SoftwareManager):
|
||||
return res
|
||||
|
||||
def _fill_aur_pkgs(self, aur_pkgs: dict, output: List[ArchPackage], disk_loader: DiskCacheLoader, internet_available: bool,
|
||||
arch_config: dict, rebuild_check: Optional[Thread], to_rebuild: Set[str]):
|
||||
arch_config: dict, rebuild_check: Optional[Thread], rebuild_ignored: Optional[Thread], rebuild_output: Optional[Dict[str, Set[str]]]):
|
||||
|
||||
if internet_available:
|
||||
try:
|
||||
@@ -462,9 +462,16 @@ class ArchManager(SoftwareManager):
|
||||
if pkgsinfo:
|
||||
editable_pkgbuilds = self._read_editable_pkgbuilds() if arch_config['edit_aur_pkgbuild'] is not False else None
|
||||
|
||||
if rebuild_check:
|
||||
ignore_rebuild_check = None
|
||||
if rebuild_ignored and rebuild_output is not None:
|
||||
rebuild_ignored.join()
|
||||
ignore_rebuild_check = rebuild_output['ignored']
|
||||
|
||||
to_rebuild = None
|
||||
if rebuild_check and rebuild_output is not None:
|
||||
self.logger.info("Waiting for rebuild-detector")
|
||||
rebuild_check.join()
|
||||
to_rebuild = rebuild_output['to_rebuild']
|
||||
|
||||
for pkgdata in pkgsinfo:
|
||||
pkg = self.aur_mapper.map_api_data(pkgdata, aur_pkgs, self.categories)
|
||||
@@ -477,10 +484,15 @@ class ArchManager(SoftwareManager):
|
||||
pkg.update = self._check_aur_package_update(pkg=pkg,
|
||||
installed_data=aur_pkgs.get(pkg.name, {}),
|
||||
api_data=pkgdata)
|
||||
pkg.aur_update = pkg.update # used in 'set_rebuild_check'
|
||||
|
||||
if ignore_rebuild_check is not None:
|
||||
pkg.allow_rebuild = pkg.name not in ignore_rebuild_check
|
||||
|
||||
if to_rebuild and not pkg.update and pkg.name in to_rebuild:
|
||||
pkg.require_rebuild = True
|
||||
pkg.update = True
|
||||
|
||||
pkg.update_state()
|
||||
|
||||
pkg.status = PackageStatus.READY
|
||||
output.append(pkg)
|
||||
@@ -564,15 +576,19 @@ class ArchManager(SoftwareManager):
|
||||
self.disk_cache_updater.join()
|
||||
self.logger.info("Disk cache ready")
|
||||
|
||||
def __fill_packages_to_rebuild(self, output: Set[str]):
|
||||
def __fill_packages_to_rebuild(self, output: Dict[str, Set[str]]):
|
||||
if rebuild_detector.is_installed():
|
||||
if 'PYCHARM_CLASSPATH' in os.environ:
|
||||
self.logger.warning("'rebuild-detector' is currently not working within PyCharm. Aborting...")
|
||||
return
|
||||
|
||||
self.logger.info("rebuild-detector: checking")
|
||||
output.update(rebuild_detector.list_required_rebuild())
|
||||
self.logger.info("rebuild-detector: packages detected -> {}".format(output))
|
||||
to_rebuild = rebuild_detector.list_required_rebuild()
|
||||
output['to_rebuild'].update(to_rebuild)
|
||||
self.logger.info("rebuild-detector: {} packages require rebuild".format(len(to_rebuild)))
|
||||
|
||||
def __fill_ignored_by_rebuild_detector(self, output: Dict[str, Set[str]]):
|
||||
output['ignored'].update(rebuild_detector.list_ignored())
|
||||
|
||||
def read_installed(self, disk_loader: Optional[DiskCacheLoader], limit: int = -1, only_apps: bool = False, pkg_types: Set[Type[SoftwarePackage]] = None, internet_available: bool = None, names: Iterable[str] = None, wait_disk_cache: bool = True) -> SearchResult:
|
||||
self.aur_client.clean_caches()
|
||||
@@ -583,11 +599,15 @@ class ArchManager(SoftwareManager):
|
||||
if not aur_supported and not repos_supported:
|
||||
return SearchResult.empty()
|
||||
|
||||
to_rebuild, rebuild_check = set(), None
|
||||
rebuild_output, rebuild_check, rebuild_ignored = None, None, None
|
||||
if aur_supported and arch_config['aur_rebuild_detector']:
|
||||
rebuild_check = Thread(target=self.__fill_packages_to_rebuild, args=(to_rebuild,), daemon=True)
|
||||
rebuild_output = {'to_rebuild': set(), 'ignored': set()}
|
||||
rebuild_check = Thread(target=self.__fill_packages_to_rebuild, args=(rebuild_output,), daemon=True)
|
||||
rebuild_check.start()
|
||||
|
||||
rebuild_ignored = Thread(target=self.__fill_ignored_by_rebuild_detector, args=(rebuild_output, ), daemon=True)
|
||||
rebuild_ignored.start()
|
||||
|
||||
installed = pacman.map_installed(names=names)
|
||||
|
||||
aur_pkgs, repo_pkgs = None, None
|
||||
@@ -622,7 +642,7 @@ class ArchManager(SoftwareManager):
|
||||
map_threads = []
|
||||
|
||||
if aur_pkgs:
|
||||
t = Thread(target=self._fill_aur_pkgs, args=(aur_pkgs, pkgs, disk_loader, internet_available, arch_config, rebuild_check, to_rebuild), daemon=True)
|
||||
t = Thread(target=self._fill_aur_pkgs, args=(aur_pkgs, pkgs, disk_loader, internet_available, arch_config, rebuild_check, rebuild_ignored, rebuild_output), daemon=True)
|
||||
t.start()
|
||||
map_threads.append(t)
|
||||
|
||||
@@ -3461,3 +3481,22 @@ class ArchManager(SoftwareManager):
|
||||
watcher=watcher,
|
||||
context=context,
|
||||
disk_loader=self.context.disk_loader_factory.new()).success
|
||||
|
||||
def set_rebuild_check(self, pkg: ArchPackage, root_password: str, watcher: ProcessWatcher) -> bool:
|
||||
if pkg.repository != 'aur':
|
||||
return False
|
||||
|
||||
try:
|
||||
if pkg.allow_rebuild:
|
||||
rebuild_detector.add_as_ignored(pkg.name)
|
||||
pkg.allow_rebuild = False
|
||||
else:
|
||||
rebuild_detector.remove_from_ignored(pkg.name)
|
||||
pkg.allow_rebuild = True
|
||||
except:
|
||||
self.logger.error("An unexpected exception happened")
|
||||
traceback.print_exc()
|
||||
return False
|
||||
|
||||
pkg.update_state()
|
||||
return True
|
||||
|
||||
@@ -28,6 +28,20 @@ ACTION_AUR_REINSTALL = CustomSoftwareAction(i18n_label_key='arch.action.reinstal
|
||||
manager_method='reinstall',
|
||||
icon_path=resource.get_path('img/build.svg', ROOT_DIR))
|
||||
|
||||
ACTION_IGNORE_REBUILD_CHECK = CustomSoftwareAction(i18n_label_key='arch.action.rebuild_check.ignore',
|
||||
i18n_status_key='arch.action.rebuild_check.ignore.status',
|
||||
i18n_confirm_key='arch.action.rebuild_check.ignore.confirm',
|
||||
requires_root=False,
|
||||
manager_method='set_rebuild_check',
|
||||
icon_path=resource.get_path('img/check_disabled.svg', ROOT_DIR))
|
||||
|
||||
ACTION_ALLOW_REBUILD_CHECK = CustomSoftwareAction(i18n_label_key='arch.action.rebuild_check.allow',
|
||||
i18n_status_key='arch.action.rebuild_check.allow.status',
|
||||
i18n_confirm_key='arch.action.rebuild_check.allow.confirm',
|
||||
requires_root=False,
|
||||
manager_method='set_rebuild_check',
|
||||
icon_path=resource.get_path('img/check.svg', ROOT_DIR))
|
||||
|
||||
|
||||
class ArchPackage(SoftwarePackage):
|
||||
|
||||
@@ -38,7 +52,9 @@ class ArchPackage(SoftwarePackage):
|
||||
desktop_entry: str = None, installed: bool = False, srcinfo: dict = None, dependencies: Set[str] = None,
|
||||
categories: List[str] = None, i18n: I18n = None, update_ignored: bool = False, arch: str = None,
|
||||
pkgbuild_editable: bool = None, install_date: Optional[int] = None, commit: Optional[str] = None,
|
||||
require_rebuild: bool = False):
|
||||
require_rebuild: bool = False,
|
||||
allow_rebuild: Optional[bool] = None,
|
||||
aur_update: bool = False):
|
||||
|
||||
super(ArchPackage, self).__init__(name=name, version=version, latest_version=latest_version, description=description,
|
||||
installed=installed, categories=categories)
|
||||
@@ -64,6 +80,8 @@ class ArchPackage(SoftwarePackage):
|
||||
self.install_date = install_date
|
||||
self.commit = commit # only for AUR for downgrading purposes
|
||||
self.require_rebuild = require_rebuild
|
||||
self.allow_rebuild = allow_rebuild
|
||||
self.aur_update = aur_update
|
||||
|
||||
@staticmethod
|
||||
def disk_cache_path(pkgname: str):
|
||||
@@ -189,12 +207,22 @@ class ArchPackage(SoftwarePackage):
|
||||
if self.pkgbuild_editable is not None:
|
||||
actions.append(ACTION_AUR_DISABLE_PKGBUILD_EDITION if self.pkgbuild_editable else ACTION_AUR_ENABLE_PKGBUILD_EDITION)
|
||||
|
||||
if self.allow_rebuild is not None:
|
||||
actions.append(ACTION_IGNORE_REBUILD_CHECK if self.allow_rebuild else ACTION_ALLOW_REBUILD_CHECK)
|
||||
|
||||
return actions
|
||||
|
||||
def get_update_tip(self) -> Optional[str]:
|
||||
if self.repository == 'aur' and self.require_rebuild:
|
||||
if self.repository == 'aur' and self.allow_rebuild and self.require_rebuild:
|
||||
return self.i18n['arch.package.requires_rebuild'] + ' (rebuild)'
|
||||
|
||||
def update_state(self):
|
||||
if self.repository == 'aur':
|
||||
if self.allow_rebuild and self.require_rebuild:
|
||||
self.update = True
|
||||
else:
|
||||
self.update = self.aur_update
|
||||
|
||||
def __hash__(self):
|
||||
if self.view_name is not None:
|
||||
return hash((self.view_name, self.repository))
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import os
|
||||
from pathlib import Path
|
||||
from typing import Set
|
||||
|
||||
from bauh.commons import system
|
||||
from bauh.gems.arch import IGNORED_REBUILD_CHECK_FILE
|
||||
|
||||
|
||||
def is_installed() -> bool:
|
||||
@@ -22,3 +25,42 @@ def list_required_rebuild() -> Set[str]:
|
||||
required.add(line_split[1])
|
||||
|
||||
return required
|
||||
|
||||
|
||||
def list_ignored() -> Set[str]:
|
||||
if os.path.isfile(IGNORED_REBUILD_CHECK_FILE):
|
||||
with open(IGNORED_REBUILD_CHECK_FILE) as f:
|
||||
ignored_str = f.read()
|
||||
|
||||
return {p.strip() for p in ignored_str.split('\n') if p}
|
||||
else:
|
||||
return set()
|
||||
|
||||
|
||||
def add_as_ignored(pkgname: str):
|
||||
ignored = list_ignored()
|
||||
ignored.add(pkgname)
|
||||
|
||||
Path(os.path.dirname(IGNORED_REBUILD_CHECK_FILE)).mkdir(parents=True, exist_ok=True)
|
||||
|
||||
with open(IGNORED_REBUILD_CHECK_FILE, 'w+') as f:
|
||||
for p in ignored:
|
||||
f.write('{}\n'.format(p))
|
||||
|
||||
|
||||
def remove_from_ignored(pkgname: str):
|
||||
ignored = list_ignored()
|
||||
|
||||
if ignored is None or pkgname not in ignored:
|
||||
return
|
||||
|
||||
ignored.remove(pkgname)
|
||||
|
||||
Path(os.path.dirname(IGNORED_REBUILD_CHECK_FILE)).mkdir(parents=True, exist_ok=True)
|
||||
|
||||
if ignored:
|
||||
with open(IGNORED_REBUILD_CHECK_FILE, 'w+') as f:
|
||||
for p in ignored:
|
||||
f.write('{}\n'.format(p))
|
||||
else:
|
||||
os.remove(IGNORED_REBUILD_CHECK_FILE)
|
||||
|
||||
63
bauh/gems/arch/resources/img/check.svg
Normal file
63
bauh/gems/arch/resources/img/check.svg
Normal file
@@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
viewBox="0 0 512.00001 512"
|
||||
enable-background="new 0 0 26 26"
|
||||
id="svg817"
|
||||
sodipodi:docname="check.svg"
|
||||
width="512"
|
||||
height="512"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
|
||||
<metadata
|
||||
id="metadata823">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs821" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview819"
|
||||
showgrid="false"
|
||||
showborder="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="0.84308888"
|
||||
inkscape:cx="364.16486"
|
||||
inkscape:cy="281.60119"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg817"
|
||||
inkscape:document-rotation="0" />
|
||||
<path
|
||||
d="m 7.1896424,281.46877 c -3.9182273,-5.09374 -5.8774013,-12.73441 -5.8774013,-17.82813 0,-5.09374 1.959072,-12.73441 5.8776223,-17.82815 l 27.4278676,-35.6563 c 7.836472,-10.18747 19.591293,-10.18747 27.427884,0 l 1.959055,2.54694 107.75243,150.2657 c 3.91834,5.09374 9.79575,5.09374 13.71398,0 L 447.99541,8.952986 h 1.95907 v 0 c 7.8367,-10.187467 19.59149,-10.187467 27.42797,0 l 27.42788,35.656297 c 7.83657,10.187468 7.83657,25.468796 0,35.65628 v 0 L 191.34838,503.04705 c -3.91834,5.09364 -7.83648,7.64056 -13.71388,7.64056 -5.87762,0 -9.79575,-2.54692 -13.71399,-7.64056 L 11.107887,289.10934 Z"
|
||||
id="path815"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#499c54;fill-opacity:1;stroke-width:22.3376" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.4 KiB |
70
bauh/gems/arch/resources/img/check_disabled.svg
Normal file
70
bauh/gems/arch/resources/img/check_disabled.svg
Normal file
@@ -0,0 +1,70 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
viewBox="0 0 512.00001 512"
|
||||
enable-background="new 0 0 26 26"
|
||||
id="svg817"
|
||||
sodipodi:docname="check_disabled.svg"
|
||||
width="512"
|
||||
height="512"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
|
||||
<metadata
|
||||
id="metadata823">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs821" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview819"
|
||||
showgrid="false"
|
||||
showborder="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="0.84308888"
|
||||
inkscape:cx="364.16486"
|
||||
inkscape:cy="281.60119"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg817"
|
||||
inkscape:document-rotation="0" />
|
||||
<g
|
||||
id="g1547">
|
||||
<path
|
||||
d="m 7.1896424,281.46877 c -3.9182273,-5.09374 -5.8774013,-12.73441 -5.8774013,-17.82813 0,-5.09374 1.959072,-12.73441 5.8776223,-17.82815 l 27.4278676,-35.6563 c 7.836472,-10.18747 19.591293,-10.18747 27.427884,0 l 1.959055,2.54694 107.75243,150.2657 c 3.91834,5.09374 9.79575,5.09374 13.71398,0 L 447.99541,8.952986 h 1.95907 v 0 c 7.8367,-10.187467 19.59149,-10.187467 27.42797,0 l 27.42788,35.656297 c 7.83657,10.187468 7.83657,25.468796 0,35.65628 v 0 L 191.34838,503.04705 c -3.91834,5.09364 -7.83648,7.64056 -13.71388,7.64056 -5.87762,0 -9.79575,-2.54692 -13.71399,-7.64056 L 11.107887,289.10934 Z"
|
||||
id="path815"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#499c54;fill-opacity:1;stroke-width:22.3376" />
|
||||
<path
|
||||
style="fill:#db5860;fill-opacity:1;stroke-width:1.16152"
|
||||
id="path936"
|
||||
d="M 256.00058,8.2104756 C 392.90373,8.2104756 503.7901,119.09685 503.7901,256 c 0,136.90315 -110.88637,247.78952 -247.78952,247.78952 C 119.09743,503.78952 8.2098955,392.90431 8.2098955,256 8.2098955,119.09569 119.09627,8.2104756 256.00058,8.2104756 Z M 454.23173,256 c 0,-109.52276 -88.7084,-198.232321 -198.23231,-198.232321 -45.84152,0 -87.84191,15.73505 -121.41667,41.75299 L 412.47991,377.41783 C 438.49785,343.84191 454.23173,301.84152 454.23173,256 Z M 256.00058,454.23231 c 45.84152,0 87.84191,-15.73504 121.41667,-41.75298 L 99.521254,134.58333 C 73.503315,168.15925 57.768265,210.15964 57.768265,256 c 0,109.52391 88.708395,198.23231 198.232315,198.23231 z" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
@@ -1,3 +1,9 @@
|
||||
arch.action.rebuild_check.allow=Allow reinstallation check
|
||||
arch.action.rebuild_check.allow.status=Allowing reinstallation check
|
||||
arch.action.rebuild_check.allow.confirm=Allow reinstallation check for {} ?
|
||||
arch.action.rebuild_check.ignore=Ignore reinstallation check
|
||||
arch.action.rebuild_check.ignore.status=Ignoring reinstallation check
|
||||
arch.action.rebuild_check.ignore.confirm=Ignore reinstallation check for {} ?
|
||||
arch.action.db_locked.body.l1=The system's package database is locked.
|
||||
arch.action.db_locked.body.l2=It is necessary to unlock it to continue.
|
||||
arch.action.db_locked.confirmation=Unlock and continue
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
arch.action.rebuild_check.allow=Allow reinstallation check
|
||||
arch.action.rebuild_check.allow.status=Allowing reinstallation check
|
||||
arch.action.rebuild_check.allow.confirm=Allow reinstallation check for {} ?
|
||||
arch.action.rebuild_check.ignore=Ignore reinstallation check
|
||||
arch.action.rebuild_check.ignore.status=Ignoring reinstallation check
|
||||
arch.action.rebuild_check.ignore.confirm=Ignore reinstallation check for {} ?
|
||||
arch.action.db_locked.body.l1=The system's package database is locked.
|
||||
arch.action.db_locked.body.l2=It is necessary to unlock it to continue.
|
||||
arch.action.db_locked.confirmation=Unlock and continue
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
arch.action.rebuild_check.allow=Allow reinstallation check
|
||||
arch.action.rebuild_check.allow.status=Allowing reinstallation check
|
||||
arch.action.rebuild_check.allow.confirm=Allow reinstallation check for {} ?
|
||||
arch.action.rebuild_check.ignore=Ignore reinstallation check
|
||||
arch.action.rebuild_check.ignore.status=Ignoring reinstallation check
|
||||
arch.action.rebuild_check.ignore.confirm=Ignore reinstallation check for {} ?
|
||||
arch.action.db_locked.body.l1=The system's package database is locked.
|
||||
arch.action.db_locked.body.l2=It is necessary to unlock it to continue.
|
||||
arch.action.db_locked.confirmation=Unlock and continue
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
arch.action.rebuild_check.allow=Permitir verificación de reinstalación
|
||||
arch.action.rebuild_check.allow.status=Permitindo verificación de reinstalación
|
||||
arch.action.rebuild_check.allow.confirm=¿ Permitir verificación de reinstalación para {} ?
|
||||
arch.action.rebuild_check.ignore=Ignorar verificación de reinstalación
|
||||
arch.action.rebuild_check.ignore.status=Ignorando verificación de reinstalación
|
||||
arch.action.rebuild_check.ignore.confirm=¿ Ignorar verificación de reinstalación para {} ?
|
||||
arch.action.db_locked.body.l1=La base de datos de paquetes del sistema está bloqueada.
|
||||
arch.action.db_locked.body.l2=Es necesario desbloquearla para continuar.
|
||||
arch.action.db_locked.confirmation=Desbloquear y continuar
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
arch.action.rebuild_check.allow=Allow reinstallation check
|
||||
arch.action.rebuild_check.allow.status=Allowing reinstallation check
|
||||
arch.action.rebuild_check.allow.confirm=Allow reinstallation check for {} ?
|
||||
arch.action.rebuild_check.ignore=Ignore reinstallation check
|
||||
arch.action.rebuild_check.ignore.status=Ignoring reinstallation check
|
||||
arch.action.rebuild_check.ignore.confirm=Ignore reinstallation check for {} ?
|
||||
arch.action.db_locked.body.l1=La base de données de paquets du système est verrouillée.
|
||||
arch.action.db_locked.body.l2=Il faut la déverrouiller pour continuer.
|
||||
arch.action.db_locked.confirmation=Déverrouiller et continuer
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
arch.action.rebuild_check.allow=Allow reinstallation check
|
||||
arch.action.rebuild_check.allow.status=Allowing reinstallation check
|
||||
arch.action.rebuild_check.allow.confirm=Allow reinstallation check for {} ?
|
||||
arch.action.rebuild_check.ignore=Ignore reinstallation check
|
||||
arch.action.rebuild_check.ignore.status=Ignoring reinstallation check
|
||||
arch.action.rebuild_check.ignore.confirm=Ignore reinstallation check for {} ?
|
||||
arch.action.db_locked.body.l1=The system's package database is locked.
|
||||
arch.action.db_locked.body.l2=It is necessary to unlock it to continue.
|
||||
arch.action.db_locked.confirmation=Unlock and continue
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
arch.action.rebuild_check.allow=Permitir verificação de reinstalação
|
||||
arch.action.rebuild_check.allow.status=Permitindo verificação de reinstalação
|
||||
arch.action.rebuild_check.allow.confirm=Permitir verificação de reinstalação para {} ?
|
||||
arch.action.rebuild_check.ignore=Ignorar verificação de reinstalação
|
||||
arch.action.rebuild_check.ignore.status=Ignorando verificação de reinstalação
|
||||
arch.action.rebuild_check.ignore.confirm=Ignorar verificação de reinstalação para {} ?
|
||||
arch.action.db_locked.body.l1=O banco de dados de pacotes do sistema está bloqueado.
|
||||
arch.action.db_locked.body.l2=É necessário desbloquea-lo para continuar.
|
||||
arch.action.db_locked.confirmation=Desbloquear e continuar
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
arch.action.rebuild_check.allow=Allow reinstallation check
|
||||
arch.action.rebuild_check.allow.status=Allowing reinstallation check
|
||||
arch.action.rebuild_check.allow.confirm=Allow reinstallation check for {} ?
|
||||
arch.action.rebuild_check.ignore=Ignore reinstallation check
|
||||
arch.action.rebuild_check.ignore.status=Ignoring reinstallation check
|
||||
arch.action.rebuild_check.ignore.confirm=Ignore reinstallation check for {} ?
|
||||
arch.action.db_locked.body.l1=The system package database is locked.
|
||||
arch.action.db_locked.body.l2=It is necessary to unlock it to continue.
|
||||
arch.action.db_locked.confirmation=Unlock and continue
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
arch.action.rebuild_check.allow=Allow reinstallation check
|
||||
arch.action.rebuild_check.allow.status=Allowing reinstallation check
|
||||
arch.action.rebuild_check.allow.confirm=Allow reinstallation check for {} ?
|
||||
arch.action.rebuild_check.ignore=Ignore reinstallation check
|
||||
arch.action.rebuild_check.ignore.status=Ignoring reinstallation check
|
||||
arch.action.rebuild_check.ignore.confirm=Ignore reinstallation check for {} ?
|
||||
arch.action.db_locked.body.l1=Sistemin paket veritabanı kilitli.
|
||||
arch.action.db_locked.body.l2=Devam etmek için veritabanı kilidini açmak gerekiyor.
|
||||
arch.action.db_locked.confirmation=Veritabanı kilidini aç ve devam et
|
||||
|
||||
Reference in New Issue
Block a user