Compare commits

...

540 commits

Author SHA1 Message Date
Allan McRae
fe6e678e59 libmakepkg: remove pkglist linting
The ability to build only selected packages from a split package was
removed from makepkg, so this lint is no longer needed.

Signed-off-by: Allan McRae <allan@archlinux.org>
2025-08-02 14:26:44 +10:00
morganamilo
48a784dde8 libalpm: fix -U when pkg exists but not sig 2025-06-21 23:39:57 +10:00
morganamilo
67e3a7be36
libalpm: fix regression in downloader
Fixes failure to finalize download path if the package file already
exists but the .sig file does not.

This patch also moves .sig.part files which should be done for
completeness although it's probably rare/inconsequential for them to
exist.

Hopefully this is now the right approach now. The logic is as follows:

  Check if dest_name or temp_name exists and try to move whichever
  does.

  If neither exist assume we're just downloading sig files and don't
  error.

  Figure out the .sig base filename.

  Try to move the .sig file if one was needed and if that fails try
  move the .sig.part file.

The patch leaves the logging as is. Maybe we should check if moves fail
for reasons other than non existence and log it properly. Though this is
probably rare and pacman will error out later anyway.

Fixes #256
2025-05-30 14:48:14 +01:00
morganamilo
45c4eef61d libalpm: move tempdir cleanup into _alpm_download
this ensures the dir still gets cleaned up even if killed by a signal
2025-05-26 16:13:06 +10:00
morganamilo
5c451cd976 libalpm: propagate signal from child to parent
If we ^C while downloading the parent should propagate so pacman can
exit as it did before the sandboxing.
2025-05-26 16:13:06 +10:00
morganamilo
d87dd153fc libalpm: finalize tempfile if destfile doesn't exist
On setup we move the termfile into the temp download dir to resume
downloads. We don't move these back losing any tempfiles we already had.
2025-05-26 16:13:06 +10:00
morganamilo
6fcecbd08d libalpm: set errno if child exited via signal 2025-05-26 16:13:06 +10:00
Diego Viola
528709131f Fix whitespace in README
Also ensure consistent style in API section
2025-05-26 16:11:13 +10:00
Dominik
9fca328caf makepkg: provide a field for tracking generic metadata
The xdata field is an array of key=value entries that allow a packager to
include arbitrary metadata in the generated .PKGINFO.

Fixes #241.

Signed-off-by: Dominik Peteler <archlinux+gitlab@with-h.at>
2025-05-26 16:09:02 +10:00
Rudy
af54cd4ee1 libmakepkg/tidy: give scripts a priority order
This ensures (e.g.) that the "emptydirs" script runs last after
unneeded files have been deleted.

Fixes #184.

Signed-off-by: Allan McRae <allan@archlinux.org>
2025-05-17 13:20:16 +10:00
morganamilo
e392f01a94 libalpm: move sig files when download is unnamed 2025-05-17 12:03:42 +10:00
morganamilo
f722b86990 libalpm: return final final temp path in pkgurl
When downloading unnamed files via alpm_fetch_pkgurl the returned path
would point to the temp pkgcache instead of the final download location.
2025-05-17 12:03:42 +10:00
Aidan Epstein
4ddc642398 Add remove option for repo-remove to remove old package files.
Also update documentation.
2025-05-17 10:43:58 +10:00
Allan McRae
53b1db84ef Fix memory leak in download payload
The file stream associated with downloads without a filename is not
being freed when downloading using the sandbox user.

Signed-off-by: Allan McRae <allan@archlinux.org>
2025-05-17 10:40:09 +10:00
Allan McRae
571c13236f pacman.8: document interaction between --cachedir and DownloadUser
Note that the user provided in the DownloadUser configuration option (if
set) needs to be able to access the directory specified with the --cachedir
argument.

Fixes #216.

Signed-off-by: Allan McRae <allan@archlinux.org>
2025-05-17 10:37:30 +10:00
Felix Yan
64299ccfbb makepkg.sh: skip checking buildtime deps when runtime check already failed
This could help locate the real failure (instead of scrolling through the whole possibly-successful buildtime dep installation section) and also saves time on the operation.
2025-05-09 08:55:42 +10:00
Allan McRae
692f7a2cfe Do not overwrite default download user when option is unset
Commit 7ccf316c provided "root" (or the user name for UID 0) as a
default download user.  However, when DownloadUser is unset in pacman.conf,
pacman was overwriting the default with null. Rectify this.

Fixes #248

Signed-off-by: Allan McRae <allan@archlinux.org>
2025-05-08 21:49:56 +10:00
morganamilo
b104b95423 log and set errno when failing to rename download 2025-05-07 18:22:55 +10:00
Samuel Dionne-Riel
2bcdbc6a87 makepkg: Use sorted inputs for source tarballs too 2025-05-07 13:46:18 +10:00
Samuel Dionne-Riel
46f7f6e9ac makepkg: Use SOURCE_DATE_EPOCH for more reproducible source tarballs 2025-05-07 13:46:07 +10:00
Patrick Northon
38394d54f0 repo-add: add --wait-for-lock option
Using the --wait-for-lock option will result in repo-add retrying to acquire the database lock file after 3 seconds. If the option is not set, exit with code 2 on lock failure.
2025-05-07 12:23:45 +10:00
Allan McRae
267a0cc912 makepkg: ensure OPTIONS is not directly altered
Signed-off-by: Allan McRae <allan@archlinux.org>
2025-05-06 17:04:32 +10:00
Allan McRae
d0c10a795e Free memory on failure to create temporary directory
Signed-off-by: Allan McRae <allan@archlinux.org>
2025-05-06 17:02:35 +10:00
Allan McRae
0d37c1daa0 Initialise callback event fields
While the event is already globally initialised, initialising the fields
prevents a valgrind warning (since the gcc-15 update).

Signed-off-by: Allan McRae <allan@archlinux.org>
2025-05-06 17:00:06 +10:00
Diego Viola
24fc50269d Fix typos 2025-05-04 21:42:34 +10:00
Rafael Fontenelle
08070e9abe Update and improve translation-help.asciidoc 2025-05-04 20:13:44 +10:00
Allan McRae
f13d7d480c Update copyright years
./build-aux/update-copyright 2024 2025

Signed-off-by: Allan McRae <allan@archlinux.org>
2025-04-02 11:35:34 +10:00
LevitatingBusinessMan (Rein Fernhout)
007261ade5 makepkg: do not fail if makepkg.conf.d is empty
fixes #230
2025-03-22 05:23:23 +00:00
Jan Alexander Steffens (heftig)
bbe3f614b2 Update my .mailmap entry 2025-03-22 05:21:36 +00:00
Jan Alexander Steffens (heftig)
f07d547cf1
libmakepkg: Use only /etc/makepkg.d/gitconfig
Globally set `GIT_CONFIG_GLOBAL` and `GIT_CONFIG_SYSTEM` so that we're
only loading `/etc/makepkg.d/gitconfig` (if it exists) and no other Git
config files.

Allow injecting another value via `MAKEPKG_GIT_CONFIG`.

Fixes: https://gitlab.archlinux.org/pacman/pacman/-/issues/193
2025-03-19 21:15:55 +01:00
Christian Heusel
34f09204fa
repo-add.8: Mention missing compression algorithms
The manpage was lacking the database endings for various compression
algorithms that one can validly use, therefore we add these to the list.

Signed-off-by: Christian Heusel <christian@heusel.eu>
2025-03-02 14:55:57 +01:00
Allan McRae
0f6b4f4fab autodeps: parse LIB_DIRS with more specificity
Signed-off-by: Allan McRae <allan@archlinux.org>
2025-01-31 15:56:51 +10:00
Allan McRae
bc7b8e2eb2 lint_pkgbuild/arch: always perform some checks
When using --ignorearch or options that imply it (e.g. --printsrcinfo),
all checks of the arch array were skipped. Instead, perform all checks
apart from confirming that the package can be built on that
architecture.

Signed-off-by: Allan McRae <allan@archlinux.org>
2025-01-30 01:17:40 +00:00
Allan McRae
faea473550 Add a .gdb_index section before splitting debug info
Using gdb-add-index to add a .gdb_index section before splitting
debug info (together with enabling "maintenance set debuginfod
download-sections" in GDB) can dramatically reduce the amount of
data GDB has to download.

Fixes #205.

Signed-off-by: Allan McRae <allan@archlinux.org>
2025-01-19 04:27:42 +00:00
Guoxin Pu
680169fb61 libmakepkg: set CCACHE_PREFIX to absolute path of distcc when using both
The current logic sets CCACHE_PREFIX to distcc when both distcc and
ccache are enabled. However, according to the source of ccache, it would
execute the command with execv, which would not look up arg0 from PATH,
unlike those exec functions with _p suffix.

This would result in the following error, when building a package with
both ccache and distcc enabled:
```
ccache: error: execute_noreturn of distcc failed: No such file or directory
```

This breaks package builds in different ways: packages that use make/cc
directly would yield the actual error which is the same as the above
line, packages that rely on other build systems wouldn't go through
compiler check and complain on a bad compiler.

To reproduce the problem, try to build a simple package:
```
git clone https://gitlab.archlinux.org/archlinux/packaging/packages/abc.git
cd abc
cp /etc/makepkg.conf .
echo 'BUILDENV=(distcc color ccache check !sign)' >> makepkg.conf
makepkg --config makepkg.conf
```

refs:
f887434d35/src/ccache/execute.cpp (L348)
https://man.archlinux.org/man/exec.3.en#v_-_execv(),_execvp(),_execvpe()

Signed-off-by: Guoxin Pu <pugokushin@gmail.com>
2025-01-18 05:08:44 +00:00
Allan McRae
e767cf9a54 Detect repeated values in the arch array
Repeated values in the arch array can result in architecture specific
fields being repeated when using --printsrcinfo.

Signed-off-by: Allan McRae <allan@archlinux.org>
2025-01-16 23:14:22 +00:00
Allan McRae
e65b7d421c Add accessor for handle->disable_dl_timeout
Signed-off-by: Allan McRae <allan@archlinux.org>
2025-01-10 04:36:49 +00:00
Allan McRae
e6b3eb2570 Add accessor for handle->disable_sandbox
Signed-off-by: Allan McRae <allan@archlinux.org>
2025-01-10 04:36:49 +00:00
Allan McRae
7ccf316ceb Provide a default sandboxuser
If sandboxuser is not set, pacman/libalpm does not handle moving
incomplete download files out of the temporary download directories
and into the cache. This leave download_XXXXXX directories in the
cache that cause warnings on -Sc operations.

Initialise the sandboxuser with the username of UID 0 (root on most
systems).

Fixes #209.

Signed-off-by: Allan McRae <allan@archlinux.org>
2025-01-09 12:14:25 +10:00
Allan McRae
ae603e35d7 pacman.conf.5: replace {sysconfdir} with /etc in code block
Variable replacements are not performed on code blocks leaving the
example Include usage with '{sysconfdir}/pacman.d/mirrorlist'.
Replace this with '/etc' consistent with other example blocks in the
man page.

Signed-off-by: Allan McRae <allan@archlinux.org>
2025-01-08 14:25:09 +10:00
Allan McRae
4908eed57d Remove executable permissions from source file
Signed-off-by: Allan McRae <allan@archlinux.org>
2025-01-08 03:08:18 +00:00
Allan McRae
286e776eda lint_config: move PACKAGER check into its own function
The check for the format of the PACKAGER variable did not align with the
rest of the function where it was located.  Move to its own function.

Signed-off-by: Allan McRae <allan@archlinux.org>
2025-01-08 03:06:37 +00:00
Allan McRae
cc87999d6d lint_config: ensure NPROC is set to something usable
We use NPROC for managing the number of parallel jobs to run, so it is
essentially that this is a valid number.  Add a lint pass, and move the
setting of the default value to this location.

Signed-off-by: Allan McRae <allan@archlinux.org>
2025-01-08 03:06:37 +00:00
Johan Förberg
425ff046ed doc/BUILDINFO: Fix description of arrays
Signed-off-by: Johan Förberg <johan@forberg.se>
2025-01-03 16:12:30 +01:00
Allan McRae
5f4c7e3ddc libmakepkg: strip - disguard error messages when copying source files
Parallel processing of file stripping is causing a TOC/TOU race when copying
source files into the debug location resulting in error messages from cp.
While hiding this error is not the ideal solution, it is currently the only
one we have. Given this is a error of our own making, and we understand the
cause and have determined there is zero actual downside to ignoring the
error, we will accept this approach until something better is found.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-12-28 13:54:27 +00:00
Vasiliy Stelmachenok
02b35b9155 libmakepkg: strip - parallelize stripping of files
Perform file stripping in parallel where possible. Hardlinks remain
processed one at a time due to reproducibility issues.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-12-28 13:54:27 +00:00
Vasiliy Stelmachenok
dbde37aafb libmakepkg: strip - split handling of hardlinks
Handle singly and muptiply hard-linked files separately.  Also collect
information on hard linked files to avoid searching the entire package
to check for hard links.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-12-28 13:54:27 +00:00
Allan McRae
0c136ecc8a libmakepkg: strip - add "safe_" prefix to stripping functions
Add a "safe_" prefix to strip_file() and strip_lto() to indicate that
these functions are taking extra steps to ensure permissions remain
unchanged.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-12-28 13:54:27 +00:00
Allan McRae
5e2a763e4a libmakepkg: improve validity checking of arch array
Only a subset of checks were being performed on the overridden arch
arrays in package functions. Refactor checking such that all checks
are perform on all arch arrays.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-12-20 14:21:32 +10:00
Diego Viola
62d3192126 makepkg.conf.5: fix typo 2024-12-18 05:24:40 +00:00
Allan McRae
3e557af72f makepkg.conf: add NPROC configuration value
Useful for controlling (future) parallel jobs within makepkg.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-12-12 13:31:36 +00:00
Allan McRae
fa7a9f748d libmakepkg: remove python hashseed handling
The decision to set the PYTHONHASHSEED variable and its value is outside
the domain of makepkg and should be handled by a distribution.  Move this
file to the libalpm-dropins project.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-12-12 13:28:55 +00:00
Allan McRae
870eae26dc makepkg: move SOURCE_DATE_EPOCH handling to libmakepkg
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-12-12 13:27:28 +00:00
Integral
cb940620bc
fix: make dependency cycle a debug message 2024-12-10 21:10:35 +08:00
Integral
dd55afad68 refactor: use c99 struct initializers to enhance readability 2024-12-10 10:18:40 +00:00
Allan McRae
775db50538 Remove pubkey_algo from alpm_pgpkey_t
This field is no longer used and requires updating with gpgme changes.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-12-07 22:13:49 +10:00
Allan McRae
95a7d416ce Do not identify the public key algorithm
When the import key message was pushed to the pacman frontend, we no longer
displayed the length or algorithm used for the key, sticking to just the
user ID and the key ID.

Remove this code given this field is no longer used, and the code requires
updating for any now algorithm added.

Note: removal of the field from the alpm_pgpkey_t will happen in a separate
commit so that this commit can be readily backported.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-12-07 22:07:29 +10:00
Jan Alexander Steffens (heftig)
9154600490 strip: Treat bare object files like static libs, not shared libs
Debug symbols should only be split from finally linked ELFs, not bare
object files. We're already excluding static libraries from splitting
for a similar reason.

The `.gnu_debuglink` sections are also mishandled by LLVM's LLD, which
copies them to its output. For example, this affects Arch Linux's
`/usr/lib/Scrt1.o`.

While we're here (and it changes the code less), also strip GNU LTO data
from bare objects, again for the same reason we're removing it from
static libraries, and apply static library stripping instead of shared
library stripping.

See: https://bugs.gentoo.org/787623
2024-11-27 19:50:57 +10:00
Jan Alexander Steffens (heftig)
e0162a6868 strip: Overwrite debuglink when it's already present
When objcopy encounters an already-present section, adding the new
debuglink will fail with a warning. Remove any existing `.gnu_debuglink`
section to work around this problem.

Arch Linux's `rust` package is affected by this. Apparently when LLVM's
LLD links in `/usr/lib/Scrt1.o` it will also copy the `.gnu_debuglink`
section.

See: https://bugs.gentoo.org/787623
2024-11-27 19:50:46 +10:00
Allan McRae
71afd4d88f libmakepkg - add wrapper function for objcopy
Using objcopy can result in file permission changes.  We work around this
by using "cat" to copy the temporary output file into the target. Extract
this code into a utility function.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-11-27 19:46:48 +10:00
Guillaume
a2d029388c fix a segfault in sandbox.c if handle->dlcb is null 2024-09-28 08:10:46 +00:00
Jelle van der Waa
8a60361949 pactest: drop trailing spaces from README 2024-09-28 01:44:17 +00:00
Chih-Hsuan Yen
e80569f5da Correctly configure landlock for older ABIs
For example, with landlock ABI < 3, LANDLOCK_ACCESS_FS_TRUNCATE is not
set in ruleset_attr.handled_access_fs, so it should not be set in
path_beneath.allowed_access either. Otherwise, landlock_add_rule fails
with -EINVAL, and pacman complains:

> error: restricting filesystem access failed because the landlock rule for the temporary download directory could not be added!

The change is tested on Debian Bookworm kernel
linux-image-6.1.0-25-cloud-amd64 6.1.106-3.
2024-09-28 00:35:10 +00:00
Rafael Fontenelle
60ec268458 Add double colon for newline after MAKEPKG_LINT_PKGBUILD in makepkg.8.asciidoc 2024-09-25 15:11:51 -03:00
Allan McRae
7bc5d55b56 libalpm: only chown downloaded files when running as root
Some libaplm utilities sync databases as a non-root user for use in
actvities other than system updates.  The ability to download as a
non-root user was broken as part of the download sandboxing.

Applying a minimial fix by preventing the chown of the downloaded file
if the user is non-root.  A larger change increasing the robustness
and error checking of this path is warranted in the future.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-09-08 11:49:21 +10:00
KaranveerB
6ba5c20e76
pactest: add test for empty replacements strings 2024-08-03 16:29:26 -07:00
KaranveerB
4c18204938
pacman/util.c: fix segfault when replace in strreplace is NULL 2024-08-03 16:29:11 -07:00
Remi Gacogne
cf473bcfbd Ensure that the download process cannot get new privileges
Signed-off-by: Remi Gacogne <rgacogne@archlinux.org>
2024-08-02 00:39:45 +00:00
Remi Gacogne
f142df92c7 Restrict syscalls for the download process whenever possible
Signed-off-by: Remi Gacogne <rgacogne@archlinux.org>
2024-08-02 00:39:45 +00:00
Allan McRae
c3aa1bc123 Fix typo in git source handling
Fixes #171

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-07-16 18:51:03 +10:00
Allan McRae
138cbae584 Update meson versions for release
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-07-14 19:11:18 +10:00
Allan McRae
dd20586baf Update index.asciidoc for release
Also, rebalance columns in release version table.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-07-14 19:11:18 +10:00
Allan McRae
aa1c64b21a Update translations for release
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-07-14 19:11:18 +10:00
Allan McRae
3223d6206b Update NEWS for 7.0.0 release
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-07-14 19:05:03 +10:00
Allan McRae
7299aadd7b Update README for 7.0.0 release
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-07-14 19:05:03 +10:00
Allan McRae
9841f14f81 Prepare tranlsation strings for 7.0.0 release
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-07-14 19:05:03 +10:00
Allan McRae
95e71ce52b Tidy up landlock check
This test was flagged as ambiguous by clang.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-07-14 19:03:23 +10:00
Allan McRae
cc0292a1ad Revert "_alpm_archive_fgets(): bail early if reached end of block"
This reverts commit 4dc21b965b.

Causes a segfault when reading some repos (gz compressed?)

Fixes #166.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-07-13 22:06:10 +10:00
Andrew Gregory
16a098a44e do not sort passed list
Sorting modifies the list in place, causing any existing pointers to the
list to point to a random element.

Fixes #165

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2024-07-11 01:27:06 -04:00
Vasiliy Stelmachenok
5213a70b88 tidy/strip: Fix incorrect recognition of static binaries as relocatable ones 2024-07-06 09:09:37 +00:00
Filip Hejsek
9151c44658 libmakepkg: Use git -c safe.bareRepository=all in bare repositories
Git commands can fail in bare repositories when global git config contains safe.bareRepository=explicit.
Some users set this option for increased security.
To be compatible with this configuration, explicitly set safe.bareRepository=all when invoking git in a bare repository.
2024-07-06 08:57:20 +00:00
Allan McRae
8d22f991f9 Add download sandbox related options to example config file
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-07-05 09:53:52 +10:00
Diego Viola
50bdd3d9bc Fix typos
Signed-off-by: Diego Viola <diego.viola@gmail.com>
2024-06-30 02:28:13 -03:00
Allan McRae
8d14b22260 repo-add: unconditionally create the database if it is missing
In f91fa546 (repo-add: do not recreate the database if nothing was changed),
repo-add was made to skip database write-out if there were no changes to
the database. However, this breaks the usage of repo-add to create a new
empty database: `repo-add /path/to/mydb/mydb.db.tar.xz`.

Bring back support for this use-case by always writing the database if
it is missing.

Original-patch-by: Ivan Shapovalov <intelfx@intelfx.name>
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-06-27 22:04:28 +10:00
Allan McRae
3f1943c84d Only copy source files onces when creating debug packages
The Arch sharutils package was spewing messages about "Permission denied" when
copying source files into the debug package.  This is due to the source files
having 444 permissions and being used in multiple binaries.  Only copy each
source file into the debug package onces to avoid this error.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-06-20 00:34:32 +00:00
Allan McRae
c9acfc2b50 Fix error when downloading signature file for an existing package file
If a package was already downloaded but its signature file was not,
pacman would download the signature then error out despite all files
being present.

Also fixes a similar error when some, but not all, package databases
were updated with -Sy.

Fixes #156

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-06-19 17:38:07 +10:00
Allan McRae
b60b779fc8 Fix calculation of space needed for download package
The calculation used the size of the package rather than the amount
remaining to download for partially downloaded packages.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-06-19 17:33:36 +10:00
Allan McRae
479f4d574a Prevent buffer overflow when using a scriptlet shell with a long path
Observed in Nixpkgs.  Fixes #157.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-06-19 07:41:11 +10:00
Remi Gacogne
9f8f94c056 Add --disable-sandbox and DisableSandbox
Signed-off-by: Remi Gacogne <rgacogne@archlinux.org>
2024-06-17 11:01:42 +10:00
Remi Gacogne
eacadbcc41
Restrict filesystem access to the download process whenever possible
Signed-off-by: Remi Gacogne <rgacogne@archlinux.org>
2024-06-14 09:30:20 +02:00
Remi Gacogne
24304c6df0 Fix up-to-date repo databases being redownloaded when sandboxed
Signed-off-by: Remi Gacogne <rgacogne@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-06-10 19:48:20 +10:00
Allan McRae
f0a7f85dbb libmakepkg: make configured BUILDENV readonly
PKGBUILDs should not be directly adjusting this variable

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-05-31 16:15:54 +00:00
Allan McRae
b013ca4221 makepkg: provide environment variable to disable PKGBUILD linting
On Windows based systems (e.g. msys), running PKGBUILD linting is very
slow due to time taken spawning bash subshells.  Additionally, some packages
have extreme amounts of (usually procedurally generated) splitting, which
also causes linting to be extremely slow.  Provide an environment variable
to disable PKGBUILD linting.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-06-01 02:12:23 +10:00
Diego Viola
44b9a53b2d Fix spelling of environment 2024-05-31 16:11:07 +00:00
Diego Viola
24455cc5b2 editorconfig: update url
Use https and lowercase characters.

Signed-off-by: Diego Viola <diego.viola@gmail.com>
2024-05-27 02:31:30 -03:00
Diego Viola
7bbfc17f3c Fix typos
Signed-off-by: Diego Viola <diego.viola@gmail.com>
2024-05-20 02:30:50 -03:00
Allan McRae
d74d7ec32c makepkg: remove GITFLAGS support
Supporting git source fragments (branch, commit, tag) is difficult in
conjunction with GITFLAGS usage - particularly with the most common
use cases that reduce the amount of data cloned from the upstream repo.

Leaving GITFLAGS in place an documenting that various git source features
are not supported when GITFLAGS are in used is not an ideal 'solution'.
Instead, remove GITFLAGS support.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-05-20 00:18:43 +00:00
Allan McRae
76e1cb1bf1 Revert "Prepare git src with git worktree"
This causes issues when repeatedly building a package using the same
git checkout.  There is also ambiguity of the default checkout when
trying to build from HEAD. See #142 and #143.

This reverts commit 85c421f1cb.
2024-05-20 10:15:33 +10:00
Allan McRae
0f2417f919 doc/makepkg.8: Improve --cleanbuild documentation
Fixes #45.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-05-12 03:33:01 +00:00
Allan McRae
e1df19ee6f makepkg: drop sudo permissions after use
Add the -k parameter to the sudo call to prevent caching of credientials.
This would (potentailly) stop a rogue sudo use within a PKGBUILD.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-05-12 03:30:06 +00:00
Allan McRae
6d85d9ae08 Document makepkg.conf.d/ drop-in configuration
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-05-12 03:25:42 +00:00
EnnoxHD
8aba032de4 makepkg: make 'not a clone of' visible with a new error code
Add a new error code to expose the 'not a clone of' error state of some source
providers (git and fossil). This allows other tools integrating further and
handle this specific error state.

One usecase evolves around frequently changing source locations in PKGBUILDs
of packages in the AUR.
2024-05-05 12:24:56 +10:00
Daan De Meyer
bcd4aad16c Stop redirecting stderr of bsdtar to /dev/null
It's extremely hard to figure out what's going from when bsdtar fails
here when we expect it to succeed. Stop tunneling stderr to /dev/null
to help users figure out what's going on when this fails.
2024-05-05 02:10:30 +00:00
Tom "Ravi" Hale
85c421f1cb Prepare git src with git worktree 2024-05-04 22:28:57 +10:00
Allan McRae
9f78628f6c Update RELEASE documentation for website deployment via gitlab CI
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-05-04 11:21:26 +00:00
Allan McRae
60d517107b Deploy website using gitlab pages
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-05-04 11:21:26 +00:00
Wiktor Kwapisiewicz
7fc080c582 Remove --use-agent from the manpages of makepkg and repo-add 2024-05-04 21:19:56 +10:00
Christoph Reiter
15a2338656 meson: use the custom meson provided intl dependency
Let meson deal with the system differences instead of handling
it manually.

The custom dependency was added in meson 0.59, then gained
static support with 0.60, and static support for cygwin with 0.61,
which is why the meson requirement is bumped to 0.61.

Debian bullseye ships meson 0.56, so switch to bookworm which
has 1.0.1
2024-05-04 21:05:48 +10:00
Chih-Hsuan Yen
9548d6cc76 Fix unstable git checksums
Closes https://gitlab.archlinux.org/pacman/pacman/-/issues/131
2024-05-04 10:14:11 +00:00
Allan McRae
792df078fa libmakepkg: add fortran buildenv to meson sources array
Fixes #132.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-05-04 10:10:23 +00:00
lilydjwg
8e30cd4e38 makepkg: fix git checksumming depends on user config 2024-04-22 04:48:19 +00:00
Allan McRae
03d884d7ff repo-add: handle lack of newline at end of .PKGINFO
Work around the final line not being parsed in .PKGINFO if there was a lack
of newline at the end of the file.  This could occur due to utilising a tool
other than makepkg to create packages.

The missed line created a difference in the parsing of .PKGINFO between
repo-add and pacman, causing packages to be seen as invalidwith pacman-6.1.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-04-22 04:46:30 +00:00
Allan McRae
7dcf9a2b49 libmakepkg: do not unset CHOST with !buildflags
Also ensure CHOST and MAKEFLAGS are exported.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-04-20 11:37:54 +10:00
Allan McRae
4dc21b965b _alpm_archive_fgets(): bail early if reached end of block
Bailing early when there are 0 blocks remaining means that we do not call
memchr on a NULL string (although with a 0 size parameter).  Fixes issues
reported using -fsanitise=address,undefined

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-04-08 10:34:10 +00:00
Allan McRae
936eff63bf Add guidelines for managing release branches
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-04-05 12:02:40 +10:00
Allan McRae
f86c15e780 unlink_file: restore trailing slash on directory before checking mountpoint
The dir_is_mountpoint() function has the explicit requirement that the
trailing slash of the directory is present.  We strip the trailing slash
in unlink_file() to handle directories replaced with symlinks, but that
then affects the dir_is_mountpoint() check.

Add the trailing slash when we have established we are dealing with a
directory. Note this may fail in the case of a file managed by pacmane
with name length of PATH_MAX that has been replaced by a directory on the
file system. Bail on this unlikely scenario.

In addtion, be less fancy with adjusting length of the file char array.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-04-05 00:51:13 +00:00
Allan McRae
49ebd856ec pacman-key: fix permission checks for non-root operations
Removing lock-never from the default gpg.conf file exposed a couple of bugs
in the permission checks in pacman-key.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-04-05 00:47:45 +00:00
Allan McRae
027ecbc7b8 libmakepkg: remove MAKEFLAGS from buildenv_vars
MAKEFLAGS should not be cleared by options=(!buildenv).

Regression introduced in commit 09e82f01ea

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-04-05 00:43:57 +00:00
Allan McRae
f763ff774a Fix leak in total progress bar
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-04-05 00:39:29 +00:00
Allan McRae
0ccb584262 Do not pass NULL paramenter to bsearch with empty filelist
A filelist can be non-NULL but empty (particularly with a lot of
NoExtract entries). Handle this in alpm_filelist_contains()

Identified using the undefined behaviour sanitizer.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-04-05 00:35:08 +00:00
Allan McRae
27eba85594 Fix typo in cb_progress
Introduced in 74deada511.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-04-02 23:18:34 +10:00
Remi Gacogne
cfa68f7b26 Restore partially downloaded files to the temporary directory
This allows downloads to be continued.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-04-01 20:52:55 +00:00
Remi Gacogne
e1a7b83e8e Download to a temporary directory owned by the Download user
Signed-off-by: Remi Gacogne <rgacogne@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-04-01 20:52:55 +00:00
Andrew Gregory
11c8eca9a6 pactest: test database downloads with optional signatures
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-04-01 20:52:55 +00:00
Andrew Gregory
0b6df551b5 pactest: Add basic sandboxed download tests
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-04-01 20:52:55 +00:00
Remi Gacogne
5e9bff6216 Stop trusting the Content-Disposition HTTP header 2024-04-01 20:52:55 +00:00
Allan McRae
26b7b35307 Remove random_partfile from payload struct
It is not used any more due to filling the payload structure earlier.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-04-01 20:52:55 +00:00
Allan McRae
04d04381bc libalpm: fill in more payload information before passing to downloader
Filling in more of the payload fields before passing to the downloader ensures
that the these fields do not get lost during sandboxed operations.

It also fixes the use of -U with XferCommand, but testsuite still fails due to
"404" page being downloaded for the signature. Given we can not identify this
as being a non-signature download with the XferCommand, we can just turn off
signature checking in this test.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-04-01 20:52:55 +00:00
Remi Gacogne
49d512267e Document DownloadUser
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-04-01 20:52:55 +00:00
Remi Gacogne
cf359b0da4 Add support for DownloadUser with XferCommand
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-04-01 20:52:55 +00:00
Remi Gacogne
93a796aa27 Add sandboxed download for the internal downloader
If the SandboxUser configure option is set, the internal downloader
will fork of a child process and drop to the specified user to download
the files.

Signed-off-by: Remi Gacogne <rgacogne@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-04-01 20:52:55 +00:00
Allan McRae
9667bc6b12 Expose _alpm_reset_signals() to library
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-04-01 20:52:55 +00:00
Remi Gacogne
62c6874689 Add callbacks for sandboxed operations
Add log and download callbacks to use within a sandbox.  These are
designed to be passed from the sandbox to the parent through a file
descriptor and then processed into alpm callbacks to be passed to the
frontend.

Note, only callbacks used in libalpm are added. Other callbacks should
be set to NULL in the child process.
2024-04-01 20:52:55 +00:00
Remi Gacogne
ce83cf6361 Provide function for switching user in child processes
Add alpm_sandbox_child() function that will be used for switching to a
less priviledged user to run child processes.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-04-01 20:52:55 +00:00
Remi Gacogne
56eb87287e Add DownloadUser configuration option
The DownloadUser option will be used to drop privledges to the
specified user when downloading files.

The intention is for this to be extended in the future  to a more
general sandbox configuration to cover operating on package and
database files prior to verification.

Add this option to pacman configuration and the various accessors into
the libalpm backend.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-04-01 20:52:55 +00:00
Vladislav Nepogodin
01e64e8b6a use snprintf instead of sprintf
sprintf does not check for buffer overflows (CWE-120)

	modified:   src/pacman/callback.c
2024-03-25 13:24:41 +10:00
Allan McRae
b2bb2e2482 makepkg: Fix missing end of line in -D documentaiton
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-03-20 21:39:41 +10:00
bartus
082094a1d8 Limit scope of name and a variable to avoid conflict with PKGBUILD scripts. 2024-03-19 12:43:00 +00:00
Allan McRae
b59d68a209 Update bug report URL in tranlsation configuration files
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-03-19 12:02:44 +10:00
Allan McRae
92102f477e makepkg: document -D in --help text
Fixes #110.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-03-19 01:47:42 +00:00
Demi Obenour
eb5bf69138 Fetch signature and database from the same URL
Previously, the for loops on lines 1035 and 1037 would advance to the
next element in the server list, even if downloading the URL succeeded.
If there are no more servers in the list, `s` would be NULL, causing
a NULL pointer dereference on line 1046.  If there were servers left
in the list, the signature would be downloaded from a wrong URL.

1. Fetching of database signatures is enabled.
2. There is only one enabled remote repository URL, or fetching from
   all but the last one fails and fetching from the last one succeeds.
3. An XferCommand is used.

Qubes OS Arch templates satisfy all of these conditions and trigger the bug.
2024-03-19 11:44:38 +10:00
Allan McRae
478af5d1c8 Fix read-after-free issue parsing config files
We were indirectly adjusting a pointer to a parameter that was declared
as a const.  This resulted in a use-after-free when using --debug:

[11:09:18] debug: config: finished parsing ��A�8_

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-03-19 00:40:09 +00:00
Dale young
942bbe2d2d Fix deadlink to the old bug tracker in footer
The bug tracker had been updated in doc/index.asciidoc, but the one in
doc/footer.asciidoc was still the old one, which is a deadlink now.

I udpated it just by copying the sentense in doc/index.asciidoc

Signed-off-by: Dale young <daleyoung4242@gmail.com>
2024-03-18 17:15:07 +08:00
Morten Linderud
bae9594ac1
debugedit: only check for debugedit if we build a package
We only really need debugedit while building the package, while this
check would run if you tried something like `makepkg --verifysource`.
Use the same checks as we have for fakeroot to wrap debugedit so we
don't beg for dependencies we don't need.

Fixes: 3ed08f97ec

Signed-off-by: Morten Linderud <morten@linderud.pw>
2024-03-14 23:07:08 +01:00
Allan McRae
111eed0251 Fix unused result warnings
Not actually a fix, as the pacman output will still be weird and
we will not gracefully exit, but it does print an error message...

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-03-14 01:50:05 +00:00
Christian Heusel
0571ee82bf repo-add: fix parseopts missing arg to -k/--key
The current code treats -k/--key as a binary option which later makes it
fail parsing the argument as then the end of arguments '--' is treated
as the GPGKEY. We fix this by adding the appropriate specifier to the
long and shortopt.

Closes https://gitlab.archlinux.org/pacman/pacman/-/issues/105

Fixes: 4f43ce3e ("repo-add: use parseopts from libmakepkg")
Signed-off-by: Christian Heusel <christian@heusel.eu>
2024-03-14 01:20:53 +00:00
Ivan Shapovalov
5e0496260b make_aligned_titles: pass the correct buffer length
The third parameter to wcstombs() is the length of the output buffer
(first parameter) in bytes. Take the correct sizeof() here.

This is not a problem in practice, but prevents _FORTIFY_SOURCE=3 from
detecting a possible output buffer overflow (as the source buffer is
bigger than the destination).

Fixes #104.

Signed-off-by: Ivan Shapovalov <intelfx@intelfx.name>
2024-03-13 04:32:42 +01:00
Allan McRae
95f148c222 Update website to reflect gitlab usage
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-03-06 10:23:33 +00:00
Allan McRae
d7f3ce1217 Manage releases through gitlab
Also provide an example for how to check for errors in translations

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-03-06 10:23:33 +00:00
Allan McRae
6bb95c8856 Fix error messages for unknown key in databases
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-03-05 07:25:11 +10:00
Allan McRae
e3dc296ba3 Pull translations for release
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-03-04 13:07:58 +10:00
Allan McRae
23151a8811 Update web index for release
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-03-04 11:44:11 +10:00
Allan McRae
4b25bb63c1 Update meson.build for release
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-03-04 11:44:11 +10:00
Allan McRae
1c536abef6 Update NEWS for 6.1 release
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-03-04 11:44:11 +10:00
Allan McRae
90f5ca42cc Update README for 6.1
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-03-04 11:44:11 +10:00
Andrew Gregory
9f6c081771 conf: do not default sysroot to /
Setting sysroot to / is not the same as having no sysroot, because the
sysroot is prepended to ALL config paths including relative ones:

$ cd /etc
$ pacman --config=pacman.conf
error: config file /pacman.conf could not be read: No such file or directory

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2024-03-04 01:33:51 +00:00
Andrew Gregory
cddad6fccd conf: make prepend_dir and globdir NULL aware
Allows sysroot to be left NULL.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2024-03-04 01:33:51 +00:00
Levente Polyak
016fd2633e
libmakepkg/srcinfo.sh: fix missing extglob in srcinfo_write_attr
We use an extended glob here, but were relying on having it globally set
in makepkg. This causes it to fail when used in scripts.

Since scripts using libmakepkg may not want extglob to be set, save and
restore the environment while explicitly setting extglob only where we
need it.

Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2024-02-28 21:30:22 +01:00
Allan McRae
f343db5b8e Do not segfault with badly formed URL
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-28 07:38:56 +10:00
Allan McRae
4a115b4dca Fix bug introduced to string_length
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-26 13:59:18 +10:00
Allan McRae
74deada511 pacman/callback.c: handle empty pkgname
In pacman's progress callback, pkgname being null may result in a
segfault, due to undefined printf behaviour.  libalpm always passes
at least an empty string for pkgname, so this situation is largely
avoided.

However, the callback mostly checked for pkgname's being non-null
and not empty.  This means a additional space was being added to
the output messages (although with zero actual effect on the output).

Be a bit more robust here by treating null and empty pkgname the
same and fixing the invisible output issue...

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-26 03:42:53 +00:00
Allan McRae
b30dac6a5b Improve robustness of parsing the --ask argument
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-26 13:14:23 +10:00
Allan McRae
5121108542 Improve robustness of parsing the --debug argument
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-26 03:10:35 +00:00
Allan McRae
c9c56be396 pacman/util.c: fix potential buffer overflow in string_length
A potential buffer overflow could occur if a detected terminal escape
sequence was not for a terminal colour (i.e. did not contain an "m").

Fix the potential buffer overflow while explicitly detecting only
terminal colour escape sequences.  Any other escape sequence is
unexpected, and just gets pushed to the terminal.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-26 03:07:08 +00:00
Allan McRae
1d1bb6fa1a pacman-key: remove lock-never from keyring configuration
I'm not sure why this was originally included, but it has now become
a problem with multiple processes updating the keyring (e.g. the
systemd timer for WKD updates from Arch Linux).

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-26 03:04:05 +00:00
loqs
dba383f092 makepkg: Add support for Fortran build flags
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-25 09:33:29 +10:00
Allan McRae
2a0dd9ec09 makepkg: move rust related documentation into the configuration file
Adding more and more languages will make the man page become increasingly
difficult to navigate.  Move documentation into the configuration file
where variables are defined.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-25 09:32:57 +10:00
Allan McRae
d55b47e551 Update copyright years
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-24 18:40:44 +10:00
Allan McRae
c8afb0aa1a Prepare translations
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-19 11:27:21 +10:00
Allan McRae
c7c4c2a7d2 verify_signature: wait as long as possible before bailing
Bailing early caused problems with makepkg failing on verify but expired
signatures.  As this is often out of the packagers control, and it is
better to verify a signature than not, we try bailing as late as possible
and let makepkg warn about the expired signature.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-19 09:24:13 +10:00
Andrew Gregory
7016adcb70 manually apply --sysroot to configuration
The previous chroot-based sysroot often broke due to glibc's delayed
loading for much of its functionality when the sysroot did not contain
compatible copies of the necessary libraries.

This approach instead manually prepends the sysroot to all configuration
paths.

BREAKING CHANGE: targets to -U are no longer interpreted relative to
sysroot

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-19 09:20:16 +10:00
Masato TOYOSHIMA
2180e4d127 libalpm: download signatures with the external downloader
Ensure relevant signature files are downloaded when using the fetch
callback.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-16 19:27:09 +10:00
Allan McRae
48729f8ecc libmakepkg: skip stripping guile-2.2 files
Guile 2.2 uses ELF format for its byte-compiled files.  These are not
normal executables, and are not strippable in the normal sense.

Given these are ELF files and detected by "file" as non-stripped binaries,
it is only possible to skip these using the file path.

Fixes #73

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-15 23:34:05 +00:00
Allan McRae
fface9001a Update "submitting-patches.asciidoc" for the move to gitlab
Also include a section encouraging discussion of large changes as there have
been a number of case of rejected features being reinvented.

Fixes #34

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-15 23:19:20 +00:00
Allan McRae
f74daa39e8 makepkg.conf.5: Add ellipsis to OPTIONS array description
We have added more options to makepkg, but adding them to the man
page entry would result in line wrapping on a standard width
terminal.  Instead, trucate and add ellipsis to indicate more
members (as described in the section below).

Fixes #91

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-15 23:14:28 +00:00
Allan McRae
22c043d4c3 Fix format string
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-16 09:09:45 +10:00
morganamilo
abc6dd7411 libalpm: check calloc in alpm_list_cmp_unsorted 2024-02-15 23:02:15 +00:00
morganamilo
7a43c6fee0 Speedup comparing lists if they happen to be in the same order 2024-02-15 23:02:15 +00:00
morganamilo
62095d916b Prompt to delete invalid package 2024-02-15 23:02:15 +00:00
morganamilo
386125fc89 Validate extra data when comparing dbpkg to pkgfile 2024-02-15 23:02:15 +00:00
morganamilo
196de7e94a Add function to check if lists are equal 2024-02-15 23:02:15 +00:00
morganamilo
e1dc609939 libalpm: print warnings for unknown keys in databases/packages
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-10 11:31:12 +10:00
Allan McRae
0649a66ee5 Add ALPM_PKG_REASON_UNKNOWN type
Return ALPM_PKG_REASON_UNKNOWN when parsing of %REASON% in the local
database fails.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-09 11:14:38 +10:00
morganamilo
6e6d3f18e3 libalpm: don't use atio for pkgreason
atio's behaviour is undefined if the input is not valid. Also it does
all sorts of whitespace and prefix handling which we don't need for
pkgreason.

Instead of going into UB on invalid input we now return EXPLICIT as the
fallback and print an error. However we don't actually error out as the
DB parsing tries to be error tolerant.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-09 11:14:38 +10:00
Andrew Gregory
0a394144b2 validate package metadata after loading
alpm has certain requirements for package metadata necessary for proper
functioning, name and version in particular.  These requirements are
already enforced in makepkg, but nowhere in alpm.

Exceptions are treated as errors for non-local packages because they
cannot be installed without potentially resulting in undefined behavior.
Exceptions for local packages are treated as warnings because they are
already installed, so any damage has already been done, and the user
would otherwise have no way to uninstall them.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2024-02-07 12:27:26 +00:00
Andrew Gregory
fde59b99e8 be_package: delay freeing archive resource
The error path uconditinally tries to free the archive, leading to a
double-free segmentation fault if the error path is triggered after
already freeing it.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2024-02-07 12:27:26 +00:00
Andrew Gregory
edd57c8b96 perform cleanup on sync db parsing errors
Cleanup was only being performed when libarchive failed to actually read
the file.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2024-02-07 12:27:26 +00:00
Andrew Gregory
5c75a55c7d allow freeing partial db package cache
The free function was checking DB_STATUS_PKGCACHE, which is only set
once the package cache has been fully built.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2024-02-07 12:27:26 +00:00
Allan McRae
56f1eeef4b Remove obsolete Doxyfile directives
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-06 20:03:08 +10:00
David Runge
f8c2e59ec5
pacman-key: Make signature verification more robust by checking pipes
To ensure we are not dropping the return code of the `gpg` call due to
piping into `grep`, we make use of `PIPESTATUS` to check the return code
of each command separately.

Additionally, we can now distinguish between two states: The signature
does not verify (e.g. due to technical reasons) and the signature is
not trusted.

Signed-off-by: David Runge <dvzrv@archlinux.org>
2024-02-04 10:06:43 +01:00
David Runge
16a064701a
makepkg: Move check for signature metadata to central location
Move the check for the `NEWSIG` metadata keyword contained in the
GnuPG based statusfile to `parse_gpg_statusfile()` so that it is also
run when creating the statusfile in `verify_file_signature()` and not
only when running `verify_git_signature()`.

Signed-off-by: David Runge <dvzrv@archlinux.org>
2024-02-04 10:06:42 +01:00
David Runge
86ec26b2d3
makepkg: Improve robustness of signature verification by limiting terms
The output of
`gpg --quiet --batch --status-fd /dev/stdout --verify <signature_file> <file> 2> /dev/null`
or
`git verify-commit --raw <commit> 2>&1`
may contain binary data, if the signature has been created with an
OpenPGP implementation, that e.g. makes use of notations.
If the notation string (see `NOTATION_DATA` in /usr/share/doc/gnupg/
DETAILS) contains a trailing binary char, this will break signature
verification, as any following entry (e.g. `VALIDSIG`) will be offset.

As we are only making use of a narrow set of terms from the statusfile
(namely `NEWSIG`, `GOODSIG`, `EXPSIG`, `EXPKEYSIG`, `REVKEYSIG`,
`BADSIG`, `ERRSIG`, `VALIDSIG`, `TRUST_UNDEFINED`, `TRUST_NEVER`,
`TRUST_MARGINAL`, `TRUST_FULLY`, `TRUST_ULTIMATE`), we are applying a
filter, so that only understood terms are written to the file.

Signed-off-by: David Runge <dvzrv@archlinux.org>
2024-02-04 10:06:42 +01:00
David Runge
3aa096a74f
makepkg: Emit early error if signature verification fails
Emit an early error message if tag or commit verification with git or
detached signature verification with gpg fails.
Make `verify_file_signature()` and `verify_git_signature()` return
non-zero in this case and set errors to `1`, so that later checks
in `check_pgpsigs()`, although still run, can not lead to a positive
result.

Signed-off-by: David Runge <dvzrv@archlinux.org>
2024-02-04 10:06:40 +01:00
morganamilo
bf76b5e89f libalpm: correctly log curl_download_internal return value
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-04 10:23:34 +10:00
Allan McRae
ce528a2654 libalpm/discspace.c: ensure mount points provide directories
In the very unlikely situtation where getmntent() and friends return
non-null, but the mount directory is NULL, a null dereference could
occur. It is unclear what the best course of action is in this case,
so just move on to the next mount point.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-04 09:02:36 +10:00
Allan McRae
f996f30163 libalpm/remove.c: prevent undefined behaviour in shift_pacsave error path
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-04 09:02:36 +10:00
Daniel M. Capella
2ba08e622b Update maintainers list
Signed-off-by: Daniel M. Capella <polyzen@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-04 08:58:33 +10:00
Allan McRae
4856fb53ac Add -Wunused_result to debug build compiler flags
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-04 08:53:44 +10:00
Allan McRae
a6b2524762 Ensure paths fit in PATH_MAX when cleaning cache
If a path length exceeds the PATH_MAX value, then it gets truncated
when building the path of the file to delete. This could (in a very
unlikely case...) result in the wrong file being deleted.  Check the
path fittedin the buffer before removing files.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-04 08:44:24 +10:00
Allan McRae
2079f6866a alpm_list_reverse: restore original list on failure
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-04 07:56:00 +10:00
Allan McRae
845dadf183 _cache_mtree_open: remove unused variable
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-04 07:56:00 +10:00
Allan McRae
dfee773364 clean_filename: use strdup instead of malloc and memcpy
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-04 07:56:00 +10:00
Allan McRae
c64f898c48 _alpm_pkg_load_internal: remove unneeded if statement
This statement is always true due to an earlier test.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-04 07:56:00 +10:00
Allan McRae
16a2a79728 libalpm/signing.c: prevent underflow in length_check
The length_check function could underflow if the provided buffer index
is greater than the signature buffer length, leading to an out of
bounds read.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-04 07:54:12 +10:00
Allan McRae
6711d10f96 pacman/conf.c: fix leak on error in setdefaults()
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-02-04 07:49:08 +10:00
Allan McRae
36fcff6e13 pacman/util.c: fix user after free in print_packages
Signed-off-by: Allan McRae <allan@archlinux.org>
2024-01-26 18:13:11 +10:00
Allan McRae
3c28c30133 Fix typo in exporting RUSTFLAGS
Fixes #77

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-01-14 08:50:29 +10:00
Ronan Pigott
4c93e63ddf add.c: drop newline in permission and ownership log messages
These are the only log messages produced by pacman that include an
embedded newline, and it looks very incongruous in a typical pacman.log.

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-01-10 08:52:35 +10:00
Allan McRae
f69d9b4475 makepkg: only check software once
Move the checks for software and gpg signing ability to after the
fakeroot section so that it is only executed once. This also fixes
gpg (lack of) interaction under fakeroot.

Fixes #69

Signed-off-by: Allan McRae <allan@archlinux.org>
2024-01-09 22:42:45 +00:00
Andrew Gregory
42fa74e91a free handle resources before running scripts
The primary purpose of this is to allow cleanup of file descriptors
allocated by curl that were left open in the child.  I am not aware of
any issues caused by the open file descriptors, but think it better to
not leave random open fd's lying around.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2024-01-09 22:39:14 +00:00
Andrew Gregory
929bad61c0 _alpm_handle_free: free all in-memory resources
Freeing handle resources was previously split awkwardly between
_alpm_handle_free and alpm_release.  This consolidates the freeing of
all in-memory resources to _alpm_handle_free, leaving alpm_release as a
thin wrapper that provides safety checks and frees any external
resources, e.g. removing lock files.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2024-01-09 22:39:14 +00:00
Morten Linderud
00d2b1f902
strip: don't create debug packages from .a files
.a files are not valid ELF files so we can't run objcopy nor debugedit
on them.

Rename STRIPLTO to STATICLIB to be more descriptive.

Signed-off-by: Morten Linderud <morten@linderud.pw>
2023-12-17 16:04:45 +01:00
Morten Linderud
7a4fff3310
strip: split off file stripping and debug package creation
Some projects might duplicate the file in multiple locations for one
reason or another. When debug packages are enabled, `makepkg` will only
strip the first occurrence of the binary and abort early on all the
other binaries.

Signed-off-by: Morten Linderud <morten@linderud.pw>
2023-12-17 16:04:45 +01:00
morganamilo
8d38746586
libalpm: fix check_pgp_signature docs
The function did have these return values a long time ago but now only
return 0 or -1.
2023-12-04 15:34:49 +00:00
Andrew Gregory
0df44c2e20 db.c: set pm_errno for server list modifications
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2023-12-02 04:56:25 +00:00
Andrew Gregory
dc91476555 pacman: add cache server support
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2023-12-02 04:56:25 +00:00
Andrew Gregory
bad3e13eaa conf.c: remove unnecessary _add_mirror function
It does very little, is only used in one place, and can't easily be
reused for other server types due to the inclusion of an error message.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2023-12-02 04:56:25 +00:00
Andrew Gregory
45e94e2dae pmtest: return pkg from addpkg2db
Allows more compact syntax:

p1 = self.addpkg2db('sync', pmpkg("foo"))

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2023-12-02 04:56:25 +00:00
Andrew Gregory
3aa1975c1d alpm: add cache server support
Cache servers differ from regular servers in that they do not produce
warnings and are not removed from the server pool for "soft errors"
(i.e. the server was reachable, but the download failed) and they are
not used for databases.  If a host is used for both a cache server and a
regular server, it may still be removed from the server pool for soft
errors that occur when used as cache server and removal from the server
pool for soft errors will not affect future attempted use as a cache
server.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2023-12-02 04:56:25 +00:00
Andrew Gregory
56626816b6 dload: differentiate between hard and soft errors
Set error count to -1 to indicate a hard error to allow them to be
treated differently.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2023-12-02 04:56:25 +00:00
Allan McRae
0f512ae46e Do not increment on every database error to avoid overflow
Signed-off-by: Allan McRae <allan@archlinux.org>
2023-12-02 04:55:29 +00:00
Allan McRae
d56e9ed083 Increment error count on filelist conflicts in local database
Signed-off-by: Allan McRae <allan@archlinux.org>
2023-12-02 04:55:29 +00:00
Andrew Gregory
2d190d5a33 meson.build: add _FILE_OFFSET_BITS to pkgconfig
Meson automatically sets _FILE_OFFSET_BITS but that value was not
getting carried through to the libalpm pkgconfig file, breaking
downstream projects that relied on it.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2023-11-25 13:05:00 -08:00
Andrew Gregory
2e23126e2a remove unused pkgconfig template
libalpm uses meson's pkgconfig module which does not use the template
file.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2023-11-25 13:04:56 -08:00
Levente Polyak
18e49f2c97
debugflags: ensure to only append debug flags once when building
During a package build we call prepare_buildenv in multiple stages of
the process. For debug packages, one of the hooks is buildenv_debugflags
which populates the debug flags to the according variables.

The issue is that the behavior of the current implementation of
buildenv_debugflags is not idempotent, so consecutive calls will append
the same flags again. In certain cases this isn't an issue, however
for context aware build frontends like cargo any change of the build
inputs leads to a fresh build. This means that any invocation of such
a build ecosystem inside the package() function will trigger a full
rebuild, which is not desired.

To fix this issue, this commit makes buildenv_debugflags idempotent
by only appending flags once to the target variables.

Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2023-11-17 18:56:44 +01:00
Patrick Northon
0108e2c64e Omit trailing .git from url when comparing git remote urls. 2023-11-04 10:09:59 +10:00
Diego Viola
94d9c2affe doc/PKGBUILD: fix typo
Signed-off-by: Diego Viola <diego.viola@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2023-11-04 00:03:23 +00:00
morganamilo
6e9ab43451 Document MAKEPKG_LIBRARY in makepkg(8) 2023-11-04 00:02:17 +00:00
morganamilo
9af4033cad Rename LIBRARY to MAKEPKG_LIBRARY
Implements #59.
2023-11-04 00:02:17 +00:00
Vekhir
31ffbc94ca Delete entire $srcdir upon clean build
Currently, the file glob used to clean the $srcdir misses dotfiles.

This commit instead removes the directory entirely and recreates it.
Since the directory has to exist prior to deletion, the creation commands
are duplicated. Perhaps they could be moved to a function later on.

The directory cannot be removed while inside it, so the directory change
is moved down the line. One important insight here is that almost all functions
after it are actually independent of $pwd, allowing the optimization of just
not changing directory. They do however depend on the existence of $srcdir, so
it has to be recreated.
The only exception to this is `extract_sources` which depends on $pwd being $srcdir.

An alternative proposal wanted to extend the file matching for deletion, but it
was deemed impractical.
2023-11-04 00:01:22 +00:00
Jack Rosenthal
e9b385a636 alpm: Don't chroot() to "/"
chroot() requires CAP_SYS_CHROOT.  If the caller has put us in the
right root directory already, don't call chroot().  This allows
running pacman in a containerized environment without CAP_SYS_CHROOT.
2023-10-23 12:13:10 +00:00
morganamilo
917b67f5d1 Fix -D in package()
When entering fakeroot makepkg calls itself with it's original args
causing it to cd again and error
2023-10-20 22:40:44 +01:00
Morten Linderud
331b277eea makepkg: Implement the verify function
This patch implements a new verify function in makepkg. It allows us to
do arbitrary authentication on sources before extraction.

There are several new signing and validation methods being implemented
and it would be hard to have `makepkg` implement support for things such
as sequoia, cosign or minisign. This would allow us to distribute
generic validation functions.

Signed-off-by: Morten Linderud <morten@linderud.pw>
2023-10-02 05:12:12 +00:00
Felix Yan
30f9a2e263 Correct typos in zsh_completion.in 2023-10-02 04:34:24 +00:00
morganamilo
aff12189d8 libalpm: check filecache_find return and log errors
Some user had erros while updating their system.

:: Proceed with installation? [Y/n]
:: Retrieving packages...
checking keyring...
checking package integrity...
error: failed to commit transaction (invalid or corrupted package)
Errors occurred, no packages were upgraded.

The issue was filecache_find returning null and alpm passing that null
path to check validity. How this happened I have no idea. It may be
something to do with the user's cachedir being a network drive.

Also warn when the file exists but it is not a regular file or can not
be opened.
2023-09-30 13:28:31 +00:00
Allan McRae
332d2a1922 repo-add: clarify exit messages
Clarify if repo-add does not create a new database due to failures
or due to there being nothing to do.

Signed-off-by: Allan McRae <allan@archlinux.org>
2023-09-30 23:27:04 +10:00
Ivan Shapovalov
f91fa546f6 repo-add: do not recreate the database if nothing was changed
Signed-off-by: Ivan Shapovalov <intelfx@intelfx.name>
Signed-off-by: Allan McRae <allan@archlinux.org>
2023-09-30 23:18:41 +10:00
morganamilo
b4f11d5496 alpm: test access of symlinks not where they point
On platforms that have AT_SYMLINK_NOFOLLOW

Fixes FS#69720
2023-09-26 03:37:49 +00:00
morganamilo
015cdb21bd
Fix unused variable warning 2023-09-20 04:32:21 +01:00
Xiretza
05f283b5ad tests: fix order of fakechroot + fakeroot nesting
As noted in the fakechroot(1) man page, fakeroot and fakechroot
might wrap the same C library functions. Arch Linux hit this
recently with calls to stat(). It is important to start the fake
environment in proper order - fakeroot should be started inside
fakechroot.

Signed-off-by: Allan McRae <allan@archlinux.org>
2023-09-19 17:55:24 +10:00
Finlay Maroney
34611a6643 Avoid double slash when explicitly passing --root or --rootdir
Passing a path with a trailing slash to --root or --rootdir can lead to a
double slash at the start of paths.  e.g.

$ pacman --root / -v 2>1  | grep " //"
Log File  : //var/log/pacman.log

In MSYS2, paths starting with // will hit the network and fail.

Avoid this be explicitly stripping the trailing / from paths passed to these
flags.

Signed-off-by: Allan McRae <allan@archlinux.org>
2023-09-12 14:22:36 +10:00
Robin Candau
76b140c72a Replace the bzr package by breezy for the bzr protocol in makepkg.conf 2023-09-11 19:11:40 +02:00
Matthew Sexton
5f43ac85f6 specify which files are updated by --refresh option
Ref: FS#77697

Signed-off-by: Matthew Sexton <mssxtn@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2023-09-11 22:59:53 +10:00
morganamilo
0dfe5c96ae makepkg: add -D flag to change directory before building
This is similar to -C in git/make/nina. Sadly -C is already taken for
us.

This is useful for scripts where you for loop over packages, as well as
when I'm testing makepkg builds and I'm too lazy to cd.
2023-09-09 11:52:11 +10:00
InsanePrawn
36d70a93e2 pacman-key: allow overriding KEYRING_IMPORT_DIR with --populate-from
Signed-off-by: InsanePrawn <insane.prawny@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2023-09-07 00:12:41 +10:00
Allan McRae
717e5e9157 Add PRINT_FORMAT_LIST define to remove repetitive code
Signed-off-by: Allan McRae <allan@archlinux.org>
2023-09-06 17:56:55 +10:00
Allan McRae
e7d7433b4b Rename macro for print-format handling of strings
Signed-off-by: Allan McRae <allan@archlinux.org>
2023-09-06 17:56:55 +10:00
Jelle van der Waa
e210634982 util.c: extend --print-format with "%m"
Add md5sum as printable format string.

Signed-off-by: Allan McRae <allan@archlinux.org>
2023-09-06 17:56:55 +10:00
Jelle van der Waa
6968f77026 util.c: extend --print-format with "%G"
Add a new print attribute "%G" which prints groups.

Signed-off-by: Allan McRae <allan@archlinux.org>
2023-09-06 17:56:55 +10:00
Jelle van der Waa
06db927a1a util.c: extend --print-format with "%H"
Add a new print attribute "%H" which shows conflicts.

Signed-off-by: Jelle van der Waa <jelle@archlinux.org>
2023-09-06 17:56:55 +10:00
Jelle van der Waa
909f2e86c3 util.c: add "%O" to --print-format
Add the option to print optional depends with "%O".

Signed-off-by: Jelle van der Waa <jelle@archlinux.org>
2023-09-06 17:56:55 +10:00
Jelle van der Waa
5bd0b98b42 util.c: extend --print-format with %R and %P
Add provides "%P" and replaces "%R" as format attribute.

Signed-off-by: Jelle van der Waa <jelle@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2023-09-06 17:56:55 +10:00
Jelle van der Waa
c1d4a6198c Extend --print-format with %L
Add format attribute for licenses.

Signed-off-by: Allan McRae <allan@archlinux.org>
2023-09-06 17:56:55 +10:00
Allan McRae
f5af66f130 Remove unnecessary check
Signed-off-by: Allan McRae <allan@archlinux.org>
2023-09-06 17:56:55 +10:00
Allan McRae
5473c9fd3f squash
Signed-off-by: Allan McRae <allan@archlinux.org>
2023-09-06 17:56:55 +10:00
Allan McRae
e58d799c47 Generalise concat_alpm_depends for any list
Replace concat_alpm_depends() with concat_list() which takes an
additional parameter to handle the formatting of non-string
data types.

Signed-off-by: Allan McRae <allan@archlinux.org>
2023-09-06 14:39:00 +10:00
Matthias Kurz
366b527757 libmakepkg: make sure git cloned repo's remote is named origin
makepkg assumes that the remote git repo is named "origin" at several
places in its handling of git sources. It is possible to set the remote
repo name since git v2.30.0 (with bug fix for bare checkouts in v2.30.2).

Add "--origin=origin" to all git clone commands.

Signed-off-by: Allan McRae <allan@archlinux.org>
2023-09-06 13:51:32 +10:00
morganamilo
e83e53f3f9 makepkg: lint empty arrays
While depend arrays are already linted, many array kinds are still
not. An empty string is never a valid array value so check all
arrays for it.
2023-09-06 12:14:55 +10:00
morganamilo
2348dcab22 pacman+libalpm: print version names for conflicting packages
When ever pacman prints a conflict, it now prints pkgname-version,
instead of just pkgname.

alpm_conflict_t now carries *alpm_pkg_ts instead of just the
names of each package.

Fixes FS#12536 (point 2)
2023-09-05 01:57:01 +00:00
morganamilo
f9d8beef45
Add meson log to artifacts 2023-09-04 22:00:51 +02:00
morganamilo
85ab0307d7
Fix compile on some platforms
Controlling the type of getmntinfo's param was decided by
whether or not we had the statvfs type avaliable. But getmntinfo uses
statfs regardless of this except on netbsd where it uses statvfs.

Add a check to detect which type our version of the function uses.
2023-09-04 22:00:48 +02:00
Nicolas Rolans
ffde12cebd repo-add: fix exit on mktemp failure 2023-08-28 12:43:56 +00:00
Jouke Witteveen
37dae721d3 Replace md5sums with sha256sums in documentation
As noted in !24, md5sums are outdated.
2023-08-28 12:27:28 +00:00
Ben Westover
aa3a1bc3b5 proto: Change the default checksum from md5 to sha256
MD5 isn't a very good checksum, and the PKGBUILD page on the Arch Wiki
states that it should not be used, instead recommending sha256 or b2.
This patch changes the default from md5 to sha256 because that seems to
be the most commonly used checksum today.

Signed-off-by: Ben Westover <kwestover.kw@gmail.com>
2023-08-28 22:25:10 +10:00
Allan McRae
298755c905 pacman: do not check file md5sums
The file md5sums are removed from the .MTREE file, so pacman should
not attempt to check them.

Signed-off-by: Allan McRae <allan@archlinux.org>
2023-08-28 22:17:51 +10:00
Levente Polyak
ee933acf84 makepkg: immutable bzr by hashing the checkout content
This feature makes bzr VCS build inputs immutable by adding support for
pinning a bzr checkout by a hash of its content using the deterministic
export functionality `bzr export`.

This feature allows to preserve security implications of immutable build inputs
using a trusted cryptographic hash function of the content.

Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2023-08-28 22:15:03 +10:00
Levente Polyak
ca3c873d48 makepkg: immutable mercurial sources by hashing the checkout content
This feature makes Mercurial VCS build inputs immutable by adding
support for pinning a Mercurial checkout by a hash of its content using
the deterministic export functionality `hg archive`.

This feature aids packagers by allowing them to use simple and
convenient refnames (instead of full commit hashes) in the `PKGBUILD`
while still preserving security implications of immutable build inputs
using a trusted cryptographic hash function of the content.

Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2023-08-28 22:15:03 +10:00
Levente Polyak
2fc2ab6cf0 makepkg: immutable git sources by hashing the checkout content
This feature makes Git VCS build inputs immutable by adding support for
pinning a Git checkout by a hash of its content using the deterministic
export functionality `git archive`.

This feature aids packagers by allowing them to use simple and
convenient refnames (instead of full commit hashes) in the `PKGBUILD`
while still preserving security implications of immutable build inputs
using a trusted cryptographic hash function of the content.

Previously VCS source downloads have been skipped for `--geninteg` and
`--source` as both options did not need a checkout. This commit changes
this behavior by forcing the download of all sources as integrity checks
and generation requires to have an up to date state.

Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2023-08-28 22:15:03 +10:00
kpcyrd
843bf21e79 libmakepkg: Fix non-reproducible binaries by processing debuginfo in order 2023-08-27 13:03:40 +02:00
Allan McRae
2c45e854ab Disable brittle valgrind test in CI
Signed-off-by: Allan McRae <allan@archlinux.org>
2023-05-22 19:32:47 +10:00
Allan McRae
a81ec016d7 Update pactest README
Signed-off-by: Allan McRae <allan@archlinux.org>
2023-05-22 19:25:23 +10:00
Allan McRae
55da1a01b6 makepkg.conf.in: strip leading slash from LIB_DIRS
Signed-off-by: Allan McRae <allan@archlinux.org>
2023-05-22 18:55:23 +10:00
Allan McRae
5e94752434 makepkg.conf.5: correction option name
Also fix typo "librarys"

Signed-off-by: Allan McRae <allan@archlinux.org>
2023-05-22 18:54:01 +10:00
Allan McRae
262aa6c24e Fix comment
Signed-off-by: Allan McRae <allan@archlinux.org>
2023-02-13 12:09:11 +00:00
Allan McRae
3323662ee0 makepkg: do not recurse into LIB_DIRS when looking for library provides
We should only find library provides in the configured directories, and
not their subdirectories.

Signed-off-by: Allan McRae <allan@archlinux.org>
2023-02-13 12:09:11 +00:00
Allan McRae
6c913af95d Add the -pedantic' compiler flag back to our debug builds
This was lost in the transition from autotools to meson. No additional
warnings are given with current gcc and clang.

Signed-off-by: Allan McRae <allan@archlinux.org>
2023-02-13 22:07:32 +10:00
Allan McRae
71764b6d4c makepkg.conf: allow configuration additions via a subdirectory
Move rust related buildflags to their own configuration file to
provide an example of how other languages could be supported.

Signed-off-by: Allan McRae <allan@archlinux.org>
2023-01-17 10:26:07 +10:00
Allan McRae
e0bbfb5682 libmakepkg: ensure clearing of buildflags happens first
When 'options=('!buildflags') is used, we want to ensure our
buildflags are cleared first. Currently this happens due to luck
of alphabetical ordering, but this could change with libmakepkg
drop-ins.

Signed-off-by: Allan McRae <allan@archlinux.org>
2023-01-13 11:35:42 +10:00
Allan McRae
09e82f01ea libmakepkg: move rust buildenv handling to separate file
This serves as a demonstration for how other languages could drop
in support into libmakepkg.

Signed-off-by: Allan McRae <allan@archlinux.org>
2023-01-13 11:35:35 +10:00
Stefan Weil
d35728f924 pacman-key: Fix shell syntax
Fixes: 3f8029af92 ("pacman-key: Use ngettext for plurals")
Signed-off-by: Stefan Weil <sw@weilnetz.de>
2023-01-01 15:54:48 +01:00
Allan McRae
3f8029af92 pacman-key: Use ngettext for plurals
There are two strings that may be singular or plural in pacman-key.
Use ngettext to handle these strings correctly, and provide a fallback
function if it is not available.

Fixes FS#70556.

Signed-off-by: Allan McRae <allan@archlinux.org>
2023-01-01 13:41:52 +10:00
Allan McRae
6344aab3bd zsh: make names unique to avoid clashes
The function _keys is a bit generic and can result in clashes.  Change
other functions starting with _key_ to be _pacman_key_ as well.

Fixes FS#74507.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-12-24 00:55:30 +10:00
morganamilo
52eb094aa2 Fix repo-add
Commit 4f43ce3e4a broke repo-add by
switching to parseopts without accounting for the added "--". This caused
the dbname to always be read as "--".

Accounts for "--" and makes repo-add respect "--" as end of opts.
2022-12-19 10:08:57 +10:00
Allan McRae
a194197369 makepkg.conf: clarify PKGEXT and SRCEXT
Mention valid suffixes should start with .pkg or .src

Fixes FS#64749.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-12-19 09:56:29 +10:00
Ziemowit Laski
f4f66fcca7 Bump required GPGME version to 1.12.0
GPGME_KEYLIST_MODE_LOCATE was introduced in 1.12.0

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-12-13 11:46:18 +10:00
Allan McRae
bb035eba4c gitlab CI: use "meson setup" everywhere
Avoids a warning from meson.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-12-13 10:00:13 +10:00
Allan McRae
fcb1d4f87e makepkg: package debug source files with options 'debug' and '!strip'
When package software with debug symbols without stripping, we should
still process the files with debugedit and include the needed source
files in the package.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-12-13 10:00:13 +10:00
Allan McRae
471a030466 Avoid NULL deference in curl_check_finished_download
We have not set handle in the function at this stage, so we can not
assign an error to it.  Pass the handle to the function to avoid
waiting until the payload is retrieved.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-12-13 10:00:13 +10:00
Allan McRae
775d511f42 load_packages: fix memory leak on error
The memory assigned in _alpm_pkg_load_internal was not freed on
error.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-12-13 10:00:13 +10:00
Allan McRae
19a8587459 _alpm_pkg_load_internal: prevent double closing file descriptor
Move closing of the file descriptor until the end of the function, as
any following error will lead to a "goto error" that attempts to close
it again.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-12-13 10:00:13 +10:00
Allan McRae
ea83fd3927 Catch possible error in archive_entry_pathname when extracting files
Prevents a null deference on error.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-12-13 10:00:13 +10:00
Allan McRae
0fe764a253 Fix memory leak when setting up download bars
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-12-13 10:00:13 +10:00
Allan McRae
3436bc6c3e Finish comparing all pairs of filenames for duplicates before erroring
This also prevents a use-after-free issue where we free the list we
are interating over and the do i->next.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-12-13 10:00:13 +10:00
Allan McRae
0e938f1886 libmakepkg: fix compatibility with bash-5.2 patsub_replacement
Bash-5.2 introduced the patsub_replacement shell option, which is enabled
by default.  Apparently is it supposed to handle a sed-like idiom, but
what it does achieve is making any substitution involving a "&" requiring
special care.

For makepkg's DLAGENTS, we replace "%o" and "%u" if present.  Any "&" in
the replacement fields triggers patsub_replacement unless quoted.  This is
particularly important for the URL field.

Add relevant quotes to avoid issues.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-12-12 18:37:59 +10:00
Allan McRae
1327ce7bd8 makepkg: remove md5sums from generated mtree file
md5sums are cryptographically broken and we supply sha256sums to verify
files on a users system have not been modified from the packaged version.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-12-04 20:15:33 +10:00
Allan McRae
310bf878fc repo-add: do not add md5sums to the repo dbs
Keeping md5sums in the repo databases no longer serves a real purpose.
md5sums are no longer considered  secure, and we already have sha256sums
in the repos (along with PGP verification).

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-12-04 20:15:33 +10:00
Allan McRae
4f43ce3e4a repo-add: use parseopts from libmakepkg
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-12-04 20:14:32 +10:00
Allan McRae
e7806a43e0 pacman.conf.in: adjust example custom repo path for consistency
The example makepkg.conf.in suggests using "PKGDEST=/home/packages". It makes
sense to use the same path for the custom repo example in pacman.conf.in.

Fixes FS#48497.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-12-04 20:11:43 +10:00
Allan McRae
23aa82812e Fix typo in comment
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-11-08 14:20:36 +10:00
Allan McRae
05e52ef796 Document alpm_pkg_xdata_t type and accessor
Also more definitions to more relevant areas in alpm.h.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-11-08 14:19:35 +10:00
Allan McRae
83e5326ac9 Remove obsolete Doxyfile declarations
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-11-08 11:49:31 +10:00
Allan McRae
b2c9543ea9 Use modern openssl interfaces for calculating MD5 and SHA256 checksum
The currently used openssl interfaces for calculating checksums have been
deprecated in openssl-3.0.  Move to the modern interfaces to avoid build
warnings.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-11-07 16:58:29 +10:00
Morten Linderud
3ed08f97ec
executable/meson.build: include debugedit.sh.in
Signed-off-by: Morten Linderud <morten@linderud.pw>
2022-11-07 01:02:12 +01:00
Andrew Gregory
da68447ec6 set bash env variables before running scripts
Bash sources user configuration files under a number of conditions that
can cause issues with scripts when bash is used as the scriptlet shell.

Bash assumes it's being run under rsh/ssh if stdin is connected to a
socket and sources the user bashrc unless the environment variable
$SHLVL is >= 2.  Commit 6a4c6a02de
switched from pipes to sockets when communicating with child processes
to work around SIGPIPE issues.  Normally $SHLVL would be inherited from
the shell running pacman, but operations involving scriptlets are
generally run with sudo which does not let the $SHLVL variable through
unless specifically configured to.

Similarly $BASH_ENV can cause bash to source user-specified configuration
files if set.

https://lists.gnu.org/archive/html/help-bash/2022-02/msg00082.html

Note: the list discussion and bash source all reference SHLVL >= 2, this
is the SHLVL value *after* bash has incremented it on startup.  Setting
it to 1 in pacman is sufficient to disable the unwanted behavior.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2022-10-15 10:40:59 -07:00
Allan McRae
86981383a2 Fix missing if
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-10-09 13:43:31 +10:00
Frederik Schwan
de11824527 strip: Include .o files in strip operation
`.o` objects used to be omitted by strip.sh due to a missing match in
the `Relocatable file` section. This patch fixes the issue by handling
`.o` objects similar to kernel modules.

fixes FS#74941

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-10-09 11:01:12 +10:00
Morten Linderud
478af273df strip: fix unique source paths
`${pkgbase}` was added to the wrong invocation. This ensures we are
producing correct debug packages.

Example from the package:

    /usr/src/debug/pacman/pacman-6.0.2/src/pacman/callback.c
    /usr/src/debug/pacman/pacman-6.0.2/src/pacman/callback.h
    /usr/src/debug/pacman/pacman-6.0.2/src/pacman/check.c
    /usr/src/debug/pacman/pacman-6.0.2/src/pacman/check.h

Fixes: 776b7c1e75 ("debugflags: Ensure we have unique source paths")
Signed-off-by: Morten Linderud <morten@linderud.pw>
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-10-09 10:57:26 +10:00
Allan McRae
efd0c24c07 Always create directories outputted from debugedit in debug packages
The debugedit call to list all source files may include things like
build/<...>.  We have been filtering out these <> files, but they can
point to the build directory which is important to be available for
relative source paths stored in the .debug files.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-10-08 21:07:45 +10:00
Allan McRae
a6b06a5b17 libmakepkg: fix compatibility with bash-5.2 globskipdots
Bash 5.2 has a new globskipdots option, which is enabled by default. The
check_dotfiles lint fails with globskipdots due to the assumption that
at least the "." and ".." paths will match. Disabling globskipdots would
be the usual solution, but that fails on bash<5.2.  Instead, enable
nullglob for this check.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-10-02 11:40:52 +10:00
Allan McRae
546433b4fd Update Transifex client usage instructions
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-09-26 21:10:54 +10:00
Allan McRae
e10751a1e0 Update Transifex config
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-09-26 20:53:48 +10:00
Kristian Klausen
673ce1ab10 pacman-key: Don't check gpg's trustdb after each key revocation
The trustdb is marked as dirty when a key is revoked[1] and GPG will
recheck it the next time. Checking the trustdb can take 300-500ms which
with 52 revoked keys (and counting) adds up.

This is very noticeable when initializing and populating pacman's
keyring like archiso is doing[2]. It is also unnecessary as the trustdb
is always checked as the last step when populating the keyring.

[1] https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob;f=g10/keyedit.c;h=1cb62de8a87a823e06b2ed74efdc9e7a4cd99e2b;hb=refs/heads/STABLE-BRANCH-2-2#l6509
[2] https://gitlab.archlinux.org/archlinux/archiso/-/issues/191
2022-09-26 20:22:11 +10:00
Allan McRae
53dd3e844a makepkg.8: add missing fullstop
Fixes FS#75838

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-09-07 23:14:12 +10:00
Ben Westover
656abdb256 doc: Create documentation for pacman-db-upgrade and testpkg
There are two "binaries" that are currently missing documentation,
pacman-db-upgrade and testpkg. This patch adds that documentation.

Signed-off-by: Ben Westover <kwestover.kw@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-08-04 22:29:27 +10:00
Ben Westover
064e556c4e doc: Fix grammar in pacman.8.asciidoc
Signed-off-by: Ben Westover <kwestover.kw@gmail.com>
2022-08-02 23:04:22 +10:00
soloturn
184f593168 libmakepkg: Fix git clone command
Commit e017a5975c introduced the GITFLAGS
environmental variable. While ensuring the default of "--mirror" was
kept, there was a capitalisation mistake made. Handle the default for
GITFLAGS directly in the git clone command.
2022-08-02 13:07:09 +10:00
soloturn
e017a5975c makepkg: Add GITFLAGS environmental variable to customise checkout
The default flag used to clone a git repository when using makepkg
is "--mirror". However, when working with huge repositories, the use
of different flags during cloning can allow an faster checkout. For
example, using "--filter=blob:none" allows for small checkouts, at
the expense of requiring downloads during the build stage if anything
but the HEAD commit is used for the build. In addition, this example
would serve as a replacement for the often requested (but broken)
addition of --depth=1.

Add support for the environment variable GITFLAG to pass flags for
the git clone command. Note that this overrides the default rather
than adding to it in order to prevent incompatibilities.
2022-07-29 11:00:01 +10:00
Daan De Meyer
79bd512181 Add --keyringdir meson option to configure the keyring directory
On Debian, keyrings are stored in /usr/share/keyrings. To support
this, let's add a new --keyringdir option that allows configuring
the directory under datarootdir where the keyrings should be
imported from. We default to 'pacman/keyrings' for backwards
compatibility.
2022-07-29 10:17:52 +10:00
Alexander F. Rødseth
51b2e1c973 pacman: let the progress bar "C"/"c" move up and down at a more regular rate
For some terminal widths, the "C"/"c" character does not alternate at
regular intervals, but may look like it is stuck at either lowercase or
uppercase.

The previous behavior toggled based on the character position, while this
new behavior toggles the chomp alternation based on the progress percentage value.

This leads to slightly improved chomping.

Signed-off-by: Alexander F. Rødseth <xyproto@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-07-29 09:44:04 +10:00
Alexander F. Rødseth
5abe1455f2 pacman: remove redundant argument
The fill_progress function is called from two locations,
and both locations pass in the same percentage value twice.

This patch modifies the function signature to to receive the
percentage value just once.

Signed-off-by: Alexander F. Rødseth <xyproto@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-07-29 09:42:38 +10:00
Joe Baldino
daa2db6a23 meson: replace deprecated get_pkgconfig_variable()
Apparently that function was deprecated in 0.56, so use the generic
getter introduced in 0.51 instead. This squashes a warning.

Signed-off-by: Joe Baldino <pedanticdm@gmx.us>
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-07-29 09:41:47 +10:00
Chris Down
ff7c6c8e57 util: Flush cursor state to stdout before removing signal handler
It's possible that the cursor does not reappear after pressing ^C during
shutdown. In my case, I noticed this when pressing ^C after getting
results from `pacman -F` -- this can reasonably reliably be triggered by
issuing a file query and pressing ^C shortly after results are shown.

There are two reasons for this issue:

1. The graceful SIGINT handler is removed at the start of cleanup(), but
   the window from entering cleanup() to reaching exit() is non trivial.
   The main offender is FREELIST(pm_targets), which on my T14s takes
   >0.1s to execute. This means that if you are unlucky enough to press
   ^C while there, the cursor isn't coming back, because we haven't
   issued any command to show the cursor again yet, and the userspace
   signal handler is already blown away.
2. Moving console_cursor_show() to earlier in cleanup() only half solves
   the issue. While it's fine not to flush after _hiding_ the cursor,
   since it will at least make itself apparent before any other text
   reaches the screen, _showing_ the cursor must be followed by flushing
   stdout, because once the graceful SIGINT handler is gone, if you
   press ^C, no flush will be triggered (and thus there will be no
   cursor).

This fixes the issue by always starting out by showing the cursor again
at cleanup() time. This means that no matter where we get caught at ^C,
we will not end up leaving the terminal without its beloved ensign.

Signed-off-by: Chris Down <chris@chrisdown.name>
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-07-22 10:20:55 +10:00
Chris Down
015eb31c3a dload: Remove unused ABORT_SIGINT
The last user of ABORT_SIGINT was removed in commit 84723cab5d
("Cleanup the old sequential download code"), and this isn't exported as
part of the public API.

Signed-off-by: Chris Down <chris@chrisdown.name>
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-07-21 20:00:44 +10:00
Jelle van der Waa
cb9776a07b util.c: extend --print-format with %C, %D, %M
Extend print-format with checkdepends, depends and makedepends.

Signed-off-by: Jelle van der Waa <jelle@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-07-21 19:58:20 +10:00
Jelle van der Waa
00bc386d5a util.c: extend --print-format with %b for builddate
Signed-off-by: Jelle van der Waa <jelle@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-07-21 19:56:18 +10:00
Allan McRae
7bcc2d9b23 Correctly handle failure in getting build or install dates
alpm_pkg_get_builddate() and alpm_pkg_get_installdate() both return -1 on
error. Correctly handle the error condition in pacman.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-07-21 19:50:10 +10:00
Jelle van der Waa
819a0c2986 util.c: extend --print-format with expac options
Extend --print-format with all expac format strings which can be easily
added without conversions and through a simple C macro.

Signed-off-by: Jelle van der Waa <jelle@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-07-21 19:09:59 +10:00
Andrew Gregory
6dcd4b5383 makepkg: store pkgtype in xdata
Package type is not relevant to alpm or even exposed to front-ends in
any way.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2022-07-21 19:01:45 +10:00
Andrew Gregory
fe028c7f6a query: print extended data when extra info is requested
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2022-07-21 19:01:38 +10:00
Andrew Gregory
3405709b46 add extended data field for arbitrary package data
This adds a mechanism for package builders to add arbitrary data to
packages that is not necessarily relevant enough to the package
installation process to gain first-class support in alpm.  Currently
these fields have to be added to parsers with a "not actually used"
comment and can't be retrieved through the API.

Extended data is stored in "name=value" format in the xdata field
(%XDATA% in desc files):

xdata = pkgtype=debug

or

%XDATA%
pkgtype=debug

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2022-07-21 19:01:27 +10:00
Allan McRae
2bf67416c1 Fix remaining email list address
One instance was missed in b0a2fd75b2.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-06-25 22:59:20 +10:00
Jean Raby
6daeb37fe8 pacman: silence "info" msg when using --print
This allows for parsing the output of:
    pacman --upgrade --print-format '<format>' pkg.zst

without having to remove info messages from it.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-06-25 22:45:00 +10:00
Morten Linderud
776b7c1e75 debugflags: Ensure we have unique source paths
In some cases packages are built outside of a directory which contains
pkgname-pkgver, this results in source listing in debug packages having
a conflicting path like `/usr/src/debug/build/` which is not ideal.

This patch ensures we always include the pkgbase to ensure the paths are
unique.

Signed-off-by: Morten Linderud <morten@linderud.pw>
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-06-25 10:45:04 +10:00
Levente Polyak
0031cd1e46 doc/BUILDINFO.5: document buildtool and buildtoolver properties
The feature has been introduced in commit a33cdac10b
The buildinfo version has been bumped in commit 0428f6213b

Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2022-06-25 10:25:36 +10:00
Allan McRae
d1e95c4e54 Gitlab CI: Install glibc-debug valgrind test
Currently our gitlab CI is failing due to valgrind breakage. With
Arch stripping glibc, valgrind now requires debuginfod to be active.
However the gitlab CI system combined without our testsuite does not
retrieve these symbols, even when the appropriate environmental
variable is set.

Work around this by installing the glibc-debug package directly
using a slight kludge...  All blame for this approach is assigned
to foutrelis!

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-06-16 09:00:18 +10:00
Allan McRae
84dc662d65 makepkg: add source signing PGP keys to source package if available
Arch Linux is adding source signing PGP keys to their package source
tree alongside PKGBUILDs in the form keys/pgp/$fingerprint.asc. As the
PGP keyserver infrastructure is a mess, this helps other people validate
sources in a PKGBUILD.

Add the keys to source packages if found alongside the PKGBUILD.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-05-31 20:13:14 +10:00
Allan McRae
fdf04cdac5 doc/PKGBUILD: remove Arch Linux specific advise
The documentation for the license array was specific to Arch Linux.
Remove it and some minor other Arch Linux specific references.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-05-18 22:06:07 +10:00
Allan McRae
18152a211a libmakepkg: Do not "strip" files when the format is not recognised
We use a multi step process during stripping to ensure permissions do
not get changed.  However, if the initial objcopy fails, the subsequent cat
results in a blank file.  Abandon early if objcopy fails.

Fixes FS#74486

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-05-12 09:45:12 +10:00
Jonas Witschel
f5f9e0f4ea makepkg: use bsdtar --no-read-sparse for archive creation if available
bsdtar uses the "pax" TAR archive format by default, which has support for
storing sparse file information in the archive. Unfortunately this is a source
of unreproducibility because the sparse encoding is taken from the file system
and different file systems handle sparse files differently: some file systems
have no support for sparsely encoded files at all, and even file systems with
sparse file support can report different file information for identical files
due to differing implementations.

As a real world example where this happens, consider the Arch Linux package
"brotli-testdata 1.0.9-7", which contains a sparsely encoded all-zeros file
"usr/share/brotli/testdata/zeros". Building this package on a btrfs file system
yields a different package than building it on tmpfs or ext4 solely due to
different sparse file information that gets recorded in the package tarball.

To improve the reproducibility of archives containing sparsely encoded files,
libarchive version 3.6.0 introduces a new --no-read-sparse option. This skips
reading sparse file information from disk entirely and therefore stores files
"expanded" in the archive, which is the only way to make them reliably
reproducible across file systems.

makepkg will use this option if libarchive is recent enough to support it,
which is detected at build time.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-03-11 09:43:59 +10:00
morganamilo
bddfcc3f40 libalpm: add getter for handle on db and pkg
db and pkg store a pointer to the handle for internal use but don't
actually provide a way for a user to get it.

Making this accessible is more convenient for front ends and FFI
wrappers.

For example, in other languages it's common to return the error value
directly. To achieve this the python and rust wrappers also store their
own pointer to the handle inside their own pkg/db wrappers.

Exposing this would allow the wrappers to forgo the extra pointer and
just return `pkg.get_handle().last_error()`.
2022-03-08 09:56:53 +10:00
Andrew Gregory
221905b5ae query: allow querying extra info for package files
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-03-07 20:37:45 +10:00
Andrew Gregory
293762ea8b query: only strip leading local/ for db packages
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-03-07 20:37:01 +10:00
Allan McRae
40583ebe89 Avoid information leakage with badly formed download header
Parsing of Content-Disposition relies on well formed headers.
A malformed header such as:

Content-Disposition="";

will result in a strnduppayload->content_disp_name, -1, ptr),
which will copy memory until it hits a \0.

Prevent this by only copying the value if it exists.

Fixes FS#73704.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-03-06 21:49:56 +10:00
Allan McRae
632eb9739d Do not use WKD to import keys for package installs from a file
In order to use WKD in pacman -U/--upgrade operations, we need to
get the packager information from the .PKGINFO within the package.
That has obvious security implications. e.g. something like this
could convince a user to download a different key to what they
expect:

packager = foo bar <>^[[2K^[[0G:: Import PGP key DEADBEEF, "foo <bar>

While downloading an untrusted key has little impact due to the
web-of-trust model used by pacman, this could be bad in combination
with an exploit that allowed trust of keys in the keyring to be
altered.

To be safe, do not use WKD when installing using -U.

Fixes FS#73703.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-03-06 21:25:30 +10:00
Allan McRae
6b37d99431 Fix segfault when failing to import keys
Avoid a segfault when a search of the keyserver returns that the
key is found but returns no primary IDs.  We are then likely going
to fail the import, but attempt anyway because no-one know what
a keyserver will do!

Fixes FS#73534.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-03-06 20:36:59 +10:00
Allan McRae
e1246baddd Ensure WKD key lookup returns the correct key
Looking up a key using WKD just ensures you have a key with the
same email address, it does not ensure that a key with the correct
fingerprint has been downloaded.

Check a key with the relevant fingerprint is available after a
WKD import.
2022-03-06 19:57:09 +10:00
morganamilo
7340fb9b2e libalpm: mark filelist_contains as taking a const filelist
This is useful for bindings as it guarantees the value will not be
changed.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-03-06 17:32:23 +10:00
Allan McRae
7ba2c276db Fix typo/omission in man pages
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-03-06 17:25:42 +10:00
Allan McRae
c89f42f17b meson: do not use meson.source_root() and meson.build_root()
Using meson.source_root() and meson.build_root() are deprectated in
meson-0.56.  Using current_source_dir() or current_build_dir() (which
have been available in all Meson versions) would require manually
adding "../" in some places.  Instead, use project_source_root() and
project_build_root() and require meson-0.56.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-03-06 16:26:34 +10:00
Allan McRae
3a39eff15e meson.build: change ExternalProgram.path to full_path
Removes "Future-deprecated features used", but reuires meson-0.55

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-03-06 15:55:17 +10:00
Allan McRae
6cdb2030c6 Update Doxygen configuration to silence warnings
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-03-06 15:32:34 +10:00
Allan McRae
ad918bcb75 Remove reference to internal type in docs
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-03-06 15:32:27 +10:00
Allan McRae
569bcd9d26 Add missing parameter names to silence doxygen
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-03-06 15:24:19 +10:00
Allan McRae
5bbda937f1 Silence meson warning about extract_all_objects
Upstream is changing the default from false to true.  This makes
no difference to us, so just set as the future default.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-03-06 15:07:57 +10:00
Allan McRae
0a792843f9 Silence meson run_command warning
Upsteam is warning about future change in the run_command check
argument. Ref: https://github.com/mesonbuild/meson/issues/9300

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-03-06 14:53:42 +10:00
Evangelos Foutras
e1ce2351f5 Make link time optimization flags configurable
We want to use -flto=auto in Arch Linux to speed up building, but we
can't hardcode it in buildenv/lto.sh because other downstreams might
have clang < 13.0.0 which did not recognize -flto=auto as equivalent
to -flto=full.

Introducing an LTOFLAGS variable to makepkg.conf seems the way to go.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-03-06 14:45:36 +10:00
Allan McRae
49b08fa9d1 libmakepkg/autodep: fix module name
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-01-13 13:45:42 +10:00
Morten Linderud
241c29f0cc makepkg: Implement pkgtype in .PKGINFO
This implements pkgtype into .PKGINFO. This is useful to ensure tools
parsing packages do not miss important context on the creation of the
package.

For instance discovering if a given .pkg.tar is a debug package, one
would have to do heuristics on the pkgdesc and "${pkgbase}-debug".
However both of these values are controlled by the packager.

Similarly, the heuristic for discovering split packages is if pkgbase
and pkgname differ, which can happen in any package as both values are
packager controlled.

This should ensure we don't need to rely on heuristics and instead
include the context of how the package was created.

Signed-off-by: Morten Linderud <morten@linderud.pw>
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-01-09 14:03:16 +10:00
Morten Linderud
ae2f506ddf strip: Use debugedit instead of AWK to parse source files
This moves us from the fairly ugly AWK parsing line to debugedit which
originally comes out of the rpm project.

The original code has issues parsing anything that was not straight
C/C++ and languages like Rust or Go would return invalid source code
files. debugedit handles all these cases better.

Fixes FS#66755
Fixes FS#66888
Fixes FS#65677

Signed-off-by: Morten Linderud <morten@linderud.pw>
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-01-09 13:58:12 +10:00
Allan McRae
42fe4864a0 libmakepkg: add extra buildflags only when buildflags is not disabled
This means options=('!buildflags') will disable the addition of CFLAG
etc for LTO and debug building.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-01-09 12:45:58 +10:00
Jonathan Sköld
a8d9fb8d9c Print the target arch when using the %a format specifier
Adds the %a format specifier to allow printing of a target's arch
when using --print-format.

Signed-off-by: Jonathan Sköld <arch@skold.dev>
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-01-02 21:39:10 +10:00
Sefa Eyeoglu
446972b404 pacman: simplify chomp mouth logic
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-01-02 20:57:42 +10:00
Sefa Eyeoglu
e654aa8ac6 pacman: support multiple chomps at the same time
When two progressbars are present, one of them always had c while the
other always had C as the mouth

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-01-02 20:55:11 +10:00
Morten Linderud
2fe1ba5d81 makepkg: Use pkgbase in pkgdesc for debug packages
When trying to identify debug packages among other packages we
discovered that it's pkgname used in pkgdesc. Since pkgname can
sometimes be an array when building debug packages for a split package,
this could potentially include a pkgname that might not make sense
depending on the order of the array.

This patch simply uses pkgbase as it seems more correct.

Signed-off-by: Morten Linderud <morten@linderud.pw>
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-01-02 18:15:11 +10:00
Allan McRae
0be1d4e5d0 Remove parsing of long removed files in .PKGINFO
These fields have not existed for many years.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-01-02 18:06:15 +10:00
Xiretza
e37f7d8b6b makepkg: use -ffile-prefix-map instead of -fdebug-prefix-map
>From gcc(1):

-ffile-prefix-map=old=new
	[...] Specifying this option is equivalent to specifying all the
	individual -f*-prefix-map options. This can be used to make reproducible
	builds that are location independent.

Specifically, this additionally enables -fmacro-prefix-map=, which causes
prefix mapping to be applied to expansions of __FILE__ and similar macros.

Without this option, if source files are compiled by passing the
absolute file path to the compiler (as done by e.g. cmake), any
expansions of __FILE__ (e.g. from uses of assert()) will contain
$srcdir.

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-01-02 17:42:43 +10:00
Allan McRae
90df85e9cf Update copyright years
./build-aux/update-copyright 2021 2022

Signed-off-by: Allan McRae <allan@archlinux.org>
2022-01-02 13:34:52 +10:00
Oskar Roesler (bionade24) via pacman-dev
9f23654722 pacman: print additional error information to stderr
Prints extra information provided by file conflict or corrupt package messages
to stderr instead of stdout

Signed-off-by: Oskar Roesler (bionade24) <o.roesler@oscloud.info>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-12-29 17:53:51 +10:00
morganamilo
58c81fa213 alpm: return -1 for error in find_dl_candidates
This is the error value generally used and the calling function
explicitly checks for -1, later causing the error to be missed
and the transaction to continue.

> pacman -S xterm
warning: xterm-369-1 is up to date -- reinstalling
resolving dependencies...
looking for conflicting packages...

Package (1)  Old Version  New Version  Net Change  Download Size

extra/xterm  369-1        369-1          0.00 MiB       0.42 MiB

Total Download Size:   0.42 MiB
Total Installed Size:  1.05 MiB
Net Upgrade Size:      0.00 MiB

:: Proceed with installation? [Y/n]
error: no servers configured for repository: extra
(1/1) checking keys in keyring                                                                 [--------------------------------------------------------] 100%
(1/1) checking package integrity                                                               [--------------------------------------------------------] 100%
error: failed to commit transaction (wrong or NULL argument passed)
Errors occurred, no packages were upgraded.
2021-12-29 16:16:18 +10:00
morganamilo
3a112668b5 pacman: improve backup printing
The current backup printing does not fit in with the rest of the info at
all. Change to be more consistant.

Old:

Backup Files    :
MODIFIED	/etc/pacman.conf
UNMODIFIED	/etc/makepkg.conf

New:

Backup Files    : /etc/pacman.conf [modified]
                  /etc/makepkg.conf [unmodified]

Signed-off-by: morganamilo <morganamilo@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-12-29 15:49:35 +10:00
Allan McRae
9b766badd2 libmakepkg: automatically add library dependencies
Add linked libraries to a packages dependency list. This is the partner
to automatically generated library provides, and thus depends take the
same format. To help with bootstrapping, library dependencies are only
added if the relevant provide exists.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-12-29 15:20:05 +10:00
Allan McRae
b234280083 libmakepkg: automatically add library sonames to provides
When the option "autodeps" is enabled, makepkg will add provides
entries for libraries found in the directories specified in LIB_DIRS
in makepkg.conf.  The entries LIB_DIRS array have the format
"prefix:directory".  For example, the entry "lib:usr/lib" will search
$pkgdir/usr/lib for library sonames and add "lib:libfoo.so.1" to the
provides array.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-12-29 15:20:05 +10:00
Allan McRae
060ab4a289 libmakepkg: add framework for autodeps
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-12-29 15:20:05 +10:00
Allan McRae
354a300cd2 makepkg: remove libdepends and libprovides
This will be replaced by a better system

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-12-29 15:20:05 +10:00
Allan McRae
26ee6ff6ad LTO: Add -flto to LDFLAGS for clang
GCC automatically detects when it is linking LTO objects, but clang does
not.  Add -flto to LDFLAGS to make this work for clang too.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-12-24 17:59:32 +10:00
Allan McRae
3710960090 Fix file permissions 2021-12-12 14:34:53 +10:00
Allan McRae
d21fb58da3 Gitlab CI: add --werror to debug build
Catch build warnings in the CI.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-11-21 09:54:56 -08:00
Allan McRae
5352367022 Prevent translation of curl
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-11-20 12:39:42 -08:00
morganamilo
5287cc7251 alpm: fix wrong access() being used
When removing files we check _alpm_access() to see if we can write
(delete) the file. If not, we check if the file exists because if the
file does not exist then we don't actually need to remove it so there's
no issue.

However the second call uses acess() instead of _alpm_access() which
does not the rootdir into account.
2021-11-20 12:39:22 -08:00
Evangelos Foutras
fed522775d makepkg.conf: Pass -q as the first option to curl
As per curl(1), the -q (--disable) option must be first on the command
line to disable reading the curlrc config file. Without being first it
does not appear to have any effect.

Signed-off-by: Evangelos Foutras <evangelos@foutrelis.com>
2021-11-20 12:38:57 -08:00
morganamilo
b0a2fd75b2 Update mailing list url
change pacman-dev@archlinux.org to pacmandev@lists.archlinux.org

Most of this is copyright notices but this also fixes FS#72129 by
updating the address in docs/index.asciidoc.
2021-11-20 12:38:25 -08:00
Carlo Teubner
806ccd90ed "pacman -Q --changelog": fix writing uninit'd mem
Previously, when printing a package changelog to stdout, we would write
chunks of data that were not necessarily nul-terminated to stdout using
a function (fputs) which requires the input string to be nul-terminated.

On my system, this would result in occasional garbage characters showing
up in the "pacman -Qc" output.

Fix this by never nul-terminating the chunk, and using the fwrite()
function which takes an explicit input size and does not require a
nul-terminated string.

Signed-off-by: Carlo Teubner <carlo@cteubner.net>
2021-11-20 12:36:59 -08:00
Vladimir Panteleev
b242f5f24c libalpm: Log URLs when retrying
Allow finding which mirror was used to fetch a file.

This makes it a bit easier to debug situations in which mirrors serve
bad files with HTTP 200.

Signed-off-by: Vladimir Panteleev <archlinux@cy.md>
2021-11-20 12:36:29 -08:00
Andrew Gregory
529e208f39 remove YouCompleteMe config
Added, seemingly by accident, with meson in
51db84750e

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2021-11-20 12:22:06 -08:00
Allan McRae
39c3cbdf56 _alpm_key_import: Initialise fetch_key
Prevents build warning.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-09-05 09:58:18 +10:00
morganamilo
165e492485 pacman: don't run hooks when using --dbonly
--dbonly is meant to only touch the database and not the actual system.
However hooks still run which can leave files in place or run commands
you may not want.

The hooks being run also means `fakeroot pacman -S --dbpath test/ foo --dbonly`
fails because alpm tries to chroot for hooks which requires real root.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-09-04 20:46:57 +10:00
morganamilo
be76f8bf06 libalpm: add ALPM_TRANS_FLAG_NOHOOKS
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-09-04 20:46:47 +10:00
morganamilo
625f3d645b libalpm: don't use alpm_pgpkey_t in import question
When constructing an import question we never really used a proper gpg
key. We just zero initialize the key, set the uid and fingerprint, and
sent that to the front end.

Instead lets just give the import question a uid and fingerprint field.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-09-04 20:43:16 +10:00
morganamilo
e187aa9b48 libalpm: use else when setting fingerprint
The docs [1] say keyid will always be there, so no need to check if it
exists.

[1] https://www.gnupg.org/documentation/manuals/gpgme/Key-objects.html

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-09-04 19:52:23 +10:00
morganamilo
c5c6633dd1 libalpm: rename __foo tyes to _foo
__foo is reserved in c and should not be used.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-09-04 19:52:23 +10:00
morganamilo
2109de613a libalpm: take alpm_trans_t out of the public API
this type is only used internally by alpm

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-09-04 19:52:23 +10:00
Allan McRae
fbb29b5047 repo-add: add --include-sigs option
Pacman now downloads the signature files for all packages when present in a
repository.  That makes distributing signatures within repository databases
redundant and costly.

Do not distribute the package signature files within the repo databases by
default and add an --include-sigs to revert to the old behaviour.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-09-04 19:52:23 +10:00
Allan McRae
0a6fecd072 Release pacman-6.0.1
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-09-04 19:36:22 +10:00
Allan McRae
d5e2c0a551 Update NEWS for pacman-6.0.1 release
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-09-04 19:36:20 +10:00
Allan McRae
70d0b2c4b9 Include az_AZ translation files
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-09-04 18:02:39 +10:00
Allan McRae
4c3c0e06e5 Update translations from Transifex
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-09-04 16:16:20 +10:00
Daan De Meyer
c7e4f45922 pacman-key: Reduce gpg trustdb checks
Every time we modify gpg's state by signing or revoking a key, gpg
marks the trustdb as stale and rechecks it the next time key_is_lsigned()
or key_is_revoked() is called.

Currently, we alternate calls signing of keys and calling key_is_lsigned()
(idem for revoking) which means that for each key we sign (or revoke), gpg
will check the trustdb once.

To avoid checking the trustb so many times, we can simply do all the
key_is_lsigned() and key_is_revoked() checks upfront. Inbetween read
operations the trustdb is not marked stale and inbetween write operations
the trustdb is also not marked stale. This reduces the amount of trustdb
checks from 50 to 1.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-09-04 13:43:26 +10:00
Daan De Meyer
160f5bec8c pacman-key: Add --quiet to a few more gpg invocations
Currently, when running pacman-key --populate, gpg prints the
trustdb check output once for each locally signed and revoked key.
When bootstrapping a new container image, about 50 keys get signed
and revoked which leads to a huge amount of output when running
pacman-key which is repeated 50x.

To avoid overloading the user with gpg output, we add --quiet to the gpg
calls generating the trustdb checking output to silence those calls which
gets rid of the trustdb check output on the terminal.

Signed-off-by: Daan De Meyer <daan.j.demeyer@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-09-04 13:34:58 +10:00
Hugo Osvaldo Barrera
5da4af2b5d Delete the "Other Utilities" section
Signed-off-by: Hugo Osvaldo Barrera <hugo@barrera.io>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-09-04 10:34:00 +10:00
Hugo Osvaldo Barrera
cf923e734b Update broken links pointing to git.archlinux.org
All of these links are broken since the recent move to
gitlab.archlinux.org.

A few projects are, apparently, only available on GitHub, so I've linked
to that source (hopefully that's only temporary).

For git-clone URLs, I've opted for the https URLs since those can be
used by anyone -- whereas the ssh URLs require the user to be registered
on the gitlab instance which is not open to the public yet.

Signed-off-by: Hugo Osvaldo Barrera <hugo@barrera.io>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-09-04 10:34:00 +10:00
Charlie Sale
efb714b31c Order downloads by descending max_size
When downloading in parallel, sort by package size so that the larger
packages are queued first to fully leverage parallelism.
Addresses FS#70172

Signed-off-by: Charlie Sale <softwaresale01@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-09-04 10:34:00 +10:00
morganamilo
f951282bec pactest: add tests for downloading packages from a cdn
Test for downloads that redirect to some sort of cdn where the
redirected url does not relate to the original filename.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-09-04 10:34:00 +10:00
morganamilo
2ec6de96a6 only use effective url for urls containing .db or .pkg
Github and other sites redirect their downloads to a cdn. So the
download http://foo.org/myrepo.db may redirect to something like
https://cdn.foo.org/83749327439.

This then causes pacman to try and download the sig as
https://cdn.foo.org/83749327439.sig which is incorrect. In this case
pacman should append .sig to the original url.

However urls like https://archlinux.org/packages/community/x86_64/0ad/download/
Redirect to the mirror, so .sig has to appended after the redirects and
not before.

So we decide if we should append .sig on the original or effective url
based on if the effective url (minus the query part) has .db or .pkg in it.

Fixes FS#71148

---

v2: move variable decleration to start of block
v3: use dbext instead of db
2021-09-04 10:34:00 +10:00
morganamilo
c0026caab0 libalpm: Give -U downloads a random .part name if needed
archweb's download links all ended in /download. This cause all the temp
files to be named download.part. With parallel downloads this results in
multiple downloads to go to the same temp file and breaks the transaction.

Assign random temporary filenames to downloads from URLs that are either
missing a filename, or if the filename does not contain at least three
hyphens (as a well formed package filename does).

While this approach to determining when to use a temporary filename is
not 100% foolproof, it does keep nice looking download progress bar names
when a proper package filename is given. The only downside of not using
temporary files when provided with a filename  with three or more hyphens
is URLs created specifically to bypass temporary filename usage can not
be downloaded in parallel. We probably do not want to download packages
from such URLs anyway.

Fixes FS#71464

Modified-by: Allan McRae (do not use temporary files for realish URLs)
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-09-04 10:33:51 +10:00
Allan McRae
1c5a56884f libmakepkg: reproducibilty for python packages
Arch Linux has been setting PYTHONHASHSEED=0 to create deterministic
.pyc files.  After a thorough review by the Arch Security Team, setting
this variable was determined not to generated vulnerable .pyc files, as
when the loader loads the .pyc file and unmarshalls it, the internal
runtime will just populate the unordered data structures and use a new
runtime hash for them.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-08-08 22:49:32 +10:00
Allan McRae
fc7986485c Gitlab CI: add bsdtar to Fedora install
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-08-04 23:19:12 +10:00
Eli Schwartz
2d198c1af9 libmakepkg: allow correctly sourcing when $LIBRARY is not set
We usually set this up to default to the build time configured install
location, but a couple of files crept in without this.

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-08-04 21:59:32 +10:00
Andre Schröder
82aaee1a5c PKGBUILD.5: Fix typo
Signed-off-by: André Schröder <andre.schroedr@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-08-04 19:31:32 +10:00
Allan McRae
a193979cb6 makepkg: fix stripping of relocatable binaries with binutils>=2.37
Binutils commit 93df3340fd5ad32f784214fc125de71811da72ff enabled readelf
to report "Position-Independent Executable" files.  Fix stripping to
account for this change.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-08-04 18:52:08 +10:00
Jonas Witschel
b4383b8d00 doc: use localdate instead of pacman_date to improve reproducibility
pacman_date is set to the current date during build without respecting
SOURCE_DATE_EPOCH. As a result, a build cannot be fully reproduced on a later
date because the date embedded into the man pages does not match.

In contrast, the built-in asciidoc attribute "localdate" respects
SOURCE_DATE_EPOCH and has the desired ISO 8601 format, so simply use that
instead of the custom "pacman_date" attribute.

Fixes: FS#71154

Signed-off-by: Jonas Witschel <diabonas at archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-07-01 11:19:18 +10:00
morganamilo
0147de169a libalpm: always name signatures after original file
If the original download redirects to to a different url then alpm would
try to name the sig file after the url instead of <original_file>.sig.
Instead force this naming scheme regardless of url.

Fixes FS#71274

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-06-24 23:51:11 +10:00
David Passens
5163a319c9 PKGBUILD.5: Add fossil to list of supported VCSs
Since commit 08f4ae70, makepkg supports downloading from fossil.
However, the PKGBUILD man page was only partially updated to reflect
this change.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-06-24 20:48:05 +10:00
morganamilo
542910d684 libalpm: fix double free when importing key
Comit 5151de30 tried to fix leaking memory when importing a key. However
key_search_keyserver() writes to the key passed in, making the original
uid and fingerprint unreachable, causing the new uid and fingerprint to
double free.

Fixes FS#71107

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-06-07 14:14:19 +10:00
morganamilo
238109760d libalpm: call retry events for sig downlods
Around the same time retry events were added, there was a patch to pass
sig download events to the frontend. The retry code was not updated to
account for this.

Signed-off-by: morganamilo <morganamilo@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-06-07 14:14:19 +10:00
morganamilo
2e83a52205 pactest: add test case for servers returning 404 with body
Signed-off-by: morganamilo <morganamilo@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-06-07 14:14:08 +10:00
Allan McRae
3401f9e142 libalpm: prevent download error pages ending up in package files
Some servers respond with error pages (e.g. 404.html) when a package is
not present. These were getting written to packages before moving onto
the next server. Reset the download progress on 400+ error conditions
to avoid this.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-06-03 09:30:10 +10:00
Christian Hesse
6f35ce1570 doc/pacman.conf: ParallelDownloads expects a value
This can not be specified on its own but requires a value.

Signed-off-by: Christian Hesse <mail@eworm.de>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-05-21 09:37:51 +10:00
Allan McRae
75eb3f4cd3 Release 6.0.0
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-05-20 13:35:27 +10:00
Allan McRae
b8dcb4b33c Pull translations from Transifex
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-05-20 12:33:05 +10:00
Eli Schwartz
8d3735d86a update NEWS for 6.0.0 release
Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-05-20 12:24:47 +10:00
Eli Schwartz
739183b8c5 update old NEWS entry with bugtracker ticket reference
Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-05-20 11:35:24 +10:00
morganamilo
b44e82e479 libalpm: remove unused error value
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-05-20 11:34:00 +10:00
Eli Schwartz
e176b8ec19 makepkg: squelch readelf warnings from debug stripping
readelf --debug-dump sometimes reports inscrutable warnings which don't
actually affect our extraction of source filenames. For example:

readelf: Warning: There is a hole [0xd3d - 0xd89] in .debug_loc section.

Now gcc 11 seems to have dramatically increased the number of warnings:

readelf: Warning: Corrupt offset (0x0000008e) in range entry 9
[...]
readelf: Warning: Corrupt offset (0x000010f0) in range entry 250

The resulting debuginfo created by the very same toolchain works fine,
as does the list of source filenames. But the warnings are quite
noisy... send them to /dev/null since they are not actionable in the
context of getting source files

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-05-19 19:05:34 +10:00
Allan McRae
0e655dd492 Update README for pacman-6.0
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-05-18 21:00:03 +10:00
Allan McRae
7464062ad6 Update maintainers list
Update to relflect the current state of affairs. Add Morgan, drop Dave.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-05-17 20:13:48 +10:00
Allan McRae
58fde86668 Use attribute to declare case statement fallthroughs
Clang does not recognise the comment style notification of expected
case statement fallthrough.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-05-17 20:02:21 +10:00
Allan McRae
17ccc2f9c2 Silence new warning with gcc-11
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-05-17 17:09:18 +10:00
morganamilo
618fa4f675 libalpm: check for duplicate filenames
This partially fixes FS#67850

It fixes the case for -S'ing packages but not -U'ing urls.

pacman -S a/a b/b
resolving dependencies...
error: packages a and b have the same filename: a-1-1-any.pkg.tar.zst
error: failed to prepare transaction (duplicate filename)

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-05-10 07:58:44 +10:00
morganamilo
d6ffa7f561 fix formatting mistake
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-05-10 07:58:25 +10:00
morganamilo
8bf17b29a2 libalpm: fix download rates becoming negative
When a download fails on one mirror a new download is started on the
next mirror. This causes the ammount downloaded to reset, confusing the
rate math and making it display a negative rate.

This is further complicated by the fact that a download may be resumed
from where it is or started over.

To account for this we alert the frontend that the download was
restarted. Pacman then starts the progress bar over.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-05-09 23:28:04 +10:00
morganamilo
4fead44e3c libalpm: clone data on alpm_db_set_servers
Every alpm_option_set function clones the input so lets be more
consistent. Also this fixes servers not being sanatized.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-05-09 22:54:20 +10:00
morganamilo
15be417c17 remove unused variable in meson.build
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-05-09 22:05:33 +10:00
morganamilo
31c42c338b Match initial download message with progress message
When initially downloading a package, pacman will display a message
like:
	wine-6.6-1-x86_64.pkg.tar.zst downloading...

Then when the download progresses the message will change to:
	wine-6.6-1-x86_64.pkg.tar.zst

So instead lets match the progress message so there's no sudden change.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-05-09 22:01:30 +10:00
morganamilo
ef14c3380d libalpm: fix error when installing cached packages without signatures
With a repo using "SigLevel = Optional" and a package already downloaded
into the cache, download_files() returns 1 (via _alpm_download) to indicate
no files were downloaded.  This causes installation of the package to
fail.

Explicitly check that download_files() returns -1 (error) rather than
non-zero.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-05-03 12:49:35 +10:00
Andrew Gregory
72238aa046 call download progress callback for signatures
pacman may not care about them, but other front-ends do.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2021-05-01 12:08:14 +10:00
Andrew Gregory
eb1a63a516 alpm_db_update: indicate if dbs were up to date
Restore the prior indicator whether or not databases were up to date.
0 is used to indicate if *any* db was actually updated as callers are
more likely to care about that than if *all* dbs were updated.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2021-05-01 12:08:14 +10:00
Andrew Gregory
0ff94ae85d fix downloading multiple urls with XferCommand
An extra break causes _alpm_download to break out of the payload loop as
soon as it sees a successful url download with XferCommand.

Fixes: FS#70608 - -U fails to download all files with XferCommand

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2021-05-01 12:08:14 +10:00
Andrew Gregory
8faf749fd1 pmserve: allow serving byte objects directly
Useful for serving in-memory package files.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2021-05-01 12:08:14 +10:00
Andrew Gregory
ab622b4881 pmpkg: add makepkg_bytes
Builds the package file in memory.  Useful with the built-in server.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2021-05-01 12:08:14 +10:00
Andrew Gregory
e7fa35baa2 add front-end provided context to callbacks
Our callbacks require front-ends to maintain state in order to provide
reasonable output.  The new download callback in particular requires
much more complex state information to be saved.  Without the ability to
provide context, state must be saved globally, which may not be possible
for all front-ends.  Scripting language bindings in particular have no
way to register per-handle callbacks without some form of context.

Implements: FS#12721

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2021-05-01 12:08:14 +10:00
Eli Schwartz
523c393e9e makepkg: document BUILDTOOL and BUILDTOOLVER environmental variables
These were added without documentation in commit
a33cdac10b

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-05-01 12:08:01 +10:00
Allan McRae
558d08d821 Prepare translations for next release
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-04-23 10:44:27 +10:00
Andrew Gregory
15270d4a34 update NEWS for 5.2.2
Signed-off-by: Andrew Gregory <andrew@archlinux.org>
2021-04-23 10:27:36 +10:00
Eli Schwartz
8fe5520709 meson: make our symlinking script more portable
We do not need the --relative case as it is dead code (we only ever link
a filename without directory components).

For the rest, GNU-specific ln -T does two things:

- if the link name is an existing directory, ln fails instead of
  creating a surprising link inside the directory
- if the link name is a symlink to a directory, ln treats it as a file,
  and due to -f, unlinks it

The second case can be portably solved by ln -n, and both cases can be
solved by doing what the original autotools Makefile did: rm -f && ln -s

If the file exists, it will be removed. If it cannot be removed, it must
be an ordinary directory, and the script aborts with an error.

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-04-23 09:48:08 +10:00
morganamilo
079b9d44e2 Only enable total progress when downloads > 1
Otherwise the total progress will just match the one package and be
pretty useless.
2021-04-23 09:45:27 +10:00
morganamilo
41f9c50abf Always enable TotalDownload
Previously TotalDownload would switch the % download from per package to
overall. Meaning you had a choice of which information to dispplay.

Now with parallel downloads TotalDownload adds an extra progress bar.
There's no reason to have this an off by default feature. Let's just
make it always on.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-04-23 09:43:30 +10:00
morganamilo
63ad8b8b76 pacman: fix total bar leaking
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-04-23 09:40:38 +10:00
Levente Polyak
a33cdac10b makepkg: add tool details to buildinfo to aid determining flags
If a makepkg consumer uses a build wrapper to override compiler
flags this may lead to unreproducible packages as there is no way to
know which exact files were used for tooling that tries to reproduce
said package.

Instead of vendoring the whole used makepkg.conf file into buildinfo,
this patch adds two new properties to the .BUILDINFO file named
BUILDTOOL and BUILDTOOLVER which by default are simply makepkg's own
values. Downstream consumers may override those values: For example in
Arch Linux the devtools package can set those values and allow
reproducible builds tooling to fetch the appropriate makepkg.conf.

Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-04-23 09:07:40 +10:00
Dan McGee
3179db108a Add support for multiple 'Architecture' values
This allows architecture to be multivalued. On x86-64 machines, this
could be something like:
    Architecture = x86-64-v3 x86-64

We use the first specified Architecture value in mirrorlist $arch
variable replacement, as this is backwards-compatible and sane.

Original-patch-by: Dan McGee <dan@archlinux.org>
Patch-updated-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-04-22 00:15:21 +10:00
morganamilo
abdb4d7fa6 pacman: stop eta timer breaking allignment
When the download estimate is over an hour the format displayed changes
from mm:ss to hh:mm:ss. This causes everything to be out of alignment
due to the extra characters.

So instead lets just go back to --:-- when the download => 100 minutes.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-04-19 23:53:42 +10:00
Eli Schwartz
0699321b3c meson: make -uninstalled.pc correct
This pkg-config file is automatically created in the meson-uninstalled/
directory of the build tree, and points to the built artifacts there. If
this directory is added to PKG_CONFIG_PATH, it will be preferred over an
installed copy.

Making this work properly means it becomes trivially possible to build a
private copy of libalpm, and then compile other projects using it rather
than the system copy.

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-04-19 17:51:44 +10:00
Mark Weiman
288cd1c74a Fix build error when SIGPOLL is not available
On Linux, SIGPOLL is a valid signal, but on systems like FreeBSD, it is
not. This patch does a preprocessor check to see if SIGPOLL is available
or not.

Signed-off-by: Mark Weiman <mark.weiman@markzz.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-04-19 17:29:24 +10:00
Mark Weiman
3688c947f8 Add an include for signal.h when needed
On Linux, signal.h is not required to have access to the signal
constants. On FreeBSD, this is not the case and requires signal.h to be
explicitly included.

This patch adds an include for signal.h in any source file that uses it.

Signed-off-by: Mark Weiman <mark.weiman@markzz.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-04-19 17:11:47 +10:00
Mark Weiman
207f0439ee meson.build: Fix detection of symbols
This patch changes the behavior of meson to define configuration options
*only* when the symbol checked is present. Currently, it defines all of
them in config.h whether the symbol exists or not and the code that
looks for it doesn't check the macro's value, but whether it's defined.

Signed-off-by: Mark Weiman <mark.weiman@markzz.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-04-19 17:08:40 +10:00
Jelle van der Waa
c294b7cb4c Update urls to not use www. for archlinux.org
www.archlinux.org now redirects to archlinux.org.

Signed-off-by: Jelle van der Waa <jelle@vdwaa.nl>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-04-08 10:14:33 +10:00
Jelle van der Waa
f09047f0b0 test: update mailing list url
The Arch Linux mailing lists are these days served from the lists
subdomain.

Signed-off-by: Jelle van der Waa <jelle@vdwaa.nl>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-04-08 10:14:30 +10:00
Eli Schwartz
2535611d6c makepkg: add PACMAN_AUTH configurable setting for sudo elevation
If specified, this will be used no matter what. If not, then we check if
sudo exists and use that, or else fall back on su.

Implements FS#32621

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-04-07 22:41:54 +10:00
Eli Schwartz
d6f8659443 ensure tests are parsed as TAP since they are, in fact, TAP
Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-04-07 22:38:52 +10:00
Eli Schwartz
8aa2a48fc3 makepkg: fix the use of spaces in the localname:: component of sources
Broken via refactoring in commit aa6fe1160b
but for obvious reasons only one person in the last 9 years has ever
actually tried to do this. Still, it's technically correct to allow it.

Fixes FS#70254

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-04-07 22:38:34 +10:00
Andrew Gregory
9060058393 include retries and signatures in download count
Fixes: FS#69881

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-04-07 22:34:29 +10:00
Andrew Gregory
4bf7aa119d skip servers with too many errors
Keep track of errors from servers so that bad ones can be skipped once
a threshold is reached.  Key the error tracking off the hostname because
hosts may serve multiple repos under different url's and errors are
likely to be host-wide.

Implements: FS#29293.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-04-07 22:33:52 +10:00
Allan McRae
bdf6aa3fb7 libmakepkg: fix detection of source file names for debug packages
The current gcc build from git master give different output from
readelf:

gcc-10.2.0
$ readelf "hello" --debug-dump | grep hello
<11> DW_AT_name : (indirect string, offset: 0xbfc): hello.cpp

gcc-git
$ readelf "hello" --debug-dump | grep hello
<12> DW_AT_name : (indirect line string, offset: 0x0): hello.cpp

This causes the awk statement extracting the file name to fail as it
relied on the information being in the 8th field. Instead, extract
the information from the final field.

Fixes FS#70168

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-03-27 09:22:15 +10:00
Anatol Pomozov
1e60a5f006 Remove "total download" callback in favor of generic event callback
Total download callback called right before packages start downloaded.
But we already have an event for such event (ALPM_EVENT_PKG_RETRIEVE_START)
and it is naturally to use the event to pass information about expected
download size.

Signed-off-by: Anatol Pomozov <anatol.pomozov@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-03-25 11:39:03 +10:00
Eli Schwartz
9bf3d6a760 remove sed command lookup and hardcoding in edit-script.sh
We should not need to hardcode the path to sed as we simply don't care.
We don't check what kind of sed we found, and we're using the same one
we initially found on the PATH, which is surely still on the PATH.

At one point we did care to find the system copy of sed and hardcode it
in makepkg, because we also passed non-portable -i options to it and
makepkg needed to continue working on macOS even if some incompatible
GNU sed got installed afterward, elsewhere on the PATH. But this was
never relevant to the in-tree buildsystem script running sed.

In commit 3a814ee6bc we removed even that,
so we don't need to look it up at all.

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-03-25 11:38:58 +10:00
Eli Schwartz
ede73f4d89 fix syntax error when running pacman-key --help
In commit 0f75ab3224 some unbalanced
quotes were added by the committer while editing an error message.

Fixes FS#69865

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-03-06 12:01:26 +10:00
Allan McRae
c118a61f62 Strip LTO symbols from distributed .a/.o files
GCC's LTO implementation emits bytecodes into .o files it generates.
These bytecodes are _not_ considered stable from one release of GCC
to the next. There we need to strip the LTO bytecode out of any .o
(and .a) file that gets installed into the package.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-03-03 14:35:52 +10:00
Allan McRae
4a0891f49d Add link time optimization support to makepkg
Add the 'lto' option to enable building with link time optimization
by adding '-flto' to both CFLAGS and CXXFLAGS.  The 'lto' option can
be specificed both in the PKGBUILD or by setting the default in
makepkg.conf.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-03-03 14:35:45 +10:00
Allan McRae
17f9911ffc Update copyright year
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-03-01 12:22:20 +10:00
Morten Linderud
0f75ab3224 pacman-key: --refresh-keys queries WKD before keyserver
With the recent outages of the keyservers there is a possibility of
`--refresh-keys` failing to fetch new keys. A lot of current key
distribution is done over WKD these days, and `pacman-key` has the
ability to use it for `--recv-key`.

There was a hope `gpg` would end up supporting WKD for the refresh
functionality, but this seems to be limited to expired keys fetched
through WKD. Since this functionality isn't yet available it makes sense
to stuff it into `pacman-key`.

The current implementation looks over all available keyids in the
keyring, attempts to fetch over WKD and then fall backs to keyservers if
no email has a valid WKD available. The downside of this approach is
that it takes a bit longer to refresh the keys, but it should be more
robust as the distribution should be providing their own WKDs.

Co-authored-by: Jonas Witschel <diabonas@archlinux.org>
Signed-off-by: Morten Linderud <morten@linderud.pw>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-02-24 23:05:48 +10:00
Morten Linderud
7587153a44 libmakepkg: Support zstd decompression for sources
This enables us to extract files in the source array and ensures that we
can decompress files if the uncompressed signature is served.

Signed-off-by: Morten Linderud <morten@linderud.pw>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-02-24 22:51:14 +10:00
Emil Velikov
17d3da4777 Revert "ci: cache packages"
This reverts commit e348ba3881.

With the above commit we started caching the downloaded packages. Based
on some testing and, it saves ~30s in the "step_script" stage while
adding 18s for "Restoring/Saving cache". A net saving of ~10s.

With earlier commit, we no longer use an ancient image which also pulls
base-devel - thus the packages we have to download is minimal.

Now comparing the uncached "step_script", vs the cached one - it is
slowed by 2-3 seconds (1:01 -> 1:03), while we eliminate the 18s (and
growing) caching.

Tl:Dr: With up-to date image, package caching in not worth it - be that
time, disk or network wise.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-02-08 14:28:34 +10:00
Emil Velikov
cc1d23d333 ci: use official image
The archlinux/base have been deprecated. Since we depend on base-devel
simply use archlinux:base-devel

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-02-08 14:25:53 +10:00
Matti Niemenmaa
9e425cd1ea makepkg: Don't double-layer distcc on ccache
buildenv is set once for build() and a second time for package(). When
using both distcc and ccache, this lead to CCACHE_PREFIX="distcc distcc"
in package(), which breaks PKGBUILDs that execute the compiler in
package() because distcc complains:

    distcc[383041] (main) CRITICAL! distcc seems to have invoked itself
    recursively!

Avoid causing this error by only adding "distcc" to CCACHE_PREFIX if
it's not yet there.

Signed-off-by: Matti Niemenmaa <matti.niemenmaa+git@iki.fi>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-02-08 14:24:49 +10:00
Eli Schwartz
2b8d00b799 doxygen: fix missing parameter name
This was raising a warning during the build.

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-02-08 14:24:18 +10:00
Eli Schwartz
3a23abb2ec support xattr when extracting packages
This permits storing the result of setcap during package() and applying
the resulting capabilities to the installed program. Formerly, it was
necessary to edit the binary after the fact (and thus dirty the file
according to -Qkk) by using an install scriptlet.

One problem that needs to be solved before this is useful, is preventing
the strip routine from destroying xattrs. This is taken care of in the
previous patch.

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-02-08 14:23:45 +10:00
Eli Schwartz
88d054093c makepkg: don't let the strip routine mess up file attributes
It updates the stripped/objcopied file by creating a temp file,
chown/chmodding it, and replacing the original file. But upstream
binutils has CVE-worthy issues with this if running strip as root, and
some recent versions of strip don't play nicely with fakeroot.

Also, this has always destroyed xattrs. :/

Sidestep the issue by telling strip/objcopy to write to a temporary
file, and manually dump the contents of that back into the original
binary. Since the original binary is intact, albeit with different
contents, it retains its correct attributes in fakeroot.

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-02-08 14:22:55 +10:00
morganamilo
ab549c8467 libalpm: fix total download reporting wrong total
When a package does not need to be downloaded but a signature does,
total download didn't count that towards the total.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-21 17:20:48 +10:00
Andrew Gregory
b40c5553b4 add --upgrade download tests
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-21 17:19:26 +10:00
Andrew Gregory
b82a975e76 pmtest: add ability to spawn simple http servers
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-21 17:19:16 +10:00
Andrew Gregory
ad84a572aa pmdb: add option to skip populating file:// server
Populating a file:// Server prevents any manually registered HTTP
servers from ever being used.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-21 17:19:01 +10:00
Andrew Gregory
743e041dbc add CACHE_FEXISTS and CACHE_FCONTENTS test rules
The existing CACHE_EXISTS rule takes a package, which is not suitable
for -U tests that need to be able to check for specific files.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-21 17:18:37 +10:00
Andrew Gregory
1fdf8c0076 gitlab-ci: print output and logs for failed tests
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-21 17:18:24 +10:00
Andrew Gregory
f9bc6c2b09 pactest.py: read options from PACTEST_OPTS
Makes it easier to pass options when not running pactest directly.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-21 17:18:14 +10:00
Andrew Gregory
84f9cb021e pacman: add -w to -U
Mostly for testing.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-21 17:18:04 +10:00
Pascal Ernster
05aefb8f82 pacman: correct length of ".files.sig" string
Running "pacman -Sc" deletes /var/lib/pacman/sync/*.files.sig due to a
wrong string length being used when checking filename suffixes in that
directory. In turn, these missing signature files cause both the
corresponding "*.files" files and their signatures being forcibly
re-downloaded again when "pacman -Sy" is executed.

Since official Arch Linux repos don't use signed database files yet, this
only affects people who use custom repos with signed database files, for
which they have set the "SigLevel" directive to "Required" or
"DatabaseRequired" in /etc/pacman.conf.

Fixes FS#66472

Signed-off-by: Pascal Ernster <pacman-dev@hardfalcon.net>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-21 17:17:37 +10:00
Andrew Gregory
1c4e079899 do not try to download an empty db list
Starting the download process, even if there is nothing to actually
download, causes an error when pacman is built without curl and has no
XferCommand defined (like our test suite).

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-19 12:39:37 +10:00
Andrew Gregory
79227dabe0 make alpm download config accessible without curl
Download-related config options are currently limited to builds with
curl.  This causes compilation errors when those options are used
without an appropriate guard which often goes unnoticed because we all
use curl.  Front-ends providing their own download callback may also
want to use these settings.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-19 12:39:10 +10:00
Andrew Gregory
8ed98023b4 sighandler: initialize sigaction fields
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-19 12:38:57 +10:00
Andrew Gregory
a493170420 fully free error list in check_keyring
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-19 12:38:34 +10:00
Andrew Gregory
5151de3011 plug memory leaks in _alpm_key_import
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-19 12:38:02 +10:00
Andrew Gregory
5d21b2d44c pacman-conf: free rootdir before replacing
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-19 12:37:24 +10:00
Andrew Gregory
4311cc3648 pacman: indicate --overwrite takes a glob
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-19 12:03:08 +10:00
Morten Linderud
8566cd9be9 pacman-key: Close msg string in generate_master_key
In 19980a61e9 there was a msg added which
didn't get the string closed.

Signed-off-by: Morten Linderud <morten@linderud.pw>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-11 11:11:06 +10:00
Allan McRae
57a75dedb1 mailmap addition
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-11 11:11:06 +10:00
morganamilo
e9cc95f372 Read targets from stdin before chrooting
Operations involving --sysroot and reading targets from stdin were
failing due to attempting to read targets after chrooting.  Move the
chroot to happen after targets are read.

Fixes FS#68630

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-11 11:11:06 +10:00
Emil Velikov
8f7415c41b pacman: add file checksum validation against mtree
With libarchive v3.5.0 we have API to fetch the digest from the mtree.
Use that to validate if the installed files are modified or not.

As always, a modified backup file will trigger a warning but will not
result in an actual failure.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-11 11:11:06 +10:00
Allan McRae
3f5125e47c doc: move missed sections from alpm_ to libalpm_
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-11 11:10:55 +10:00
Allan McRae
4cdbbcfc34 doc: reference all libalpm sections within libalpm man page
Also, fix minor typo.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-09 09:19:50 +10:00
Allan McRae
c1d23c0ff2 doc: rename libalpm-list man page for consistency
All other libalpm man pages are in the form libalpm_<name>.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-09 09:19:03 +10:00
morganamilo
8fda300e06 doc: change group names to libalpm_*
Also change the group's title to point to the group's man page.

This makes generated man pages be named libalpm_* which is more
consistent with what library man pages are usually called.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-09 00:15:18 +10:00
Emil Velikov
45a648961b libalpm: const annotate struct db_operations
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-09 00:15:14 +10:00
Emil Velikov
1d2dd9a128 libalpm: const annotate struct pkg_operations
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-09 00:15:04 +10:00
Allan McRae
f8614d8c5b get_file_pkg_ops: update comment 2021-01-09 00:14:58 +10:00
Emil Velikov
027d76b9f5 libalpm: introduce get_sync_pkg_ops() helper
Currently default_pkg_ops is accessed in two different ways.

There is get_file_pkg_ops (in be_package.c) creating a local once-off
'tweaked' copy. As well as load_pkg_for_entry (be_sync.c) which modifies
in-place and uses default_pkg_ops.

This seems rather misleading and fragile approach. Introduce a helper
for the second use-case so that default_pkg_ops is handled consistently
and essentially remains unchanged throughout.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-09 00:14:56 +10:00
morganamilo
4472ce55d7 pacman: total download show how many packages have been download
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-09 00:14:52 +10:00
Emil Velikov
b9ab7790d5 Remove unused SYMHIDDEN macros
The macro hasn't been used since 2007 with commit
7f7da2b5fc. Although it was still copied
over into alpm_list.c an year or so later with commit ca1a1871 ("More
cleanup to alpm_list")

Just remove all instances of it.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-09 00:14:50 +10:00
Emil Velikov
67a42b9549 meson: use hidden symbol visiblity by default
All the required public API is annotated with SYMEXPORT, so we can just
add the meson notation, to hide all the symbols by default.

Thus we no longer spill all the internal API into the global namespace.

This is effectively a regression from the autotools build, which used
hidden and internal for DARWIN and others respectively.

The use of hidden is considered sufficient, considering:
 - internal was introduced with commit 920b0d20 ("Update usage of gcc
   __attribute__ flags"), referencing the GCC manual and potential
   optimisations, although
 - the details about the optimisations or respective benefits are close
   to non-existent,
 - the code/data size of the binaries is identical across hidden and
   internal. While the latter produces slightly larger overall binaries.
 - Internal is not widely supported - missing on Darwin, the CMake build
   system lacks a wrapper (unlike for hidden)
 - Internal is not widely used in projects.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-09 00:14:42 +10:00
Emil Velikov
d53ba019f5 meson: pacman-conf add missing libcommon link
Currently, we are erroneously exporting all the symbols via the
libalpm.so. As such, the libcommon dependency is resolved.

The libalpm.so exports are about to be resolved shortly, yet that
exposed that pacman-conf is missing a link against libcommon.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-09 00:14:33 +10:00
morganamilo
793e2097a6 libalpm: pass the number of packages being downloaded in totaldlcb
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-09 00:12:32 +10:00
morganamilo
f5b373788f libalpm: don't use curl's deprecated functions
This bumps the minimun curl version from 7.32.0 to 7.55.0.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-09 00:12:19 +10:00
morganamilo
bc1591a0b8 pacman: clean filename for downlaods
The progress bar already did this. But the init event and up to date
message printed the full file name.  Unify these for consistency.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-09 00:12:08 +10:00
morganamilo
7cc8e0181f libalpm: remove useless if
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-09 00:11:44 +10:00
morganamilo
8e291e6f4b doc: fix typos
Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-03 11:24:24 +10:00
Allan McRae
19980a61e9 pacman-key: warn about time taken for master key generation
Generating the pacman master key can take some time on systems
without enough entropy. Warn the user that the generation may
take some time.

Fixes FS#30286.

Signed-off-by: Allan McRae <allan@archlinux.org>
2021-01-03 11:19:21 +10:00
Eli Schwartz
a023565ed3 doc: make doxygen build from any directory
In the autotools build, it only built in-tree, from cwd = doc/ and
resolving doc/../lib/libalpm

In the meson build, this accidentally worked if cwd =
pacman/builddir/ and resolved to builddir/../lib/libalpm/

But... this should always have been configured with the actual path to
the inputs. So, we will now proceed to do so.

Fixes building man3 if your out of tree builddir doesn't happen to be a
direct subdirectory of the source root.

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-29 13:15:40 +10:00
Emil Velikov
ccdd1e3fd9 Move hex_representation() to src/common
We'll reuse the function in pacman with a later commit.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-29 12:38:23 +10:00
Emil Velikov
831fc568fc Remove pre libarchive 3.0 code
Pacman has required libarchive 3.0 or later for quite some time mow.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-29 12:37:45 +10:00
morganamilo
95ffdd68b2 doc: remove old libalpm man file
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-21 12:03:51 +10:00
morganamilo
e67c306f91 doc: add extra documentation to the man page
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-21 12:01:58 +10:00
morganamilo
ea975c328d doc: rename alpm_api group to alpm
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-21 12:01:58 +10:00
morganamilo
50c9c338fb doc: update doxyfile
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-21 12:01:58 +10:00
morganamilo
6ed82820fe doc: configure doxygen
- only document public alpm items (alpm_*)
- hide typedef'd structs (_alpm_pkg_t shows as alpm_pkg_t)
- enable inline struct definitions (this stops having a man page for
  every single struct)

Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-21 12:01:58 +10:00
morganamilo
1e8816f13d doc: move top level items into groups
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-21 12:01:58 +10:00
morganamilo
2a16434bfd doc: move alpm_api group to top of file
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-21 12:01:58 +10:00
morganamilo
4613527738 doc: document options
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-21 12:01:58 +10:00
morganamilo
7b06b5407b doc: document alpm_list
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-21 12:01:57 +10:00
morganamilo
50d2171ef0 doc: document misc
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-21 11:55:46 +10:00
morganamilo
a321e1f8a5 doc: document transactions
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-21 11:55:46 +10:00
morganamilo
3d60a829e1 doc: document files and groups
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-21 11:55:45 +10:00
morganamilo
5901ac9cb2 doc: document packages
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-21 11:55:45 +10:00
morganamilo
af7a1e834f doc: document logging
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-21 11:55:45 +10:00
morganamilo
55efa43f23 doc: document databases
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-21 11:55:45 +10:00
morganamilo
e9ac13776e doc: document callbacks
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-21 11:55:45 +10:00
morganamilo
bf26b6bbf7 doc: document depends
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-21 11:55:44 +10:00
morganamilo
5e9635317b doc: document signatures
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-21 11:51:07 +10:00
morganamilo
ab431f6810 doc: document handle
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-21 11:51:07 +10:00
morganamilo
49e33aad7c doc: document error
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-21 11:51:06 +10:00
morganamilo
48c8869339 doc: add doc header to alpm.h
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-21 11:49:33 +10:00
morganamilo
48865e7dac doc: remove stray doxygen comment
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-21 11:33:42 +10:00
Anatol Pomozov
11e09a23be Implement TotalDownload functionality
With the recent 'multibar' interface changes TotalDownload has been disabled.
Now we have a new UI and we need to find another way to display this
information.

When 'TotalDownload' config option is enabled we are going to have an extra
progress bar at the bottom of the screen that shows how much of the entire
download has been completed.

Closes FS#68202

Signed-off-by: Anatol Pomozov <anatol.pomozov@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2020-12-09 10:28:10 +10:00
419 changed files with 64064 additions and 43856 deletions

View file

@ -1,5 +1,5 @@
# EditorConfig configuration for pacman
# http://EditorConfig.org
# https://editorconfig.org
# Top-most EditorConfig file
root = true

View file

@ -1,93 +1,94 @@
variables:
MAKEFLAGS: "-j10"
VERBOSE: 1
PACMAN_OPTS: --needed --noconfirm --cachedir .pkg-cache
cache:
key: pkgs-v1
paths:
# For some reason Gitlab CI only supports storing cache/artifacts in a path relative to the build directory
- .pkg-cache
default:
after_script:
- build-aux/print-failed-test-output build/meson-logs/testlog.json
.arch-test:
image: archlinux/base
image: archlinux:base-devel
before_script:
- >
pacman -Syu $PACMAN_OPTS
base-devel git
pacman -Syu --needed --noconfirm
git
gpgme libarchive curl
python
fakeroot fakechroot
meson
artifacts:
when: always
paths:
- build/meson-logs/meson-log.txt
arch:
extends: .arch-test
script:
- meson build
- meson setup build
- ninja -C build
- fakechroot meson test -C build
arch-debug:
extends: .arch-test
script:
- meson --buildtype=debug build
- meson setup --buildtype=debug --werror build
- ninja -C build
- fakechroot meson test -C build
arch-docs:
extends: .arch-test
script:
- pacman -Syu $PACMAN_OPTS asciidoc
- meson -Ddoc=enabled build
- pacman -Syu --needed --noconfirm asciidoc
- meson setup -Ddoc=enabled build
- ninja -C build
arch-clang:
extends: .arch-test
script:
- pacman -Syu $PACMAN_OPTS clang
- CC=clang meson build
- pacman -Syu --needed --noconfirm clang
- CC=clang meson setup build
- ninja -C build
- fakechroot meson test -C build
arch-valgrind:
extends: .arch-test
script:
- pacman -Syu --needed --noconfirm valgrind
- meson build
- ninja -C build
- PACTEST_VALGRIND=1 fakechroot meson test -C build
#arch-valgrind:
# extends: .arch-test
# script:
# - pacman -Syu --needed --noconfirm valgrind
# - pacman -U --noconfirm https://geo.mirror.pkgbuild.com/core-debug/os/x86_64/glibc-debug-$(pacman -S --print-format %v glibc)-x86_64.pkg.tar.zst
# - meson setup build
# - ninja -C build
# - PACTEST_VALGRIND=1 fakechroot meson test -C build
arch-nettle:
extends: .arch-test
script:
- meson -Dcrypto=nettle --buildtype=debug build
- meson setup -Dcrypto=nettle --buildtype=debug build
- ninja -C build
- fakechroot meson test -C build
arch-no-gpg:
extends: .arch-test
script:
- meson -Dgpgme=disabled --buildtype=debug build
- meson setup -Dgpgme=disabled --buildtype=debug build
- ninja -C build
- fakechroot meson test -C build
arch-no-curl:
extends: .arch-test
script:
- meson -Dcurl=disabled --buildtype=debug build
- meson setup -Dcurl=disabled --buildtype=debug build
- ninja -C build
- fakechroot meson test -C build
arch-no-nls:
extends: .arch-test
script:
- meson -Di18n=false --buildtype=debug build
- meson setup -Di18n=false --buildtype=debug build
- ninja -C build
- fakechroot meson test -C build
debian:
image: debian:bullseye
cache: {}
image: debian:bookworm
before_script:
- apt update
- >
@ -97,23 +98,35 @@ debian:
gettext python3 python3-setuptools dash gawk ca-certificates
fakeroot fakechroot
script:
- meson --buildtype=debug build
- meson setup --buildtype=debug build
- ninja -C build
- fakechroot meson test -C build
fedora:
image: fedora
cache: {}
before_script:
- >
dnf -y install
git findutils patch sed
meson gcc libtool
meson gcc libtool bsdtar
gpgme-devel libarchive-devel libcurl-devel openssl-devel gettext-devel
asciidoc python3 dash gawk
fakeroot fakechroot
perl-Module-Load-Conditional
script:
- meson --buildtype=debug build
- meson setup --buildtype=debug build
- ninja -C build
- fakechroot meson test -C build
pages:
extends: .arch-test
script:
- pacman -Syu --needed --noconfirm asciidoc
- meson setup -Ddoc=enabled build
- ninja -C build html
artifacts:
paths:
- build/doc
publish: build/doc
rules:
- if: $CI_COMMIT_BRANCH == "release/6.1.x"

View file

@ -12,7 +12,7 @@ Daenyth Blank <Daenyth+arch@gmail.com> <Daenyth+git@gmail.com>
Dave Reisner <dreisner@archlinux.org> <d@falconindy.com>
甘露(Gan Lu) <rhythm.gan@gmail.com>
Giovanni Scafora <giovanni@archlinux.org> <linuxmania@gmail.com>
Jan Steffens <jan.steffens@gmail.com>
Jan Alexander Steffens (heftig) <heftig@archlinux.org> <jan.steffens@gmail.com>
Jaroslaw Swierczynski <swiergot@gmail.com> <swiergot@juvepoland.com>
Jonathan Conder <j@skurvy.no-ip.org> <jonno.conder@gmail.com>
Juan Pablo González Tognarelli <lord_jotape@yahoo.com.ar>
@ -20,6 +20,7 @@ Juan Pablo González Tognarelli <lord_jotape@yahoo.com.ar> <jotapesan@gmail.com>
Manuel Tortosa <manutortosa@chakra-project.org> <manutortosa@gmail.com>
Marc - A. Dahlhaus <mad@wol.de>
Matthias Gorissen <matthias@archlinux.de> <siquame@web.de>
morganamilo <morganamilo@archlinux.org> <morganamilo@gmail.com>
Laszlo Papp <djszapi@archlinux.us> <djszapi2@gmail.com>
Nagy Gabor <ngaba@bibl.u-szeged.hu> <ngaba@petra.hos.u-szeged.hu>
Nagy Gabor <ngaba@bibl.u-szeged.hu> <ngaba at bibl.u-szeged.hu>

View file

@ -1,17 +1,17 @@
[main]
host = https://www.transifex.com
[archlinux-pacman.libalpm-pot]
[o:toofishes:p:archlinux-pacman:r:libalpm-pot]
file_filter = lib/libalpm/po/<lang>.po
source_file = lib/libalpm/po/libalpm.pot
source_lang = en
[archlinux-pacman.pacman-pot]
[o:toofishes:p:archlinux-pacman:r:pacman-pot]
file_filter = src/pacman/po/<lang>.po
source_file = src/pacman/po/pacman.pot
source_lang = en
[archlinux-pacman.pacman-scripts-pot]
[o:toofishes:p:archlinux-pacman:r:pacman-scripts-pot]
file_filter = scripts/po/<lang>.po
source_file = scripts/po/pacman-scripts.pot
source_lang = en

View file

@ -1,250 +0,0 @@
#!/usr/bin/env python
# SPDX-License-Identifier: Unlicense
#
# Based on the template file provided by the 'YCM-Generator' project authored by
# Reuben D'Netto.
# Jiahui Xie has re-reformatted and expanded the original script in accordance
# to the requirements of the PEP 8 style guide and 'systemd' project,
# respectively.
#
# The original license is preserved as it is.
#
#
# This is free and unencumbered software released into the public domain.
#
# Anyone is free to copy, modify, publish, use, compile, sell, or
# distribute this software, either in source code form or as a compiled
# binary, for any purpose, commercial or non-commercial, and by any
# means.
#
# In jurisdictions that recognize copyright laws, the author or authors
# of this software dedicate any and all copyright interest in the
# software to the public domain. We make this dedication for the benefit
# of the public at large and to the detriment of our heirs and
# successors. We intend this dedication to be an overt act of
# relinquishment in perpetuity of all present and future rights to this
# software under copyright law.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.
#
# For more information, please refer to <http://unlicense.org/>
"""
YouCompleteMe configuration file tailored to support the 'meson' build system
used by the 'systemd' project.
"""
import glob
import os
import ycm_core
SOURCE_EXTENSIONS = (".C", ".cpp", ".cxx", ".cc", ".c", ".m", ".mm")
HEADER_EXTENSIONS = (".H", ".h", ".hxx", ".hpp", ".hh")
def DirectoryOfThisScript():
"""
Return the absolute path of the parent directory containing this
script.
"""
return os.path.dirname(os.path.abspath(__file__))
def GuessBuildDirectory():
"""
Guess the build directory using the following heuristics:
1. Returns the current directory of this script plus 'build'
subdirectory in absolute path if this subdirectory exists.
2. Otherwise, probes whether there exists any directory
containing '.ninja_log' file two levels above the current directory;
returns this single directory only if there is one candidate.
"""
result = os.path.join(DirectoryOfThisScript(), "build")
if os.path.exists(result):
return result
result = glob.glob(os.path.join(DirectoryOfThisScript(),
"..", "..", "*", ".ninja_log"))
if not result:
return ""
if 1 != len(result):
return ""
return os.path.split(result[0])[0]
def TraverseByDepth(root, include_extensions):
"""
Return a set of child directories of the 'root' containing file
extensions specified in 'include_extensions'.
NOTE:
1. The 'root' directory itself is excluded from the result set.
2. No subdirectories would be excluded if 'include_extensions' is left
to 'None'.
3. Each entry in 'include_extensions' must begin with string '.'.
"""
is_root = True
result = set()
# Perform a depth first top down traverse of the given directory tree.
for root_dir, subdirs, file_list in os.walk(root):
if not is_root:
# print("Relative Root: ", root_dir)
# print(subdirs)
if include_extensions:
get_ext = os.path.splitext
subdir_extensions = {
get_ext(f)[-1] for f in file_list if get_ext(f)[-1]
}
if subdir_extensions & include_extensions:
result.add(root_dir)
else:
result.add(root_dir)
else:
is_root = False
return result
_project_src_dir = os.path.join(DirectoryOfThisScript(), "src")
_include_dirs_set = TraverseByDepth(_project_src_dir, frozenset({".h"}))
flags = [
"-x",
"c"
# The following flags are partially redundant due to the existence of
# 'compile_commands.json'.
# '-Wall',
# '-Wextra',
# '-Wfloat-equal',
# '-Wpointer-arith',
# '-Wshadow',
# '-std=gnu99',
]
for include_dir in _include_dirs_set:
flags.append("-I" + include_dir)
# Set this to the absolute path to the folder (NOT the file!) containing the
# compile_commands.json file to use that instead of 'flags'. See here for
# more details: http://clang.llvm.org/docs/JSONCompilationDatabase.html
#
# You can get CMake to generate this file for you by adding:
# set( CMAKE_EXPORT_COMPILE_COMMANDS 1 )
# to your CMakeLists.txt file.
#
# Most projects will NOT need to set this to anything; you can just change the
# 'flags' list of compilation flags. Notice that YCM itself uses that approach.
compilation_database_folder = GuessBuildDirectory()
if os.path.exists(compilation_database_folder):
database = ycm_core.CompilationDatabase(compilation_database_folder)
else:
database = None
def MakeRelativePathsInFlagsAbsolute(flags, working_directory):
"""
Iterate through 'flags' and replace the relative paths prefixed by
'-isystem', '-I', '-iquote', '--sysroot=' with absolute paths
start with 'working_directory'.
"""
if not working_directory:
return list(flags)
new_flags = []
make_next_absolute = False
path_flags = ["-isystem", "-I", "-iquote", "--sysroot="]
for flag in flags:
new_flag = flag
if make_next_absolute:
make_next_absolute = False
if not flag.startswith("/"):
new_flag = os.path.join(working_directory, flag)
for path_flag in path_flags:
if flag == path_flag:
make_next_absolute = True
break
if flag.startswith(path_flag):
path = flag[len(path_flag):]
new_flag = path_flag + os.path.join(working_directory, path)
break
if new_flag:
new_flags.append(new_flag)
return new_flags
def IsHeaderFile(filename):
"""
Check whether 'filename' is considered as a header file.
"""
extension = os.path.splitext(filename)[1]
return extension in HEADER_EXTENSIONS
def GetCompilationInfoForFile(filename):
"""
Helper function to look up compilation info of 'filename' in the 'database'.
"""
# The compilation_commands.json file generated by CMake does not have
# entries for header files. So we do our best by asking the db for flags for
# a corresponding source file, if any. If one exists, the flags for that
# file should be good enough.
if not database:
return None
if IsHeaderFile(filename):
basename = os.path.splitext(filename)[0]
for extension in SOURCE_EXTENSIONS:
replacement_file = basename + extension
if os.path.exists(replacement_file):
compilation_info = \
database.GetCompilationInfoForFile(replacement_file)
if compilation_info.compiler_flags_:
return compilation_info
return None
return database.GetCompilationInfoForFile(filename)
def FlagsForFile(filename, **kwargs):
"""
Callback function to be invoked by YouCompleteMe in order to get the
information necessary to compile 'filename'.
It returns a dictionary with a single element 'flags'. This element is a
list of compiler flags to pass to libclang for the file 'filename'.
"""
if database:
# Bear in mind that compilation_info.compiler_flags_ does NOT return a
# python list, but a "list-like" StringVec object
compilation_info = GetCompilationInfoForFile(filename)
if not compilation_info:
return None
final_flags = MakeRelativePathsInFlagsAbsolute(
compilation_info.compiler_flags_,
compilation_info.compiler_working_dir_)
else:
relative_to = DirectoryOfThisScript()
final_flags = MakeRelativePathsInFlagsAbsolute(flags, relative_to)
return {
"flags": final_flags,
"do_cache": True
}

187
NEWS
View file

@ -1,5 +1,172 @@
VERSION DESCRIPTION
-----------------------------------------------------------------------------
7.0.0 - Add DownloadUser configuration option used to drop-privileges
when downloading files.
- Download files to a temporary directory owned by DownloadUser
- On Linux systems, ensure the download process does not write
outside the download directory
- Add DisableSandbox option and --disable-sandbox flag to
disable the download write restrictions on Linux systems
- Ensure database and signature are downloaded from the same
location. Fixes the use of XferCommand.
- Use snprintf instead of sprintf
- Fix issue preventing use of _FORITIFY_SOURCE=3 when compiling
- Fix read-after-free issue when parsing config files
- Fix searching for files in an non-NULL by empty filelist
- Prevent buffer overflow with long scriptlet shell path
- repo-add:
- Fix issue with missing argument in parsepots for -k/--key
- Handle lack of newline at the end of .PKGINFO
- create empty databases when requested
- makepkg:
- Remove GITFLAGS support - this required multiple breaking
changes to git source handling in order to fully support.
- Prevent MAKEFLAGS and CHOST from being disabled with
options=(!buildenv)
- Fix unstable git checksumming, and dependence on user
config
- Make "not a clone of" source errors visible with a new
return code
- Document makepkg.conf.d dropin configuration
- Drop sudo permissions after use
- Prevent PKGBUILDs overriding BUILDENV
- only copy source files once when creating a debug package
- pacman-key:
- Fix permissions check for non-root operations
6.1.0 - Add cache server support
- Improvements to --sysroot option - NOTE: targets to -U are no
longer interpreted relative to sysroot
- Add more format specifiers for --print operations
- Add extended data field for arbitrary package data
- Do not run hooks with --dbonly
- Provide more details when encountering file conflicts or
corrupt packages
- Improved WKD support (FS#73703, FS#73534)
- Improved handling of malformed download headers (FS#73704)
- Use openssl interfaces for calculating sha256 and md5 sums
- Fix multi download bar chomps
- makepkg:
- Replace libdepends and libprovides with autodeps
- Support configuration via makepkg.conf.d drop-ins
- Add GITFLAGS environment variable to customize checkouts
- Add -D option to change directory before building
- Implement verify() function for custom source verificaton
- Add checksum support for git/mercurial/bzr sources
- Improved stripping and debug package support
- Configurable LTO support
- Add source signing PGP keys to package if available
- Store "pkgtype" in xdata
- Remove md5sum from mtree files
- Document MAKEPKG_LIBRARY
- repo-add:
- Do not include package signature details in the repo. Add
the --include-sigs to revert to old behaviour.
- Do not add md5sum to the repo database
6.0.1 - Prevent download error pages ending up in package files
(FS#71083)
- Give -U downloads a random .part file name if needed
(FS#71464)
- Fix downloading signatures with redirecting URLs (FS#71148)
- Fix double free when importing PGP keys (FS#71107)
- Ensure signature files are named after original file
following redirects (FS#71274)
- Order downloads by size - largest to smallest (FS#70172)
- Fix reproducibility of man pages (FS#71154)
- makepkg:
- Fix stripping debug symbols with binutils 2.37 (FS#71722)
- Export PYTHONHASHSEED for reproducible python packages
- pacman-key:
- Quieten trust db checks.
6.0.0 - internal downloader can retrieve files in parallel (FS#20056)
- an additional progress bar is added to track total download
progress. This replaces the previous TotalDownload option.
- fix download rates becoming negative
- skip mirror servers with too many errors (FS#29293)
- package signatures are always retrieved even if signature is
embedded in repo database or package is in cache (FS#33992)
- detached package signatures found in CacheDir can be used to
verify packages if signature is not in the database. Also
verify packages checksums from repo db when using detached
signatures.
- add support for multiple 'Architecture' values
- -Qkk now validates file checksums in addition to date/size
- colored upgrade summary now dulls version numbers for contrast
- libalpm frontends can now supply context to callbacks (FS#12721)
- support xattr when extracting packages
- allow setting --noprogressbar in pacman.conf
- fix output alignment for CJK translated text (FS#59229)
- fix reading targets from stdin when using --sysroot (FS#68630)
- fix deleting signatures for existing databases with -Sc
- check for and forbid duplicate download filenames (FS#67850)
- -Fx now reports error for invalid regex
- remove support for the autotools build system
- meson: properly compile internal symbols as hidden
- meson: make -uninstalled.pc correct
- fix build errors on systems like FreeBSD
- makepkg:
- add link time optimization support to makepkg
- add support for sources using the fossil VCS
- allow specifying alternative authentication commands when
running pacman as root (FS#32621)
- support zstd decompression for sources
- strip: fix removing file attributes such as xattr
- switch to CRC as default integrity checksum
- record $startdir for reproducible builds
- record name of build orchestration tool for reproducible builds
- fix signing of source packages
- add optional argument support to parseopts
- reduce dependency on file for detecting ELF files
- remove dependency on GNU sed
- avoid trailing whitespace in --printsrcinfo output
- libprovides: don't provide both versioned and unversioned
sonames
- don't double-layer distcc on ccache
- fix detection of source file names for debug packages with
gcc 11
- strip: silence warnings emitted by readelf while detecting
source filenames
- fix use of spaces in source file renaming (FS#70254)
- pacman-key:
- --refresh-keys queries WKD before keyserver
- be less noisy when populating the keyring (FS#64142)
- warn about time taken for master key generation
- repo-add:
- support the same compression methods as makepkg
- zsh completion: add pacman-conf support
- various documentation updates
- after a decade and a half of promising libalpm.3 documentation
"once we get around to doing good Doxygen documentation", it
has happened!
5.2.2 - fix pacman test suite under python 3.8
- only prompt to import new keys once in a transaction
- fix handling of fully downloaded .part files
- increase maximum database size (FS#65197)
- fix segfault in alpm_option_set_assumeinstalled
- change config parsing warnings to errors to match actual
behavior
- fix key extraction for signatures with two-octet sub-packet
headers
- fix documentation typos (FS#67000)
- change master signing key to RSA4096
- improve error message when building without autoconf-archive
- pacman-conf:
- allow querying ILoveCandy individually
- fix querying NoExtract individually
- makepkg:
- fix seccmp-related error while stripping binaries (FS#65100)
- fix extraction of file:// sources (FS#64648)
- allow $pkgname in install and changelog file names (FS#64932)
- sort libprovides for reproducibility
- strip: don't re-add the same debug source multiple times
- error on empty refspecs in git sources
- correctly handle missing download clients
- fix splitting multi-line error messages across stdout and
stderr
- handle GPGKEY with spaces (FS#66949)
- do not accept public-only keys for signing
- repo-add:
- handle GPGKEY with spaces (FS#66949)
- do not accept public-only keys for signing
5.2.1 - fix segfault on importing PGP keys for -U operations
- fix distribution of meson files
- fix inode command for darwin/bsd
@ -10,7 +177,7 @@ VERSION DESCRIPTION
- do not warn about PACKAGER format if not set
- only run --clean when a package is built
- repo-add:
- fix compression of databases with zstd
- fix compression of databases with zstd (FS#64213)
5.2.0 - completely remove delta support (CVE-2019-18183)
- add support to pacman and pacman-key for downloading PGP
signing keys using the WKD protocol (FS#63171)
@ -48,7 +215,7 @@ VERSION DESCRIPTION
- fix segfault when Usage is specified without a value
- include timezones in pacman.log
- bash-completion: use POSIX character classes for portability
- correctly report a download failiure for 404s
- correctly report a download failure for 404s
- fix handling of signals during SIGSEGV
- fix buffer overread in pacman/callback
- fix crash when downloading files with a Content-Disposition
@ -451,8 +618,8 @@ VERSION DESCRIPTION
- remove --asroot and enforce fakeroot usage
- all PKGBUILDs require a package() function
- PKGBUILDs can no longer be read from stdin
- enable make style environmental overrides
- Read CARCH environmental variable (FS#35030)
- enable make-style environment variable overrides
- Read CARCH environment variable (FS#35030)
- makedepends and checkdepends are installed together (FS#31557)
- added support for sha224 checksums (FS#36776)
- remove warning when license is not specified in PKGBUILD
@ -482,7 +649,7 @@ VERSION DESCRIPTION
file overwrites from malicious databases
- makepkg:
- restrict package name from starting with a dot
- fix BZR source revision support (FS#35281)
- fix Bazaar source revision support (FS#35281)
- Use LOGDEST for log pipe
- fix distcc disabling (FS#35741)
- correct stat usage on BSD/Darwin (FS#35469)
@ -498,7 +665,7 @@ VERSION DESCRIPTION
FS#34716, FS#35097)
- makepkg:
- improve SVN VCS PKGBUILD handling (FS#34675, FS#34636)
- allow "lp:" URLs for BZR sources (FS#34650)
- allow "lp:" URLs for Bazaar sources (FS#34650)
- prevent pkgver() capturing stderr (FS#34974)
- fix attempt to remove package twice on failure (FS#34672)
- contrib:
@ -549,7 +716,7 @@ VERSION DESCRIPTION
- pkgrel must be in decimal format
- PKGBUILDs without package() functions are deprecated
- support specifying CPPFLAGS in makepkg.conf
- support PACKAGER environmental variable
- support PACKAGER environment variable
- allow source renaming to work on signature files
- configurable compression options (FS#27430)
- allow multiple packages to be build when using
@ -563,7 +730,7 @@ VERSION DESCRIPTION
- add LOGDEST configuration option
- install makedepends with --repackage
- repo-add:
- honor TMPDIR environmental variable
- honor TMPDIR environment variable
- add makedepends/checkdepends information to database
- pacman-key:
- fix importing keys with quotes in file name (FS#28445)
@ -1171,7 +1338,7 @@ VERSION DESCRIPTION
- add source package creation option
- rankmirrors- allow reading from stdin (FS#8043)
- and many other updates: 198 bugs/FRs closed since 3.0.0 release
- switch to GIT for source code management
- switch to Git for source code management
3.0.6 - config files updated to reflect current -> core change
- fix symlink overwriting issue (FS#7484)
- fix config parsing with tr_TR locale (FS#7235)
@ -1323,7 +1490,7 @@ VERSION DESCRIPTION
- Cleanup db_loadpkgs(), add list_add_sorted()
- Fixed a memory leak in db_find_conflicts()
2.8.3 - Fixed a little makepkg bug with bash 3.0
- Fixed resolvedeps to always prefer literals over provisios
- Fixed resolvedeps to always prefer literals over providers
- Added --config option to specify an alternate config file
- Added "Include" directive to include repositories from
config files (inspired by Michael Baehr's patch)

227
README
View file

@ -6,7 +6,7 @@ Package Management) library. This document, while not exhaustive, also
indicates some limitations (on purpose, or sometimes due to its poor design) of
the library at the present time.
There is one special file,"alpm.h", which is the public interface that
There is one special file, "alpm.h", which is the public interface that
should be distributed and installed on systems with the library. Only
structures, data and functions declared within this file are made available to
the frontend. Lots of structures are of an opaque type and their fields are
@ -52,7 +52,6 @@ library is initialized.
* logcb: The callback function for "log" operations.
* dlcb: The callback function for download progress of each package.
* fetchcb: Callback for custom download function.
* totaldlcb: The callback function for overall download progress.
* eventcb: Callback for transaction messages.
* questioncb: Callback for selecting amongst choices.
* progresscb: Callback to handle display of transaction progress.
@ -195,8 +194,8 @@ remove.c and sync.c).
The frontend is using a configuration file, usually "/etc/pacman.conf". Some
of these options are only useful for the frontend only (mainly the ones used to
control the output like totaldownload, or the behavior with cleanmethod and
syncfirst). The rest is used to configure the library.
control the output like verbosepkglist, or the behavior with cleanmethod).
The rest is used to configure the library.
[UPGRADE/REMOVE/SYNC]
@ -240,7 +239,7 @@ API CHANGES BETWEEN 3.1 AND 3.2
- alpm_checkdbconflicts()
- alpm_sync_newversion()
- alpm_deptest()
- error codes :
- error codes:
PM_ERR_DLT_INVALID, PM_ERR_LIBARCHIVE, PM_ERR_LIBDOWNLOAD and
PM_ERR_EXTERNAL_DOWNLOAD
- flags:
@ -353,7 +352,7 @@ API CHANGES BETWEEN 3.4 AND 3.5
- alpm_db_get_pkg() for normal targets
- alpm_find_dbs_satisfier() for versioned provisions
- alpm_find_grp_pkgs() for groups
- alpm_deptest() is replaced by the more flexibile alpm_find_satisfier()
- alpm_deptest() is replaced by the more flexible alpm_find_satisfier()
- size_t used for alpm_list_t sizes
- return type for alpm_list_count()
- parameter type in alpm_list_msort() and alpm_list_nth()
@ -363,11 +362,11 @@ API CHANGES BETWEEN 3.4 AND 3.5
- alpm_find_grp_pkgs()
- alpm_trans_get_flags()
- error codes:
PM_ERR_DISK_SPACE, PM_ERR_WRITE
- flags
PM_TRANS_FLAG_NODEPVERSION, PM_TRANS_EVT_DISKSPACE_START,
PM_TRANS_EVT_DISKSPACE_DONE, PM_TRANS_CONV_SELECT_PROVIDER,
PM_TRANS_PROGRESS_DISKSPACE_START, PM_TRANS_PROGRESS_INTEGRITY_START
PM_ERR_DISK_SPACE, PM_ERR_WRITE
- flags:
PM_TRANS_FLAG_NODEPVERSION, PM_TRANS_EVT_DISKSPACE_START,
PM_TRANS_EVT_DISKSPACE_DONE, PM_TRANS_CONV_SELECT_PROVIDER,
PM_TRANS_PROGRESS_DISKSPACE_START, PM_TRANS_PROGRESS_INTEGRITY_START
API CHANGES BETWEEN 3.5 AND 4.0
@ -420,7 +419,7 @@ API CHANGES BETWEEN 3.5 AND 4.0
- alpm_release
- alpm_remove_pkg
- alpm_sync_sysupgrade
- several structs are no longer opaque
- several structs are no longer opaque:
- alpm_conflict_t
- alpm_delta_t
- alpm_depend_t
@ -432,19 +431,33 @@ API CHANGES BETWEEN 3.5 AND 4.0
[ADDED]
- option functions:
alpm_{get,set}_eventcb(), alpm_option_{get,set}_convcb(),
alpm_option_{get,set}_progresscb()
- alpm_{get,set}_eventcb()
- alpm_option_{get,set}_convcb()
- alpm_option_{get,set}_progresscb()
- package signing functions:
alpm_option_get_default_siglevel(), alpm_option_set_default_siglevel(),
alpm_option_get_gpgdir(), alpm_option_set_gpgdir(), alpm_db_get_siglevel(),
alpm_siglist_cleanup(), alpm_db_check_pgp_signature(), alpm_pkg_check_pgp_signature(),
alpm_pkg_get_origin(), alpm_pkg_get_sha256sum(), alpm_pkg_get_base64_sig()
- alpm_option_get_default_siglevel()
- alpm_option_set_default_siglevel()
- alpm_option_get_gpgdir()
- alpm_option_set_gpgdir()
- alpm_db_get_siglevel()
- alpm_siglist_cleanup()
- alpm_db_check_pgp_signature()
- alpm_pkg_check_pgp_signature()
- alpm_pkg_get_origin()
- alpm_pkg_get_sha256sum()
- alpm_pkg_get_base64_sig()
- list functions:
alpm_list_to_array(), alpm_list_previous()
- alpm_list_to_array()
- alpm_list_previous()
- structs:
alpm_backup_t, alpm_file_t, alpm_filelist_t
- alpm_backup_t
- alpm_file_t
- alpm_filelist_t
- enums:
alpm_siglevel_t, alpm_sigstatus_t, alpm_sigvalidity_t, alpm_pkgfrom_t
- alpm_siglevel_t
- alpm_sigstatus_t
- alpm_sigvalidity_t
- alpm_pkgfrom_t
- error codes:
ALPM_ERR_DB_INVALID, ALPM_ERR_DB_INVALID_SIG, ALPM_ERR_GPGME,
ALPM_ERR_PKG_INVALID_CHECKSUM, ALPM_ERR_PKG_INVALID_SIG, ALPM_ERR_SIG_INVALID,
@ -471,10 +484,10 @@ API CHANGES BETWEEN 4.0 AND 4.1
- alpm_db_unregister_all -> alpm_unregister_all_syncdbs
- alpm_db_readgroup -> alpm_db_get_group
- alpm_db_set_pkgreason -> alpm_pkg_set_reason (handle parameter removed)
- alpm_time_t typedef used for all times
- alpm_time_t typedef used for all times:
- members of alpm_pgpkey_t
- return types of alpm_pkg_get_builddate and alpm_pkg_get_installdate
- delta options now use required ratio rather than on/off
- delta options now use required ratio rather than on/off:
- alpm_option_get_usedelta -> alpm_option_get_deltaratio
- alpm_option_set_usedelta -> alpm_option_set_deltaratio
@ -491,21 +504,21 @@ API CHANGES BETWEEN 4.0 AND 4.1
- alpm_db_usage_t
- alpm_db_set_usage()
- alpm_db_get_usage()
- wrapper functions for reading mtree files
- wrapper functions for reading mtree files:
- alpm_pkg_mtree_open()
- alpm_pkg_mtree_next()
- alpm_pkg_mtree_close()
- utility functions
- utility functions:
- alpm_pkg_find()
- alpm_pkg_compute_optionalfor()
- alpm_filelist_contains()
- types
- types:
- alpm_time_t
- alpm_errno_t
- flags
ALPM_EVENT_OPTDEP_REQUIRED, ALPM_EVENT_DATABASE_MISSING,
ALPM_EVENT_KEYRING_START, ALPM_EVENT_KEYRING_DONE, ALPM_EVENT_KEY_DOWNLOAD_START,
ALPM_EVENT_KEY_DOWNLOAD_DONE, ALPM_PROGRESS_KEYRING_START
- flags:
ALPM_EVENT_OPTDEP_REQUIRED, ALPM_EVENT_DATABASE_MISSING,
ALPM_EVENT_KEYRING_START, ALPM_EVENT_KEYRING_DONE, ALPM_EVENT_KEY_DOWNLOAD_START,
ALPM_EVENT_KEY_DOWNLOAD_DONE, ALPM_PROGRESS_KEYRING_START
API CHANGES BETWEEN 4.1 AND 4.2
@ -514,49 +527,49 @@ API CHANGES BETWEEN 4.1 AND 4.2
[CHANGED]
- alpm_filelist_t - removed member resolved_path
- alpm_filelist_contains - now returns alpm_file_t
- event callback
- alpm_event_t renamed to alpm_event_type_t
- alpm_event_t union added
- alpm_event_cb now takes only an alpm_event_t parameter
- alpm_event_any_t, alpm_package_operation_t, alpm_event_package_operation_t,
alpm_event_optdep_removal_t, alpm_event_delta_patch_t, alpm_event_scriptlet_info_t,
alpm_event_database_missing_t, alpm_event_pkgdownload_t, alpm_event_pacnew_created_t,
alpm_event_pacsave_created_t, alpm_event_pacorig_created_t added
- ALPM_EVENT_*_START -> ALPM_EVENT_PACKAGE_OPERATION_START
- ALPM_EVENT_*_DONE -> ALPM_EVENT_PACKAGE_OPERATION_DONE
- question callback
- alpm_question_t renamed to alpm_question_type_t
- alpm_question_t union added
- alpm_cb_question now takes only an alpm_question_t parameter
- alpm_question_any_t, alpm_question_install_ignorepkg_t, alpm_question_replace_t
alpm_question_conflict_t, alpm_question_corrupted_t, alpm_question_remove_pkgs_t,
alpm_question_select_provider_t, alpm_question_import_key_t added
- event callback:
- alpm_event_t renamed to alpm_event_type_t
- alpm_event_t union added
- alpm_event_cb now takes only an alpm_event_t parameter
- alpm_event_any_t, alpm_package_operation_t, alpm_event_package_operation_t,
alpm_event_optdep_removal_t, alpm_event_delta_patch_t, alpm_event_scriptlet_info_t,
alpm_event_database_missing_t, alpm_event_pkgdownload_t, alpm_event_pacnew_created_t,
alpm_event_pacsave_created_t, alpm_event_pacorig_created_t added
- ALPM_EVENT_*_START -> ALPM_EVENT_PACKAGE_OPERATION_START
- ALPM_EVENT_*_DONE -> ALPM_EVENT_PACKAGE_OPERATION_DONE
- question callback:
- alpm_question_t renamed to alpm_question_type_t
- alpm_question_t union added
- alpm_cb_question now takes only an alpm_question_t parameter
- alpm_question_any_t, alpm_question_install_ignorepkg_t, alpm_question_replace_t
alpm_question_conflict_t, alpm_question_corrupted_t, alpm_question_remove_pkgs_t,
alpm_question_select_provider_t, alpm_question_import_key_t added
[ADDED]
- memory management
- memory management:
- alpm_fileconflict_free()
- alpm_depmissing_free()
- alpm_conflict_free()
- alpm_dep_free()
- database usage
- database usage:
- alpm_db_usage_t
- alpm_db_set_usage()
- alpm_db_get_usage()
- assume installed
- assume installed:
- alpm_option_get_assumeinstalled()
- alpm_option_add_assumeinstalled()
- alpm_option_set_assumeinstalled()
- alpm_option_remove_assumeinstalled()
- using noupgrade/noextract
- using noupgrade/noextract:
- alpm_option_match_noupgrade()
- alpm_option_match_noextract()
- utility functions
- utility functions:
- alpm_dep_from_string()
- alpm_pkg_should_ignore()
- alpm_decode_signature()
- alpm_extract_keyid()
- flags
- ALPM_EVENT_RETRIEVE_DONE, ALPM_EVENT_RETRIEVE_FAILED, ALPM_EVENT_PKGDOWNLOAD_START,
- flags:
ALPM_EVENT_RETRIEVE_DONE, ALPM_EVENT_RETRIEVE_FAILED, ALPM_EVENT_PKGDOWNLOAD_START,
ALPM_EVENT_PKGDOWNLOAD_DONE, ALPM_EVENT_PKGDOWNLOAD_FAILED, ALPM_EVENT_OPTDEP_REMOVAL,
ALPM_EVENT_PACNEW_CREATED, ALPM_EVENT_PACSVAE_CREATED, ALPM_EVENT_PACORIG_CREATED
@ -566,13 +579,13 @@ API CHANGES BETWEEN 4.2 AND 5.0
[REMOVED]
- alpm_siglevel_t - removed members ALPM_SIG_PACKAGE_SET, ALPM_SIG_PACKAGE_TRUST_SET
- removed .pacorig generation
- removed .pacorig generation:
- ALPM_EVENT_PACORIG_CREATED
- alpm_event_pacorig_created_t
- alpm_event_t.pacorig_created
[ADDED]
- hook support
- hook support:
- alpm_option_get_hookdirs()
- alpm_option_set_hookdirs()
- alpm_option_add_hookdir()
@ -582,14 +595,14 @@ API CHANGES BETWEEN 4.2 AND 5.0
- ALPM_EVENT_HOOK_START, ALPM_EVENT_HOOK_DONE
- ALPM_EVENT_HOOK_RUN_START, ALPM_EVENT_HOOK_RUN_DONE
- ALPM_ERR_TRANS_HOOK_FAILED
- different database extension support
- different database extension support:
- alpm_option_get_dbext()
- alpm_option_set_dbext()
- pkgbase accessor
- pkgbase accessor:
- alpm_pkg_get_base()
- transaction events
- transaction events:
- ALPM_EVENT_TRANSACTION_START, ALPM_EVENT_TRANSACTION_DONE
- database unlocking
- database unlocking:
- alpm_unlock()
@ -599,7 +612,7 @@ API CHANGES BETWEEN 5.0 AND 5.1
[CHANGED]
- alpm_errno_t - added member ALPM_ERR_OK
- alpm_siglevel_t - value of ALPM_SIG_USE_DEFAULT changed
- functions using bitfields return/pass an int instead of an enum
- functions using bitfields return/pass an int instead of an enum:
- alpm_option_get_default_siglevel()
- alpm_option_set_default_siglevel()
- alpm_option_get_remote_file_siglevel()
@ -616,19 +629,19 @@ API CHANGES BETWEEN 5.0 AND 5.1
- alpm_option_set_local_file_siglevel()
[ADDED]
- overwrite support
- overwrite support:
- alpm_option_get_overwrite_files()
- alpm_option_set_overwrite_files()
- alpm_option_add_overwrite_file()
- alpm_option_remove_overwrite_file()
- download timeout control
- download timeout control:
- alpm_option_set_disable_dl_timeout()
- access make/checkdepends info
- access make/checkdepends info:
- alpm_pkg_get_checkdepends()
- alpm_pkg_get_makedepends()
- check pacman capabilities
- check pacman capabilities:
- alpm_capabilities()
- duplicate and add to list
- duplicate and add to list:
- alpm_list_append_strdup()
@ -636,7 +649,7 @@ API CHANGES BETWEEN 5.1 AND 5.2
===============================
[REMOVED]
- package delta support
- package delta support:
- alpm_delta_t
- alpm_event_delta_patch_t
- alpm_event_t union - removed alpm_event_delta_patch_t
@ -662,10 +675,84 @@ API CHANGES BETWEEN 5.2 AND 6.0
[REMOVED]
- ALPM_EVENT_PKGDOWNLOAD_START, ALPM_EVENT_PKGDOWNLOAD_DONE, ALPM_EVENT_PKGDOWNLOAD_FAILED
- ALPM_ERR_PKG_REPO_NOT_FOUND
- old TotalDownload implementation:
- alpm_cb_totaldl
- alpm_option_get_totaldlcb()
- alpm_option_set_totaldlcb()
[CHANGED]
- alpm_db_update() changed its signature and now accepts a list of databases
rather than a single database. This is need to handle database downloading
in a multiplexed way.
- alpm_db_update() now accepts a list of databases rather than a single database.
- alpm_fetch_pkgurl() accepts a list of packages to download.
- alpm_db_search() now has an additional parameter and returns success status
- ALPM_EVENT_RETRIEVE_* -> ALPM_EVENT_DB_RETRIEVE_* and ALPM_EVENT_PKG_RETRIEVE_*
- alpm_cb_download pass event and data
- multi architecture support:
- alpm_option_get_arch() -> alpm_option_get_architectures()
- alpm_option_set_arch() -> alpm_option_set_architectures()
- alpm_db_get_servers() copies parameter data
[ADDED]
- parallel download support:
- alpm_option_set_parallel_downloads()
- alpm_option_get_parallel_downloads()
- file download events:
- alpm_download_event_type_t
- alpm_download_event_init_t
- alpm_download_event_progress_t
- alpm_download_event_completed_t
- download misc:
- ALPM_DOWNLOAD_RETRY
- alpm_download_event_retry_t
- alpm_event_pkg_retrieve_t
- multiarchitecture support:
- alpm_option_add_architecture()
- alpm_option_remove_architecture()
- misc:
- alpm_pkg_get_sig()
- callbacks add front-end provided context
API CHANGES BETWEEN 6.0 AND 6.1
===============================
[REMOVED]
- alpm_trans_t
[CHANGED]
- alpm_conflict_t - full package added as member, removing package name and name
hash members
- alpm_question_import_key_t - holds key uid and fingerprint rather than alpm_pgpkey_t
- alpm_pkgreason_t - added ALPM_PKG_REASON_UNKNOWN
- alpm_transflag_t - added ALPM_TRANS_FLAG_NOHOOKS
[ADDED]
- extensible package data type:
- alpm_pkg_xdata_t
- alpm_pkg_get_xdata()
- accessor functions:
- alpm_db_get_handle()
- alpm_pkg_get_handle()
- cache server support:
- alpm_db_get_cache_servers()
- alpm_db_set_cache_servers()
- alpm_db_add_cache_server()
API CHANGES BETWEEN 6.1 AND 7.0
===============================
[ADDED]
- sandbox functions:
- alpm_option_get_sandboxuser()
- alpm_option_set_sandboxuser()
- alpm_option_set_disable_sandbox()
- alpm_sandbox_setup_child()
API CHANGES BETWEEN 7.0 AND 7.1
===============================
[CHANGED]
- error codes:
PM_ERR_TRANS_COMMITING renamed to PM_ERR_TRANS_COMMITTING

17
RELEASE
View file

@ -11,13 +11,24 @@ The following checklist should be used for making a pacman release.
- Update doc/index.asciidoc
- Create a signed git tag (git tag -s vX.Y.Z -m "commit message")
- Create and sign release tarballs (generate with "ninja dist")
- Update pacman website
- Create release on gitlab project page
- Upload release tarball and signature to gitlab ("glab release upload ...")
- Create branch release/?.?.x (with ?.? replaced by major version number)
- Update .gitlab-ci.yml to point the website pages run at release branch
Transifex updates are handled using the transifex client. The basic process is:
- Pull updates from transifex ("tx pull -a -f --minimum-perc 75")
- Pull updates from transifex ("tx pull -f --minimum-perc 75")
- Update po files ("./build-aux/update-po")
- Fix all translation errors found
- Fix all translation errors found (e.g. using "mint-check-translations")
- Add any new locales to the relevant LINGUAS file
- Optional: Make any manual changes needed (e.g. fixing spacing in a string)
and update po files again
- Push updated po files to transifex ("tx push -s -t --skip")
Point releases:
- all bugs fixes slated for the release branch must first land on master
(unless no longer relevant)
- following the initial post-release period when the release and master
branches may be kept in sync, commits are backported to the release branch
using "git cherry-pick -x"
- translation updates should be pulled onto the release branch only

View file

@ -3,7 +3,7 @@ currently. Our translations are currently maintained in Transifex; please read
doc/translation-help.txt for more details.
Below is a list of past translators before we switched to Transifex; more can
be found by looking in the GIT history.
be found by looking in the Git history.
If your language is not already in the various po/ subdirectories and you wish
it was, set up a team in Transifex for your language and we will be happy to

11
build-aux/cat-test-file Executable file
View file

@ -0,0 +1,11 @@
#!/usr/bin/python3
import sys
for path in sys.argv[1:]:
print('# -----------------------------------')
print('# ' + path + ':')
print('# -----------------------------------')
with open(path, 'r') as f:
for line in f:
print('# ' + line, end='')

View file

@ -4,13 +4,14 @@ input=$1
output=$2
mode=$3
"@SED@" \
sed \
-e "s|@rootdir[@]|@ROOTDIR@|g" \
-e "s|@localedir[@]|@LOCALEDIR@|g" \
-e "s|@sysconfdir[@]|@sysconfdir@|g" \
-e "s|@localstatedir[@]|@localstatedir@|g" \
-e "s|@libmakepkgdir[@]|@LIBMAKEPKGDIR@|g" \
-e "s|@pkgdatadir[@]|@PKGDATADIR@|g" \
-e "s|@keyringdir[@]|@KEYRINGDIR@|g" \
-e "s|@prefix[@]|@PREFIX@|g" \
-e "1s|#!/bin/bash|#!@BASH@|g" \
-e "s|@PACKAGE_VERSION[@]|@PACKAGE_VERSION@|g" \
@ -20,6 +21,7 @@ mode=$3
-e "s|@DEBUGSUFFIX[@]|@DEBUGSUFFIX@|g" \
-e "s|@INODECMD[@]|@INODECMD@|g" \
-e "s|@FILECMD[@]|@FILECMD@|g" \
-e "s|@BSDTAR_NO_READ_SPARSE[@]|@BSDTAR_NO_READ_SPARSE@|g" \
"$input" >"$output"
if [[ $mode ]]; then

View file

@ -5,8 +5,6 @@ set -eu
# and we need to create the target directory...
mkdir -vp "$(dirname "${DESTDIR:-}$2")"
if [ "$(dirname $1)" = . ]; then
ln -vfs -T "$1" "${DESTDIR:-}$2"
else
ln -vfs -T --relative "${DESTDIR:-}$1" "${DESTDIR:-}$2"
fi
rm -f "${DESTDIR:-}$2"
ln -vs "$1" "${DESTDIR:-}$2"

View file

@ -0,0 +1,17 @@
#!/usr/bin/python
import json
import sys
def print_result(result):
print('==================================================================')
print(result['name'])
print(' '.join(result['command']))
print('==================================================================')
print(result['stdout'])
with open(sys.argv[1], 'r') as f:
for line in f:
result = json.loads(line)
if result['result'] == 'FAIL':
print_result(result)

View file

@ -3,4 +3,4 @@
# This script serves as a trampoline for running scripts which depend on
# libmakepkg with the libmakepkg within the build tree.
LIBRARY=@BUILDDIR@/libmakepkg exec @BASH@ -$- @REAL_PROGPATH@ "$@"
MAKEPKG_LIBRARY=@BUILDDIR@/libmakepkg exec @BASH@ -$- @REAL_PROGPATH@ "$@"

View file

@ -11,14 +11,14 @@ Synopsis
This manual page describes the format of a BUILDINFO file found in the root of
a package created by makepkg. The file contains a description of the package's
build environment. The information is formatted in key-value pairs separated by
a '=', one value per line. Arrays are represented multiple keys with the same
value.
a '=', one value per line. Arrays are represented as multiple key-value pairs
having the same key.
Description
-----------
This is a description of the contents of version '1' of the
This is a description of the contents of version '2' of the
BUILDINFO file format.
*format*::
@ -53,6 +53,15 @@ BUILDINFO file format.
*startdir*::
The directory from which makepkg was executed.
*buildtool*::
The name of the tool ecosystem used to set up the build environment. Used
for defining a spec for reproducible builds, e.g. the source of the
linkman:makepkg.conf[5] used.
*buildtoolver*::
The full version of the 'buildtool', for example:
"$pkgver-$pkgrel-$pkgarch".
*buildenv (array)*::
The build environment specified in makepkg.conf.

View file

@ -1,4 +1,4 @@
# Doxyfile 1.8.2
# Doxyfile 1.9.3
#---------------------------------------------------------------------------
# Project related configuration options
@ -10,6 +10,7 @@ PROJECT_BRIEF = "Arch Linux Package Manager Library"
PROJECT_LOGO =
OUTPUT_DIRECTORY = @OUTPUT_DIRECTORY@
CREATE_SUBDIRS = NO
ALLOW_UNICODE_NAMES = NO
OUTPUT_LANGUAGE = English
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
@ -31,41 +32,47 @@ STRIP_FROM_PATH =
STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = YES
JAVADOC_BANNER = NO
QT_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
PYTHON_DOCSTRING = YES
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 4
ALIASES =
TCL_SUBST =
OPTIMIZE_OUTPUT_FOR_C = YES
OPTIMIZE_OUTPUT_JAVA = NO
OPTIMIZE_FOR_FORTRAN = NO
OPTIMIZE_OUTPUT_VHDL = NO
OPTIMIZE_OUTPUT_SLICE = NO
EXTENSION_MAPPING =
MARKDOWN_SUPPORT = YES
TOC_INCLUDE_HEADINGS = 5
AUTOLINK_SUPPORT = YES
BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
SIP_SUPPORT = NO
IDL_PROPERTY_SUPPORT = YES
DISTRIBUTE_GROUP_DOC = NO
GROUP_NESTED_COMPOUNDS = NO
SUBGROUPING = YES
INLINE_GROUPED_CLASSES = NO
INLINE_SIMPLE_STRUCTS = NO
TYPEDEF_HIDES_STRUCT = NO
SYMBOL_CACHE_SIZE = 0
INLINE_SIMPLE_STRUCTS = YES
TYPEDEF_HIDES_STRUCT = YES
LOOKUP_CACHE_SIZE = 0
NUM_PROC_THREADS = 1
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
EXTRACT_ALL = NO
EXTRACT_PRIVATE = NO
EXTRACT_PRIV_VIRTUAL = NO
EXTRACT_PACKAGE = NO
EXTRACT_STATIC = NO
EXTRACT_LOCAL_CLASSES = YES
EXTRACT_LOCAL_METHODS = NO
EXTRACT_ANON_NSPACES = NO
RESOLVE_UNNAMED_PARAMS = YES
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO
HIDE_FRIEND_COMPOUNDS = NO
@ -73,7 +80,10 @@ HIDE_IN_BODY_DOCS = YES
INTERNAL_DOCS = NO
CASE_SENSE_NAMES = YES
HIDE_SCOPE_NAMES = NO
HIDE_COMPOUND_REFERENCE= NO
SHOW_HEADERFILE = YES
SHOW_INCLUDE_FILES = YES
SHOW_GROUPED_MEMB_INC = NO
FORCE_LOCAL_INCLUDES = NO
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
@ -95,26 +105,30 @@ FILE_VERSION_FILTER =
LAYOUT_FILE =
CITE_BIB_FILES =
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
WARN_IF_INCOMPLETE_DOC = YES
WARN_NO_PARAMDOC = NO
WARN_AS_ERROR = NO
WARN_FORMAT = "$file:$line: $text"
WARN_LOGFILE =
#---------------------------------------------------------------------------
# configuration options related to the input files
# Configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = ../lib/libalpm/
INPUT = @INPUT_DIRECTORY@/../lib/libalpm/alpm.h \
@INPUT_DIRECTORY@/../lib/libalpm/alpm_list.h
INPUT_ENCODING = UTF-8
FILE_PATTERNS =
RECURSIVE = NO
EXCLUDE =
EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS =
EXCLUDE_SYMBOLS =
EXCLUDE_SYMBOLS = _alpm_* \
__alpm_*
EXAMPLE_PATH =
EXAMPLE_PATTERNS = *
EXAMPLE_RECURSIVE = NO
@ -123,8 +137,9 @@ INPUT_FILTER =
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
FILTER_SOURCE_PATTERNS =
USE_MDFILE_AS_MAINPAGE =
#---------------------------------------------------------------------------
# configuration options related to source browsing
# Configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = NO
INLINE_SOURCES = NO
@ -132,16 +147,16 @@ STRIP_CODE_COMMENTS = NO
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
REFERENCES_LINK_SOURCE = YES
SOURCE_TOOLTIPS = YES
USE_HTAGS = NO
VERBATIM_HEADERS = YES
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = NO
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# configuration options related to the HTML output
# Configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML = NO
HTML_OUTPUT = html
@ -154,11 +169,12 @@ HTML_EXTRA_FILES =
HTML_COLORSTYLE_HUE = 220
HTML_COLORSTYLE_SAT = 100
HTML_COLORSTYLE_GAMMA = 80
HTML_TIMESTAMP = YES
HTML_DYNAMIC_MENUS = YES
HTML_DYNAMIC_SECTIONS = NO
HTML_INDEX_NUM_ENTRIES = 100
GENERATE_DOCSET = NO
DOCSET_FEEDNAME = "Doxygen generated docs"
DOCSET_FEEDURL =
DOCSET_BUNDLE_ID = org.doxygen.Project
DOCSET_PUBLISHER_ID = org.doxygen.Publisher
DOCSET_PUBLISHER_NAME = Publisher
@ -181,36 +197,50 @@ GENERATE_ECLIPSEHELP = NO
ECLIPSE_DOC_ID = org.doxygen.Project
DISABLE_INDEX = NO
GENERATE_TREEVIEW = NO
FULL_SIDEBAR = NO
ENUM_VALUES_PER_LINE = 4
TREEVIEW_WIDTH = 250
EXT_LINKS_IN_WINDOW = NO
OBFUSCATE_EMAILS = YES
HTML_FORMULA_FORMAT = png
FORMULA_FONTSIZE = 10
FORMULA_TRANSPARENT = YES
FORMULA_MACROFILE =
USE_MATHJAX = NO
MATHJAX_VERSION = MathJax_2
MATHJAX_FORMAT = HTML-CSS
MATHJAX_RELPATH = http://www.mathjax.org/mathjax
MATHJAX_EXTENSIONS =
MATHJAX_CODEFILE =
SEARCHENGINE = NO
SERVER_BASED_SEARCH = NO
EXTERNAL_SEARCH = NO
SEARCHENGINE_URL =
SEARCHDATA_FILE = searchdata.xml
EXTERNAL_SEARCH_ID =
EXTRA_SEARCH_MAPPINGS =
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
# Configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX = NO
LATEX_OUTPUT = latex
LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex
LATEX_MAKEINDEX_CMD = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = letter
EXTRA_PACKAGES =
LATEX_HEADER =
LATEX_FOOTER =
LATEX_EXTRA_STYLESHEET =
LATEX_EXTRA_FILES =
PDF_HYPERLINKS = NO
USE_PDFLATEX = NO
LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
LATEX_SOURCE_CODE = NO
LATEX_BIB_STYLE = plain
LATEX_EMOJI_DIRECTORY =
#---------------------------------------------------------------------------
# configuration options related to the RTF output
# Configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF = NO
RTF_OUTPUT = rtf
@ -219,26 +249,31 @@ RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
# configuration options related to the man page output
# Configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN = YES
MAN_OUTPUT = .
MAN_EXTENSION = .3
MAN_SUBDIR =
MAN_LINKS = NO
#---------------------------------------------------------------------------
# configuration options related to the XML output
# Configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = NO
XML_OUTPUT = xml
XML_SCHEMA =
XML_DTD =
XML_PROGRAMLISTING = YES
XML_NS_MEMB_FILE_SCOPE = NO
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
# Configuration options related to the DOCBOOK output
#---------------------------------------------------------------------------
GENERATE_DOCBOOK = NO
DOCBOOK_OUTPUT = docbook
#---------------------------------------------------------------------------
# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# configuration options related to the Perl module output
# Configuration options related to the Perl module output
#---------------------------------------------------------------------------
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
@ -254,7 +289,6 @@ SEARCH_INCLUDES = YES
INCLUDE_PATH = ../..
INCLUDE_FILE_PATTERNS = *.h
PREDEFINED = HAVE_CONFIG_H= \
SYMHIDDEN= \
SYMEXPORT= \
HAVE_LIBARCHIVE \
HAVE_LIBCURL \
@ -262,29 +296,28 @@ PREDEFINED = HAVE_CONFIG_H= \
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration::additions related to external references
# Configuration options related to external references
#---------------------------------------------------------------------------
TAGFILES =
GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
PERL_PATH = /usr/bin/perl
EXTERNAL_PAGES = YES
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = NO
MSCGEN_PATH =
DIA_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES
DOT_NUM_THREADS = 0
DOT_FONTNAME = Helvetica
DOT_FONTSIZE = 10
DOT_FONTPATH =
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
UML_LOOK = NO
UML_LIMIT_NUM_FIELDS = 10
DOT_UML_DETAILS = NO
DOT_WRAP_THRESHOLD = 17
TEMPLATE_RELATIONS = NO
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
@ -292,14 +325,18 @@ CALL_GRAPH = NO
CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DIR_GRAPH_MAX_DEPTH = 1
DOT_IMAGE_FORMAT = png
INTERACTIVE_SVG = NO
DOT_PATH =
DOTFILE_DIRS =
MSCFILE_DIRS =
DIAFILE_DIRS =
PLANTUML_JAR_PATH =
PLANTUML_CFG_FILE =
PLANTUML_INCLUDE_PATH =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 3
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES

View file

@ -12,8 +12,8 @@ depends=('glibc')
makedepends=('ed')
optdepends=('ed: for "patch -e" functionality')
source=("ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz"{,.sig})
md5sums=('e9ae5393426d3ad783a300a338c09b72'
'SKIP')
sha256sums=('9124ba46db0abd873d0995c2ca880e81252676bb6c03e0a37dfc5f608a9b0ceb'
'SKIP')
build() {
cd "$srcdir/$pkgname-$pkgver"

View file

@ -3,7 +3,7 @@ PKGBUILD(5)
Name
----
PKGBUILD - Arch Linux package build description file
PKGBUILD - Package build description file
Synopsis
@ -84,14 +84,7 @@ systems (see below).
*license (array)*::
This field specifies the license(s) that apply to the package.
Commonly used licenses can be found in '/usr/share/licenses/common'. If you
see the package's license there, simply reference it in the license
field (e.g., `license=('GPL')`). If the package provides a license not
available in '/usr/share/licenses/common', then you should include it
in the package itself and set `license=('custom')` or
`license=('custom:LicenseName')`. The license should be placed in
'$pkgdir/usr/share/licenses/$pkgname/' when building the package. If
multiple licenses are applicable, list all of them:
If multiple licenses are applicable, list all of them:
`license=('GPL' 'FDL')`.
*install*::
@ -187,11 +180,6 @@ contain whitespace characters.
than or equal to), `<=` (less than or equal to), `=` (equal to), `>`
(greater than), or `<` (less than).
+
If the dependency name appears to be a library (ends with .so), makepkg will
try to find a binary that depends on the library in the built package and
append the version needed by the binary. Appending the version yourself
disables automatic detection.
+
Additional architecture-specific depends can be added by appending an
underscore and the architecture name e.g., 'depends_x86_64=()'.
@ -245,10 +233,6 @@ example, dcron can provide 'cron=2.0' to satisfy the 'cron>=2.0' dependency of
other packages. Provisions involving the `>` and `<` operators are invalid as
only specific versions of a package may be provided.
+
If the provision name appears to be a library (ends with .so), makepkg will
try to find the library in the built package and append the correct
version. Appending the version yourself disables automatic detection.
+
Additional architecture-specific provides can be added by appending an
underscore and the architecture name e.g., 'provides_x86_64=()'.
@ -325,6 +309,19 @@ underscore and the architecture name e.g., 'replaces_x86_64=()'.
When used in combination with the `strip' option, a separate package
containing the debug symbols is created.
*lto*;;
Enable building packages using link time optimization. Adds '-flto'
to both CFLAGS and CXXFLAGS.
*xdata (array)*::
This array allows you to add additional metadata to the package.
This data is neither used by pacman nor by makepkg;
It has purely informational purpose, or may be interpreted by third-party tools.
+
All entries in that array must have the form 'key=value', where
'key' is an arbitrary non-empty string and 'value' must not contain an equal sign.
Furthermore, the key ``pkgtype'' is reserved for the makepkg program.
Packaging Functions
-------------------
@ -348,6 +345,13 @@ function.
the optional functions listed below. The packaging stage is run using
fakeroot to ensure correct file permissions in the resulting package.
All other functions will be run as the user calling makepkg.
This function is run inside `$srcdir`.
*verify() Function*::
An optional `verify()` function can be specified to implement arbitrary
source authentication. The function should return a non-zero exit code when
verification fails. This function is run before sources are extracted.
This function is run inside `$startdir`.
*prepare() Function*::
An optional `prepare()` function can be specified in which operations to
@ -355,16 +359,19 @@ function.
function is run after the source extraction and before the `build()`
function. The `prepare()` function is skipped when source extraction
is skipped.
This function is run inside `$srcdir`.
*build() Function*::
The optional `build()` function is use to compile and/or adjust the source
The optional `build()` function is used to compile and/or adjust the source
files in preparation to be installed by the `package()` function.
This function is run inside `$srcdir`.
*check() Function*::
An optional `check()` function can be specified in which a package's
test-suite may be run. This function is run between the `build()` and
`package()` functions. Be sure any exotic commands used are covered by the
`checkdepends` array.
This function is run inside `$srcdir`.
All of the above variables such as `$pkgname` and `$pkgver` are available for
use in the packaging functions. In addition, makepkg defines the following
@ -374,7 +381,6 @@ variables:
This contains the directory where makepkg extracts, or copies, all source
files.
+
All of the packaging functions defined above are run starting inside `$srcdir`
*pkgdir*::
This contains the directory where makepkg bundles the installed package.
@ -472,9 +478,12 @@ control system (VCS) is enabled by specifying the source in the form:
source=('directory::url#fragment?query')
Currently makepkg supports the Bazaar, Git, Subversion, and Mercurial version
control systems. For other version control systems, manual cloning of upstream
repositories must be done in the `prepare()` function.
Currently makepkg supports the Bazaar, Git, Subversion, Fossil and Mercurial
version control systems. For other version control systems, manual cloning of
upstream repositories must be done in the `prepare()` function.
Some <<VCS,VCS Sources>> like Git support pinning the checkout by a checksum of
its content using deterministic export functionality like ``git archive''.
The source URL is divided into four components:
@ -520,8 +529,7 @@ The source URL is divided into four components:
Example
-------
The following is an example PKGBUILD for the 'patch' package. For more
examples, look through the build files of your distribution's packages. For
those using Arch Linux, consult the Arch Build System (ABS) tree.
examples, look through the build files of your distribution's packages.
[source,sh]
-------------------------------

View file

@ -1,5 +1,5 @@
## linkman: macro
# Inspired by/borrowed from the GIT source tree at Documentation/asciidoc.conf
# Inspired by/borrowed from the Git source tree at Documentation/asciidoc.conf
#
# Usage: linkman:command[manpage-section]
#
@ -50,7 +50,7 @@ ifdef::backend-docbook[]
template::[header-declarations]
<refentry>
<refentryinfo>
<date>{pacman_date}</date>
<date>{localdate}</date>
</refentryinfo>
<refmeta>
<refentrytitle>{mantitle}</refentrytitle>

View file

@ -1,14 +1,15 @@
See the pacman website at https://www.archlinux.org/pacman/[] for current
See the pacman website at https://archlinux.org/pacman/[] for current
information on pacman and its related tools.
Bugs
----
Bugs? You must be kidding; there are no bugs in this software. But if we
happen to be wrong, submit a bug report with as much detail as possible
at the https://bugs.archlinux.org/index.php?project=3[Arch Linux Bug Tracker]
in the Pacman section.
happen to be wrong, please report them to the issue tracker at
link:https://gitlab.archlinux.org/pacman/pacman/-/issues[] with specific
information such as your command-line, the nature of the bug, and even
the package database if it helps.
Authors
@ -18,8 +19,7 @@ Current maintainers:
* Allan McRae <allan@archlinux.org>
* Andrew Gregory <andrew.gregory.8@gmail.com>
* Dave Reisner <dreisner@archlinux.org>
* Eli Schwartz <eschwartz@archlinux.org>
* Morgan Adamiec <morganamilo@archlinux.org>
Past major contributors:
@ -29,6 +29,8 @@ Past major contributors:
* Dan McGee <dan@archlinux.org>
* Xavier Chantry <shiningxc@gmail.com>
* Nagy Gabor <ngaba@bibl.u-szeged.hu>
* Dave Reisner <dreisner@archlinux.org>
* Eli Schwartz <eschwartz@archlinux.org>
For additional contributors, use `git shortlog -s` on the pacman.git
repository.

View file

@ -34,6 +34,8 @@ makepkg/repo-add/pacman toolchain via GnuPG and GPGME.
Version 5.0 added support for pre/post-transaction hooks and sync database file
list operations.
Version 6.0 added support for parallel downloads.
Documentation
-------------
@ -59,11 +61,11 @@ configuration files dealing with pacman.
Changelog
~~~~~~~~~
For a good idea of what is going on in pacman development, take a look at the
link:https://git.archlinux.org/pacman.git/[Git summary page] for the
link:https://gitlab.archlinux.org/pacman/pacman[Git summary page] for the
project.
See the most recent
link:https://git.archlinux.org/pacman.git/tree/NEWS[NEWS]
link:https://gitlab.archlinux.org/pacman/pacman/-/blob/master/NEWS[NEWS]
file for a not-as-frequently-updated list of changes. However, this should
contain the biggest changes in a format more concise than the commit log.
@ -77,6 +79,11 @@ Releases
[frame="topbot",grid="none",options="header,autowidth"]
!======
!Version !Date
!7.0.0 !2024-07-14
!6.1.0 !2024-03-04
!6.0.1 !2021-09-04
!6.0.0 !2021-05-20
!6.0.0alpha1 !2020-12-04
!5.2.1 !2019-11-01
!5.2.0 !2019-10-21
!5.1.3 !2019-03-01
@ -106,6 +113,11 @@ Releases
!3.4.3 !2011-01-22
!3.4.2 !2010-12-29
!3.4.1 !2010-09-03
!======
|
[frame="topbot",grid="none",options="header,autowidth"]
!======
!Version !Date
!3.4.0 !2010-06-16
!3.3.3 !2009-11-10
!3.3.2 !2009-10-05
@ -115,11 +127,6 @@ Releases
!3.2.1 !2008-08-26
!3.2.0 !2008-07-30
!3.1.4 !2008-04-01
!======
|
[frame="topbot",grid="none",options="header,autowidth"]
!======
!Version !Date
!3.1.3 !2008-03-06
!3.1.2 !2008-02-20
!3.1.1 !2008-01-20
@ -145,16 +152,16 @@ Releases
!2.9 !2004-09-18
!2.8.4 !2004-08-23
!2.8.3 !2004-08-04
!2.8.2 !2004-07-22
!2.8.1 !2004-07-17
!2.8 !2004-07-03
!2.7.9 !2004-04-30
!2.7.8 !2004-04-29
!======
|
[frame="topbot",grid="none",options="header,autowidth"]
!======
!Version !Date
!2.8.2 !2004-07-22
!2.8.1 !2004-07-17
!2.8 !2004-07-03
!2.7.9 !2004-04-30
!2.7.8 !2004-04-29
!2.7.7 !2004-04-15
!2.7.6 !2004-04-04
!2.7.5 !2004-03-02
@ -188,7 +195,9 @@ Releases
|======
Source code for all releases is available at
Source code for releases since moving to gitlab is available at
link:https://gitlab.archlinux.org/pacman/pacman/-/releases[].
Source code for historical releases is available at
link:https://sources.archlinux.org/other/pacman/[]. To install, download the newest
available source tarball, unpack it in a directory, and run the three magic
commands:
@ -218,12 +227,11 @@ these trees).
The current development tree can be fetched with the following command:
git clone git://git.archlinux.org/pacman.git pacman
git clone https://gitlab.archlinux.org/pacman/pacman.git
which will fetch the full development history into a directory named pacman.
You can browse the source as well using
link:https://git.archlinux.org/pacman.git/[cgit]. HTTP/HTTPS URLs are also
available for cloning purposes; these URLs are listed at the above page.
link:https://gitlab.archlinux.org/pacman/pacman/[gitlab].
If you are interested in hacking on pacman, it is highly recommended you join
the mailing list mentioned above, as well as take a quick glance at our
@ -235,34 +243,16 @@ you speak a foreign language, you can help by either creating or updating a
translation file for your native language. Instructions can be found in
link:translation-help.html[translation-help].
Other Utilities
~~~~~~~~~~~~~~~
Although the package manager itself is quite simple, many scripts have been
developed that help automate building and installing packages. These are used
extensively in link:https://www.archlinux.org/[Arch Linux]. Most of these utilities
are available in the Arch Linux projects
link:https://git.archlinux.org/[code browser].
Utilities available:
* link:https://git.archlinux.org/dbscripts.git/[dbscripts] - scripts used by Arch Linux to manage the main package repositories
* link:https://git.archlinux.org/devtools.git/[devtools] - tools to assist in packaging and dependency checking
* link:https://git.archlinux.org/namcap.git/[namcap] - a package analysis utility written in python
Bugs
----
If you find bugs (which is quite likely), please email them to the pacman-dev
mailing last at mailto:pacman-dev@archlinux.org[] with specific information
such as your command-line, the nature of the bug, and even the package database
if it helps.
You can also post a bug to the Arch Linux bug tracker
link:https://bugs.archlinux.org/index.php?project=3[Flyspray]. Be sure to file
bugs under the Pacman project.
If you find bugs (which is quite likely), please report them to the issue
tracker at link:https://gitlab.archlinux.org/pacman/pacman/-/issues[] with
specific information such as your command-line, the nature of the bug, and even
the package database if it helps.
Copyright
---------
pacman is Copyright (C) 2006-2020 Pacman Development Team
<pacman-dev@archlinux.org> and Copyright (C) 2002-2006 Judd Vinet
pacman is Copyright (C) 2006-2025 Pacman Development Team
<pacman-dev@lists.archlinux.org> and Copyright (C) 2002-2006 Judd Vinet
<jvinet@zeroflux.org> and is licensed through the GNU General Public License,
version 2 or later.

View file

@ -1,37 +0,0 @@
libalpm(3)
==========
Name
----
libalpm - Arch Linux Package Management (ALPM) library
Synopsis
--------
For ease of access, the libalpm manual has been split up into several sections.
*TODO:* Yes, this man page needs a lot of work. Once we get around to doing
good Doxygen documentation, it will improve. We promise.
*alpm_databases*:: Database Functions
*alpm_interface*:: Interface Functions
*alpm_list*:: List Functions
*alpm_log*:: Logging Functions
*alpm_misc*:: Miscellaneous Functions
*alpm_packages*:: Package Functions
*alpm_sync*:: Sync Functions
*alpm_trans*:: Transaction Functions
Configuration
-------------
See linkman:pacman.conf[5] for more details on configuring libalpm using the
'pacman.conf' file.
See Also
--------
linkman:alpm-hooks[5], linkman:makepkg[8], linkman:pacman[8],
linkman:pacman.conf[5]
include::footer.asciidoc[]

View file

@ -85,7 +85,7 @@ Example PKGBUILD
license=('PerlArtistic' 'GPL')
depends=('perl')
source=("http://search.cpan.org/CPAN/authors/id/S/SH/SHERZODR/Config-Simple-${pkgver}.tar.gz")
md5sums=('f014aec54f0a1e2e880d317180fce502')
sha256sums=('dd9995706f0f9384a15ccffe116c3b6e22f42ba2e58d8f24ed03c4a0e386edb4')
_distname="Config-Simple"
# template start; name=perl-module; version=1.0;

View file

@ -75,7 +75,7 @@ Options
For each source file in the source array of PKGBUILD, download the file
if required and generate integrity checks. The integrity checks generated
are determined by the checks present in the PKGBUILD, falling back to the
value of the INTEGRITY_CHECK array in makepkg.conf(5) if these are absent
value of the INTEGRITY_CHECK array in makepkg.conf(5) if these are absent.
This output can be redirected into your PKGBUILD for source validation
using "`makepkg -g >> PKGBUILD`".
@ -144,8 +144,12 @@ Options
Display version information.
*-C, \--cleanbuild*::
Remove the $srcdir before building the package.
Clean build artifacts from previous runs of makepkg in the current
directory by removing $srcdir before building the package.
*-D* <dir>, *\--dir* <dir> ::
Change to directory <dir> before reading the PKGBUILD or doing anything else.
*\--allsource*::
Do not actually build the package, but build a source-only tarball that
includes all sources, including those that are normally downloaded via
@ -168,6 +172,9 @@ Options
*\--noprepare*::
Do not run the prepare() function in the PKGBUILD.
*\--noverify*::
Do not run the verify() function in the PKGBUILD.
*\--sign*::
Sign the resulting package with gpg, overriding the setting in
linkman:makepkg.conf[5].
@ -227,6 +234,9 @@ before building.
Environment Variables
---------------------
**MAKEPKG_LIBRARY**="/path/to/directory"::
Use an alternative libmakepkg path instead of the {libmakepkgdir} default.
**PACMAN**::
The command that will be used to check for missing dependencies and to
install and remove packages. Pacman's '-Qq', '-Rns', '-S', '-T', and '-U'
@ -237,6 +247,11 @@ Environment Variables
Use an alternate config file instead of the +{sysconfdir}/makepkg.conf+
default.
**MAKEPKG_GIT_CONFIG=**"/path/to/file"::
Use an alternate config file for Git instead of the
+{sysconfdir}/makepkg.d/gitconfig+ default. makepkg always prevents Git
from loading any other config files.
**PKGDEST=**"/path/to/directory"::
Directory where the resulting packages will be stored. Overrides the
corresponding value defined in linkman:makepkg.conf[5].
@ -279,6 +294,20 @@ Environment Variables
**SOURCE_DATE_EPOCH=**"<date>"::
Used for link:https://reproducible-builds.org/docs/[Reproducible Builds].
**BUILDTOOL=**"<name>"::
The name of a tool ecosystem used to set up the build environment. Used for
defining a spec for reproducible builds, e.g. the linkman:makepkg.conf[5]
used.
**BUILDTOOLVER=**"<version>"::
The version of the '$BUILDTOOL' used.
**MAKEPKG_LINT_PKGBUILD=**0::
Setting to 0 disables PKGBUILD linting within makepkg. Useful on systems
with slow bash subshell operations, or on PKGBUILDs with extreme amounts of
package splitting.
Configuration
-------------
See linkman:makepkg.conf[5] for more details on configuring makepkg using the
@ -342,6 +371,10 @@ On exit, makepkg will return one of the following error codes.
16::
Specified GPG key does not exist or failed to sign package.
17::
The local repository is not a clone of the source repository
specified in PKGBUILD.
See Also
--------
linkman:makepkg.conf[5], linkman:PKGBUILD[5], linkman:pacman[8]

View file

@ -23,6 +23,9 @@ NOTE: This does not guarantee that all package Makefiles will use your exported
variables. Some of them are non-standard.
The system-wide configuration file is found in {sysconfdir}/makepkg.conf.
Specific additions (e.g. build flags for additional languages) can be placed
in {sysconfdir}/makepkg.conf.d/*.conf.
Individual options can be overridden (or added to) on a per-user basis in
$XDG_CONFIG_HOME/pacman/makepkg.conf or ~/.makepkg.conf, with the former
taking priority.
@ -59,6 +62,11 @@ Options
A string such as ``i686-pc-linux-gnu''; do not touch this unless you know what
you are doing. This can be commented out by most users if desired.
**NPROC=**""::
Sets the number of processors to use for parallel jobs in makepkg.
Note: this does not affect parallelization of tasks during ``build()`` and
related functions.
**CPPFLAGS=**"cppflags"::
Flags used for the C preprocessor; see CFLAGS for more information.
@ -72,15 +80,16 @@ Options
**CXXFLAGS=**"cxxflags"::
Flags used for the C++ compiler; see CFLAGS for more info.
**RUSTFLAGS=**"rustflags"::
Flags used for the Rust compiler, similar in spirit to CFLAGS. Read
linkman:rustc[1] for more details on the available flags.
**LDFLAGS=**"ldflags"::
Flags used for the linker. Several options may be specified with common
usage resembling ``-Wl,--hash-style=gnu''. Read ld(1) for more details on
available linker flags.
**LTOFLAGS=**"ltoflags"::
Additional compiler and linker flags appended to `CFLAGS`, `CXXFLAGS`
and `LDFLAGS` when building with link time optimization. If empty,
``-flto'' is used.
**MAKEFLAGS=**"makeflags"::
This is often used to set the number of jobs used; for example, `-j2`.
Other flags that make accepts can also be passed.
@ -93,11 +102,6 @@ Options
**DEBUG_CXXFLAGS=**"debug_cxxflags"::
Debug flags used for the C++ compiler; see DEBUG_CFLAGS for more info.
**DEBUG_RUSTFLAGS=**"debug_rustflags"::
Additional compiler flags appended to `RUSTFLAGS` for use in debugging.
Usually this would include: ``-C debuginfo=2''. Read linkman:rustc[1] for
more details on the available flags.
**BUILDENV=(**!distcc !color !ccache check !sign**)**::
This array contains options that affect the build environment; the defaults
are shown here. All options should always be left in the array; to enable
@ -126,7 +130,7 @@ Options
*sign*;;
Generate a PGP signature file using GnuPG. This will execute 'gpg
\--detach-sign \--use-agent' on the built package to generate a detached
\--detach-sign' on the built package to generate a detached
signature file, using the GPG agent, if it is available. The signature
file will be the entire file name of the package with a ``.sig''
extension.
@ -147,7 +151,7 @@ Options
Specify a key to use for GPG signing instead of the default key in the
keyring. Can be overridden with makepkg's '\--key' option.
**OPTIONS=(**!strip docs libtool staticlibs emptydirs !zipman !purge !debug**)**::
**OPTIONS=(**!strip docs libtool staticlibs emptydirs ...**)**::
This array contains options that affect default packaging. They are
equivalent to options that can be placed in the PKGBUILD; the defaults are
shown here. All options should always be left in the array; to enable or
@ -189,6 +193,16 @@ Options
DEBUG_CXXFLAGS to their counterpart buildflags. Creates a separate
package containing the debug symbols when used with `strip'.
*lto*;;
Enable building packages using link time optimization. Adds the
flags specified in LTOFLAGS to CFLAGS, CXXFLAGS and LDFLAGS (or
``-flto'' if LTOFLAGS is empty).
*autodeps*;;
Enable the automatic addition of libraries to the depends and
provides arrays. Search library directories are controlled by
the LIB_DIRS variable defined below.
**INTEGRITY_CHECK=(**check1 ...**)**::
File integrity checks to use. Multiple checks may be specified; this
affects both generation and checking. The current valid options are:
@ -219,6 +233,12 @@ Options
that are located in opt/, you may need to add the directory to this
array. *NOTE:* Do not add the leading slash to the directory name.
**LIB_DIRS=(**lib:usr/lib ...**)**::
If `autodeps` is specified in the `OPTIONS` array, this variable will
instruct makepkg where to look to find libraries to add to the `provides`
array. The format is "prefix:path", where provides will be added for
libraries found in "path" with the specified prefix added.
**PURGE_TARGETS=(**usr/{,share}/info/dir .podlist *.pod...**)**::
If `purge` is specified in the `OPTIONS` array, this variable will
instruct makepkg which files to remove from the package. This is
@ -270,9 +290,18 @@ Options
**PKGEXT=**"{pkgext}", **SRCEXT=**"{srcext}"::
Sets the compression used when making compiled or source packages.
Valid suffixes are `.tar.gz`, `.tar.bz2`, `.tar.xz`, `.tar.zst`,
`.tar.lzo`, `.tar.lrz`, `.tar.lz4`, `.tar.lz` and `.tar.Z`, or
simply `.tar` to disable compression entirely.
Valid suffixes are `.pkg` or `.src` (for PKGEXT and SRCEXT respectively)
followed by one of `.tar.gz`, `.tar.bz2`, `.tar.xz`, `.tar.zst`, `.tar.lzo`,
`.tar.lrz`, `.tar.lz4`, `.tar.lz` and `.tar.Z`, or simply `.tar` to
disable compression entirely.
**PACMAN_AUTH=()**::
Specify a command prefix for running pacman as root. If unset, makepkg will
check for the presence of sudo(8) and su(1) in turn, and try the first one
it finds.
+
If present, `%c` will be replaced with the shell-quoted form of the command
to run. Otherwise, the command to run is appended to the auth command.

View file

@ -5,11 +5,12 @@ manpages = [
{ 'name': 'makepkg-template.1' },
{ 'name': 'repo-add.8' },
{ 'name': 'vercmp.8' },
{ 'name': 'testpkg.8' },
{ 'name': 'pacman-key.8' },
{ 'name': 'pacman-db-upgrade.8' },
{ 'name': 'PKGBUILD.5', 'extra_depends' : [ 'PKGBUILD-example.txt' ] },
{ 'name': 'makepkg.conf.5' },
{ 'name': 'pacman.conf.5' },
{ 'name': 'libalpm.3' },
{ 'name': 'BUILDINFO.5' },
{ 'name': 'pacman-conf.8' },
]
@ -26,14 +27,15 @@ asciidoc_conf = join_paths(meson.current_source_dir(), 'asciidoc.conf')
asciidoc_opts = [
'-f', asciidoc_conf,
'-a', 'pacman_version="@0@"'.format(PACKAGE_VERSION),
'-a', 'pacman_date=@0@'.format(run_command('date', '+%Y-%m-%d').stdout().strip()),
'-a', 'srcext=@0@'.format(get_option('src-ext')),
'-a', 'pkgext=@0@'.format(get_option('pkg-ext')),
'-a', 'pkgdatadir=@0@'.format(PKGDATADIR),
'-a', 'keyringdir=@0@'.format(KEYRINGDIR),
'-a', 'localstatedir=@0@'.format(LOCALSTATEDIR),
'-a', 'sysconfdir=@0@'.format(SYSCONFDIR),
'-a', 'datarootdir=@0@'.format(DATAROOTDIR),
'-a', 'rootdir=@0@'.format(ROOTDIR),
'-a', 'libmakepkgdir=@0@'.format(LIBMAKEPKGDIR),
]
html_targets = []
@ -136,6 +138,7 @@ meson.add_install_script(MESON_MAKE_SYMLINK,
doxygen = find_program('doxygen', required : get_option('doxygen'))
if doxygen.found() and not get_option('doxygen').disabled()
doxyconf = configuration_data()
doxyconf.set('INPUT_DIRECTORY', meson.current_source_dir())
doxyconf.set('OUTPUT_DIRECTORY', meson.current_build_dir())
doxyfile = configure_file(
input : 'Doxyfile.in',

View file

@ -34,7 +34,7 @@ Options
*-R, \--rootdir* <path>::
Specify an alternate installation root (default is `/`).
*-r, \--repo* <remote>::
*-r, \--repo* <repository>::
Query options for a specific repository.
*-v, \--verbose*::

View file

@ -0,0 +1,36 @@
pacman-db-upgrade(8)
====================
Name
----
pacman-db-upgrade - upgrade the local pacman database to a newer format
Synopsis
--------
'pacman-db-upgrade' [options]
Description
-----------
'pacman-db-upgrade' is a script that upgrades the local database used
by linkman:pacman[8] to a newer format.
Options
--------------
*-h, \--help*::
Show the built-in help message and exit.
*-V, \--version*::
Show version information and exit.
*-d, \--dbpath* <path>::
Set an alternate database location.
*-r, \--root* <path>::
Set an alternate installation root.
*\--config* <path>::
Set an alternate configuration file.
*\--nocolor*::
Remove color from output.
See Also
--------
linkman:pacman[8]
include::footer.asciidoc[]

View file

@ -86,7 +86,7 @@ Operations
*\--populate*::
Reload the default keys from the (optionally provided) keyrings in
+{pkgdatadir}/keyrings+. For more information, see
+{keyringdir}+. For more information, see
<<PK,Providing a Keyring for Import>> below.
*-u, \--updatedb*::
@ -129,7 +129,7 @@ A distribution or other repository provided may want to provide a set of
PGP keys used in the signing of its packages and repository databases that can
be readily imported into the pacman keyring. This is achieved by providing a
PGP keyring file `foo.gpg` that contains the keys for the foo keyring in the
directory +{pkgdatadir}/keyrings+.
directory +{keyringdir}+.
Optionally, the file `foo-trusted` can be provided containing a list of trusted
key IDs for that keyring. This is a file in a format compatible with 'gpg

View file

@ -151,7 +151,8 @@ Options
+{localstatedir}/cache/pacman/pkg+). Multiple cache directories can be
specified, and they are tried in the order they are passed to pacman.
*NOTE*: This is an absolute path, and the root path is not automatically
prepended.
prepended. If DownloadUser is set in linkman:pacman.conf[5], then the
specified user must have permission to access the cache directory.
*\--color* <when>::
Specify when to enable coloring. Valid options are 'always', 'never', or
@ -195,12 +196,15 @@ Options
Disable defaults for low speed limit and timeout on downloads. Use this
if you have issues downloading files with proxy and/or security gateway.
*\--sysroot* <dir>::
Specify an alternative system root. Pacman will chroot and chdir into the
system root prior to running. This allows mounted guest systems to be
properly operated on. Any other paths given will be interpreted as relative
to the system root. Requires root privileges.
*\--sysroot* <dir>:: Specify an alternative system root. This path will be
prepended to all other configuration directories and any repository servers
beginning with `file://`. Any paths or URLs passed as targets will not be
modified. This allows mounted guest systems to be properly operated on.
*\--disable-sandbox*::
Disable the default sandbox applied to the process downloading files on Linux
systems. Useful if experiencing landlock related failures while downloading
files when running a Linux kernel that does not support this feature.
Transaction Options (apply to '-S', '-R' and '-U')
--------------------------------------------------
@ -212,7 +216,7 @@ Transaction Options (apply to '-S', '-R' and '-U')
*\--assume-installed* <package=version>::
Add a virtual package "package" with version "version" to the transaction
to satisfy dependencies. This allows to disable specific dependency checks
to satisfy dependencies. This allows disabling the specific dependency checks
without affecting all dependency checks. To disable all dependency
checking, see the '\--nodeps' option.
@ -235,12 +239,22 @@ Transaction Options (apply to '-S', '-R' and '-U')
*\--print-format* <format>::
Specify a printf-like format to control the output of the '\--print'
operation. The possible attributes are: "%n" for pkgname, "%v" for pkgver,
"%l" for location, "%r" for repository, and "%s" for size. Implies '\--print'.
operation. The possible attributes are: "%a" for arch, "%b" for
builddate, "%d" for description, "%e" for pkgbase, "%f" for filename,
"%g" for base64 encoded PGP signature, "%h" for sha256sum, "%m" for
md5sum, "%n" for pkgname, "%p" for packager, "%v" for pkgver, "%l" for
location, "%r" for repository, "%s" for size, "%C" for checkdepends,
"%D" for depends, "%G" for groups, "%H" for conflicts, "%L" for
licenses, "%M" for makedepends, "%O" for optional depends, "%P" for
provides and "%R" for replaces.
Implies '\--print'.
Upgrade Options (apply to '-S' and '-U')[[UO]]
----------------------------------------------
*-w, \--downloadonly*::
Retrieve all packages from the server, but do not install/upgrade anything.
*\--asdeps*::
Install packages non-explicitly; in other words, fake their install reason
to be installed as a dependency. This is useful for makepkg and other
@ -445,15 +459,12 @@ can be useful when the user switches from a testing repository to a stable one.
Additional targets can also be specified manually, so that '-Su foo' will do a
system upgrade and install/upgrade the "foo" package in the same operation.
*-w, \--downloadonly*::
Retrieve all packages from the server, but do not install/upgrade anything.
*-y, \--refresh*::
Download a fresh copy of the master package database from the server(s)
defined in linkman:pacman.conf[5]. This should typically be used each time
you use '\--sysupgrade' or '-u'. Passing two '\--refresh' or '-y' flags
will force a refresh of all package databases, even if they appear to be
up-to-date.
Download a fresh copy of the master package databases '(repo.db)' from the
server(s) defined in linkman:pacman.conf[5]. This should typically be used
each time you use '\--sysupgrade' or '-u'. Passing two '\--refresh' or '-y'
flags will force a refresh of all package databases, even if they appear to
be up-to-date.
Database Options (apply to '-D')[[QO]]
@ -482,8 +493,8 @@ Database Options (apply to '-D')[[QO]]
File Options (apply to '-F')[[FO]]
----------------------------------
*-y, --refresh*::
Download fresh package databases from the server. Use twice to force a
refresh even if databases are up to date.
Download fresh package file databases '(repo.files)' from the server.
Use twice to force a refresh even if databases are up to date.
*-l, \--list*::
List the files owned by the queried package.

View file

@ -113,15 +113,15 @@ Options
general configuration options. Wildcards in the specified paths will get
expanded based on linkman:glob[7] rules.
*Architecture =* auto | i686 | x86_64 | ...::
If set, pacman will only allow installation of packages of the given
architecture (e.g. 'i686', 'x86_64', etc). The special value 'auto' will
*Architecture =* auto &| i686 &| x86_64 | ...::
If set, pacman will only allow installation of packages with the given
architectures (e.g. 'i686', 'x86_64', etc). The special value 'auto' will
use the system architecture, provided via ``uname -m''. If unset, no
architecture checks are made. *NOTE*: Packages with the special
architecture 'any' can always be installed, as they are meant to be
architecture independent.
*XferCommand =* /path/to/command %u::
*XferCommand =* /path/to/command %u [%o]::
If set, an external program will be used to download all remote files.
All instances of `%u` will be replaced with the download URL. If present,
instances of `%o` will be replaced with the local filename, plus a
@ -190,13 +190,6 @@ Options
Disables progress bars. This is useful for terminals which do
not support escape characters.
*TotalDownload*::
When downloading, display the amount downloaded, download rate, ETA,
and completed percentage of the entire download list rather
than the percent of each individual download target. The progress
bar is still based solely on the current file download.
This option won't work if XferCommand is used.
*CheckSpace*::
Performs an approximate check for adequate available disk space before
installing packages.
@ -209,11 +202,19 @@ Options
Disable defaults for low speed limit and timeout on downloads. Use this
if you have issues downloading files with proxy and/or security gateway.
*ParallelDownloads*::
*ParallelDownloads =* ...::
Specifies number of concurrent download streams. The value needs to be a
positive integer. If this config option is not set then only one download
stream is used (i.e. downloads happen sequentially).
*DownloadUser =* username::
Specifies the user to switch to for downloading files. If this config
option is not set then the downloads are done as the user running pacman.
*DisableSandbox*::
Disable the default sandbox applied to the process downloading files on Linux
systems. Useful if experiencing landlock related failures while downloading
files when running a Linux kernel that does not support this feature.
Repository Sections
-------------------
@ -234,7 +235,7 @@ contain a file that lists the servers for that repository.
# use this server first
Server = ftp://ftp.archlinux.org/$repo/os/$arch
# next use servers as defined in the mirrorlist below
Include = {sysconfdir}/pacman.d/mirrorlist
Include = /etc/pacman.d/mirrorlist
--------
The order of repositories in the configuration files matters; repositories
@ -247,6 +248,12 @@ number.
general configuration options. Wildcards in the specified paths will get
expanded based on linkman:glob[7] rules.
*CacheServer =* url::
A full URL to a location where the packages, and signatures (if
available) for this repository can be found. Cache servers will be tried
before any non-cache servers, will not be removed from the server pool for
404 download errors, and will not be used for database files.
*Server =* url::
A full URL to a location where the database, packages, and signatures (if
available) for this repository can be found.
@ -254,8 +261,8 @@ number.
During parsing, pacman will define the `$repo` variable to the name of the
current section. This is often utilized in files specified using the 'Include'
directive so all repositories can use the same mirrorfile. pacman also defines
the `$arch` variable to the value of `Architecture`, so the same mirrorfile can
even be used for different architectures.
the `$arch` variable to the first (or only) value of the `Architecture` option,
so the same mirrorfile can even be used for different architectures.
*SigLevel =* ...::
Set the signature verification level for this repository. For more

View file

@ -29,9 +29,10 @@ specified on the command line. Multiple packages to remove can be specified
on the command line.
A package database is a tar file, optionally compressed. Valid extensions are
``.db'' followed by an archive extension of ``.tar'', ``.tar.gz'', ``.tar.bz2'',
``.tar.xz'', or ``.tar.Z''. The file does not need to exist, but all parent
directories must exist.
``.db'' followed by an archive extension of ``.tar'', ``.tar.bz2'',
``.tar.gz'', ``.tar.lrz'', ``.tar.lz'', ``.tar.lz4'', ``.tar.lzo'',
``.tar.xz'', ``.tar.zst'' or ``.tar.Z''. The file does not need to exist, but
all parent directories must exist.
Common Options
@ -42,13 +43,13 @@ Common Options
*-s, \--sign*::
Generate a PGP signature file using GnuPG. This will execute `gpg
--detach-sign --use-agent` on the generated database to generate a detached
--detach-sign` on the generated database to generate a detached
signature file, using the GPG agent if it is available. The signature file
will be the entire filename of the database with a ``.sig'' extension.
*-k, \--key* <key>::
Specify a key to use when signing packages. Can also be specified using
the GPGKEY environmental variable. If not specified in either location, the
the GPGKEY environment variable. If not specified in either location, the
default key from the keyring will be used.
*-v, \--verify*::
@ -59,6 +60,14 @@ Common Options
*\--nocolor*::
Remove color from 'repo-add' and 'repo-remove' output.
*-R, \--remove*::
Remove old package files from the disk when updating or removing their
entry in the database.
*-w, \--wait-for-lock*::
Wait for the lock file to be acquired. If unset, command will fail with
exit code 2 if acquiring the lock fails. If set, it will retry to acquire
lock until success.
repo-add Options
----------------
@ -66,10 +75,8 @@ repo-add Options
Only add packages that are not already in the database. Warnings will be
printed upon detection of existing packages, but they will not be re-added.
*-R, \--remove*::
Remove old package files from the disk when updating their entry in the
database.
*\--include-sigs*::
Include package PGP signatures in the repository database (if available)
Example
-------

View file

@ -11,16 +11,31 @@ NOTE: Some of this is paraphrased from the kernel documentation's
Getting the most recent source
------------------------------
Patches need to be submitted in GIT format and are best if they are against the
Patches need to be submitted in Git format and are best if they are against the
latest version of the code. There are several helpful tutorials for getting
started with GIT if you have not worked with it before.
started with Git if you have not worked with it before.
* https://www.kernel.org/pub/software/scm/git/docs/gittutorial.html
* https://wiki.archlinux.org/index.php/Super_Quick_Git_Guide
The pacman code can be fetched using the following command:
git clone git://git.archlinux.org/pacman.git
git clone https://gitlab.archlinux.org/pacman/pacman.git
Before making large changes
---------------------------
--
* Discuss your idea
There is nothing worse that spending time making a change only for it to be
rejected immediately. Ensure ideas are discussed beforehand to avoid
disappointment. Appropriate locations for discussion are the issue tracker
on gitlab, or the pacman-dev mailing list. Transient discussion channels
such as IRC are not appropriate.
--
Creating your patch
@ -43,36 +58,18 @@ It helps if you describe the overview and goals of the patch in the git commit
log. This allows others to see what you intended so as to compare it to what
was actually done, and allows better feedback.
* Use `git format-patch` to create patches.
Your commit message will be shown above the patch by default when you will use
`git format-patch`, including the signoff line. Sets of multiple patches that
need extra explanation beyond the commit messages may include additional notes
in a cover letter. Individual patches may include additional notes between the
"---" following the commit message and the beginning of the diff.
--
Submitting your patch
---------------------
--
* Send the patch to the pacman-dev mailing list
* Submit patches with a gitlab merge request
The mailing list is the primary queue for review and acceptance. Here you
will get feedback, and let the reviewers know the details of your patch.
The pacman gitlab instance is the primary queue for review and acceptance.
Here you will get feedback, and let the reviewers know the details of your
patch.
* No MIME, no links, no compression, no attachments. Just plain text.
Patches should be contained in the actual body of the email. There are many
reasons for this. First, it makes them easier to read with any mail reader,
it allows easier review "at a glance", and most importantly, it allows people
to comment on exact lines of the patch in reply emails.
`git send-email` allows you to send Git-formatted patches in plain text easily
and is the preferred method for submission to the mailing list. Mail clients,
including Gmail's web interface, have a tendency to break patches by wrapping
lines and/or adjusting whitespace and should be avoided.
--
@ -95,7 +92,6 @@ When you do get feedback, it usually merits a response, whether this be a
resubmission of the patch with corrections or a follow-up email asking for
clarifications. When neither of these occurs, don't expect your patch to get
further review. The all-volunteer staff don't have time to fix up patches that
aren't their own. When resubmitting patches, update the subject line to reflect
the version number ('[PATCHv2]'), and send it as a reply to the original thread.
aren't their own.
--

20
doc/testpkg.8.asciidoc Normal file
View file

@ -0,0 +1,20 @@
testpkg(8)
==========
Name
----
testpkg - test a pacman package for validity
Synopsis
--------
'testpkg' <package file>
Description
-----------
'testpkg' is a script used to make sure that a pacman package is valid.
See Also
--------
linkman:pacman[8]
include::footer.asciidoc[]

View file

@ -4,10 +4,10 @@ Pacman - Translating
This document is here to guide you in helping translate pacman messages,
libalpm messages, and the manual pages for the entire pacman package.
We are currently using https://www.transifex.com/[Transifex] as the translation
We are currently using https://app.transifex.com/[Transifex] as the translation
platform for pacman and libalpm. You will need to sign up for an account there
and then register with a translation team on the
https://www.transifex.com/projects/p/archlinux-pacman/[pacman project page].
https://explore.transifex.com/toofishes/archlinux-pacman/[pacman project page].
NOTE: This may be old information due to our switch to Transifex, but the
gettext website is a very useful guide to read before embarking on translation
@ -31,7 +31,7 @@ either be hand-edited, or modified with a tool such as poedit, gtranslator or
kbabel. Using a translation tool tends to make the job easier.
Please read up on Transifex usage using the
https://docs.transifex.com/[Transifex Help] if you are not familiar.
https://help.transifex.com/[Transifex Help] if you are not familiar.
Transifex provides a command-line client to help with translations. Here is
an example set of commands if you have a source code checkout and are not
@ -55,20 +55,20 @@ Pre-release Updates
~~~~~~~~~~~~~~~~~~~
A week or two before each release, the codebase will go into a string freeze
and an email will be sent to the mailto:pacman-dev@archlinux.org[pacman-dev]
mailing list asking for translations. This email will have a prefix of
*[translation]* for anyone looking to set up an email filter.
and an email will be sent to the mailto:pacman-dev@lists.archlinux.org[pacman-dev]
mailing list asking for translations. An announcement in Transifex is also made,
which reaches everyone that is member of the translation team.
At this time, the latest `.po` language files will be made available at the
Transifex project page. Each language will have two files available (back-end
and front-end). Translators interested in helping are encouraged to use the
Transifex project page. Each language will have three files available (libalpm,
pacman and pacman-scripts). Translators interested in helping are encouraged to use the
features of Transifex to let others know they are currently translating their
language.
Once a translator has completed the translation (*OR* realizes they do not have
Once a translator has completed the translation offline (*OR* realizes they do not have
time to finish), please upload your progress back to the Transifex site.
NOTE: Please upload your translations as soon as possible- this will give other
NOTE: Please upload your translations as soon as possible - this will give other
speakers of your language time to review your translations and update them as
necessary.
@ -78,23 +78,27 @@ Incremental Updates
If you have more advanced needs you will have to get a copy of the pacman
repository.
git clone git://git.archlinux.org/pacman.git pacman
git clone https://gitlab.archlinux.org/pacman/pacman.git
Next, you will need to run `./autogen.sh` and `./configure` in the base
directory to generate the correct Makefiles. At this point, all necessary
make targets will be generated and we can begin updating the translation
files.
Next, you will need to configure the build environment. From the base directory,
run:
We need to first update the main message catalog file. Navigate into either the
`lib/libalpm/po` or `po` directory depending on which translation you wish to
work on first, and execute the following command. If you are working in the
`po/` tree, replace 'libalpm.pot' with 'pacman.pot':
meson setup . build
make libalpm.pot-update
If any required dependencies are missing, please install. After that,
update the template translation (.pot) files to the latest state of
the source code by running:
meson compile -C build pacman-scripts-pot pacman-pot libalpm-pot
We need to first update the main message catalog file. Navigate into either
the `lib/libalpm/po`, `scripts/po` or `src/pacman/po` directory depending
on which translation you wish to work on first, and execute the following
command to update your specific language's translation file
(replace `lang_code` with your language code e.g. 'pt_BR', and `pot_file`
with `libalpm.pot`, `pacman.pot` or `pacman-scripts.pot`):
Next, update your specific language's translation file:
make <po file>-update
msgmerge --update --previous <lang_code>.po <pot_filename>.pot
At this point, you can do the translation. To submit your changes, either email
the new `.po` file to the mailing-list with *[translation]* in the subject, or
@ -103,7 +107,7 @@ submit a Git-formatted patch (please do not include any `.pot` file changes).
As a shortcut, all translation files (including `.pot` files) can be updated
with the following command:
make update-po
./build-aux/update-po
Adding a New Language
~~~~~~~~~~~~~~~~~~~~~
@ -112,10 +116,10 @@ Making a new language is not too hard, but be sure to follow all the steps.
You will have to do the following steps in both the `lib/libalpm/po/` and `po/`
directories, substituting where appropriate. First, edit the `LINGUAS` file and
add your new language code at the bottom. Next, run the following command,
substituting 'libalpm.pot' or 'pacman.pot' for potfile depending on which
substituting `libalpm.pot` or `pacman.pot` for potfile depending on which
directory you are currently working in:
msginit -l <lang code> -o <lang code>.po -i <potfile>
msginit -l <lang_code> -o <lang_code>.po -i <potfile>
You can then also add your language code to the end of the `LINGUAS` file
located in each po directory.
@ -137,11 +141,13 @@ following two translations are equivalent:
msgstr ""
"This is a test translation"
If you want to test the translation (for example, the front-end one):
If you want to test the translation (copy the .po file you want to test,
you may ignore the rest), replacing `<lang_code>` accordingly:
rm *.gmo stamp-po
make
cp <lang code>.gmo /usr/share/locale/<lang code>/LC_MESSAGES/pacman.mo
meson compile -C build pacman-scripts-gmo pacman-gmo libalpm-gmo
cp ./build/lib/libalpm/po/<lang_code>/LC_MESSAGES/libalpm.mo /usr/share/locale/<lang_code>/LC_MESSAGES/libalpm.mo
cp ./build/scripts/po/<lang_code>/LC_MESSAGES/pacman-scripts.mo /usr/share/locale/<lang_code>/LC_MESSAGES/pacman-scripts.mo
cp ./build/src/pacman/po/<lang_code>/LC_MESSAGES/pacman.mo /usr/share/locale/<lang_code>/LC_MESSAGES/pacman.mo
Translating Manpages
@ -150,4 +156,4 @@ There are currently no efforts underway to include translated manual pages in
the pacman codebase. However, this is not to say translations are unwelcome. If
someone has experience with i18n man pages and how to best include them with our
source, please contact the pacman-dev mailing list at
mailto:pacman-dev@archlinux.org[].
mailto:pacman-dev@lists.archlinux.org[].

View file

@ -0,0 +1,18 @@
#!/hint/bash
#
# @sysconfdir@/makepkg.conf.d/fortran.conf
#
#########################################################################
# FORTRAN LANGUAGE SUPPORT
#########################################################################
# Flags used for the Fortran compiler, similar in spirit to CFLAGS. Read
# linkman:gfortran[1] for more details on the available flags.
#FFLAGS="-O2 -pipe"
#FCFLAGS="$FFLAGS"
# Additional compiler flags appended to `FFLAGS` and `FCFLAGS` for use in debugging. Usually
# this would include: ``-g''. Read linkman:gfortran[1] for more details on the wide
# variety of compiler flags available.
#DEBUG_FFLAGS="-g"

View file

@ -0,0 +1,17 @@
#!/hint/bash
#
# @sysconfdir@/makepkg.conf.d/rust.conf
#
#########################################################################
# RUST LANGUAGE SUPPORT
#########################################################################
# Flags used for the Rust compiler, similar in spirit to CFLAGS. Read
# linkman:rustc[1] for more details on the available flags.
#RUSTFLAGS="-C opt-level=3"
# Additional compiler flags appended to `RUSTFLAGS` for use in debugging.
# Usually this would include: ``-C debuginfo=2''. Read linkman:rustc[1] for
# more details on the available flags.
#DEBUG_RUSTFLAGS="-C debuginfo=2"

View file

@ -9,10 +9,10 @@
#
#-- The download utilities that makepkg should use to acquire sources
# Format: 'protocol::agent'
DLAGENTS=('file::/usr/bin/curl -gqC - -o %o %u'
'ftp::/usr/bin/curl -gqfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
'http::/usr/bin/curl -gqb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
'https::/usr/bin/curl -gqb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
DLAGENTS=('file::/usr/bin/curl -qgC - -o %o %u'
'ftp::/usr/bin/curl -qgfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
'http::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
'https::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
'rsync::/usr/bin/rsync --no-motd -z %u %o'
'scp::/usr/bin/scp -C %u %o')
@ -23,7 +23,7 @@ DLAGENTS=('file::/usr/bin/curl -gqC - -o %o %u'
#-- The package required by makepkg to download VCS sources
# Format: 'protocol::package'
VCSCLIENTS=('bzr::bzr'
VCSCLIENTS=('bzr::breezy'
'fossil::fossil'
'git::git'
'hg::mercurial'
@ -36,18 +36,19 @@ VCSCLIENTS=('bzr::bzr'
CARCH="@CARCH@"
CHOST="@CHOST@"
#NPROC=2
#-- Compiler and Linker Flags
#CPPFLAGS=""
#CFLAGS="-O2 -pipe"
#CXXFLAGS="-O2 -pipe"
#LDFLAGS=""
#RUSTFLAGS="-C opt-level=2"
#LTOFLAGS="-flto"
#-- Make Flags: change this for DistCC/SMP systems
#MAKEFLAGS="-j2"
#-- Debugging flags
#DEBUG_CFLAGS="-g"
#DEBUG_CXXFLAGS="-g"
#DEBUG_RUSTFLAGS="-C debuginfo=2"
#########################################################################
# BUILD ENVIRONMENT
@ -76,7 +77,8 @@ BUILDENV=(!distcc color !ccache check !sign)
# These are default values for the options=() settings
#########################################################################
#
# Makepkg defaults: OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug)
# Makepkg defaults:
# OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug !lto !autodeps)
# A negated option will do the opposite of the comments below.
#
#-- strip: Strip symbols from binaries/libraries
@ -87,8 +89,10 @@ BUILDENV=(!distcc color !ccache check !sign)
#-- zipman: Compress manual (man and info) pages in MAN_DIRS with gzip
#-- purge: Remove files specified by PURGE_TARGETS
#-- debug: Add debugging flags as specified in DEBUG_* variables
#-- lto: Add compile flags for building with link time optimization
#-- autodeps: Automatically add depends/provides
#
OPTIONS=(strip docs libtool staticlibs emptydirs zipman purge !debug)
OPTIONS=(strip docs libtool staticlibs emptydirs zipman purge !debug !lto !autodeps)
#-- File integrity checks to use. Valid: ck, md5, sha1, sha224, sha256, sha384, sha512, b2
INTEGRITY_CHECK=(ck)
@ -106,6 +110,8 @@ DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)
#-- Directory to store source code in for debug packages
DBGSRCDIR="/usr/src/debug"
#-- Prefix and directories for library autodeps
LIB_DIRS=('lib:usr/lib' 'lib32:usr/lib32')
#########################################################################
# PACKAGE OUTPUT
@ -146,3 +152,10 @@ COMPRESSLZ=(lzip -c -f)
#
PKGEXT='@PKGEXT@'
SRCEXT='@SRCEXT@'
#########################################################################
# OTHER
#########################################################################
#
#-- Command used to run pacman as root, instead of trying sudo and su
PACMAN_AUTH=()

View file

@ -32,10 +32,11 @@ Architecture = auto
#UseSyslog
#Color
#NoProgressBar
#TotalDownload
CheckSpace
#VerbosePkgLists
ParallelDownloads = 5
#DownloadUser = alpm
#DisableSandbox
# PGP signature checking
#SigLevel = Optional
@ -75,4 +76,4 @@ ParallelDownloads = 5
# tips on creating your own repositories.
#[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs
#Server = file:///home/packages

View file

@ -1,7 +1,7 @@
/*
* add.c
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify
@ -119,6 +119,7 @@ static int perform_extraction(alpm_handle_t *handle, struct archive *archive,
ARCHIVE_EXTRACT_PERM |
ARCHIVE_EXTRACT_TIME |
ARCHIVE_EXTRACT_UNLINK |
ARCHIVE_EXTRACT_XATTR |
ARCHIVE_EXTRACT_SECURE_SYMLINKS;
archive_entry_set_pathname(entry, filename);
@ -261,7 +262,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive,
"filesystem: %o package: %o\n"), filename, lsbuf.st_mode & mask,
entrymode & mask);
alpm_logaction(handle, ALPM_CALLER_PREFIX,
"warning: directory permissions differ on %s\n"
"warning: directory permissions differ on %s, "
"filesystem: %o package: %o\n", filename, lsbuf.st_mode & mask,
entrymode & mask);
}
@ -276,7 +277,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive,
"filesystem: %u:%u package: %u:%u\n"), filename,
lsbuf.st_uid, lsbuf.st_gid, entryuid, entrygid);
alpm_logaction(handle, ALPM_CALLER_PREFIX,
"warning: directory ownership differs on %s\n"
"warning: directory ownership differs on %s, "
"filesystem: %u:%u package: %u:%u\n", filename,
lsbuf.st_uid, lsbuf.st_gid, entryuid, entrygid);
}
@ -414,7 +415,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive,
static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
size_t pkg_current, size_t pkg_count)
{
int i, ret = 0, errors = 0;
int ret = 0, errors = 0;
int is_upgrade = 0;
alpm_pkg_t *oldpkg = NULL;
alpm_db_t *db = handle->db_local;
@ -537,7 +538,7 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
/* call PROGRESS once with 0 percent, as we sort-of skip that here */
PROGRESS(handle, progress, newpkg->name, 0, pkg_count, pkg_current);
for(i = 0; archive_read_next_header(archive, &entry) == ARCHIVE_OK; i++) {
while(archive_read_next_header(archive, &entry) == ARCHIVE_OK) {
int percent;
if(newpkg->size != 0) {

View file

@ -1,7 +1,7 @@
/*
* add.h
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify

View file

@ -1,7 +1,7 @@
/*
* alpm.c
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>
@ -25,6 +25,9 @@
#include <curl/curl.h>
#endif
#include <errno.h>
#include <pwd.h>
/* libalpm */
#include "alpm.h"
#include "alpm_list.h"
@ -38,7 +41,8 @@ alpm_handle_t SYMEXPORT *alpm_initialize(const char *root, const char *dbpath,
alpm_errno_t myerr;
const char *lf = "db.lck";
char *hookdir;
size_t lockfilelen;
size_t hookdirlen, lockfilelen;
struct passwd const *pw = NULL;
alpm_handle_t *myhandle = _alpm_handle_new();
if(myhandle == NULL) {
@ -54,8 +58,9 @@ alpm_handle_t SYMEXPORT *alpm_initialize(const char *root, const char *dbpath,
/* to concatenate myhandle->root (ends with a slash) with SYSHOOKDIR (starts
* with a slash) correctly, we skip SYSHOOKDIR[0]; the regular +1 therefore
* disappears from the allocation */
MALLOC(hookdir, strlen(myhandle->root) + strlen(SYSHOOKDIR), goto nomem);
sprintf(hookdir, "%s%s", myhandle->root, &SYSHOOKDIR[1]);
hookdirlen = strlen(myhandle->root) + strlen(SYSHOOKDIR);
MALLOC(hookdir, hookdirlen, goto nomem);
snprintf(hookdir, hookdirlen, "%s%s", myhandle->root, &SYSHOOKDIR[1]);
myhandle->hookdirs = alpm_list_add(NULL, hookdir);
/* set default database extension */
@ -77,6 +82,10 @@ alpm_handle_t SYMEXPORT *alpm_initialize(const char *root, const char *dbpath,
myhandle->parallel_downloads = 1;
/* set default sandboxuser */
ASSERT((pw = getpwuid(0)) != NULL, myerr = errno; goto cleanup);
STRDUP(myhandle->sandboxuser, pw->pw_name, goto nomem);
#ifdef ENABLE_NLS
bindtextdomain("libalpm", LOCALEDIR);
#endif
@ -93,33 +102,16 @@ cleanup:
return NULL;
}
/* check current state and free all resources including storage locks */
int SYMEXPORT alpm_release(alpm_handle_t *myhandle)
{
int ret = 0;
alpm_db_t *db;
CHECK_HANDLE(myhandle, return -1);
/* close local database */
db = myhandle->db_local;
if(db) {
db->ops->unregister(db);
myhandle->db_local = NULL;
}
if(alpm_unregister_all_syncdbs(myhandle) == -1) {
ret = -1;
}
#ifdef HAVE_LIBCURL
curl_multi_cleanup(myhandle->curlm);
curl_global_cleanup();
#endif
ASSERT(myhandle->trans == NULL, RET_ERR(myhandle, ALPM_ERR_TRANS_NOT_NULL, -1));
_alpm_handle_unlock(myhandle);
_alpm_handle_free(myhandle);
return ret;
return 0;
}
const char SYMEXPORT *alpm_version(void)

File diff suppressed because it is too large Load diff

View file

@ -1,7 +1,7 @@
/*
* alpm_list.c
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify
@ -30,25 +30,9 @@
/* check exported library symbols with: nm -C -D <lib> */
#define SYMEXPORT __attribute__((visibility("default")))
#define SYMHIDDEN __attribute__((visibility("internal")))
/**
* @addtogroup alpm_list List Functions
* @brief Functions to manipulate alpm_list_t lists.
*
* These functions are designed to create, destroy, and modify lists of
* type alpm_list_t. This is an internal list type used by libalpm that is
* publicly exposed for use by frontends if desired.
*
* @{ */
/* Allocation */
/**
* @brief Free a list, but not the contained data.
*
* @param list the list to free
*/
void SYMEXPORT alpm_list_free(alpm_list_t *list)
{
alpm_list_t *it = list;
@ -60,12 +44,6 @@ void SYMEXPORT alpm_list_free(alpm_list_t *list)
}
}
/**
* @brief Free the internal data of a list structure.
*
* @param list the list to free
* @param fn a free function for the internal data
*/
void SYMEXPORT alpm_list_free_inner(alpm_list_t *list, alpm_list_fn_free fn)
{
alpm_list_t *it = list;
@ -83,28 +61,12 @@ void SYMEXPORT alpm_list_free_inner(alpm_list_t *list, alpm_list_fn_free fn)
/* Mutators */
/**
* @brief Add a new item to the end of the list.
*
* @param list the list to add to
* @param data the new item to be added to the list
*
* @return the resultant list
*/
alpm_list_t SYMEXPORT *alpm_list_add(alpm_list_t *list, void *data)
{
alpm_list_append(&list, data);
return list;
}
/**
* @brief Add a new item to the end of the list.
*
* @param list the list to add to
* @param data the new item to be added to the list
*
* @return the newly added item
*/
alpm_list_t SYMEXPORT *alpm_list_append(alpm_list_t **list, void *data)
{
alpm_list_t *ptr;
@ -131,14 +93,6 @@ alpm_list_t SYMEXPORT *alpm_list_append(alpm_list_t **list, void *data)
return ptr;
}
/**
* @brief Duplicate and append a string to a list.
*
* @param list the list to append to
* @param data the string to duplicate and append
*
* @return the newly added item
*/
alpm_list_t SYMEXPORT *alpm_list_append_strdup(alpm_list_t **list, const char *data)
{
alpm_list_t *ret;
@ -151,15 +105,6 @@ alpm_list_t SYMEXPORT *alpm_list_append_strdup(alpm_list_t **list, const char *d
}
}
/**
* @brief Add items to a list in sorted order.
*
* @param list the list to add to
* @param data the new item to be added to the list
* @param fn the comparison function to use to determine order
*
* @return the resultant list
*/
alpm_list_t SYMEXPORT *alpm_list_add_sorted(alpm_list_t *list, void *data, alpm_list_fn_cmp fn)
{
if(!fn || !list) {
@ -202,17 +147,6 @@ alpm_list_t SYMEXPORT *alpm_list_add_sorted(alpm_list_t *list, void *data, alpm_
}
}
/**
* @brief Join two lists.
* The two lists must be independent. Do not free the original lists after
* calling this function, as this is not a copy operation. The list pointers
* passed in should be considered invalid after calling this function.
*
* @param first the first list
* @param second the second list
*
* @return the resultant joined list
*/
alpm_list_t SYMEXPORT *alpm_list_join(alpm_list_t *first, alpm_list_t *second)
{
alpm_list_t *tmp;
@ -235,15 +169,6 @@ alpm_list_t SYMEXPORT *alpm_list_join(alpm_list_t *first, alpm_list_t *second)
return first;
}
/**
* @brief Merge the two sorted sublists into one sorted list.
*
* @param left the first list
* @param right the second list
* @param fn comparison function for determining merge order
*
* @return the resultant list
*/
alpm_list_t SYMEXPORT *alpm_list_mmerge(alpm_list_t *left, alpm_list_t *right,
alpm_list_fn_cmp fn)
{
@ -305,15 +230,6 @@ alpm_list_t SYMEXPORT *alpm_list_mmerge(alpm_list_t *left, alpm_list_t *right,
return newlist;
}
/**
* @brief Sort a list of size `n` using mergesort algorithm.
*
* @param list the list to sort
* @param n the size of the list
* @param fn the comparison function for determining order
*
* @return the resultant list
*/
alpm_list_t SYMEXPORT *alpm_list_msort(alpm_list_t *list, size_t n,
alpm_list_fn_cmp fn)
{
@ -339,15 +255,6 @@ alpm_list_t SYMEXPORT *alpm_list_msort(alpm_list_t *list, size_t n,
return list;
}
/**
* @brief Remove an item from the list.
* item is not freed; this is the responsibility of the caller.
*
* @param haystack the list to remove the item from
* @param item the item to remove from the list
*
* @return the resultant list
*/
alpm_list_t SYMEXPORT *alpm_list_remove_item(alpm_list_t *haystack,
alpm_list_t *item)
{
@ -385,17 +292,6 @@ alpm_list_t SYMEXPORT *alpm_list_remove_item(alpm_list_t *haystack,
return haystack;
}
/**
* @brief Remove an item from the list.
*
* @param haystack the list to remove the item from
* @param needle the data member of the item we're removing
* @param fn the comparison function for searching
* @param data output parameter containing data of the removed item
*
* @return the resultant list
*/
alpm_list_t SYMEXPORT *alpm_list_remove(alpm_list_t *haystack,
const void *needle, alpm_list_fn_cmp fn, void **data)
{
@ -430,15 +326,6 @@ alpm_list_t SYMEXPORT *alpm_list_remove(alpm_list_t *haystack,
return haystack;
}
/**
* @brief Remove a string from a list.
*
* @param haystack the list to remove the item from
* @param needle the data member of the item we're removing
* @param data output parameter containing data of the removed item
*
* @return the resultant list
*/
alpm_list_t SYMEXPORT *alpm_list_remove_str(alpm_list_t *haystack,
const char *needle, char **data)
{
@ -446,15 +333,6 @@ alpm_list_t SYMEXPORT *alpm_list_remove_str(alpm_list_t *haystack,
(alpm_list_fn_cmp)strcmp, (void **)data);
}
/**
* @brief Create a new list without any duplicates.
*
* This does NOT copy data members.
*
* @param list the list to copy
*
* @return a new list containing non-duplicate items
*/
alpm_list_t SYMEXPORT *alpm_list_remove_dupes(const alpm_list_t *list)
{
const alpm_list_t *lp = list;
@ -471,13 +349,6 @@ alpm_list_t SYMEXPORT *alpm_list_remove_dupes(const alpm_list_t *list)
return newlist;
}
/**
* @brief Copy a string list, including data.
*
* @param list the list to copy
*
* @return a copy of the original list
*/
alpm_list_t SYMEXPORT *alpm_list_strdup(const alpm_list_t *list)
{
const alpm_list_t *lp = list;
@ -492,13 +363,6 @@ alpm_list_t SYMEXPORT *alpm_list_strdup(const alpm_list_t *list)
return newlist;
}
/**
* @brief Copy a list, without copying data.
*
* @param list the list to copy
*
* @return a copy of the original list
*/
alpm_list_t SYMEXPORT *alpm_list_copy(const alpm_list_t *list)
{
const alpm_list_t *lp = list;
@ -513,16 +377,6 @@ alpm_list_t SYMEXPORT *alpm_list_copy(const alpm_list_t *list)
return newlist;
}
/**
* @brief Copy a list and copy the data.
* Note that the data elements to be copied should not contain pointers
* and should also be of constant size.
*
* @param list the list to copy
* @param size the size of each data element
*
* @return a copy of the original list, data copied as well
*/
alpm_list_t SYMEXPORT *alpm_list_copy_data(const alpm_list_t *list,
size_t size)
{
@ -546,13 +400,6 @@ alpm_list_t SYMEXPORT *alpm_list_copy_data(const alpm_list_t *list,
return newlist;
}
/**
* @brief Create a new list in reverse order.
*
* @param list the list to copy
*
* @return a new list in reverse order
*/
alpm_list_t SYMEXPORT *alpm_list_reverse(alpm_list_t *list)
{
const alpm_list_t *lp;
@ -570,6 +417,7 @@ alpm_list_t SYMEXPORT *alpm_list_reverse(alpm_list_t *list)
while(lp) {
if(alpm_list_append(&newlist, lp->data) == NULL) {
alpm_list_free(newlist);
list->prev = backup;
return NULL;
}
lp = lp->prev;
@ -580,14 +428,6 @@ alpm_list_t SYMEXPORT *alpm_list_reverse(alpm_list_t *list)
/* Accessors */
/**
* @brief Return nth element from list (starting from 0).
*
* @param list the list
* @param n the index of the item to find (n < alpm_list_count(list) IS needed)
*
* @return an alpm_list_t node for index `n`
*/
alpm_list_t SYMEXPORT *alpm_list_nth(const alpm_list_t *list, size_t n)
{
const alpm_list_t *i = list;
@ -597,13 +437,6 @@ alpm_list_t SYMEXPORT *alpm_list_nth(const alpm_list_t *list, size_t n)
return (alpm_list_t *)i;
}
/**
* @brief Get the next element of a list.
*
* @param node the list node
*
* @return the next element, or NULL when no more elements exist
*/
inline alpm_list_t SYMEXPORT *alpm_list_next(const alpm_list_t *node)
{
if(node) {
@ -613,13 +446,6 @@ inline alpm_list_t SYMEXPORT *alpm_list_next(const alpm_list_t *node)
}
}
/**
* @brief Get the previous element of a list.
*
* @param list the list head
*
* @return the previous element, or NULL when no previous element exist
*/
inline alpm_list_t SYMEXPORT *alpm_list_previous(const alpm_list_t *list)
{
if(list && list->prev->next) {
@ -629,13 +455,6 @@ inline alpm_list_t SYMEXPORT *alpm_list_previous(const alpm_list_t *list)
}
}
/**
* @brief Get the last item in the list.
*
* @param list the list
*
* @return the last element in the list
*/
alpm_list_t SYMEXPORT *alpm_list_last(const alpm_list_t *list)
{
if(list) {
@ -647,13 +466,6 @@ alpm_list_t SYMEXPORT *alpm_list_last(const alpm_list_t *list)
/* Misc */
/**
* @brief Get the number of items in a list.
*
* @param list the list
*
* @return the number of list items
*/
size_t SYMEXPORT alpm_list_count(const alpm_list_t *list)
{
size_t i = 0;
@ -665,15 +477,6 @@ size_t SYMEXPORT alpm_list_count(const alpm_list_t *list)
return i;
}
/**
* @brief Find an item in a list.
*
* @param needle the item to search
* @param haystack the list
* @param fn the comparison function for searching (!= NULL)
*
* @return `needle` if found, NULL otherwise
*/
void SYMEXPORT *alpm_list_find(const alpm_list_t *haystack, const void *needle,
alpm_list_fn_cmp fn)
{
@ -693,30 +496,12 @@ static int ptr_cmp(const void *p, const void *q)
return (p != q);
}
/**
* @brief Find an item in a list.
*
* Search for the item whose data matches that of the `needle`.
*
* @param needle the data to search for (== comparison)
* @param haystack the list
*
* @return `needle` if found, NULL otherwise
*/
void SYMEXPORT *alpm_list_find_ptr(const alpm_list_t *haystack,
const void *needle)
{
return alpm_list_find(haystack, needle, ptr_cmp);
}
/**
* @brief Find a string in a list.
*
* @param needle the string to search for
* @param haystack the list
*
* @return `needle` if found, NULL otherwise
*/
char SYMEXPORT *alpm_list_find_str(const alpm_list_t *haystack,
const char *needle)
{
@ -724,20 +509,63 @@ char SYMEXPORT *alpm_list_find_str(const alpm_list_t *haystack,
(alpm_list_fn_cmp)strcmp);
}
/**
* @brief Find the differences between list `left` and list `right`
*
* The two lists must be sorted. Items only in list `left` are added to the
* `onlyleft` list. Items only in list `right` are added to the `onlyright`
* list.
*
* @param left the first list
* @param right the second list
* @param fn the comparison function
* @param onlyleft pointer to the first result list
* @param onlyright pointer to the second result list
*
*/
int SYMEXPORT alpm_list_cmp_unsorted(const alpm_list_t *left,
const alpm_list_t *right, alpm_list_fn_cmp fn)
{
const alpm_list_t *l = left;
const alpm_list_t *r = right;
int *matched;
/* short circuiting length comparison */
while(l && r) {
l = l->next;
r = r->next;
}
if(l || r) {
return 0;
}
/* faster comparison for if the lists happen to be in the same order */
while(left && fn(left->data, right->data) == 0) {
left = left->next;
right = right->next;
}
if(!left) {
return 1;
}
matched = calloc(alpm_list_count(right), sizeof(int));
if(matched == NULL) {
return -1;
}
for(l = left; l; l = l->next) {
int found = 0;
int n = 0;
for(r = right; r; r = r->next, n++) {
/* make sure we don't match the same value twice */
if(matched[n]) {
continue;
}
if(fn(l->data, r->data) == 0) {
found = 1;
matched[n] = 1;
break;
}
}
if(!found) {
free(matched);
return 0;
}
}
free(matched);
return 1;
}
void SYMEXPORT alpm_list_diff_sorted(const alpm_list_t *left,
const alpm_list_t *right, alpm_list_fn_cmp fn,
alpm_list_t **onlyleft, alpm_list_t **onlyright)
@ -782,15 +610,6 @@ void SYMEXPORT alpm_list_diff_sorted(const alpm_list_t *left,
}
/**
* @brief Find the items in list `lhs` that are not present in list `rhs`.
*
* @param lhs the first list
* @param rhs the second list
* @param fn the comparison function
*
* @return a list containing all items in `lhs` not present in `rhs`
*/
alpm_list_t SYMEXPORT *alpm_list_diff(const alpm_list_t *lhs,
const alpm_list_t *rhs, alpm_list_fn_cmp fn)
{
@ -809,17 +628,6 @@ alpm_list_t SYMEXPORT *alpm_list_diff(const alpm_list_t *lhs,
return ret;
}
/**
* @brief Copy a list and data into a standard C array of fixed length.
* Note that the data elements are shallow copied so any contained pointers
* will point to the original data.
*
* @param list the list to copy
* @param n the size of the list
* @param size the size of each data element
*
* @return an array version of the original list, data copied as well
*/
void SYMEXPORT *alpm_list_to_array(const alpm_list_t *list, size_t n,
size_t size)
{
@ -840,5 +648,3 @@ void SYMEXPORT *alpm_list_to_array(const alpm_list_t *list, size_t n,
}
return array;
}
/** @} */

View file

@ -1,7 +1,7 @@
/*
* alpm_list.h
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify
@ -17,6 +17,8 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef ALPM_LIST_H
#define ALPM_LIST_H
@ -31,63 +33,362 @@ extern "C" {
#endif
/**
* @brief Linked list type used by libalpm.
* @ingroup libalpm
* @addtogroup libalpm_list libalpm_list(3)
* @brief Functions to manipulate alpm_list_t lists.
*
* These functions are designed to create, destroy, and modify lists of
* type alpm_list_t. This is an internal list type used by libalpm that is
* publicly exposed for use by frontends if desired.
*
* It is exposed so front ends can use it to prevent the need to reimplement
* lists of their own; however, it is not required that the front end uses
* it.
* @{
*/
typedef struct __alpm_list_t {
/** A doubly linked list */
typedef struct _alpm_list_t {
/** data held by the list node */
void *data;
/** pointer to the previous node */
struct __alpm_list_t *prev;
struct _alpm_list_t *prev;
/** pointer to the next node */
struct __alpm_list_t *next;
struct _alpm_list_t *next;
} alpm_list_t;
/** Frees a list and its contents */
#define FREELIST(p) do { alpm_list_free_inner(p, free); alpm_list_free(p); p = NULL; } while(0)
typedef void (*alpm_list_fn_free)(void *); /* item deallocation callback */
typedef int (*alpm_list_fn_cmp)(const void *, const void *); /* item comparison callback */
/** item deallocation callback.
* @param item the item to free
*/
typedef void (*alpm_list_fn_free)(void * item);
/** item comparison callback */
typedef int (*alpm_list_fn_cmp)(const void *, const void *);
/* allocation */
/** Free a list, but not the contained data.
*
* @param list the list to free
*/
void alpm_list_free(alpm_list_t *list);
/** Free the internal data of a list structure but not the list itself.
*
* @param list the list to free
* @param fn a free function for the internal data
*/
void alpm_list_free_inner(alpm_list_t *list, alpm_list_fn_free fn);
/* item mutators */
/** Add a new item to the end of the list.
*
* @param list the list to add to
* @param data the new item to be added to the list
*
* @return the resultant list
*/
alpm_list_t *alpm_list_add(alpm_list_t *list, void *data);
/**
* @brief Add a new item to the end of the list.
*
* @param list the list to add to
* @param data the new item to be added to the list
*
* @return the newly added item
*/
alpm_list_t *alpm_list_append(alpm_list_t **list, void *data);
/**
* @brief Duplicate and append a string to a list.
*
* @param list the list to append to
* @param data the string to duplicate and append
*
* @return the newly added item
*/
alpm_list_t *alpm_list_append_strdup(alpm_list_t **list, const char *data);
/**
* @brief Add items to a list in sorted order.
*
* @param list the list to add to
* @param data the new item to be added to the list
* @param fn the comparison function to use to determine order
*
* @return the resultant list
*/
alpm_list_t *alpm_list_add_sorted(alpm_list_t *list, void *data, alpm_list_fn_cmp fn);
/**
* @brief Join two lists.
* The two lists must be independent. Do not free the original lists after
* calling this function, as this is not a copy operation. The list pointers
* passed in should be considered invalid after calling this function.
*
* @param first the first list
* @param second the second list
*
* @return the resultant joined list
*/
alpm_list_t *alpm_list_join(alpm_list_t *first, alpm_list_t *second);
/**
* @brief Merge the two sorted sublists into one sorted list.
*
* @param left the first list
* @param right the second list
* @param fn comparison function for determining merge order
*
* @return the resultant list
*/
alpm_list_t *alpm_list_mmerge(alpm_list_t *left, alpm_list_t *right, alpm_list_fn_cmp fn);
/**
* @brief Sort a list of size `n` using mergesort algorithm.
*
* @param list the list to sort
* @param n the size of the list
* @param fn the comparison function for determining order
*
* @return the resultant list
*/
alpm_list_t *alpm_list_msort(alpm_list_t *list, size_t n, alpm_list_fn_cmp fn);
/**
* @brief Remove an item from the list.
* item is not freed; this is the responsibility of the caller.
*
* @param haystack the list to remove the item from
* @param item the item to remove from the list
*
* @return the resultant list
*/
alpm_list_t *alpm_list_remove_item(alpm_list_t *haystack, alpm_list_t *item);
/**
* @brief Remove an item from the list.
*
* @param haystack the list to remove the item from
* @param needle the data member of the item we're removing
* @param fn the comparison function for searching
* @param data output parameter containing data of the removed item
*
* @return the resultant list
*/
alpm_list_t *alpm_list_remove(alpm_list_t *haystack, const void *needle, alpm_list_fn_cmp fn, void **data);
/**
* @brief Remove a string from a list.
*
* @param haystack the list to remove the item from
* @param needle the data member of the item we're removing
* @param data output parameter containing data of the removed item
*
* @return the resultant list
*/
alpm_list_t *alpm_list_remove_str(alpm_list_t *haystack, const char *needle, char **data);
/**
* @brief Create a new list without any duplicates.
*
* This does NOT copy data members.
*
* @param list the list to copy
*
* @return a new list containing non-duplicate items
*/
alpm_list_t *alpm_list_remove_dupes(const alpm_list_t *list);
/**
* @brief Copy a string list, including data.
*
* @param list the list to copy
*
* @return a copy of the original list
*/
alpm_list_t *alpm_list_strdup(const alpm_list_t *list);
/**
* @brief Copy a list, without copying data.
*
* @param list the list to copy
*
* @return a copy of the original list
*/
alpm_list_t *alpm_list_copy(const alpm_list_t *list);
/**
* @brief Copy a list and copy the data.
* Note that the data elements to be copied should not contain pointers
* and should also be of constant size.
*
* @param list the list to copy
* @param size the size of each data element
*
* @return a copy of the original list, data copied as well
*/
alpm_list_t *alpm_list_copy_data(const alpm_list_t *list, size_t size);
/**
* @brief Create a new list in reverse order.
*
* @param list the list to copy
*
* @return a new list in reverse order
*/
alpm_list_t *alpm_list_reverse(alpm_list_t *list);
/* item accessors */
/**
* @brief Return nth element from list (starting from 0).
*
* @param list the list
* @param n the index of the item to find (n < alpm_list_count(list) IS needed)
*
* @return an alpm_list_t node for index `n`
*/
alpm_list_t *alpm_list_nth(const alpm_list_t *list, size_t n);
/**
* @brief Get the next element of a list.
*
* @param list the list node
*
* @return the next element, or NULL when no more elements exist
*/
alpm_list_t *alpm_list_next(const alpm_list_t *list);
/**
* @brief Get the previous element of a list.
*
* @param list the list head
*
* @return the previous element, or NULL when no previous element exist
*/
alpm_list_t *alpm_list_previous(const alpm_list_t *list);
/**
* @brief Get the last item in the list.
*
* @param list the list
*
* @return the last element in the list
*/
alpm_list_t *alpm_list_last(const alpm_list_t *list);
/* misc */
/**
* @brief Get the number of items in a list.
*
* @param list the list
*
* @return the number of list items
*/
size_t alpm_list_count(const alpm_list_t *list);
/**
* @brief Find an item in a list.
*
* @param needle the item to search
* @param haystack the list
* @param fn the comparison function for searching (!= NULL)
*
* @return `needle` if found, NULL otherwise
*/
void *alpm_list_find(const alpm_list_t *haystack, const void *needle, alpm_list_fn_cmp fn);
/**
* @brief Find an item in a list.
*
* Search for the item whose data matches that of the `needle`.
*
* @param needle the data to search for (== comparison)
* @param haystack the list
*
* @return `needle` if found, NULL otherwise
*/
void *alpm_list_find_ptr(const alpm_list_t *haystack, const void *needle);
/**
* @brief Find a string in a list.
*
* @param needle the string to search for
* @param haystack the list
*
* @return `needle` if found, NULL otherwise
*/
char *alpm_list_find_str(const alpm_list_t *haystack, const char *needle);
alpm_list_t *alpm_list_diff(const alpm_list_t *lhs, const alpm_list_t *rhs, alpm_list_fn_cmp fn);
/**
* @brief Check if two lists contain the same data, ignoring order.
*
* Lists are considered equal if they both contain the same data regardless
* of order.
*
* @param left the first list
* @param right the second list
* @param fn the comparison function
*
* @return 1 if the lists are equal, 0 if not equal, -1 on error.
*/
int alpm_list_cmp_unsorted(const alpm_list_t *left,
const alpm_list_t *right, alpm_list_fn_cmp fn);
/**
* @brief Find the differences between list `left` and list `right`
*
* The two lists must be sorted. Items only in list `left` are added to the
* `onlyleft` list. Items only in list `right` are added to the `onlyright`
* list.
*
* @param left the first list
* @param right the second list
* @param fn the comparison function
* @param onlyleft pointer to the first result list
* @param onlyright pointer to the second result list
*
*/
void alpm_list_diff_sorted(const alpm_list_t *left, const alpm_list_t *right,
alpm_list_fn_cmp fn, alpm_list_t **onlyleft, alpm_list_t **onlyright);
/**
* @brief Find the items in list `lhs` that are not present in list `rhs`.
*
* @param lhs the first list
* @param rhs the second list
* @param fn the comparison function
*
* @return a list containing all items in `lhs` not present in `rhs`
*/
alpm_list_t *alpm_list_diff(const alpm_list_t *lhs, const alpm_list_t *rhs, alpm_list_fn_cmp fn);
/**
* @brief Copy a list and data into a standard C array of fixed length.
* Note that the data elements are shallow copied so any contained pointers
* will point to the original data.
*
* @param list the list to copy
* @param n the size of the list
* @param size the size of each data element
*
* @return an array version of the original list, data copied as well
*/
void *alpm_list_to_array(const alpm_list_t *list, size_t n, size_t size);
/* End of alpm_list */
/** @} */
#ifdef __cplusplus
}
#endif

View file

@ -1,7 +1,7 @@
/*
* backup.c
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2005 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>

View file

@ -1,7 +1,7 @@
/*
* backup.h
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify

View file

@ -1,7 +1,7 @@
/*
* be_local.c : backend for the local database
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify
@ -195,6 +195,12 @@ static alpm_list_t *_cache_get_backup(alpm_pkg_t *pkg)
return pkg->backup;
}
static alpm_list_t *_cache_get_xdata(alpm_pkg_t *pkg)
{
LAZY_LOAD(INFRQ_DESC);
return pkg->xdata;
}
/**
* Open a package changelog for reading. Similar to fopen in functionality,
* except that the returned 'file stream' is from the database.
@ -244,7 +250,6 @@ static int _cache_changelog_close(const alpm_pkg_t UNUSED *pkg, void *fp)
*/
static struct archive *_cache_mtree_open(alpm_pkg_t *pkg)
{
int r;
struct archive *mtree;
alpm_db_t *db = alpm_pkg_get_db(pkg);
@ -262,7 +267,7 @@ static struct archive *_cache_mtree_open(alpm_pkg_t *pkg)
_alpm_archive_read_support_filter_all(mtree);
archive_read_support_format_mtree(mtree);
if((r = _alpm_archive_read_open_file(mtree, mtfile, ALPM_BUFFER_SIZE))) {
if(_alpm_archive_read_open_file(mtree, mtfile, ALPM_BUFFER_SIZE)) {
_alpm_log(pkg->handle, ALPM_LOG_ERROR, _("error while reading file %s: %s\n"),
mtfile, archive_error_string(mtree));
_alpm_archive_read_free(mtree);
@ -326,7 +331,7 @@ static int _cache_force_load(alpm_pkg_t *pkg)
* lazy accessor methods that handle any backend loading and caching
* logic.
*/
static struct pkg_operations local_pkg_ops = {
static const struct pkg_operations local_pkg_ops = {
.get_base = _cache_get_base,
.get_desc = _cache_get_desc,
.get_url = _cache_get_url,
@ -349,6 +354,7 @@ static struct pkg_operations local_pkg_ops = {
.get_replaces = _cache_get_replaces,
.get_files = _cache_get_files,
.get_backup = _cache_get_backup,
.get_xdata = _cache_get_xdata,
.changelog_open = _cache_changelog_open,
.changelog_read = _cache_changelog_read,
@ -624,6 +630,10 @@ static int local_db_populate(alpm_db_t *db)
continue;
}
/* treat local metadata errors as warning-only,
* they are already installed and otherwise they can't be operated on */
_alpm_pkg_check_meta(pkg);
/* add to the collection */
_alpm_log(db->handle, ALPM_LOG_FUNCTION, "adding '%s' to package cache for db '%s'\n",
pkg->name, db->treename);
@ -644,6 +654,17 @@ static int local_db_populate(alpm_db_t *db)
return 0;
}
static alpm_pkgreason_t _read_pkgreason(alpm_handle_t *handle, const char *pkgname, const char *line) {
if(strcmp(line, "0") == 0) {
return ALPM_PKG_REASON_EXPLICIT;
} else if(strcmp(line, "1") == 0) {
return ALPM_PKG_REASON_DEPEND;
} else {
_alpm_log(handle, ALPM_LOG_ERROR, _("unknown install reason for package %s: %s\n"), pkgname, line);
return ALPM_PKG_REASON_UNKNOWN;
}
}
/* Note: the return value must be freed by the caller */
char *_alpm_local_db_pkgpath(alpm_db_t *db, alpm_pkg_t *info,
const char *filename)
@ -656,7 +677,7 @@ char *_alpm_local_db_pkgpath(alpm_db_t *db, alpm_pkg_t *info,
len = strlen(dbpath) + strlen(info->name) + strlen(info->version) + 3;
len += filename ? strlen(filename) : 0;
MALLOC(pkgpath, len, RET_ERR(db->handle, ALPM_ERR_MEMORY, NULL));
sprintf(pkgpath, "%s%s-%s/%s", dbpath, info->name, info->version,
snprintf(pkgpath, len, "%s%s-%s/%s", dbpath, info->name, info->version,
filename ? filename : "");
return pkgpath;
}
@ -766,7 +787,7 @@ static int local_db_read(alpm_pkg_t *info, int inforeq)
READ_AND_STORE(info->packager);
} else if(strcmp(line, "%REASON%") == 0) {
READ_NEXT();
info->reason = (alpm_pkgreason_t)atoi(line);
info->reason = _read_pkgreason(db->handle, info->name, line);
} else if(strcmp(line, "%VALIDATION%") == 0) {
alpm_list_t *i, *v = NULL;
READ_AND_STORE_ALL(v);
@ -804,6 +825,23 @@ static int local_db_read(alpm_pkg_t *info, int inforeq)
READ_AND_SPLITDEP(info->conflicts);
} else if(strcmp(line, "%PROVIDES%") == 0) {
READ_AND_SPLITDEP(info->provides);
} else if(strcmp(line, "%XDATA%") == 0) {
alpm_list_t *i, *lines = NULL;
READ_AND_STORE_ALL(lines);
for(i = lines; i; i = i->next) {
alpm_pkg_xdata_t *pd = _alpm_pkg_parse_xdata(i->data);
if(pd == NULL || !alpm_list_append(&info->xdata, pd)) {
_alpm_pkg_xdata_free(pd);
FREELIST(lines);
goto error;
}
}
FREELIST(lines);
} else {
_alpm_log(db->handle, ALPM_LOG_WARNING, _("%s: unknown key '%s' in local database\n"), info->name, line);
alpm_list_t *lines = NULL;
READ_AND_STORE_ALL(lines);
FREELIST(lines);
}
}
fclose(fp);
@ -1040,6 +1078,15 @@ int _alpm_local_db_write(alpm_db_t *db, alpm_pkg_t *info, int inforeq)
write_deps(fp, "%CONFLICTS%", info->conflicts);
write_deps(fp, "%PROVIDES%", info->provides);
if(info->xdata) {
fputs("%XDATA%\n", fp);
for(lp = info->xdata; lp; lp = lp->next) {
alpm_pkg_xdata_t *pd = lp->data;
fprintf(fp, "%s=%s\n", pd->name, pd->value);
}
fputc('\n', fp);
}
fclose(fp);
fp = NULL;
}
@ -1117,7 +1164,7 @@ int _alpm_local_db_remove(alpm_db_t *db, alpm_pkg_t *info)
/* file path is too long to remove, hmm. */
ret = -1;
} else {
sprintf(name, "%s/%s", pkgpath, dp->d_name);
snprintf(name, PATH_MAX, "%s/%s", pkgpath, dp->d_name);
if(unlink(name)) {
ret = -1;
}
@ -1158,7 +1205,7 @@ int SYMEXPORT alpm_pkg_set_reason(alpm_pkg_t *pkg, alpm_pkgreason_t reason)
return 0;
}
struct db_operations local_db_ops = {
static const struct db_operations local_db_ops = {
.validate = local_db_validate,
.populate = local_db_populate,
.unregister = _alpm_db_unregister,

View file

@ -1,7 +1,7 @@
/*
* be_package.c : backend for packages
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify
@ -134,11 +134,10 @@ static int _package_changelog_close(const alpm_pkg_t UNUSED *pkg, void *fp)
}
/** Package file operations struct accessor. We implement this as a method
* rather than a static struct as in be_files because we want to reuse the
* majority of the default_pkg_ops struct and add only a few operations of
* our own on top.
* because we want to reuse the majority of the default_pkg_ops struct and
* add only a few operations of our own on top.
*/
static struct pkg_operations *get_file_pkg_ops(void)
static const struct pkg_operations *get_file_pkg_ops(void)
{
static struct pkg_operations file_pkg_ops;
static int file_pkg_ops_initialized = 0;
@ -245,13 +244,17 @@ static int parse_descfile(alpm_handle_t *handle, struct archive *a, alpm_pkg_t *
CALLOC(backup, 1, sizeof(alpm_backup_t), return -1);
STRDUP(backup->name, ptr, FREE(backup); return -1);
newpkg->backup = alpm_list_add(newpkg->backup, backup);
} else if(strcmp(key, "force") == 0) {
/* deprecated, skip it */
} else if(strcmp(key, "makepkgopt") == 0) {
/* not used atm */
} else if(strcmp(key, "xdata") == 0) {
alpm_pkg_xdata_t *pd = _alpm_pkg_parse_xdata(ptr);
if(pd == NULL || !alpm_list_append(&newpkg->xdata, pd)) {
_alpm_pkg_xdata_free(pd);
return -1;
}
} else {
const char *pkgname = newpkg->name ? newpkg->name : "error";
_alpm_log(handle, ALPM_LOG_WARNING, _("%s: unknown key '%s' in package description\n"), pkgname, key);
_alpm_log(handle, ALPM_LOG_DEBUG, "%s: unknown key '%s' in description file line %d\n",
newpkg->name ? newpkg->name : "error", key, linenum);
pkgname, key, linenum);
}
}
}
@ -651,9 +654,6 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
goto pkg_invalid;
}
_alpm_archive_read_free(archive);
close(fd);
/* internal fields for package struct */
newpkg->origin = ALPM_PKG_FROM_FILE;
STRDUP(newpkg->origin_data.file, pkgfile, goto error);
@ -675,6 +675,12 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
newpkg->infolevel |= INFRQ_FILES;
}
if(_alpm_pkg_check_meta(newpkg) != 0) {
goto pkg_invalid;
}
_alpm_archive_read_free(archive);
close(fd);
return newpkg;
pkg_invalid:
@ -682,9 +688,7 @@ pkg_invalid:
error:
_alpm_pkg_free(newpkg);
_alpm_archive_read_free(archive);
if(fd >= 0) {
close(fd);
}
close(fd);
return NULL;
}
@ -724,7 +728,6 @@ int SYMEXPORT alpm_pkg_load(alpm_handle_t *handle, const char *filename, int ful
int validation = 0;
char *sigpath;
alpm_pkg_t *pkg_temp;
char *packager;
CHECK_HANDLE(handle, return -1);
ASSERT(pkg != NULL, RET_ERR(handle, ALPM_ERR_WRONG_ARGS, -1));
@ -750,13 +753,7 @@ int SYMEXPORT alpm_pkg_load(alpm_handle_t *handle, const char *filename, int ful
char *key = k->data;
if(_alpm_key_in_keychain(handle, key) == 0) {
pkg_temp = _alpm_pkg_load_internal(handle, filename, full);
if(pkg_temp) {
packager = pkg_temp->packager;
} else {
packager = NULL;
}
if(_alpm_key_import(handle, packager, key) == -1) {
if(_alpm_key_import(handle, NULL, key) == -1) {
fail = 1;
}
_alpm_pkg_free(pkg_temp);

View file

@ -1,7 +1,7 @@
/*
* be_sync.c : backend for sync databases
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify
@ -48,7 +48,7 @@ static char *get_sync_dir(alpm_handle_t *handle)
struct stat buf;
MALLOC(syncpath, len, RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
sprintf(syncpath, "%s%s", handle->dbpath, "sync/");
snprintf(syncpath, len, "%s%s", handle->dbpath, "sync/");
if(stat(syncpath, &buf) != 0) {
_alpm_log(handle, ALPM_LOG_DEBUG, "database dir '%s' does not exist, creating it\n",
@ -138,6 +138,7 @@ valid:
int SYMEXPORT alpm_db_update(alpm_handle_t *handle, alpm_list_t *dbs, int force) {
char *syncpath;
char *temporary_syncpath;
const char *dbext = handle->dbext;
alpm_list_t *i;
int ret = -1;
@ -152,6 +153,8 @@ int SYMEXPORT alpm_db_update(alpm_handle_t *handle, alpm_list_t *dbs, int force)
syncpath = get_sync_dir(handle);
ASSERT(syncpath != NULL, return -1);
temporary_syncpath = _alpm_temporary_download_dir_setup(syncpath, handle->sandboxuser);
ASSERT(temporary_syncpath != NULL, FREE(syncpath); return -1);
/* make sure we have a sane umask */
oldmask = umask(0022);
@ -189,6 +192,18 @@ int SYMEXPORT alpm_db_update(alpm_handle_t *handle, alpm_list_t *dbs, int force)
MALLOC(payload->filepath, len,
FREE(payload); GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
snprintf(payload->filepath, len, "%s%s", db->treename, dbext);
STRDUP(payload->remote_name, payload->filepath,
_alpm_dload_payload_reset(payload); FREE(payload);
GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
payload->destfile_name = _alpm_get_fullpath(temporary_syncpath, payload->remote_name, "");
payload->tempfile_name = _alpm_get_fullpath(temporary_syncpath, payload->remote_name, ".part");
if(!payload->destfile_name || !payload->tempfile_name) {
_alpm_dload_payload_reset(payload);
FREE(payload);
GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup);
}
payload->handle = handle;
payload->force = dbforce;
payload->unlink_on_fail = 1;
@ -198,10 +213,14 @@ int SYMEXPORT alpm_db_update(alpm_handle_t *handle, alpm_list_t *dbs, int force)
payload->max_size = 128 * 1024 * 1024;
payloads = alpm_list_add(payloads, payload);
}
if(payloads == NULL) {
ret = 0;
goto cleanup;
}
event.type = ALPM_EVENT_DB_RETRIEVE_START;
EVENT(handle, &event);
ret = _alpm_download(handle, payloads, syncpath);
ret = _alpm_download(handle, payloads, syncpath, temporary_syncpath);
if(ret < 0) {
event.type = ALPM_EVENT_DB_RETRIEVE_FAILED;
EVENT(handle, &event);
@ -249,7 +268,8 @@ cleanup:
alpm_list_free_inner(payloads, (alpm_list_fn_free)_alpm_dload_payload_reset);
FREELIST(payloads);
}
free(syncpath);
FREE(temporary_syncpath);
FREE(syncpath);
umask(oldmask);
return ret;
}
@ -281,6 +301,22 @@ static int _sync_get_validation(alpm_pkg_t *pkg)
return pkg->validation;
}
/** Package sync operations struct accessor. We implement this as a method
* because we want to reuse the majority of the default_pkg_ops struct and
* add only a few operations of our own on top.
*/
static const struct pkg_operations *get_sync_pkg_ops(void)
{
static struct pkg_operations sync_pkg_ops;
static int sync_pkg_ops_initialized = 0;
if(!sync_pkg_ops_initialized) {
sync_pkg_ops = default_pkg_ops;
sync_pkg_ops.get_validation = _sync_get_validation;
sync_pkg_ops_initialized = 1;
}
return &sync_pkg_ops;
}
static alpm_pkg_t *load_pkg_for_entry(alpm_db_t *db, const char *entryname,
const char **entry_filename, alpm_pkg_t *likely_pkg)
{
@ -321,10 +357,14 @@ static alpm_pkg_t *load_pkg_for_entry(alpm_db_t *db, const char *entryname,
pkg->origin = ALPM_PKG_FROM_SYNCDB;
pkg->origin_data.db = db;
pkg->ops = &default_pkg_ops;
pkg->ops->get_validation = _sync_get_validation;
pkg->ops = get_sync_pkg_ops();
pkg->handle = db->handle;
if(_alpm_pkg_check_meta(pkg) != 0) {
_alpm_pkg_free(pkg);
RET_ERR(db->handle, ALPM_ERR_PKG_INVALID, NULL);
}
/* add to the collection */
_alpm_log(db->handle, ALPM_LOG_FUNCTION, "adding '%s' to package cache for db '%s'\n",
pkg->name, db->treename);
@ -433,6 +473,14 @@ static int sync_db_populate(alpm_db_t *db)
}
}
}
/* the db file was successfully read, but contained errors */
if(ret == -1) {
db->status &= ~DB_STATUS_VALID;
db->status |= DB_STATUS_INVALID;
_alpm_db_free_pkgcache(db);
GOTO_ERR(db->handle, ALPM_ERR_DB_INVALID, cleanup);
}
/* reading the db file failed */
if(archive_ret != ARCHIVE_EOF) {
_alpm_log(db->handle, ALPM_LOG_ERROR, _("could not read db '%s' (%s)\n"),
db->treename, archive_error_string(archive));
@ -647,6 +695,23 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
pkg->files.count = files_count;
pkg->files.files = files;
_alpm_filelist_sort(&pkg->files);
} else if(strcmp(line, "%DATA%") == 0) {
alpm_list_t *i, *lines = NULL;
READ_AND_STORE_ALL(lines);
for(i = lines; i; i = i->next) {
alpm_pkg_xdata_t *pd = _alpm_pkg_parse_xdata(i->data);
if(pd == NULL || !alpm_list_append(&pkg->xdata, pd)) {
_alpm_pkg_xdata_free(pd);
FREELIST(lines);
goto error;
}
}
FREELIST(lines);
} else {
_alpm_log(db->handle, ALPM_LOG_WARNING, _("%s: unknown key '%s' in sync database\n"), pkg->name, line);
alpm_list_t *lines = NULL;
READ_AND_STORE_ALL(lines);
FREELIST(lines);
}
}
if(ret != ARCHIVE_EOF) {

View file

@ -1,7 +1,7 @@
/*
* conflict.c
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2006 by David Kimpe <dnaku@frugalware.org>
@ -50,10 +50,8 @@ static alpm_conflict_t *conflict_new(alpm_pkg_t *pkg1, alpm_pkg_t *pkg2,
CALLOC(conflict, 1, sizeof(alpm_conflict_t), return NULL);
conflict->package1_hash = pkg1->name_hash;
conflict->package2_hash = pkg2->name_hash;
STRDUP(conflict->package1, pkg1->name, goto error);
STRDUP(conflict->package2, pkg2->name, goto error);
ASSERT(_alpm_pkg_dup(pkg1, &conflict->package1) == 0, goto error);
ASSERT(_alpm_pkg_dup(pkg2, &conflict->package2) == 0, goto error);
conflict->reason = reason;
return conflict;
@ -66,8 +64,9 @@ error:
void SYMEXPORT alpm_conflict_free(alpm_conflict_t *conflict)
{
ASSERT(conflict != NULL, return);
FREE(conflict->package2);
FREE(conflict->package1);
_alpm_pkg_free(conflict->package1);
_alpm_pkg_free(conflict->package2);
FREE(conflict);
}
@ -79,10 +78,8 @@ alpm_conflict_t *_alpm_conflict_dup(const alpm_conflict_t *conflict)
alpm_conflict_t *newconflict;
CALLOC(newconflict, 1, sizeof(alpm_conflict_t), return NULL);
newconflict->package1_hash = conflict->package1_hash;
newconflict->package2_hash = conflict->package2_hash;
STRDUP(newconflict->package1, conflict->package1, goto error);
STRDUP(newconflict->package2, conflict->package2, goto error);
ASSERT(_alpm_pkg_dup(conflict->package1, &newconflict->package1) == 0, goto error);
ASSERT(_alpm_pkg_dup(conflict->package2, &newconflict->package2) == 0, goto error);
newconflict->reason = conflict->reason;
return newconflict;
@ -105,10 +102,10 @@ static int conflict_isin(alpm_conflict_t *needle, alpm_list_t *haystack)
alpm_list_t *i;
for(i = haystack; i; i = i->next) {
alpm_conflict_t *conflict = i->data;
if(needle->package1_hash == conflict->package1_hash
&& needle->package2_hash == conflict->package2_hash
&& strcmp(needle->package1, conflict->package1) == 0
&& strcmp(needle->package2, conflict->package2) == 0) {
if(needle->package1->name_hash == conflict->package1->name_hash
&& needle->package2->name_hash == conflict->package2->name_hash
&& strcmp(needle->package1->name, conflict->package1->name) == 0
&& strcmp(needle->package2->name, conflict->package2->name) == 0) {
return 1;
}
}
@ -615,8 +612,9 @@ alpm_list_t *_alpm_db_find_fileconflicts(alpm_handle_t *handle,
/* check if all files of the dir belong to the installed pkg */
if(!resolved_conflict && S_ISDIR(lsbuf.st_mode)) {
alpm_list_t *owners;
char *dir = malloc(strlen(relative_path) + 2);
sprintf(dir, "%s/", relative_path);
size_t dir_len = strlen(relative_path) + 2;
char *dir = malloc(dir_len);
snprintf(dir, dir_len, "%s/", relative_path);
owners = alpm_db_find_file_owners(handle->db_local, dir);
if(owners) {

View file

@ -1,7 +1,7 @@
/*
* conflict.h
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify

View file

@ -1,7 +1,7 @@
/*
* db.c
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>
@ -131,6 +131,26 @@ int SYMEXPORT alpm_db_unregister(alpm_db_t *db)
return 0;
}
alpm_list_t SYMEXPORT *alpm_db_get_cache_servers(const alpm_db_t *db)
{
ASSERT(db != NULL, return NULL);
return db->cache_servers;
}
int SYMEXPORT alpm_db_set_cache_servers(alpm_db_t *db, alpm_list_t *cache_servers)
{
alpm_list_t *i;
ASSERT(db != NULL, return -1);
FREELIST(db->cache_servers);
for(i = cache_servers; i; i = i->next) {
char *url = i->data;
if(alpm_db_add_cache_server(db, url) != 0) {
return -1;
}
}
return 0;
}
alpm_list_t SYMEXPORT *alpm_db_get_servers(const alpm_db_t *db)
{
ASSERT(db != NULL, return NULL);
@ -139,9 +159,15 @@ alpm_list_t SYMEXPORT *alpm_db_get_servers(const alpm_db_t *db)
int SYMEXPORT alpm_db_set_servers(alpm_db_t *db, alpm_list_t *servers)
{
alpm_list_t *i;
ASSERT(db != NULL, return -1);
FREELIST(db->servers);
db->servers = servers;
for(i = servers; i; i = i->next) {
char *url = i->data;
if(alpm_db_add_server(db, url) != 0) {
return -1;
}
}
return 0;
}
@ -158,6 +184,25 @@ static char *sanitize_url(const char *url)
return newurl;
}
int SYMEXPORT alpm_db_add_cache_server(alpm_db_t *db, const char *url)
{
char *newurl;
/* Sanity checks */
ASSERT(db != NULL, return -1);
db->handle->pm_errno = ALPM_ERR_OK;
ASSERT(url != NULL && strlen(url) != 0, RET_ERR(db->handle, ALPM_ERR_WRONG_ARGS, -1));
newurl = sanitize_url(url);
ASSERT(newurl != NULL, RET_ERR(db->handle, ALPM_ERR_MEMORY, -1));
db->cache_servers = alpm_list_add(db->cache_servers, newurl);
_alpm_log(db->handle, ALPM_LOG_DEBUG, "adding new cache server URL to database '%s': %s\n",
db->treename, newurl);
return 0;
}
int SYMEXPORT alpm_db_add_server(alpm_db_t *db, const char *url)
{
char *newurl;
@ -168,9 +213,8 @@ int SYMEXPORT alpm_db_add_server(alpm_db_t *db, const char *url)
ASSERT(url != NULL && strlen(url) != 0, RET_ERR(db->handle, ALPM_ERR_WRONG_ARGS, -1));
newurl = sanitize_url(url);
if(!newurl) {
return -1;
}
ASSERT(newurl != NULL, RET_ERR(db->handle, ALPM_ERR_MEMORY, -1));
db->servers = alpm_list_add(db->servers, newurl);
_alpm_log(db->handle, ALPM_LOG_DEBUG, "adding new server URL to database '%s': %s\n",
db->treename, newurl);
@ -178,6 +222,32 @@ int SYMEXPORT alpm_db_add_server(alpm_db_t *db, const char *url)
return 0;
}
int SYMEXPORT alpm_db_remove_cache_server(alpm_db_t *db, const char *url)
{
char *newurl, *vdata = NULL;
int ret = 1;
/* Sanity checks */
ASSERT(db != NULL, return -1);
db->handle->pm_errno = ALPM_ERR_OK;
ASSERT(url != NULL && strlen(url) != 0, RET_ERR(db->handle, ALPM_ERR_WRONG_ARGS, -1));
newurl = sanitize_url(url);
ASSERT(newurl != NULL, RET_ERR(db->handle, ALPM_ERR_MEMORY, -1));
db->cache_servers = alpm_list_remove_str(db->cache_servers, newurl, &vdata);
if(vdata) {
_alpm_log(db->handle, ALPM_LOG_DEBUG, "removed cache server URL from database '%s': %s\n",
db->treename, newurl);
free(vdata);
ret = 0;
}
free(newurl);
return ret;
}
int SYMEXPORT alpm_db_remove_server(alpm_db_t *db, const char *url)
{
char *newurl, *vdata = NULL;
@ -189,9 +259,7 @@ int SYMEXPORT alpm_db_remove_server(alpm_db_t *db, const char *url)
ASSERT(url != NULL && strlen(url) != 0, RET_ERR(db->handle, ALPM_ERR_WRONG_ARGS, -1));
newurl = sanitize_url(url);
if(!newurl) {
return -1;
}
ASSERT(newurl != NULL, RET_ERR(db->handle, ALPM_ERR_MEMORY, -1));
db->servers = alpm_list_remove_str(db->servers, newurl, &vdata);
@ -206,6 +274,12 @@ int SYMEXPORT alpm_db_remove_server(alpm_db_t *db, const char *url)
return ret;
}
alpm_handle_t SYMEXPORT *alpm_db_get_handle(alpm_db_t *db)
{
ASSERT(db != NULL, return NULL);
return db->handle;
}
const char SYMEXPORT *alpm_db_get_name(const alpm_db_t *db)
{
ASSERT(db != NULL, return NULL);
@ -316,6 +390,7 @@ void _alpm_db_free(alpm_db_t *db)
/* cleanup pkgcache */
_alpm_db_free_pkgcache(db);
/* cleanup server list */
FREELIST(db->cache_servers);
FREELIST(db->servers);
FREE(db->_path);
FREE(db->treename);
@ -342,14 +417,14 @@ const char *_alpm_db_path(alpm_db_t *db)
if(db->status & DB_STATUS_LOCAL) {
pathsize = strlen(dbpath) + strlen(db->treename) + 2;
CALLOC(db->_path, 1, pathsize, RET_ERR(db->handle, ALPM_ERR_MEMORY, NULL));
sprintf(db->_path, "%s%s/", dbpath, db->treename);
snprintf(db->_path, pathsize, "%s%s/", dbpath, db->treename);
} else {
const char *dbext = db->handle->dbext;
pathsize = strlen(dbpath) + 5 + strlen(db->treename) + strlen(dbext) + 1;
CALLOC(db->_path, 1, pathsize, RET_ERR(db->handle, ALPM_ERR_MEMORY, NULL));
/* all sync DBs now reside in the sync/ subdir of the dbpath */
sprintf(db->_path, "%ssync/%s%s", dbpath, db->treename, dbext);
snprintf(db->_path, pathsize, "%ssync/%s%s", dbpath, db->treename, dbext);
}
_alpm_log(db->handle, ALPM_LOG_DEBUG, "database path for tree %s set to %s\n",
db->treename, db->_path);
@ -488,18 +563,17 @@ static void free_groupcache(alpm_db_t *db)
void _alpm_db_free_pkgcache(alpm_db_t *db)
{
if(db == NULL || !(db->status & DB_STATUS_PKGCACHE)) {
if(db == NULL || db->pkgcache == NULL) {
return;
}
_alpm_log(db->handle, ALPM_LOG_DEBUG,
"freeing package cache for repository '%s'\n", db->treename);
if(db->pkgcache) {
alpm_list_free_inner(db->pkgcache->list,
(alpm_list_fn_free)_alpm_pkg_free);
_alpm_pkghash_free(db->pkgcache);
}
alpm_list_free_inner(db->pkgcache->list,
(alpm_list_fn_free)_alpm_pkg_free);
_alpm_pkghash_free(db->pkgcache);
db->pkgcache = NULL;
db->status &= ~DB_STATUS_PKGCACHE;
free_groupcache(db);

View file

@ -1,7 +1,7 @@
/*
* db.h
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org>
@ -62,15 +62,16 @@ struct db_operations {
};
/* Database */
struct __alpm_db_t {
struct _alpm_db_t {
alpm_handle_t *handle;
char *treename;
/* do not access directly, use _alpm_db_path(db) for lazy access */
char *_path;
alpm_pkghash_t *pkgcache;
alpm_list_t *grpcache;
alpm_list_t *cache_servers;
alpm_list_t *servers;
struct db_operations *ops;
const struct db_operations *ops;
/* bitfields for validity, local, loaded caches, etc. */
/* From _alpm_dbstatus_t */

View file

@ -1,7 +1,7 @@
/*
* deps.c
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org>
@ -181,13 +181,13 @@ static void _alpm_warn_dep_cycle(alpm_handle_t *handle, alpm_list_t *targets,
} else {
alpm_pkg_t *ancestorpkg = ancestor->data;
alpm_pkg_t *childpkg = vertex->data;
_alpm_log(handle, ALPM_LOG_WARNING, _("dependency cycle detected:\n"));
_alpm_log(handle, ALPM_LOG_DEBUG, _("dependency cycle detected:\n"));
if(reverse) {
_alpm_log(handle, ALPM_LOG_WARNING,
_alpm_log(handle, ALPM_LOG_DEBUG,
_("%s will be removed after its %s dependency\n"),
ancestorpkg->name, childpkg->name);
} else {
_alpm_log(handle, ALPM_LOG_WARNING,
_alpm_log(handle, ALPM_LOG_DEBUG,
_("%s will be installed before its %s dependency\n"),
ancestorpkg->name, childpkg->name);
}
@ -556,7 +556,7 @@ static void _alpm_select_depends(alpm_list_t **from, alpm_list_t **to,
for(i = *from; i; i = next) {
alpm_pkg_t *deppkg = i->data;
next = i->next;
if((explicit || alpm_pkg_get_reason(deppkg) != ALPM_PKG_REASON_EXPLICIT)
if((explicit || alpm_pkg_get_reason(deppkg) == ALPM_PKG_REASON_DEPEND)
&& _alpm_pkg_depends_on(pkg, deppkg)) {
*to = alpm_list_add(*to, deppkg);
*from = alpm_list_remove_item(*from, i);

View file

@ -1,7 +1,7 @@
/*
* deps.h
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org>

View file

@ -1,7 +1,7 @@
/*
* diskspace.c
*
* Copyright (c) 2010-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2010-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
*
* 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
@ -111,6 +111,10 @@ static alpm_list_t *mount_point_list(alpm_handle_t *handle)
}
while((mnt = getmntent(fp))) {
if(mnt->mnt_dir == NULL) {
continue;
}
CALLOC(mp, 1, sizeof(alpm_mountpoint_t), RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
STRDUP(mp->mount_dir, mnt->mnt_dir, free(mp); RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
mp->mount_dir_len = strlen(mp->mount_dir);
@ -134,6 +138,10 @@ static alpm_list_t *mount_point_list(alpm_handle_t *handle)
}
while((ret = getmntent(fp, &mnt)) == 0) {
if(mnt->mnt_mountp == NULL) {
continue;
}
CALLOC(mp, 1, sizeof(alpm_mountpoint_t), RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
STRDUP(mp->mount_dir, mnt->mnt_mountp, free(mp); RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
mp->mount_dir_len = strlen(mp->mount_dir);
@ -161,6 +169,10 @@ static alpm_list_t *mount_point_list(alpm_handle_t *handle)
}
for(; entries-- > 0; fsp++) {
if(fsp->f_mntonname == NULL) {
continue;
}
CALLOC(mp, 1, sizeof(alpm_mountpoint_t), RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
STRDUP(mp->mount_dir, fsp->f_mntonname, free(mp); RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
mp->mount_dir_len = strlen(mp->mount_dir);

View file

@ -1,7 +1,7 @@
/*
* diskspace.h
*
* Copyright (c) 2010-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2010-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
*
* 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
@ -43,7 +43,7 @@ enum mount_fsinfo {
MOUNT_FSINFO_FAIL,
};
typedef struct __alpm_mountpoint_t {
typedef struct _alpm_mountpoint_t {
/* mount point information */
char *mount_dir;
size_t mount_dir_len;

File diff suppressed because it is too large Load diff

View file

@ -1,7 +1,7 @@
/*
* dload.h
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify
@ -26,10 +26,12 @@
struct dload_payload {
alpm_handle_t *handle;
const char *tempfile_openmode;
/* name of the remote file */
char *remote_name;
/* temporary file name, to which the payload is downloaded */
char *tempfile_name;
/* name to which the downloaded file will be renamed */
char *destfile_name;
char *content_disp_name;
/* client has to provide either
* 1) fileurl - full URL to the file
* 2) pair of (servers, filepath), in this case ALPM iterates over the
@ -37,8 +39,11 @@ struct dload_payload {
*/
char *fileurl;
char *filepath; /* download URL path */
alpm_list_t *cache_servers;
alpm_list_t *servers;
long respcode;
/* the mtime of the existing version of this file, if there is one */
long mtime_existing_file;
off_t initial_size;
off_t max_size;
off_t prevprogress;
@ -46,21 +51,22 @@ struct dload_payload {
int allow_resume;
int errors_ok;
int unlink_on_fail;
int trust_remote_name;
int download_signature; /* specifies if an accompanion *.sig file need to be downloaded*/
int signature_optional; /* *.sig file is optional */
#ifdef HAVE_LIBCURL
CURL *curl;
char error_buffer[CURL_ERROR_SIZE];
FILE *localf; /* temp download file */
int signature; /* specifies if this payload is for a signature file */
int request_errors_ok; /* per-request errors-ok */
#endif
FILE *localf; /* temp download file */
};
void _alpm_dload_payload_reset(struct dload_payload *payload);
int _alpm_download(alpm_handle_t *handle,
alpm_list_t *payloads /* struct dload_payload */,
const char *localpath);
const char *localpath,
const char *temporary_localpath);
#endif /* ALPM_DLOAD_H */

View file

@ -1,7 +1,7 @@
/*
* error.c
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify
@ -90,6 +90,8 @@ const char SYMEXPORT *alpm_strerror(alpm_errno_t err)
return _("transaction not initialized");
case ALPM_ERR_TRANS_DUP_TARGET:
return _("duplicate target");
case ALPM_ERR_TRANS_DUP_FILENAME:
return _("duplicate filename");
case ALPM_ERR_TRANS_NOT_INITIALIZED:
return _("transaction not initialized");
case ALPM_ERR_TRANS_NOT_PREPARED:
@ -123,8 +125,6 @@ const char SYMEXPORT *alpm_strerror(alpm_errno_t err)
return _("package filename is not valid");
case ALPM_ERR_PKG_INVALID_ARCH:
return _("package architecture is not valid");
case ALPM_ERR_PKG_REPO_NOT_FOUND:
return _("could not find repository for target");
/* Signatures */
case ALPM_ERR_SIG_MISSING:
return _("missing PGP signature");
@ -137,7 +137,7 @@ const char SYMEXPORT *alpm_strerror(alpm_errno_t err)
return _("conflicting dependencies");
case ALPM_ERR_FILE_CONFLICTS:
return _("conflicting files");
/* Miscellaenous */
/* Miscellaneous */
case ALPM_ERR_RETRIEVE:
return _("failed to retrieve some files");
case ALPM_ERR_INVALID_REGEX:

View file

@ -1,7 +1,7 @@
/*
* filelist.c
*
* Copyright (c) 2012-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2012-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
*
* 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
@ -118,12 +118,12 @@ static int _alpm_files_cmp(const void *f1, const void *f2)
return strcmp(file1->name, file2->name);
}
alpm_file_t SYMEXPORT *alpm_filelist_contains(alpm_filelist_t *filelist,
alpm_file_t SYMEXPORT *alpm_filelist_contains(const alpm_filelist_t *filelist,
const char *path)
{
alpm_file_t key;
if(!filelist) {
if(!filelist || filelist->count == 0) {
return NULL;
}

View file

@ -1,7 +1,7 @@
/*
* filelist.h
*
* Copyright (c) 2012-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2012-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
*
* 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

View file

@ -1,7 +1,7 @@
/*
* graph.c - helpful graph structure and setup/teardown methods
*
* Copyright (c) 2007-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2007-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
*
* 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

View file

@ -1,7 +1,7 @@
/*
* graph.h - helpful graph structure and setup/teardown methods
*
* Copyright (c) 2007-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2007-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
*
* 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
@ -23,19 +23,19 @@
#include "alpm_list.h"
enum __alpm_graph_vertex_state {
enum _alpm_graph_vertex_state {
ALPM_GRAPH_STATE_UNPROCESSED,
ALPM_GRAPH_STATE_PROCESSING,
ALPM_GRAPH_STATE_PROCESSED
};
typedef struct __alpm_graph_t {
typedef struct _alpm_graph_t {
void *data;
struct __alpm_graph_t *parent; /* where did we come from? */
struct _alpm_graph_t *parent; /* where did we come from? */
alpm_list_t *children;
alpm_list_t *iterator; /* used for DFS without recursion */
off_t weight; /* weight of the node */
enum __alpm_graph_vertex_state state;
enum _alpm_graph_vertex_state state;
} alpm_graph_t;
alpm_graph_t *_alpm_graph_new(void);

View file

@ -1,7 +1,7 @@
/*
* group.c
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify

View file

@ -1,7 +1,7 @@
/*
* group.h
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify

View file

@ -1,7 +1,7 @@
/*
* handle.c
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org>
@ -48,12 +48,28 @@ alpm_handle_t *_alpm_handle_new(void)
return handle;
}
/* free all in-memory resources */
void _alpm_handle_free(alpm_handle_t *handle)
{
alpm_list_t *i;
alpm_db_t *db;
if(handle == NULL) {
return;
}
/* close local database */
if((db = handle->db_local)) {
db->ops->unregister(db);
}
/* unregister all sync dbs */
for(i = handle->dbs_sync; i; i = i->next) {
db = i->data;
db->ops->unregister(db);
}
alpm_list_free(handle->dbs_sync);
/* close logfile */
if(handle->logstream) {
fclose(handle->logstream);
@ -68,6 +84,12 @@ void _alpm_handle_free(alpm_handle_t *handle)
FREELIST(handle->known_keys);
#endif
#ifdef HAVE_LIBCURL
curl_multi_cleanup(handle->curlm);
curl_global_cleanup();
FREELIST(handle->server_errors);
#endif
/* free memory */
_alpm_trans_free(handle->trans);
FREE(handle->root);
@ -77,8 +99,9 @@ void _alpm_handle_free(alpm_handle_t *handle)
FREELIST(handle->hookdirs);
FREE(handle->logfile);
FREE(handle->lockfile);
FREE(handle->arch);
FREELIST(handle->architectures);
FREE(handle->gpgdir);
FREE(handle->sandboxuser);
FREELIST(handle->noupgrade);
FREELIST(handle->noextract);
FREELIST(handle->ignorepkg);
@ -162,22 +185,34 @@ alpm_cb_log SYMEXPORT alpm_option_get_logcb(alpm_handle_t *handle)
return handle->logcb;
}
void SYMEXPORT *alpm_option_get_logcb_ctx(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return NULL);
return handle->logcb_ctx;
}
alpm_cb_download SYMEXPORT alpm_option_get_dlcb(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return NULL);
return handle->dlcb;
}
void SYMEXPORT *alpm_option_get_dlcb_ctx(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return NULL);
return handle->dlcb_ctx;
}
alpm_cb_fetch SYMEXPORT alpm_option_get_fetchcb(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return NULL);
return handle->fetchcb;
}
alpm_cb_totaldl SYMEXPORT alpm_option_get_totaldlcb(alpm_handle_t *handle)
void SYMEXPORT *alpm_option_get_fetchcb_ctx(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return NULL);
return handle->totaldlcb;
return handle->fetchcb_ctx;
}
alpm_cb_event SYMEXPORT alpm_option_get_eventcb(alpm_handle_t *handle)
@ -186,18 +221,36 @@ alpm_cb_event SYMEXPORT alpm_option_get_eventcb(alpm_handle_t *handle)
return handle->eventcb;
}
void SYMEXPORT *alpm_option_get_eventcb_ctx(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return NULL);
return handle->eventcb_ctx;
}
alpm_cb_question SYMEXPORT alpm_option_get_questioncb(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return NULL);
return handle->questioncb;
}
void SYMEXPORT *alpm_option_get_questioncb_ctx(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return NULL);
return handle->questioncb_ctx;
}
alpm_cb_progress SYMEXPORT alpm_option_get_progresscb(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return NULL);
return handle->progresscb;
}
void SYMEXPORT *alpm_option_get_progresscb_ctx(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return NULL);
return handle->progresscb_ctx;
}
const char SYMEXPORT *alpm_option_get_root(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return NULL);
@ -240,6 +293,12 @@ const char SYMEXPORT *alpm_option_get_gpgdir(alpm_handle_t *handle)
return handle->gpgdir;
}
const char SYMEXPORT *alpm_option_get_sandboxuser(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return NULL);
return handle->sandboxuser;
}
int SYMEXPORT alpm_option_get_usesyslog(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return -1);
@ -282,10 +341,10 @@ alpm_list_t SYMEXPORT *alpm_option_get_assumeinstalled(alpm_handle_t *handle)
return handle->assumeinstalled;
}
const char SYMEXPORT *alpm_option_get_arch(alpm_handle_t *handle)
alpm_list_t SYMEXPORT *alpm_option_get_architectures(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return NULL);
return handle->arch;
return handle->architectures;
}
int SYMEXPORT alpm_option_get_checkspace(alpm_handle_t *handle)
@ -303,59 +362,54 @@ const char SYMEXPORT *alpm_option_get_dbext(alpm_handle_t *handle)
int SYMEXPORT alpm_option_get_parallel_downloads(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return -1);
#ifdef HAVE_LIBCURL
return handle->parallel_downloads;
#else
return 1;
#endif
}
int SYMEXPORT alpm_option_set_logcb(alpm_handle_t *handle, alpm_cb_log cb)
int SYMEXPORT alpm_option_set_logcb(alpm_handle_t *handle, alpm_cb_log cb, void *ctx)
{
CHECK_HANDLE(handle, return -1);
handle->logcb = cb;
handle->logcb_ctx = ctx;
return 0;
}
int SYMEXPORT alpm_option_set_dlcb(alpm_handle_t *handle, alpm_cb_download cb)
int SYMEXPORT alpm_option_set_dlcb(alpm_handle_t *handle, alpm_cb_download cb, void *ctx)
{
CHECK_HANDLE(handle, return -1);
handle->dlcb = cb;
handle->dlcb_ctx = ctx;
return 0;
}
int SYMEXPORT alpm_option_set_fetchcb(alpm_handle_t *handle, alpm_cb_fetch cb)
int SYMEXPORT alpm_option_set_fetchcb(alpm_handle_t *handle, alpm_cb_fetch cb, void *ctx)
{
CHECK_HANDLE(handle, return -1);
handle->fetchcb = cb;
handle->fetchcb_ctx = ctx;
return 0;
}
int SYMEXPORT alpm_option_set_totaldlcb(alpm_handle_t *handle, alpm_cb_totaldl cb)
{
CHECK_HANDLE(handle, return -1);
handle->totaldlcb = cb;
return 0;
}
int SYMEXPORT alpm_option_set_eventcb(alpm_handle_t *handle, alpm_cb_event cb)
int SYMEXPORT alpm_option_set_eventcb(alpm_handle_t *handle, alpm_cb_event cb, void *ctx)
{
CHECK_HANDLE(handle, return -1);
handle->eventcb = cb;
handle->eventcb_ctx = ctx;
return 0;
}
int SYMEXPORT alpm_option_set_questioncb(alpm_handle_t *handle, alpm_cb_question cb)
int SYMEXPORT alpm_option_set_questioncb(alpm_handle_t *handle, alpm_cb_question cb, void *ctx)
{
CHECK_HANDLE(handle, return -1);
handle->questioncb = cb;
handle->questioncb_ctx = ctx;
return 0;
}
int SYMEXPORT alpm_option_set_progresscb(alpm_handle_t *handle, alpm_cb_progress cb)
int SYMEXPORT alpm_option_set_progresscb(alpm_handle_t *handle, alpm_cb_progress cb, void *ctx)
{
CHECK_HANDLE(handle, return -1);
handle->progresscb = cb;
handle->progresscb_ctx = ctx;
return 0;
}
@ -548,6 +602,19 @@ int SYMEXPORT alpm_option_set_gpgdir(alpm_handle_t *handle, const char *gpgdir)
return 0;
}
int SYMEXPORT alpm_option_set_sandboxuser(alpm_handle_t *handle, const char *sandboxuser)
{
CHECK_HANDLE(handle, return -1);
if(handle->sandboxuser) {
FREE(handle->sandboxuser);
}
STRDUP(handle->sandboxuser, sandboxuser, RET_ERR(handle, ALPM_ERR_MEMORY, -1));
_alpm_log(handle, ALPM_LOG_DEBUG, "option 'sandboxuser' = %s\n", handle->sandboxuser);
return 0;
}
int SYMEXPORT alpm_option_set_usesyslog(alpm_handle_t *handle, int usesyslog)
{
CHECK_HANDLE(handle, return -1);
@ -737,11 +804,29 @@ int SYMEXPORT alpm_option_remove_assumeinstalled(alpm_handle_t *handle, const al
return 0;
}
int SYMEXPORT alpm_option_set_arch(alpm_handle_t *handle, const char *arch)
int SYMEXPORT alpm_option_add_architecture(alpm_handle_t *handle, const char *arch)
{
handle->architectures = alpm_list_add(handle->architectures, strdup(arch));
return 0;
}
int SYMEXPORT alpm_option_set_architectures(alpm_handle_t *handle, alpm_list_t *arches)
{
CHECK_HANDLE(handle, return -1);
if(handle->arch) FREE(handle->arch);
STRDUP(handle->arch, arch, RET_ERR(handle, ALPM_ERR_MEMORY, -1));
if(handle->architectures) FREELIST(handle->architectures);
handle->architectures = alpm_list_strdup(arches);
return 0;
}
int SYMEXPORT alpm_option_remove_architecture(alpm_handle_t *handle, const char *arch)
{
char *vdata = NULL;
CHECK_HANDLE(handle, return -1);
handle->architectures = alpm_list_remove_str(handle->architectures, arch, &vdata);
if(vdata != NULL) {
FREE(vdata);
return 1;
}
return 0;
}
@ -850,15 +935,17 @@ int SYMEXPORT alpm_option_get_remote_file_siglevel(alpm_handle_t *handle)
}
}
int SYMEXPORT alpm_option_get_disable_dl_timeout(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return -1);
return handle->disable_dl_timeout;
}
int SYMEXPORT alpm_option_set_disable_dl_timeout(alpm_handle_t *handle,
unsigned short disable_dl_timeout)
{
CHECK_HANDLE(handle, return -1);
#ifdef HAVE_LIBCURL
handle->disable_dl_timeout = disable_dl_timeout;
#else
(void)disable_dl_timeout; /* silence unused variable warnings */
#endif
return 0;
}
@ -866,11 +953,21 @@ int SYMEXPORT alpm_option_set_parallel_downloads(alpm_handle_t *handle,
unsigned int num_streams)
{
CHECK_HANDLE(handle, return -1);
#ifdef HAVE_LIBCURL
ASSERT(num_streams >= 1, RET_ERR(handle, ALPM_ERR_WRONG_ARGS, -1));
handle->parallel_downloads = num_streams;
#else
(void)num_streams; /* silence unused variable warnings */
#endif
return 0;
}
int SYMEXPORT alpm_option_get_disable_sandbox(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return -1);
return handle->disable_sandbox;
}
int SYMEXPORT alpm_option_set_disable_sandbox(alpm_handle_t *handle,
unsigned short disable_sandbox)
{
CHECK_HANDLE(handle, return -1);
handle->disable_sandbox = disable_sandbox;
return 0;
}

View file

@ -1,7 +1,7 @@
/*
* handle.h
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify
@ -26,6 +26,7 @@
#include "alpm_list.h"
#include "alpm.h"
#include "trans.h"
#ifdef HAVE_LIBCURL
#include <curl/curl.h>
@ -34,23 +35,23 @@
#define EVENT(h, e) \
do { \
if((h)->eventcb) { \
(h)->eventcb((alpm_event_t *) (e)); \
(h)->eventcb((h)->eventcb_ctx, (alpm_event_t *) (e)); \
} \
} while(0)
#define QUESTION(h, q) \
do { \
if((h)->questioncb) { \
(h)->questioncb((alpm_question_t *) (q)); \
(h)->questioncb((h)->questioncb_ctx, (alpm_question_t *) (q)); \
} \
} while(0)
#define PROGRESS(h, e, p, per, n, r) \
do { \
if((h)->progresscb) { \
(h)->progresscb(e, p, per, n, r); \
(h)->progresscb((h)->progresscb_ctx, e, p, per, n, r); \
} \
} while(0)
struct __alpm_handle_t {
struct _alpm_handle_t {
/* internal usage */
alpm_db_t *db_local; /* local db pointer */
alpm_list_t *dbs_sync; /* List of (alpm_db_t *) */
@ -60,22 +61,30 @@ struct __alpm_handle_t {
#ifdef HAVE_LIBCURL
/* libcurl handle */
CURLM *curlm;
unsigned short disable_dl_timeout;
unsigned int parallel_downloads; /* number of download streams */
alpm_list_t *server_errors;
#endif
unsigned short disable_dl_timeout;
unsigned short disable_sandbox;
unsigned int parallel_downloads; /* number of download streams */
#ifdef HAVE_LIBGPGME
alpm_list_t *known_keys; /* keys verified to be in our keychain */
#endif
/* callback functions */
alpm_cb_log logcb; /* Log callback function */
void *logcb_ctx;
alpm_cb_download dlcb; /* Download callback function */
alpm_cb_totaldl totaldlcb; /* Total download callback function */
void *dlcb_ctx;
alpm_cb_fetch fetchcb; /* Download file callback function */
void *fetchcb_ctx;
alpm_cb_event eventcb;
void *eventcb_ctx;
alpm_cb_question questioncb;
void *questioncb_ctx;
alpm_cb_progress progresscb;
void *progresscb_ctx;
/* filesystem paths */
char *root; /* Root path, default '/' */
@ -83,6 +92,7 @@ struct __alpm_handle_t {
char *logfile; /* Name of the log file */
char *lockfile; /* Name of the lock file */
char *gpgdir; /* Directory where GnuPG files are stored */
char *sandboxuser; /* User to switch to for sensitive operations */
alpm_list_t *cachedirs; /* Paths to pacman cache directories */
alpm_list_t *hookdirs; /* Paths to hook directories */
alpm_list_t *overwrite_files; /* Paths that may be overwritten */
@ -95,7 +105,7 @@ struct __alpm_handle_t {
alpm_list_t *assumeinstalled; /* List of virtual packages used to satisfy dependencies */
/* options */
char *arch; /* Architecture of packages we should allow */
alpm_list_t *architectures; /* Architectures of packages we should allow */
int usesyslog; /* Use syslog instead of logfile? */ /* TODO move to frontend */
int checkspace; /* Check disk space before installing */
char *dbext; /* Sync DB extension */

View file

@ -1,7 +1,7 @@
/*
* hook.c
*
* Copyright (c) 2015-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2015-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
*
* 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

View file

@ -1,7 +1,7 @@
/*
* hook.h
*
* Copyright (c) 2015-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2015-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
*
* 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

View file

@ -1,13 +0,0 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
Name: libalpm
Description: Arch Linux package management library
URL: http://www.archlinux.org/pacman/
Version: @LIB_VERSION@
Requires.private: libarchive @pc_crypto@ @pc_libcurl@ @pc_gpgme@
Cflags: -I${includedir} @LFS_CFLAGS@
Libs: -L${libdir} -lalpm
Libs.private: @LIBS@ @pc_gpgme_libs@ @LIBINTL@

View file

@ -4,7 +4,7 @@
/*
* libarchive-compat.h
*
* Copyright (c) 2013-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2013-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
*
* 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
@ -24,48 +24,28 @@
static inline int _alpm_archive_read_free(struct archive *archive)
{
#if ARCHIVE_VERSION_NUMBER >= 3000000
return archive_read_free(archive);
#else
return archive_read_finish(archive);
#endif
}
static inline int64_t _alpm_archive_compressed_ftell(struct archive *archive)
{
#if ARCHIVE_VERSION_NUMBER >= 3000000
return archive_filter_bytes(archive, -1);
#else
return archive_position_compressed(archive);
#endif
}
static inline int _alpm_archive_read_open_file(struct archive *archive,
const char *filename, size_t block_size)
{
#if ARCHIVE_VERSION_NUMBER >= 3000000
return archive_read_open_filename(archive, filename, block_size);
#else
return archive_read_open_file(archive, filename, block_size);
#endif
}
static inline int _alpm_archive_filter_code(struct archive *archive)
{
#if ARCHIVE_VERSION_NUMBER >= 3000000
return archive_filter_code(archive, 0);
#else
return archive_compression(archive);
#endif
}
static inline int _alpm_archive_read_support_filter_all(struct archive *archive)
{
#if ARCHIVE_VERSION_NUMBER >= 3000000
return archive_read_support_filter_all(archive);
#else
return archive_read_support_compression_all(archive);
#endif
}
#endif /* LIBARCHIVE_COMPAT_H */

View file

@ -1,7 +1,7 @@
/*
* log.c
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify
@ -107,6 +107,6 @@ void _alpm_log(alpm_handle_t *handle, alpm_loglevel_t flag, const char *fmt, ...
}
va_start(args, fmt);
handle->logcb(flag, fmt, args);
handle->logcb(handle->logcb_ctx, flag, fmt, args);
va_end(args);
}

View file

@ -1,7 +1,7 @@
/*
* log.h
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify

View file

@ -24,6 +24,9 @@ libalpm_sources = files('''
pkghash.h pkghash.c
rawstr.c
remove.h remove.c
sandbox.h sandbox.c
sandbox_fs.h sandbox_fs.c
sandbox_syscalls.h sandbox_syscalls.c
signing.c signing.h
sync.h sync.c
trans.h trans.c

View file

@ -1,7 +1,7 @@
/*
* package.c
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2005, 2006 by Christian Hamar <krics@linuxforum.hu>
@ -21,6 +21,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <limits.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
@ -98,6 +99,7 @@ static alpm_list_t *_pkg_get_provides(alpm_pkg_t *pkg) { return pkg->provides;
static alpm_list_t *_pkg_get_replaces(alpm_pkg_t *pkg) { return pkg->replaces; }
static alpm_filelist_t *_pkg_get_files(alpm_pkg_t *pkg) { return &(pkg->files); }
static alpm_list_t *_pkg_get_backup(alpm_pkg_t *pkg) { return pkg->backup; }
static alpm_list_t *_pkg_get_xdata(alpm_pkg_t *pkg) { return pkg->xdata; }
static void *_pkg_changelog_open(alpm_pkg_t UNUSED *pkg)
{
@ -138,7 +140,7 @@ static int _pkg_force_load(alpm_pkg_t UNUSED *pkg) { return 0; }
/** The standard package operations struct. Get fields directly from the
* struct itself with no abstraction layer or any type of lazy loading.
*/
struct pkg_operations default_pkg_ops = {
const struct pkg_operations default_pkg_ops = {
.get_base = _pkg_get_base,
.get_desc = _pkg_get_desc,
.get_url = _pkg_get_url,
@ -162,6 +164,7 @@ struct pkg_operations default_pkg_ops = {
.get_replaces = _pkg_get_replaces,
.get_files = _pkg_get_files,
.get_backup = _pkg_get_backup,
.get_xdata = _pkg_get_xdata,
.changelog_open = _pkg_changelog_open,
.changelog_read = _pkg_changelog_read,
@ -191,6 +194,12 @@ const char SYMEXPORT *alpm_pkg_get_base(alpm_pkg_t *pkg)
return pkg->ops->get_base(pkg);
}
alpm_handle_t SYMEXPORT *alpm_pkg_get_handle(alpm_pkg_t *pkg)
{
ASSERT(pkg != NULL, return NULL);
return pkg->handle;
}
const char SYMEXPORT *alpm_pkg_get_name(alpm_pkg_t *pkg)
{
ASSERT(pkg != NULL, return NULL);
@ -479,6 +488,13 @@ int SYMEXPORT alpm_pkg_has_scriptlet(alpm_pkg_t *pkg)
return pkg->ops->has_scriptlet(pkg);
}
alpm_list_t SYMEXPORT *alpm_pkg_get_xdata(alpm_pkg_t *pkg)
{
ASSERT(pkg != NULL, return NULL);
pkg->handle->pm_errno = ALPM_ERR_OK;
return pkg->ops->get_xdata(pkg);
}
static void find_requiredby(alpm_pkg_t *pkg, alpm_db_t *db, alpm_list_t **reqs,
int optional)
{
@ -671,6 +687,30 @@ static void free_deplist(alpm_list_t *deps)
alpm_list_free(deps);
}
alpm_pkg_xdata_t *_alpm_pkg_parse_xdata(const char *string)
{
alpm_pkg_xdata_t *pd;
const char *sep;
if(string == NULL || (sep = strchr(string, '=')) == NULL) {
return NULL;
}
CALLOC(pd, 1, sizeof(alpm_pkg_xdata_t), return NULL);
STRNDUP(pd->name, string, sep - string, FREE(pd); return NULL);
STRDUP(pd->value, sep + 1, FREE(pd->name); FREE(pd); return NULL);
return pd;
}
void _alpm_pkg_xdata_free(alpm_pkg_xdata_t *pd)
{
if(pd) {
free(pd->name);
free(pd->value);
free(pd);
}
}
void _alpm_pkg_free(alpm_pkg_t *pkg)
{
if(pkg == NULL) {
@ -701,6 +741,8 @@ void _alpm_pkg_free(alpm_pkg_t *pkg)
}
alpm_list_free_inner(pkg->backup, (alpm_list_fn_free)_alpm_backup_free);
alpm_list_free(pkg->backup);
alpm_list_free_inner(pkg->xdata, (alpm_list_fn_free)_alpm_pkg_xdata_free);
alpm_list_free(pkg->xdata);
free_deplist(pkg->depends);
free_deplist(pkg->optdepends);
free_deplist(pkg->checkdepends);
@ -803,3 +845,58 @@ int SYMEXPORT alpm_pkg_should_ignore(alpm_handle_t *handle, alpm_pkg_t *pkg)
return 0;
}
/* check that package metadata meets our requirements */
int _alpm_pkg_check_meta(alpm_pkg_t *pkg)
{
char *c;
int error_found = 0;
#define EPKGMETA(error) do { \
error_found = -1; \
_alpm_log(pkg->handle, ALPM_LOG_ERROR, error, pkg->name, pkg->version); \
} while(0)
/* sanity check */
if(pkg->handle == NULL) {
return -1;
}
/* immediate bail if package doesn't have name or version */
if(pkg->name == NULL || pkg->name[0] == '\0'
|| pkg->version == NULL || pkg->version[0] == '\0') {
_alpm_log(pkg->handle, ALPM_LOG_ERROR,
_("invalid package metadata (name or version missing)"));
return -1;
}
if(pkg->name[0] == '-' || pkg->name[0] == '.') {
EPKGMETA(_("invalid metadata for package %s-%s "
"(package name cannot start with '.' or '-')\n"));
}
if(_alpm_fnmatch(pkg->name, "[![:alnum:]+_.@-]") == 0) {
EPKGMETA(_("invalid metadata for package %s-%s "
"(package name contains invalid characters)\n"));
}
/* multiple '-' in pkgver can cause local db entries for different packages
* to overlap (e.g. foo-1=2-3 and foo=1-2-3 both give foo-1-2-3) */
if((c = strchr(pkg->version, '-')) && (strchr(c + 1, '-'))) {
EPKGMETA(_("invalid metadata for package %s-%s "
"(package version contains invalid characters)\n"));
}
if(strchr(pkg->version, '/')) {
EPKGMETA(_("invalid metadata for package %s-%s "
"(package version contains invalid characters)\n"));
}
/* local db entry is <pkgname>-<pkgver> */
if(strlen(pkg->name) + strlen(pkg->version) + 1 > NAME_MAX) {
EPKGMETA(_("invalid metadata for package %s-%s "
"(package name and version too long)\n"));
}
#undef EPKGMETA
return error_found;
}

View file

@ -1,7 +1,7 @@
/*
* package.h
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2006 by David Kimpe <dnaku@frugalware.org>
@ -67,6 +67,8 @@ struct pkg_operations {
alpm_filelist_t *(*get_files) (alpm_pkg_t *);
alpm_list_t *(*get_backup) (alpm_pkg_t *);
alpm_list_t *(*get_xdata) (alpm_pkg_t *);
void *(*changelog_open) (alpm_pkg_t *);
size_t (*changelog_read) (void *, size_t, const alpm_pkg_t *, void *);
int (*changelog_close) (const alpm_pkg_t *, void *);
@ -83,9 +85,9 @@ struct pkg_operations {
* The actual definition is in package.c so it can have access to the
* default accessor functions which are defined there.
*/
extern struct pkg_operations default_pkg_ops;
extern const struct pkg_operations default_pkg_ops;
struct __alpm_pkg_t {
struct _alpm_pkg_t {
unsigned long name_hash;
char *filename;
char *base;
@ -121,7 +123,7 @@ struct __alpm_pkg_t {
alpm_list_t *removes; /* in transaction targets only */
alpm_pkg_t *oldpkg; /* in transaction targets only */
struct pkg_operations *ops;
const struct pkg_operations *ops;
alpm_filelist_t files;
@ -136,6 +138,8 @@ struct __alpm_pkg_t {
alpm_pkgreason_t reason;
int scriptlet;
alpm_list_t *xdata;
/* Bitfield from alpm_dbinfrq_t */
int infolevel;
/* Bitfield from alpm_pkgvalidation_t */
@ -158,4 +162,9 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
int _alpm_pkg_cmp(const void *p1, const void *p2);
int _alpm_pkg_compare_versions(alpm_pkg_t *local_pkg, alpm_pkg_t *pkg);
alpm_pkg_xdata_t *_alpm_pkg_parse_xdata(const char *string);
void _alpm_pkg_xdata_free(alpm_pkg_xdata_t *pd);
int _alpm_pkg_check_meta(alpm_pkg_t *pkg);
#endif /* ALPM_PACKAGE_H */

View file

@ -1,7 +1,7 @@
/*
* pkghash.c
*
* Copyright (c) 2011-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2011-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
*
* 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

View file

@ -1,7 +1,7 @@
/*
* pkghash.h
*
* Copyright (c) 2011-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2011-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
*
* 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
@ -32,7 +32,7 @@
* A combination of a hash table and a list, allowing for fast look-up
* by package name but also iteration over the packages.
*/
struct __alpm_pkghash_t {
struct _alpm_pkghash_t {
/** data held by the hash table */
alpm_list_t **hash_table;
/** head node of the hash table data in normal list format */
@ -45,7 +45,7 @@ struct __alpm_pkghash_t {
unsigned int limit;
};
typedef struct __alpm_pkghash_t alpm_pkghash_t;
typedef struct _alpm_pkghash_t alpm_pkghash_t;
alpm_pkghash_t *_alpm_pkghash_create(unsigned int size);

View file

@ -1,6 +1,7 @@
# Set of available languages.
ar
ast
az_AZ
bg
br
ca
@ -17,6 +18,7 @@ eu_ES
fi
fr
gl
hi
hr
hu
id

View file

@ -15,11 +15,11 @@ XGETTEXT_OPTIONS = \
# This is the copyright holder that gets inserted into the header of the
# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
# package.
COPYRIGHT_HOLDER = Pacman Development Team <pacman-dev@archlinux.org>
COPYRIGHT_HOLDER = Pacman Development Team <pacman-dev@lists.archlinux.org>
# This is the email address or URL to which the translators shall report
# bugs in the untranslated strings.
MSGID_BUGS_ADDRESS = http://bugs.archlinux.org/index.php?project=3
MSGID_BUGS_ADDRESS = https://gitlab.archlinux.org/pacman/pacman/-/issues
# This is the list of locale categories, beyond LC_MESSAGES, for which the
# message catalogs shall be used. It is usually empty.

View file

@ -1,6 +1,6 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Pacman Development Team <pacman-dev@archlinux.org>
# This file is distributed under the same license as the PACKAGE package.
# Copyright (C) YEAR "Pacman Development Team <pacman-dev@archlinux.org>"
# This file is distributed under the same license as the libalpm package.
#
# Translators:
# kraim <biskraim@gmail.com>, 2013
@ -16,9 +16,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2019-10-21 17:23+1000\n"
"PO-Revision-Date: 2019-10-07 08:12+0000\n"
"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/pacman/pacman/-/issues\n"
"POT-Creation-Date: 2024-07-14 19:10+1000\n"
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"Language-Team: Arabic (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/ar/)\n"
@ -29,17 +29,17 @@ msgstr ""
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#: lib/libalpm/add.c:91 lib/libalpm/sync.c:290
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s محدّثة -- سأتجاوزها\n"
#: lib/libalpm/add.c:95
#: lib/libalpm/add.c:94
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s محدّثة -- سأعيد تثبيتها\n"
#: lib/libalpm/add.c:100
#: lib/libalpm/add.c:99
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "سأُنزِل الحزمة %s (من %s إلى %s)\n"
@ -49,17 +49,17 @@ msgstr "سأُنزِل الحزمة %s (من %s إلى %s)\n"
msgid "cannot allocate disk archive object"
msgstr ""
#: lib/libalpm/add.c:143 lib/libalpm/util.c:382
#: lib/libalpm/add.c:143 lib/libalpm/util.c:408
#, c-format
msgid "warning given when extracting %s (%s)\n"
msgstr "تحذير عند الاستخراج %s (%s)\n"
#: lib/libalpm/add.c:146 lib/libalpm/util.c:385
#: lib/libalpm/add.c:146 lib/libalpm/util.c:411
#, c-format
msgid "could not extract %s (%s)\n"
msgstr "تعذّر استخراج %s (%s)\n"
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:574 lib/libalpm/remove.c:542
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:707 lib/libalpm/remove.c:550
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "تعذر إعادة تسمية %s إلى %s (%s)\n"
@ -102,137 +102,152 @@ msgstr "الاستخراج: عدم الكتابة فوق المجلد بالمل
msgid "unable to extract %s.pacnew: path too long"
msgstr ""
#: lib/libalpm/add.c:513 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#: lib/libalpm/add.c:510 lib/libalpm/util.c:354 lib/libalpm/util.c:624
#, c-format
msgid "could not get current working directory\n"
msgstr "غير قادر على جلب مجلد العمل الحالي\n"
#: lib/libalpm/add.c:518 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/util.c:650
#: lib/libalpm/add.c:515 lib/libalpm/util.c:359 lib/libalpm/util.c:629
#: lib/libalpm/util.c:684
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "غير قادر على تحويل المجلد إلى %s (%s)\n"
#: lib/libalpm/add.c:575 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#: lib/libalpm/add.c:571 lib/libalpm/util.c:429 lib/libalpm/util.c:808
#, c-format
msgid "could not restore working directory (%s)\n"
msgstr "تعذر استعادة مجلد العمل (%s)\n"
#: lib/libalpm/add.c:583
#: lib/libalpm/add.c:579
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "حدثت مشكلة أثناء ترقية %s\n"
#: lib/libalpm/add.c:589
#: lib/libalpm/add.c:585
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "حدثت مشكلة أثناء تثبيت %s\n"
#: lib/libalpm/add.c:604
#: lib/libalpm/add.c:600
#, c-format
msgid "could not update database entry %s-%s\n"
msgstr "غير قادر على تحديث مدخل قاعدة البيانات %s-%s\n"
#: lib/libalpm/add.c:615
#: lib/libalpm/add.c:610
#, c-format
msgid "could not add entry '%s' in cache\n"
msgstr "غير قادر على إضافة المدخل '%s' إلى المخبئيات\n"
#: lib/libalpm/be_local.c:267
#: lib/libalpm/be_local.c:271
#, c-format
msgid "error while reading file %s: %s\n"
msgstr "خطأ أثناء قراءة الملف %s: %s\n"
#: lib/libalpm/be_local.c:364
#: lib/libalpm/be_local.c:382
#, c-format
msgid "removing invalid database: %s\n"
msgstr "تجري إزالة قاعدة البيانات الغير صالحة: %s\n"
#: lib/libalpm/be_local.c:415 lib/libalpm/be_local.c:905
#: lib/libalpm/be_local.c:433 lib/libalpm/be_local.c:947
#, c-format
msgid "could not create directory %s: %s\n"
msgstr "غير قادر على إنشاء الدليل %s : %s\n"
#: lib/libalpm/be_local.c:590 lib/libalpm/be_sync.c:386
#: lib/libalpm/be_local.c:608 lib/libalpm/be_sync.c:339
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "مدخل قاعدة بيانات غير صالح '%s'\n"
#: lib/libalpm/be_local.c:598
#: lib/libalpm/be_local.c:616
#, c-format
msgid "duplicated database entry '%s'\n"
msgstr "مدخل قاعدة بيانات مكرر '%s'\n"
#: lib/libalpm/be_local.c:610
#: lib/libalpm/be_local.c:628
#, c-format
msgid "corrupted database entry '%s'\n"
msgstr "مدخل قاعدة بيانات معطوب '%s'\n"
#: lib/libalpm/be_local.c:713 lib/libalpm/be_local.c:809
#: lib/libalpm/be_local.c:954 lib/libalpm/be_local.c:1051
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:422 lib/libalpm/util.c:253
#: lib/libalpm/util.c:269
#: lib/libalpm/be_local.c:663
#, fuzzy, c-format
msgid "unknown install reason for package %s: %s\n"
msgstr "نوع التّحقق غير مألوف في الحزمة %s: %s\n"
#: lib/libalpm/be_local.c:743 lib/libalpm/be_local.c:856
#: lib/libalpm/be_local.c:996 lib/libalpm/be_local.c:1102
#: lib/libalpm/diskspace.c:135 lib/libalpm/dload.c:792 lib/libalpm/util.c:273
#: lib/libalpm/util.c:289
#, c-format
msgid "could not open file %s: %s\n"
msgstr "غير قادر على فتح اللمف %s: %s\n"
#: lib/libalpm/be_local.c:729 lib/libalpm/be_sync.c:650
#: lib/libalpm/be_local.c:759 lib/libalpm/be_sync.c:612
#, c-format
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr "%s قاعدة البيانات غير متناسقة : اسم الحزمة غير مطابق %s\n"
#: lib/libalpm/be_local.c:735 lib/libalpm/be_sync.c:656
#: lib/libalpm/be_local.c:765 lib/libalpm/be_sync.c:618
#, c-format
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr "%s قاعدة البيانات غير متناسقة : إصدار الحزمة غير مطابق %s\n"
#: lib/libalpm/be_local.c:776
#: lib/libalpm/be_local.c:806
#, c-format
msgid "unknown validation type for package %s: %s\n"
msgstr "نوع التّحقق غير مألوف في الحزمة %s: %s\n"
#: lib/libalpm/be_package.c:479 lib/libalpm/be_package.c:637
#: lib/libalpm/be_package.c:650
#: lib/libalpm/be_local.c:841
#, c-format
msgid "%s: unknown key '%s' in local database\n"
msgstr ""
#: lib/libalpm/be_package.c:255
#, c-format
msgid "%s: unknown key '%s' in package description\n"
msgstr ""
#: lib/libalpm/be_package.c:482 lib/libalpm/be_package.c:635
#: lib/libalpm/be_package.c:647
#, c-format
msgid "error while reading package %s: %s\n"
msgstr "خطأ أثناء قراءة الحزمة %s: %s\n"
#: lib/libalpm/be_package.c:493 lib/libalpm/be_package.c:517
#: lib/libalpm/be_package.c:495 lib/libalpm/be_package.c:518
#, c-format
msgid "error while reading mtree of package %s: %s\n"
msgstr "خطأ أثناء قراءة mtree في الحزمة %s: %s\n"
#: lib/libalpm/be_package.c:603
#: lib/libalpm/be_package.c:601
#, c-format
msgid "could not parse package description file in %s\n"
msgstr "تعذّر تحليل ملف وصف الحزمة في %s\n"
#: lib/libalpm/be_package.c:608
#: lib/libalpm/be_package.c:606
#, c-format
msgid "missing package name in %s\n"
msgstr "اسم الحزمة مفقود في %s\n"
#: lib/libalpm/be_package.c:612
#: lib/libalpm/be_package.c:610
#, c-format
msgid "missing package version in %s\n"
msgstr "إصدارة الحزمة مفقودة في %s\n"
#: lib/libalpm/be_package.c:616
#: lib/libalpm/be_package.c:614
#, c-format
msgid "invalid package version in %s\n"
msgstr "إصدارة الحزمة غير صالح في %s\n"
#: lib/libalpm/be_package.c:657
#: lib/libalpm/be_package.c:653
#, c-format
msgid "missing package metadata in %s\n"
msgstr "معلومات الحزمة مفقودة في %s\n"
#: lib/libalpm/be_package.c:750
#: lib/libalpm/be_package.c:745
#, c-format
msgid "failed to read signature file: %s\n"
msgstr "فشل في قراءة ملف التّوقيع: %s\n"
#: lib/libalpm/be_package.c:779 lib/libalpm/sync.c:953
#: lib/libalpm/be_package.c:768 lib/libalpm/sync.c:976
#, c-format
msgid "required key missing from keyring\n"
msgstr "مفتاح ضروري غير موجود في حلقة المفاتيح\n"
@ -242,32 +257,37 @@ msgstr "مفتاح ضروري غير موجود في حلقة المفاتيح\n
msgid "removing invalid file: %s\n"
msgstr "يجري حذف ملف غير صالح: %s\n"
#: lib/libalpm/be_sync.c:515
#: lib/libalpm/be_sync.c:471
#, c-format
msgid "could not parse package description file '%s' from db '%s'\n"
msgstr "تعذّر تحليل ملف وصف الحزمة '%s' من قاعدة البيانات '%s'\n"
#: lib/libalpm/be_sync.c:522
#: lib/libalpm/be_sync.c:486
#, c-format
msgid "could not read db '%s' (%s)\n"
msgstr ""
#: lib/libalpm/be_sync.c:556 lib/libalpm/be_sync.c:561
#: lib/libalpm/be_sync.c:519 lib/libalpm/be_sync.c:524
#, c-format
msgid "%s database is inconsistent: filename of package %s is illegal\n"
msgstr "%s قاعدة البيانات غير متناسقة : اسم ملف الحزمة غير قانوني %s\n"
#: lib/libalpm/be_sync.c:566
#: lib/libalpm/be_sync.c:529
#, c-format
msgid "%s database is inconsistent: filename of package %s is too long\n"
msgstr "%s قاعدة البيانات غير متناسقة : اسم ملف الحزمة طويل جدًا %s\n"
#: lib/libalpm/be_sync.c:632
#: lib/libalpm/be_sync.c:594
#, c-format
msgid "unknown database file: %s\n"
msgstr "ملف قاعدة البيانات مجهول : %s\n"
#: lib/libalpm/db.c:370
#: lib/libalpm/be_sync.c:712
#, c-format
msgid "%s: unknown key '%s' in sync database\n"
msgstr ""
#: lib/libalpm/db.c:413
#, c-format
msgid "database path is undefined\n"
msgstr "مسار قاعدة البيانات غير معروف\n"
@ -287,12 +307,12 @@ msgstr "%s سيتم إزالتها بعد %s اعتمادياتها\n"
msgid "%s will be installed before its %s dependency\n"
msgstr "%s سيتم تثبيتها قبل %s اعتمادياتها\n"
#: lib/libalpm/deps.c:681 lib/libalpm/deps.c:712
#: lib/libalpm/deps.c:666 lib/libalpm/deps.c:697
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "تجاهل الحزمة %s-%s\n"
#: lib/libalpm/deps.c:869
#: lib/libalpm/deps.c:842
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "تعذّر تحليل \"%s\"، اعتمادية لـ \"%s\"\n"
@ -307,80 +327,121 @@ msgstr "تعذّر الحصول على معلومات نظام الملفات م
msgid "could not open file: %s: %s\n"
msgstr "تعذر فتح الملف: %s: %s\n"
#: lib/libalpm/diskspace.c:146 lib/libalpm/diskspace.c:159
#: lib/libalpm/diskspace.c:154 lib/libalpm/diskspace.c:167
#, c-format
msgid "could not get filesystem information\n"
msgstr "غير قادر على جلب معلومات نظام الملفات\n"
#: lib/libalpm/diskspace.c:242
#: lib/libalpm/diskspace.c:254
#, c-format
msgid "could not get file information for %s\n"
msgstr ""
#: lib/libalpm/diskspace.c:256 lib/libalpm/diskspace.c:315
#: lib/libalpm/diskspace.c:268 lib/libalpm/diskspace.c:327
#, c-format
msgid "could not determine mount point for file %s\n"
msgstr "تعذّر تحديد نقطة الوصل من أجل الملف %s\n"
#: lib/libalpm/diskspace.c:354
#: lib/libalpm/diskspace.c:366
#, c-format
msgid "Partition %s too full: %jd blocks needed, %ju blocks free\n"
msgstr ""
#: lib/libalpm/diskspace.c:379 lib/libalpm/diskspace.c:433
#: lib/libalpm/diskspace.c:391 lib/libalpm/diskspace.c:445
#, c-format
msgid "could not determine filesystem mount points\n"
msgstr "تعذّر تحديد نقاط وصل أنظمة الملفات\n"
#: lib/libalpm/diskspace.c:385
#: lib/libalpm/diskspace.c:397
#, c-format
msgid "could not determine cachedir mount point %s\n"
msgstr "تعذّر تحديد نقطة وصل مجلد المخبئيات %s\n"
#: lib/libalpm/diskspace.c:438
#: lib/libalpm/diskspace.c:450
#, c-format
msgid "could not determine root mount point %s\n"
msgstr "غير قادر على تحديد نقطة وصل الجذر %s\n"
#: lib/libalpm/diskspace.c:486
#: lib/libalpm/diskspace.c:498
#, c-format
msgid "Partition %s is mounted read only\n"
msgstr "القسم %s موصول بصفة القراءة فقط\n"
#: lib/libalpm/dload.c:161
#, c-format
msgid "disk"
msgstr "القرص"
#: lib/libalpm/dload.c:348
#: lib/libalpm/dload.c:107
#, c-format
msgid "failed to create temporary file for download\n"
msgstr "غير قادر على إنشاء ملف مؤقت للتحميل\n"
#: lib/libalpm/dload.c:393
#: lib/libalpm/dload.c:198
#, c-format
msgid "url '%s' is invalid\n"
msgstr "العنوان '%s' غير صالح\n"
msgid ""
"too many errors from %s, skipping for the remainder of this transaction\n"
msgstr ""
#: lib/libalpm/dload.c:464 lib/libalpm/dload.c:485 lib/libalpm/dload.c:496
#: lib/libalpm/dload.c:215
#, c-format
msgid "fatal error from %s, skipping for the remainder of this transaction\n"
msgstr ""
#: lib/libalpm/dload.c:310
#, c-format
msgid "disk"
msgstr "القرص"
#: lib/libalpm/dload.c:532 lib/libalpm/dload.c:570 lib/libalpm/dload.c:583
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "فشل في استقبال الملف '%s' من %s : %s\n"
#: lib/libalpm/dload.c:477
#: lib/libalpm/dload.c:562
#, c-format
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
msgstr "فشل في استقبال الملف '%s' من %s : تم تجاوز حجم التحميل\n"
#: lib/libalpm/dload.c:532
#: lib/libalpm/dload.c:685
#, c-format
msgid "%s appears to be truncated: %jd/%jd bytes\n"
msgstr "%s يبدو غير موثوقًا: %jd/%jd بايت\n"
#: lib/libalpm/dload.c:677 lib/libalpm/dload.c:706
#: lib/libalpm/dload.c:776
#, c-format
msgid "failed to download %s\n"
msgstr "tag td jpldg %s\n"
msgid "url '%s' is invalid\n"
msgstr "العنوان '%s' غير صالح\n"
#: lib/libalpm/dload.c:864
#, c-format
msgid "failed to setup a download payload for %s\n"
msgstr ""
#: lib/libalpm/dload.c:876
#, c-format
msgid "curl returned error %d from transfer\n"
msgstr ""
#: lib/libalpm/dload.c:900
#, c-format
msgid "curl transfer error: %d\n"
msgstr ""
#: lib/libalpm/dload.c:963
#, fuzzy, c-format
msgid "could not chdir to download directory %s\n"
msgstr "تعذّر التعديل على مجلد الجذر (%s)\n"
#: lib/libalpm/dload.c:968
#, c-format
msgid "switching to sandbox user '%s' failed!\n"
msgstr ""
#: lib/libalpm/dload.c:1361 lib/libalpm/sync.c:861
#, c-format
msgid "failed to retrieve some files\n"
msgstr "تعذّر استقبال بعض الملفات\n"
#: lib/libalpm/dload.c:1384
#, c-format
msgid "download completed successfully but no file in the cache\n"
msgstr ""
#: lib/libalpm/error.c:40
#, c-format
@ -497,7 +558,7 @@ msgstr "لا يوجد خواديم مهيأة للمستودع"
msgid "transaction already initialized"
msgstr "المُبادلة مهيأة بالفعل"
#: lib/libalpm/error.c:90 lib/libalpm/error.c:94
#: lib/libalpm/error.c:90 lib/libalpm/error.c:96
#, c-format
msgid "transaction not initialized"
msgstr "لم يتم تهيئة المُبادلة"
@ -507,86 +568,86 @@ msgstr "لم يتم تهيئة المُبادلة"
msgid "duplicate target"
msgstr "الهدف مكرر"
#: lib/libalpm/error.c:96
#: lib/libalpm/error.c:94
#, c-format
msgid "duplicate filename"
msgstr ""
#: lib/libalpm/error.c:98
#, c-format
msgid "transaction not prepared"
msgstr "المُبادلة غير مجهزة"
#: lib/libalpm/error.c:98
#: lib/libalpm/error.c:100
#, c-format
msgid "transaction aborted"
msgstr "أحبطت المُبادلة"
#: lib/libalpm/error.c:100
#: lib/libalpm/error.c:102
#, c-format
msgid "operation not compatible with the transaction type"
msgstr "العملية غير متوافقة مع نوع المُبادلة"
#: lib/libalpm/error.c:102
#: lib/libalpm/error.c:104
#, c-format
msgid "transaction commit attempt when database is not locked"
msgstr "تتم محاولة بدء المُبادلة عند إلغاء قفل قاعدة البيانات"
#: lib/libalpm/error.c:104
#: lib/libalpm/error.c:106
#, c-format
msgid "failed to run transaction hooks"
msgstr ""
#: lib/libalpm/error.c:107
#: lib/libalpm/error.c:109
#, c-format
msgid "could not find or read package"
msgstr "غير قادر على إيجاد أو قراءة الحزمة"
#: lib/libalpm/error.c:109
#: lib/libalpm/error.c:111
#, c-format
msgid "operation cancelled due to ignorepkg"
msgstr "ألغيت العملية بسبب حزمة متجاهلة"
#: lib/libalpm/error.c:111
#: lib/libalpm/error.c:113
#, c-format
msgid "invalid or corrupted package"
msgstr "حزمة غير صالحة أو معطوبة"
#: lib/libalpm/error.c:113
#: lib/libalpm/error.c:115
#, c-format
msgid "invalid or corrupted package (checksum)"
msgstr "حزمة معطوبة أو غير صالحة (البصمة)"
#: lib/libalpm/error.c:115
#: lib/libalpm/error.c:117
#, c-format
msgid "invalid or corrupted package (PGP signature)"
msgstr "حزمة معطوبة أو غير صالحة (توقيع PGP)"
#: lib/libalpm/error.c:117
#: lib/libalpm/error.c:119
#, c-format
msgid "package missing required signature"
msgstr "الحزمة مفقودة مطلوب توقيع"
#: lib/libalpm/error.c:119
#: lib/libalpm/error.c:121
#, c-format
msgid "cannot open package file"
msgstr "غير قادر على فتح ملف الحزمة"
#: lib/libalpm/error.c:121
#: lib/libalpm/error.c:123
#, c-format
msgid "cannot remove all files for package"
msgstr "غير قادر على مسح جميع ملفات الجزمة"
#: lib/libalpm/error.c:123
#: lib/libalpm/error.c:125
#, c-format
msgid "package filename is not valid"
msgstr "اسم ملف الحزمة غير سليم"
#: lib/libalpm/error.c:125
#: lib/libalpm/error.c:127
#, c-format
msgid "package architecture is not valid"
msgstr "معمارية الحزمة غير سليمة"
#: lib/libalpm/error.c:127
#, c-format
msgid "could not find repository for target"
msgstr "تعذّر العثور على المستودع الهدف"
#: lib/libalpm/error.c:130
#, c-format
msgid "missing PGP signature"
@ -652,12 +713,12 @@ msgstr ""
msgid "unexpected error"
msgstr "خطأ غير متوقع"
#: lib/libalpm/handle.c:153
#: lib/libalpm/handle.c:165
#, c-format
msgid "lock file missing %s\n"
msgstr "الملف المغلق مفقود %s\n"
#: lib/libalpm/handle.c:159
#: lib/libalpm/handle.c:171
#, c-format
msgid "could not remove lock file %s\n"
msgstr "تعذّر إزالة ملف القفل %s\n"
@ -729,7 +790,7 @@ msgstr ""
msgid "unable to run hook %s: %s\n"
msgstr ""
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:386
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:378
#, c-format
msgid "could not open directory: %s: %s\n"
msgstr "تعذّر فتح المجلد: %s: %s\n"
@ -739,7 +800,7 @@ msgstr "تعذّر فتح المجلد: %s: %s\n"
msgid "could not open file: %s%s: %s\n"
msgstr ""
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:259
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:279
#, c-format
msgid "could not stat file %s: %s\n"
msgstr "تعذّر إحصاء الملف %s: %s\n"
@ -749,283 +810,320 @@ msgstr "تعذّر إحصاء الملف %s: %s\n"
msgid "could not read directory: %s: %s\n"
msgstr ""
#: lib/libalpm/package.c:578
#: lib/libalpm/package.c:614
#, c-format
msgid "could not fully load metadata for package %s-%s\n"
msgstr "غير قادر على استيراد معلومات الميتا للحزمة %s-%s\n"
#: lib/libalpm/remove.c:119
#: lib/libalpm/package.c:869
#, c-format
msgid "invalid package metadata (name or version missing)"
msgstr ""
#: lib/libalpm/package.c:874
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name cannot start with '.' or "
"'-')\n"
msgstr ""
#: lib/libalpm/package.c:878
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name contains invalid "
"characters)\n"
msgstr ""
#: lib/libalpm/package.c:885 lib/libalpm/package.c:889
#, c-format
msgid ""
"invalid metadata for package %s-%s (package version contains invalid "
"characters)\n"
msgstr ""
#: lib/libalpm/package.c:895
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name and version too long)\n"
msgstr ""
#: lib/libalpm/remove.c:111
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "لم يعثر على %s في قاعدة البيانات -- يجري التجاوز\n"
#: lib/libalpm/remove.c:154
#: lib/libalpm/remove.c:146
#, c-format
msgid "removing %s from target list\n"
msgstr "يجري حذف %s من قائمة الأهداف\n"
#: lib/libalpm/remove.c:346
#: lib/libalpm/remove.c:338
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr ""
"تعذر إزالة الملف '%s': %s\n"
"\n"
#: lib/libalpm/remove.c:411 lib/libalpm/remove.c:420
#: lib/libalpm/remove.c:403 lib/libalpm/remove.c:412
#, c-format
msgid "could not backup %s due to PATH_MAX overflow\n"
msgstr ""
#: lib/libalpm/remove.c:562
#: lib/libalpm/remove.c:570
#, c-format
msgid "cannot remove %s (%s)\n"
msgstr "تعذّر إزالة %s (%s)\n"
#: lib/libalpm/remove.c:735
#: lib/libalpm/remove.c:743
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "تعذّر إزالة مدخل قاعدة البيانات %s-%s\n"
#: lib/libalpm/remove.c:740
#: lib/libalpm/remove.c:748
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "تعذر إزالة المدخل '%s' من المخبئيات\n"
#: lib/libalpm/signing.c:171
#: lib/libalpm/signing.c:163
#, c-format
msgid "Public keyring not found; have you run '%s'?\n"
msgstr ""
#: lib/libalpm/signing.c:207 lib/libalpm/signing.c:784
#: lib/libalpm/signing.c:199 lib/libalpm/signing.c:773
#, c-format
msgid "GPGME error: %s\n"
msgstr ""
#: lib/libalpm/signing.c:284
#: lib/libalpm/signing.c:275
#, c-format
msgid "looking up key %s using WKD\n"
msgstr ""
#: lib/libalpm/signing.c:293
#: lib/libalpm/signing.c:289
#, c-format
msgid "gpg error: %s\n"
msgstr ""
#: lib/libalpm/signing.c:441 lib/libalpm/signing.c:515
#: lib/libalpm/signing.c:440 lib/libalpm/signing.c:513
#, c-format
msgid "keyring is not writable\n"
msgstr ""
#: lib/libalpm/signing.c:539
#: lib/libalpm/signing.c:537
#, c-format
msgid "key \"%s\" on keyserver\n"
msgstr ""
#: lib/libalpm/signing.c:544
#: lib/libalpm/signing.c:542
#, c-format
msgid "key \"%s\" could not be imported\n"
msgstr ""
#: lib/libalpm/signing.c:548
#: lib/libalpm/signing.c:546
#, c-format
msgid "key \"%s\" could not be looked up remotely\n"
msgstr ""
#: lib/libalpm/signing.c:943 lib/libalpm/sync.c:1022
#: lib/libalpm/signing.c:932 lib/libalpm/sync.c:1052
#, c-format
msgid "%s: missing required signature\n"
msgstr "التوقيع المطلوب مفقود :%s\n"
#: lib/libalpm/signing.c:958
#: lib/libalpm/signing.c:947
#, c-format
msgid "%s: signature from \"%s\" is marginal trust\n"
msgstr ""
#: lib/libalpm/signing.c:966
#: lib/libalpm/signing.c:955
#, c-format
msgid "%s: signature from \"%s\" is unknown trust\n"
msgstr ""
#: lib/libalpm/signing.c:973
#: lib/libalpm/signing.c:962
#, c-format
msgid "%s: signature from \"%s\" should never be trusted\n"
msgstr ""
#: lib/libalpm/signing.c:985
#: lib/libalpm/signing.c:974
#, c-format
msgid "%s: key \"%s\" is unknown\n"
msgstr ""
#: lib/libalpm/signing.c:994
#: lib/libalpm/signing.c:983
#, c-format
msgid "%s: key \"%s\" is disabled\n"
msgstr ""
#: lib/libalpm/signing.c:998
#: lib/libalpm/signing.c:987
#, c-format
msgid "%s: signature from \"%s\" is expired\n"
msgstr ""
#: lib/libalpm/signing.c:1002
#: lib/libalpm/signing.c:991
#, c-format
msgid "%s: signature from \"%s\" is invalid\n"
msgstr ""
#: lib/libalpm/signing.c:1079 lib/libalpm/signing.c:1147
#: lib/libalpm/signing.c:1226
#: lib/libalpm/signing.c:1049 lib/libalpm/signing.c:1110
#: lib/libalpm/signing.c:1189
#, c-format
msgid "%s: signature format error\n"
msgstr ""
#: lib/libalpm/signing.c:1179 lib/libalpm/signing.c:1212
#: lib/libalpm/signing.c:1220
#: lib/libalpm/signing.c:1142 lib/libalpm/signing.c:1175
#: lib/libalpm/signing.c:1183
#, c-format
msgid "%s: unsupported signature format\n"
msgstr ""
#: lib/libalpm/sync.c:99
#: lib/libalpm/sync.c:96
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: يجري تجاهل تحديث الحزمة (%s => %s) \n"
#: lib/libalpm/sync.c:111
#: lib/libalpm/sync.c:108
#, c-format
msgid "%s: ignoring package downgrade (%s => %s)\n"
msgstr "%s: يجري تجاهل إرجاع الحزمة (%s => %s) \n"
#: lib/libalpm/sync.c:114
#: lib/libalpm/sync.c:111
#, c-format
msgid "%s: downgrading from version %s to version %s\n"
msgstr "%s: يجري الإرجاع من الإصدار %s إلى الإصدار %s\n"
#: lib/libalpm/sync.c:120
#: lib/libalpm/sync.c:117
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr "%s: (%s) المحلّي أحدث من %s (%s)\n"
#: lib/libalpm/sync.c:161
#: lib/libalpm/sync.c:158
#, c-format
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
msgstr "يجري تجاهل استبدال الحزمة (%s-%s => %s-%s)\n"
#: lib/libalpm/sync.c:177
#: lib/libalpm/sync.c:174
#, c-format
msgid "cannot replace %s by %s\n"
msgstr "تعذر استبدال %s بـ %s\n"
#: lib/libalpm/sync.c:535 lib/libalpm/sync.c:605
#: lib/libalpm/sync.c:477
#, c-format
msgid "packages %s and %s have the same filename: %s\n"
msgstr ""
#: lib/libalpm/sync.c:546 lib/libalpm/sync.c:618
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr "حدثت تعارضات حزميّة تعذّر تحليلها\n"
#: lib/libalpm/sync.c:555
#: lib/libalpm/sync.c:566
#, c-format
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgstr " يجري حذف '%s' من قائمة الأهداف بسبب تعارضها مع '%s'\n"
msgid "removing '%s-%s' from target list because it conflicts with '%s-%s'\n"
msgstr ""
#: lib/libalpm/sync.c:849
#: lib/libalpm/sync.c:1020 lib/libalpm/sync.c:1187
#, c-format
msgid "failed to retrieve some files\n"
msgstr "تعذّر استقبال بعض الملفات\n"
msgid "%s: could not find package in cache\n"
msgstr ""
#: lib/libalpm/sync.c:1036
#: lib/libalpm/sync.c:1066
#, c-format
msgid "failed to read file %s: %s\n"
msgstr ""
#: lib/libalpm/sync.c:1223
#: lib/libalpm/sync.c:1324
#, c-format
msgid "not enough free disk space\n"
msgstr "لا توجد مساحة خالية كافية على القرص\n"
#: lib/libalpm/sync.c:1245
#: lib/libalpm/sync.c:1346
#, c-format
msgid "could not commit removal transaction\n"
msgstr "تعذّر بدء مُبادلة الإزالة\n"
#: lib/libalpm/sync.c:1253
#: lib/libalpm/sync.c:1354
#, c-format
msgid "could not commit transaction\n"
msgstr "فشل في بدء المُبادلة\n"
#: lib/libalpm/trans.c:364
#: lib/libalpm/trans.c:369
#, c-format
msgid "could not create temp directory\n"
msgstr "تعذّر إنشاء مجلد مؤقت\n"
#: lib/libalpm/trans.c:379
#: lib/libalpm/trans.c:384
#, c-format
msgid "could not copy tempfile to %s (%s)\n"
msgstr "تعذّر نسخ الملف المؤقّت إلى %s (%s)\n"
#: lib/libalpm/trans.c:410
#: lib/libalpm/trans.c:415
#, c-format
msgid "could not remove %s\n"
msgstr ""
"تعذر إزالة %s\n"
"\n"
#: lib/libalpm/trans.c:414
#: lib/libalpm/trans.c:419
#, c-format
msgid "could not remove tmpdir %s\n"
msgstr "تعذّر إزالة المجلد المؤقّت %s\n"
#: lib/libalpm/util.c:486
#: lib/libalpm/util.c:512
#, c-format
msgid "unable to write to pipe (%s)\n"
msgstr "تعذّرت الكتابة إلى الأنبوب (%s)\n"
#: lib/libalpm/util.c:545
#: lib/libalpm/util.c:571
#, c-format
msgid "unable to read from pipe (%s)\n"
msgstr "تعذّرت القراءة من الأنبوب (%s)\n"
#: lib/libalpm/util.c:609 lib/libalpm/util.c:615
#: lib/libalpm/util.c:641 lib/libalpm/util.c:647
#, c-format
msgid "could not create pipe (%s)\n"
msgstr "غير قادر على إنشاء العبارة (%s)\n"
#: lib/libalpm/util.c:623
#: lib/libalpm/util.c:655
#, c-format
msgid "could not fork a new process (%s)\n"
msgstr "تعذّر تفريع العملية إلى عملية جديدة (%s)\n"
#: lib/libalpm/util.c:646
#: lib/libalpm/util.c:680
#, c-format
msgid "could not change the root directory (%s)\n"
msgstr "تعذّر التعديل على مجلد الجذر (%s)\n"
#: lib/libalpm/util.c:658
#: lib/libalpm/util.c:700
#, c-format
msgid "call to execv failed (%s)\n"
msgstr "تعذّر مخاطبة execv (%s)\n"
#: lib/libalpm/util.c:737
#: lib/libalpm/util.c:779
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr "تعذّر مخاطبةwaitpid (%s)\n"
#: lib/libalpm/util.c:747
#: lib/libalpm/util.c:789
#, c-format
msgid "command failed to execute correctly\n"
msgstr "فشل تطبيق الأمر بشكل صحيح\n"
#: lib/libalpm/util.c:754
#: lib/libalpm/util.c:796
#, c-format
msgid "Unknown signal"
msgstr "إشارة مجهوله"
#: lib/libalpm/util.c:756
#: lib/libalpm/util.c:798
#, c-format
msgid "command terminated by signal %d: %s\n"
msgstr "تم انهاء الامر بواسطة الاشارة %d: %s\n"
#: lib/libalpm/util.c:853
#: lib/libalpm/util.c:916
#, c-format
msgid "no %s cache exists, creating...\n"
msgstr "لا يوجد %s مخبئي، يجري الإنشاء...\n"
#: lib/libalpm/util.c:884
#: lib/libalpm/util.c:947
#, c-format
msgid "couldn't find or create package cache, using %s instead\n"
msgstr "تعذّر إيجاد أو إنشاء مخبئية للحزم ، استخدم %s بدلًا عنها\n"

View file

@ -1,20 +1,21 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Pacman Development Team <pacman-dev@archlinux.org>
# This file is distributed under the same license as the PACKAGE package.
# Copyright (C) YEAR "Pacman Development Team <pacman-dev@archlinux.org>"
# This file is distributed under the same license as the libalpm package.
#
# Translators:
# enolp <enolp@softastur.org>, 2015-2016,2018-2019
# Ḷḷumex03 <tornes@opmbx.org>, 2014
# Ḷḷumex03 <tornes@opmbx.org>, 2014
# Ḷḷumex03 <tornes@opmbx.org>, 2014-2015
# enolp <enolp@softastur.org>, 2015-2016,2018-2020
# Ḷḷumex03, 2014
# Ḷḷumex03, 2014
# Ḷḷumex03, 2014
# Ḷḷumex03, 2014-2015
msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2019-10-21 17:23+1000\n"
"PO-Revision-Date: 2019-10-07 08:12+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"Language-Team: Asturian (http://www.transifex.com/toofishes/archlinux-pacman/"
"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/pacman/pacman/-/issues\n"
"POT-Creation-Date: 2024-07-14 19:10+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Ḷḷumex03, 2014\n"
"Language-Team: Asturian (http://app.transifex.com/toofishes/archlinux-pacman/"
"language/ast/)\n"
"Language: ast\n"
"MIME-Version: 1.0\n"
@ -22,17 +23,17 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: lib/libalpm/add.c:91 lib/libalpm/sync.c:290
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s ta anováu -- saltando\n"
#: lib/libalpm/add.c:95
#: lib/libalpm/add.c:94
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s ta anováu -- reinstalando\n"
#: lib/libalpm/add.c:100
#: lib/libalpm/add.c:99
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "baxando de versión el paquete %s (%s => %s)\n"
@ -42,17 +43,17 @@ msgstr "baxando de versión el paquete %s (%s => %s)\n"
msgid "cannot allocate disk archive object"
msgstr "nun pue allugase l'oxetu del archivu del discu"
#: lib/libalpm/add.c:143 lib/libalpm/util.c:382
#: lib/libalpm/add.c:143 lib/libalpm/util.c:408
#, c-format
msgid "warning given when extracting %s (%s)\n"
msgstr "alvertencia dada al estrayer el paquete %s (%s)\n"
#: lib/libalpm/add.c:146 lib/libalpm/util.c:385
#: lib/libalpm/add.c:146 lib/libalpm/util.c:411
#, c-format
msgid "could not extract %s (%s)\n"
msgstr "nun pudo estrayese %s (%s)\n"
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:574 lib/libalpm/remove.c:542
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:707 lib/libalpm/remove.c:550
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "nun pudo renomase %s a %s (%s)\n"
@ -97,139 +98,154 @@ msgstr "estración: nun pue sobrescribise'l direutoriu col ficheru %s\n"
msgid "unable to extract %s.pacnew: path too long"
msgstr "nun pue estrayese %s.pacnew: camín perllargu"
#: lib/libalpm/add.c:513 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#: lib/libalpm/add.c:510 lib/libalpm/util.c:354 lib/libalpm/util.c:624
#, c-format
msgid "could not get current working directory\n"
msgstr "nun pudo consiguise'l direutoriu de trabayu actual\n"
#: lib/libalpm/add.c:518 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/util.c:650
#: lib/libalpm/add.c:515 lib/libalpm/util.c:359 lib/libalpm/util.c:629
#: lib/libalpm/util.c:684
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "nun pudo cambiase'l direutoriu a %s (%s)\n"
#: lib/libalpm/add.c:575 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#: lib/libalpm/add.c:571 lib/libalpm/util.c:429 lib/libalpm/util.c:808
#, c-format
msgid "could not restore working directory (%s)\n"
msgstr "nun pudo restaurase'l direutoriu de trabayu (%s)\n"
#: lib/libalpm/add.c:583
#: lib/libalpm/add.c:579
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "asocedió un problema al anovar %s\n"
#: lib/libalpm/add.c:589
#: lib/libalpm/add.c:585
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "asocedió un problema al instalar %s\n"
#: lib/libalpm/add.c:604
#: lib/libalpm/add.c:600
#, c-format
msgid "could not update database entry %s-%s\n"
msgstr "nun pudo anovase la entrada de base de datos %s-%s\n"
#: lib/libalpm/add.c:615
#: lib/libalpm/add.c:610
#, c-format
msgid "could not add entry '%s' in cache\n"
msgstr "nun pudo amestase la entrada '%s' na caché\n"
#: lib/libalpm/be_local.c:267
#: lib/libalpm/be_local.c:271
#, c-format
msgid "error while reading file %s: %s\n"
msgstr "fallu al lleer el ficheru %s: %s\n"
#: lib/libalpm/be_local.c:364
#: lib/libalpm/be_local.c:382
#, c-format
msgid "removing invalid database: %s\n"
msgstr "desaniciando base de datos non válida: %s\n"
#: lib/libalpm/be_local.c:415 lib/libalpm/be_local.c:905
#: lib/libalpm/be_local.c:433 lib/libalpm/be_local.c:947
#, c-format
msgid "could not create directory %s: %s\n"
msgstr "nun pudo crease'l direutoriu %s: %s\n"
#: lib/libalpm/be_local.c:590 lib/libalpm/be_sync.c:386
#: lib/libalpm/be_local.c:608 lib/libalpm/be_sync.c:339
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "nome non válidu pa la base de datos '%s'\n"
#: lib/libalpm/be_local.c:598
#: lib/libalpm/be_local.c:616
#, c-format
msgid "duplicated database entry '%s'\n"
msgstr "entrada de base de datos duplicada '%s'\n"
#: lib/libalpm/be_local.c:610
#: lib/libalpm/be_local.c:628
#, c-format
msgid "corrupted database entry '%s'\n"
msgstr "entrada de base de datos toyida '%s'\n"
#: lib/libalpm/be_local.c:713 lib/libalpm/be_local.c:809
#: lib/libalpm/be_local.c:954 lib/libalpm/be_local.c:1051
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:422 lib/libalpm/util.c:253
#: lib/libalpm/util.c:269
#: lib/libalpm/be_local.c:663
#, fuzzy, c-format
msgid "unknown install reason for package %s: %s\n"
msgstr "triba de validación desconocida pal paquete %s: %s\n"
#: lib/libalpm/be_local.c:743 lib/libalpm/be_local.c:856
#: lib/libalpm/be_local.c:996 lib/libalpm/be_local.c:1102
#: lib/libalpm/diskspace.c:135 lib/libalpm/dload.c:792 lib/libalpm/util.c:273
#: lib/libalpm/util.c:289
#, c-format
msgid "could not open file %s: %s\n"
msgstr "nun pudo abrise'l ficheru %s: %s\n"
#: lib/libalpm/be_local.c:729 lib/libalpm/be_sync.c:650
#: lib/libalpm/be_local.c:759 lib/libalpm/be_sync.c:612
#, c-format
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr ""
"la base de datos %s ye inconsistente: el nome nun concasa nel paquete %s\n"
#: lib/libalpm/be_local.c:735 lib/libalpm/be_sync.c:656
#: lib/libalpm/be_local.c:765 lib/libalpm/be_sync.c:618
#, c-format
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr ""
"la base de datos %s ye inconsistente: la versión nun concasa nel paquete %s\n"
#: lib/libalpm/be_local.c:776
#: lib/libalpm/be_local.c:806
#, c-format
msgid "unknown validation type for package %s: %s\n"
msgstr "triba de validación desconocida pal paquete %s: %s\n"
#: lib/libalpm/be_package.c:479 lib/libalpm/be_package.c:637
#: lib/libalpm/be_package.c:650
#: lib/libalpm/be_local.c:841
#, c-format
msgid "%s: unknown key '%s' in local database\n"
msgstr ""
#: lib/libalpm/be_package.c:255
#, c-format
msgid "%s: unknown key '%s' in package description\n"
msgstr ""
#: lib/libalpm/be_package.c:482 lib/libalpm/be_package.c:635
#: lib/libalpm/be_package.c:647
#, c-format
msgid "error while reading package %s: %s\n"
msgstr "fallu al lleer el paquete %s: %s\n"
#: lib/libalpm/be_package.c:493 lib/libalpm/be_package.c:517
#: lib/libalpm/be_package.c:495 lib/libalpm/be_package.c:518
#, c-format
msgid "error while reading mtree of package %s: %s\n"
msgstr "fallu al lleer el mtree del paquete %s: %s\n"
#: lib/libalpm/be_package.c:603
#: lib/libalpm/be_package.c:601
#, c-format
msgid "could not parse package description file in %s\n"
msgstr "nun pudo analizase'l ficheru de descripción del paquete en %s\n"
#: lib/libalpm/be_package.c:608
#: lib/libalpm/be_package.c:606
#, c-format
msgid "missing package name in %s\n"
msgstr "nome de paquete faltante en %s\n"
#: lib/libalpm/be_package.c:612
#: lib/libalpm/be_package.c:610
#, c-format
msgid "missing package version in %s\n"
msgstr "versión de paquete faltante en %s\n"
#: lib/libalpm/be_package.c:616
#: lib/libalpm/be_package.c:614
#, c-format
msgid "invalid package version in %s\n"
msgstr "versión del paquete non válida en %s\n"
#: lib/libalpm/be_package.c:657
#: lib/libalpm/be_package.c:653
#, c-format
msgid "missing package metadata in %s\n"
msgstr "datos meta de paquete faltantes en %s\n"
#: lib/libalpm/be_package.c:750
#: lib/libalpm/be_package.c:745
#, c-format
msgid "failed to read signature file: %s\n"
msgstr "fallu al lleer el ficheru de robla: %s\n"
#: lib/libalpm/be_package.c:779 lib/libalpm/sync.c:953
#: lib/libalpm/be_package.c:768 lib/libalpm/sync.c:976
#, c-format
msgid "required key missing from keyring\n"
msgstr "clave riquida del aniellu claves faltante\n"
@ -239,36 +255,41 @@ msgstr "clave riquida del aniellu claves faltante\n"
msgid "removing invalid file: %s\n"
msgstr "desaniciando ficheru non válidu: %s\n"
#: lib/libalpm/be_sync.c:515
#: lib/libalpm/be_sync.c:471
#, c-format
msgid "could not parse package description file '%s' from db '%s'\n"
msgstr ""
"nun pudo analizase'l ficheru de descripción del paquete '%s' de la base de "
"datos '%s'\n"
#: lib/libalpm/be_sync.c:522
#: lib/libalpm/be_sync.c:486
#, c-format
msgid "could not read db '%s' (%s)\n"
msgstr ""
#: lib/libalpm/be_sync.c:556 lib/libalpm/be_sync.c:561
#: lib/libalpm/be_sync.c:519 lib/libalpm/be_sync.c:524
#, c-format
msgid "%s database is inconsistent: filename of package %s is illegal\n"
msgstr ""
"la base de datos %s ye inconsistente: el nome del paquete %s ye illegal\n"
#: lib/libalpm/be_sync.c:566
#: lib/libalpm/be_sync.c:529
#, c-format
msgid "%s database is inconsistent: filename of package %s is too long\n"
msgstr ""
"la base de datos %s ye inconsistente: el nome del paquete %s ye perllargu\n"
#: lib/libalpm/be_sync.c:632
#: lib/libalpm/be_sync.c:594
#, c-format
msgid "unknown database file: %s\n"
msgstr "ficheru de base de datos desconocíu: %s\n"
#: lib/libalpm/db.c:370
#: lib/libalpm/be_sync.c:712
#, c-format
msgid "%s: unknown key '%s' in sync database\n"
msgstr ""
#: lib/libalpm/db.c:413
#, c-format
msgid "database path is undefined\n"
msgstr "nun ta definíu'l camín de la base de datos\n"
@ -288,12 +309,12 @@ msgstr "%s desaniciaráse dempués de la so dependencia %s\n"
msgid "%s will be installed before its %s dependency\n"
msgstr "%s desaniciaráse enantes de la so dependencia %s\n"
#: lib/libalpm/deps.c:681 lib/libalpm/deps.c:712
#: lib/libalpm/deps.c:666 lib/libalpm/deps.c:697
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "inorando paquete %s-%s\n"
#: lib/libalpm/deps.c:869
#: lib/libalpm/deps.c:842
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "nun pue iguase \"%s\", una dependencia de \"%s\"\n"
@ -308,80 +329,121 @@ msgstr "nun pudo consiguise la información del sistema ficheros pa %s: %s\n"
msgid "could not open file: %s: %s\n"
msgstr "nun pudo abrise'l ficheru: %s: %s\n"
#: lib/libalpm/diskspace.c:146 lib/libalpm/diskspace.c:159
#: lib/libalpm/diskspace.c:154 lib/libalpm/diskspace.c:167
#, c-format
msgid "could not get filesystem information\n"
msgstr "nun pudo consiguise la información del sistema de ficheros\n"
#: lib/libalpm/diskspace.c:242
#: lib/libalpm/diskspace.c:254
#, c-format
msgid "could not get file information for %s\n"
msgstr "nun pudo consiguise la información pa %s\n"
#: lib/libalpm/diskspace.c:256 lib/libalpm/diskspace.c:315
#: lib/libalpm/diskspace.c:268 lib/libalpm/diskspace.c:327
#, c-format
msgid "could not determine mount point for file %s\n"
msgstr "nun pudo determinase'l puntu montaxe pal ficheru %s\n"
#: lib/libalpm/diskspace.c:354
#: lib/libalpm/diskspace.c:366
#, c-format
msgid "Partition %s too full: %jd blocks needed, %ju blocks free\n"
msgstr "La partición %s ta enllena: necesítense %jd, %ju bloques llibres\n"
#: lib/libalpm/diskspace.c:379 lib/libalpm/diskspace.c:433
#: lib/libalpm/diskspace.c:391 lib/libalpm/diskspace.c:445
#, c-format
msgid "could not determine filesystem mount points\n"
msgstr "nun pudieron determinase los puntos de montaxe del sistema ficheros\n"
#: lib/libalpm/diskspace.c:385
#: lib/libalpm/diskspace.c:397
#, c-format
msgid "could not determine cachedir mount point %s\n"
msgstr "nun pudo determinase'l puntu del direutoriu caché %s\n"
#: lib/libalpm/diskspace.c:438
#: lib/libalpm/diskspace.c:450
#, c-format
msgid "could not determine root mount point %s\n"
msgstr "nun pudo determinase'l puntu de montaxe root %s\n"
#: lib/libalpm/diskspace.c:486
#: lib/libalpm/diskspace.c:498
#, c-format
msgid "Partition %s is mounted read only\n"
msgstr "La partición %s ta montada como namái llectura\n"
#: lib/libalpm/dload.c:161
#, c-format
msgid "disk"
msgstr "discu"
#: lib/libalpm/dload.c:348
#: lib/libalpm/dload.c:107
#, c-format
msgid "failed to create temporary file for download\n"
msgstr "fallu al crear el ficheru temporal pa la descarga\n"
#: lib/libalpm/dload.c:393
#: lib/libalpm/dload.c:198
#, c-format
msgid "url '%s' is invalid\n"
msgstr "l'enllaz '%s' ye inválidu\n"
msgid ""
"too many errors from %s, skipping for the remainder of this transaction\n"
msgstr ""
#: lib/libalpm/dload.c:464 lib/libalpm/dload.c:485 lib/libalpm/dload.c:496
#: lib/libalpm/dload.c:215
#, c-format
msgid "fatal error from %s, skipping for the remainder of this transaction\n"
msgstr ""
#: lib/libalpm/dload.c:310
#, c-format
msgid "disk"
msgstr "discu"
#: lib/libalpm/dload.c:532 lib/libalpm/dload.c:570 lib/libalpm/dload.c:583
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "fallu recibiendo'l ficheru '%s' de %s: %s\n"
#: lib/libalpm/dload.c:477
#: lib/libalpm/dload.c:562
#, c-format
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
msgstr "fallu recibiendo'l ficheru '%s' de %s: tamañu de descarga superáu\n"
#: lib/libalpm/dload.c:532
#: lib/libalpm/dload.c:685
#, c-format
msgid "%s appears to be truncated: %jd/%jd bytes\n"
msgstr ""
#: lib/libalpm/dload.c:677 lib/libalpm/dload.c:706
#: lib/libalpm/dload.c:776
#, c-format
msgid "failed to download %s\n"
msgstr "fallu al lleer %s\n"
msgid "url '%s' is invalid\n"
msgstr "l'enllaz '%s' ye inválidu\n"
#: lib/libalpm/dload.c:864
#, c-format
msgid "failed to setup a download payload for %s\n"
msgstr ""
#: lib/libalpm/dload.c:876
#, c-format
msgid "curl returned error %d from transfer\n"
msgstr ""
#: lib/libalpm/dload.c:900
#, c-format
msgid "curl transfer error: %d\n"
msgstr ""
#: lib/libalpm/dload.c:963
#, fuzzy, c-format
msgid "could not chdir to download directory %s\n"
msgstr "nun pudo cambiase'l direutoriu root (%s)\n"
#: lib/libalpm/dload.c:968
#, c-format
msgid "switching to sandbox user '%s' failed!\n"
msgstr ""
#: lib/libalpm/dload.c:1361 lib/libalpm/sync.c:861
#, c-format
msgid "failed to retrieve some files\n"
msgstr "fallu al recuperar dellos ficheros\n"
#: lib/libalpm/dload.c:1384
#, c-format
msgid "download completed successfully but no file in the cache\n"
msgstr ""
#: lib/libalpm/error.c:40
#, c-format
@ -498,7 +560,7 @@ msgstr "nun se configuró dengún sirvidor pal repositoriu"
msgid "transaction already initialized"
msgstr "yá s'anició la transaición"
#: lib/libalpm/error.c:90 lib/libalpm/error.c:94
#: lib/libalpm/error.c:90 lib/libalpm/error.c:96
#, c-format
msgid "transaction not initialized"
msgstr "nun s'anició la transaición"
@ -508,86 +570,86 @@ msgstr "nun s'anició la transaición"
msgid "duplicate target"
msgstr "oxetivu duplicáu"
#: lib/libalpm/error.c:96
#: lib/libalpm/error.c:94
#, c-format
msgid "duplicate filename"
msgstr ""
#: lib/libalpm/error.c:98
#, c-format
msgid "transaction not prepared"
msgstr "nun se tresnó la transaición"
#: lib/libalpm/error.c:98
#: lib/libalpm/error.c:100
#, c-format
msgid "transaction aborted"
msgstr "albortóse la transaición"
#: lib/libalpm/error.c:100
#: lib/libalpm/error.c:102
#, c-format
msgid "operation not compatible with the transaction type"
msgstr "la operación nun ye compatible cola triba de transaición"
#: lib/libalpm/error.c:102
#: lib/libalpm/error.c:104
#, c-format
msgid "transaction commit attempt when database is not locked"
msgstr "intentu d'unviu de transaiciones al nun tar bloquiada la base de datos"
#: lib/libalpm/error.c:104
#: lib/libalpm/error.c:106
#, c-format
msgid "failed to run transaction hooks"
msgstr "fallu al executar los gabitos de transaiciones"
#: lib/libalpm/error.c:107
#: lib/libalpm/error.c:109
#, c-format
msgid "could not find or read package"
msgstr "nun pudo alcontrase o lleese'l paquete"
#: lib/libalpm/error.c:109
#: lib/libalpm/error.c:111
#, c-format
msgid "operation cancelled due to ignorepkg"
msgstr "operación encaboxada pola mor de ignorepkg"
#: lib/libalpm/error.c:111
#: lib/libalpm/error.c:113
#, c-format
msgid "invalid or corrupted package"
msgstr "paquete toriáu o non válidu"
#: lib/libalpm/error.c:113
#: lib/libalpm/error.c:115
#, c-format
msgid "invalid or corrupted package (checksum)"
msgstr "paquete toriáu o non válidu (suma de comprobación)"
#: lib/libalpm/error.c:115
#: lib/libalpm/error.c:117
#, c-format
msgid "invalid or corrupted package (PGP signature)"
msgstr "paquete toriáu o non válidu (robla PGP)"
#: lib/libalpm/error.c:117
#: lib/libalpm/error.c:119
#, c-format
msgid "package missing required signature"
msgstr "el paquete rique una robla que falta"
#: lib/libalpm/error.c:119
#: lib/libalpm/error.c:121
#, c-format
msgid "cannot open package file"
msgstr "nun pue abrise'l ficheru de paquete"
#: lib/libalpm/error.c:121
#: lib/libalpm/error.c:123
#, c-format
msgid "cannot remove all files for package"
msgstr "nun puen desaniciase tolos ficheros del paquete"
#: lib/libalpm/error.c:123
#: lib/libalpm/error.c:125
#, c-format
msgid "package filename is not valid"
msgstr "el nome del paquete nun ye válidu"
#: lib/libalpm/error.c:125
#: lib/libalpm/error.c:127
#, c-format
msgid "package architecture is not valid"
msgstr "l'arquietctura del paquete nun ye válida"
#: lib/libalpm/error.c:127
#, c-format
msgid "could not find repository for target"
msgstr "nun pudo alcontrase'l repositoriu pal oxetivu"
#: lib/libalpm/error.c:130
#, c-format
msgid "missing PGP signature"
@ -653,12 +715,12 @@ msgstr ""
msgid "unexpected error"
msgstr "fallu inesperáu"
#: lib/libalpm/handle.c:153
#: lib/libalpm/handle.c:165
#, c-format
msgid "lock file missing %s\n"
msgstr "falta'l ficheru de bloquéu %s\n"
#: lib/libalpm/handle.c:159
#: lib/libalpm/handle.c:171
#, c-format
msgid "could not remove lock file %s\n"
msgstr "nun pudo desaniciase'l ficheru de bloquéu %s\n"
@ -730,7 +792,7 @@ msgstr ""
msgid "unable to run hook %s: %s\n"
msgstr ""
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:386
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:378
#, c-format
msgid "could not open directory: %s: %s\n"
msgstr "nun pudo abrise'l direutoriu: %s: %s\n"
@ -738,9 +800,9 @@ msgstr "nun pudo abrise'l direutoriu: %s: %s\n"
#: lib/libalpm/hook.c:575
#, c-format
msgid "could not open file: %s%s: %s\n"
msgstr ""
msgstr "nun pudo abrise'l ficheru: %s%s: %s\n"
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:259
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:279
#, c-format
msgid "could not stat file %s: %s\n"
msgstr ""
@ -748,282 +810,318 @@ msgstr ""
#: lib/libalpm/hook.c:621
#, c-format
msgid "could not read directory: %s: %s\n"
msgstr ""
msgstr "nun pudo lleese'l ficheru: %s: %s\n"
#: lib/libalpm/package.c:578
#: lib/libalpm/package.c:614
#, c-format
msgid "could not fully load metadata for package %s-%s\n"
msgstr "nun pudieron cargase dafechu los datos meta pal paquete %s-%s\n"
#: lib/libalpm/remove.c:119
#: lib/libalpm/package.c:869
#, c-format
msgid "invalid package metadata (name or version missing)"
msgstr ""
#: lib/libalpm/package.c:874
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name cannot start with '.' or "
"'-')\n"
msgstr ""
#: lib/libalpm/package.c:878
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name contains invalid "
"characters)\n"
msgstr ""
#: lib/libalpm/package.c:885 lib/libalpm/package.c:889
#, c-format
msgid ""
"invalid metadata for package %s-%s (package version contains invalid "
"characters)\n"
msgstr ""
#: lib/libalpm/package.c:895
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name and version too long)\n"
msgstr ""
#: lib/libalpm/remove.c:111
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "nun pudo alcontrase %s na base de datos -- saltando\n"
#: lib/libalpm/remove.c:154
#: lib/libalpm/remove.c:146
#, c-format
msgid "removing %s from target list\n"
msgstr "desaniciando %s de la llista d'oxetivos\n"
#: lib/libalpm/remove.c:346
#: lib/libalpm/remove.c:338
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "nun pue desaniciase'l ficheru '%s': %s\n"
#: lib/libalpm/remove.c:411 lib/libalpm/remove.c:420
#: lib/libalpm/remove.c:403 lib/libalpm/remove.c:412
#, c-format
msgid "could not backup %s due to PATH_MAX overflow\n"
msgstr ""
#: lib/libalpm/remove.c:562
#: lib/libalpm/remove.c:570
#, c-format
msgid "cannot remove %s (%s)\n"
msgstr "nun pue desaniciase %s (%s)\n"
#: lib/libalpm/remove.c:735
#: lib/libalpm/remove.c:743
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "nun pudo desaniciase la entrada de la base de datos %s-%s\n"
#: lib/libalpm/remove.c:740
#: lib/libalpm/remove.c:748
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "nun pudo desaniciase la entrada '%s' de la caché\n"
#: lib/libalpm/signing.c:171
#: lib/libalpm/signing.c:163
#, c-format
msgid "Public keyring not found; have you run '%s'?\n"
msgstr ""
#: lib/libalpm/signing.c:207 lib/libalpm/signing.c:784
#: lib/libalpm/signing.c:199 lib/libalpm/signing.c:773
#, c-format
msgid "GPGME error: %s\n"
msgstr ""
#: lib/libalpm/signing.c:284
#: lib/libalpm/signing.c:275
#, c-format
msgid "looking up key %s using WKD\n"
msgstr ""
#: lib/libalpm/signing.c:293
#: lib/libalpm/signing.c:289
#, c-format
msgid "gpg error: %s\n"
msgstr ""
#: lib/libalpm/signing.c:441 lib/libalpm/signing.c:515
#: lib/libalpm/signing.c:440 lib/libalpm/signing.c:513
#, c-format
msgid "keyring is not writable\n"
msgstr ""
#: lib/libalpm/signing.c:539
#: lib/libalpm/signing.c:537
#, c-format
msgid "key \"%s\" on keyserver\n"
msgstr ""
#: lib/libalpm/signing.c:544
#: lib/libalpm/signing.c:542
#, c-format
msgid "key \"%s\" could not be imported\n"
msgstr ""
#: lib/libalpm/signing.c:548
#: lib/libalpm/signing.c:546
#, c-format
msgid "key \"%s\" could not be looked up remotely\n"
msgstr ""
#: lib/libalpm/signing.c:943 lib/libalpm/sync.c:1022
#: lib/libalpm/signing.c:932 lib/libalpm/sync.c:1052
#, c-format
msgid "%s: missing required signature\n"
msgstr "%s: falta la robla riquida\n"
#: lib/libalpm/signing.c:958
#: lib/libalpm/signing.c:947
#, c-format
msgid "%s: signature from \"%s\" is marginal trust\n"
msgstr ""
#: lib/libalpm/signing.c:966
#: lib/libalpm/signing.c:955
#, c-format
msgid "%s: signature from \"%s\" is unknown trust\n"
msgstr ""
#: lib/libalpm/signing.c:973
#: lib/libalpm/signing.c:962
#, c-format
msgid "%s: signature from \"%s\" should never be trusted\n"
msgstr ""
#: lib/libalpm/signing.c:985
#: lib/libalpm/signing.c:974
#, c-format
msgid "%s: key \"%s\" is unknown\n"
msgstr ""
#: lib/libalpm/signing.c:994
#: lib/libalpm/signing.c:983
#, c-format
msgid "%s: key \"%s\" is disabled\n"
msgstr ""
#: lib/libalpm/signing.c:998
#: lib/libalpm/signing.c:987
#, c-format
msgid "%s: signature from \"%s\" is expired\n"
msgstr ""
#: lib/libalpm/signing.c:1002
#: lib/libalpm/signing.c:991
#, c-format
msgid "%s: signature from \"%s\" is invalid\n"
msgstr ""
#: lib/libalpm/signing.c:1079 lib/libalpm/signing.c:1147
#: lib/libalpm/signing.c:1226
#: lib/libalpm/signing.c:1049 lib/libalpm/signing.c:1110
#: lib/libalpm/signing.c:1189
#, c-format
msgid "%s: signature format error\n"
msgstr ""
#: lib/libalpm/signing.c:1179 lib/libalpm/signing.c:1212
#: lib/libalpm/signing.c:1220
#: lib/libalpm/signing.c:1142 lib/libalpm/signing.c:1175
#: lib/libalpm/signing.c:1183
#, c-format
msgid "%s: unsupported signature format\n"
msgstr ""
#: lib/libalpm/sync.c:99
#: lib/libalpm/sync.c:96
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: inorando anovamientu del paquete (%s => %s)\n"
#: lib/libalpm/sync.c:111
#: lib/libalpm/sync.c:108
#, c-format
msgid "%s: ignoring package downgrade (%s => %s)\n"
msgstr "%s: inorando baxada de versión del paquete (%s => %s)\n"
#: lib/libalpm/sync.c:114
#: lib/libalpm/sync.c:111
#, c-format
msgid "%s: downgrading from version %s to version %s\n"
msgstr "%s: baxando de la versión %s a la %s\n"
#: lib/libalpm/sync.c:120
#: lib/libalpm/sync.c:117
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr "%s: llocal (%s) ye más nuevu que %s (%s)\n"
#: lib/libalpm/sync.c:161
#: lib/libalpm/sync.c:158
#, c-format
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
msgstr "inorando troquéu de paquete (%s-%s => %s-%s)\n"
#: lib/libalpm/sync.c:177
#: lib/libalpm/sync.c:174
#, c-format
msgid "cannot replace %s by %s\n"
msgstr "nun pue trocase %s por %s\n"
#: lib/libalpm/sync.c:535 lib/libalpm/sync.c:605
#: lib/libalpm/sync.c:477
#, c-format
msgid "packages %s and %s have the same filename: %s\n"
msgstr ""
#: lib/libalpm/sync.c:546 lib/libalpm/sync.c:618
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr "deteutaos conflictos de paquete que nun puen iguase\n"
#: lib/libalpm/sync.c:555
#: lib/libalpm/sync.c:566
#, c-format
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgid "removing '%s-%s' from target list because it conflicts with '%s-%s'\n"
msgstr ""
"desaniciando '%s' de la llista d'oxetivos porque ta en conflictu con '%s'\n"
#: lib/libalpm/sync.c:849
#: lib/libalpm/sync.c:1020 lib/libalpm/sync.c:1187
#, c-format
msgid "failed to retrieve some files\n"
msgstr "fallu al recuperar dellos ficheros\n"
msgid "%s: could not find package in cache\n"
msgstr ""
#: lib/libalpm/sync.c:1036
#: lib/libalpm/sync.c:1066
#, c-format
msgid "failed to read file %s: %s\n"
msgstr ""
#: lib/libalpm/sync.c:1223
#: lib/libalpm/sync.c:1324
#, c-format
msgid "not enough free disk space\n"
msgstr "nun hai espaciu llibre abondu\n"
#: lib/libalpm/sync.c:1245
#: lib/libalpm/sync.c:1346
#, c-format
msgid "could not commit removal transaction\n"
msgstr "nun pudo unviase la transaición de desaniciu\n"
#: lib/libalpm/sync.c:1253
#: lib/libalpm/sync.c:1354
#, c-format
msgid "could not commit transaction\n"
msgstr "nun pudo unviase la transaición\n"
#: lib/libalpm/trans.c:364
#: lib/libalpm/trans.c:369
#, c-format
msgid "could not create temp directory\n"
msgstr "nun pudo creaase'l direutoriu temporal\n"
#: lib/libalpm/trans.c:379
#: lib/libalpm/trans.c:384
#, c-format
msgid "could not copy tempfile to %s (%s)\n"
msgstr "nun pudo copiase'l ficheru temporal a %s (%s)\n"
#: lib/libalpm/trans.c:410
#: lib/libalpm/trans.c:415
#, c-format
msgid "could not remove %s\n"
msgstr "nun pudo desaniciase %s\n"
#: lib/libalpm/trans.c:414
#: lib/libalpm/trans.c:419
#, c-format
msgid "could not remove tmpdir %s\n"
msgstr "nun pudo desaniciase'l direutoriu temporal %s\n"
#: lib/libalpm/util.c:486
#: lib/libalpm/util.c:512
#, c-format
msgid "unable to write to pipe (%s)\n"
msgstr ""
#: lib/libalpm/util.c:545
#: lib/libalpm/util.c:571
#, c-format
msgid "unable to read from pipe (%s)\n"
msgstr ""
#: lib/libalpm/util.c:609 lib/libalpm/util.c:615
#: lib/libalpm/util.c:641 lib/libalpm/util.c:647
#, c-format
msgid "could not create pipe (%s)\n"
msgstr ""
#: lib/libalpm/util.c:623
#: lib/libalpm/util.c:655
#, c-format
msgid "could not fork a new process (%s)\n"
msgstr "Nun pudo bifurcase un procesu nuevu (%s)\n"
#: lib/libalpm/util.c:646
#: lib/libalpm/util.c:680
#, c-format
msgid "could not change the root directory (%s)\n"
msgstr "nun pudo cambiase'l direutoriu root (%s)\n"
#: lib/libalpm/util.c:658
#: lib/libalpm/util.c:700
#, c-format
msgid "call to execv failed (%s)\n"
msgstr "llamada a execv fallida (%s)\n"
#: lib/libalpm/util.c:737
#: lib/libalpm/util.c:779
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr "llamada a waitpid fallida (%s)\n"
#: lib/libalpm/util.c:747
#: lib/libalpm/util.c:789
#, c-format
msgid "command failed to execute correctly\n"
msgstr "el comandu falló al executase afayadizamente\n"
#: lib/libalpm/util.c:754
#: lib/libalpm/util.c:796
#, c-format
msgid "Unknown signal"
msgstr "Señal desconocida"
#: lib/libalpm/util.c:756
#: lib/libalpm/util.c:798
#, c-format
msgid "command terminated by signal %d: %s\n"
msgstr "comandu fináu pola señal %d: %s\n"
#: lib/libalpm/util.c:853
#: lib/libalpm/util.c:916
#, c-format
msgid "no %s cache exists, creating...\n"
msgstr "nun esiste'l caché %s, creando...\n"
#: lib/libalpm/util.c:884
#: lib/libalpm/util.c:947
#, c-format
msgid "couldn't find or create package cache, using %s instead\n"
msgstr ""

1133
lib/libalpm/po/az_AZ.po Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,18 +1,18 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Pacman Development Team <pacman-dev@archlinux.org>
# This file is distributed under the same license as the PACKAGE package.
# Copyright (C) YEAR "Pacman Development Team <pacman-dev@archlinux.org>"
# This file is distributed under the same license as the libalpm package.
#
# Translators:
# Galin Iskrenov <loot270@abv.bg>, 2017-2019
# Galin Iskrenov <loot270@abv.bg>, 2017-2019,2022,2024
# Ivailo Monev <xakepa10@gmail.com>, 2014-2016
msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2019-10-21 17:23+1000\n"
"PO-Revision-Date: 2019-10-11 13:05+0000\n"
"Last-Translator: Galin Iskrenov <loot270@abv.bg>\n"
"Language-Team: Bulgarian (http://www.transifex.com/toofishes/archlinux-"
"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/pacman/pacman/-/issues\n"
"POT-Creation-Date: 2024-07-14 19:10+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Galin Iskrenov <loot270@abv.bg>, 2017-2019,2022,2024\n"
"Language-Team: Bulgarian (http://app.transifex.com/toofishes/archlinux-"
"pacman/language/bg/)\n"
"Language: bg\n"
"MIME-Version: 1.0\n"
@ -20,17 +20,17 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: lib/libalpm/add.c:91 lib/libalpm/sync.c:290
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s е актуален -- пропускане\n"
#: lib/libalpm/add.c:95
#: lib/libalpm/add.c:94
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s е актуален -- преинсталиране\n"
#: lib/libalpm/add.c:100
#: lib/libalpm/add.c:99
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "понижаване на пакет %s (%s => %s)\n"
@ -40,17 +40,17 @@ msgstr "понижаване на пакет %s (%s => %s)\n"
msgid "cannot allocate disk archive object"
msgstr "не се открие указания архив на диск"
#: lib/libalpm/add.c:143 lib/libalpm/util.c:382
#: lib/libalpm/add.c:143 lib/libalpm/util.c:408
#, c-format
msgid "warning given when extracting %s (%s)\n"
msgstr "има предупреждение при извличане %s (%s)\n"
#: lib/libalpm/add.c:146 lib/libalpm/util.c:385
#: lib/libalpm/add.c:146 lib/libalpm/util.c:411
#, c-format
msgid "could not extract %s (%s)\n"
msgstr "не може да се извлече %s (%s)\n"
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:574 lib/libalpm/remove.c:542
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:707 lib/libalpm/remove.c:550
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "не може да се преименува %s на %s (%s)\n"
@ -95,137 +95,152 @@ msgstr "извличане: не се презаписва папка с фай
msgid "unable to extract %s.pacnew: path too long"
msgstr "неспешно извличането на %s.pacnew: пътят е твърде дълъг"
#: lib/libalpm/add.c:513 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#: lib/libalpm/add.c:510 lib/libalpm/util.c:354 lib/libalpm/util.c:624
#, c-format
msgid "could not get current working directory\n"
msgstr "не може да се разбере текущата директория\n"
#: lib/libalpm/add.c:518 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/util.c:650
#: lib/libalpm/add.c:515 lib/libalpm/util.c:359 lib/libalpm/util.c:629
#: lib/libalpm/util.c:684
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "не може да се смени директория на %s (%s)\n"
#: lib/libalpm/add.c:575 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#: lib/libalpm/add.c:571 lib/libalpm/util.c:429 lib/libalpm/util.c:808
#, c-format
msgid "could not restore working directory (%s)\n"
msgstr "не може да се възстанови работната директория (%s)\n"
#: lib/libalpm/add.c:583
#: lib/libalpm/add.c:579
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "възникнал проблем при подновяване %s\n"
#: lib/libalpm/add.c:589
#: lib/libalpm/add.c:585
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "възникнал проблем при инсталиране %s\n"
#: lib/libalpm/add.c:604
#: lib/libalpm/add.c:600
#, c-format
msgid "could not update database entry %s-%s\n"
msgstr "не може да се поднови запис в базата %s-%s\n"
#: lib/libalpm/add.c:615
#: lib/libalpm/add.c:610
#, c-format
msgid "could not add entry '%s' in cache\n"
msgstr "не може да се добави запис '%s' в кеша\n"
#: lib/libalpm/be_local.c:267
#: lib/libalpm/be_local.c:271
#, c-format
msgid "error while reading file %s: %s\n"
msgstr "грешка при четене на файл %s: %s\n"
#: lib/libalpm/be_local.c:364
#: lib/libalpm/be_local.c:382
#, c-format
msgid "removing invalid database: %s\n"
msgstr "премахване на невалидна база: %s\n"
#: lib/libalpm/be_local.c:415 lib/libalpm/be_local.c:905
#: lib/libalpm/be_local.c:433 lib/libalpm/be_local.c:947
#, c-format
msgid "could not create directory %s: %s\n"
msgstr "не се създава директория %s: %s\n"
#: lib/libalpm/be_local.c:590 lib/libalpm/be_sync.c:386
#: lib/libalpm/be_local.c:608 lib/libalpm/be_sync.c:339
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "невалидно име за запис в базата '%s'\n"
#: lib/libalpm/be_local.c:598
#: lib/libalpm/be_local.c:616
#, c-format
msgid "duplicated database entry '%s'\n"
msgstr "дублиран запис в базата '%s'\n"
#: lib/libalpm/be_local.c:610
#: lib/libalpm/be_local.c:628
#, c-format
msgid "corrupted database entry '%s'\n"
msgstr "повреден запис в базата '%s'\n"
#: lib/libalpm/be_local.c:713 lib/libalpm/be_local.c:809
#: lib/libalpm/be_local.c:954 lib/libalpm/be_local.c:1051
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:422 lib/libalpm/util.c:253
#: lib/libalpm/util.c:269
#: lib/libalpm/be_local.c:663
#, c-format
msgid "unknown install reason for package %s: %s\n"
msgstr ""
#: lib/libalpm/be_local.c:743 lib/libalpm/be_local.c:856
#: lib/libalpm/be_local.c:996 lib/libalpm/be_local.c:1102
#: lib/libalpm/diskspace.c:135 lib/libalpm/dload.c:792 lib/libalpm/util.c:273
#: lib/libalpm/util.c:289
#, c-format
msgid "could not open file %s: %s\n"
msgstr "не се отваря файл %s: %s\n"
#: lib/libalpm/be_local.c:729 lib/libalpm/be_sync.c:650
#: lib/libalpm/be_local.c:759 lib/libalpm/be_sync.c:612
#, c-format
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr "%s несъответствие в базата: името не съответства на пакета %s\n"
#: lib/libalpm/be_local.c:735 lib/libalpm/be_sync.c:656
#: lib/libalpm/be_local.c:765 lib/libalpm/be_sync.c:618
#, c-format
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr "%s несъответствие в базата: версията не съответства на пакета %s\n"
#: lib/libalpm/be_local.c:776
#: lib/libalpm/be_local.c:806
#, c-format
msgid "unknown validation type for package %s: %s\n"
msgstr "непознат валидиращ тип на пакета %s: %s\n"
#: lib/libalpm/be_package.c:479 lib/libalpm/be_package.c:637
#: lib/libalpm/be_package.c:650
#: lib/libalpm/be_local.c:841
#, c-format
msgid "%s: unknown key '%s' in local database\n"
msgstr ""
#: lib/libalpm/be_package.c:255
#, c-format
msgid "%s: unknown key '%s' in package description\n"
msgstr ""
#: lib/libalpm/be_package.c:482 lib/libalpm/be_package.c:635
#: lib/libalpm/be_package.c:647
#, c-format
msgid "error while reading package %s: %s\n"
msgstr "грешка при четене на пакет %s: %s\n"
#: lib/libalpm/be_package.c:493 lib/libalpm/be_package.c:517
#: lib/libalpm/be_package.c:495 lib/libalpm/be_package.c:518
#, c-format
msgid "error while reading mtree of package %s: %s\n"
msgstr "грешка при зареждане на mtree на пакет %s: %s\n"
#: lib/libalpm/be_package.c:603
#: lib/libalpm/be_package.c:601
#, c-format
msgid "could not parse package description file in %s\n"
msgstr "не може да се анализира описателния файл в %s\n"
#: lib/libalpm/be_package.c:608
#: lib/libalpm/be_package.c:606
#, c-format
msgid "missing package name in %s\n"
msgstr "липсващо име на пакет в %s\n"
#: lib/libalpm/be_package.c:612
#: lib/libalpm/be_package.c:610
#, c-format
msgid "missing package version in %s\n"
msgstr "липсваща версия на пакет в %s\n"
#: lib/libalpm/be_package.c:616
#: lib/libalpm/be_package.c:614
#, c-format
msgid "invalid package version in %s\n"
msgstr "невалидна версия на пакет в %s\n"
#: lib/libalpm/be_package.c:657
#: lib/libalpm/be_package.c:653
#, c-format
msgid "missing package metadata in %s\n"
msgstr "липсват метаданни за пакета %s\n"
#: lib/libalpm/be_package.c:750
#: lib/libalpm/be_package.c:745
#, c-format
msgid "failed to read signature file: %s\n"
msgstr "не се чете подписващият файл: %s\n"
#: lib/libalpm/be_package.c:779 lib/libalpm/sync.c:953
#: lib/libalpm/be_package.c:768 lib/libalpm/sync.c:976
#, c-format
msgid "required key missing from keyring\n"
msgstr "нужния ключ липсва от keyring\n"
@ -235,32 +250,37 @@ msgstr "нужния ключ липсва от keyring\n"
msgid "removing invalid file: %s\n"
msgstr "премахване невалиден файл: %s\n"
#: lib/libalpm/be_sync.c:515
#: lib/libalpm/be_sync.c:471
#, c-format
msgid "could not parse package description file '%s' from db '%s'\n"
msgstr "не може да се анализира описателния файл '%s' от db '%s'\n"
#: lib/libalpm/be_sync.c:522
#: lib/libalpm/be_sync.c:486
#, c-format
msgid "could not read db '%s' (%s)\n"
msgstr "не да се прочете db '%s' (%s)\n"
#: lib/libalpm/be_sync.c:556 lib/libalpm/be_sync.c:561
#: lib/libalpm/be_sync.c:519 lib/libalpm/be_sync.c:524
#, c-format
msgid "%s database is inconsistent: filename of package %s is illegal\n"
msgstr "%s базата е непълна: името на пакета %s е недопустимо\n"
#: lib/libalpm/be_sync.c:566
#: lib/libalpm/be_sync.c:529
#, c-format
msgid "%s database is inconsistent: filename of package %s is too long\n"
msgstr "%s базата е непълна: името на пакета %s е твърде дълго\n"
#: lib/libalpm/be_sync.c:632
#: lib/libalpm/be_sync.c:594
#, c-format
msgid "unknown database file: %s\n"
msgstr "непознат датабаза файл: %s\n"
#: lib/libalpm/db.c:370
#: lib/libalpm/be_sync.c:712
#, c-format
msgid "%s: unknown key '%s' in sync database\n"
msgstr ""
#: lib/libalpm/db.c:413
#, c-format
msgid "database path is undefined\n"
msgstr "пътя към базата е неопределен\n"
@ -280,12 +300,12 @@ msgstr "%s ще бъде премахната след зависимостта
msgid "%s will be installed before its %s dependency\n"
msgstr "%s ще бъде инсталиран преди зависимостта %s\n"
#: lib/libalpm/deps.c:681 lib/libalpm/deps.c:712
#: lib/libalpm/deps.c:666 lib/libalpm/deps.c:697
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "пренебрегване на пакет %s-%s\n"
#: lib/libalpm/deps.c:869
#: lib/libalpm/deps.c:842
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "не може да се разреши \"%s\", зависи от \"%s\"\n"
@ -300,84 +320,125 @@ msgstr "не се получава системната информация з
msgid "could not open file: %s: %s\n"
msgstr "не се отворя файл: %s: %s\n"
#: lib/libalpm/diskspace.c:146 lib/libalpm/diskspace.c:159
#: lib/libalpm/diskspace.c:154 lib/libalpm/diskspace.c:167
#, c-format
msgid "could not get filesystem information\n"
msgstr ""
"не се получава системна информация\n"
"\n"
#: lib/libalpm/diskspace.c:242
#: lib/libalpm/diskspace.c:254
#, c-format
msgid "could not get file information for %s\n"
msgstr "неможе да се вземе информация отностно %s\n"
#: lib/libalpm/diskspace.c:256 lib/libalpm/diskspace.c:315
#: lib/libalpm/diskspace.c:268 lib/libalpm/diskspace.c:327
#, c-format
msgid "could not determine mount point for file %s\n"
msgstr "не може да се определи точката за монтиране на %s\n"
#: lib/libalpm/diskspace.c:354
#: lib/libalpm/diskspace.c:366
#, c-format
msgid "Partition %s too full: %jd blocks needed, %ju blocks free\n"
msgstr "Партишанът %s е твърде пълен: %jd блока са нужни, %ju блока свободни\n"
#: lib/libalpm/diskspace.c:379 lib/libalpm/diskspace.c:433
#: lib/libalpm/diskspace.c:391 lib/libalpm/diskspace.c:445
#, c-format
msgid "could not determine filesystem mount points\n"
msgstr "не може да се опреди filesystem mount points\n"
#: lib/libalpm/diskspace.c:385
#: lib/libalpm/diskspace.c:397
#, c-format
msgid "could not determine cachedir mount point %s\n"
msgstr "не може да се определи cachedir mount point %s\n"
#: lib/libalpm/diskspace.c:438
#: lib/libalpm/diskspace.c:450
#, c-format
msgid "could not determine root mount point %s\n"
msgstr "не може да се определи root mount point %s\n"
#: lib/libalpm/diskspace.c:486
#: lib/libalpm/diskspace.c:498
#, c-format
msgid "Partition %s is mounted read only\n"
msgstr "Дялът %s е монтиран само за четене\n"
#: lib/libalpm/dload.c:161
#, c-format
msgid "disk"
msgstr "диск"
#: lib/libalpm/dload.c:348
#: lib/libalpm/dload.c:107
#, c-format
msgid "failed to create temporary file for download\n"
msgstr "не може да се създаде временен файл за сваляне\n"
#: lib/libalpm/dload.c:393
#: lib/libalpm/dload.c:198
#, c-format
msgid "url '%s' is invalid\n"
msgstr "url '%s' е невалиден\n"
msgid ""
"too many errors from %s, skipping for the remainder of this transaction\n"
msgstr "твърде много грешки от %s, прескачане на останалото от транзакцията\n"
#: lib/libalpm/dload.c:464 lib/libalpm/dload.c:485 lib/libalpm/dload.c:496
#: lib/libalpm/dload.c:215
#, c-format
msgid "fatal error from %s, skipping for the remainder of this transaction\n"
msgstr "фатална грешка от %s, прескачам остатъка от тази транзакция\n"
#: lib/libalpm/dload.c:310
#, c-format
msgid "disk"
msgstr "диск"
#: lib/libalpm/dload.c:532 lib/libalpm/dload.c:570 lib/libalpm/dload.c:583
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "неуспех при извличане на файл '%s' от %s : %s\n"
#: lib/libalpm/dload.c:477
#: lib/libalpm/dload.c:562
#, c-format
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
msgstr ""
"неуспех при получаването на файл '%s' от %s : очакваният размер за сваляне е "
"надвишен\n"
#: lib/libalpm/dload.c:532
#: lib/libalpm/dload.c:685
#, c-format
msgid "%s appears to be truncated: %jd/%jd bytes\n"
msgstr "%s изглежда частичен: %jd/%jd bytes\n"
#: lib/libalpm/dload.c:677 lib/libalpm/dload.c:706
#: lib/libalpm/dload.c:776
#, c-format
msgid "failed to download %s\n"
msgstr "неуспех при сваляне на %s\n"
msgid "url '%s' is invalid\n"
msgstr "url '%s' е невалиден\n"
#: lib/libalpm/dload.c:864
#, c-format
msgid "failed to setup a download payload for %s\n"
msgstr "Неуспешно настройване на нужното за изтегляне %s\n"
#: lib/libalpm/dload.c:876
#, c-format
msgid "curl returned error %d from transfer\n"
msgstr "curl върна грешка %d при трансфера\n"
#: lib/libalpm/dload.c:900
#, c-format
msgid "curl transfer error: %d\n"
msgstr "curl трансферна грешка: %d\n"
#: lib/libalpm/dload.c:963
#, c-format
msgid "could not chdir to download directory %s\n"
msgstr "неуспех на chdir до директория за сваляне %s\n"
#: lib/libalpm/dload.c:968
#, c-format
msgid "switching to sandbox user '%s' failed!\n"
msgstr ""
#: lib/libalpm/dload.c:1361 lib/libalpm/sync.c:861
#, c-format
msgid "failed to retrieve some files\n"
msgstr "неуспех при извличане на файлове\n"
#: lib/libalpm/dload.c:1384
#, c-format
msgid "download completed successfully but no file in the cache\n"
msgstr "изтеглянето завърши успешно, но няма файл в кеша\n"
#: lib/libalpm/error.c:40
#, c-format
@ -494,7 +555,7 @@ msgstr "няма конфигуриран сърър за източник"
msgid "transaction already initialized"
msgstr "транзакцията вече е инициализирана"
#: lib/libalpm/error.c:90 lib/libalpm/error.c:94
#: lib/libalpm/error.c:90 lib/libalpm/error.c:96
#, c-format
msgid "transaction not initialized"
msgstr " транзакцията не е инициализирана"
@ -504,86 +565,86 @@ msgstr " транзакцията не е инициализирана"
msgid "duplicate target"
msgstr "дублирана цел"
#: lib/libalpm/error.c:96
#: lib/libalpm/error.c:94
#, c-format
msgid "duplicate filename"
msgstr "дублиране на файлово име"
#: lib/libalpm/error.c:98
#, c-format
msgid "transaction not prepared"
msgstr "транзакцията не е подготвена"
#: lib/libalpm/error.c:98
#: lib/libalpm/error.c:100
#, c-format
msgid "transaction aborted"
msgstr "транзакцията е преустановена"
#: lib/libalpm/error.c:100
#: lib/libalpm/error.c:102
#, c-format
msgid "operation not compatible with the transaction type"
msgstr "операцията е несъвместима с типа транзакция"
#: lib/libalpm/error.c:102
#: lib/libalpm/error.c:104
#, c-format
msgid "transaction commit attempt when database is not locked"
msgstr "транзакцията иска достъп до незаключена база"
#: lib/libalpm/error.c:104
#: lib/libalpm/error.c:106
#, c-format
msgid "failed to run transaction hooks"
msgstr "неуспех при пускането на транзакционни куки"
#: lib/libalpm/error.c:107
#: lib/libalpm/error.c:109
#, c-format
msgid "could not find or read package"
msgstr "няма или не се чете пакет"
#: lib/libalpm/error.c:109
#: lib/libalpm/error.c:111
#, c-format
msgid "operation cancelled due to ignorepkg"
msgstr "отменена операция според ignorepkg"
#: lib/libalpm/error.c:111
#: lib/libalpm/error.c:113
#, c-format
msgid "invalid or corrupted package"
msgstr "невалиден или повреден пакет"
#: lib/libalpm/error.c:113
#: lib/libalpm/error.c:115
#, c-format
msgid "invalid or corrupted package (checksum)"
msgstr "невалиден или повреден пакет (checksum)"
#: lib/libalpm/error.c:115
#: lib/libalpm/error.c:117
#, c-format
msgid "invalid or corrupted package (PGP signature)"
msgstr "невалиден или повреден пакет (PGP signature)"
#: lib/libalpm/error.c:117
#: lib/libalpm/error.c:119
#, c-format
msgid "package missing required signature"
msgstr "липсва изискващ се подпис на пакет"
#: lib/libalpm/error.c:119
#: lib/libalpm/error.c:121
#, c-format
msgid "cannot open package file"
msgstr "не се отваря пакетен файл"
#: lib/libalpm/error.c:121
#: lib/libalpm/error.c:123
#, c-format
msgid "cannot remove all files for package"
msgstr "не се премахват всички файлове на пакета"
#: lib/libalpm/error.c:123
#: lib/libalpm/error.c:125
#, c-format
msgid "package filename is not valid"
msgstr "името на пакета не е валидно"
#: lib/libalpm/error.c:125
#: lib/libalpm/error.c:127
#, c-format
msgid "package architecture is not valid"
msgstr "архитектурата на пакета не е валидна"
#: lib/libalpm/error.c:127
#, c-format
msgid "could not find repository for target"
msgstr "не може да се открие източник за целта"
#: lib/libalpm/error.c:130
#, c-format
msgid "missing PGP signature"
@ -649,12 +710,12 @@ msgstr "компилиран без поддръжка на подпис"
msgid "unexpected error"
msgstr "неочаквана грешка"
#: lib/libalpm/handle.c:153
#: lib/libalpm/handle.c:165
#, c-format
msgid "lock file missing %s\n"
msgstr "липсва заключващ файл %s\n"
#: lib/libalpm/handle.c:159
#: lib/libalpm/handle.c:171
#, c-format
msgid "could not remove lock file %s\n"
msgstr "не се премахва заключен файл %s\n"
@ -726,7 +787,7 @@ msgstr "кука %s ред %d: невъзможно да се зададе оп
msgid "unable to run hook %s: %s\n"
msgstr "невъзможно е пускане на куката %s: %s\n"
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:386
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:378
#, c-format
msgid "could not open directory: %s: %s\n"
msgstr "не се отваря папка: %s: %s\n"
@ -736,7 +797,7 @@ msgstr "не се отваря папка: %s: %s\n"
msgid "could not open file: %s%s: %s\n"
msgstr "не може да се отвори файл: %s%s: %s\n"
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:259
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:279
#, c-format
msgid "could not stat file %s: %s\n"
msgstr "не се коригира %s: %s\n"
@ -746,279 +807,317 @@ msgstr "не се коригира %s: %s\n"
msgid "could not read directory: %s: %s\n"
msgstr "не може да се прочете папката: %s: %s\n"
#: lib/libalpm/package.c:578
#: lib/libalpm/package.c:614
#, c-format
msgid "could not fully load metadata for package %s-%s\n"
msgstr "не пълно извеждане на метаданни за пакет %s-%s\n"
#: lib/libalpm/remove.c:119
#: lib/libalpm/package.c:869
#, c-format
msgid "invalid package metadata (name or version missing)"
msgstr ""
#: lib/libalpm/package.c:874
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name cannot start with '.' or "
"'-')\n"
msgstr ""
#: lib/libalpm/package.c:878
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name contains invalid "
"characters)\n"
msgstr ""
#: lib/libalpm/package.c:885 lib/libalpm/package.c:889
#, c-format
msgid ""
"invalid metadata for package %s-%s (package version contains invalid "
"characters)\n"
msgstr ""
#: lib/libalpm/package.c:895
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name and version too long)\n"
msgstr ""
#: lib/libalpm/remove.c:111
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "няма %s в базата -- пропускане\n"
#: lib/libalpm/remove.c:154
#: lib/libalpm/remove.c:146
#, c-format
msgid "removing %s from target list\n"
msgstr "премахване %s от списъка с целите\n"
#: lib/libalpm/remove.c:346
#: lib/libalpm/remove.c:338
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "не се премахва файла '%s': %s\n"
#: lib/libalpm/remove.c:411 lib/libalpm/remove.c:420
#: lib/libalpm/remove.c:403 lib/libalpm/remove.c:412
#, c-format
msgid "could not backup %s due to PATH_MAX overflow\n"
msgstr "не може да се архивира %s поради препълване на PATH_MAX\n"
#: lib/libalpm/remove.c:562
#: lib/libalpm/remove.c:570
#, c-format
msgid "cannot remove %s (%s)\n"
msgstr "не се премахва %s (%s)\n"
#: lib/libalpm/remove.c:735
#: lib/libalpm/remove.c:743
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "не може да се премахне запис в базата %s-%s\n"
#: lib/libalpm/remove.c:740
#: lib/libalpm/remove.c:748
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "не може да се премахне '%s' от кеша\n"
#: lib/libalpm/signing.c:171
#: lib/libalpm/signing.c:163
#, c-format
msgid "Public keyring not found; have you run '%s'?\n"
msgstr "Публичният ключодържател не е открит; Ще пуснете ли '%s'?\n"
#: lib/libalpm/signing.c:207 lib/libalpm/signing.c:784
#: lib/libalpm/signing.c:199 lib/libalpm/signing.c:773
#, c-format
msgid "GPGME error: %s\n"
msgstr "GPGME грешка: %s\n"
#: lib/libalpm/signing.c:284
#: lib/libalpm/signing.c:275
#, c-format
msgid "looking up key %s using WKD\n"
msgstr "търсене на ключ %s използвайки WKD\n"
#: lib/libalpm/signing.c:293
#: lib/libalpm/signing.c:289
#, c-format
msgid "gpg error: %s\n"
msgstr "gpg грешка: %s\n"
#: lib/libalpm/signing.c:441 lib/libalpm/signing.c:515
#: lib/libalpm/signing.c:440 lib/libalpm/signing.c:513
#, c-format
msgid "keyring is not writable\n"
msgstr "ключодържателя не се записва\n"
#: lib/libalpm/signing.c:539
#: lib/libalpm/signing.c:537
#, c-format
msgid "key \"%s\" on keyserver\n"
msgstr "ключ \"%s\" на ключов съвър\n"
#: lib/libalpm/signing.c:544
#: lib/libalpm/signing.c:542
#, c-format
msgid "key \"%s\" could not be imported\n"
msgstr "ключ \"%s\" не може да се внесе\n"
#: lib/libalpm/signing.c:548
#: lib/libalpm/signing.c:546
#, c-format
msgid "key \"%s\" could not be looked up remotely\n"
msgstr "ключ \"%s\" не може да се прегледа отдалечено\n"
#: lib/libalpm/signing.c:943 lib/libalpm/sync.c:1022
#: lib/libalpm/signing.c:932 lib/libalpm/sync.c:1052
#, c-format
msgid "%s: missing required signature\n"
msgstr "%s: липсва изискващ се подпис\n"
#: lib/libalpm/signing.c:958
#: lib/libalpm/signing.c:947
#, c-format
msgid "%s: signature from \"%s\" is marginal trust\n"
msgstr "%s: подписът от \"%s\" е изрично доверен\n"
#: lib/libalpm/signing.c:966
#: lib/libalpm/signing.c:955
#, c-format
msgid "%s: signature from \"%s\" is unknown trust\n"
msgstr "%s: подписът от \"%s\" е с непознато доверие\n"
#: lib/libalpm/signing.c:973
#: lib/libalpm/signing.c:962
#, c-format
msgid "%s: signature from \"%s\" should never be trusted\n"
msgstr "%s: подписът от \"%s\" никога да не се му вярва\n"
#: lib/libalpm/signing.c:985
#: lib/libalpm/signing.c:974
#, c-format
msgid "%s: key \"%s\" is unknown\n"
msgstr "%s: ключ \"%s\" е непознат\n"
#: lib/libalpm/signing.c:994
#: lib/libalpm/signing.c:983
#, c-format
msgid "%s: key \"%s\" is disabled\n"
msgstr "%s: ключа е \"%s\" е негоден\n"
#: lib/libalpm/signing.c:998
#: lib/libalpm/signing.c:987
#, c-format
msgid "%s: signature from \"%s\" is expired\n"
msgstr "%s: подписът от \"%s\" е изтекъл\n"
#: lib/libalpm/signing.c:1002
#: lib/libalpm/signing.c:991
#, c-format
msgid "%s: signature from \"%s\" is invalid\n"
msgstr "%s: подписът от \"%s\" е невалиден\n"
#: lib/libalpm/signing.c:1079 lib/libalpm/signing.c:1147
#: lib/libalpm/signing.c:1226
#: lib/libalpm/signing.c:1049 lib/libalpm/signing.c:1110
#: lib/libalpm/signing.c:1189
#, c-format
msgid "%s: signature format error\n"
msgstr "%s: грешен формат на подписа\n"
#: lib/libalpm/signing.c:1179 lib/libalpm/signing.c:1212
#: lib/libalpm/signing.c:1220
#: lib/libalpm/signing.c:1142 lib/libalpm/signing.c:1175
#: lib/libalpm/signing.c:1183
#, c-format
msgid "%s: unsupported signature format\n"
msgstr "%s: неподдържан формат на подписа\n"
#: lib/libalpm/sync.c:99
#: lib/libalpm/sync.c:96
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: игнориране надграждането на пакет (%s => %s)\n"
#: lib/libalpm/sync.c:111
#: lib/libalpm/sync.c:108
#, c-format
msgid "%s: ignoring package downgrade (%s => %s)\n"
msgstr "%s: игнориране на пакетен downgrade (%s => %s)\n"
#: lib/libalpm/sync.c:114
#: lib/libalpm/sync.c:111
#, c-format
msgid "%s: downgrading from version %s to version %s\n"
msgstr "%s: снижаване на версията от %s към версия %s\n"
#: lib/libalpm/sync.c:120
#: lib/libalpm/sync.c:117
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr "%s: текущият (%s) е по-нов от %s (%s)\n"
#: lib/libalpm/sync.c:161
#: lib/libalpm/sync.c:158
#, c-format
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
msgstr "игнориране замяната на пакет (%s-%s => %s-%s)\n"
#: lib/libalpm/sync.c:177
#: lib/libalpm/sync.c:174
#, c-format
msgid "cannot replace %s by %s\n"
msgstr "не може да се замести %s от %s\n"
#: lib/libalpm/sync.c:535 lib/libalpm/sync.c:605
#: lib/libalpm/sync.c:477
#, c-format
msgid "packages %s and %s have the same filename: %s\n"
msgstr "пакети %s и %s имат еднакво име: %s\n"
#: lib/libalpm/sync.c:546 lib/libalpm/sync.c:618
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr "засечени нерешени пакетни конфликти\n"
#: lib/libalpm/sync.c:555
#: lib/libalpm/sync.c:566
#, c-format
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgstr "премахване '%s' от целевия списък заради конфликт с '%s'\n"
msgid "removing '%s-%s' from target list because it conflicts with '%s-%s'\n"
msgstr ""
"Премахване на '%s-%s' от целевия списък, защото противоречи на '%s-%s'\n"
#: lib/libalpm/sync.c:849
#: lib/libalpm/sync.c:1020 lib/libalpm/sync.c:1187
#, c-format
msgid "failed to retrieve some files\n"
msgstr "неуспех при извличане на файлове\n"
msgid "%s: could not find package in cache\n"
msgstr "%s: не можах да намеря пакет в кеша\n"
#: lib/libalpm/sync.c:1036
#: lib/libalpm/sync.c:1066
#, c-format
msgid "failed to read file %s: %s\n"
msgstr "не успя да се прочете файла %s: %s\n"
#: lib/libalpm/sync.c:1223
#: lib/libalpm/sync.c:1324
#, c-format
msgid "not enough free disk space\n"
msgstr "няма достатъчно свободно място на диска\n"
#: lib/libalpm/sync.c:1245
#: lib/libalpm/sync.c:1346
#, c-format
msgid "could not commit removal transaction\n"
msgstr "не се потвърждава транзакцията по премахване\n"
#: lib/libalpm/sync.c:1253
#: lib/libalpm/sync.c:1354
#, c-format
msgid "could not commit transaction\n"
msgstr "не се потвърждава транзакцията\n"
#: lib/libalpm/trans.c:364
#: lib/libalpm/trans.c:369
#, c-format
msgid "could not create temp directory\n"
msgstr "не се създава temp папка\n"
#: lib/libalpm/trans.c:379
#: lib/libalpm/trans.c:384
#, c-format
msgid "could not copy tempfile to %s (%s)\n"
msgstr "не се копира tempfile в %s (%s)\n"
#: lib/libalpm/trans.c:410
#: lib/libalpm/trans.c:415
#, c-format
msgid "could not remove %s\n"
msgstr "не се премахва %s\n"
#: lib/libalpm/trans.c:414
#: lib/libalpm/trans.c:419
#, c-format
msgid "could not remove tmpdir %s\n"
msgstr "не се премахва tmpdir %s\n"
#: lib/libalpm/util.c:486
#: lib/libalpm/util.c:512
#, c-format
msgid "unable to write to pipe (%s)\n"
msgstr "неъспешно записването в тръбата (%s)\n"
#: lib/libalpm/util.c:545
#: lib/libalpm/util.c:571
#, c-format
msgid "unable to read from pipe (%s)\n"
msgstr "неуспешно четенето от тръбата (%s)\n"
#: lib/libalpm/util.c:609 lib/libalpm/util.c:615
#: lib/libalpm/util.c:641 lib/libalpm/util.c:647
#, c-format
msgid "could not create pipe (%s)\n"
msgstr "не се създава pipe (%s)\n"
#: lib/libalpm/util.c:623
#: lib/libalpm/util.c:655
#, c-format
msgid "could not fork a new process (%s)\n"
msgstr "could not fork a new process (%s)\n"
#: lib/libalpm/util.c:646
#: lib/libalpm/util.c:680
#, c-format
msgid "could not change the root directory (%s)\n"
msgstr "не може да се промени root папката (%s)\n"
#: lib/libalpm/util.c:658
#: lib/libalpm/util.c:700
#, c-format
msgid "call to execv failed (%s)\n"
msgstr "неуспех при извикване execv (%s)\n"
#: lib/libalpm/util.c:737
#: lib/libalpm/util.c:779
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr "неуспех при извикване на waitpid (%s)\n"
#: lib/libalpm/util.c:747
#: lib/libalpm/util.c:789
#, c-format
msgid "command failed to execute correctly\n"
msgstr "неуспешно правилно изпълнение на команда\n"
#: lib/libalpm/util.c:754
#: lib/libalpm/util.c:796
#, c-format
msgid "Unknown signal"
msgstr "Неизвестен сигнал"
#: lib/libalpm/util.c:756
#: lib/libalpm/util.c:798
#, c-format
msgid "command terminated by signal %d: %s\n"
msgstr "командата прекратена от сигнал %d: %s\n"
#: lib/libalpm/util.c:853
#: lib/libalpm/util.c:916
#, c-format
msgid "no %s cache exists, creating...\n"
msgstr "не %s съществуваш кеш, създаване...\n"
#: lib/libalpm/util.c:884
#: lib/libalpm/util.c:947
#, c-format
msgid "couldn't find or create package cache, using %s instead\n"
msgstr "не се открива или създава пакетен кеш, използва се %s\n"

View file

@ -1,6 +1,6 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Pacman Development Team <pacman-dev@archlinux.org>
# This file is distributed under the same license as the PACKAGE package.
# Copyright (C) YEAR "Pacman Development Team <pacman-dev@archlinux.org>"
# This file is distributed under the same license as the libalpm package.
#
# Translators:
# Gwenn M <tornoz@laposte.net>, 2015
@ -8,33 +8,33 @@
msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2019-10-21 17:23+1000\n"
"PO-Revision-Date: 2019-10-07 08:12+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"Language-Team: Breton (http://www.transifex.com/toofishes/archlinux-pacman/"
"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/pacman/pacman/-/issues\n"
"POT-Creation-Date: 2024-07-14 19:10+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Gwenn M <tornoz@laposte.net>, 2015,2018-2019\n"
"Language-Team: Breton (http://app.transifex.com/toofishes/archlinux-pacman/"
"language/br/)\n"
"Language: br\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !"
"=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n"
"%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > "
"19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 "
"&& n % 1000000 == 0) ? 3 : 4);\n"
"=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && "
"(n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 "
"> 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != "
"0 && n % 1000000 == 0) ? 3 : 4);\n"
#: lib/libalpm/add.c:91 lib/libalpm/sync.c:290
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "hizivaet eo %s - %s -- laosket a-gostez\n"
#: lib/libalpm/add.c:95
#: lib/libalpm/add.c:94
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "Hizivaet eo %s - %s -- adstaliadur\n"
#: lib/libalpm/add.c:100
#: lib/libalpm/add.c:99
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "o pellgargañ ar pakad %s (%s => %s)\n"
@ -44,17 +44,17 @@ msgstr "o pellgargañ ar pakad %s (%s => %s)\n"
msgid "cannot allocate disk archive object"
msgstr "n'haller ket derannañ an ergorenn kantenn diell"
#: lib/libalpm/add.c:143 lib/libalpm/util.c:382
#: lib/libalpm/add.c:143 lib/libalpm/util.c:408
#, c-format
msgid "warning given when extracting %s (%s)\n"
msgstr "ur galv diwall a zo bet roet en ur eztennañ %s (%s)\n"
#: lib/libalpm/add.c:146 lib/libalpm/util.c:385
#: lib/libalpm/add.c:146 lib/libalpm/util.c:411
#, c-format
msgid "could not extract %s (%s)\n"
msgstr "n'haller ket eztennañ %s (%s)\n"
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:574 lib/libalpm/remove.c:542
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:707 lib/libalpm/remove.c:550
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "n'haller ket adenvel %s e %s (%s)\n"
@ -99,138 +99,153 @@ msgstr "eztannadur : flastradur kavlec'h gant restr %s ebet \n"
msgid "unable to extract %s.pacnew: path too long"
msgstr "n'haller ket eztennañ %s.pacnew : re hir eo an treug"
#: lib/libalpm/add.c:513 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#: lib/libalpm/add.c:510 lib/libalpm/util.c:354 lib/libalpm/util.c:624
#, c-format
msgid "could not get current working directory\n"
msgstr "n'haller ket kaout ar c'havlec'h labour bremanel\n"
#: lib/libalpm/add.c:518 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/util.c:650
#: lib/libalpm/add.c:515 lib/libalpm/util.c:359 lib/libalpm/util.c:629
#: lib/libalpm/util.c:684
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "n'haller ket kemmañ ar c'havlec'h da %s (%s)\n"
#: lib/libalpm/add.c:575 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#: lib/libalpm/add.c:571 lib/libalpm/util.c:429 lib/libalpm/util.c:808
#, c-format
msgid "could not restore working directory (%s)\n"
msgstr "n'haller ket assav ar c'havlec'h labour (%s)\n"
#: lib/libalpm/add.c:583
#: lib/libalpm/add.c:579
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "ur fazi a zo bet en ur hizivaat %s\n"
#: lib/libalpm/add.c:589
#: lib/libalpm/add.c:585
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "ur fazi a zo bet en ur staliañ %s\n"
#: lib/libalpm/add.c:604
#: lib/libalpm/add.c:600
#, c-format
msgid "could not update database entry %s-%s\n"
msgstr "n'haller ket hizivaat an enankad stlennvon %s-%s\n"
#: lib/libalpm/add.c:615
#: lib/libalpm/add.c:610
#, c-format
msgid "could not add entry '%s' in cache\n"
msgstr "n'haller ket ouzhpennañ an enankad '%s' er skurzer\n"
#: lib/libalpm/be_local.c:267
#: lib/libalpm/be_local.c:271
#, c-format
msgid "error while reading file %s: %s\n"
msgstr "fazi en ul lenn ar restr %s : %s\n"
#: lib/libalpm/be_local.c:364
#: lib/libalpm/be_local.c:382
#, c-format
msgid "removing invalid database: %s\n"
msgstr "o dilemel ar stlennvon direizh : %s\n"
#: lib/libalpm/be_local.c:415 lib/libalpm/be_local.c:905
#: lib/libalpm/be_local.c:433 lib/libalpm/be_local.c:947
#, c-format
msgid "could not create directory %s: %s\n"
msgstr "n'haller ker krouiñ ar c'havlec'h %s : %s\n"
#: lib/libalpm/be_local.c:590 lib/libalpm/be_sync.c:386
#: lib/libalpm/be_local.c:608 lib/libalpm/be_sync.c:339
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "anv direizh evit an enankad stlennvon '%s'\n"
#: lib/libalpm/be_local.c:598
#: lib/libalpm/be_local.c:616
#, c-format
msgid "duplicated database entry '%s'\n"
msgstr "enankad stlennvon eilet '%s'\n"
#: lib/libalpm/be_local.c:610
#: lib/libalpm/be_local.c:628
#, c-format
msgid "corrupted database entry '%s'\n"
msgstr "enankad stlennvon kontronet '%s'\n"
#: lib/libalpm/be_local.c:713 lib/libalpm/be_local.c:809
#: lib/libalpm/be_local.c:954 lib/libalpm/be_local.c:1051
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:422 lib/libalpm/util.c:253
#: lib/libalpm/util.c:269
#: lib/libalpm/be_local.c:663
#, c-format
msgid "unknown install reason for package %s: %s\n"
msgstr ""
#: lib/libalpm/be_local.c:743 lib/libalpm/be_local.c:856
#: lib/libalpm/be_local.c:996 lib/libalpm/be_local.c:1102
#: lib/libalpm/diskspace.c:135 lib/libalpm/dload.c:792 lib/libalpm/util.c:273
#: lib/libalpm/util.c:289
#, c-format
msgid "could not open file %s: %s\n"
msgstr "n'haller ket digeriñ ar restr %s : %s\n"
#: lib/libalpm/be_local.c:729 lib/libalpm/be_sync.c:650
#: lib/libalpm/be_local.c:759 lib/libalpm/be_sync.c:612
#, c-format
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr "digantalc'hek eo ar stlennvon %s : digenglotus eo anvioù ar pakad %s\n"
#: lib/libalpm/be_local.c:735 lib/libalpm/be_sync.c:656
#: lib/libalpm/be_local.c:765 lib/libalpm/be_sync.c:618
#, c-format
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr ""
"digantalc'hek eo ar stlennvon %s : digenglotus eo handelvioù ar pakad %s\n"
#: lib/libalpm/be_local.c:776
#: lib/libalpm/be_local.c:806
#, c-format
msgid "unknown validation type for package %s: %s\n"
msgstr "doare gwiriadur dianav evit ar pakad %s : %s\n"
#: lib/libalpm/be_package.c:479 lib/libalpm/be_package.c:637
#: lib/libalpm/be_package.c:650
#: lib/libalpm/be_local.c:841
#, c-format
msgid "%s: unknown key '%s' in local database\n"
msgstr ""
#: lib/libalpm/be_package.c:255
#, c-format
msgid "%s: unknown key '%s' in package description\n"
msgstr ""
#: lib/libalpm/be_package.c:482 lib/libalpm/be_package.c:635
#: lib/libalpm/be_package.c:647
#, c-format
msgid "error while reading package %s: %s\n"
msgstr "fazi en ul lenn ar pakad %s : %s\n"
#: lib/libalpm/be_package.c:493 lib/libalpm/be_package.c:517
#: lib/libalpm/be_package.c:495 lib/libalpm/be_package.c:518
#, c-format
msgid "error while reading mtree of package %s: %s\n"
msgstr "fazi en ul lenn mtree ar pakad %s : %s\n"
#: lib/libalpm/be_package.c:603
#: lib/libalpm/be_package.c:601
#, c-format
msgid "could not parse package description file in %s\n"
msgstr "n'haller ket dezrannañ restr deskrivañ ar pakad e %s\n"
#: lib/libalpm/be_package.c:608
#: lib/libalpm/be_package.c:606
#, c-format
msgid "missing package name in %s\n"
msgstr "mankout a ra an anv pakad e %s\n"
#: lib/libalpm/be_package.c:612
#: lib/libalpm/be_package.c:610
#, c-format
msgid "missing package version in %s\n"
msgstr "mankout a ra handelv ar pakad e %s\n"
#: lib/libalpm/be_package.c:616
#: lib/libalpm/be_package.c:614
#, c-format
msgid "invalid package version in %s\n"
msgstr "handelv pakad direizh e %s\n"
#: lib/libalpm/be_package.c:657
#: lib/libalpm/be_package.c:653
#, c-format
msgid "missing package metadata in %s\n"
msgstr "mankout a ra metaroadennoù ar pakad e %s\n"
#: lib/libalpm/be_package.c:750
#: lib/libalpm/be_package.c:745
#, c-format
msgid "failed to read signature file: %s\n"
msgstr "fazi en ul lenn ar restr sinadur : %s\n"
#: lib/libalpm/be_package.c:779 lib/libalpm/sync.c:953
#: lib/libalpm/be_package.c:768 lib/libalpm/sync.c:976
#, c-format
msgid "required key missing from keyring\n"
msgstr "mankout a ra an alc'hwez goulennet en droñsell\n"
@ -240,34 +255,39 @@ msgstr "mankout a ra an alc'hwez goulennet en droñsell\n"
msgid "removing invalid file: %s\n"
msgstr "o dilemel ar restr direizh : %s\n"
#: lib/libalpm/be_sync.c:515
#: lib/libalpm/be_sync.c:471
#, c-format
msgid "could not parse package description file '%s' from db '%s'\n"
msgstr ""
"n'haller ket dezrannañ ar restr deskrivadur pakadoù '%s' adalek ar sv '%s'\n"
#: lib/libalpm/be_sync.c:522
#: lib/libalpm/be_sync.c:486
#, c-format
msgid "could not read db '%s' (%s)\n"
msgstr "n'haller ket lenn ar stlennvon '%s' (%s)\n"
#: lib/libalpm/be_sync.c:556 lib/libalpm/be_sync.c:561
#: lib/libalpm/be_sync.c:519 lib/libalpm/be_sync.c:524
#, c-format
msgid "%s database is inconsistent: filename of package %s is illegal\n"
msgstr ""
"digantalc'hek eo ar stlennvon %s : didalvoudek eo anv restr ar pakad %s\n"
#: lib/libalpm/be_sync.c:566
#: lib/libalpm/be_sync.c:529
#, c-format
msgid "%s database is inconsistent: filename of package %s is too long\n"
msgstr "digantalc'hek eo ar stlennvon %s : re hir eo anv restr ar pakad %s\n"
#: lib/libalpm/be_sync.c:632
#: lib/libalpm/be_sync.c:594
#, c-format
msgid "unknown database file: %s\n"
msgstr "restr stlennvon dianav : %s\n"
#: lib/libalpm/db.c:370
#: lib/libalpm/be_sync.c:712
#, c-format
msgid "%s: unknown key '%s' in sync database\n"
msgstr ""
#: lib/libalpm/db.c:413
#, c-format
msgid "database path is undefined\n"
msgstr "andespizet eo treug ar stlennvon\n"
@ -287,12 +307,12 @@ msgstr "dilamet e vo %s goude e %s amzalc'h\n"
msgid "%s will be installed before its %s dependency\n"
msgstr "staliet e vo %s goude e %s amzalc'h\n"
#: lib/libalpm/deps.c:681 lib/libalpm/deps.c:712
#: lib/libalpm/deps.c:666 lib/libalpm/deps.c:697
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "o leuskel ar pakad %s - %s a-gostez\n"
#: lib/libalpm/deps.c:869
#: lib/libalpm/deps.c:842
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "n'haller ket diskoulmañ \"%s\", un amzalc'h \"%s\"\n"
@ -307,83 +327,124 @@ msgstr "n'haller ket kaout titouroù ar reizhad evit %s : %s\n"
msgid "could not open file: %s: %s\n"
msgstr "n'haller ket digeriñ ar restr : %s : %s\n"
#: lib/libalpm/diskspace.c:146 lib/libalpm/diskspace.c:159
#: lib/libalpm/diskspace.c:154 lib/libalpm/diskspace.c:167
#, c-format
msgid "could not get filesystem information\n"
msgstr "n'haller ket kaout titouroù ar reizhad restroù\n"
#: lib/libalpm/diskspace.c:242
#: lib/libalpm/diskspace.c:254
#, c-format
msgid "could not get file information for %s\n"
msgstr "n'haller ket tapout titouroù ar restr evit %s\n"
#: lib/libalpm/diskspace.c:256 lib/libalpm/diskspace.c:315
#: lib/libalpm/diskspace.c:268 lib/libalpm/diskspace.c:327
#, c-format
msgid "could not determine mount point for file %s\n"
msgstr "n'haller ket despizañ ar poentoù kenstrollañ evit ar restr %s\n"
#: lib/libalpm/diskspace.c:354
#: lib/libalpm/diskspace.c:366
#, c-format
msgid "Partition %s too full: %jd blocks needed, %ju blocks free\n"
msgstr ""
"Re leun eo ar parzhad %s : %jd a vloc'hoù dleet, %ju a vloc'hoù dieub\n"
#: lib/libalpm/diskspace.c:379 lib/libalpm/diskspace.c:433
#: lib/libalpm/diskspace.c:391 lib/libalpm/diskspace.c:445
#, c-format
msgid "could not determine filesystem mount points\n"
msgstr "n'haller ket despizañ poentoù kenstrollañ ar reizhad restroù\n"
#: lib/libalpm/diskspace.c:385
#: lib/libalpm/diskspace.c:397
#, c-format
msgid "could not determine cachedir mount point %s\n"
msgstr "n'haller ket despizañ poent kenstrollañ ar c'havlec'h krubuilh %s\n"
#: lib/libalpm/diskspace.c:438
#: lib/libalpm/diskspace.c:450
#, c-format
msgid "could not determine root mount point %s\n"
msgstr "n'haller ket despizañ poent kenstrollañ ar gwrizienn %s\n"
#: lib/libalpm/diskspace.c:486
#: lib/libalpm/diskspace.c:498
#, c-format
msgid "Partition %s is mounted read only\n"
msgstr "E mod lenn nemetken eo kenstrollet ar parzhad %s\n"
#: lib/libalpm/dload.c:161
#, c-format
msgid "disk"
msgstr "pladenn"
#: lib/libalpm/dload.c:348
#: lib/libalpm/dload.c:107
#, c-format
msgid "failed to create temporary file for download\n"
msgstr "fazi en ur c'hrouiñ ar restr padennek evit ar pellgargañ\n"
#: lib/libalpm/dload.c:393
#: lib/libalpm/dload.c:198
#, c-format
msgid "url '%s' is invalid\n"
msgstr "direizh eo an url '%s'\n"
msgid ""
"too many errors from %s, skipping for the remainder of this transaction\n"
msgstr ""
#: lib/libalpm/dload.c:464 lib/libalpm/dload.c:485 lib/libalpm/dload.c:496
#: lib/libalpm/dload.c:215
#, c-format
msgid "fatal error from %s, skipping for the remainder of this transaction\n"
msgstr ""
#: lib/libalpm/dload.c:310
#, c-format
msgid "disk"
msgstr "pladenn"
#: lib/libalpm/dload.c:532 lib/libalpm/dload.c:570 lib/libalpm/dload.c:583
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "fazi en ur adkavout ar restr '%s' adalek %s : %s\n"
#: lib/libalpm/dload.c:477
#: lib/libalpm/dload.c:562
#, c-format
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
msgstr ""
"fazi en ur adkavout ar restr '%s' adalek %s : re vras eo ment ar "
"pellgargadur\n"
#: lib/libalpm/dload.c:532
#: lib/libalpm/dload.c:685
#, c-format
msgid "%s appears to be truncated: %jd/%jd bytes\n"
msgstr "krennet e seblant bezañ %s : %jd/%jd eizhbit\n"
#: lib/libalpm/dload.c:677 lib/libalpm/dload.c:706
#: lib/libalpm/dload.c:776
#, c-format
msgid "failed to download %s\n"
msgstr "fazi en ur pellgargañ %s\n"
msgid "url '%s' is invalid\n"
msgstr "direizh eo an url '%s'\n"
#: lib/libalpm/dload.c:864
#, c-format
msgid "failed to setup a download payload for %s\n"
msgstr ""
#: lib/libalpm/dload.c:876
#, c-format
msgid "curl returned error %d from transfer\n"
msgstr ""
#: lib/libalpm/dload.c:900
#, c-format
msgid "curl transfer error: %d\n"
msgstr ""
#: lib/libalpm/dload.c:963
#, c-format
msgid "could not chdir to download directory %s\n"
msgstr "n'heller ket erounit chdir evit pellgargañ ar c'havlec'h %s\n"
#: lib/libalpm/dload.c:968
#, c-format
msgid "switching to sandbox user '%s' failed!\n"
msgstr ""
#: lib/libalpm/dload.c:1361 lib/libalpm/sync.c:861
#, c-format
msgid "failed to retrieve some files\n"
msgstr "c'hwitadenn war atoradur restroù 'zo\n"
#: lib/libalpm/dload.c:1384
#, c-format
msgid "download completed successfully but no file in the cache\n"
msgstr ""
#: lib/libalpm/error.c:40
#, c-format
@ -500,7 +561,7 @@ msgstr "n'eus dafariad ebet kefluniet evit ar mirlec'h"
msgid "transaction already initialized"
msgstr "deraouekaet eo bet an treuzkas"
#: lib/libalpm/error.c:90 lib/libalpm/error.c:94
#: lib/libalpm/error.c:90 lib/libalpm/error.c:96
#, c-format
msgid "transaction not initialized"
msgstr "n'eo ket bet deraouekaet an treuzkas"
@ -510,87 +571,87 @@ msgstr "n'eo ket bet deraouekaet an treuzkas"
msgid "duplicate target"
msgstr "bukenn eilet"
#: lib/libalpm/error.c:96
#: lib/libalpm/error.c:94
#, c-format
msgid "duplicate filename"
msgstr ""
#: lib/libalpm/error.c:98
#, c-format
msgid "transaction not prepared"
msgstr "n'eo ket bet prientet an treuzkas"
#: lib/libalpm/error.c:98
#: lib/libalpm/error.c:100
#, c-format
msgid "transaction aborted"
msgstr "dilezet eo bet an treuzkas"
#: lib/libalpm/error.c:100
#: lib/libalpm/error.c:102
#, c-format
msgid "operation not compatible with the transaction type"
msgstr "n'eo ket kenglotus an oberatadenn gant doare an treuzkas"
#: lib/libalpm/error.c:102
#: lib/libalpm/error.c:104
#, c-format
msgid "transaction commit attempt when database is not locked"
msgstr ""
"klasket eo bet erounit an treuzkas padal ne oa ket prennet ar stlennvon"
#: lib/libalpm/error.c:104
#: lib/libalpm/error.c:106
#, c-format
msgid "failed to run transaction hooks"
msgstr "c'hwitadenn war erounezadur krogoù treuzkas"
#: lib/libalpm/error.c:107
#: lib/libalpm/error.c:109
#, c-format
msgid "could not find or read package"
msgstr "n'haller ket kavout pe lenn ar pakad"
#: lib/libalpm/error.c:109
#: lib/libalpm/error.c:111
#, c-format
msgid "operation cancelled due to ignorepkg"
msgstr "nullet eo bet an oberatadenn abalamour da ignorepkg"
#: lib/libalpm/error.c:111
#: lib/libalpm/error.c:113
#, c-format
msgid "invalid or corrupted package"
msgstr "direizh pe kontronet eo ar pakad"
#: lib/libalpm/error.c:113
#: lib/libalpm/error.c:115
#, c-format
msgid "invalid or corrupted package (checksum)"
msgstr "direizh pe kontronet eo ar pakad (checksum)"
#: lib/libalpm/error.c:115
#: lib/libalpm/error.c:117
#, c-format
msgid "invalid or corrupted package (PGP signature)"
msgstr "direizh pe kontronet eo ar pakad (sinadur PGP)"
#: lib/libalpm/error.c:117
#: lib/libalpm/error.c:119
#, c-format
msgid "package missing required signature"
msgstr "mankout a ra ar sinadur dleet gant ar pakad"
#: lib/libalpm/error.c:119
#: lib/libalpm/error.c:121
#, c-format
msgid "cannot open package file"
msgstr "n'haller ket digeriñ restr ar pakad"
#: lib/libalpm/error.c:121
#: lib/libalpm/error.c:123
#, c-format
msgid "cannot remove all files for package"
msgstr "n'haller ket dilemel holl restroù ar pakad"
#: lib/libalpm/error.c:123
#: lib/libalpm/error.c:125
#, c-format
msgid "package filename is not valid"
msgstr "direizh eo anv restr ar pakad"
#: lib/libalpm/error.c:125
#: lib/libalpm/error.c:127
#, c-format
msgid "package architecture is not valid"
msgstr "direizh eo savouriezh ar pakad"
#: lib/libalpm/error.c:127
#, c-format
msgid "could not find repository for target"
msgstr "n'haller ket kavout mirlec'h ar vukenn"
#: lib/libalpm/error.c:130
#, c-format
msgid "missing PGP signature"
@ -656,12 +717,12 @@ msgstr ""
msgid "unexpected error"
msgstr "fazi dic'hortoz"
#: lib/libalpm/handle.c:153
#: lib/libalpm/handle.c:165
#, c-format
msgid "lock file missing %s\n"
msgstr "mankout a ra ar restr marilhañ %s\n"
#: lib/libalpm/handle.c:159
#: lib/libalpm/handle.c:171
#, c-format
msgid "could not remove lock file %s\n"
msgstr "n'haller ket dilemel ar restr marilhañ %s\n"
@ -733,7 +794,7 @@ msgstr "krog %s linenn %d: n'haller ket arventennañ an dibarzh (%s)\n"
msgid "unable to run hook %s: %s\n"
msgstr "n'haller ket lañsañ ar c'hrog %s: %s\n"
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:386
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:378
#, c-format
msgid "could not open directory: %s: %s\n"
msgstr "n'haller ket digeriñ ar c'havlec'h : %s : %s\n"
@ -743,7 +804,7 @@ msgstr "n'haller ket digeriñ ar c'havlec'h : %s : %s\n"
msgid "could not open file: %s%s: %s\n"
msgstr "n'haller ket digeriñ ar restr: %s %s: %s\n"
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:259
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:279
#, c-format
msgid "could not stat file %s: %s\n"
msgstr "n'heller ket kaout stad ar restr %s : %s\n"
@ -753,279 +814,316 @@ msgstr "n'heller ket kaout stad ar restr %s : %s\n"
msgid "could not read directory: %s: %s\n"
msgstr "n'haller ket lenn ar c'havlec'h: %s: %s\n"
#: lib/libalpm/package.c:578
#: lib/libalpm/package.c:614
#, c-format
msgid "could not fully load metadata for package %s-%s\n"
msgstr "n'haller ket kargañ ar metaroadennoù a-bezh evit ar pakad %s-%s\n"
#: lib/libalpm/remove.c:119
#: lib/libalpm/package.c:869
#, c-format
msgid "invalid package metadata (name or version missing)"
msgstr ""
#: lib/libalpm/package.c:874
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name cannot start with '.' or "
"'-')\n"
msgstr ""
#: lib/libalpm/package.c:878
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name contains invalid "
"characters)\n"
msgstr ""
#: lib/libalpm/package.c:885 lib/libalpm/package.c:889
#, c-format
msgid ""
"invalid metadata for package %s-%s (package version contains invalid "
"characters)\n"
msgstr ""
#: lib/libalpm/package.c:895
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name and version too long)\n"
msgstr ""
#: lib/libalpm/remove.c:111
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "n'haller ket kavout %s er stlennvon -- laosket a-gostez\n"
#: lib/libalpm/remove.c:154
#: lib/libalpm/remove.c:146
#, c-format
msgid "removing %s from target list\n"
msgstr "o dilemel %s eus ar roll bukenn\n"
#: lib/libalpm/remove.c:346
#: lib/libalpm/remove.c:338
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "n'heller ket dilemel ar restr '%s' : %s\n"
#: lib/libalpm/remove.c:411 lib/libalpm/remove.c:420
#: lib/libalpm/remove.c:403 lib/libalpm/remove.c:412
#, c-format
msgid "could not backup %s due to PATH_MAX overflow\n"
msgstr "n'haller ket gwarediñ %sabalamour d'an dic'hlann PATH_MAX\n"
#: lib/libalpm/remove.c:562
#: lib/libalpm/remove.c:570
#, c-format
msgid "cannot remove %s (%s)\n"
msgstr "n'heller ket dilemel %s (%s)\n"
#: lib/libalpm/remove.c:735
#: lib/libalpm/remove.c:743
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "n'haller ket dilemel an enankad stlennvon %s-%s\n"
#: lib/libalpm/remove.c:740
#: lib/libalpm/remove.c:748
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "n'haller ket dilemel an enankad '%s' eus ar c'hrubuilh\n"
#: lib/libalpm/signing.c:171
#: lib/libalpm/signing.c:163
#, c-format
msgid "Public keyring not found; have you run '%s'?\n"
msgstr "Ne gaver ket an droñsell foran; lañset ho peus '%s'?\n"
#: lib/libalpm/signing.c:207 lib/libalpm/signing.c:784
#: lib/libalpm/signing.c:199 lib/libalpm/signing.c:773
#, c-format
msgid "GPGME error: %s\n"
msgstr "Fazi GPGME: %s\n"
#: lib/libalpm/signing.c:284
#: lib/libalpm/signing.c:275
#, c-format
msgid "looking up key %s using WKD\n"
msgstr ""
#: lib/libalpm/signing.c:293
#: lib/libalpm/signing.c:289
#, c-format
msgid "gpg error: %s\n"
msgstr ""
#: lib/libalpm/signing.c:441 lib/libalpm/signing.c:515
#: lib/libalpm/signing.c:440 lib/libalpm/signing.c:513
#, c-format
msgid "keyring is not writable\n"
msgstr "n'haller ket skrivañ en droñsell\n"
#: lib/libalpm/signing.c:539
#: lib/libalpm/signing.c:537
#, c-format
msgid "key \"%s\" on keyserver\n"
msgstr ""
#: lib/libalpm/signing.c:544
#: lib/libalpm/signing.c:542
#, c-format
msgid "key \"%s\" could not be imported\n"
msgstr ""
#: lib/libalpm/signing.c:548
#: lib/libalpm/signing.c:546
#, c-format
msgid "key \"%s\" could not be looked up remotely\n"
msgstr ""
#: lib/libalpm/signing.c:943 lib/libalpm/sync.c:1022
#: lib/libalpm/signing.c:932 lib/libalpm/sync.c:1052
#, c-format
msgid "%s: missing required signature\n"
msgstr "%s : mankout a ra ar sinadur dleet\n"
#: lib/libalpm/signing.c:958
#: lib/libalpm/signing.c:947
#, c-format
msgid "%s: signature from \"%s\" is marginal trust\n"
msgstr "%s: mentrezh ar sinadur \"%s\" n'eo ket fizius-tre\n"
#: lib/libalpm/signing.c:966
#: lib/libalpm/signing.c:955
#, c-format
msgid "%s: signature from \"%s\" is unknown trust\n"
msgstr ""
#: lib/libalpm/signing.c:973
#: lib/libalpm/signing.c:962
#, c-format
msgid "%s: signature from \"%s\" should never be trusted\n"
msgstr ""
#: lib/libalpm/signing.c:985
#: lib/libalpm/signing.c:974
#, c-format
msgid "%s: key \"%s\" is unknown\n"
msgstr "%s: dianav zo an alc'hwez \"%s\"\n"
#: lib/libalpm/signing.c:994
#: lib/libalpm/signing.c:983
#, c-format
msgid "%s: key \"%s\" is disabled\n"
msgstr ""
#: lib/libalpm/signing.c:998
#: lib/libalpm/signing.c:987
#, c-format
msgid "%s: signature from \"%s\" is expired\n"
msgstr ""
#: lib/libalpm/signing.c:1002
#: lib/libalpm/signing.c:991
#, c-format
msgid "%s: signature from \"%s\" is invalid\n"
msgstr ""
#: lib/libalpm/signing.c:1079 lib/libalpm/signing.c:1147
#: lib/libalpm/signing.c:1226
#: lib/libalpm/signing.c:1049 lib/libalpm/signing.c:1110
#: lib/libalpm/signing.c:1189
#, c-format
msgid "%s: signature format error\n"
msgstr ""
#: lib/libalpm/signing.c:1179 lib/libalpm/signing.c:1212
#: lib/libalpm/signing.c:1220
#: lib/libalpm/signing.c:1142 lib/libalpm/signing.c:1175
#: lib/libalpm/signing.c:1183
#, c-format
msgid "%s: unsupported signature format\n"
msgstr "%s: mentrezh sinadur anskor\n"
#: lib/libalpm/sync.c:99
#: lib/libalpm/sync.c:96
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s : o leuskel an hizivadenn pakad a-gostez (%s => %s)\n"
#: lib/libalpm/sync.c:111
#: lib/libalpm/sync.c:108
#, c-format
msgid "%s: ignoring package downgrade (%s => %s)\n"
msgstr "%s : o leuskel a-gostez an distro d'an handelv kozhoc'h (%s => %s)\n"
#: lib/libalpm/sync.c:114
#: lib/libalpm/sync.c:111
#, c-format
msgid "%s: downgrading from version %s to version %s\n"
msgstr "%s : o distreiñ eus an handelv %s betek an hini %s\n"
#: lib/libalpm/sync.c:120
#: lib/libalpm/sync.c:117
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr "%s : nevezoc'h eo an handelv lec'hel (%s) evit %s (%s)\n"
#: lib/libalpm/sync.c:161
#: lib/libalpm/sync.c:158
#, c-format
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
msgstr "o leuskel an erlec'hiadur pakad a-gostez (%s-%s => %s-%s)\n"
#: lib/libalpm/sync.c:177
#: lib/libalpm/sync.c:174
#, c-format
msgid "cannot replace %s by %s\n"
msgstr "n'haller ket erlec'hiañ %s gant %s\n"
#: lib/libalpm/sync.c:535 lib/libalpm/sync.c:605
#: lib/libalpm/sync.c:477
#, c-format
msgid "packages %s and %s have the same filename: %s\n"
msgstr ""
#: lib/libalpm/sync.c:546 lib/libalpm/sync.c:618
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr "tabutoù n'haller ket diskoulmañ a zo bet dinoet\n"
#: lib/libalpm/sync.c:555
#: lib/libalpm/sync.c:566
#, c-format
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgstr "o dilemel '%s' eus ar roll bukenn dre m'en deus un tabut gant '%s'\n"
msgid "removing '%s-%s' from target list because it conflicts with '%s-%s'\n"
msgstr ""
#: lib/libalpm/sync.c:849
#: lib/libalpm/sync.c:1020 lib/libalpm/sync.c:1187
#, c-format
msgid "failed to retrieve some files\n"
msgstr "c'hwitadenn war atoradur restroù 'zo\n"
msgid "%s: could not find package in cache\n"
msgstr ""
#: lib/libalpm/sync.c:1036
#: lib/libalpm/sync.c:1066
#, c-format
msgid "failed to read file %s: %s\n"
msgstr ""
#: lib/libalpm/sync.c:1223
#: lib/libalpm/sync.c:1324
#, c-format
msgid "not enough free disk space\n"
msgstr "n'eus ket plas dieub a-walc'h war ar bladenn\n"
#: lib/libalpm/sync.c:1245
#: lib/libalpm/sync.c:1346
#, c-format
msgid "could not commit removal transaction\n"
msgstr "n'haller ket erounit an treuzkas dilemel\n"
#: lib/libalpm/sync.c:1253
#: lib/libalpm/sync.c:1354
#, c-format
msgid "could not commit transaction\n"
msgstr "n'haller ket erounit an treuzkas\n"
#: lib/libalpm/trans.c:364
#: lib/libalpm/trans.c:369
#, c-format
msgid "could not create temp directory\n"
msgstr "n'haller ket krouiñ ur c'havlec'h padennek\n"
#: lib/libalpm/trans.c:379
#: lib/libalpm/trans.c:384
#, c-format
msgid "could not copy tempfile to %s (%s)\n"
msgstr "n'haller ket eilañ ar restr padennek e %s (%s)\n"
#: lib/libalpm/trans.c:410
#: lib/libalpm/trans.c:415
#, c-format
msgid "could not remove %s\n"
msgstr "n'haller ket dilemel %s\n"
#: lib/libalpm/trans.c:414
#: lib/libalpm/trans.c:419
#, c-format
msgid "could not remove tmpdir %s\n"
msgstr "n'haller ket dilemel ar c'havlec'h padennek e %s\n"
#: lib/libalpm/util.c:486
#: lib/libalpm/util.c:512
#, c-format
msgid "unable to write to pipe (%s)\n"
msgstr "n'haller ket skrivañ er gorzenn (%s)\n"
#: lib/libalpm/util.c:545
#: lib/libalpm/util.c:571
#, c-format
msgid "unable to read from pipe (%s)\n"
msgstr "n'haller ket lenn ar gorzenn (%s)\n"
#: lib/libalpm/util.c:609 lib/libalpm/util.c:615
#: lib/libalpm/util.c:641 lib/libalpm/util.c:647
#, c-format
msgid "could not create pipe (%s)\n"
msgstr "n'haller ket krouiñ ar gorzenn (%s)\n"
#: lib/libalpm/util.c:623
#: lib/libalpm/util.c:655
#, c-format
msgid "could not fork a new process (%s)\n"
msgstr "n'haller ket genel un araezad nevez (%s)\n"
#: lib/libalpm/util.c:646
#: lib/libalpm/util.c:680
#, c-format
msgid "could not change the root directory (%s)\n"
msgstr "n'haller ket kemmañ ar c'havlec'h gwrizienn (%s)\n"
#: lib/libalpm/util.c:658
#: lib/libalpm/util.c:700
#, c-format
msgid "call to execv failed (%s)\n"
msgstr "c'hwitadenn war galv execv (%s)\n"
#: lib/libalpm/util.c:737
#: lib/libalpm/util.c:779
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr "c'hwitadenn war galv waitpid (%s)\n"
#: lib/libalpm/util.c:747
#: lib/libalpm/util.c:789
#, c-format
msgid "command failed to execute correctly\n"
msgstr "c'hwitadenn war erounezadur an urzh\n"
#: lib/libalpm/util.c:754
#: lib/libalpm/util.c:796
#, c-format
msgid "Unknown signal"
msgstr "Arhent dianav"
#: lib/libalpm/util.c:756
#: lib/libalpm/util.c:798
#, c-format
msgid "command terminated by signal %d: %s\n"
msgstr "arsavet eo bet an urzh gant an arhent %d : %s\n"
#: lib/libalpm/util.c:853
#: lib/libalpm/util.c:916
#, c-format
msgid "no %s cache exists, creating...\n"
msgstr "n'eus krubuilh %s ebet, o krouiñ...\n"
#: lib/libalpm/util.c:884
#: lib/libalpm/util.c:947
#, c-format
msgid "couldn't find or create package cache, using %s instead\n"
msgstr ""

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Pacman Development Team <pacman-dev@archlinux.org>
# This file is distributed under the same license as the PACKAGE package.
# Copyright (C) YEAR "Pacman Development Team <pacman-dev@archlinux.org>"
# This file is distributed under the same license as the libalpm package.
#
# Translators:
# Chris Darnell <chris@cedeel.com>, 2013
@ -13,11 +13,11 @@
msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2019-10-21 17:23+1000\n"
"PO-Revision-Date: 2019-10-14 00:27+0000\n"
"Last-Translator: scootergrisen\n"
"Language-Team: Danish (http://www.transifex.com/toofishes/archlinux-pacman/"
"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/pacman/pacman/-/issues\n"
"POT-Creation-Date: 2024-07-14 19:10+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: scootergrisen, 2017\n"
"Language-Team: Danish (http://app.transifex.com/toofishes/archlinux-pacman/"
"language/da/)\n"
"Language: da\n"
"MIME-Version: 1.0\n"
@ -25,17 +25,17 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: lib/libalpm/add.c:91 lib/libalpm/sync.c:290
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s er opdateret - springer over\n"
#: lib/libalpm/add.c:95
#: lib/libalpm/add.c:94
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s er opdateret - springer over\n"
#: lib/libalpm/add.c:100
#: lib/libalpm/add.c:99
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "nedgraderer pakke %s (%s => %s)\n"
@ -45,17 +45,17 @@ msgstr "nedgraderer pakke %s (%s => %s)\n"
msgid "cannot allocate disk archive object"
msgstr "kan ikke allokere diskarkiv-objekt"
#: lib/libalpm/add.c:143 lib/libalpm/util.c:382
#: lib/libalpm/add.c:143 lib/libalpm/util.c:408
#, c-format
msgid "warning given when extracting %s (%s)\n"
msgstr "advarsel givet under udpakning %s (%s)\n"
#: lib/libalpm/add.c:146 lib/libalpm/util.c:385
#: lib/libalpm/add.c:146 lib/libalpm/util.c:411
#, c-format
msgid "could not extract %s (%s)\n"
msgstr "kunne ikke udpakke %s (%s)\n"
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:574 lib/libalpm/remove.c:542
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:707 lib/libalpm/remove.c:550
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "kunne ikke omdøbe %s til %s (%s)\n"
@ -99,137 +99,152 @@ msgstr "udtræk: overskriver ikke mappe med fil %s\n"
msgid "unable to extract %s.pacnew: path too long"
msgstr "kan ikke pakke %s.pacnew ud: sti for lang"
#: lib/libalpm/add.c:513 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#: lib/libalpm/add.c:510 lib/libalpm/util.c:354 lib/libalpm/util.c:624
#, c-format
msgid "could not get current working directory\n"
msgstr "kunne ikke hente nuværende arbejdsmappe\n"
#: lib/libalpm/add.c:518 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/util.c:650
#: lib/libalpm/add.c:515 lib/libalpm/util.c:359 lib/libalpm/util.c:629
#: lib/libalpm/util.c:684
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "kunne ikke ændre mappe til %s (%s)\n"
#: lib/libalpm/add.c:575 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#: lib/libalpm/add.c:571 lib/libalpm/util.c:429 lib/libalpm/util.c:808
#, c-format
msgid "could not restore working directory (%s)\n"
msgstr "kunne ikke genskabe arbejdsmappe (%s)\n"
#: lib/libalpm/add.c:583
#: lib/libalpm/add.c:579
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "der opstod et problem under opgradering %s\n"
#: lib/libalpm/add.c:589
#: lib/libalpm/add.c:585
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "der opstod et problem under installation af %s\n"
#: lib/libalpm/add.c:604
#: lib/libalpm/add.c:600
#, c-format
msgid "could not update database entry %s-%s\n"
msgstr "kunne ikke opdatere databasepunkt %s-%s\n"
#: lib/libalpm/add.c:615
#: lib/libalpm/add.c:610
#, c-format
msgid "could not add entry '%s' in cache\n"
msgstr "kunne ikke tilføje punkt »%s« i cache\n"
#: lib/libalpm/be_local.c:267
#: lib/libalpm/be_local.c:271
#, c-format
msgid "error while reading file %s: %s\n"
msgstr "der opstod en fejl under læsning af fil %s: %s\n"
#: lib/libalpm/be_local.c:364
#: lib/libalpm/be_local.c:382
#, c-format
msgid "removing invalid database: %s\n"
msgstr "fjerner ugyldig database: %s\n"
#: lib/libalpm/be_local.c:415 lib/libalpm/be_local.c:905
#: lib/libalpm/be_local.c:433 lib/libalpm/be_local.c:947
#, c-format
msgid "could not create directory %s: %s\n"
msgstr "kunne ikke oprette mappe %s: %s\n"
#: lib/libalpm/be_local.c:590 lib/libalpm/be_sync.c:386
#: lib/libalpm/be_local.c:608 lib/libalpm/be_sync.c:339
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "ugyldigt navn for databasepunkt '%s'\n"
#: lib/libalpm/be_local.c:598
#: lib/libalpm/be_local.c:616
#, c-format
msgid "duplicated database entry '%s'\n"
msgstr "duplikeret databasepunkt '%s'\n"
#: lib/libalpm/be_local.c:610
#: lib/libalpm/be_local.c:628
#, c-format
msgid "corrupted database entry '%s'\n"
msgstr "beskadiget databasepunkt '%s'\n"
#: lib/libalpm/be_local.c:713 lib/libalpm/be_local.c:809
#: lib/libalpm/be_local.c:954 lib/libalpm/be_local.c:1051
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:422 lib/libalpm/util.c:253
#: lib/libalpm/util.c:269
#: lib/libalpm/be_local.c:663
#, c-format
msgid "unknown install reason for package %s: %s\n"
msgstr ""
#: lib/libalpm/be_local.c:743 lib/libalpm/be_local.c:856
#: lib/libalpm/be_local.c:996 lib/libalpm/be_local.c:1102
#: lib/libalpm/diskspace.c:135 lib/libalpm/dload.c:792 lib/libalpm/util.c:273
#: lib/libalpm/util.c:289
#, c-format
msgid "could not open file %s: %s\n"
msgstr "kunne ikke åbne fil %s: %s\n"
#: lib/libalpm/be_local.c:729 lib/libalpm/be_sync.c:650
#: lib/libalpm/be_local.c:759 lib/libalpm/be_sync.c:612
#, c-format
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr "%s-database er inkonsistent: forskellige navne på pakke %s\n"
#: lib/libalpm/be_local.c:735 lib/libalpm/be_sync.c:656
#: lib/libalpm/be_local.c:765 lib/libalpm/be_sync.c:618
#, c-format
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr "%s-database er inkonsistent: forskellige versioner på pakke %s\n"
#: lib/libalpm/be_local.c:776
#: lib/libalpm/be_local.c:806
#, c-format
msgid "unknown validation type for package %s: %s\n"
msgstr "ukendt valideringstype for pakke %s: %s\n"
#: lib/libalpm/be_package.c:479 lib/libalpm/be_package.c:637
#: lib/libalpm/be_package.c:650
#: lib/libalpm/be_local.c:841
#, c-format
msgid "%s: unknown key '%s' in local database\n"
msgstr ""
#: lib/libalpm/be_package.c:255
#, c-format
msgid "%s: unknown key '%s' in package description\n"
msgstr ""
#: lib/libalpm/be_package.c:482 lib/libalpm/be_package.c:635
#: lib/libalpm/be_package.c:647
#, c-format
msgid "error while reading package %s: %s\n"
msgstr "der opstod en fejl under læsning af pakke %s: %s\n"
#: lib/libalpm/be_package.c:493 lib/libalpm/be_package.c:517
#: lib/libalpm/be_package.c:495 lib/libalpm/be_package.c:518
#, c-format
msgid "error while reading mtree of package %s: %s\n"
msgstr "fejl ved læsning af mtree af pakke %s: %s\n"
#: lib/libalpm/be_package.c:603
#: lib/libalpm/be_package.c:601
#, c-format
msgid "could not parse package description file in %s\n"
msgstr "kunne ikke fortolke pakkebeskrivelsesfil i %s\n"
#: lib/libalpm/be_package.c:608
#: lib/libalpm/be_package.c:606
#, c-format
msgid "missing package name in %s\n"
msgstr "manglende pakkenavn i %s\n"
#: lib/libalpm/be_package.c:612
#: lib/libalpm/be_package.c:610
#, c-format
msgid "missing package version in %s\n"
msgstr "manglende pakkeversion i %s\n"
#: lib/libalpm/be_package.c:616
#: lib/libalpm/be_package.c:614
#, c-format
msgid "invalid package version in %s\n"
msgstr "ugyldig pakkeversion i %s\n"
#: lib/libalpm/be_package.c:657
#: lib/libalpm/be_package.c:653
#, c-format
msgid "missing package metadata in %s\n"
msgstr "manglende pakkemetadata i %s\n"
#: lib/libalpm/be_package.c:750
#: lib/libalpm/be_package.c:745
#, c-format
msgid "failed to read signature file: %s\n"
msgstr "kunne ikke læse underskriftfil: %s\n"
#: lib/libalpm/be_package.c:779 lib/libalpm/sync.c:953
#: lib/libalpm/be_package.c:768 lib/libalpm/sync.c:976
#, c-format
msgid "required key missing from keyring\n"
msgstr "krævede nøgle mangler fra nøglering\n"
@ -239,32 +254,37 @@ msgstr "krævede nøgle mangler fra nøglering\n"
msgid "removing invalid file: %s\n"
msgstr "fjerner ugyldig fil: %s\n"
#: lib/libalpm/be_sync.c:515
#: lib/libalpm/be_sync.c:471
#, c-format
msgid "could not parse package description file '%s' from db '%s'\n"
msgstr "kunne ikke fortolke pakkebeskrivelsesfil '%s' fra db '%s'\n"
#: lib/libalpm/be_sync.c:522
#: lib/libalpm/be_sync.c:486
#, c-format
msgid "could not read db '%s' (%s)\n"
msgstr "kunne ikke læse db '%s' (%s)\n"
#: lib/libalpm/be_sync.c:556 lib/libalpm/be_sync.c:561
#: lib/libalpm/be_sync.c:519 lib/libalpm/be_sync.c:524
#, c-format
msgid "%s database is inconsistent: filename of package %s is illegal\n"
msgstr "%s-database er inkonsistent: filnavnet på pakken %s er ugyldigt\n"
#: lib/libalpm/be_sync.c:566
#: lib/libalpm/be_sync.c:529
#, c-format
msgid "%s database is inconsistent: filename of package %s is too long\n"
msgstr "%s-database er inkonsistent: filnavnet på pakken %s er for langt\n"
#: lib/libalpm/be_sync.c:632
#: lib/libalpm/be_sync.c:594
#, c-format
msgid "unknown database file: %s\n"
msgstr "ukendt databaseful: %s\n"
#: lib/libalpm/db.c:370
#: lib/libalpm/be_sync.c:712
#, c-format
msgid "%s: unknown key '%s' in sync database\n"
msgstr ""
#: lib/libalpm/db.c:413
#, c-format
msgid "database path is undefined\n"
msgstr "databasesti er udefineret\n"
@ -284,12 +304,12 @@ msgstr "%s vil blive fjernet efter dennes %s-afhængighed\n"
msgid "%s will be installed before its %s dependency\n"
msgstr "%s vil blive installeret før dennes %s-afhængighed\n"
#: lib/libalpm/deps.c:681 lib/libalpm/deps.c:712
#: lib/libalpm/deps.c:666 lib/libalpm/deps.c:697
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "ignorerer pakke %s-%s\n"
#: lib/libalpm/deps.c:869
#: lib/libalpm/deps.c:842
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "kan ikke læse '%s', en afhængighed af '%s'\n"
@ -304,82 +324,123 @@ msgstr "kunne ikke hente filsysteminformation for %s: %s\n"
msgid "could not open file: %s: %s\n"
msgstr "kunne ikke åbne fil: %s: %s\n"
#: lib/libalpm/diskspace.c:146 lib/libalpm/diskspace.c:159
#: lib/libalpm/diskspace.c:154 lib/libalpm/diskspace.c:167
#, c-format
msgid "could not get filesystem information\n"
msgstr "kunne ikke hente filsysteminformation\n"
#: lib/libalpm/diskspace.c:242
#: lib/libalpm/diskspace.c:254
#, c-format
msgid "could not get file information for %s\n"
msgstr "kunne ikke hente filinformation for %s\n"
#: lib/libalpm/diskspace.c:256 lib/libalpm/diskspace.c:315
#: lib/libalpm/diskspace.c:268 lib/libalpm/diskspace.c:327
#, c-format
msgid "could not determine mount point for file %s\n"
msgstr "kunne ikke bestemme monteringspunkt for fil %s\n"
#: lib/libalpm/diskspace.c:354
#: lib/libalpm/diskspace.c:366
#, c-format
msgid "Partition %s too full: %jd blocks needed, %ju blocks free\n"
msgstr "Partition %s for fuld: %jd blokke nødvendige, %ju blokke frie\n"
#: lib/libalpm/diskspace.c:379 lib/libalpm/diskspace.c:433
#: lib/libalpm/diskspace.c:391 lib/libalpm/diskspace.c:445
#, c-format
msgid "could not determine filesystem mount points\n"
msgstr "kunne ikke bestemme monteringspunkter for filsystem\n"
#: lib/libalpm/diskspace.c:385
#: lib/libalpm/diskspace.c:397
#, c-format
msgid "could not determine cachedir mount point %s\n"
msgstr "kunne ikke bestemme monteringspunkt for cachedir %s\n"
#: lib/libalpm/diskspace.c:438
#: lib/libalpm/diskspace.c:450
#, c-format
msgid "could not determine root mount point %s\n"
msgstr "kunne ikke bestemme rodmonteringspunkt %s\n"
#: lib/libalpm/diskspace.c:486
#: lib/libalpm/diskspace.c:498
#, c-format
msgid "Partition %s is mounted read only\n"
msgstr "Partition %s er monteret som læs-kun\n"
#: lib/libalpm/dload.c:161
#, c-format
msgid "disk"
msgstr "disk"
#: lib/libalpm/dload.c:348
#: lib/libalpm/dload.c:107
#, c-format
msgid "failed to create temporary file for download\n"
msgstr "kunne ikke oprette midlertidig fil til hentning\n"
#: lib/libalpm/dload.c:393
#: lib/libalpm/dload.c:198
#, c-format
msgid "url '%s' is invalid\n"
msgstr "adressen '%s' er ugyldig\n"
msgid ""
"too many errors from %s, skipping for the remainder of this transaction\n"
msgstr ""
#: lib/libalpm/dload.c:464 lib/libalpm/dload.c:485 lib/libalpm/dload.c:496
#: lib/libalpm/dload.c:215
#, c-format
msgid "fatal error from %s, skipping for the remainder of this transaction\n"
msgstr ""
#: lib/libalpm/dload.c:310
#, c-format
msgid "disk"
msgstr "disk"
#: lib/libalpm/dload.c:532 lib/libalpm/dload.c:570 lib/libalpm/dload.c:583
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "fejlede i indhentning af fil '%s' fra %s: %s\n"
#: lib/libalpm/dload.c:477
#: lib/libalpm/dload.c:562
#, c-format
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
msgstr ""
"kunne ikke indhente fil '%s' fra %s: forventet downloadstørrelse "
"overskredet\n"
#: lib/libalpm/dload.c:532
#: lib/libalpm/dload.c:685
#, c-format
msgid "%s appears to be truncated: %jd/%jd bytes\n"
msgstr "%s ser ud til at være afkortet: %jd/%jd byte\n"
#: lib/libalpm/dload.c:677 lib/libalpm/dload.c:706
#: lib/libalpm/dload.c:776
#, c-format
msgid "failed to download %s\n"
msgstr "kunne ikke hente %s\n"
msgid "url '%s' is invalid\n"
msgstr "adressen '%s' er ugyldig\n"
#: lib/libalpm/dload.c:864
#, c-format
msgid "failed to setup a download payload for %s\n"
msgstr ""
#: lib/libalpm/dload.c:876
#, c-format
msgid "curl returned error %d from transfer\n"
msgstr ""
#: lib/libalpm/dload.c:900
#, c-format
msgid "curl transfer error: %d\n"
msgstr ""
#: lib/libalpm/dload.c:963
#, c-format
msgid "could not chdir to download directory %s\n"
msgstr "kunne ikke ændre mappe (chdir) til overførelsesmappe %s\n"
#: lib/libalpm/dload.c:968
#, c-format
msgid "switching to sandbox user '%s' failed!\n"
msgstr ""
#: lib/libalpm/dload.c:1361 lib/libalpm/sync.c:861
#, c-format
msgid "failed to retrieve some files\n"
msgstr "kunne ikke indhente nogle filer\n"
#: lib/libalpm/dload.c:1384
#, c-format
msgid "download completed successfully but no file in the cache\n"
msgstr ""
#: lib/libalpm/error.c:40
#, c-format
@ -496,7 +557,7 @@ msgstr "ingen servere konfigureret for arkiv"
msgid "transaction already initialized"
msgstr "transaktion allerede initialiseret"
#: lib/libalpm/error.c:90 lib/libalpm/error.c:94
#: lib/libalpm/error.c:90 lib/libalpm/error.c:96
#, c-format
msgid "transaction not initialized"
msgstr "transaktion er ikke initialiseret"
@ -506,86 +567,86 @@ msgstr "transaktion er ikke initialiseret"
msgid "duplicate target"
msgstr "dupliker mål"
#: lib/libalpm/error.c:96
#: lib/libalpm/error.c:94
#, c-format
msgid "duplicate filename"
msgstr ""
#: lib/libalpm/error.c:98
#, c-format
msgid "transaction not prepared"
msgstr "transaktion er ikke forberedt"
#: lib/libalpm/error.c:98
#: lib/libalpm/error.c:100
#, c-format
msgid "transaction aborted"
msgstr "transaktion afbrudt"
#: lib/libalpm/error.c:100
#: lib/libalpm/error.c:102
#, c-format
msgid "operation not compatible with the transaction type"
msgstr "handling er ikke kompatibel med transaktionstype"
#: lib/libalpm/error.c:102
#: lib/libalpm/error.c:104
#, c-format
msgid "transaction commit attempt when database is not locked"
msgstr "forsøg på transaktionsindsendelse (commit) når database ikke er låst"
#: lib/libalpm/error.c:104
#: lib/libalpm/error.c:106
#, c-format
msgid "failed to run transaction hooks"
msgstr "kunne ikke køre transaktionskroge"
#: lib/libalpm/error.c:107
#: lib/libalpm/error.c:109
#, c-format
msgid "could not find or read package"
msgstr "kunne ikke finde eller læse pakke"
#: lib/libalpm/error.c:109
#: lib/libalpm/error.c:111
#, c-format
msgid "operation cancelled due to ignorepkg"
msgstr "handling afbrudt på grund af igonrepkg"
#: lib/libalpm/error.c:111
#: lib/libalpm/error.c:113
#, c-format
msgid "invalid or corrupted package"
msgstr "ugyldig eller beskadiget pakke"
#: lib/libalpm/error.c:113
#: lib/libalpm/error.c:115
#, c-format
msgid "invalid or corrupted package (checksum)"
msgstr "ugyldig eller beskadiget database (kontrolsum)"
#: lib/libalpm/error.c:115
#: lib/libalpm/error.c:117
#, c-format
msgid "invalid or corrupted package (PGP signature)"
msgstr "ugyldig eller beskadiget pakke (PGP-signatur)"
#: lib/libalpm/error.c:117
#: lib/libalpm/error.c:119
#, c-format
msgid "package missing required signature"
msgstr "pakke mangler krævet signatur"
#: lib/libalpm/error.c:119
#: lib/libalpm/error.c:121
#, c-format
msgid "cannot open package file"
msgstr "kan ikke åbne pakkefil"
#: lib/libalpm/error.c:121
#: lib/libalpm/error.c:123
#, c-format
msgid "cannot remove all files for package"
msgstr "kan ikke fjerne alle filer for pakke"
#: lib/libalpm/error.c:123
#: lib/libalpm/error.c:125
#, c-format
msgid "package filename is not valid"
msgstr "pakkefilnavn er ugyldigt"
#: lib/libalpm/error.c:125
#: lib/libalpm/error.c:127
#, c-format
msgid "package architecture is not valid"
msgstr "pakkearkitektur er ikke gyldig"
#: lib/libalpm/error.c:127
#, c-format
msgid "could not find repository for target"
msgstr "kunne ikke finde arkiv for mål"
#: lib/libalpm/error.c:130
#, c-format
msgid "missing PGP signature"
@ -651,12 +712,12 @@ msgstr "kompileret uden understøttelse af signatur"
msgid "unexpected error"
msgstr "uventet fejl"
#: lib/libalpm/handle.c:153
#: lib/libalpm/handle.c:165
#, c-format
msgid "lock file missing %s\n"
msgstr "låsefil mangler %s\n"
#: lib/libalpm/handle.c:159
#: lib/libalpm/handle.c:171
#, c-format
msgid "could not remove lock file %s\n"
msgstr "kunne ikke fjerne låsningsfil %s\n"
@ -728,7 +789,7 @@ msgstr "hook %s linje %d: kan ikke sætte tilvalg (%s)\n"
msgid "unable to run hook %s: %s\n"
msgstr "kan ikke køre hook %s: %s\n"
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:386
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:378
#, c-format
msgid "could not open directory: %s: %s\n"
msgstr "kunne ikke åbne mappe: %s: %s\n"
@ -738,7 +799,7 @@ msgstr "kunne ikke åbne mappe: %s: %s\n"
msgid "could not open file: %s%s: %s\n"
msgstr "kunne ikke åbne fil: %s%s: %s\n"
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:259
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:279
#, c-format
msgid "could not stat file %s: %s\n"
msgstr "kunne ikke køre (stat) fil %s: %s\n"
@ -748,279 +809,316 @@ msgstr "kunne ikke køre (stat) fil %s: %s\n"
msgid "could not read directory: %s: %s\n"
msgstr "kunne ikke læse mappe: %s: %s\n"
#: lib/libalpm/package.c:578
#: lib/libalpm/package.c:614
#, c-format
msgid "could not fully load metadata for package %s-%s\n"
msgstr "kunne ikke fuldt indlæse metadata for pakke %s-%s\n"
#: lib/libalpm/remove.c:119
#: lib/libalpm/package.c:869
#, c-format
msgid "invalid package metadata (name or version missing)"
msgstr ""
#: lib/libalpm/package.c:874
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name cannot start with '.' or "
"'-')\n"
msgstr ""
#: lib/libalpm/package.c:878
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name contains invalid "
"characters)\n"
msgstr ""
#: lib/libalpm/package.c:885 lib/libalpm/package.c:889
#, c-format
msgid ""
"invalid metadata for package %s-%s (package version contains invalid "
"characters)\n"
msgstr ""
#: lib/libalpm/package.c:895
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name and version too long)\n"
msgstr ""
#: lib/libalpm/remove.c:111
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "kunne ikke finde %s i database - springer over\n"
#: lib/libalpm/remove.c:154
#: lib/libalpm/remove.c:146
#, c-format
msgid "removing %s from target list\n"
msgstr "fjerner %s fra målliste\n"
#: lib/libalpm/remove.c:346
#: lib/libalpm/remove.c:338
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "kan ikke fjerne fil »%s«:%s\n"
#: lib/libalpm/remove.c:411 lib/libalpm/remove.c:420
#: lib/libalpm/remove.c:403 lib/libalpm/remove.c:412
#, c-format
msgid "could not backup %s due to PATH_MAX overflow\n"
msgstr "kunne ikke sikkerhedskopiere %s på grund af PATH_MAX-overløb\n"
#: lib/libalpm/remove.c:562
#: lib/libalpm/remove.c:570
#, c-format
msgid "cannot remove %s (%s)\n"
msgstr "kan ikke fjerne %s (%s)\n"
#: lib/libalpm/remove.c:735
#: lib/libalpm/remove.c:743
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "kunne ikke fjerne databasepunkt %s-%s\n"
#: lib/libalpm/remove.c:740
#: lib/libalpm/remove.c:748
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "kunne ikke fjerne punkt '%s' fra cache\n"
#: lib/libalpm/signing.c:171
#: lib/libalpm/signing.c:163
#, c-format
msgid "Public keyring not found; have you run '%s'?\n"
msgstr "Offentlig nøglering ikke fundet. Har du kørt '%s'?\n"
#: lib/libalpm/signing.c:207 lib/libalpm/signing.c:784
#: lib/libalpm/signing.c:199 lib/libalpm/signing.c:773
#, c-format
msgid "GPGME error: %s\n"
msgstr "Fejl ved GPGME: %s\n"
#: lib/libalpm/signing.c:284
#: lib/libalpm/signing.c:275
#, c-format
msgid "looking up key %s using WKD\n"
msgstr "slår nøglen %s op med WKD\n"
#: lib/libalpm/signing.c:293
#: lib/libalpm/signing.c:289
#, c-format
msgid "gpg error: %s\n"
msgstr "fejl ved gpg: %s\n"
#: lib/libalpm/signing.c:441 lib/libalpm/signing.c:515
#: lib/libalpm/signing.c:440 lib/libalpm/signing.c:513
#, c-format
msgid "keyring is not writable\n"
msgstr "der kan ikke skrives til nøglering\n"
#: lib/libalpm/signing.c:539
#: lib/libalpm/signing.c:537
#, c-format
msgid "key \"%s\" on keyserver\n"
msgstr "nøglen\"%s\" på nøgleserver\n"
#: lib/libalpm/signing.c:544
#: lib/libalpm/signing.c:542
#, c-format
msgid "key \"%s\" could not be imported\n"
msgstr "nøglen \"%s\" kunne ikke importeres\n"
#: lib/libalpm/signing.c:548
#: lib/libalpm/signing.c:546
#, c-format
msgid "key \"%s\" could not be looked up remotely\n"
msgstr "nøglen \"%s\" kunne ikke opslås eksternt\n"
#: lib/libalpm/signing.c:943 lib/libalpm/sync.c:1022
#: lib/libalpm/signing.c:932 lib/libalpm/sync.c:1052
#, c-format
msgid "%s: missing required signature\n"
msgstr "%s: mangler krævet signatur\n"
#: lib/libalpm/signing.c:958
#: lib/libalpm/signing.c:947
#, c-format
msgid "%s: signature from \"%s\" is marginal trust\n"
msgstr "%s: signatur fra \"%s\" er marginelt betroet\n"
#: lib/libalpm/signing.c:966
#: lib/libalpm/signing.c:955
#, c-format
msgid "%s: signature from \"%s\" is unknown trust\n"
msgstr "%s: signatur fra \"%s\" er ukendt betroet\n"
#: lib/libalpm/signing.c:973
#: lib/libalpm/signing.c:962
#, c-format
msgid "%s: signature from \"%s\" should never be trusted\n"
msgstr "%s: signatur fra \"%s\" skal aldrig betroes\n"
#: lib/libalpm/signing.c:985
#: lib/libalpm/signing.c:974
#, c-format
msgid "%s: key \"%s\" is unknown\n"
msgstr "%s: nøgelen \"%s\" er ukendt\n"
#: lib/libalpm/signing.c:994
#: lib/libalpm/signing.c:983
#, c-format
msgid "%s: key \"%s\" is disabled\n"
msgstr "%s: nøglen \"%s\" er deaktiveret\n"
#: lib/libalpm/signing.c:998
#: lib/libalpm/signing.c:987
#, c-format
msgid "%s: signature from \"%s\" is expired\n"
msgstr "%s: signatur fra \"%s\" er udløbet\n"
#: lib/libalpm/signing.c:1002
#: lib/libalpm/signing.c:991
#, c-format
msgid "%s: signature from \"%s\" is invalid\n"
msgstr "%s: signatur fra \"%s\" er ugyldig\n"
#: lib/libalpm/signing.c:1079 lib/libalpm/signing.c:1147
#: lib/libalpm/signing.c:1226
#: lib/libalpm/signing.c:1049 lib/libalpm/signing.c:1110
#: lib/libalpm/signing.c:1189
#, c-format
msgid "%s: signature format error\n"
msgstr "%s: fejl i signaturformat\n"
#: lib/libalpm/signing.c:1179 lib/libalpm/signing.c:1212
#: lib/libalpm/signing.c:1220
#: lib/libalpm/signing.c:1142 lib/libalpm/signing.c:1175
#: lib/libalpm/signing.c:1183
#, c-format
msgid "%s: unsupported signature format\n"
msgstr "%s: signaturformat understøttes ikke\n"
#: lib/libalpm/sync.c:99
#: lib/libalpm/sync.c:96
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: ignorerer pakkeopgradering (%s => %s)\n"
#: lib/libalpm/sync.c:111
#: lib/libalpm/sync.c:108
#, c-format
msgid "%s: ignoring package downgrade (%s => %s)\n"
msgstr "%s: ignorerer pakkenedgradering (%s => %s)\n"
#: lib/libalpm/sync.c:114
#: lib/libalpm/sync.c:111
#, c-format
msgid "%s: downgrading from version %s to version %s\n"
msgstr "%s: nedgraderer fra version %s til version %s\n"
#: lib/libalpm/sync.c:120
#: lib/libalpm/sync.c:117
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr "%s: lokal (%s) er nyere end %s (%s)\n"
#: lib/libalpm/sync.c:161
#: lib/libalpm/sync.c:158
#, c-format
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
msgstr "ignorerer pakkeerstatning (%s-%s => %s-%s)\n"
#: lib/libalpm/sync.c:177
#: lib/libalpm/sync.c:174
#, c-format
msgid "cannot replace %s by %s\n"
msgstr "kan ikke erstatte %s med %s\n"
#: lib/libalpm/sync.c:535 lib/libalpm/sync.c:605
#: lib/libalpm/sync.c:477
#, c-format
msgid "packages %s and %s have the same filename: %s\n"
msgstr ""
#: lib/libalpm/sync.c:546 lib/libalpm/sync.c:618
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr "pakkekonflikter, der ikke kan løses, er detekteret\n"
#: lib/libalpm/sync.c:555
#: lib/libalpm/sync.c:566
#, c-format
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgstr "fjerner »%s« fra målliste da det konflikter med »%s«\n"
msgid "removing '%s-%s' from target list because it conflicts with '%s-%s'\n"
msgstr ""
#: lib/libalpm/sync.c:849
#: lib/libalpm/sync.c:1020 lib/libalpm/sync.c:1187
#, c-format
msgid "failed to retrieve some files\n"
msgstr "kunne ikke indhente nogle filer\n"
msgid "%s: could not find package in cache\n"
msgstr ""
#: lib/libalpm/sync.c:1036
#: lib/libalpm/sync.c:1066
#, c-format
msgid "failed to read file %s: %s\n"
msgstr "kunne ikke læse filen %s: %s\n"
#: lib/libalpm/sync.c:1223
#: lib/libalpm/sync.c:1324
#, c-format
msgid "not enough free disk space\n"
msgstr "ikke nok ledig diskplads\n"
#: lib/libalpm/sync.c:1245
#: lib/libalpm/sync.c:1346
#, c-format
msgid "could not commit removal transaction\n"
msgstr "kunne ikke indsende (commit) fjernelsestransaktion\n"
#: lib/libalpm/sync.c:1253
#: lib/libalpm/sync.c:1354
#, c-format
msgid "could not commit transaction\n"
msgstr "kunne ikke indsende (commit) transaktion\n"
#: lib/libalpm/trans.c:364
#: lib/libalpm/trans.c:369
#, c-format
msgid "could not create temp directory\n"
msgstr "kunne ikke oprette midlertidig mappe\n"
#: lib/libalpm/trans.c:379
#: lib/libalpm/trans.c:384
#, c-format
msgid "could not copy tempfile to %s (%s)\n"
msgstr "kunne ikke kopier midlertidig fil til %s (%s)\n"
#: lib/libalpm/trans.c:410
#: lib/libalpm/trans.c:415
#, c-format
msgid "could not remove %s\n"
msgstr "kunne ikke slette %s\n"
#: lib/libalpm/trans.c:414
#: lib/libalpm/trans.c:419
#, c-format
msgid "could not remove tmpdir %s\n"
msgstr "kunne ikke fjerne tmpdir %s\n"
#: lib/libalpm/util.c:486
#: lib/libalpm/util.c:512
#, c-format
msgid "unable to write to pipe (%s)\n"
msgstr "kan ikke skrive til pipe (%s)\n"
#: lib/libalpm/util.c:545
#: lib/libalpm/util.c:571
#, c-format
msgid "unable to read from pipe (%s)\n"
msgstr "kan ikke læse fra pipe (%s)\n"
#: lib/libalpm/util.c:609 lib/libalpm/util.c:615
#: lib/libalpm/util.c:641 lib/libalpm/util.c:647
#, c-format
msgid "could not create pipe (%s)\n"
msgstr "kunne ikke oprette pipe (%s)\n"
#: lib/libalpm/util.c:623
#: lib/libalpm/util.c:655
#, c-format
msgid "could not fork a new process (%s)\n"
msgstr "kunne ikke forgren en ny proces (%s)\n"
#: lib/libalpm/util.c:646
#: lib/libalpm/util.c:680
#, c-format
msgid "could not change the root directory (%s)\n"
msgstr "kunne ikke ændre rodmappen (%s)\n"
#: lib/libalpm/util.c:658
#: lib/libalpm/util.c:700
#, c-format
msgid "call to execv failed (%s)\n"
msgstr "kald til execv fejlede (%s)\n"
#: lib/libalpm/util.c:737
#: lib/libalpm/util.c:779
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr "kald til waitpid fejlede (%s)\n"
#: lib/libalpm/util.c:747
#: lib/libalpm/util.c:789
#, c-format
msgid "command failed to execute correctly\n"
msgstr "kommando kunne ikke udføres korrekt\n"
#: lib/libalpm/util.c:754
#: lib/libalpm/util.c:796
#, c-format
msgid "Unknown signal"
msgstr "Ukendt signal"
#: lib/libalpm/util.c:756
#: lib/libalpm/util.c:798
#, c-format
msgid "command terminated by signal %d: %s\n"
msgstr "kommando afbrudt af signal %d: %s\n"
#: lib/libalpm/util.c:853
#: lib/libalpm/util.c:916
#, c-format
msgid "no %s cache exists, creating...\n"
msgstr "ingen %s-cache findes, opretter...\n"
#: lib/libalpm/util.c:884
#: lib/libalpm/util.c:947
#, c-format
msgid "couldn't find or create package cache, using %s instead\n"
msgstr "kunne ikke finde eller oprette pakke-cache, bruger i stedet %s\n"

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,19 +1,20 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Pacman Development Team <pacman-dev@archlinux.org>
# This file is distributed under the same license as the PACKAGE package.
# Copyright (C) YEAR "Pacman Development Team <pacman-dev@archlinux.org>"
# This file is distributed under the same license as the libalpm package.
#
# Translators:
# Allan McRae <allan@archlinux.org>, 2013
# Allan McRae <allan@archlinux.org>, 2013-2015,2017-2019
# Allan McRae <allan@archlinux.org>, 2013-2015,2017-2019,2021,2024
# Dan McGee <dpmcgee@gmail.com>, 2011
msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2019-10-21 17:23+1000\n"
"PO-Revision-Date: 2019-10-07 08:47+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"Language-Team: English (United Kingdom) (http://www.transifex.com/toofishes/"
"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/pacman/pacman/-/issues\n"
"POT-Creation-Date: 2024-07-14 19:10+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>, "
"2013-2015,2017-2019,2021,2024\n"
"Language-Team: English (United Kingdom) (http://app.transifex.com/toofishes/"
"archlinux-pacman/language/en_GB/)\n"
"Language: en_GB\n"
"MIME-Version: 1.0\n"
@ -21,17 +22,17 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: lib/libalpm/add.c:91 lib/libalpm/sync.c:290
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s is up to date -- skipping\n"
#: lib/libalpm/add.c:95
#: lib/libalpm/add.c:94
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s is up to date -- reinstalling\n"
#: lib/libalpm/add.c:100
#: lib/libalpm/add.c:99
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "downgrading package %s (%s => %s)\n"
@ -41,17 +42,17 @@ msgstr "downgrading package %s (%s => %s)\n"
msgid "cannot allocate disk archive object"
msgstr "cannot allocate disk archive object"
#: lib/libalpm/add.c:143 lib/libalpm/util.c:382
#: lib/libalpm/add.c:143 lib/libalpm/util.c:408
#, c-format
msgid "warning given when extracting %s (%s)\n"
msgstr "warning given when extracting %s (%s)\n"
#: lib/libalpm/add.c:146 lib/libalpm/util.c:385
#: lib/libalpm/add.c:146 lib/libalpm/util.c:411
#, c-format
msgid "could not extract %s (%s)\n"
msgstr "could not extract %s (%s)\n"
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:574 lib/libalpm/remove.c:542
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:707 lib/libalpm/remove.c:550
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "could not rename %s to %s (%s)\n"
@ -95,137 +96,152 @@ msgstr "extract: not overwriting dir with file %s\n"
msgid "unable to extract %s.pacnew: path too long"
msgstr "unable to extract %s.pacnew: path too long"
#: lib/libalpm/add.c:513 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#: lib/libalpm/add.c:510 lib/libalpm/util.c:354 lib/libalpm/util.c:624
#, c-format
msgid "could not get current working directory\n"
msgstr "could not get current working directory\n"
#: lib/libalpm/add.c:518 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/util.c:650
#: lib/libalpm/add.c:515 lib/libalpm/util.c:359 lib/libalpm/util.c:629
#: lib/libalpm/util.c:684
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "could not change directory to %s (%s)\n"
#: lib/libalpm/add.c:575 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#: lib/libalpm/add.c:571 lib/libalpm/util.c:429 lib/libalpm/util.c:808
#, c-format
msgid "could not restore working directory (%s)\n"
msgstr "could not restore working directory (%s)\n"
#: lib/libalpm/add.c:583
#: lib/libalpm/add.c:579
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "problem occurred while upgrading %s\n"
#: lib/libalpm/add.c:589
#: lib/libalpm/add.c:585
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "problem occurred while installing %s\n"
#: lib/libalpm/add.c:604
#: lib/libalpm/add.c:600
#, c-format
msgid "could not update database entry %s-%s\n"
msgstr "could not update database entry %s-%s\n"
#: lib/libalpm/add.c:615
#: lib/libalpm/add.c:610
#, c-format
msgid "could not add entry '%s' in cache\n"
msgstr "could not add entry '%s' in cache\n"
#: lib/libalpm/be_local.c:267
#: lib/libalpm/be_local.c:271
#, c-format
msgid "error while reading file %s: %s\n"
msgstr "error while reading file %s: %s\n"
#: lib/libalpm/be_local.c:364
#: lib/libalpm/be_local.c:382
#, c-format
msgid "removing invalid database: %s\n"
msgstr "removing invalid database: %s\n"
#: lib/libalpm/be_local.c:415 lib/libalpm/be_local.c:905
#: lib/libalpm/be_local.c:433 lib/libalpm/be_local.c:947
#, c-format
msgid "could not create directory %s: %s\n"
msgstr "could not create directory %s: %s\n"
#: lib/libalpm/be_local.c:590 lib/libalpm/be_sync.c:386
#: lib/libalpm/be_local.c:608 lib/libalpm/be_sync.c:339
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "invalid name for database entry '%s'\n"
#: lib/libalpm/be_local.c:598
#: lib/libalpm/be_local.c:616
#, c-format
msgid "duplicated database entry '%s'\n"
msgstr "duplicated database entry '%s'\n"
#: lib/libalpm/be_local.c:610
#: lib/libalpm/be_local.c:628
#, c-format
msgid "corrupted database entry '%s'\n"
msgstr "corrupted database entry '%s'\n"
#: lib/libalpm/be_local.c:713 lib/libalpm/be_local.c:809
#: lib/libalpm/be_local.c:954 lib/libalpm/be_local.c:1051
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:422 lib/libalpm/util.c:253
#: lib/libalpm/util.c:269
#: lib/libalpm/be_local.c:663
#, c-format
msgid "unknown install reason for package %s: %s\n"
msgstr "unknown install reason for package %s: %s\n"
#: lib/libalpm/be_local.c:743 lib/libalpm/be_local.c:856
#: lib/libalpm/be_local.c:996 lib/libalpm/be_local.c:1102
#: lib/libalpm/diskspace.c:135 lib/libalpm/dload.c:792 lib/libalpm/util.c:273
#: lib/libalpm/util.c:289
#, c-format
msgid "could not open file %s: %s\n"
msgstr "could not open file %s: %s\n"
#: lib/libalpm/be_local.c:729 lib/libalpm/be_sync.c:650
#: lib/libalpm/be_local.c:759 lib/libalpm/be_sync.c:612
#, c-format
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr "%s database is inconsistent: name mismatch on package %s\n"
#: lib/libalpm/be_local.c:735 lib/libalpm/be_sync.c:656
#: lib/libalpm/be_local.c:765 lib/libalpm/be_sync.c:618
#, c-format
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr "%s database is inconsistent: version mismatch on package %s\n"
#: lib/libalpm/be_local.c:776
#: lib/libalpm/be_local.c:806
#, c-format
msgid "unknown validation type for package %s: %s\n"
msgstr "unknown validation type for package %s: %s\n"
#: lib/libalpm/be_package.c:479 lib/libalpm/be_package.c:637
#: lib/libalpm/be_package.c:650
#: lib/libalpm/be_local.c:841
#, c-format
msgid "%s: unknown key '%s' in local database\n"
msgstr "%s: unknown key '%s' in local database\n"
#: lib/libalpm/be_package.c:255
#, c-format
msgid "%s: unknown key '%s' in package description\n"
msgstr "%s: unknown key '%s' in package description\n"
#: lib/libalpm/be_package.c:482 lib/libalpm/be_package.c:635
#: lib/libalpm/be_package.c:647
#, c-format
msgid "error while reading package %s: %s\n"
msgstr "error while reading package %s: %s\n"
#: lib/libalpm/be_package.c:493 lib/libalpm/be_package.c:517
#: lib/libalpm/be_package.c:495 lib/libalpm/be_package.c:518
#, c-format
msgid "error while reading mtree of package %s: %s\n"
msgstr "error while reading mtree of package %s: %s\n"
#: lib/libalpm/be_package.c:603
#: lib/libalpm/be_package.c:601
#, c-format
msgid "could not parse package description file in %s\n"
msgstr "could not parse package description file in %s\n"
#: lib/libalpm/be_package.c:608
#: lib/libalpm/be_package.c:606
#, c-format
msgid "missing package name in %s\n"
msgstr "missing package name in %s\n"
#: lib/libalpm/be_package.c:612
#: lib/libalpm/be_package.c:610
#, c-format
msgid "missing package version in %s\n"
msgstr "missing package version in %s\n"
#: lib/libalpm/be_package.c:616
#: lib/libalpm/be_package.c:614
#, c-format
msgid "invalid package version in %s\n"
msgstr "invalid package version in %s\n"
#: lib/libalpm/be_package.c:657
#: lib/libalpm/be_package.c:653
#, c-format
msgid "missing package metadata in %s\n"
msgstr "missing package metadata in %s\n"
#: lib/libalpm/be_package.c:750
#: lib/libalpm/be_package.c:745
#, c-format
msgid "failed to read signature file: %s\n"
msgstr "failed to read signature file: %s\n"
#: lib/libalpm/be_package.c:779 lib/libalpm/sync.c:953
#: lib/libalpm/be_package.c:768 lib/libalpm/sync.c:976
#, c-format
msgid "required key missing from keyring\n"
msgstr "required key missing from keyring\n"
@ -235,32 +251,37 @@ msgstr "required key missing from keyring\n"
msgid "removing invalid file: %s\n"
msgstr "removing invalid file: %s\n"
#: lib/libalpm/be_sync.c:515
#: lib/libalpm/be_sync.c:471
#, c-format
msgid "could not parse package description file '%s' from db '%s'\n"
msgstr "could not parse package description file '%s' from db '%s'\n"
#: lib/libalpm/be_sync.c:522
#: lib/libalpm/be_sync.c:486
#, c-format
msgid "could not read db '%s' (%s)\n"
msgstr "could not read db '%s' (%s)\n"
#: lib/libalpm/be_sync.c:556 lib/libalpm/be_sync.c:561
#: lib/libalpm/be_sync.c:519 lib/libalpm/be_sync.c:524
#, c-format
msgid "%s database is inconsistent: filename of package %s is illegal\n"
msgstr "%s database is inconsistent: filename of package %s is illegal\n"
#: lib/libalpm/be_sync.c:566
#: lib/libalpm/be_sync.c:529
#, c-format
msgid "%s database is inconsistent: filename of package %s is too long\n"
msgstr "%s database is inconsistent: filename of package %s is too long\n"
#: lib/libalpm/be_sync.c:632
#: lib/libalpm/be_sync.c:594
#, c-format
msgid "unknown database file: %s\n"
msgstr "unknown database file: %s\n"
#: lib/libalpm/db.c:370
#: lib/libalpm/be_sync.c:712
#, c-format
msgid "%s: unknown key '%s' in sync database\n"
msgstr "%s: unknown key '%s' in sync database\n"
#: lib/libalpm/db.c:413
#, c-format
msgid "database path is undefined\n"
msgstr "database path is undefined\n"
@ -280,12 +301,12 @@ msgstr "%s will be removed after its %s dependency\n"
msgid "%s will be installed before its %s dependency\n"
msgstr "%s will be installed before its %s dependency\n"
#: lib/libalpm/deps.c:681 lib/libalpm/deps.c:712
#: lib/libalpm/deps.c:666 lib/libalpm/deps.c:697
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "ignoring package %s-%s\n"
#: lib/libalpm/deps.c:869
#: lib/libalpm/deps.c:842
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "cannot resolve \"%s\", a dependency of \"%s\"\n"
@ -300,81 +321,123 @@ msgstr "could not get filesystem information for %s: %s\n"
msgid "could not open file: %s: %s\n"
msgstr "could not open file: %s: %s\n"
#: lib/libalpm/diskspace.c:146 lib/libalpm/diskspace.c:159
#: lib/libalpm/diskspace.c:154 lib/libalpm/diskspace.c:167
#, c-format
msgid "could not get filesystem information\n"
msgstr "could not get filesystem information\n"
#: lib/libalpm/diskspace.c:242
#: lib/libalpm/diskspace.c:254
#, c-format
msgid "could not get file information for %s\n"
msgstr "could not get file information for %s\n"
#: lib/libalpm/diskspace.c:256 lib/libalpm/diskspace.c:315
#: lib/libalpm/diskspace.c:268 lib/libalpm/diskspace.c:327
#, c-format
msgid "could not determine mount point for file %s\n"
msgstr "could not determine mount point for file %s\n"
#: lib/libalpm/diskspace.c:354
#: lib/libalpm/diskspace.c:366
#, c-format
msgid "Partition %s too full: %jd blocks needed, %ju blocks free\n"
msgstr "Partition %s too full: %jd blocks needed, %ju blocks free\n"
#: lib/libalpm/diskspace.c:379 lib/libalpm/diskspace.c:433
#: lib/libalpm/diskspace.c:391 lib/libalpm/diskspace.c:445
#, c-format
msgid "could not determine filesystem mount points\n"
msgstr "could not determine filesystem mount points\n"
#: lib/libalpm/diskspace.c:385
#: lib/libalpm/diskspace.c:397
#, c-format
msgid "could not determine cachedir mount point %s\n"
msgstr "could not determine cachedir mount point %s\n"
#: lib/libalpm/diskspace.c:438
#: lib/libalpm/diskspace.c:450
#, c-format
msgid "could not determine root mount point %s\n"
msgstr "could not determine root mount point %s\n"
#: lib/libalpm/diskspace.c:486
#: lib/libalpm/diskspace.c:498
#, c-format
msgid "Partition %s is mounted read only\n"
msgstr "Partition %s is mounted read only\n"
#: lib/libalpm/dload.c:161
#, c-format
msgid "disk"
msgstr "disk"
#: lib/libalpm/dload.c:348
#: lib/libalpm/dload.c:107
#, c-format
msgid "failed to create temporary file for download\n"
msgstr "failed to create temporary file for download\n"
#: lib/libalpm/dload.c:393
#: lib/libalpm/dload.c:198
#, c-format
msgid "url '%s' is invalid\n"
msgstr "URL '%s' is invalid\n"
msgid ""
"too many errors from %s, skipping for the remainder of this transaction\n"
msgstr ""
"too many errors from %s, skipping for the remainder of this transaction\n"
#: lib/libalpm/dload.c:464 lib/libalpm/dload.c:485 lib/libalpm/dload.c:496
#: lib/libalpm/dload.c:215
#, c-format
msgid "fatal error from %s, skipping for the remainder of this transaction\n"
msgstr "fatal error from %s, skipping for the remainder of this transaction\n"
#: lib/libalpm/dload.c:310
#, c-format
msgid "disk"
msgstr "disk"
#: lib/libalpm/dload.c:532 lib/libalpm/dload.c:570 lib/libalpm/dload.c:583
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "failed retrieving file '%s' from %s : %s\n"
#: lib/libalpm/dload.c:477
#: lib/libalpm/dload.c:562
#, c-format
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
msgstr ""
"failed retrieving file '%s' from %s : expected download size exceeded\n"
#: lib/libalpm/dload.c:532
#: lib/libalpm/dload.c:685
#, c-format
msgid "%s appears to be truncated: %jd/%jd bytes\n"
msgstr "%s appears to be truncated: %jd/%jd bytes\n"
#: lib/libalpm/dload.c:677 lib/libalpm/dload.c:706
#: lib/libalpm/dload.c:776
#, c-format
msgid "failed to download %s\n"
msgstr "failed to download %s\n"
msgid "url '%s' is invalid\n"
msgstr "URL '%s' is invalid\n"
#: lib/libalpm/dload.c:864
#, c-format
msgid "failed to setup a download payload for %s\n"
msgstr "failed to setup a download payload for %s\n"
#: lib/libalpm/dload.c:876
#, c-format
msgid "curl returned error %d from transfer\n"
msgstr "curl returned error %d from transfer\n"
#: lib/libalpm/dload.c:900
#, c-format
msgid "curl transfer error: %d\n"
msgstr "curl transfer error: %d\n"
#: lib/libalpm/dload.c:963
#, c-format
msgid "could not chdir to download directory %s\n"
msgstr "could not chdir to download directory %s\n"
#: lib/libalpm/dload.c:968
#, c-format
msgid "switching to sandbox user '%s' failed!\n"
msgstr "switching to sandbox user '%s' failed!\n"
#: lib/libalpm/dload.c:1361 lib/libalpm/sync.c:861
#, c-format
msgid "failed to retrieve some files\n"
msgstr "failed to retrieve some files\n"
#: lib/libalpm/dload.c:1384
#, c-format
msgid "download completed successfully but no file in the cache\n"
msgstr "download completed successfully but no file in the cache\n"
#: lib/libalpm/error.c:40
#, c-format
@ -491,7 +554,7 @@ msgstr "no servers configured for repository"
msgid "transaction already initialized"
msgstr "transaction already initialised"
#: lib/libalpm/error.c:90 lib/libalpm/error.c:94
#: lib/libalpm/error.c:90 lib/libalpm/error.c:96
#, c-format
msgid "transaction not initialized"
msgstr "transaction not initialised"
@ -501,86 +564,86 @@ msgstr "transaction not initialised"
msgid "duplicate target"
msgstr "duplicate target"
#: lib/libalpm/error.c:96
#: lib/libalpm/error.c:94
#, c-format
msgid "duplicate filename"
msgstr "duplicate filename"
#: lib/libalpm/error.c:98
#, c-format
msgid "transaction not prepared"
msgstr "transaction not prepared"
#: lib/libalpm/error.c:98
#: lib/libalpm/error.c:100
#, c-format
msgid "transaction aborted"
msgstr "transaction aborted"
#: lib/libalpm/error.c:100
#: lib/libalpm/error.c:102
#, c-format
msgid "operation not compatible with the transaction type"
msgstr "operation not compatible with the transaction type"
#: lib/libalpm/error.c:102
#: lib/libalpm/error.c:104
#, c-format
msgid "transaction commit attempt when database is not locked"
msgstr "transaction commit attempt when database is not locked"
#: lib/libalpm/error.c:104
#: lib/libalpm/error.c:106
#, c-format
msgid "failed to run transaction hooks"
msgstr "failed to run transaction hooks"
#: lib/libalpm/error.c:107
#: lib/libalpm/error.c:109
#, c-format
msgid "could not find or read package"
msgstr "could not find or read package"
#: lib/libalpm/error.c:109
#: lib/libalpm/error.c:111
#, c-format
msgid "operation cancelled due to ignorepkg"
msgstr "operation cancelled due to ignorepkg"
#: lib/libalpm/error.c:111
#: lib/libalpm/error.c:113
#, c-format
msgid "invalid or corrupted package"
msgstr "invalid or corrupted package"
#: lib/libalpm/error.c:113
#: lib/libalpm/error.c:115
#, c-format
msgid "invalid or corrupted package (checksum)"
msgstr "invalid or corrupted package (checksum)"
#: lib/libalpm/error.c:115
#: lib/libalpm/error.c:117
#, c-format
msgid "invalid or corrupted package (PGP signature)"
msgstr "invalid or corrupted package (PGP signature)"
#: lib/libalpm/error.c:117
#: lib/libalpm/error.c:119
#, c-format
msgid "package missing required signature"
msgstr "package missing required signature"
#: lib/libalpm/error.c:119
#: lib/libalpm/error.c:121
#, c-format
msgid "cannot open package file"
msgstr "cannot open package file"
#: lib/libalpm/error.c:121
#: lib/libalpm/error.c:123
#, c-format
msgid "cannot remove all files for package"
msgstr "cannot remove all files for package"
#: lib/libalpm/error.c:123
#: lib/libalpm/error.c:125
#, c-format
msgid "package filename is not valid"
msgstr "package filename is not valid"
#: lib/libalpm/error.c:125
#: lib/libalpm/error.c:127
#, c-format
msgid "package architecture is not valid"
msgstr "package architecture is not valid"
#: lib/libalpm/error.c:127
#, c-format
msgid "could not find repository for target"
msgstr "could not find repository for target"
#: lib/libalpm/error.c:130
#, c-format
msgid "missing PGP signature"
@ -646,12 +709,12 @@ msgstr "compiled without signature support"
msgid "unexpected error"
msgstr "unexpected error"
#: lib/libalpm/handle.c:153
#: lib/libalpm/handle.c:165
#, c-format
msgid "lock file missing %s\n"
msgstr "lock file missing %s\n"
#: lib/libalpm/handle.c:159
#: lib/libalpm/handle.c:171
#, c-format
msgid "could not remove lock file %s\n"
msgstr "could not remove lock file %s\n"
@ -723,7 +786,7 @@ msgstr "hook %s line %d: unable to set option (%s)\n"
msgid "unable to run hook %s: %s\n"
msgstr "unable to run hook %s: %s\n"
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:386
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:378
#, c-format
msgid "could not open directory: %s: %s\n"
msgstr "could not open directory: %s: %s\n"
@ -733,7 +796,7 @@ msgstr "could not open directory: %s: %s\n"
msgid "could not open file: %s%s: %s\n"
msgstr "could not open file: %s%s: %s\n"
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:259
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:279
#, c-format
msgid "could not stat file %s: %s\n"
msgstr "could not stat file %s: %s\n"
@ -743,279 +806,323 @@ msgstr "could not stat file %s: %s\n"
msgid "could not read directory: %s: %s\n"
msgstr "could not read directory: %s: %s\n"
#: lib/libalpm/package.c:578
#: lib/libalpm/package.c:614
#, c-format
msgid "could not fully load metadata for package %s-%s\n"
msgstr "could not fully load metadata for package %s-%s\n"
#: lib/libalpm/remove.c:119
#: lib/libalpm/package.c:869
#, c-format
msgid "invalid package metadata (name or version missing)"
msgstr "invalid package metadata (name or version missing)"
#: lib/libalpm/package.c:874
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name cannot start with '.' or "
"'-')\n"
msgstr ""
"invalid metadata for package %s-%s (package name cannot start with '.' or "
"'-')\n"
#: lib/libalpm/package.c:878
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name contains invalid "
"characters)\n"
msgstr ""
"invalid metadata for package %s-%s (package name contains invalid "
"characters)\n"
#: lib/libalpm/package.c:885 lib/libalpm/package.c:889
#, c-format
msgid ""
"invalid metadata for package %s-%s (package version contains invalid "
"characters)\n"
msgstr ""
"invalid metadata for package %s-%s (package version contains invalid "
"characters)\n"
#: lib/libalpm/package.c:895
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name and version too long)\n"
msgstr ""
"invalid metadata for package %s-%s (package name and version too long)\n"
#: lib/libalpm/remove.c:111
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "could not find %s in database -- skipping\n"
#: lib/libalpm/remove.c:154
#: lib/libalpm/remove.c:146
#, c-format
msgid "removing %s from target list\n"
msgstr "removing %s from target list\n"
#: lib/libalpm/remove.c:346
#: lib/libalpm/remove.c:338
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "cannot remove file '%s': %s\n"
#: lib/libalpm/remove.c:411 lib/libalpm/remove.c:420
#: lib/libalpm/remove.c:403 lib/libalpm/remove.c:412
#, c-format
msgid "could not backup %s due to PATH_MAX overflow\n"
msgstr "could not backup %s due to PATH_MAX overflow\n"
#: lib/libalpm/remove.c:562
#: lib/libalpm/remove.c:570
#, c-format
msgid "cannot remove %s (%s)\n"
msgstr "cannot remove %s (%s)\n"
#: lib/libalpm/remove.c:735
#: lib/libalpm/remove.c:743
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "could not remove database entry %s-%s\n"
#: lib/libalpm/remove.c:740
#: lib/libalpm/remove.c:748
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "could not remove entry '%s' from cache\n"
#: lib/libalpm/signing.c:171
#: lib/libalpm/signing.c:163
#, c-format
msgid "Public keyring not found; have you run '%s'?\n"
msgstr "Public keyring not found; have you run '%s'?\n"
#: lib/libalpm/signing.c:207 lib/libalpm/signing.c:784
#: lib/libalpm/signing.c:199 lib/libalpm/signing.c:773
#, c-format
msgid "GPGME error: %s\n"
msgstr "GPGME error: %s\n"
#: lib/libalpm/signing.c:284
#: lib/libalpm/signing.c:275
#, c-format
msgid "looking up key %s using WKD\n"
msgstr "looking up key %s using WKD\n"
#: lib/libalpm/signing.c:293
#: lib/libalpm/signing.c:289
#, c-format
msgid "gpg error: %s\n"
msgstr "gpg error: %s\n"
#: lib/libalpm/signing.c:441 lib/libalpm/signing.c:515
#: lib/libalpm/signing.c:440 lib/libalpm/signing.c:513
#, c-format
msgid "keyring is not writable\n"
msgstr "keyring is not writable\n"
#: lib/libalpm/signing.c:539
#: lib/libalpm/signing.c:537
#, c-format
msgid "key \"%s\" on keyserver\n"
msgstr "key \"%s\" on keyserver\n"
#: lib/libalpm/signing.c:544
#: lib/libalpm/signing.c:542
#, c-format
msgid "key \"%s\" could not be imported\n"
msgstr "key \"%s\" could not be imported\n"
#: lib/libalpm/signing.c:548
#: lib/libalpm/signing.c:546
#, c-format
msgid "key \"%s\" could not be looked up remotely\n"
msgstr "key \"%s\" could not be looked up remotely\n"
#: lib/libalpm/signing.c:943 lib/libalpm/sync.c:1022
#: lib/libalpm/signing.c:932 lib/libalpm/sync.c:1052
#, c-format
msgid "%s: missing required signature\n"
msgstr "%s: missing required signature\n"
#: lib/libalpm/signing.c:958
#: lib/libalpm/signing.c:947
#, c-format
msgid "%s: signature from \"%s\" is marginal trust\n"
msgstr "%s: signature from \"%s\" is marginal trust\n"
#: lib/libalpm/signing.c:966
#: lib/libalpm/signing.c:955
#, c-format
msgid "%s: signature from \"%s\" is unknown trust\n"
msgstr "%s: signature from \"%s\" is unknown trust\n"
#: lib/libalpm/signing.c:973
#: lib/libalpm/signing.c:962
#, c-format
msgid "%s: signature from \"%s\" should never be trusted\n"
msgstr "%s: signature from \"%s\" should never be trusted\n"
#: lib/libalpm/signing.c:985
#: lib/libalpm/signing.c:974
#, c-format
msgid "%s: key \"%s\" is unknown\n"
msgstr "%s: key \"%s\" is unknown\n"
#: lib/libalpm/signing.c:994
#: lib/libalpm/signing.c:983
#, c-format
msgid "%s: key \"%s\" is disabled\n"
msgstr "%s: key \"%s\" is disabled\n"
#: lib/libalpm/signing.c:998
#: lib/libalpm/signing.c:987
#, c-format
msgid "%s: signature from \"%s\" is expired\n"
msgstr "%s: signature from \"%s\" is expired\n"
#: lib/libalpm/signing.c:1002
#: lib/libalpm/signing.c:991
#, c-format
msgid "%s: signature from \"%s\" is invalid\n"
msgstr "%s: signature from \"%s\" is invalid\n"
#: lib/libalpm/signing.c:1079 lib/libalpm/signing.c:1147
#: lib/libalpm/signing.c:1226
#: lib/libalpm/signing.c:1049 lib/libalpm/signing.c:1110
#: lib/libalpm/signing.c:1189
#, c-format
msgid "%s: signature format error\n"
msgstr "%s: signature format error\n"
#: lib/libalpm/signing.c:1179 lib/libalpm/signing.c:1212
#: lib/libalpm/signing.c:1220
#: lib/libalpm/signing.c:1142 lib/libalpm/signing.c:1175
#: lib/libalpm/signing.c:1183
#, c-format
msgid "%s: unsupported signature format\n"
msgstr "%s: unsupported signature format\n"
#: lib/libalpm/sync.c:99
#: lib/libalpm/sync.c:96
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: ignoring package upgrade (%s => %s)\n"
#: lib/libalpm/sync.c:111
#: lib/libalpm/sync.c:108
#, c-format
msgid "%s: ignoring package downgrade (%s => %s)\n"
msgstr "%s: ignoring package downgrade (%s => %s)\n"
#: lib/libalpm/sync.c:114
#: lib/libalpm/sync.c:111
#, c-format
msgid "%s: downgrading from version %s to version %s\n"
msgstr "%s: downgrading from version %s to version %s\n"
#: lib/libalpm/sync.c:120
#: lib/libalpm/sync.c:117
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr "%s: local (%s) is newer than %s (%s)\n"
#: lib/libalpm/sync.c:161
#: lib/libalpm/sync.c:158
#, c-format
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
msgstr "ignoring package replacement (%s-%s => %s-%s)\n"
#: lib/libalpm/sync.c:177
#: lib/libalpm/sync.c:174
#, c-format
msgid "cannot replace %s by %s\n"
msgstr "cannot replace %s by %s\n"
#: lib/libalpm/sync.c:535 lib/libalpm/sync.c:605
#: lib/libalpm/sync.c:477
#, c-format
msgid "packages %s and %s have the same filename: %s\n"
msgstr "packages %s and %s have the same filename: %s\n"
#: lib/libalpm/sync.c:546 lib/libalpm/sync.c:618
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr "unresolvable package conflicts detected\n"
#: lib/libalpm/sync.c:555
#: lib/libalpm/sync.c:566
#, c-format
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgstr "removing '%s' from target list because it conflicts with '%s'\n"
msgid "removing '%s-%s' from target list because it conflicts with '%s-%s'\n"
msgstr "removing '%s-%s' from target list because it conflicts with '%s-%s'\n"
#: lib/libalpm/sync.c:849
#: lib/libalpm/sync.c:1020 lib/libalpm/sync.c:1187
#, c-format
msgid "failed to retrieve some files\n"
msgstr "failed to retrieve some files\n"
msgid "%s: could not find package in cache\n"
msgstr "%s: could not find package in cache\n"
#: lib/libalpm/sync.c:1036
#: lib/libalpm/sync.c:1066
#, c-format
msgid "failed to read file %s: %s\n"
msgstr "failed to read file %s: %s\n"
#: lib/libalpm/sync.c:1223
#: lib/libalpm/sync.c:1324
#, c-format
msgid "not enough free disk space\n"
msgstr "not enough free disk space\n"
#: lib/libalpm/sync.c:1245
#: lib/libalpm/sync.c:1346
#, c-format
msgid "could not commit removal transaction\n"
msgstr "could not commit removal transaction\n"
#: lib/libalpm/sync.c:1253
#: lib/libalpm/sync.c:1354
#, c-format
msgid "could not commit transaction\n"
msgstr "could not commit transaction\n"
#: lib/libalpm/trans.c:364
#: lib/libalpm/trans.c:369
#, c-format
msgid "could not create temp directory\n"
msgstr "could not create temp directory\n"
#: lib/libalpm/trans.c:379
#: lib/libalpm/trans.c:384
#, c-format
msgid "could not copy tempfile to %s (%s)\n"
msgstr "could not copy tempfile to %s (%s)\n"
#: lib/libalpm/trans.c:410
#: lib/libalpm/trans.c:415
#, c-format
msgid "could not remove %s\n"
msgstr "could not remove %s\n"
#: lib/libalpm/trans.c:414
#: lib/libalpm/trans.c:419
#, c-format
msgid "could not remove tmpdir %s\n"
msgstr "could not remove tmpdir %s\n"
#: lib/libalpm/util.c:486
#: lib/libalpm/util.c:512
#, c-format
msgid "unable to write to pipe (%s)\n"
msgstr "unable to write to pipe (%s)\n"
#: lib/libalpm/util.c:545
#: lib/libalpm/util.c:571
#, c-format
msgid "unable to read from pipe (%s)\n"
msgstr "unable to read from pipe (%s)\n"
#: lib/libalpm/util.c:609 lib/libalpm/util.c:615
#: lib/libalpm/util.c:641 lib/libalpm/util.c:647
#, c-format
msgid "could not create pipe (%s)\n"
msgstr "could not create pipe (%s)\n"
#: lib/libalpm/util.c:623
#: lib/libalpm/util.c:655
#, c-format
msgid "could not fork a new process (%s)\n"
msgstr "could not fork a new process (%s)\n"
#: lib/libalpm/util.c:646
#: lib/libalpm/util.c:680
#, c-format
msgid "could not change the root directory (%s)\n"
msgstr "could not change the root directory (%s)\n"
#: lib/libalpm/util.c:658
#: lib/libalpm/util.c:700
#, c-format
msgid "call to execv failed (%s)\n"
msgstr "call to execv failed (%s)\n"
#: lib/libalpm/util.c:737
#: lib/libalpm/util.c:779
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr "call to waitpid failed (%s)\n"
#: lib/libalpm/util.c:747
#: lib/libalpm/util.c:789
#, c-format
msgid "command failed to execute correctly\n"
msgstr "command failed to execute correctly\n"
#: lib/libalpm/util.c:754
#: lib/libalpm/util.c:796
#, c-format
msgid "Unknown signal"
msgstr "Unknown signal"
#: lib/libalpm/util.c:756
#: lib/libalpm/util.c:798
#, c-format
msgid "command terminated by signal %d: %s\n"
msgstr "command terminated by signal %d: %s\n"
#: lib/libalpm/util.c:853
#: lib/libalpm/util.c:916
#, c-format
msgid "no %s cache exists, creating...\n"
msgstr "no %s cache exists, creating...\n"
#: lib/libalpm/util.c:884
#: lib/libalpm/util.c:947
#, c-format
msgid "couldn't find or create package cache, using %s instead\n"
msgstr "couldn't find or create package cache, using %s instead\n"

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Pacman Development Team <pacman-dev@archlinux.org>
# This file is distributed under the same license as the PACKAGE package.
# Copyright (C) YEAR "Pacman Development Team <pacman-dev@archlinux.org>"
# This file is distributed under the same license as the libalpm package.
#
# Translators:
# Osoitz <oelkoro@gmail.com>, 2013-2014,2016-2018
@ -8,11 +8,11 @@
msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2019-10-21 17:23+1000\n"
"PO-Revision-Date: 2019-10-07 08:12+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"Language-Team: Basque (http://www.transifex.com/toofishes/archlinux-pacman/"
"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/pacman/pacman/-/issues\n"
"POT-Creation-Date: 2024-07-14 19:10+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Osoitz <oelkoro@gmail.com>, 2013\n"
"Language-Team: Basque (http://app.transifex.com/toofishes/archlinux-pacman/"
"language/eu/)\n"
"Language: eu\n"
"MIME-Version: 1.0\n"
@ -20,17 +20,17 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: lib/libalpm/add.c:91 lib/libalpm/sync.c:290
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s egunean dago -- ezikusi\n"
#: lib/libalpm/add.c:95
#: lib/libalpm/add.c:94
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s egunean dago -- berrinstalatu\n"
#: lib/libalpm/add.c:100
#: lib/libalpm/add.c:99
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "bertsio zahartzen %s paketea (%s => %s)\n"
@ -40,17 +40,17 @@ msgstr "bertsio zahartzen %s paketea (%s => %s)\n"
msgid "cannot allocate disk archive object"
msgstr "ezin da artxibo-objektua esleitu"
#: lib/libalpm/add.c:143 lib/libalpm/util.c:382
#: lib/libalpm/add.c:143 lib/libalpm/util.c:408
#, c-format
msgid "warning given when extracting %s (%s)\n"
msgstr "oharra eman da %s erauztean (%s)\n"
#: lib/libalpm/add.c:146 lib/libalpm/util.c:385
#: lib/libalpm/add.c:146 lib/libalpm/util.c:411
#, c-format
msgid "could not extract %s (%s)\n"
msgstr "ezin izan da %s erauzi (%s)\n"
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:574 lib/libalpm/remove.c:542
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:707 lib/libalpm/remove.c:550
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "ezin izan da %s berrizendatu %s gisa (%s)\n"
@ -96,139 +96,154 @@ msgstr "erauzi: ez da direktorioa %s fitxategiarekin gainidatziko\n"
msgid "unable to extract %s.pacnew: path too long"
msgstr "ezin izan da %s.pacnew erauzi: bidea luzeegia da"
#: lib/libalpm/add.c:513 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#: lib/libalpm/add.c:510 lib/libalpm/util.c:354 lib/libalpm/util.c:624
#, c-format
msgid "could not get current working directory\n"
msgstr "ezin izan da uneko lan direktorioa lortu\n"
#: lib/libalpm/add.c:518 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/util.c:650
#: lib/libalpm/add.c:515 lib/libalpm/util.c:359 lib/libalpm/util.c:629
#: lib/libalpm/util.c:684
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "ezin izan da direktorioa hona aldatu %s (%s)\n"
#: lib/libalpm/add.c:575 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#: lib/libalpm/add.c:571 lib/libalpm/util.c:429 lib/libalpm/util.c:808
#, c-format
msgid "could not restore working directory (%s)\n"
msgstr "ezin izan da laneko direktorioa berreskuratu (%s)\n"
#: lib/libalpm/add.c:583
#: lib/libalpm/add.c:579
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "arazo bat egon da %s bertsio berritzean\n"
#: lib/libalpm/add.c:589
#: lib/libalpm/add.c:585
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "arazo bat egon da %s instalatzean\n"
#: lib/libalpm/add.c:604
#: lib/libalpm/add.c:600
#, c-format
msgid "could not update database entry %s-%s\n"
msgstr "ezin izan da datu-base sarrera eguneratu %s-%s\n"
#: lib/libalpm/add.c:615
#: lib/libalpm/add.c:610
#, c-format
msgid "could not add entry '%s' in cache\n"
msgstr "ezin izan da '%s' sarrera katxean gehitu\n"
#: lib/libalpm/be_local.c:267
#: lib/libalpm/be_local.c:271
#, c-format
msgid "error while reading file %s: %s\n"
msgstr "errorea %s fitxategia irakurtzean: %s\n"
#: lib/libalpm/be_local.c:364
#: lib/libalpm/be_local.c:382
#, c-format
msgid "removing invalid database: %s\n"
msgstr "datu-base baliogabea ezabatzen:%s\n"
#: lib/libalpm/be_local.c:415 lib/libalpm/be_local.c:905
#: lib/libalpm/be_local.c:433 lib/libalpm/be_local.c:947
#, c-format
msgid "could not create directory %s: %s\n"
msgstr ""
"ezin izan da %s direktorioa sortu: %s\n"
"\n"
#: lib/libalpm/be_local.c:590 lib/libalpm/be_sync.c:386
#: lib/libalpm/be_local.c:608 lib/libalpm/be_sync.c:339
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "izen baliogabea '%s' datu-base sarreran\n"
#: lib/libalpm/be_local.c:598
#: lib/libalpm/be_local.c:616
#, c-format
msgid "duplicated database entry '%s'\n"
msgstr "bikoiztutako datu-base sarrera '%s'\n"
#: lib/libalpm/be_local.c:610
#: lib/libalpm/be_local.c:628
#, c-format
msgid "corrupted database entry '%s'\n"
msgstr "datu-base sarrera hondatua '%s'\n"
#: lib/libalpm/be_local.c:713 lib/libalpm/be_local.c:809
#: lib/libalpm/be_local.c:954 lib/libalpm/be_local.c:1051
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:422 lib/libalpm/util.c:253
#: lib/libalpm/util.c:269
#: lib/libalpm/be_local.c:663
#, fuzzy, c-format
msgid "unknown install reason for package %s: %s\n"
msgstr "Balidazio mota ezezaguna %s paketearentzat: %s\n"
#: lib/libalpm/be_local.c:743 lib/libalpm/be_local.c:856
#: lib/libalpm/be_local.c:996 lib/libalpm/be_local.c:1102
#: lib/libalpm/diskspace.c:135 lib/libalpm/dload.c:792 lib/libalpm/util.c:273
#: lib/libalpm/util.c:289
#, c-format
msgid "could not open file %s: %s\n"
msgstr "ezin izan da %s fitxategia ireki: %s\n"
#: lib/libalpm/be_local.c:729 lib/libalpm/be_sync.c:650
#: lib/libalpm/be_local.c:759 lib/libalpm/be_sync.c:612
#, c-format
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr "%s datu-basea kontraesankorra da: izenak ez datoz bat %s paketean\n"
#: lib/libalpm/be_local.c:735 lib/libalpm/be_sync.c:656
#: lib/libalpm/be_local.c:765 lib/libalpm/be_sync.c:618
#, c-format
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr "%s datu-basea kontraesankorra da: bertsioak ez datoz bat %s paketean\n"
#: lib/libalpm/be_local.c:776
#: lib/libalpm/be_local.c:806
#, c-format
msgid "unknown validation type for package %s: %s\n"
msgstr "Balidazio mota ezezaguna %s paketearentzat: %s\n"
#: lib/libalpm/be_package.c:479 lib/libalpm/be_package.c:637
#: lib/libalpm/be_package.c:650
#: lib/libalpm/be_local.c:841
#, c-format
msgid "%s: unknown key '%s' in local database\n"
msgstr ""
#: lib/libalpm/be_package.c:255
#, c-format
msgid "%s: unknown key '%s' in package description\n"
msgstr ""
#: lib/libalpm/be_package.c:482 lib/libalpm/be_package.c:635
#: lib/libalpm/be_package.c:647
#, c-format
msgid "error while reading package %s: %s\n"
msgstr "errorea %s paketea irakurtzean: %s\n"
#: lib/libalpm/be_package.c:493 lib/libalpm/be_package.c:517
#: lib/libalpm/be_package.c:495 lib/libalpm/be_package.c:518
#, c-format
msgid "error while reading mtree of package %s: %s\n"
msgstr "errorea %s paketearen mtree-a irakurtzean: %s\n"
#: lib/libalpm/be_package.c:603
#: lib/libalpm/be_package.c:601
#, c-format
msgid "could not parse package description file in %s\n"
msgstr "ezin izan da paketearen deskripzioa prozesatu %s fitxategian\n"
#: lib/libalpm/be_package.c:608
#: lib/libalpm/be_package.c:606
#, c-format
msgid "missing package name in %s\n"
msgstr "paketearen izena falta da hemen: %s\n"
#: lib/libalpm/be_package.c:612
#: lib/libalpm/be_package.c:610
#, c-format
msgid "missing package version in %s\n"
msgstr "paketearen bertsioa falta da hemen: %s\n"
#: lib/libalpm/be_package.c:616
#: lib/libalpm/be_package.c:614
#, c-format
msgid "invalid package version in %s\n"
msgstr "paketearen bertsio baliogabea hemen %s\n"
#: lib/libalpm/be_package.c:657
#: lib/libalpm/be_package.c:653
#, c-format
msgid "missing package metadata in %s\n"
msgstr "paketearen metadatuak falta dira hemen: %s\n"
#: lib/libalpm/be_package.c:750
#: lib/libalpm/be_package.c:745
#, c-format
msgid "failed to read signature file: %s\n"
msgstr "sinadura fitxategiaren irakurketak huts egin du: %s\n"
#: lib/libalpm/be_package.c:779 lib/libalpm/sync.c:953
#: lib/libalpm/be_package.c:768 lib/libalpm/sync.c:976
#, c-format
msgid "required key missing from keyring\n"
msgstr "beharrezko gakoa falta da gako sortan\n"
@ -238,35 +253,40 @@ msgstr "beharrezko gakoa falta da gako sortan\n"
msgid "removing invalid file: %s\n"
msgstr "fitxategi baliogabea ezabatzen: %s\n"
#: lib/libalpm/be_sync.c:515
#: lib/libalpm/be_sync.c:471
#, c-format
msgid "could not parse package description file '%s' from db '%s'\n"
msgstr "ezin izan da '%s' fitxategi deskripzioa prozesatu '%s' datu-basetik\n"
#: lib/libalpm/be_sync.c:522
#: lib/libalpm/be_sync.c:486
#, c-format
msgid "could not read db '%s' (%s)\n"
msgstr "ezin izan da '%s' datu-basea irakurri (%s)\n"
#: lib/libalpm/be_sync.c:556 lib/libalpm/be_sync.c:561
#: lib/libalpm/be_sync.c:519 lib/libalpm/be_sync.c:524
#, c-format
msgid "%s database is inconsistent: filename of package %s is illegal\n"
msgstr ""
"%s datu-basea kontraesankorra da: %s paketearen fitxategi izena legez "
"kanpokoa da\n"
#: lib/libalpm/be_sync.c:566
#: lib/libalpm/be_sync.c:529
#, c-format
msgid "%s database is inconsistent: filename of package %s is too long\n"
msgstr ""
"%s datu-basea kontraesankorra da: %s paketearen fitxategi izena luzeegia da\n"
#: lib/libalpm/be_sync.c:632
#: lib/libalpm/be_sync.c:594
#, c-format
msgid "unknown database file: %s\n"
msgstr "datu-base fitxategi ezezaguna: %s\n"
#: lib/libalpm/db.c:370
#: lib/libalpm/be_sync.c:712
#, c-format
msgid "%s: unknown key '%s' in sync database\n"
msgstr ""
#: lib/libalpm/db.c:413
#, c-format
msgid "database path is undefined\n"
msgstr "datu-basearen bide-izena definitu gabe dago\n"
@ -286,12 +306,12 @@ msgstr "%s ezabatuko da bere %s menpekotasuna eta gero\n"
msgid "%s will be installed before its %s dependency\n"
msgstr "%s instalatuko da bere %s menpekotasuna baino lehenago\n"
#: lib/libalpm/deps.c:681 lib/libalpm/deps.c:712
#: lib/libalpm/deps.c:666 lib/libalpm/deps.c:697
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "paketea ezikusten %s-%s\n"
#: lib/libalpm/deps.c:869
#: lib/libalpm/deps.c:842
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "ezin ebatzi \"%s\", \"%s\" paketearen menpekotasun bat\n"
@ -306,85 +326,126 @@ msgstr "ezin izan da %s fitxategi sistema informazioa jaso: %s\n"
msgid "could not open file: %s: %s\n"
msgstr "ezin izan da fitxategia ireki: %s :%s\n"
#: lib/libalpm/diskspace.c:146 lib/libalpm/diskspace.c:159
#: lib/libalpm/diskspace.c:154 lib/libalpm/diskspace.c:167
#, c-format
msgid "could not get filesystem information\n"
msgstr "ezin izan da fitxategi sistemaren informazioa jaso\n"
#: lib/libalpm/diskspace.c:242
#: lib/libalpm/diskspace.c:254
#, c-format
msgid "could not get file information for %s\n"
msgstr "ezin izan da %sren informazioa jaso\n"
#: lib/libalpm/diskspace.c:256 lib/libalpm/diskspace.c:315
#: lib/libalpm/diskspace.c:268 lib/libalpm/diskspace.c:327
#, c-format
msgid "could not determine mount point for file %s\n"
msgstr "ezin izan da %s fitxategiaren muntatze puntua zehaztu\n"
#: lib/libalpm/diskspace.c:354
#: lib/libalpm/diskspace.c:366
#, c-format
msgid "Partition %s too full: %jd blocks needed, %ju blocks free\n"
msgstr ""
"%s partizioa beteta dago: %jd bloke behar dira, %ju bloke daude libre\n"
#: lib/libalpm/diskspace.c:379 lib/libalpm/diskspace.c:433
#: lib/libalpm/diskspace.c:391 lib/libalpm/diskspace.c:445
#, c-format
msgid "could not determine filesystem mount points\n"
msgstr "ezin izan dira fitxategi sistemaren muntatze puntuak zehaztu\n"
#: lib/libalpm/diskspace.c:385
#: lib/libalpm/diskspace.c:397
#, c-format
msgid "could not determine cachedir mount point %s\n"
msgstr "ezin izan da cachedir muntatze puntua zehaztu %s\n"
#: lib/libalpm/diskspace.c:438
#: lib/libalpm/diskspace.c:450
#, c-format
msgid "could not determine root mount point %s\n"
msgstr "ezin izan da %s erro muntatze puntua zehaztu\n"
#: lib/libalpm/diskspace.c:486
#: lib/libalpm/diskspace.c:498
#, c-format
msgid "Partition %s is mounted read only\n"
msgstr "%s partizioa soilik irakurtzeko moduan muntatuta dago\n"
#: lib/libalpm/dload.c:161
#, c-format
msgid "disk"
msgstr "diskoa"
#: lib/libalpm/dload.c:348
#: lib/libalpm/dload.c:107
#, c-format
msgid "failed to create temporary file for download\n"
msgstr "huts egin du deskargarako behin behineko fitxategiaren sorrerak\n"
#: lib/libalpm/dload.c:393
#: lib/libalpm/dload.c:198
#, c-format
msgid "url '%s' is invalid\n"
msgid ""
"too many errors from %s, skipping for the remainder of this transaction\n"
msgstr ""
"'%s' url baliogabea da\n"
"\n"
#: lib/libalpm/dload.c:464 lib/libalpm/dload.c:485 lib/libalpm/dload.c:496
#: lib/libalpm/dload.c:215
#, c-format
msgid "fatal error from %s, skipping for the remainder of this transaction\n"
msgstr ""
#: lib/libalpm/dload.c:310
#, c-format
msgid "disk"
msgstr "diskoa"
#: lib/libalpm/dload.c:532 lib/libalpm/dload.c:570 lib/libalpm/dload.c:583
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "huts egin du '%s' fitxategia '%s'-tik erauzteak: %s\n"
#: lib/libalpm/dload.c:477
#: lib/libalpm/dload.c:562
#, c-format
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
msgstr ""
"huts egin du '%s' fitxategia eskuratzean hemendik: %s : aurreikusitako "
"deskarga tamaina gainditu da\n"
#: lib/libalpm/dload.c:532
#: lib/libalpm/dload.c:685
#, c-format
msgid "%s appears to be truncated: %jd/%jd bytes\n"
msgstr "%s ez dago osorik antza: %jd/%jd byte\n"
#: lib/libalpm/dload.c:677 lib/libalpm/dload.c:706
#: lib/libalpm/dload.c:776
#, c-format
msgid "failed to download %s\n"
msgstr "%s deskargatzeak huts egin du\n"
msgid "url '%s' is invalid\n"
msgstr ""
"'%s' url baliogabea da\n"
"\n"
#: lib/libalpm/dload.c:864
#, c-format
msgid "failed to setup a download payload for %s\n"
msgstr ""
#: lib/libalpm/dload.c:876
#, c-format
msgid "curl returned error %d from transfer\n"
msgstr ""
#: lib/libalpm/dload.c:900
#, c-format
msgid "curl transfer error: %d\n"
msgstr ""
#: lib/libalpm/dload.c:963
#, fuzzy, c-format
msgid "could not chdir to download directory %s\n"
msgstr "ezin izan da erro direktorioa aldatu (%s)\n"
#: lib/libalpm/dload.c:968
#, c-format
msgid "switching to sandbox user '%s' failed!\n"
msgstr ""
#: lib/libalpm/dload.c:1361 lib/libalpm/sync.c:861
#, c-format
msgid "failed to retrieve some files\n"
msgstr "fitxategi batzuk eskuratzeak huts egin du\n"
#: lib/libalpm/dload.c:1384
#, c-format
msgid "download completed successfully but no file in the cache\n"
msgstr ""
#: lib/libalpm/error.c:40
#, c-format
@ -501,7 +562,7 @@ msgstr "ez da zerbitzaririk konfiguratu biltegiarentzat"
msgid "transaction already initialized"
msgstr "transakzioa dagoeneko hasieratua"
#: lib/libalpm/error.c:90 lib/libalpm/error.c:94
#: lib/libalpm/error.c:90 lib/libalpm/error.c:96
#, c-format
msgid "transaction not initialized"
msgstr "transakzioa ez hasieratua"
@ -511,86 +572,86 @@ msgstr "transakzioa ez hasieratua"
msgid "duplicate target"
msgstr "bikoiztutako helburua"
#: lib/libalpm/error.c:96
#: lib/libalpm/error.c:94
#, c-format
msgid "duplicate filename"
msgstr ""
#: lib/libalpm/error.c:98
#, c-format
msgid "transaction not prepared"
msgstr "transakzioa ez dago prest"
#: lib/libalpm/error.c:98
#: lib/libalpm/error.c:100
#, c-format
msgid "transaction aborted"
msgstr "transakzioa bertan behera utzi da"
#: lib/libalpm/error.c:100
#: lib/libalpm/error.c:102
#, c-format
msgid "operation not compatible with the transaction type"
msgstr "eragiketa ez da transakzio motarekin bateragarria"
#: lib/libalpm/error.c:102
#: lib/libalpm/error.c:104
#, c-format
msgid "transaction commit attempt when database is not locked"
msgstr "transakzioa egikaritzeko saiakera datu-basea blokeatuta ez dagoenean"
#: lib/libalpm/error.c:104
#: lib/libalpm/error.c:106
#, c-format
msgid "failed to run transaction hooks"
msgstr "huts egin du transakzioaren kakoak abiatzean"
#: lib/libalpm/error.c:107
#: lib/libalpm/error.c:109
#, c-format
msgid "could not find or read package"
msgstr "ezin izan da paketea aurkitu edo irakurri"
#: lib/libalpm/error.c:109
#: lib/libalpm/error.c:111
#, c-format
msgid "operation cancelled due to ignorepkg"
msgstr "eragiketa bertan behera utzi da ignorepkg dela eta"
#: lib/libalpm/error.c:111
#: lib/libalpm/error.c:113
#, c-format
msgid "invalid or corrupted package"
msgstr "pakete baliogabe edo hondatua"
#: lib/libalpm/error.c:113
#: lib/libalpm/error.c:115
#, c-format
msgid "invalid or corrupted package (checksum)"
msgstr "pakete baliogabe edo hondatua (checksum)"
#: lib/libalpm/error.c:115
#: lib/libalpm/error.c:117
#, c-format
msgid "invalid or corrupted package (PGP signature)"
msgstr "pakete baliogabe edo hondatua (PGP sinadura)"
#: lib/libalpm/error.c:117
#: lib/libalpm/error.c:119
#, c-format
msgid "package missing required signature"
msgstr "paketeari beharrezko sinadura falta zaio"
#: lib/libalpm/error.c:119
#: lib/libalpm/error.c:121
#, c-format
msgid "cannot open package file"
msgstr "ezin ireki pakete fitxategia"
#: lib/libalpm/error.c:121
#: lib/libalpm/error.c:123
#, c-format
msgid "cannot remove all files for package"
msgstr "ezin ezabatu paketeko fitxategi guztiak"
#: lib/libalpm/error.c:123
#: lib/libalpm/error.c:125
#, c-format
msgid "package filename is not valid"
msgstr "paketearen fitxategi izena baliogabea da"
#: lib/libalpm/error.c:125
#: lib/libalpm/error.c:127
#, c-format
msgid "package architecture is not valid"
msgstr "paketearen arkitektura baliogabea da"
#: lib/libalpm/error.c:127
#, c-format
msgid "could not find repository for target"
msgstr "ezin izan da biltegirik aurkitu helburuarentzat"
#: lib/libalpm/error.c:130
#, c-format
msgid "missing PGP signature"
@ -656,12 +717,12 @@ msgstr ""
msgid "unexpected error"
msgstr "ustegabeko errorea"
#: lib/libalpm/handle.c:153
#: lib/libalpm/handle.c:165
#, c-format
msgid "lock file missing %s\n"
msgstr "blokeo fitxategia falta da %s\n"
#: lib/libalpm/handle.c:159
#: lib/libalpm/handle.c:171
#, c-format
msgid "could not remove lock file %s\n"
msgstr "ezin izan da %s blokeo fitxategia ezabatu\n"
@ -733,7 +794,7 @@ msgstr ""
msgid "unable to run hook %s: %s\n"
msgstr ""
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:386
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:378
#, c-format
msgid "could not open directory: %s: %s\n"
msgstr "ezin izan da direktorioa ireki: %s: %s\n"
@ -743,7 +804,7 @@ msgstr "ezin izan da direktorioa ireki: %s: %s\n"
msgid "could not open file: %s%s: %s\n"
msgstr ""
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:259
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:279
#, c-format
msgid "could not stat file %s: %s\n"
msgstr "ezin izan da fitxategiaren egoera zehaztu: %s: %s\n"
@ -753,279 +814,316 @@ msgstr "ezin izan da fitxategiaren egoera zehaztu: %s: %s\n"
msgid "could not read directory: %s: %s\n"
msgstr ""
#: lib/libalpm/package.c:578
#: lib/libalpm/package.c:614
#, c-format
msgid "could not fully load metadata for package %s-%s\n"
msgstr "ezin izan dira %s-%s paketearen meta-datuak guztiz kargatu\n"
#: lib/libalpm/remove.c:119
#: lib/libalpm/package.c:869
#, c-format
msgid "invalid package metadata (name or version missing)"
msgstr ""
#: lib/libalpm/package.c:874
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name cannot start with '.' or "
"'-')\n"
msgstr ""
#: lib/libalpm/package.c:878
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name contains invalid "
"characters)\n"
msgstr ""
#: lib/libalpm/package.c:885 lib/libalpm/package.c:889
#, c-format
msgid ""
"invalid metadata for package %s-%s (package version contains invalid "
"characters)\n"
msgstr ""
#: lib/libalpm/package.c:895
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name and version too long)\n"
msgstr ""
#: lib/libalpm/remove.c:111
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "ezin izan da %s aurkitu datu-basean -- ezikusi\n"
#: lib/libalpm/remove.c:154
#: lib/libalpm/remove.c:146
#, c-format
msgid "removing %s from target list\n"
msgstr "%s helburu zerrendatik ezabatzen\n"
#: lib/libalpm/remove.c:346
#: lib/libalpm/remove.c:338
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "ezin '%s' fitxategia ezabatu: %s\n"
#: lib/libalpm/remove.c:411 lib/libalpm/remove.c:420
#: lib/libalpm/remove.c:403 lib/libalpm/remove.c:412
#, c-format
msgid "could not backup %s due to PATH_MAX overflow\n"
msgstr ""
#: lib/libalpm/remove.c:562
#: lib/libalpm/remove.c:570
#, c-format
msgid "cannot remove %s (%s)\n"
msgstr "ezin ezabatu %s (%s)\n"
#: lib/libalpm/remove.c:735
#: lib/libalpm/remove.c:743
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "ezin izan da datu-base sarrera ezabatu %s-%s\n"
#: lib/libalpm/remove.c:740
#: lib/libalpm/remove.c:748
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "ezin izan da '%s' sarrera ezabatu katxetik\n"
#: lib/libalpm/signing.c:171
#: lib/libalpm/signing.c:163
#, c-format
msgid "Public keyring not found; have you run '%s'?\n"
msgstr ""
#: lib/libalpm/signing.c:207 lib/libalpm/signing.c:784
#: lib/libalpm/signing.c:199 lib/libalpm/signing.c:773
#, c-format
msgid "GPGME error: %s\n"
msgstr ""
#: lib/libalpm/signing.c:284
#: lib/libalpm/signing.c:275
#, c-format
msgid "looking up key %s using WKD\n"
msgstr ""
#: lib/libalpm/signing.c:293
#: lib/libalpm/signing.c:289
#, c-format
msgid "gpg error: %s\n"
msgstr ""
#: lib/libalpm/signing.c:441 lib/libalpm/signing.c:515
#: lib/libalpm/signing.c:440 lib/libalpm/signing.c:513
#, c-format
msgid "keyring is not writable\n"
msgstr ""
#: lib/libalpm/signing.c:539
#: lib/libalpm/signing.c:537
#, c-format
msgid "key \"%s\" on keyserver\n"
msgstr ""
#: lib/libalpm/signing.c:544
#: lib/libalpm/signing.c:542
#, c-format
msgid "key \"%s\" could not be imported\n"
msgstr ""
#: lib/libalpm/signing.c:548
#: lib/libalpm/signing.c:546
#, c-format
msgid "key \"%s\" could not be looked up remotely\n"
msgstr ""
#: lib/libalpm/signing.c:943 lib/libalpm/sync.c:1022
#: lib/libalpm/signing.c:932 lib/libalpm/sync.c:1052
#, c-format
msgid "%s: missing required signature\n"
msgstr "%s: beharrezko sinadura falta da\n"
#: lib/libalpm/signing.c:958
#: lib/libalpm/signing.c:947
#, c-format
msgid "%s: signature from \"%s\" is marginal trust\n"
msgstr ""
#: lib/libalpm/signing.c:966
#: lib/libalpm/signing.c:955
#, c-format
msgid "%s: signature from \"%s\" is unknown trust\n"
msgstr ""
#: lib/libalpm/signing.c:973
#: lib/libalpm/signing.c:962
#, c-format
msgid "%s: signature from \"%s\" should never be trusted\n"
msgstr ""
#: lib/libalpm/signing.c:985
#: lib/libalpm/signing.c:974
#, c-format
msgid "%s: key \"%s\" is unknown\n"
msgstr ""
#: lib/libalpm/signing.c:994
#: lib/libalpm/signing.c:983
#, c-format
msgid "%s: key \"%s\" is disabled\n"
msgstr ""
#: lib/libalpm/signing.c:998
#: lib/libalpm/signing.c:987
#, c-format
msgid "%s: signature from \"%s\" is expired\n"
msgstr ""
#: lib/libalpm/signing.c:1002
#: lib/libalpm/signing.c:991
#, c-format
msgid "%s: signature from \"%s\" is invalid\n"
msgstr ""
#: lib/libalpm/signing.c:1079 lib/libalpm/signing.c:1147
#: lib/libalpm/signing.c:1226
#: lib/libalpm/signing.c:1049 lib/libalpm/signing.c:1110
#: lib/libalpm/signing.c:1189
#, c-format
msgid "%s: signature format error\n"
msgstr ""
#: lib/libalpm/signing.c:1179 lib/libalpm/signing.c:1212
#: lib/libalpm/signing.c:1220
#: lib/libalpm/signing.c:1142 lib/libalpm/signing.c:1175
#: lib/libalpm/signing.c:1183
#, c-format
msgid "%s: unsupported signature format\n"
msgstr ""
#: lib/libalpm/sync.c:99
#: lib/libalpm/sync.c:96
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: ezikusi pakete bertsio berritzea (%s => %s)\n"
#: lib/libalpm/sync.c:111
#: lib/libalpm/sync.c:108
#, c-format
msgid "%s: ignoring package downgrade (%s => %s)\n"
msgstr "%s: ezikusi paketea bertsio zahartzea (%s => %s)\n"
#: lib/libalpm/sync.c:114
#: lib/libalpm/sync.c:111
#, c-format
msgid "%s: downgrading from version %s to version %s\n"
msgstr "%s: bertsio zahartzen %s bertsiotik %s bertsiora\n"
#: lib/libalpm/sync.c:120
#: lib/libalpm/sync.c:117
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr "%s: lokala (%s) %s (%s) baino berriagoa da\n"
#: lib/libalpm/sync.c:161
#: lib/libalpm/sync.c:158
#, c-format
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
msgstr "ezikusi pakete ordezkapena (%s-%s => %s-%s)\n"
#: lib/libalpm/sync.c:177
#: lib/libalpm/sync.c:174
#, c-format
msgid "cannot replace %s by %s\n"
msgstr "ezin %s ordezkatu %s paketearekin\n"
#: lib/libalpm/sync.c:535 lib/libalpm/sync.c:605
#: lib/libalpm/sync.c:477
#, c-format
msgid "packages %s and %s have the same filename: %s\n"
msgstr ""
#: lib/libalpm/sync.c:546 lib/libalpm/sync.c:618
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr "ebatzi ezineko paketeen arteko gatazka detektatu da\n"
#: lib/libalpm/sync.c:555
#: lib/libalpm/sync.c:566
#, c-format
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgstr "'%s' helburutik ezabatzen gatazka sortzen duelako '%s' paketearekin\n"
msgid "removing '%s-%s' from target list because it conflicts with '%s-%s'\n"
msgstr ""
#: lib/libalpm/sync.c:849
#: lib/libalpm/sync.c:1020 lib/libalpm/sync.c:1187
#, c-format
msgid "failed to retrieve some files\n"
msgstr "fitxategi batzuk eskuratzeak huts egin du\n"
msgid "%s: could not find package in cache\n"
msgstr ""
#: lib/libalpm/sync.c:1036
#: lib/libalpm/sync.c:1066
#, c-format
msgid "failed to read file %s: %s\n"
msgstr ""
#: lib/libalpm/sync.c:1223
#: lib/libalpm/sync.c:1324
#, c-format
msgid "not enough free disk space\n"
msgstr "ez dago behar beste leku libre diskoan\n"
#: lib/libalpm/sync.c:1245
#: lib/libalpm/sync.c:1346
#, c-format
msgid "could not commit removal transaction\n"
msgstr "ezin izan da ezabaketa transakzioa egikaritu\n"
#: lib/libalpm/sync.c:1253
#: lib/libalpm/sync.c:1354
#, c-format
msgid "could not commit transaction\n"
msgstr "ezin izan da transakzioa egikaritu\n"
#: lib/libalpm/trans.c:364
#: lib/libalpm/trans.c:369
#, c-format
msgid "could not create temp directory\n"
msgstr "ezin izan da temp direktorioa sortu\n"
#: lib/libalpm/trans.c:379
#: lib/libalpm/trans.c:384
#, c-format
msgid "could not copy tempfile to %s (%s)\n"
msgstr "ezin izan da tempfile hona kopiatu %s (%s)\n"
#: lib/libalpm/trans.c:410
#: lib/libalpm/trans.c:415
#, c-format
msgid "could not remove %s\n"
msgstr "ezin izan da %s ezabatu\n"
#: lib/libalpm/trans.c:414
#: lib/libalpm/trans.c:419
#, c-format
msgid "could not remove tmpdir %s\n"
msgstr "ezin tempdir ezabatu %s\n"
#: lib/libalpm/util.c:486
#: lib/libalpm/util.c:512
#, c-format
msgid "unable to write to pipe (%s)\n"
msgstr "ezin izan da kanalizazioan idatzi (%s)\n"
#: lib/libalpm/util.c:545
#: lib/libalpm/util.c:571
#, c-format
msgid "unable to read from pipe (%s)\n"
msgstr "ezin izan da kanalizaziotik irakurri (%s)\n"
#: lib/libalpm/util.c:609 lib/libalpm/util.c:615
#: lib/libalpm/util.c:641 lib/libalpm/util.c:647
#, c-format
msgid "could not create pipe (%s)\n"
msgstr "ezin izan da kanalizazioa sortu (%s)\n"
#: lib/libalpm/util.c:623
#: lib/libalpm/util.c:655
#, c-format
msgid "could not fork a new process (%s)\n"
msgstr "ezin izan da prozesu berri bat sardetu (%s)\n"
#: lib/libalpm/util.c:646
#: lib/libalpm/util.c:680
#, c-format
msgid "could not change the root directory (%s)\n"
msgstr "ezin izan da erro direktorioa aldatu (%s)\n"
#: lib/libalpm/util.c:658
#: lib/libalpm/util.c:700
#, c-format
msgid "call to execv failed (%s)\n"
msgstr "execv deiak huts egin du (%s)\n"
#: lib/libalpm/util.c:737
#: lib/libalpm/util.c:779
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr "waitpid deiak huts egin du (%s)\n"
#: lib/libalpm/util.c:747
#: lib/libalpm/util.c:789
#, c-format
msgid "command failed to execute correctly\n"
msgstr "komandoa ez da behar bezala exekutatu\n"
#: lib/libalpm/util.c:754
#: lib/libalpm/util.c:796
#, c-format
msgid "Unknown signal"
msgstr "Seinale ezezaguna"
#: lib/libalpm/util.c:756
#: lib/libalpm/util.c:798
#, c-format
msgid "command terminated by signal %d: %s\n"
msgstr "%d seinaleak eten du komandoa: %s\n"
#: lib/libalpm/util.c:853
#: lib/libalpm/util.c:916
#, c-format
msgid "no %s cache exists, creating...\n"
msgstr "ez dago %s katxerik, sortzen...\n"
#: lib/libalpm/util.c:884
#: lib/libalpm/util.c:947
#, c-format
msgid "couldn't find or create package cache, using %s instead\n"
msgstr "ezin izan da pakete katxea aurkitu edo sortu, %s erabiliko da ordez\n"

View file

@ -1,17 +1,17 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Pacman Development Team <pacman-dev@archlinux.org>
# This file is distributed under the same license as the PACKAGE package.
# Copyright (C) YEAR "Pacman Development Team <pacman-dev@archlinux.org>"
# This file is distributed under the same license as the libalpm package.
#
# Translators:
# Osoitz <oelkoro@gmail.com>, 2013
msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2019-10-21 17:23+1000\n"
"PO-Revision-Date: 2019-10-07 08:12+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"Language-Team: Basque (Spain) (http://www.transifex.com/toofishes/archlinux-"
"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/pacman/pacman/-/issues\n"
"POT-Creation-Date: 2024-07-14 19:10+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Osoitz <oelkoro@gmail.com>, 2013\n"
"Language-Team: Basque (Spain) (http://app.transifex.com/toofishes/archlinux-"
"pacman/language/eu_ES/)\n"
"Language: eu_ES\n"
"MIME-Version: 1.0\n"
@ -19,17 +19,17 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: lib/libalpm/add.c:91 lib/libalpm/sync.c:290
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s egunean dago -- ezikusi\n"
#: lib/libalpm/add.c:95
#: lib/libalpm/add.c:94
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s egunean dago -- berrinstalatu\n"
#: lib/libalpm/add.c:100
#: lib/libalpm/add.c:99
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "bertsio zahartzen %s paketea (%s => %s)\n"
@ -39,17 +39,17 @@ msgstr "bertsio zahartzen %s paketea (%s => %s)\n"
msgid "cannot allocate disk archive object"
msgstr ""
#: lib/libalpm/add.c:143 lib/libalpm/util.c:382
#: lib/libalpm/add.c:143 lib/libalpm/util.c:408
#, c-format
msgid "warning given when extracting %s (%s)\n"
msgstr "oharra eman da %s erauztean (%s)\n"
#: lib/libalpm/add.c:146 lib/libalpm/util.c:385
#: lib/libalpm/add.c:146 lib/libalpm/util.c:411
#, c-format
msgid "could not extract %s (%s)\n"
msgstr "ezin izan da %s erauzi (%s)\n"
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:574 lib/libalpm/remove.c:542
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:707 lib/libalpm/remove.c:550
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "ezin izan da %s berrizendatu %s gisa (%s)\n"
@ -95,139 +95,154 @@ msgstr "erauzi: ez da direktorioa %s fitxategiarekin gainidatziko\n"
msgid "unable to extract %s.pacnew: path too long"
msgstr "ezin izan da %s.pacnew erauzi: bidea luzeegia da"
#: lib/libalpm/add.c:513 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#: lib/libalpm/add.c:510 lib/libalpm/util.c:354 lib/libalpm/util.c:624
#, c-format
msgid "could not get current working directory\n"
msgstr "ezin izan da uneko lan direktorioa lortu\n"
#: lib/libalpm/add.c:518 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/util.c:650
#: lib/libalpm/add.c:515 lib/libalpm/util.c:359 lib/libalpm/util.c:629
#: lib/libalpm/util.c:684
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "ezin izan da direktorioa hona aldatu %s (%s)\n"
#: lib/libalpm/add.c:575 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#: lib/libalpm/add.c:571 lib/libalpm/util.c:429 lib/libalpm/util.c:808
#, c-format
msgid "could not restore working directory (%s)\n"
msgstr "ezin izan da laneko direktorioa berreskuratu (%s)\n"
#: lib/libalpm/add.c:583
#: lib/libalpm/add.c:579
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "arazo bat egon da %s bertsio berritzean\n"
#: lib/libalpm/add.c:589
#: lib/libalpm/add.c:585
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "arazo bat egon da %s instalatzean\n"
#: lib/libalpm/add.c:604
#: lib/libalpm/add.c:600
#, c-format
msgid "could not update database entry %s-%s\n"
msgstr "ezin izan da datu-base sarrera eguneratu %s-%s\n"
#: lib/libalpm/add.c:615
#: lib/libalpm/add.c:610
#, c-format
msgid "could not add entry '%s' in cache\n"
msgstr "ezin izan da '%s' sarrera katxean gehitu\n"
#: lib/libalpm/be_local.c:267
#: lib/libalpm/be_local.c:271
#, c-format
msgid "error while reading file %s: %s\n"
msgstr "errorea %s fitxategia irakurtzean: %s\n"
#: lib/libalpm/be_local.c:364
#: lib/libalpm/be_local.c:382
#, c-format
msgid "removing invalid database: %s\n"
msgstr "datu-base baliogabea ezabatzen:%s\n"
#: lib/libalpm/be_local.c:415 lib/libalpm/be_local.c:905
#: lib/libalpm/be_local.c:433 lib/libalpm/be_local.c:947
#, c-format
msgid "could not create directory %s: %s\n"
msgstr ""
"ezin izan da %s direktorioa sortu: %s\n"
"\n"
#: lib/libalpm/be_local.c:590 lib/libalpm/be_sync.c:386
#: lib/libalpm/be_local.c:608 lib/libalpm/be_sync.c:339
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "izen baliogabea '%s' datu-base sarreran\n"
#: lib/libalpm/be_local.c:598
#: lib/libalpm/be_local.c:616
#, c-format
msgid "duplicated database entry '%s'\n"
msgstr "bikoiztutako datu-base sarrera '%s'\n"
#: lib/libalpm/be_local.c:610
#: lib/libalpm/be_local.c:628
#, c-format
msgid "corrupted database entry '%s'\n"
msgstr "datu-base sarrera hondatua '%s'\n"
#: lib/libalpm/be_local.c:713 lib/libalpm/be_local.c:809
#: lib/libalpm/be_local.c:954 lib/libalpm/be_local.c:1051
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:422 lib/libalpm/util.c:253
#: lib/libalpm/util.c:269
#: lib/libalpm/be_local.c:663
#, fuzzy, c-format
msgid "unknown install reason for package %s: %s\n"
msgstr "Balidazio mota ezezaguna %s paketearentzat: %s\n"
#: lib/libalpm/be_local.c:743 lib/libalpm/be_local.c:856
#: lib/libalpm/be_local.c:996 lib/libalpm/be_local.c:1102
#: lib/libalpm/diskspace.c:135 lib/libalpm/dload.c:792 lib/libalpm/util.c:273
#: lib/libalpm/util.c:289
#, c-format
msgid "could not open file %s: %s\n"
msgstr "ezin izan da %s fitxategia ireki: %s\n"
#: lib/libalpm/be_local.c:729 lib/libalpm/be_sync.c:650
#: lib/libalpm/be_local.c:759 lib/libalpm/be_sync.c:612
#, c-format
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr "%s datu-basea kontraesankorra da: izenak ez datoz bat %s paketean\n"
#: lib/libalpm/be_local.c:735 lib/libalpm/be_sync.c:656
#: lib/libalpm/be_local.c:765 lib/libalpm/be_sync.c:618
#, c-format
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr "%s datu-basea kontraesankorra da: bertsioak ez datoz bat %s paketean\n"
#: lib/libalpm/be_local.c:776
#: lib/libalpm/be_local.c:806
#, c-format
msgid "unknown validation type for package %s: %s\n"
msgstr "Balidazio mota ezezaguna %s paketearentzat: %s\n"
#: lib/libalpm/be_package.c:479 lib/libalpm/be_package.c:637
#: lib/libalpm/be_package.c:650
#: lib/libalpm/be_local.c:841
#, c-format
msgid "%s: unknown key '%s' in local database\n"
msgstr ""
#: lib/libalpm/be_package.c:255
#, c-format
msgid "%s: unknown key '%s' in package description\n"
msgstr ""
#: lib/libalpm/be_package.c:482 lib/libalpm/be_package.c:635
#: lib/libalpm/be_package.c:647
#, c-format
msgid "error while reading package %s: %s\n"
msgstr "errorea %s paketea irakurtzean: %s\n"
#: lib/libalpm/be_package.c:493 lib/libalpm/be_package.c:517
#: lib/libalpm/be_package.c:495 lib/libalpm/be_package.c:518
#, c-format
msgid "error while reading mtree of package %s: %s\n"
msgstr "errorea %s paketearen mtree-a irakurtzean: %s\n"
#: lib/libalpm/be_package.c:603
#: lib/libalpm/be_package.c:601
#, c-format
msgid "could not parse package description file in %s\n"
msgstr "ezin izan da paketearen deskripzioa prozesatu %s fitxategian\n"
#: lib/libalpm/be_package.c:608
#: lib/libalpm/be_package.c:606
#, c-format
msgid "missing package name in %s\n"
msgstr "paketearen izena falta da hemen: %s\n"
#: lib/libalpm/be_package.c:612
#: lib/libalpm/be_package.c:610
#, c-format
msgid "missing package version in %s\n"
msgstr "paketearen bertsioa falta da hemen: %s\n"
#: lib/libalpm/be_package.c:616
#: lib/libalpm/be_package.c:614
#, c-format
msgid "invalid package version in %s\n"
msgstr "paketearen bertsio baliogabea hemen %s\n"
#: lib/libalpm/be_package.c:657
#: lib/libalpm/be_package.c:653
#, c-format
msgid "missing package metadata in %s\n"
msgstr "paketearen metadatuak falta dira hemen: %s\n"
#: lib/libalpm/be_package.c:750
#: lib/libalpm/be_package.c:745
#, c-format
msgid "failed to read signature file: %s\n"
msgstr "sinadura fitxategiaren irakurketak huts egin du: %s\n"
#: lib/libalpm/be_package.c:779 lib/libalpm/sync.c:953
#: lib/libalpm/be_package.c:768 lib/libalpm/sync.c:976
#, c-format
msgid "required key missing from keyring\n"
msgstr "beharrezko gakoa falta da gako sortan\n"
@ -237,35 +252,40 @@ msgstr "beharrezko gakoa falta da gako sortan\n"
msgid "removing invalid file: %s\n"
msgstr "fitxategi baliogabea ezabatzen: %s\n"
#: lib/libalpm/be_sync.c:515
#: lib/libalpm/be_sync.c:471
#, c-format
msgid "could not parse package description file '%s' from db '%s'\n"
msgstr "ezin izan da '%s' fitxategi deskripzioa prozesatu '%s' datu-basetik\n"
#: lib/libalpm/be_sync.c:522
#: lib/libalpm/be_sync.c:486
#, c-format
msgid "could not read db '%s' (%s)\n"
msgstr ""
#: lib/libalpm/be_sync.c:556 lib/libalpm/be_sync.c:561
#: lib/libalpm/be_sync.c:519 lib/libalpm/be_sync.c:524
#, c-format
msgid "%s database is inconsistent: filename of package %s is illegal\n"
msgstr ""
"%s datu-basea kontraesankorra da: %s paketearen fitxategi izena legez "
"kanpokoa da\n"
#: lib/libalpm/be_sync.c:566
#: lib/libalpm/be_sync.c:529
#, c-format
msgid "%s database is inconsistent: filename of package %s is too long\n"
msgstr ""
"%s datu-basea kontraesankorra da: %s paketearen fitxategi izena luzeegia da\n"
#: lib/libalpm/be_sync.c:632
#: lib/libalpm/be_sync.c:594
#, c-format
msgid "unknown database file: %s\n"
msgstr "datu-base fitxategi ezezaguna: %s\n"
#: lib/libalpm/db.c:370
#: lib/libalpm/be_sync.c:712
#, c-format
msgid "%s: unknown key '%s' in sync database\n"
msgstr ""
#: lib/libalpm/db.c:413
#, c-format
msgid "database path is undefined\n"
msgstr "datu-basearen bide-izena definitu gabe dago\n"
@ -285,12 +305,12 @@ msgstr "%s ezabatuko da bere %s menpekotasuna eta gero\n"
msgid "%s will be installed before its %s dependency\n"
msgstr "%s instalatuko da bere %s menpekotasuna baino lehenago\n"
#: lib/libalpm/deps.c:681 lib/libalpm/deps.c:712
#: lib/libalpm/deps.c:666 lib/libalpm/deps.c:697
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "paketea ezikusten %s-%s\n"
#: lib/libalpm/deps.c:869
#: lib/libalpm/deps.c:842
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "ezin ebatzi \"%s\", \"%s\" paketearen menpekotasun bat\n"
@ -305,85 +325,126 @@ msgstr "ezin izan da %s fitxategi sistema informazioa jaso: %s\n"
msgid "could not open file: %s: %s\n"
msgstr "ezin izan da fitxategia ireki: %s :%s\n"
#: lib/libalpm/diskspace.c:146 lib/libalpm/diskspace.c:159
#: lib/libalpm/diskspace.c:154 lib/libalpm/diskspace.c:167
#, c-format
msgid "could not get filesystem information\n"
msgstr "ezin izan da fitxategi sistemaren informazioa jaso\n"
#: lib/libalpm/diskspace.c:242
#: lib/libalpm/diskspace.c:254
#, c-format
msgid "could not get file information for %s\n"
msgstr "ezin izan da %sren informazioa jaso\n"
#: lib/libalpm/diskspace.c:256 lib/libalpm/diskspace.c:315
#: lib/libalpm/diskspace.c:268 lib/libalpm/diskspace.c:327
#, c-format
msgid "could not determine mount point for file %s\n"
msgstr "ezin izan da %s fitxategiaren muntatze puntua zehaztu\n"
#: lib/libalpm/diskspace.c:354
#: lib/libalpm/diskspace.c:366
#, c-format
msgid "Partition %s too full: %jd blocks needed, %ju blocks free\n"
msgstr ""
"%s partizioa beteta dago: %jd bloke behar dira, %ju bloke daude libre\n"
#: lib/libalpm/diskspace.c:379 lib/libalpm/diskspace.c:433
#: lib/libalpm/diskspace.c:391 lib/libalpm/diskspace.c:445
#, c-format
msgid "could not determine filesystem mount points\n"
msgstr "ezin izan dira fitxategi sistemaren muntatze puntuak zehaztu\n"
#: lib/libalpm/diskspace.c:385
#: lib/libalpm/diskspace.c:397
#, c-format
msgid "could not determine cachedir mount point %s\n"
msgstr "ezin izan da cachedir muntatze puntua zehaztu %s\n"
#: lib/libalpm/diskspace.c:438
#: lib/libalpm/diskspace.c:450
#, c-format
msgid "could not determine root mount point %s\n"
msgstr "ezin izan da %s erro muntatze puntua zehaztu\n"
#: lib/libalpm/diskspace.c:486
#: lib/libalpm/diskspace.c:498
#, c-format
msgid "Partition %s is mounted read only\n"
msgstr "%s partizioa soilik irakurtzeko moduan muntatuta dago\n"
#: lib/libalpm/dload.c:161
#, c-format
msgid "disk"
msgstr "diskoa"
#: lib/libalpm/dload.c:348
#: lib/libalpm/dload.c:107
#, c-format
msgid "failed to create temporary file for download\n"
msgstr "huts egin du deskargarako behin behineko fitxategiaren sorrerak\n"
#: lib/libalpm/dload.c:393
#: lib/libalpm/dload.c:198
#, c-format
msgid "url '%s' is invalid\n"
msgid ""
"too many errors from %s, skipping for the remainder of this transaction\n"
msgstr ""
"'%s' url baliogabea da\n"
"\n"
#: lib/libalpm/dload.c:464 lib/libalpm/dload.c:485 lib/libalpm/dload.c:496
#: lib/libalpm/dload.c:215
#, c-format
msgid "fatal error from %s, skipping for the remainder of this transaction\n"
msgstr ""
#: lib/libalpm/dload.c:310
#, c-format
msgid "disk"
msgstr "diskoa"
#: lib/libalpm/dload.c:532 lib/libalpm/dload.c:570 lib/libalpm/dload.c:583
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "huts egin du '%s' fitxategia '%s'-tik erauzteak: %s\n"
#: lib/libalpm/dload.c:477
#: lib/libalpm/dload.c:562
#, c-format
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
msgstr ""
"huts egin du '%s' fitxategia eskuratzean hemendik: %s : aurreikusitako "
"deskarga tamaina gainditu da\n"
#: lib/libalpm/dload.c:532
#: lib/libalpm/dload.c:685
#, c-format
msgid "%s appears to be truncated: %jd/%jd bytes\n"
msgstr "%s ez dago osorik antza: %jd/%jd byte\n"
#: lib/libalpm/dload.c:677 lib/libalpm/dload.c:706
#: lib/libalpm/dload.c:776
#, c-format
msgid "failed to download %s\n"
msgstr "%s deskargatzeak huts egin du\n"
msgid "url '%s' is invalid\n"
msgstr ""
"'%s' url baliogabea da\n"
"\n"
#: lib/libalpm/dload.c:864
#, c-format
msgid "failed to setup a download payload for %s\n"
msgstr ""
#: lib/libalpm/dload.c:876
#, c-format
msgid "curl returned error %d from transfer\n"
msgstr ""
#: lib/libalpm/dload.c:900
#, c-format
msgid "curl transfer error: %d\n"
msgstr ""
#: lib/libalpm/dload.c:963
#, fuzzy, c-format
msgid "could not chdir to download directory %s\n"
msgstr "ezin izan da erro direktorioa aldatu (%s)\n"
#: lib/libalpm/dload.c:968
#, c-format
msgid "switching to sandbox user '%s' failed!\n"
msgstr ""
#: lib/libalpm/dload.c:1361 lib/libalpm/sync.c:861
#, c-format
msgid "failed to retrieve some files\n"
msgstr "fitxategi batzuk eskuratzeak huts egin du\n"
#: lib/libalpm/dload.c:1384
#, c-format
msgid "download completed successfully but no file in the cache\n"
msgstr ""
#: lib/libalpm/error.c:40
#, c-format
@ -500,7 +561,7 @@ msgstr "ez da zerbitzaririk konfiguratu biltegiarentzat"
msgid "transaction already initialized"
msgstr "transakzioa dagoeneko hasieratua"
#: lib/libalpm/error.c:90 lib/libalpm/error.c:94
#: lib/libalpm/error.c:90 lib/libalpm/error.c:96
#, c-format
msgid "transaction not initialized"
msgstr "transakzioa ez hasieratua"
@ -510,86 +571,86 @@ msgstr "transakzioa ez hasieratua"
msgid "duplicate target"
msgstr "bikoiztutako helburua"
#: lib/libalpm/error.c:96
#: lib/libalpm/error.c:94
#, c-format
msgid "duplicate filename"
msgstr ""
#: lib/libalpm/error.c:98
#, c-format
msgid "transaction not prepared"
msgstr "transakzioa ez dago prest"
#: lib/libalpm/error.c:98
#: lib/libalpm/error.c:100
#, c-format
msgid "transaction aborted"
msgstr "transakzioa bertan behera utzi da"
#: lib/libalpm/error.c:100
#: lib/libalpm/error.c:102
#, c-format
msgid "operation not compatible with the transaction type"
msgstr "eragiketa ez da transakzio motarekin bateragarria"
#: lib/libalpm/error.c:102
#: lib/libalpm/error.c:104
#, c-format
msgid "transaction commit attempt when database is not locked"
msgstr "transakzioa egikaritzeko saiakera datu-basea blokeatuta ez dagoenean"
#: lib/libalpm/error.c:104
#: lib/libalpm/error.c:106
#, c-format
msgid "failed to run transaction hooks"
msgstr "huts egin du transakzioaren kakoak abiatzean"
#: lib/libalpm/error.c:107
#: lib/libalpm/error.c:109
#, c-format
msgid "could not find or read package"
msgstr "ezin izan da paketea aurkitu edo irakurri"
#: lib/libalpm/error.c:109
#: lib/libalpm/error.c:111
#, c-format
msgid "operation cancelled due to ignorepkg"
msgstr "eragiketa bertan behera utzi da ignorepkg dela eta"
#: lib/libalpm/error.c:111
#: lib/libalpm/error.c:113
#, c-format
msgid "invalid or corrupted package"
msgstr "pakete baliogabe edo hondatua"
#: lib/libalpm/error.c:113
#: lib/libalpm/error.c:115
#, c-format
msgid "invalid or corrupted package (checksum)"
msgstr "pakete baliogabe edo hondatua (checksum)"
#: lib/libalpm/error.c:115
#: lib/libalpm/error.c:117
#, c-format
msgid "invalid or corrupted package (PGP signature)"
msgstr "pakete baliogabe edo hondatua (PGP sinadura)"
#: lib/libalpm/error.c:117
#: lib/libalpm/error.c:119
#, c-format
msgid "package missing required signature"
msgstr "paketeari beharrezko sinadura falta zaio"
#: lib/libalpm/error.c:119
#: lib/libalpm/error.c:121
#, c-format
msgid "cannot open package file"
msgstr "ezin ireki pakete fitxategia"
#: lib/libalpm/error.c:121
#: lib/libalpm/error.c:123
#, c-format
msgid "cannot remove all files for package"
msgstr "ezin ezabatu paketeko fitxategi guztiak"
#: lib/libalpm/error.c:123
#: lib/libalpm/error.c:125
#, c-format
msgid "package filename is not valid"
msgstr "paketearen fitxategi izena baliogabea da"
#: lib/libalpm/error.c:125
#: lib/libalpm/error.c:127
#, c-format
msgid "package architecture is not valid"
msgstr "paketearen arkitektura baliogabea da"
#: lib/libalpm/error.c:127
#, c-format
msgid "could not find repository for target"
msgstr "ezin izan da biltegirik aurkitu helburuarentzat"
#: lib/libalpm/error.c:130
#, c-format
msgid "missing PGP signature"
@ -655,12 +716,12 @@ msgstr ""
msgid "unexpected error"
msgstr "ustegabeko errorea"
#: lib/libalpm/handle.c:153
#: lib/libalpm/handle.c:165
#, c-format
msgid "lock file missing %s\n"
msgstr "blokeo fitxategia falta da %s\n"
#: lib/libalpm/handle.c:159
#: lib/libalpm/handle.c:171
#, c-format
msgid "could not remove lock file %s\n"
msgstr "ezin izan da %s blokeo fitxategia ezabatu\n"
@ -732,7 +793,7 @@ msgstr ""
msgid "unable to run hook %s: %s\n"
msgstr ""
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:386
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:378
#, c-format
msgid "could not open directory: %s: %s\n"
msgstr "ezin izan da direktorioa ireki: %s: %s\n"
@ -742,7 +803,7 @@ msgstr "ezin izan da direktorioa ireki: %s: %s\n"
msgid "could not open file: %s%s: %s\n"
msgstr ""
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:259
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:279
#, c-format
msgid "could not stat file %s: %s\n"
msgstr "ezin izan da fitxategiaren egoera zehaztu: %s: %s\n"
@ -752,279 +813,316 @@ msgstr "ezin izan da fitxategiaren egoera zehaztu: %s: %s\n"
msgid "could not read directory: %s: %s\n"
msgstr ""
#: lib/libalpm/package.c:578
#: lib/libalpm/package.c:614
#, c-format
msgid "could not fully load metadata for package %s-%s\n"
msgstr "ezin izan dira %s-%s paketearen meta-datuak guztiz kargatu\n"
#: lib/libalpm/remove.c:119
#: lib/libalpm/package.c:869
#, c-format
msgid "invalid package metadata (name or version missing)"
msgstr ""
#: lib/libalpm/package.c:874
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name cannot start with '.' or "
"'-')\n"
msgstr ""
#: lib/libalpm/package.c:878
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name contains invalid "
"characters)\n"
msgstr ""
#: lib/libalpm/package.c:885 lib/libalpm/package.c:889
#, c-format
msgid ""
"invalid metadata for package %s-%s (package version contains invalid "
"characters)\n"
msgstr ""
#: lib/libalpm/package.c:895
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name and version too long)\n"
msgstr ""
#: lib/libalpm/remove.c:111
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "ezin izan da %s aurkitu datu-basean -- ezikusi\n"
#: lib/libalpm/remove.c:154
#: lib/libalpm/remove.c:146
#, c-format
msgid "removing %s from target list\n"
msgstr "%s helburu zerrendatik ezabatzen\n"
#: lib/libalpm/remove.c:346
#: lib/libalpm/remove.c:338
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "ezin '%s' fitxategia ezabatu: %s\n"
#: lib/libalpm/remove.c:411 lib/libalpm/remove.c:420
#: lib/libalpm/remove.c:403 lib/libalpm/remove.c:412
#, c-format
msgid "could not backup %s due to PATH_MAX overflow\n"
msgstr ""
#: lib/libalpm/remove.c:562
#: lib/libalpm/remove.c:570
#, c-format
msgid "cannot remove %s (%s)\n"
msgstr "ezin ezabatu %s (%s)\n"
#: lib/libalpm/remove.c:735
#: lib/libalpm/remove.c:743
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "ezin izan da datu-base sarrera ezabatu %s-%s\n"
#: lib/libalpm/remove.c:740
#: lib/libalpm/remove.c:748
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "ezin izan da '%s' sarrera ezabatu katxetik\n"
#: lib/libalpm/signing.c:171
#: lib/libalpm/signing.c:163
#, c-format
msgid "Public keyring not found; have you run '%s'?\n"
msgstr ""
#: lib/libalpm/signing.c:207 lib/libalpm/signing.c:784
#: lib/libalpm/signing.c:199 lib/libalpm/signing.c:773
#, c-format
msgid "GPGME error: %s\n"
msgstr ""
#: lib/libalpm/signing.c:284
#: lib/libalpm/signing.c:275
#, c-format
msgid "looking up key %s using WKD\n"
msgstr ""
#: lib/libalpm/signing.c:293
#: lib/libalpm/signing.c:289
#, c-format
msgid "gpg error: %s\n"
msgstr ""
#: lib/libalpm/signing.c:441 lib/libalpm/signing.c:515
#: lib/libalpm/signing.c:440 lib/libalpm/signing.c:513
#, c-format
msgid "keyring is not writable\n"
msgstr ""
#: lib/libalpm/signing.c:539
#: lib/libalpm/signing.c:537
#, c-format
msgid "key \"%s\" on keyserver\n"
msgstr ""
#: lib/libalpm/signing.c:544
#: lib/libalpm/signing.c:542
#, c-format
msgid "key \"%s\" could not be imported\n"
msgstr ""
#: lib/libalpm/signing.c:548
#: lib/libalpm/signing.c:546
#, c-format
msgid "key \"%s\" could not be looked up remotely\n"
msgstr ""
#: lib/libalpm/signing.c:943 lib/libalpm/sync.c:1022
#: lib/libalpm/signing.c:932 lib/libalpm/sync.c:1052
#, c-format
msgid "%s: missing required signature\n"
msgstr "%s: beharrezko sinadura falta da\n"
#: lib/libalpm/signing.c:958
#: lib/libalpm/signing.c:947
#, c-format
msgid "%s: signature from \"%s\" is marginal trust\n"
msgstr ""
#: lib/libalpm/signing.c:966
#: lib/libalpm/signing.c:955
#, c-format
msgid "%s: signature from \"%s\" is unknown trust\n"
msgstr ""
#: lib/libalpm/signing.c:973
#: lib/libalpm/signing.c:962
#, c-format
msgid "%s: signature from \"%s\" should never be trusted\n"
msgstr ""
#: lib/libalpm/signing.c:985
#: lib/libalpm/signing.c:974
#, c-format
msgid "%s: key \"%s\" is unknown\n"
msgstr ""
#: lib/libalpm/signing.c:994
#: lib/libalpm/signing.c:983
#, c-format
msgid "%s: key \"%s\" is disabled\n"
msgstr ""
#: lib/libalpm/signing.c:998
#: lib/libalpm/signing.c:987
#, c-format
msgid "%s: signature from \"%s\" is expired\n"
msgstr ""
#: lib/libalpm/signing.c:1002
#: lib/libalpm/signing.c:991
#, c-format
msgid "%s: signature from \"%s\" is invalid\n"
msgstr ""
#: lib/libalpm/signing.c:1079 lib/libalpm/signing.c:1147
#: lib/libalpm/signing.c:1226
#: lib/libalpm/signing.c:1049 lib/libalpm/signing.c:1110
#: lib/libalpm/signing.c:1189
#, c-format
msgid "%s: signature format error\n"
msgstr ""
#: lib/libalpm/signing.c:1179 lib/libalpm/signing.c:1212
#: lib/libalpm/signing.c:1220
#: lib/libalpm/signing.c:1142 lib/libalpm/signing.c:1175
#: lib/libalpm/signing.c:1183
#, c-format
msgid "%s: unsupported signature format\n"
msgstr ""
#: lib/libalpm/sync.c:99
#: lib/libalpm/sync.c:96
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: ezikusi pakete bertsio berritzea (%s => %s)\n"
#: lib/libalpm/sync.c:111
#: lib/libalpm/sync.c:108
#, c-format
msgid "%s: ignoring package downgrade (%s => %s)\n"
msgstr "%s: ezikusi paketea bertsio zahartzea (%s => %s)\n"
#: lib/libalpm/sync.c:114
#: lib/libalpm/sync.c:111
#, c-format
msgid "%s: downgrading from version %s to version %s\n"
msgstr "%s: bertsio zahartzen %s bertsiotik %s bertsiora\n"
#: lib/libalpm/sync.c:120
#: lib/libalpm/sync.c:117
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr "%s: lokala (%s) %s (%s) baino berriagoa da\n"
#: lib/libalpm/sync.c:161
#: lib/libalpm/sync.c:158
#, c-format
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
msgstr "ezikusi pakete ordezkapena (%s-%s => %s-%s)\n"
#: lib/libalpm/sync.c:177
#: lib/libalpm/sync.c:174
#, c-format
msgid "cannot replace %s by %s\n"
msgstr "ezin %s ordezkatu %s paketearekin\n"
#: lib/libalpm/sync.c:535 lib/libalpm/sync.c:605
#: lib/libalpm/sync.c:477
#, c-format
msgid "packages %s and %s have the same filename: %s\n"
msgstr ""
#: lib/libalpm/sync.c:546 lib/libalpm/sync.c:618
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr "ebatzi ezineko paketeen arteko gatazka detektatu da\n"
#: lib/libalpm/sync.c:555
#: lib/libalpm/sync.c:566
#, c-format
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgstr "'%s' helburutik ezabatzen gatazka sortzen duelako '%s' paketearekin\n"
msgid "removing '%s-%s' from target list because it conflicts with '%s-%s'\n"
msgstr ""
#: lib/libalpm/sync.c:849
#: lib/libalpm/sync.c:1020 lib/libalpm/sync.c:1187
#, c-format
msgid "failed to retrieve some files\n"
msgstr "fitxategi batzuk eskuratzeak huts egin du\n"
msgid "%s: could not find package in cache\n"
msgstr ""
#: lib/libalpm/sync.c:1036
#: lib/libalpm/sync.c:1066
#, c-format
msgid "failed to read file %s: %s\n"
msgstr ""
#: lib/libalpm/sync.c:1223
#: lib/libalpm/sync.c:1324
#, c-format
msgid "not enough free disk space\n"
msgstr "ez dago behar beste leku libre diskoan\n"
#: lib/libalpm/sync.c:1245
#: lib/libalpm/sync.c:1346
#, c-format
msgid "could not commit removal transaction\n"
msgstr "ezin izan da ezabaketa transakzioa egikaritu\n"
#: lib/libalpm/sync.c:1253
#: lib/libalpm/sync.c:1354
#, c-format
msgid "could not commit transaction\n"
msgstr "ezin izan da transakzioa egikaritu\n"
#: lib/libalpm/trans.c:364
#: lib/libalpm/trans.c:369
#, c-format
msgid "could not create temp directory\n"
msgstr "ezin izan da temp direktorioa sortu\n"
#: lib/libalpm/trans.c:379
#: lib/libalpm/trans.c:384
#, c-format
msgid "could not copy tempfile to %s (%s)\n"
msgstr "ezin izan da tempfile hona kopiatu %s (%s)\n"
#: lib/libalpm/trans.c:410
#: lib/libalpm/trans.c:415
#, c-format
msgid "could not remove %s\n"
msgstr "ezin izan da %s ezabatu\n"
#: lib/libalpm/trans.c:414
#: lib/libalpm/trans.c:419
#, c-format
msgid "could not remove tmpdir %s\n"
msgstr "ezin tempdir ezabatu %s\n"
#: lib/libalpm/util.c:486
#: lib/libalpm/util.c:512
#, c-format
msgid "unable to write to pipe (%s)\n"
msgstr "ezin izan da kanalizazioan idatzi (%s)\n"
#: lib/libalpm/util.c:545
#: lib/libalpm/util.c:571
#, c-format
msgid "unable to read from pipe (%s)\n"
msgstr "ezin izan da kanalizaziotik irakurri (%s)\n"
#: lib/libalpm/util.c:609 lib/libalpm/util.c:615
#: lib/libalpm/util.c:641 lib/libalpm/util.c:647
#, c-format
msgid "could not create pipe (%s)\n"
msgstr "ezin izan da kanalizazioa sortu (%s)\n"
#: lib/libalpm/util.c:623
#: lib/libalpm/util.c:655
#, c-format
msgid "could not fork a new process (%s)\n"
msgstr "ezin izan da prozesu berri bat sardetu (%s)\n"
#: lib/libalpm/util.c:646
#: lib/libalpm/util.c:680
#, c-format
msgid "could not change the root directory (%s)\n"
msgstr "ezin izan da erro direktorioa aldatu (%s)\n"
#: lib/libalpm/util.c:658
#: lib/libalpm/util.c:700
#, c-format
msgid "call to execv failed (%s)\n"
msgstr "execv deiak huts egin du (%s)\n"
#: lib/libalpm/util.c:737
#: lib/libalpm/util.c:779
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr "waitpid deiak huts egin du (%s)\n"
#: lib/libalpm/util.c:747
#: lib/libalpm/util.c:789
#, c-format
msgid "command failed to execute correctly\n"
msgstr "komandoa ez da behar bezala exekutatu\n"
#: lib/libalpm/util.c:754
#: lib/libalpm/util.c:796
#, c-format
msgid "Unknown signal"
msgstr "Seinale ezezaguna"
#: lib/libalpm/util.c:756
#: lib/libalpm/util.c:798
#, c-format
msgid "command terminated by signal %d: %s\n"
msgstr "%d seinaleak eten du komandoa: %s\n"
#: lib/libalpm/util.c:853
#: lib/libalpm/util.c:916
#, c-format
msgid "no %s cache exists, creating...\n"
msgstr "ez dago %s katxerik, sortzen...\n"
#: lib/libalpm/util.c:884
#: lib/libalpm/util.c:947
#, c-format
msgid "couldn't find or create package cache, using %s instead\n"
msgstr "ezin izan da pakete katxea aurkitu edo sortu, %s erabiliko da ordez\n"

View file

@ -1,6 +1,6 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Pacman Development Team <pacman-dev@archlinux.org>
# This file is distributed under the same license as the PACKAGE package.
# Copyright (C) YEAR "Pacman Development Team <pacman-dev@archlinux.org>"
# This file is distributed under the same license as the libalpm package.
#
# Translators:
# No User, 2011
@ -17,11 +17,11 @@
msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2019-10-21 17:23+1000\n"
"PO-Revision-Date: 2019-10-07 08:12+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"Language-Team: Finnish (http://www.transifex.com/toofishes/archlinux-pacman/"
"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/pacman/pacman/-/issues\n"
"POT-Creation-Date: 2024-07-14 19:10+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Sami Korkalainen, 2018\n"
"Language-Team: Finnish (http://app.transifex.com/toofishes/archlinux-pacman/"
"language/fi/)\n"
"Language: fi\n"
"MIME-Version: 1.0\n"
@ -29,17 +29,17 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: lib/libalpm/add.c:91 lib/libalpm/sync.c:290
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s on ajan tasalla -- ohitetaan\n"
#: lib/libalpm/add.c:95
#: lib/libalpm/add.c:94
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s on ajan tasalla -- asennetaan uudelleen\n"
#: lib/libalpm/add.c:100
#: lib/libalpm/add.c:99
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "varhennetaan paketti %s (%s => %s)\n"
@ -49,17 +49,17 @@ msgstr "varhennetaan paketti %s (%s => %s)\n"
msgid "cannot allocate disk archive object"
msgstr "levyn arkisto-objektia ei voida varata"
#: lib/libalpm/add.c:143 lib/libalpm/util.c:382
#: lib/libalpm/add.c:143 lib/libalpm/util.c:408
#, c-format
msgid "warning given when extracting %s (%s)\n"
msgstr "annettiin varoitus purettaessa %s (%s)\n"
#: lib/libalpm/add.c:146 lib/libalpm/util.c:385
#: lib/libalpm/add.c:146 lib/libalpm/util.c:411
#, c-format
msgid "could not extract %s (%s)\n"
msgstr "tiedostoa %s ei voitu purkaa (%s)\n"
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:574 lib/libalpm/remove.c:542
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:707 lib/libalpm/remove.c:550
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "kohdetta %s ei voitu nimetä uudelleen kohteeksi %s (%s)\n"
@ -104,137 +104,152 @@ msgstr "purku: kansiota ei korvata tiedostolla %s\n"
msgid "unable to extract %s.pacnew: path too long"
msgstr "ei voitu purkaa %s.pacnew: polku liian pitkä"
#: lib/libalpm/add.c:513 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#: lib/libalpm/add.c:510 lib/libalpm/util.c:354 lib/libalpm/util.c:624
#, c-format
msgid "could not get current working directory\n"
msgstr "nykyisen kansion sijaintia ei voitu määrittää\n"
#: lib/libalpm/add.c:518 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/util.c:650
#: lib/libalpm/add.c:515 lib/libalpm/util.c:359 lib/libalpm/util.c:629
#: lib/libalpm/util.c:684
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "ei voitu vaihtaa kansioon %s (%s)\n"
#: lib/libalpm/add.c:575 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#: lib/libalpm/add.c:571 lib/libalpm/util.c:429 lib/libalpm/util.c:808
#, c-format
msgid "could not restore working directory (%s)\n"
msgstr "työhakemistoa ei voitu palauttaa (%s)\n"
#: lib/libalpm/add.c:583
#: lib/libalpm/add.c:579
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "pakettia %s päivitettäessä tapahtui virhe\n"
#: lib/libalpm/add.c:589
#: lib/libalpm/add.c:585
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "pakettia %s asennettaessa tapahtui virhe\n"
#: lib/libalpm/add.c:604
#: lib/libalpm/add.c:600
#, c-format
msgid "could not update database entry %s-%s\n"
msgstr "ei voitu päivittää tietokantamerkintää: %s-%s\n"
#: lib/libalpm/add.c:615
#: lib/libalpm/add.c:610
#, c-format
msgid "could not add entry '%s' in cache\n"
msgstr "merkintää '%s' ei voitu lisätä välimuistiin\n"
#: lib/libalpm/be_local.c:267
#: lib/libalpm/be_local.c:271
#, c-format
msgid "error while reading file %s: %s\n"
msgstr "virhe luettaessa tiedostoa %s: %s\n"
#: lib/libalpm/be_local.c:364
#: lib/libalpm/be_local.c:382
#, c-format
msgid "removing invalid database: %s\n"
msgstr "poistetaan virheellinen tietokanta: %s\n"
#: lib/libalpm/be_local.c:415 lib/libalpm/be_local.c:905
#: lib/libalpm/be_local.c:433 lib/libalpm/be_local.c:947
#, c-format
msgid "could not create directory %s: %s\n"
msgstr "kansiota %s ei voitu luoda: %s\n"
#: lib/libalpm/be_local.c:590 lib/libalpm/be_sync.c:386
#: lib/libalpm/be_local.c:608 lib/libalpm/be_sync.c:339
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "virheellinen nimi tietokantamerkinnälle '%s'\n"
#: lib/libalpm/be_local.c:598
#: lib/libalpm/be_local.c:616
#, c-format
msgid "duplicated database entry '%s'\n"
msgstr "tietokantamerkintä '%s' on useampaan kertaan\n"
#: lib/libalpm/be_local.c:610
#: lib/libalpm/be_local.c:628
#, c-format
msgid "corrupted database entry '%s'\n"
msgstr "vahingoittunut tietokantamerkintä '%s'\n"
#: lib/libalpm/be_local.c:713 lib/libalpm/be_local.c:809
#: lib/libalpm/be_local.c:954 lib/libalpm/be_local.c:1051
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:422 lib/libalpm/util.c:253
#: lib/libalpm/util.c:269
#: lib/libalpm/be_local.c:663
#, fuzzy, c-format
msgid "unknown install reason for package %s: %s\n"
msgstr "tuntematon validointityyppi paketille %s: %s\n"
#: lib/libalpm/be_local.c:743 lib/libalpm/be_local.c:856
#: lib/libalpm/be_local.c:996 lib/libalpm/be_local.c:1102
#: lib/libalpm/diskspace.c:135 lib/libalpm/dload.c:792 lib/libalpm/util.c:273
#: lib/libalpm/util.c:289
#, c-format
msgid "could not open file %s: %s\n"
msgstr "tiedostoa %s ei voitu avata: %s\n"
#: lib/libalpm/be_local.c:729 lib/libalpm/be_sync.c:650
#: lib/libalpm/be_local.c:759 lib/libalpm/be_sync.c:612
#, c-format
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr "tietokanta %s on epäyhtenäinen: paketin %s nimi ei täsmää\n"
#: lib/libalpm/be_local.c:735 lib/libalpm/be_sync.c:656
#: lib/libalpm/be_local.c:765 lib/libalpm/be_sync.c:618
#, c-format
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr "tietokanta %s on epäyhtenäinen: paketin %s versio ei täsmää\n"
#: lib/libalpm/be_local.c:776
#: lib/libalpm/be_local.c:806
#, c-format
msgid "unknown validation type for package %s: %s\n"
msgstr "tuntematon validointityyppi paketille %s: %s\n"
#: lib/libalpm/be_package.c:479 lib/libalpm/be_package.c:637
#: lib/libalpm/be_package.c:650
#: lib/libalpm/be_local.c:841
#, c-format
msgid "%s: unknown key '%s' in local database\n"
msgstr ""
#: lib/libalpm/be_package.c:255
#, c-format
msgid "%s: unknown key '%s' in package description\n"
msgstr ""
#: lib/libalpm/be_package.c:482 lib/libalpm/be_package.c:635
#: lib/libalpm/be_package.c:647
#, c-format
msgid "error while reading package %s: %s\n"
msgstr "virhe luettaessa pakettia %s: %s\n"
#: lib/libalpm/be_package.c:493 lib/libalpm/be_package.c:517
#: lib/libalpm/be_package.c:495 lib/libalpm/be_package.c:518
#, c-format
msgid "error while reading mtree of package %s: %s\n"
msgstr "virhe luettaessa paketin %s mtreetä: %s\n"
#: lib/libalpm/be_package.c:603
#: lib/libalpm/be_package.c:601
#, c-format
msgid "could not parse package description file in %s\n"
msgstr "paketin kuvaustiedostoa %s ei voitu jäsentää\n"
#: lib/libalpm/be_package.c:608
#: lib/libalpm/be_package.c:606
#, c-format
msgid "missing package name in %s\n"
msgstr "paketin nimi puuttuu tiedostosta %s\n"
#: lib/libalpm/be_package.c:612
#: lib/libalpm/be_package.c:610
#, c-format
msgid "missing package version in %s\n"
msgstr "paketin versio puuttuu tiedostosta %s\n"
#: lib/libalpm/be_package.c:616
#: lib/libalpm/be_package.c:614
#, c-format
msgid "invalid package version in %s\n"
msgstr "virheellinen paketin versio tiedostossa %s\n"
#: lib/libalpm/be_package.c:657
#: lib/libalpm/be_package.c:653
#, c-format
msgid "missing package metadata in %s\n"
msgstr "paketin metadata puuttuu tiedostosta %s\n"
#: lib/libalpm/be_package.c:750
#: lib/libalpm/be_package.c:745
#, c-format
msgid "failed to read signature file: %s\n"
msgstr "allekirjoitustiedoston lukeminen epäonnistui: %s\n"
#: lib/libalpm/be_package.c:779 lib/libalpm/sync.c:953
#: lib/libalpm/be_package.c:768 lib/libalpm/sync.c:976
#, c-format
msgid "required key missing from keyring\n"
msgstr "vaadittu avain puuttuu avainrenkaasta\n"
@ -244,34 +259,39 @@ msgstr "vaadittu avain puuttuu avainrenkaasta\n"
msgid "removing invalid file: %s\n"
msgstr "poistetaan virheellinen tiedosto: %s\n"
#: lib/libalpm/be_sync.c:515
#: lib/libalpm/be_sync.c:471
#, c-format
msgid "could not parse package description file '%s' from db '%s'\n"
msgstr "paketin kuvaustiedostoa '%s' ei voitu jäsentää tietokannassa '%s'\n"
#: lib/libalpm/be_sync.c:522
#: lib/libalpm/be_sync.c:486
#, c-format
msgid "could not read db '%s' (%s)\n"
msgstr ""
#: lib/libalpm/be_sync.c:556 lib/libalpm/be_sync.c:561
#: lib/libalpm/be_sync.c:519 lib/libalpm/be_sync.c:524
#, c-format
msgid "%s database is inconsistent: filename of package %s is illegal\n"
msgstr ""
"tietokanta %s on epäyhtenäinen: paketin %s tiedostonimi on virheellinen\n"
#: lib/libalpm/be_sync.c:566
#: lib/libalpm/be_sync.c:529
#, c-format
msgid "%s database is inconsistent: filename of package %s is too long\n"
msgstr ""
"tietokanta %s on epäyhtenäinen: paketin %s tiedostonimi on liian pitkä\n"
#: lib/libalpm/be_sync.c:632
#: lib/libalpm/be_sync.c:594
#, c-format
msgid "unknown database file: %s\n"
msgstr "tuntematon tietokantatiedosto: %s\n"
#: lib/libalpm/db.c:370
#: lib/libalpm/be_sync.c:712
#, c-format
msgid "%s: unknown key '%s' in sync database\n"
msgstr ""
#: lib/libalpm/db.c:413
#, c-format
msgid "database path is undefined\n"
msgstr "tietokannan polkua ei ole määritelty\n"
@ -291,12 +311,12 @@ msgstr "%s poistetaan riippuvuutensa %s jälkeen\n"
msgid "%s will be installed before its %s dependency\n"
msgstr "%s asennetaan ennen riippuvuuttansa %s\n"
#: lib/libalpm/deps.c:681 lib/libalpm/deps.c:712
#: lib/libalpm/deps.c:666 lib/libalpm/deps.c:697
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "ohitetaan paketti %s-%s\n"
#: lib/libalpm/deps.c:869
#: lib/libalpm/deps.c:842
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "pakettia '%s' ei voida selvittää; se on paketin '%s' riippuvuus\n"
@ -311,82 +331,123 @@ msgstr "ei saatu tietoja tiedostojärjestelmästä %s: %s\n"
msgid "could not open file: %s: %s\n"
msgstr "tiedostoa ei voitu avata: %s: %s\n"
#: lib/libalpm/diskspace.c:146 lib/libalpm/diskspace.c:159
#: lib/libalpm/diskspace.c:154 lib/libalpm/diskspace.c:167
#, c-format
msgid "could not get filesystem information\n"
msgstr "ei saatu tietoja tiedostojärjestelmästä\n"
#: lib/libalpm/diskspace.c:242
#: lib/libalpm/diskspace.c:254
#, c-format
msgid "could not get file information for %s\n"
msgstr "ei voitu saada tietoja tiedostolle %s\n"
#: lib/libalpm/diskspace.c:256 lib/libalpm/diskspace.c:315
#: lib/libalpm/diskspace.c:268 lib/libalpm/diskspace.c:327
#, c-format
msgid "could not determine mount point for file %s\n"
msgstr "tiedoston %s tiedostojärjestelmän liitospistettä ei voitu selvittää\n"
#: lib/libalpm/diskspace.c:354
#: lib/libalpm/diskspace.c:366
#, c-format
msgid "Partition %s too full: %jd blocks needed, %ju blocks free\n"
msgstr "Osio %s liian täynnä: %jd lohkoa tarvitaan, %ju lohkoa vapaana\n"
#: lib/libalpm/diskspace.c:379 lib/libalpm/diskspace.c:433
#: lib/libalpm/diskspace.c:391 lib/libalpm/diskspace.c:445
#, c-format
msgid "could not determine filesystem mount points\n"
msgstr "tiedostojärjestelmien liitospisteitä ei voitu selvittää\n"
#: lib/libalpm/diskspace.c:385
#: lib/libalpm/diskspace.c:397
#, c-format
msgid "could not determine cachedir mount point %s\n"
msgstr "välimuistikansion liitospistettä %s ei voitu selvittää\n"
#: lib/libalpm/diskspace.c:438
#: lib/libalpm/diskspace.c:450
#, c-format
msgid "could not determine root mount point %s\n"
msgstr "juuren %s liitospistettä ei voitu selvittää\n"
#: lib/libalpm/diskspace.c:486
#: lib/libalpm/diskspace.c:498
#, c-format
msgid "Partition %s is mounted read only\n"
msgstr "Osio %s on liitetty vain lukutilassa\n"
#: lib/libalpm/dload.c:161
#, c-format
msgid "disk"
msgstr "levy"
#: lib/libalpm/dload.c:348
#: lib/libalpm/dload.c:107
#, c-format
msgid "failed to create temporary file for download\n"
msgstr "väliaikaistiedoston luonti lataamista varten epäonnistui\n"
#: lib/libalpm/dload.c:393
#: lib/libalpm/dload.c:198
#, c-format
msgid "url '%s' is invalid\n"
msgstr "osoite '%s' on virheellinen\n"
msgid ""
"too many errors from %s, skipping for the remainder of this transaction\n"
msgstr ""
#: lib/libalpm/dload.c:464 lib/libalpm/dload.c:485 lib/libalpm/dload.c:496
#: lib/libalpm/dload.c:215
#, c-format
msgid "fatal error from %s, skipping for the remainder of this transaction\n"
msgstr ""
#: lib/libalpm/dload.c:310
#, c-format
msgid "disk"
msgstr "levy"
#: lib/libalpm/dload.c:532 lib/libalpm/dload.c:570 lib/libalpm/dload.c:583
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "tiedoston '%s' nouto palvelimelta %s epäonnistui : %s\n"
#: lib/libalpm/dload.c:477
#: lib/libalpm/dload.c:562
#, c-format
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
msgstr ""
"tiedoston '%s' noutaminen koneelta %s epäonnistui: odotettu latauskoko "
"ylittyi\n"
#: lib/libalpm/dload.c:532
#: lib/libalpm/dload.c:685
#, c-format
msgid "%s appears to be truncated: %jd/%jd bytes\n"
msgstr "%s näyttää katkenneen: %jd/%jd tavua\n"
#: lib/libalpm/dload.c:677 lib/libalpm/dload.c:706
#: lib/libalpm/dload.c:776
#, c-format
msgid "failed to download %s\n"
msgstr "%s: lataus epäonnistui\n"
msgid "url '%s' is invalid\n"
msgstr "osoite '%s' on virheellinen\n"
#: lib/libalpm/dload.c:864
#, c-format
msgid "failed to setup a download payload for %s\n"
msgstr ""
#: lib/libalpm/dload.c:876
#, c-format
msgid "curl returned error %d from transfer\n"
msgstr ""
#: lib/libalpm/dload.c:900
#, c-format
msgid "curl transfer error: %d\n"
msgstr ""
#: lib/libalpm/dload.c:963
#, fuzzy, c-format
msgid "could not chdir to download directory %s\n"
msgstr "juurikansiota ei voitu vaihtaa (%s)\n"
#: lib/libalpm/dload.c:968
#, c-format
msgid "switching to sandbox user '%s' failed!\n"
msgstr ""
#: lib/libalpm/dload.c:1361 lib/libalpm/sync.c:861
#, c-format
msgid "failed to retrieve some files\n"
msgstr "joidenkin tiedostojen noutaminen epäonnistui\n"
#: lib/libalpm/dload.c:1384
#, c-format
msgid "download completed successfully but no file in the cache\n"
msgstr ""
#: lib/libalpm/error.c:40
#, c-format
@ -503,7 +564,7 @@ msgstr "varastolle ei ole asetettu palvelimia"
msgid "transaction already initialized"
msgstr "toimenpide on jo alustettu"
#: lib/libalpm/error.c:90 lib/libalpm/error.c:94
#: lib/libalpm/error.c:90 lib/libalpm/error.c:96
#, c-format
msgid "transaction not initialized"
msgstr "toimenpidettä ei ole alustettu"
@ -513,86 +574,86 @@ msgstr "toimenpidettä ei ole alustettu"
msgid "duplicate target"
msgstr "kohde on useampaan kertaan"
#: lib/libalpm/error.c:96
#: lib/libalpm/error.c:94
#, c-format
msgid "duplicate filename"
msgstr ""
#: lib/libalpm/error.c:98
#, c-format
msgid "transaction not prepared"
msgstr "toimenpidettä ei ole valmisteltu"
#: lib/libalpm/error.c:98
#: lib/libalpm/error.c:100
#, c-format
msgid "transaction aborted"
msgstr "toimenpide keskeytettiin"
#: lib/libalpm/error.c:100
#: lib/libalpm/error.c:102
#, c-format
msgid "operation not compatible with the transaction type"
msgstr "operaatio ei ole yhteensopiva toimenpidetyypin kanssa"
#: lib/libalpm/error.c:102
#: lib/libalpm/error.c:104
#, c-format
msgid "transaction commit attempt when database is not locked"
msgstr "toimenpiteen suoritusyritys kun tietokanta ei ollut lukittuna"
#: lib/libalpm/error.c:104
#: lib/libalpm/error.c:106
#, c-format
msgid "failed to run transaction hooks"
msgstr "toimenpidekoukkuja ei voitu suorittaa"
#: lib/libalpm/error.c:107
#: lib/libalpm/error.c:109
#, c-format
msgid "could not find or read package"
msgstr "pakettia ei löytynyt tai voitu lukea"
#: lib/libalpm/error.c:109
#: lib/libalpm/error.c:111
#, c-format
msgid "operation cancelled due to ignorepkg"
msgstr "operaatio peruutettiin ignorepkg:n takia"
#: lib/libalpm/error.c:111
#: lib/libalpm/error.c:113
#, c-format
msgid "invalid or corrupted package"
msgstr "virheellinen tai vahingoittunut paketti"
#: lib/libalpm/error.c:113
#: lib/libalpm/error.c:115
#, c-format
msgid "invalid or corrupted package (checksum)"
msgstr "virheellinen tai vahingoittunut paketti (tarkistussumma)"
#: lib/libalpm/error.c:115
#: lib/libalpm/error.c:117
#, c-format
msgid "invalid or corrupted package (PGP signature)"
msgstr "virheellinen tai vahingoittunut paketti (PGP-allekirjoitus)"
#: lib/libalpm/error.c:117
#: lib/libalpm/error.c:119
#, c-format
msgid "package missing required signature"
msgstr "paketista puuttuu pakollinen allekirjoitus"
#: lib/libalpm/error.c:119
#: lib/libalpm/error.c:121
#, c-format
msgid "cannot open package file"
msgstr "pakettitiedostoa ei voitu avata"
#: lib/libalpm/error.c:121
#: lib/libalpm/error.c:123
#, c-format
msgid "cannot remove all files for package"
msgstr "paketin kaikkia tiedostoja ei voitu poistaa"
#: lib/libalpm/error.c:123
#: lib/libalpm/error.c:125
#, c-format
msgid "package filename is not valid"
msgstr "paketin tiedostonimi ei ole kelvollinen"
#: lib/libalpm/error.c:125
#: lib/libalpm/error.c:127
#, c-format
msgid "package architecture is not valid"
msgstr "paketin arkkitehtuuri ei ole kelvollinen"
#: lib/libalpm/error.c:127
#, c-format
msgid "could not find repository for target"
msgstr "kohteen varastoa ei löytynyt"
#: lib/libalpm/error.c:130
#, c-format
msgid "missing PGP signature"
@ -658,12 +719,12 @@ msgstr ""
msgid "unexpected error"
msgstr "odottamaton virhe"
#: lib/libalpm/handle.c:153
#: lib/libalpm/handle.c:165
#, c-format
msgid "lock file missing %s\n"
msgstr "puuttuva lukkotiedosto %s\n"
#: lib/libalpm/handle.c:159
#: lib/libalpm/handle.c:171
#, c-format
msgid "could not remove lock file %s\n"
msgstr "lukkotiedostoa %s ei voitu poistaa\n"
@ -735,7 +796,7 @@ msgstr ""
msgid "unable to run hook %s: %s\n"
msgstr ""
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:386
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:378
#, c-format
msgid "could not open directory: %s: %s\n"
msgstr "kansiota ei voitu avata: %s: %s\n"
@ -745,7 +806,7 @@ msgstr "kansiota ei voitu avata: %s: %s\n"
msgid "could not open file: %s%s: %s\n"
msgstr ""
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:259
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:279
#, c-format
msgid "could not stat file %s: %s\n"
msgstr "tiedoston %s stat-toiminnon ei voitu tehdä: %s\n"
@ -755,281 +816,316 @@ msgstr "tiedoston %s stat-toiminnon ei voitu tehdä: %s\n"
msgid "could not read directory: %s: %s\n"
msgstr ""
#: lib/libalpm/package.c:578
#: lib/libalpm/package.c:614
#, c-format
msgid "could not fully load metadata for package %s-%s\n"
msgstr "paketin %s-%s metadataa ei voitu ladata täysin\n"
#: lib/libalpm/remove.c:119
#: lib/libalpm/package.c:869
#, c-format
msgid "invalid package metadata (name or version missing)"
msgstr ""
#: lib/libalpm/package.c:874
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name cannot start with '.' or "
"'-')\n"
msgstr ""
#: lib/libalpm/package.c:878
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name contains invalid "
"characters)\n"
msgstr ""
#: lib/libalpm/package.c:885 lib/libalpm/package.c:889
#, c-format
msgid ""
"invalid metadata for package %s-%s (package version contains invalid "
"characters)\n"
msgstr ""
#: lib/libalpm/package.c:895
#, c-format
msgid ""
"invalid metadata for package %s-%s (package name and version too long)\n"
msgstr ""
#: lib/libalpm/remove.c:111
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "%s ei löytynyt tietokannasta -- ohitetaan\n"
#: lib/libalpm/remove.c:154
#: lib/libalpm/remove.c:146
#, c-format
msgid "removing %s from target list\n"
msgstr "poistetaan %s kohteiden listasta\n"
#: lib/libalpm/remove.c:346
#: lib/libalpm/remove.c:338
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "tiedostoa '%s' ei voitu poistaa: %s\n"
#: lib/libalpm/remove.c:411 lib/libalpm/remove.c:420
#: lib/libalpm/remove.c:403 lib/libalpm/remove.c:412
#, c-format
msgid "could not backup %s due to PATH_MAX overflow\n"
msgstr ""
#: lib/libalpm/remove.c:562
#: lib/libalpm/remove.c:570
#, c-format
msgid "cannot remove %s (%s)\n"
msgstr "tiedostoa %s ei voida poistaa (%s)\n"
#: lib/libalpm/remove.c:735
#: lib/libalpm/remove.c:743
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "ei voitu poistaa tietokantamerkintää %s-%s\n"
#: lib/libalpm/remove.c:740
#: lib/libalpm/remove.c:748
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "merkintää '%s' ei voitu poistaa välimuistista\n"
#: lib/libalpm/signing.c:171
#: lib/libalpm/signing.c:163
#, c-format
msgid "Public keyring not found; have you run '%s'?\n"
msgstr ""
#: lib/libalpm/signing.c:207 lib/libalpm/signing.c:784
#: lib/libalpm/signing.c:199 lib/libalpm/signing.c:773
#, c-format
msgid "GPGME error: %s\n"
msgstr ""
#: lib/libalpm/signing.c:284
#: lib/libalpm/signing.c:275
#, c-format
msgid "looking up key %s using WKD\n"
msgstr ""
#: lib/libalpm/signing.c:293
#: lib/libalpm/signing.c:289
#, c-format
msgid "gpg error: %s\n"
msgstr ""
#: lib/libalpm/signing.c:441 lib/libalpm/signing.c:515
#: lib/libalpm/signing.c:440 lib/libalpm/signing.c:513
#, c-format
msgid "keyring is not writable\n"
msgstr ""
#: lib/libalpm/signing.c:539
#: lib/libalpm/signing.c:537
#, c-format
msgid "key \"%s\" on keyserver\n"
msgstr ""
#: lib/libalpm/signing.c:544
#: lib/libalpm/signing.c:542
#, c-format
msgid "key \"%s\" could not be imported\n"
msgstr ""
#: lib/libalpm/signing.c:548
#: lib/libalpm/signing.c:546
#, c-format
msgid "key \"%s\" could not be looked up remotely\n"
msgstr ""
#: lib/libalpm/signing.c:943 lib/libalpm/sync.c:1022
#: lib/libalpm/signing.c:932 lib/libalpm/sync.c:1052
#, c-format
msgid "%s: missing required signature\n"
msgstr "%s: pakollinen allekirjoitus puuttuu\n"
#: lib/libalpm/signing.c:958
#: lib/libalpm/signing.c:947
#, c-format
msgid "%s: signature from \"%s\" is marginal trust\n"
msgstr ""
#: lib/libalpm/signing.c:966
#: lib/libalpm/signing.c:955
#, c-format
msgid "%s: signature from \"%s\" is unknown trust\n"
msgstr ""
#: lib/libalpm/signing.c:973
#: lib/libalpm/signing.c:962
#, c-format
msgid "%s: signature from \"%s\" should never be trusted\n"
msgstr ""
#: lib/libalpm/signing.c:985
#: lib/libalpm/signing.c:974
#, c-format
msgid "%s: key \"%s\" is unknown\n"
msgstr ""
#: lib/libalpm/signing.c:994
#: lib/libalpm/signing.c:983
#, c-format
msgid "%s: key \"%s\" is disabled\n"
msgstr ""
#: lib/libalpm/signing.c:998
#: lib/libalpm/signing.c:987
#, c-format
msgid "%s: signature from \"%s\" is expired\n"
msgstr ""
#: lib/libalpm/signing.c:1002
#: lib/libalpm/signing.c:991
#, c-format
msgid "%s: signature from \"%s\" is invalid\n"
msgstr ""
#: lib/libalpm/signing.c:1079 lib/libalpm/signing.c:1147
#: lib/libalpm/signing.c:1226
#: lib/libalpm/signing.c:1049 lib/libalpm/signing.c:1110
#: lib/libalpm/signing.c:1189
#, c-format
msgid "%s: signature format error\n"
msgstr ""
#: lib/libalpm/signing.c:1179 lib/libalpm/signing.c:1212
#: lib/libalpm/signing.c:1220
#: lib/libalpm/signing.c:1142 lib/libalpm/signing.c:1175
#: lib/libalpm/signing.c:1183
#, c-format
msgid "%s: unsupported signature format\n"
msgstr ""
#: lib/libalpm/sync.c:99
#: lib/libalpm/sync.c:96
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: ohitetaan paketin päivitys (%s => %s)\n"
#: lib/libalpm/sync.c:111
#: lib/libalpm/sync.c:108
#, c-format
msgid "%s: ignoring package downgrade (%s => %s)\n"
msgstr "%s: ohitetaan paketin varhennus (%s => %s)\n"
#: lib/libalpm/sync.c:114
#: lib/libalpm/sync.c:111
#, c-format
msgid "%s: downgrading from version %s to version %s\n"
msgstr "%s: varhennetaan versiosta %s versioon %s\n"
#: lib/libalpm/sync.c:120
#: lib/libalpm/sync.c:117
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr "%s: paikallinen (%s) on uudempi kuin %s (%s)\n"
#: lib/libalpm/sync.c:161
#: lib/libalpm/sync.c:158
#, c-format
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
msgstr "ohitetaan paketin korvaus (%s-%s => %s-%s)\n"
#: lib/libalpm/sync.c:177
#: lib/libalpm/sync.c:174
#, c-format
msgid "cannot replace %s by %s\n"
msgstr "pakettia %s ei voi korvata paketilla %s\n"
#: lib/libalpm/sync.c:535 lib/libalpm/sync.c:605
#: lib/libalpm/sync.c:477
#, c-format
msgid "packages %s and %s have the same filename: %s\n"
msgstr ""
#: lib/libalpm/sync.c:546 lib/libalpm/sync.c:618
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr "ratkaisemattomia pakettiristiriitoja havaittu\n"
#: lib/libalpm/sync.c:555
#: lib/libalpm/sync.c:566
#, c-format
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgid "removing '%s-%s' from target list because it conflicts with '%s-%s'\n"
msgstr ""
"poistetaan '%s' kohteiden listasta, koska se on ristiriidassa paketin '%s' "
"kanssa\n"
#: lib/libalpm/sync.c:849
#: lib/libalpm/sync.c:1020 lib/libalpm/sync.c:1187
#, c-format
msgid "failed to retrieve some files\n"
msgstr "joidenkin tiedostojen noutaminen epäonnistui\n"
msgid "%s: could not find package in cache\n"
msgstr ""
#: lib/libalpm/sync.c:1036
#: lib/libalpm/sync.c:1066
#, c-format
msgid "failed to read file %s: %s\n"
msgstr ""
#: lib/libalpm/sync.c:1223
#: lib/libalpm/sync.c:1324
#, c-format
msgid "not enough free disk space\n"
msgstr "ei tarpeeksi vapaata levytilaa\n"
#: lib/libalpm/sync.c:1245
#: lib/libalpm/sync.c:1346
#, c-format
msgid "could not commit removal transaction\n"
msgstr "poistotoimenpidettä ei voitu suorittaa\n"
#: lib/libalpm/sync.c:1253
#: lib/libalpm/sync.c:1354
#, c-format
msgid "could not commit transaction\n"
msgstr "toimenpidettä ei voitu suorittaa\n"
#: lib/libalpm/trans.c:364
#: lib/libalpm/trans.c:369
#, c-format
msgid "could not create temp directory\n"
msgstr "väliaikaiskansiota ei voitu luoda\n"
#: lib/libalpm/trans.c:379
#: lib/libalpm/trans.c:384
#, c-format
msgid "could not copy tempfile to %s (%s)\n"
msgstr "väliaikaistiedostoa ei voitu kopioida kansioon %s (%s)\n"
#: lib/libalpm/trans.c:410
#: lib/libalpm/trans.c:415
#, c-format
msgid "could not remove %s\n"
msgstr "%s ei voitu poistaa\n"
#: lib/libalpm/trans.c:414
#: lib/libalpm/trans.c:419
#, c-format
msgid "could not remove tmpdir %s\n"
msgstr "väliaikaiskansiota %s ei voitu poistaa\n"
#: lib/libalpm/util.c:486
#: lib/libalpm/util.c:512
#, c-format
msgid "unable to write to pipe (%s)\n"
msgstr "ei voitu kirjoittaa putkeen (%s)\n"
#: lib/libalpm/util.c:545
#: lib/libalpm/util.c:571
#, c-format
msgid "unable to read from pipe (%s)\n"
msgstr "ei voitu lukea putkesta (%s)\n"
#: lib/libalpm/util.c:609 lib/libalpm/util.c:615
#: lib/libalpm/util.c:641 lib/libalpm/util.c:647
#, c-format
msgid "could not create pipe (%s)\n"
msgstr "ei voitu luoda putkea (%s)\n"
#: lib/libalpm/util.c:623
#: lib/libalpm/util.c:655
#, c-format
msgid "could not fork a new process (%s)\n"
msgstr "ei voitu käynnistää uutta prosessia (%s)\n"
#: lib/libalpm/util.c:646
#: lib/libalpm/util.c:680
#, c-format
msgid "could not change the root directory (%s)\n"
msgstr "juurikansiota ei voitu vaihtaa (%s)\n"
#: lib/libalpm/util.c:658
#: lib/libalpm/util.c:700
#, c-format
msgid "call to execv failed (%s)\n"
msgstr "execv-kutsu epäonnistui (%s)\n"
#: lib/libalpm/util.c:737
#: lib/libalpm/util.c:779
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr "waitpid-kutsu epäonnistui (%s)\n"
#: lib/libalpm/util.c:747
#: lib/libalpm/util.c:789
#, c-format
msgid "command failed to execute correctly\n"
msgstr "komento päättyi virheeseen\n"
#: lib/libalpm/util.c:754
#: lib/libalpm/util.c:796
#, c-format
msgid "Unknown signal"
msgstr "Tuntematon signaali"
#: lib/libalpm/util.c:756
#: lib/libalpm/util.c:798
#, c-format
msgid "command terminated by signal %d: %s\n"
msgstr "signaali %d päätti komennon: %s\n"
#: lib/libalpm/util.c:853
#: lib/libalpm/util.c:916
#, c-format
msgid "no %s cache exists, creating...\n"
msgstr "välimuistia %s ei ole olemassa, luodaan...\n"
#: lib/libalpm/util.c:884
#: lib/libalpm/util.c:947
#, c-format
msgid "couldn't find or create package cache, using %s instead\n"
msgstr ""

File diff suppressed because it is too large Load diff

Some files were not shown because too many files have changed in this diff Show more