Compare commits

..

14 Commits

Author SHA1 Message Date
Allan McRae
1bf7672343 Release v5.1.3
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-03-01 11:28:53 +10:00
Andrew Gregory
9702703633 Sanitize file name received from Content-Disposition header
When installing a remote package with "pacman -U <url>", pacman renames
the downloaded package file to match the name given in the
Content-Disposition header. However, pacman does not sanitize this name,
which may contain slashes, before calling rename(). A malicious server (or
a network MitM if downloading over HTTP) can send a content-disposition
header to make pacman place the file anywhere in the filesystem,
potentially leading to arbitrary root code execution. Notably, this
bypasses pacman's package signature checking.

For example, a malicious package-hosting server (or a network
man-in-the-middle, if downloading over HTTP) could serve the following
header:

Content-Disposition: filename=../../../../../../usr/share/libalpm/hooks/evil.hook

and pacman would move the downloaded file to
/usr/share/libalpm/hooks/evil.hook. This invocation of "pacman -U" would
later fail, unable to find the downloaded package in the cache directory,
but the hook file would remain in place. The commands in the malicious
hook would then be run (as root) the next time any package is installed.

Discovered-by: Adam Suhl <asuhl@mit.edu>
Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit d197d8ab82)
2019-03-01 11:25:46 +10:00
Andrew Gregory
0b36d87817 Release v5.1.2
Signed-off-by: Andrew Gregory <andrew@archlinux.org>
2018-12-25 01:50:22 -08:00
Andrew Gregory
f8c73464c9 update NEWS for v5.1.2
Signed-off-by: Andrew Gregory <andrew@archlinux.org>
2018-12-25 01:48:26 -08:00
Andrew Gregory
48a6adee3e always allow explicit empty siglevel for sync dbs
An empty siglevel does not do any signature verification which is
exactly what we want when compiled without gpg support.  This is already
allowed in other parts of the codebase and required for the test suite
to pass when compiled without gpg support.

Fixes: FS#60880

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit 61fe738043)
2018-12-23 13:47:18 -08:00
Allan McRae
cfa1e8b5e2 Pull updated translations from Transifex
Mostly churn in string headers, but a few new or updated translations.

Signed-off-by: Allan McRae <allan@archlinux.org>
2018-12-12 11:12:09 +10:00
Andrew Gregory
3a88fcb191 handle EINTR while polling scripts/hooks
If poll() is interrupted by a signal, alpm was closing the socket it
uses for listening to script/hook output.  This would drop script output
at the least and kill the script at the worst.

Fixes FS#60396

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit ac959bb9c6)
2018-11-18 17:25:18 -08:00
Andrew Gregory
2a7bdd3e3a reset signal handlers before running scripts/hooks
Front-ends or libraries may set signals to be ignored, which gets
inherited across fork and exec.  This can cause scripts to malfunction
if they expect the signal.  To make matters worse, scripts written in
bash can't reset signals that were ignored when bash was started.

Fixes FS#56756

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit 9886566abb)
2018-11-18 17:25:18 -08:00
Olivier Brunel
b39a62f575 alpm: Fix SIGINT handling re: aborting download
Upon receiving SIGINT a flag is set to abort the (curl) download.
However, since it was never reset/initialized, if a front-end doesn't
actually exit on SIGINT, and later tries any operation that needs to
perform a new download, said download would always get aborted right
away due to the flag not having been reset.

(cherry picked from commit ffde85aadf)
2018-11-18 17:25:18 -08:00
Olivier Brunel
cad8fe2fbf alpm: Do not raise SIGINT when filesize goes over limit
Variable dload_interrupted is used both to abort a download because
SIGINT was caught, and when a file limit is reached. But raising SIGINT
is only meant to happen in the first case.

Signed-off-by: Olivier Brunel <jjk@jjacky.com>
(cherry picked from commit d96d0ffe7c)
2018-11-18 17:25:18 -08:00
Michael Straube
0dbb945387 libalpm/dload.c: add case for CURLE_COULDNT_RESOLVE_HOST
Add a case for curl error 'Could not resolve host'.
An attempt to fix FS#48285.

Signed-off-by: Michael Straube <straubem@gmx.de>
Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit 9e960d9d5a)
2018-11-18 17:25:18 -08:00
Eli Schwartz
519685e4b1 libmakepkg/lint_config: fix lint_variable actually running the PKGBUILD lint
Due to a copy-paste error when initially implementing this, it actually
uses a duplicate function name, usually resulting in lint_pkgbuild
overwriting the function definition.

Then the PKGBUILD lint gets run twice, one time before the PKGBUILD is
even sourced -- to potentially surprising results, like erroring out on
a pre-existing shell definition that doesn't match our expectations.

Seen in the wild with lint_config triggering an error for
'declare -x arch="foo"'

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit 2bec380e10)
2018-11-18 17:25:18 -08:00
Eli Schwartz
4fc7c1d41e pacman: check versioned optdepends in -Qi operation
Fixes FS#60106

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit 3318039e3b)
2018-11-18 17:25:18 -08:00
morganamilo
5e81518ecb pacman-conf: add missing DisableDownloadTimeout
Signed-off-by: morganamilo <morganamilo@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit 62eef5bbdb)
2018-11-18 17:25:18 -08:00
422 changed files with 47328 additions and 45073 deletions

View File

@@ -16,9 +16,5 @@ indent_style = tab
[{NEWS,HACKING}]
indent_style = space
[meson.build]
indent_style = space
indent_size = 2
[*.py]
indent_style = space

21
.gitignore vendored
View File

@@ -1,3 +1,24 @@
*~
*.o
ABOUT-NLS
aclocal.m4
autom4te.cache
config.h
config.h.in
config.log
config.status
config.status.lineno
configure
configure.lineno
cov-int
cscope.in.out
cscope.out
cscope.po.out
intl
libtool
Makefile
Makefile.in
pacman-*.tar.gz
root
stamp-h1
tags

View File

@@ -1,119 +0,0 @@
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
.arch-test:
image: archlinux/base
before_script:
- >
pacman -Syu $PACMAN_OPTS
base-devel git
gpgme libarchive curl
python
fakeroot fakechroot
meson
arch:
extends: .arch-test
script:
- meson build
- ninja -C build
- fakechroot meson test -C build
arch-debug:
extends: .arch-test
script:
- meson --buildtype=debug build
- ninja -C build
- fakechroot meson test -C build
arch-docs:
extends: .arch-test
script:
- pacman -Syu $PACMAN_OPTS asciidoc
- meson -Ddoc=enabled build
- ninja -C build
arch-clang:
extends: .arch-test
script:
- pacman -Syu $PACMAN_OPTS clang
- CC=clang meson 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-nettle:
extends: .arch-test
script:
- meson -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
- ninja -C build
- fakechroot meson test -C build
arch-no-curl:
extends: .arch-test
script:
- meson -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
- ninja -C build
- fakechroot meson test -C build
debian:
image: debian:bullseye
cache: {}
before_script:
- apt update
- >
apt -y install --no-install-recommends
git pkg-config meson gcc libtool
libgpgme-dev libarchive-dev libcurl4-openssl-dev libssl-dev curl
gettext python3 python3-setuptools dash gawk ca-certificates
fakeroot fakechroot
script:
- meson --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
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
- ninja -C build
- fakechroot meson test -C build

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
}

13
HACKING
View File

@@ -176,3 +176,16 @@ For pacman:
-------------------------------------------
Never directly include config.h. This will always be added via Makefiles.
GDB and Valgrind Usage
~~~~~~~~~~~~~~~~~~~~~~
When using GDB or valgrind on pacman, you will want to run it on the actual
binary rather than the shell script wrapper produced by libtool. The actual
binary lives at `src/pacman/.libs/lt-pacman`, and will exist after running
`./src/pacman/pacman` at least once.
For example, to run valgrind:
./src/pacman/pacman
valgrind --leak-check=full -- src/pacman/.libs/lt-pacman -Syu

370
INSTALL Normal file
View File

@@ -0,0 +1,370 @@
Installation Instructions
*************************
Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation,
Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. This file is offered as-is,
without warranty of any kind.
Basic Installation
==================
Briefly, the shell commands `./configure; make; make install' should
configure, build, and install this package. The following
more-detailed instructions are generic; see the `README' file for
instructions specific to this package. Some packages provide this
`INSTALL' file but do not implement all of the features documented
below. The lack of an optional feature in a given package is not
necessarily a bug. More recommendations for GNU packages can be found
in *note Makefile Conventions: (standards)Makefile Conventions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, and a
file `config.log' containing compiler output (useful mainly for
debugging `configure').
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring. Caching is
disabled by default to prevent problems with accidental use of stale
cache files.
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If you are using the cache, and at
some point `config.cache' contains results you don't want to keep, you
may remove or edit it.
The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'. You need `configure.ac' if
you want to change it or regenerate `configure' using a newer version
of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system.
Running `configure' might take a while. While running, it prints
some messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package, generally using the just-built uninstalled binaries.
4. Type `make install' to install the programs and any data files and
documentation. When installing into a prefix owned by root, it is
recommended that the package be configured and built as a regular
user, and only the `make install' phase executed with root
privileges.
5. Optionally, type `make installcheck' to repeat any self-tests, but
this time using the binaries in their final installed location.
This target does not install anything. Running this target as a
regular user, particularly if the prior `make install' required
root privileges, verifies that the installation completed
correctly.
6. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
7. Often, you can also type `make uninstall' to remove the installed
files again. In practice, not all packages have tested that
uninstallation works correctly, even though it is required by the
GNU Coding Standards.
8. Some packages, particularly those that use Automake, provide `make
distcheck', which can by used by developers to test that all other
targets like `make install' and `make uninstall' work correctly.
This target is generally not run by end users.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that
the `configure' script does not know about. Run `./configure --help'
for details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
./configure CC=c99 CFLAGS=-g LIBS=-lposix
*Note Defining Variables::, for more details.
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you can use GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'. This
is known as a "VPATH" build.
With a non-GNU `make', it is safer to compile the package for one
architecture at a time in the source code directory. After you have
installed the package for one architecture, use `make distclean' before
reconfiguring for another architecture.
On MacOS X 10.5 and later systems, you can create libraries and
executables that work on multiple system types--known as "fat" or
"universal" binaries--by specifying multiple `-arch' options to the
compiler but only a single `-arch' option to the preprocessor. Like
this:
./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
CPP="gcc -E" CXXCPP="g++ -E"
This is not guaranteed to produce working output in all cases, you
may have to build one architecture at a time and combine the results
using the `lipo' tool if you have problems.
Installation Names
==================
By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc. You
can specify an installation prefix other than `/usr/local' by giving
`configure' the option `--prefix=PREFIX', where PREFIX must be an
absolute file name.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
PREFIX as the prefix for installing programs and libraries.
Documentation and other data files still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them. In general, the
default for these options is expressed in terms of `${prefix}', so that
specifying just `--prefix' will affect all of the other directory
specifications that were not explicitly provided.
The most portable way to affect installation locations is to pass the
correct locations to `configure'; however, many packages provide one or
both of the following shortcuts of passing variable assignments to the
`make install' command line to change installation locations without
having to reconfigure or recompile.
The first method involves providing an override variable for each
affected directory. For example, `make install
prefix=/alternate/directory' will choose an alternate location for all
directory configuration variables that were expressed in terms of
`${prefix}'. Any directories that were specified during `configure',
but not in terms of `${prefix}', must each be overridden at install
time for the entire installation to be relocated. The approach of
makefile variable overrides for each directory variable is required by
the GNU Coding Standards, and ideally causes no recompilation.
However, some platforms have known limitations with the semantics of
shared libraries that end up requiring recompilation when using this
method, particularly noticeable in packages that use GNU Libtool.
The second method involves providing the `DESTDIR' variable. For
example, `make install DESTDIR=/alternate/directory' will prepend
`/alternate/directory' before all installation names. The approach of
`DESTDIR' overrides is not required by the GNU Coding Standards, and
does not work on platforms that have drive letters. On the other hand,
it does better at avoiding recompilation issues, and works well even
when some directory options were not specified in terms of `${prefix}'
at `configure' time.
Optional Features
=================
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Some packages offer the ability to configure how verbose the
execution of `make' will be. For these packages, running `./configure
--enable-silent-rules' sets the default to minimal output, which can be
overridden with `make V=1'; while running `./configure
--disable-silent-rules' sets the default to verbose, which can be
overridden with `make V=0'.
Particular systems
==================
On HP-UX, the default C compiler is not ANSI C compatible. If GNU
CC is not installed, it is recommended to use the following options in
order to use an ANSI C compiler:
./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
and if that doesn't work, install pre-built binaries of GCC for HP-UX.
HP-UX `make' updates targets which have the same time stamps as
their prerequisites, which makes it generally unusable when shipped
generated files such as `configure' are involved. Use GNU `make'
instead.
On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
parse its `<wchar.h>' header file. The option `-nodtk' can be used as
a workaround. If GNU CC is not installed, it is therefore recommended
to try
./configure CC="cc"
and if that doesn't work, try
./configure CC="cc -nodtk"
On Solaris, don't put `/usr/ucb' early in your `PATH'. This
directory contains several dysfunctional programs; working variants of
these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
in your `PATH', put it _after_ `/usr/bin'.
On Haiku, software installed for all users goes in `/boot/common',
not `/usr/local'. It is recommended to use the following options:
./configure --prefix=/boot/common
Specifying the System Type
==========================
There may be some features `configure' cannot figure out
automatically, but needs to determine by the type of machine the package
will run on. Usually, assuming the package is built to be run on the
_same_ architectures, `configure' can figure that out, but if it prints
a message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
CPU-COMPANY-SYSTEM
where SYSTEM can have one of these forms:
OS
KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
use the option `--target=TYPE' to select the type of system they will
produce code for.
If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will
eventually be run) with `--host=TYPE'.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
causes the specified `gcc' to be used as the C compiler (unless it is
overridden in the site shell script).
Unfortunately, this technique does not work for `CONFIG_SHELL' due to
an Autoconf limitation. Until the limitation is lifted, you can use
this workaround:
CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
`configure' Invocation
======================
`configure' recognizes the following options to control how it
operates.
`--help'
`-h'
Print a summary of all of the options to `configure', and exit.
`--help=short'
`--help=recursive'
Print a summary of the options unique to this package's
`configure', and exit. The `short' variant lists options used
only in the top level, while the `recursive' variant lists options
also present in any nested packages.
`--version'
`-V'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`--cache-file=FILE'
Enable the cache: use and save the results of the tests in FILE,
traditionally `config.cache'. FILE defaults to `/dev/null' to
disable caching.
`--config-cache'
`-C'
Alias for `--cache-file=config.cache'.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`--prefix=DIR'
Use DIR as the installation prefix. *note Installation Names::
for more details, including other options available for fine-tuning
the installation locations.
`--no-create'
`-n'
Run the configure checks, but stop before creating any output
files.
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.

71
Makefile.am Normal file
View File

@@ -0,0 +1,71 @@
SUBDIRS = lib/libalpm src/util src/pacman scripts etc test/pacman test/util test/scripts
if WANT_DOC
SUBDIRS += doc
endif
DIST_SUBDIRS = $(SUBDIRS) src/common
ACLOCAL_AMFLAGS = -I m4 --install
AM_MAKEFLAGS = --no-print-directory
# Make sure we test and build manpages when doing distcheck
DISTCHECK_CONFIGURE_FLAGS = --enable-doc --disable-git-version
# Some files automatically included, so they aren't specified below:
# AUTHORS, COPYING, NEWS, README
EXTRA_DIST = HACKING test/tap.sh
# Sample makepkg prototype files
pkgdatadir = ${datadir}/${PACKAGE}
dist_pkgdata_DATA = \
proto/PKGBUILD.proto \
proto/PKGBUILD-split.proto \
proto/PKGBUILD-vcs.proto \
proto/proto.install
$(top_srcdir)/test/pacman/tests/TESTS: $(wildcard test/pacman/tests/*.py)
@printf "TESTS += %s\n" $^ | LC_ALL=C sort -u > "$@"
TESTS = test/scripts/parseopts_test.sh \
test/scripts/human_to_size_test.sh \
test/scripts/makepkg-template_test.sh \
test/scripts/pacman-db-upgrade-v9.py \
test/util/vercmptest.sh
include $(top_srcdir)/test/pacman/tests/TESTS
TEST_SUITE_LOG = test/test-suite.log
TEST_EXTENSIONS = .py
AM_TESTS_ENVIRONMENT = \
PMTEST_UTIL_DIR=$(top_builddir)/src/util/; export PMTEST_UTIL_DIR; \
PMTEST_SCRIPT_DIR=$(top_builddir)/scripts/; export PMTEST_SCRIPT_DIR; \
PMTEST_SCRIPTLIB_DIR=$(top_srcdir)/scripts/library/; export PMTEST_SCRIPTLIB_DIR; \
PMTEST_LIBMAKEPKG_DIR=$(top_builddir)/scripts/libmakepkg/; export PMTEST_LIBMAKEPKG_DIR;
LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \
$(top_srcdir)/build-aux/tap-driver.sh
PY_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \
$(top_srcdir)/build-aux/tap-driver.sh
PY_LOG_COMPILER = $(PYTHON) $(top_srcdir)/test/pacman/pactest.py
AM_PY_LOG_FLAGS = \
--scriptlet-shell $(SCRIPTLET_SHELL) \
--ldconfig $(LDCONFIG) \
--bindir $(top_builddir)/src/pacman \
--bindir $(top_builddir)/scripts
# create the pacman DB, cache, makepkg-template and system hook directories upon install
install-data-local:
for dir in "$(DESTDIR)$(localstatedir)/lib/pacman" "$(DESTDIR)$(localstatedir)/cache/pacman/pkg" \
"$(DESTDIR)$(datarootdir)/makepkg-template" "$(DESTDIR)$(datarootdir)/libalpm/hooks"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
update-po:
$(MAKE) -C lib/libalpm/po update-po
$(MAKE) -C scripts/po update-po
$(MAKE) -C src/pacman/po update-po
update-copyright:
for file in $(shell sh -c 'git grep -l "Copyright .* Pacman Development" | grep -v "\.po"'); do \
sed -i -e "/Copyright (/s/-$(OLD)/-$(NEW)/" -e "/Copyright (/s/ $(OLD)/ $(OLD)-$(NEW)/" "$$file"; \
done
.PHONY: update-po update-copyright

159
NEWS
View File

@@ -1,132 +1,7 @@
VERSION DESCRIPTION
-----------------------------------------------------------------------------
5.2.1 - fix segfault on importing PGP keys for -U operations
- fix distribution of meson files
- fix inode command for darwin/bsd
- distribute all documentation files
- update bash/zsh completion for -F changes, remove --force
- makepkg:
- fix calculation of package sizes in presence of hardlinks
- 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
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)
- completely remove the --force option
- renovate and simplify the UI for -F (FS#47949)
- hooks: rename type File to Path, for accuracy
- add the meson build system as an alternative to autotools, and
distribute it in autotools dist tarballs
- switch from system() to exec() when using alternative download
agents for XferCommand; this prevents a potential source of
shell injection (CVE-2019-18182)
- ignore .hook suffix when sorting libalpm hooks
- update the minimum requirement of bash to 4.4
- scripts: pass on options such as set -x to child processes
- show group and installed status during -Fs
- user-visible log when validity check fails due to access
- port pactest to python3
- process --needed before group selection when resolving the
dependencies to prompt for (FS#22870)
- don't error when a group exists but all packages are ignored
- bash completion now completes when it should, and doesn't
complete when it shouldn't (FS#59965)
- improve error message when gpg support is missing (FS#60880)
- don't emit confusing errors when a package is simultaneously
replaced and upgraded (FS#50875, FS#55534)
- better warning message when skipping duplicate targets
(FS#49377)
- libalpm: parse {check, make}depends when reading database
(FS#60347)
- add [ignored] to -Qu output for packages in repos that are not
Usage = Upgrade (FS#59854)
- prevent 301 redirect loop from hanging libalpm
- use standard, consistent units in the download progress
(FS#59201)
- 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
- fix handling of signals during SIGSEGV
- fix buffer overread in pacman/callback
- fix crash when downloading files with a Content-Disposition
that has no directory component
- pacman-conf, testpkg are now properly localized
- when -F returns zero results, set a failing exit code
- improve wording for the error message when a package cannot be
removed due to dependencies
- fix segfaults and other incorrect behavior when using -Qip if
pacman was compiled without GPGME support
- makepkg:
- implement extendable source/signature verification routines
within libmakepkg (FS#49076)
- if pacman is in use, wait until it is available before
continuing (FS#28840)
- add support for lzip, lz4 and zst compressed packages
(FS#56676, FS#59081)
- add new checksum algorithm, b2sum
- various improvements to PKGBUILD linting
- when signing packages, report package filename on failure
- fix pkgver() function not aborting on errors
- remove checksum algorithm whirlpoolsum as it has not worked
for a long time
- reject PKGBUILDs with both split and non-split package
functions
- send status messages to stderr rather than stdout (FS#17173)
- ensure debug buildflags are unset when they are supposed to be
- buildenv and executable detection, definitions for the
PKGBUILD schema, and makepkg.conf loading are now part of
libmakepkg
- fix broken check for the fakeroot binary
- improve the error message for invalid dependency versioning
- add routine for linting $SOURCE_DATE_EPOCH
- fix the error code when no PKGBUILD exists
- use --unneeded when removing build deps to allow runtime-only
deps to work well with makepkg -sir (FS#32723)
- compute package sizes correctly across different filesystems
- use shared clones for git sources to save space when building
- fix reporting of invalid archive extensions
- correctly handle hg sources with updates on a non-default
branch
- install pkg-config file for libmakepkg's library directory
- propagate error codes when package failed to sign correctly
- be compatible with file 5.37's application/gzip MIME type
- forbid non-ASCII pkgname and pkgver (FS#49342)
- fix exiting on failure without ensuring dependencies are
prompted for removal (FS#63000)
- quiet superfluous warnings for missing debug source files for
artificial symbols
- add routine for linting $PACKAGER to check that it has a
valid name and email address, and document the desired format
in makepkg.conf(5)
- add rust support for *FLAGS and debug-prefix-map
- correctly handle a system file command with seccomp enabled
(FS#58626)
- try to more thoroughly clean up logpipe during unusual exit
states such as CTRL-C
- when installing packages with -sir, be more robust against
conflicting makedepends by always uninstalling them first
- fix exit code when removing deps fails
- reproducible builds: suppress filesystem-specific archive
metadata from built packages as they are not needed
- pacman-key:
- just accept one file to verify, and enforce detached sigs
(FS#52022)
- after recent GnuPG updates, ensure the Web of Trust is still
used
- clean keys during import to reduce size consumed by unusable
signatures
- repo-add:
- add support for zst compressed databases
- print the name of the database when extracting
- do not infinitely loop on malformed arguments with embedded
globs
- add option to prevent downgrading (FS#17752)
- various documentation updates
5.1.3 - Sanitize file name received from Content-Disposition header
during -U (CVE-2019-9686)
5.1.3 - Sanitize file path received from Content-Disposition header
to fix potential arbitary code execution
5.1.2 - pacman-conf: add missing DisableDownloadTimeout support
- Include version when checking optdepend install status
during -Qi (FS#60106)
@@ -271,30 +146,12 @@ VERSION DESCRIPTION
- vercmp:
- remove duplicate, undocumented --usage option
- fail when the wrong number of arguments are used (FS#49093)
5.0.2 - fix database file checks with -Qkk and non-standard root
(FS#48563)
- improve optdepend detection for status messages (FS#44957)
- make Y/N prompt multi-byte-character aware (FS#47992)
- properly detect dependency cycles with --recursive (FS#41031)
- improve free disk space calculation (FS#37402)
- extract database files with --dbonly (FS#52052)
- repo-add:
- do not alter the database if only verifying signature
(FS#48085)
- fix error for directories containing whitespace (FS#50285)
- makepkg:
- fix building packages with only architecture-specific
sources (FS#48340)
- ignore PKGBUILD architecture for --printsrcinfo
- do not die on non-empty directories under !emptydirs
(FS#48515)
- preserve checksum type for architecture-specific sources
5.0.1 - fix alignment issues with wide character locales (FS#47980)
- fix removal of .pacnew files (FS#47993)
- fix triggering of Install hooks (FS#47996)
- fix handling of stdin scripts called by pacman
- hook activity is logged
- documentation updates for alpm-hooks (FS#48080)
- documentataion updates for alpm-hooks (FS#48080)
- makepkg:
- increase robustness of variable array checks
- makepkg -g does not perform current architecture checks
@@ -386,9 +243,9 @@ VERSION DESCRIPTION
- Fix removal of static libraries when the shared library
uses the absolute path in symbolic links (FS#43395)
- Improve Bazaar cloning (FS#43448)
- Fix issues with architecture dependent checksum
- Fix issues with architecture dependant checksum
verification (FS#43192)
- Fix .SRCINFO file with architecture dependent fields
- Fix .SRCINFO file with architecture dependant fields
(FS#43247)
- Fix compatibility with older bash versions
- Allow git checkouts to be downloaded into directory ending
@@ -478,7 +335,7 @@ VERSION DESCRIPTION
- checkupdates: rename CHECKUPDATE_DB to CHECKUPDATES_DB
- pacdiff: add a "Quit" option, and many other improvements
- pacsysclean is removed
4.1.2 - validate %FILEPATH% when parsing repos to prevent arbitrary
4.1.2 - validate %FILEPATH% when parsing repos to prevent arbitary
file overwrites from malicious databases
- makepkg:
- restrict package name from starting with a dot
@@ -943,7 +800,7 @@ VERSION DESCRIPTION
- repo-add: use openssl instead of md5sum
- simplify doc building process for ease of development
- ensure correct handling of syscall interruptions
- re-add missing newline on -Qi/-Si output (FS#11331)
- readd missing newline on -Qi/-Si output (FS#11331)
- fix TotalDownload regression (FS#11339)
- makepkg:
- replace getopt with an internal function
@@ -1389,7 +1246,7 @@ VERSION DESCRIPTION
external download utility like wget
- added a license field to package meta-data
- add url support to -A and -U operations (download packages)
- -Ss now searches through provides fields
- -Ss now searches thru provides fields
- added --dbonly option to -R
2.7.6 - added --print-uris option
- fixed an http download bug (FS#667)

40
README
View File

@@ -58,6 +58,7 @@ library is initialized.
* progresscb: Callback to handle display of transaction progress.
* gpgdir: Directory where GnuPG files are stored.
* arch: Allowed package architecture.
* deltaratio: Download deltas if possible; a ratio value.
* checkspace: Check disk space before installing.
* default_siglevel: Default signature verification level.
* local_file_siglevel: Signature verification level for local file upgrades.
@@ -630,42 +631,3 @@ API CHANGES BETWEEN 5.0 AND 5.1
- alpm_capabilities()
- duplicate and add to list
- alpm_list_append_strdup()
API CHANGES BETWEEN 5.1 AND 5.2
===============================
[REMOVED]
- package delta support
- alpm_delta_t
- alpm_event_delta_patch_t
- alpm_event_t union - removed alpm_event_delta_patch_t
- ALPM_EVENT_DELTA_INTEGRITY_START, ALPM_EVENT_DELTA_INTEGRITY_DONE,
ALPM_EVENT_DELTA_PATCHES_START, ALPM_EVENT_DELTA_PATCHES_DONE,
ALPM_EVENT_DELTA_PATCH_START, ALPM_EVENT_DELTA_PATCH_DONE,
ALPM_EVENT_DELTA_PATCH_FAILED
- ALPM_ERR_DLT_INVALID, ALPM_ERR_DLT_PATCHFAILED
- alpm_option_get_deltaratio()
- alpm_option_set_deltaratio()
- alpm_pkg_get_deltas()
- alpm_pkg_unused_deltas()
- alpm_transflag_t - removed member ALPM_TRANS_FLAG_FORCE
[CHANGED]
- alpm_errno_t - added member ALPM_ERR_MISSING_CAPABILITY_SIGNATURES
- alpm_sync_newversion() replaced with alpm_sync_get_new_version() which
does not filter on any ALPM_DB_USAGE_*.
API CHANGES BETWEEN 5.2 AND 6.0
===============================
[REMOVED]
- ALPM_EVENT_PKGDOWNLOAD_START, ALPM_EVENT_PKGDOWNLOAD_DONE, ALPM_EVENT_PKGDOWNLOAD_FAILED
[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.
[ADDED]

View File

@@ -1,21 +1,21 @@
The following checklist should be used for making a pacman release.
- Ensure "ninja dist" succeeds
- Ensure "make distcheck" succeeds
- Call a freeze to development.
- Send translation updates to Transifex at least two weeks before a major
release (see below). At this stage, strings can only be changed for a
major issue.
- Update NEWS and README files
- Pull translation updates from Transifex
- Update version in meson.build as described in file
- Update version in configure.ac as described in file
- 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")
- Create and sign release tarballs (generate with "make distcheck")
- Update pacman website
Transifex updates are handled using the transifex client. The basic process is:
- Pull updates from transifex ("tx pull -a -f --minimum-perc 75")
- Update po files ("./build-aux/update-po")
- Update po files ("make update-po")
- Fix all translation errors found
- Add any new locales to the relevant LINGUAS file
- Optional: Make any manual changes needed (e.g. fixing spacing in a string)

6
autogen.sh Executable file
View File

@@ -0,0 +1,6 @@
#!/bin/sh -x
autoreconf -i
patch -d build-aux -Np0 -i ltmain-asneeded.patch
exit 0

View File

@@ -1,27 +0,0 @@
#!@BASH@
input=$1
output=$2
mode=$3
"@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|@prefix[@]|@PREFIX@|g" \
-e "1s|#!/bin/bash|#!@BASH@|g" \
-e "s|@PACKAGE_VERSION[@]|@PACKAGE_VERSION@|g" \
-e "s|@PACKAGE_NAME[@]|@PACKAGE_NAME@|g" \
-e "s|@BUILDSCRIPT[@]|@BUILDSCRIPT@|g" \
-e "s|@TEMPLATE_DIR[@]|@TEMPLATE_DIR@|g" \
-e "s|@DEBUGSUFFIX[@]|@DEBUGSUFFIX@|g" \
-e "s|@INODECMD[@]|@INODECMD@|g" \
-e "s|@FILECMD[@]|@FILECMD@|g" \
"$input" >"$output"
if [[ $mode ]]; then
chmod "$mode" "$output"
fi

View File

@@ -0,0 +1,33 @@
--- ltmain.sh.orig 2013-06-26 14:31:53.472627840 +1000
+++ ltmain.sh 2013-06-26 14:30:56.137038936 +1000
@@ -5800,6 +5800,14 @@
arg=$func_stripname_result
;;
+ -Wl,*--as-needed*)
+ deplibs="$deplibs $wl--as-needed"
+ ;;
+
+ -Wl,*--no-as-needed*)
+ deplibs="$deplibs $wl--no-as-needed"
+ ;;
+
-Wl,*)
func_stripname '-Wl,' '' "$arg"
args=$func_stripname_result
@@ -6160,6 +6168,15 @@
lib=
found=no
case $deplib in
+ -Wl,--as-needed|-Wl,--no-as-needed)
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ fi
+ continue
+ ;;
-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
|-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
if test "$linkmode,$pass" = "prog,link"; then

View File

@@ -1,12 +0,0 @@
#!/bin/sh
set -eu
# this is needed mostly because $DESTDIR is provided as a variable,
# 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

View File

@@ -1,6 +0,0 @@
#!/bin/bash
# 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@ "$@"

652
build-aux/tap-driver.sh Executable file
View File

@@ -0,0 +1,652 @@
#! /bin/sh
# Copyright (C) 2011-2013 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# This file is maintained in Automake, please report
# bugs to <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.
scriptversion=2011-12-27.17; # UTC
# Make unconditional expansion of undefined variables an error. This
# helps a lot in preventing typo-related bugs.
set -u
me=tap-driver.sh
fatal ()
{
echo "$me: fatal: $*" >&2
exit 1
}
usage_error ()
{
echo "$me: $*" >&2
print_usage >&2
exit 2
}
print_usage ()
{
cat <<END
Usage:
tap-driver.sh --test-name=NAME --log-file=PATH --trs-file=PATH
[--expect-failure={yes|no}] [--color-tests={yes|no}]
[--enable-hard-errors={yes|no}] [--ignore-exit]
[--diagnostic-string=STRING] [--merge|--no-merge]
[--comments|--no-comments] [--] TEST-COMMAND
The \`--test-name', \`--log-file' and \`--trs-file' options are mandatory.
END
}
# TODO: better error handling in option parsing (in particular, ensure
# TODO: $log_file, $trs_file and $test_name are defined).
test_name= # Used for reporting.
log_file= # Where to save the result and output of the test script.
trs_file= # Where to save the metadata of the test run.
expect_failure=0
color_tests=0
merge=0
ignore_exit=0
comments=0
diag_string='#'
while test $# -gt 0; do
case $1 in
--help) print_usage; exit $?;;
--version) echo "$me $scriptversion"; exit $?;;
--test-name) test_name=$2; shift;;
--log-file) log_file=$2; shift;;
--trs-file) trs_file=$2; shift;;
--color-tests) color_tests=$2; shift;;
--expect-failure) expect_failure=$2; shift;;
--enable-hard-errors) shift;; # No-op.
--merge) merge=1;;
--no-merge) merge=0;;
--ignore-exit) ignore_exit=1;;
--comments) comments=1;;
--no-comments) comments=0;;
--diagnostic-string) diag_string=$2; shift;;
--) shift; break;;
-*) usage_error "invalid option: '$1'";;
esac
shift
done
test $# -gt 0 || usage_error "missing test command"
case $expect_failure in
yes) expect_failure=1;;
*) expect_failure=0;;
esac
if test $color_tests = yes; then
init_colors='
color_map["red"]="" # Red.
color_map["grn"]="" # Green.
color_map["lgn"]="" # Light green.
color_map["blu"]="" # Blue.
color_map["mgn"]="" # Magenta.
color_map["std"]="" # No color.
color_for_result["ERROR"] = "mgn"
color_for_result["PASS"] = "grn"
color_for_result["XPASS"] = "red"
color_for_result["FAIL"] = "red"
color_for_result["XFAIL"] = "lgn"
color_for_result["SKIP"] = "blu"'
else
init_colors=''
fi
# :; is there to work around a bug in bash 3.2 (and earlier) which
# does not always set '$?' properly on redirection failure.
# See the Autoconf manual for more details.
:;{
(
# Ignore common signals (in this subshell only!), to avoid potential
# problems with Korn shells. Some Korn shells are known to propagate
# to themselves signals that have killed a child process they were
# waiting for; this is done at least for SIGINT (and usually only for
# it, in truth). Without the `trap' below, such a behaviour could
# cause a premature exit in the current subshell, e.g., in case the
# test command it runs gets terminated by a SIGINT. Thus, the awk
# script we are piping into would never seen the exit status it
# expects on its last input line (which is displayed below by the
# last `echo $?' statement), and would thus die reporting an internal
# error.
# For more information, see the Autoconf manual and the threads:
# <http://lists.gnu.org/archive/html/bug-autoconf/2011-09/msg00004.html>
# <http://mail.opensolaris.org/pipermail/ksh93-integration-discuss/2009-February/004121.html>
trap : 1 3 2 13 15
if test $merge -gt 0; then
exec 2>&1
else
exec 2>&3
fi
"$@"
echo $?
) | LC_ALL=C ${AM_TAP_AWK-awk} \
-v me="$me" \
-v test_script_name="$test_name" \
-v log_file="$log_file" \
-v trs_file="$trs_file" \
-v expect_failure="$expect_failure" \
-v merge="$merge" \
-v ignore_exit="$ignore_exit" \
-v comments="$comments" \
-v diag_string="$diag_string" \
'
# FIXME: the usages of "cat >&3" below could be optimized when using
# FIXME: GNU awk, and/on on systems that supports /dev/fd/.
# Implementation note: in what follows, `result_obj` will be an
# associative array that (partly) simulates a TAP result object
# from the `TAP::Parser` perl module.
## ----------- ##
## FUNCTIONS ##
## ----------- ##
function fatal(msg)
{
print me ": " msg | "cat >&2"
exit 1
}
function abort(where)
{
fatal("internal error " where)
}
# Convert a boolean to a "yes"/"no" string.
function yn(bool)
{
return bool ? "yes" : "no";
}
function add_test_result(result)
{
if (!test_results_index)
test_results_index = 0
test_results_list[test_results_index] = result
test_results_index += 1
test_results_seen[result] = 1;
}
# Whether the test script should be re-run by "make recheck".
function must_recheck()
{
for (k in test_results_seen)
if (k != "XFAIL" && k != "PASS" && k != "SKIP")
return 1
return 0
}
# Whether the content of the log file associated to this test should
# be copied into the "global" test-suite.log.
function copy_in_global_log()
{
for (k in test_results_seen)
if (k != "PASS")
return 1
return 0
}
# FIXME: this can certainly be improved ...
function get_global_test_result()
{
if ("ERROR" in test_results_seen)
return "ERROR"
if ("FAIL" in test_results_seen || "XPASS" in test_results_seen)
return "FAIL"
all_skipped = 1
for (k in test_results_seen)
if (k != "SKIP")
all_skipped = 0
if (all_skipped)
return "SKIP"
return "PASS";
}
function stringify_result_obj(result_obj)
{
if (result_obj["is_unplanned"] || result_obj["number"] != testno)
return "ERROR"
if (plan_seen == LATE_PLAN)
return "ERROR"
if (result_obj["directive"] == "TODO")
return result_obj["is_ok"] ? "XPASS" : "XFAIL"
if (result_obj["directive"] == "SKIP")
return result_obj["is_ok"] ? "SKIP" : COOKED_FAIL;
if (length(result_obj["directive"]))
abort("in function stringify_result_obj()")
return result_obj["is_ok"] ? COOKED_PASS : COOKED_FAIL
}
function decorate_result(result)
{
color_name = color_for_result[result]
if (color_name)
return color_map[color_name] "" result "" color_map["std"]
# If we are not using colorized output, or if we do not know how
# to colorize the given result, we should return it unchanged.
return result
}
function report(result, details)
{
if (result ~ /^(X?(PASS|FAIL)|SKIP|ERROR)/)
{
msg = ": " test_script_name
add_test_result(result)
}
else if (result == "#")
{
msg = " " test_script_name ":"
}
else
{
abort("in function report()")
}
if (length(details))
msg = msg " " details
# Output on console might be colorized.
print decorate_result(result) msg
# Log the result in the log file too, to help debugging (this is
# especially true when said result is a TAP error or "Bail out!").
print result msg | "cat >&3";
}
function testsuite_error(error_message)
{
report("ERROR", "- " error_message)
}
function handle_tap_result()
{
details = result_obj["number"];
if (length(result_obj["description"]))
details = details " " result_obj["description"]
if (plan_seen == LATE_PLAN)
{
details = details " # AFTER LATE PLAN";
}
else if (result_obj["is_unplanned"])
{
details = details " # UNPLANNED";
}
else if (result_obj["number"] != testno)
{
details = sprintf("%s # OUT-OF-ORDER (expecting %d)",
details, testno);
}
else if (result_obj["directive"])
{
details = details " # " result_obj["directive"];
if (length(result_obj["explanation"]))
details = details " " result_obj["explanation"]
}
report(stringify_result_obj(result_obj), details)
}
# `skip_reason` should be empty whenever planned > 0.
function handle_tap_plan(planned, skip_reason)
{
planned += 0 # Avoid getting confused if, say, `planned` is "00"
if (length(skip_reason) && planned > 0)
abort("in function handle_tap_plan()")
if (plan_seen)
{
# Error, only one plan per stream is acceptable.
testsuite_error("multiple test plans")
return;
}
planned_tests = planned
# The TAP plan can come before or after *all* the TAP results; we speak
# respectively of an "early" or a "late" plan. If we see the plan line
# after at least one TAP result has been seen, assume we have a late
# plan; in this case, any further test result seen after the plan will
# be flagged as an error.
plan_seen = (testno >= 1 ? LATE_PLAN : EARLY_PLAN)
# If testno > 0, we have an error ("too many tests run") that will be
# automatically dealt with later, so do not worry about it here. If
# $plan_seen is true, we have an error due to a repeated plan, and that
# has already been dealt with above. Otherwise, we have a valid "plan
# with SKIP" specification, and should report it as a particular kind
# of SKIP result.
if (planned == 0 && testno == 0)
{
if (length(skip_reason))
skip_reason = "- " skip_reason;
report("SKIP", skip_reason);
}
}
function extract_tap_comment(line)
{
if (index(line, diag_string) == 1)
{
# Strip leading `diag_string` from `line`.
line = substr(line, length(diag_string) + 1)
# And strip any leading and trailing whitespace left.
sub("^[ \t]*", "", line)
sub("[ \t]*$", "", line)
# Return what is left (if any).
return line;
}
return "";
}
# When this function is called, we know that line is a TAP result line,
# so that it matches the (perl) RE "^(not )?ok\b".
function setup_result_obj(line)
{
# Get the result, and remove it from the line.
result_obj["is_ok"] = (substr(line, 1, 2) == "ok" ? 1 : 0)
sub("^(not )?ok[ \t]*", "", line)
# If the result has an explicit number, get it and strip it; otherwise,
# automatically assing the next progresive number to it.
if (line ~ /^[0-9]+$/ || line ~ /^[0-9]+[^a-zA-Z0-9_]/)
{
match(line, "^[0-9]+")
# The final `+ 0` is to normalize numbers with leading zeros.
result_obj["number"] = substr(line, 1, RLENGTH) + 0
line = substr(line, RLENGTH + 1)
}
else
{
result_obj["number"] = testno
}
if (plan_seen == LATE_PLAN)
# No further test results are acceptable after a "late" TAP plan
# has been seen.
result_obj["is_unplanned"] = 1
else if (plan_seen && testno > planned_tests)
result_obj["is_unplanned"] = 1
else
result_obj["is_unplanned"] = 0
# Strip trailing and leading whitespace.
sub("^[ \t]*", "", line)
sub("[ \t]*$", "", line)
# This will have to be corrected if we have a "TODO"/"SKIP" directive.
result_obj["description"] = line
result_obj["directive"] = ""
result_obj["explanation"] = ""
if (index(line, "#") == 0)
return # No possible directive, nothing more to do.
# Directives are case-insensitive.
rx = "[ \t]*#[ \t]*([tT][oO][dD][oO]|[sS][kK][iI][pP])[ \t]*"
# See whether we have the directive, and if yes, where.
pos = match(line, rx "$")
if (!pos)
pos = match(line, rx "[^a-zA-Z0-9_]")
# If there was no TAP directive, we have nothing more to do.
if (!pos)
return
# Let`s now see if the TAP directive has been escaped. For example:
# escaped: ok \# SKIP
# not escaped: ok \\# SKIP
# escaped: ok \\\\\# SKIP
# not escaped: ok \ # SKIP
if (substr(line, pos, 1) == "#")
{
bslash_count = 0
for (i = pos; i > 1 && substr(line, i - 1, 1) == "\\"; i--)
bslash_count += 1
if (bslash_count % 2)
return # Directive was escaped.
}
# Strip the directive and its explanation (if any) from the test
# description.
result_obj["description"] = substr(line, 1, pos - 1)
# Now remove the test description from the line, that has been dealt
# with already.
line = substr(line, pos)
# Strip the directive, and save its value (normalized to upper case).
sub("^[ \t]*#[ \t]*", "", line)
result_obj["directive"] = toupper(substr(line, 1, 4))
line = substr(line, 5)
# Now get the explanation for the directive (if any), with leading
# and trailing whitespace removed.
sub("^[ \t]*", "", line)
sub("[ \t]*$", "", line)
result_obj["explanation"] = line
}
function get_test_exit_message(status)
{
if (status == 0)
return ""
if (status !~ /^[1-9][0-9]*$/)
abort("getting exit status")
if (status < 127)
exit_details = ""
else if (status == 127)
exit_details = " (command not found?)"
else if (status >= 128 && status <= 255)
exit_details = sprintf(" (terminated by signal %d?)", status - 128)
else if (status > 256 && status <= 384)
# We used to report an "abnormal termination" here, but some Korn
# shells, when a child process die due to signal number n, can leave
# in $? an exit status of 256+n instead of the more standard 128+n.
# Apparently, both behaviours are allowed by POSIX (2008), so be
# prepared to handle them both. See also Austing Group report ID
# 0000051 <http://www.austingroupbugs.net/view.php?id=51>
exit_details = sprintf(" (terminated by signal %d?)", status - 256)
else
# Never seen in practice.
exit_details = " (abnormal termination)"
return sprintf("exited with status %d%s", status, exit_details)
}
function write_test_results()
{
print ":global-test-result: " get_global_test_result() > trs_file
print ":recheck: " yn(must_recheck()) > trs_file
print ":copy-in-global-log: " yn(copy_in_global_log()) > trs_file
for (i = 0; i < test_results_index; i += 1)
print ":test-result: " test_results_list[i] > trs_file
close(trs_file);
}
BEGIN {
## ------- ##
## SETUP ##
## ------- ##
'"$init_colors"'
# Properly initialized once the TAP plan is seen.
planned_tests = 0
COOKED_PASS = expect_failure ? "XPASS": "PASS";
COOKED_FAIL = expect_failure ? "XFAIL": "FAIL";
# Enumeration-like constants to remember which kind of plan (if any)
# has been seen. It is important that NO_PLAN evaluates "false" as
# a boolean.
NO_PLAN = 0
EARLY_PLAN = 1
LATE_PLAN = 2
testno = 0 # Number of test results seen so far.
bailed_out = 0 # Whether a "Bail out!" directive has been seen.
# Whether the TAP plan has been seen or not, and if yes, which kind
# it is ("early" is seen before any test result, "late" otherwise).
plan_seen = NO_PLAN
## --------- ##
## PARSING ##
## --------- ##
is_first_read = 1
while (1)
{
# Involutions required so that we are able to read the exit status
# from the last input line.
st = getline
if (st < 0) # I/O error.
fatal("I/O error while reading from input stream")
else if (st == 0) # End-of-input
{
if (is_first_read)
abort("in input loop: only one input line")
break
}
if (is_first_read)
{
is_first_read = 0
nextline = $0
continue
}
else
{
curline = nextline
nextline = $0
$0 = curline
}
# Copy any input line verbatim into the log file.
print | "cat >&3"
# Parsing of TAP input should stop after a "Bail out!" directive.
if (bailed_out)
continue
# TAP test result.
if ($0 ~ /^(not )?ok$/ || $0 ~ /^(not )?ok[^a-zA-Z0-9_]/)
{
testno += 1
setup_result_obj($0)
handle_tap_result()
}
# TAP plan (normal or "SKIP" without explanation).
else if ($0 ~ /^1\.\.[0-9]+[ \t]*$/)
{
# The next two lines will put the number of planned tests in $0.
sub("^1\\.\\.", "")
sub("[^0-9]*$", "")
handle_tap_plan($0, "")
continue
}
# TAP "SKIP" plan, with an explanation.
else if ($0 ~ /^1\.\.0+[ \t]*#/)
{
# The next lines will put the skip explanation in $0, stripping
# any leading and trailing whitespace. This is a little more
# tricky in truth, since we want to also strip a potential leading
# "SKIP" string from the message.
sub("^[^#]*#[ \t]*(SKIP[: \t][ \t]*)?", "")
sub("[ \t]*$", "");
handle_tap_plan(0, $0)
}
# "Bail out!" magic.
# Older versions of prove and TAP::Harness (e.g., 3.17) did not
# recognize a "Bail out!" directive when preceded by leading
# whitespace, but more modern versions (e.g., 3.23) do. So we
# emulate the latter, "more modern" behaviour.
else if ($0 ~ /^[ \t]*Bail out!/)
{
bailed_out = 1
# Get the bailout message (if any), with leading and trailing
# whitespace stripped. The message remains stored in `$0`.
sub("^[ \t]*Bail out![ \t]*", "");
sub("[ \t]*$", "");
# Format the error message for the
bailout_message = "Bail out!"
if (length($0))
bailout_message = bailout_message " " $0
testsuite_error(bailout_message)
}
# Maybe we have too look for dianogtic comments too.
else if (comments != 0)
{
comment = extract_tap_comment($0);
if (length(comment))
report("#", comment);
}
}
## -------- ##
## FINISH ##
## -------- ##
# A "Bail out!" directive should cause us to ignore any following TAP
# error, as well as a non-zero exit status from the TAP producer.
if (!bailed_out)
{
if (!plan_seen)
{
testsuite_error("missing test plan")
}
else if (planned_tests != testno)
{
bad_amount = testno > planned_tests ? "many" : "few"
testsuite_error(sprintf("too %s tests run (expected %d, got %d)",
bad_amount, planned_tests, testno))
}
if (!ignore_exit)
{
# Fetch exit status from the last line.
exit_message = get_test_exit_message(nextline)
if (exit_message)
testsuite_error(exit_message)
}
}
write_test_results()
exit 0
} # End of "BEGIN" block.
'
# TODO: document that we consume the file descriptor 3 :-(
} 3>"$log_file"
test $? -eq 0 || fatal "I/O or internal error"
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC"
# time-stamp-end: "; # UTC"
# End:

View File

@@ -1,8 +0,0 @@
#! /bin/sh
OLD=$1
NEW=$2
for file in $(git grep -l "Copyright .* Pacman Development" | grep -v "\.po"); do \
sed -i -e "/Copyright (/s/-${OLD}/-${NEW}/" -e "/Copyright (/s/ ${OLD}/ ${OLD}-${NEW}/" "$file"
done

View File

@@ -1,39 +0,0 @@
#!/bin/bash
find_build_directory() {
local build_dirs=(*/build.ninja)
if [[ ! -e ${build_dirs[0]} ]]; then
echo "error: No build directory found. Have you run 'meson build' yet?" >&2
return 1
elif (( ${#build_dirs[*]} > 1 )); then
echo "error: Multiple build directories found. Unable to proceed." >&2
return 1
fi
printf '%s\n' "${build_dirs[0]%/*}"
}
filter_targets_by_name() {
if command -v jq &>/dev/null; then
jq --arg re "$1" -r 'map(.name)[] | select(match($re))'
else
json_pp | awk -v filter="$1" -F'[:"]' \
'$2 == "name" && $(NF - 1) ~ filter { print $(NF - 1) }'
fi
}
# Make things simple and require that we're in the build root rather than
# trying to chase down the location of this script and the relative build dir.
if [[ ! -d .git ]]; then
echo "This script must be run from the root of the repository" >&2
exit 1
fi
build_dir=$(find_build_directory) || exit 1
mapfile -t targets < \
<(meson introspect "$build_dir" --targets | filter_targets_by_name "-update-po$")
ninja -C "$build_dir" "${targets[@]}"

596
configure.ac Normal file
View File

@@ -0,0 +1,596 @@
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
# Minimum version of autoconf required
AC_PREREQ(2.64)
# UPDATING VERSION NUMBERS FOR RELEASES
#
# libalpm:
# current
# The most recent interface number that this library implements.
# revision
# The implementation number of the current interface.
# age
# The difference between the newest and oldest interfaces that this library
# implements. In other words, the library implements all the interface
# numbers in the range from number current - age to current.
#
# 1. Start with version information of `0:0:0' for each libtool library.
# 2. Update the version information only immediately before a public release of
# your software. More frequent updates are unnecessary, and only guarantee
# that the current interface number gets larger faster.
# 3. If the library source code has changed at all since the last update, then
# increment revision (`c:r:a' becomes `c:r+1:a').
# 4. If any interfaces have been added, removed, or changed since the last
# update, increment current, and set revision to 0.
# 5. If any interfaces have been added since the last public release, then
# increment age.
# 6. If any interfaces have been removed since the last public release, then
# set age to 0.
#
# pacman:
# Extreme huge major changes:
# pacman_version_major += 1
# pacman_version_minor = 0
# pacman_version_micro = 0
#
# Real releases:
# pacman_version_minor += 1
# pacman_version_micro = 0
#
# Bugfix releases:
# pacman_version_micro += 1
m4_define([lib_current], [11])
m4_define([lib_revision], [3])
m4_define([lib_age], [0])
m4_define([pacman_version_major], [5])
m4_define([pacman_version_minor], [1])
m4_define([pacman_version_micro], [3])
m4_define([pacman_version],
[pacman_version_major.pacman_version_minor.pacman_version_micro])
# Autoconf initialization
AC_INIT([pacman], [pacman_version], [pacman-dev@archlinux.org])
AC_CONFIG_SRCDIR([config.h.in])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_AUX_DIR([build-aux])
AC_REQUIRE_AUX_FILE([tap-driver.sh])
AC_CANONICAL_HOST
AM_INIT_AUTOMAKE([1.11 foreign])
AM_SILENT_RULES([yes])
LT_INIT
LIB_VERSION=`expr lib_current - lib_age`.lib_age.lib_revision
LIB_VERSION_INFO="lib_current:lib_revision:lib_age"
# Respect empty CFLAGS during compiler tests
if test "x$CFLAGS" = "x"; then
CFLAGS=""
fi
# Set subsitution values for version stuff in Makefiles and anywhere else,
# and put LIB_VERSION in config.h
AC_SUBST(LIB_VERSION)
AC_SUBST(LIB_VERSION_INFO)
AC_DEFINE_UNQUOTED([LIB_VERSION], ["$LIB_VERSION"], [libalpm version number])
# Help line for root directory
AC_ARG_WITH(root-dir,
AS_HELP_STRING([--with-root-dir=path], [set the location of the root operating directory]),
[ROOTDIR=$withval], [ROOTDIR=/])
# Help line for package extension
AC_ARG_WITH(pkg-ext,
AS_HELP_STRING([--with-pkg-ext=ext], [set the file extension used by packages]),
[PKGEXT=$withval], [PKGEXT=.pkg.tar.gz])
# Help line for source package directory
AC_ARG_WITH(src-ext,
AS_HELP_STRING([--with-src-ext=ext], [set the file extension used by source packages]),
[SRCEXT=$withval], [SRCEXT=.src.tar.gz])
# Help line for buildscript filename
AC_ARG_WITH(buildscript,
AS_HELP_STRING([--with-buildscript=name], [set the build script name used by makepkg]),
[BUILDSCRIPT=$withval], [BUILDSCRIPT=PKGBUILD])
# Help line for buildscript filename
AC_ARG_WITH(makepkg-template-dir,
AS_HELP_STRING([--with-makepkg-template-dir=name], [set the template dir used by makepkg-template]),
[TEMPLATE_DIR=$withval], [TEMPLATE_DIR=/usr/share/makepkg-template])
# Help line for debug package suffix
AC_ARG_WITH(debug-suffix,
AS_HELP_STRING([--with-debug-suffix=name], [set the suffix for split debugging symbol packages used by makepkg]),
[DEBUGSUFFIX=$withval], [DEBUGSUFFIX=debug])
# Help line for changing shell used to run install scriptlets
AC_ARG_WITH(scriptlet-shell,
AS_HELP_STRING([--with-scriptlet-shell=shell],
[set the full path to the shell used to run install scriptlets]),
[SCRIPTLET_SHELL=$withval], [SCRIPTLET_SHELL=/bin/sh])
# Help line for ldconfig path
AC_ARG_WITH(ldconfig,
AS_HELP_STRING([--with-ldconfig=path],
[set the full path to ldconfig]),
[LDCONFIG=$withval], [LDCONFIG=/sbin/ldconfig])
# Help line for selecting a crypto library
AC_ARG_WITH(crypto,
AS_HELP_STRING([--with-crypto={openssl|nettle}],
[select crypto implementation @<:@default=openssl@:>@]),
[with_crypto=$withval], [with_crypto=openssl])
# Help line for using gpgme
AC_ARG_WITH(gpgme,
AS_HELP_STRING([--with-gpgme], [use GPGME for PGP signature verification]),
[], [with_gpgme=check])
# Help line for using libcurl
AC_ARG_WITH(libcurl,
AS_HELP_STRING([--with-libcurl], [use libcurl for the internal downloader]),
[], [with_libcurl=check])
# Help line for documentation
AC_ARG_ENABLE(doc,
AS_HELP_STRING([--disable-doc], [prevent make from looking at doc/ dir]),
[wantdoc=$enableval], [wantdoc=yes])
# Help line for doxygen
AC_ARG_ENABLE(doxygen,
AS_HELP_STRING([--enable-doxygen], [build your own API docs via Doxygen]),
[wantdoxygen=$enableval], [wantdoxygen=no])
# Help line for debug
AC_ARG_ENABLE(debug,
AS_HELP_STRING([--enable-debug], [enable debugging support]),
[debug=$enableval], [debug=no])
# Help line for compiler warning flags
AC_ARG_ENABLE(warningflags,
AS_HELP_STRING([--enable-warningflags], [enable extra compiler warning flags]),
[warningflags=$enableval], [warningflags=no])
# Help line for using git version in pacman version string
AC_ARG_ENABLE(git-version,
AS_HELP_STRING([--enable-git-version],
[enable use of git version in version string if available]),
[wantgitver=$enableval], [wantgitver=no])
# Enable large file support if available (must be enabled before
# testing compilation against gpgme).
AC_SYS_LARGEFILE
# Record large file flags in pkgconfig file
if test "$enable_largefile" != no; then
if test "$ac_cv_sys_file_offset_bits" != 'no'; then
LFS_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
fi
fi
AC_SUBST(LFS_CFLAGS)
# Checks for programs.
AC_PROG_AWK
AC_PROG_CC_C99
AC_PROG_INSTALL
AC_CHECK_PROGS([PYTHON], [python2.7 python2 python], [false])
AC_PATH_PROGS([BASH_SHELL], [bash bash4], [false])
# check for perl 5.10.1 (needed by makepkg-template)
AC_PATH_PROG([PERL],[perl])
AC_DEFUN([AX_PROG_PERL_VERSION],
[AC_CACHE_CHECK([for Perl version $1 or later], [ax_cv_prog_perl_version],
[AS_IF(["$PERL" -e 'require v$1;' >/dev/null 2>&1],
[ax_cv_prog_perl_version=yes],
[ax_cv_prog_perl_version=no])])
AS_IF([test x"$ax_cv_prog_perl_version" = xyes], [$2], [$3])])
AX_PROG_PERL_VERSION([5.10.1], [], [AC_MSG_ERROR([perl is too old])])
AS_IF([test "x$BASH_SHELL" = "xfalse"],
AC_MSG_WARN([*** bash >= 4.1.0 is required for pacman scripts]),
[bash_version_major=`$BASH_SHELL -c 'echo "${BASH_VERSINFO[[0]]}"'`
bash_version_minor=`$BASH_SHELL -c 'echo "${BASH_VERSINFO[[1]]}"'`
ok=yes
if test "$bash_version_major" -lt 4; then
ok=no
fi
if test "$bash_version_major" -eq 4 && test "$bash_version_minor" -lt 1; then
ok=no
fi
if test "$ok" = "no"; then
AC_MSG_ERROR([*** bash >= 4.1.0 is required for pacman scripts])
fi
unset bash_version_major bash_version_minor ok])
# find installed gettext
AM_GNU_GETTEXT([external], [need-ngettext])
AM_GNU_GETTEXT_VERSION(0.13.1)
AC_CHECK_LIB([m], [fabs], ,
AC_MSG_ERROR([libm is needed to compile pacman!]))
# Check for libarchive
PKG_CHECK_MODULES(LIBARCHIVE, [libarchive >= 3.0.0], ,
AC_MSG_ERROR([*** libarchive >= 3.0.0 is needed to compile pacman!]))
# Check for OpenSSL
have_openssl=no
have_nettle=no
if test "x$with_crypto" = "xnettle"; then
AC_SUBST(pc_crypto, [nettle])
PKG_CHECK_MODULES(NETTLE, [nettle],
[AC_DEFINE(HAVE_LIBNETTLE, 1, [Define whether to use nettle]) have_nettle=yes], have_nettle=no)
if test "x$have_nettle" = xno -a "x$with_crypto" = xnettle; then
AC_MSG_ERROR([*** nettle support requested but libraries not found])
fi
else if test "x$with_crypto" = "xopenssl"; then
AC_SUBST(pc_crypto, [libcrypto])
PKG_CHECK_MODULES(LIBSSL, [libcrypto],
[AC_DEFINE(HAVE_LIBSSL, 1, [Define if libcrypto is available]) have_openssl=yes], have_openssl=no)
if test "x$have_openssl" = xno; then
AC_MSG_ERROR([*** openssl support requested but libraries not found])
fi
else
AC_MSG_ERROR([*** unknown crypto support library requested - $with_crypto])
fi
fi
AM_CONDITIONAL(HAVE_LIBSSL, [test "$have_openssl" = "yes"])
AM_CONDITIONAL(HAVE_LIBNETTLE, [test "$have_nettle" = "yes"])
# Check for libcurl
have_libcurl=no
if test "x$with_libcurl" != "xno"; then
PKG_CHECK_MODULES(LIBCURL, [libcurl >= 7.32.0],
[AC_DEFINE(HAVE_LIBCURL, 1, [Define if libcurl is available]) have_libcurl=yes], have_libcurl=no)
if test "x$have_libcurl" = xno -a "x$with_libcurl" = xyes; then
AC_MSG_ERROR([*** libcurl >= 7.32.0 is required for internal downloader support])
fi
fi
AM_CONDITIONAL(HAVE_LIBCURL, [test "$have_libcurl" = "yes"])
# used to generate libalpm.pc
if test "x$have_libcurl" = xyes; then
AC_SUBST(pc_libcurl, [libcurl])
fi
# Check for gpgme
AC_MSG_CHECKING(whether to link with libgpgme)
AS_IF([test "x$with_gpgme" != "xno"],
[AC_MSG_RESULT([yes])],
[AC_MSG_RESULT([no])])
have_gpgme=no
AS_IF([test "x$with_gpgme" != "xno"],
[AM_PATH_GPGME([1.3.0],
[LIBS_save="$LIBS"
CPPFLAGS_save="$CPPFLAGS"
CFLAGS_save="$CFLAGS"
LIBS="$LIBS $GPGME_LIBS"
CPPFLAGS="$CPPFLAGS $GPGME_CPPFLAGS"
CFLAGS="$CFLAGS $GPGME_CFLAGS"
AC_MSG_CHECKING([for sane gpgme])
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[#include <gpgme.h>]],
[[return gpgme_check_version("1.3.0");]])],
[AC_MSG_RESULT([yes])
have_gpgme=yes
AC_DEFINE([HAVE_LIBGPGME], [1], [Define if gpgme should be used to provide GPG signature support.])],
[AC_MSG_RESULT([no])
have_gpgme=no
unset GPGME_LIBS
unset GPGME_CFLAGS]
AS_IF([test "x$with_gpgme" = "xyes"],
[AC_MSG_FAILURE([*** gpgme >= 1.3.0 is needed for GPG signature support])])
)
LIBS="$LIBS_save"
CPPFLAGS="$CPPFLAGS_save"
CFLAGS="$CFLAGS_save"
unset CPPFLAGS_save
unset CFLAGS_save],)])
AS_IF([test "x$have_gpgme" = xno -a "x$with_gpgme" = xyes],
[AC_MSG_FAILURE([--with-gpgme was given, but gpgme was not found])])
AM_CONDITIONAL([HAVE_LIBGPGME], [test "x$have_gpgme" = "xyes"])
# Checks for header files.
AC_CHECK_HEADERS([fcntl.h float.h glob.h langinfo.h libintl.h limits.h \
locale.h mntent.h netinet/in.h netinet/tcp.h \
stddef.h string.h sys/ioctl.h \
sys/mnttab.h sys/mount.h \
sys/param.h sys/statvfs.h sys/time.h sys/types.h \
sys/ucred.h syslog.h termios.h wchar.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_C_INLINE
AC_TYPE_INT64_T
AC_TYPE_MODE_T
AC_TYPE_OFF_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_TYPE_SSIZE_T
AC_STRUCT_TM
AC_TYPE_UID_T
AC_STRUCT_DIRENT_D_TYPE
PATH_MAX_DEFINED
# Checks for library functions.
AC_FUNC_FORK
AC_FUNC_GETMNTENT
AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
AC_FUNC_MKTIME
AC_FUNC_STRCOLL
AC_CHECK_FUNCS([dup2 getcwd getmntinfo gettimeofday memmove memset \
mkdir realpath regcomp rmdir setenv setlocale strcasecmp \
strchr strcspn strdup strerror strndup strnlen strrchr \
strsep strstr strtol swprintf tcflush wcwidth uname])
AC_CHECK_MEMBERS([struct stat.st_blksize],,,[[#include <sys/stat.h>]])
# For the diskspace code
FS_STATS_TYPE
AC_CHECK_MEMBERS([struct statvfs.f_flag],,,[[#include <sys/statvfs.h>]])
AC_CHECK_MEMBERS([struct statfs.f_flags],,,[[#include <sys/param.h>
#include <sys/mount.h>]])
# Check if we can use symbol visibility support in GCC
GCC_VISIBILITY_CC
# Host-dependant definitions
DEFAULT_DUFLAGS=" -sk --apparent-size"
DEFAULT_SEDINPLACEFLAGS=" --follow-symlinks -i"
INODECMD="stat -c '%i %n'"
OWNERCMD="stat -c '%u:%g'"
MODECMD="stat -c '%a'"
STRIP_BINARIES="--strip-all"
STRIP_SHARED="--strip-unneeded"
STRIP_STATIC="--strip-debug"
case "${host_os}" in
*bsd*)
INODECMD="stat -f '%i %N'"
OWNERCMD="stat -f '%u:%g'"
MODECMD="stat -f '%Lp'"
DEFAULT_SEDINPLACEFLAGS=" -i \"\""
DEFAULT_DUFLAGS=" -sk"
;;
darwin*)
host_os_darwin=yes
INODECMD="/usr/bin/stat -f '%i %N'"
OWNERCMD="/usr/bin/stat -f '%u:%g'"
MODECMD="/usr/bin/stat -f '%Lp'"
DEFAULT_SEDINPLACEFLAGS=" -i ''"
DEFAULT_DUFLAGS=" -sk"
STRIP_BINARIES=""
STRIP_SHARED="-S"
STRIP_STATIC="-S"
;;
esac
AM_CONDITIONAL([DARWIN], test "x$host_os_darwin" = "xyes")
AC_PATH_PROGS([DUPATH], [du], [du], [/usr/bin$PATH_SEPARATOR/bin] )
AC_PATH_PROGS([SEDPATH], [sed], [sed], [/usr/bin$PATH_SEPARATOR/bin] )
AC_SUBST(INODECMD)
AC_SUBST(OWNERCMD)
AC_SUBST(MODECMD)
AC_SUBST(STRIP_BINARIES)
AC_SUBST(STRIP_SHARED)
AC_SUBST(STRIP_STATIC)
# Flags for du
if test "${DUFLAGS+set}" != "set"; then
DUFLAGS="${DEFAULT_DUFLAGS}"
fi
AC_ARG_VAR(DUFLAGS, [flags for du, overriding the default])
# Flags for sed in place
if test "${SEDINPLACEFLAGS+set}" != "set"; then
SEDINPLACEFLAGS="${DEFAULT_SEDINPLACEFLAGS}"
fi
AC_ARG_VAR(SEDINPLACEFLAGS, [flags for sed, overriding the default])
# Variables plugged into makepkg.conf
CARCH="${host%%-*}"
CHOST="${host}"
AC_SUBST(CARCH)
AC_SUBST(CHOST)
# Check for documentation support and status
AC_CHECK_PROGS([ASCIIDOC], [asciidoc])
AC_MSG_CHECKING([for building documentation])
if test "x$wantdoc" = "xyes" ; then
if test $ASCIIDOC ; then
AC_MSG_RESULT([yes, enabled by configure])
else
asciidoc="(warning : asciidoc not installed)"
AC_MSG_RESULT([yes $asciidoc])
fi
wantdoc=yes
else
AC_MSG_RESULT([no, disabled by configure])
wantdoc=no
fi
AM_CONDITIONAL(WANT_DOC, test "x$wantdoc" = "xyes")
# Check for doxygen support and status
AC_CHECK_PROGS([DOXYGEN], [doxygen])
AC_MSG_CHECKING([for doxygen])
if test "x$wantdoxygen" = "xyes" ; then
if test $DOXYGEN ; then
AC_MSG_RESULT([yes])
usedoxygen=yes
else
AC_MSG_RESULT([no, doxygen missing])
usedoxygen=no
fi
else
AC_MSG_RESULT([no, disabled by configure])
usedoxygen=no
fi
AM_CONDITIONAL(USE_DOXYGEN, test "x$usedoxygen" = "xyes")
# Enable or disable debug code
AC_MSG_CHECKING(for debug mode request)
if test "x$debug" = "xyes" ; then
AC_MSG_RESULT(yes)
AC_DEFINE([PACMAN_DEBUG], , [Enable debug code])
# Check for -fstack-protector availability
GCC_STACK_PROTECT_LIB
GCC_STACK_PROTECT_CC
GCC_FORTIFY_SOURCE_CC
WARNING_CFLAGS="-g -Wall -Werror"
else
AC_MSG_RESULT(no)
WARNING_CFLAGS="-Wall"
fi
# Enable or disable compiler warning flags
AC_MSG_CHECKING(for excessive compiler warning flags)
if test "x$warningflags" = "xyes" ; then
AC_MSG_RESULT(yes)
CFLAGS_ADD([-Wcast-align], [WARNING_CFLAGS])
CFLAGS_ADD([-Wclobbered], [WARNING_CFLAGS])
CFLAGS_ADD([-Wempty-body], [WARNING_CFLAGS])
CFLAGS_ADD([-Wfloat-equal], [WARNING_CFLAGS])
CFLAGS_ADD([-Wformat-nonliteral], [WARNING_CFLAGS])
CFLAGS_ADD([-Wformat-security], [WARNING_CFLAGS])
CFLAGS_ADD([-Wignored-qualifiers], [WARNING_CFLAGS])
CFLAGS_ADD([-Winit-self], [WARNING_CFLAGS])
CFLAGS_ADD([-Wlogical-op], [WARNING_CFLAGS])
CFLAGS_ADD([-Wmissing-declarations], [WARNING_CFLAGS])
CFLAGS_ADD([-Wmissing-field-initializers], [WARNING_CFLAGS])
CFLAGS_ADD([-Wmissing-parameter-type], [WARNING_CFLAGS])
CFLAGS_ADD([-Wmissing-prototypes], [WARNING_CFLAGS])
CFLAGS_ADD([-Wold-style-declaration], [WARNING_CFLAGS])
CFLAGS_ADD([-Woverride-init], [WARNING_CFLAGS])
CFLAGS_ADD([-Wpointer-arith], [WARNING_CFLAGS])
CFLAGS_ADD([-Wredundant-decls], [WARNING_CFLAGS])
CFLAGS_ADD([-Wshadow], [WARNING_CFLAGS])
CFLAGS_ADD([-Wsign-compare], [WARNING_CFLAGS])
CFLAGS_ADD([-Wstrict-aliasing], [WARNING_CFLAGS])
CFLAGS_ADD([-Wstrict-overflow=5], [WARNING_CFLAGS])
CFLAGS_ADD([-Wstrict-prototypes], [WARNING_CFLAGS])
CFLAGS_ADD([-Wtype-limits], [WARNING_CFLAGS])
CFLAGS_ADD([-Wuninitialized], [WARNING_CFLAGS])
CFLAGS_ADD([-Wunused-but-set-parameter], [WARNING_CFLAGS])
CFLAGS_ADD([-Wunused-parameter], [WARNING_CFLAGS])
CFLAGS_ADD([-Wwrite-strings], [WARNING_CFLAGS])
else
AC_MSG_RESULT(no)
fi
# Enable or disable use of git version in pacman version string
AC_MSG_CHECKING(whether to use git version if available)
if test "x$wantgitver" = "xyes" ; then
AC_CHECK_PROGS([GIT], [git])
AC_CHECK_FILE([.git/], hasgitdir=yes)
usegitver=$ac_cv_file__git_
if test $GIT -a "x$hasgitdir" = "xyes"; then
AC_DEFINE([USE_GIT_VERSION], , [Use GIT version in version string])
fi
else
AC_MSG_RESULT([no, disabled by configure])
usegitver=no
fi
AM_CONDITIONAL(USE_GIT_VERSION, test "x$usegitver" = "xyes")
# Set root directory
AC_SUBST(ROOTDIR)
AC_DEFINE_UNQUOTED([ROOTDIR], "$ROOTDIR", [The location of the root operating directory])
# Set package file extension
AC_SUBST(PKGEXT)
AC_DEFINE_UNQUOTED([PKGEXT], "$PKGEXT", [The file extension used by pacman packages])
# Set source package file extension
AC_SUBST(SRCEXT)
AC_DEFINE_UNQUOTED([SRCEXT], "$SRCEXT", [The file extension used by pacman source packages])
# Set makepkg build script name
AC_SUBST(BUILDSCRIPT)
AC_DEFINE_UNQUOTED([BUILDSCRIPT], "$BUILDSCRIPT", [The build script name used by makepkg])
# Set makepkg-template template directory
AC_SUBST(TEMPLATE_DIR)
AC_DEFINE_UNQUOTED([TEMPLATE_DIR], "$TEMPLATE_DIR", [The template directory used by makepkg-teplate])
# Set makepkg split debugging symbol package suffix
AC_SUBST(DEBUGSUFFIX)
AC_DEFINE_UNQUOTED([DEBUGSUFFIX], "$DEBUGSUFFIX", [The suffix for debugging symbol packages used by makepkg])
# Set shell used by install scriptlets
AC_SUBST(SCRIPTLET_SHELL)
AC_DEFINE_UNQUOTED([SCRIPTLET_SHELL], "$SCRIPTLET_SHELL", [The full path of the shell used to run install scriptlets])
# Set ldconfig path
AC_SUBST(LDCONFIG)
AC_DEFINE_UNQUOTED([LDCONFIG], "$LDCONFIG", [The full path to ldconfig])
# Configuration files
AC_CONFIG_FILES([
lib/libalpm/Makefile
lib/libalpm/po/Makefile.in
lib/libalpm/libalpm.pc
src/common/Makefile
src/pacman/Makefile
src/pacman/po/Makefile.in
src/util/Makefile
scripts/Makefile
scripts/po/Makefile.in
doc/Makefile
etc/Makefile
test/pacman/Makefile
test/pacman/tests/Makefile
test/scripts/Makefile
test/util/Makefile
Makefile
])
AC_OUTPUT
echo "
${PACKAGE_NAME}:
Build information:
source code location : ${srcdir}
prefix : ${prefix}
sysconfdir : $(eval echo ${sysconfdir})
conf file : $(eval echo ${sysconfdir})/pacman.conf
localstatedir : $(eval echo ${localstatedir})
database dir : $(eval echo ${localstatedir})/lib/pacman/
cache dir : $(eval echo ${localstatedir})/cache/pacman/pkg/
compiler : ${CC}
preprocessor flags : ${CPPFLAGS}
compiler flags : ${WARNING_CFLAGS} ${CFLAGS}
library flags : ${LIBS} ${LIBSSL_LIBS} ${NETTLE_LIBS} ${LIBARCHIVE_LIBS} ${LIBCURL_LIBS} ${GPGME_LIBS}
linker flags : ${LDFLAGS}
Architecture : ${CARCH}
Host Type : ${CHOST}
File inode command : ${INODECMD}
File owner command : ${OWNERCMD}
File mode command : ${MODECMD}
In-place sed command : ${SEDPATH} ${SEDINPLACEFLAGS}
libalpm version : ${LIB_VERSION}
libalpm version info : ${LIB_VERSION_INFO}
pacman version : ${PACKAGE_VERSION}
using git version : ${usegitver}
Directory and file information:
root working directory : ${ROOTDIR}
package extension : ${PKGEXT}
source pkg extension : ${SRCEXT}
build script name : ${BUILDSCRIPT}
template directory : ${TEMPLATE_DIR}
Compilation options:
Use libcurl : ${have_libcurl}
Use GPGME : ${have_gpgme}
Use OpenSSL : ${have_openssl}
Use nettle : ${have_nettle}
Run make in doc/ dir : ${wantdoc} ${asciidoc}
Doxygen support : ${usedoxygen}
debug support : ${debug}
extra warning flags : ${warningflags}
use git version : ${wantgitver}
"

1
doc/.gitignore vendored
View File

@@ -6,4 +6,3 @@ asciidoc.js
*.xml
man3
website.tar.gz
Doxyfile

View File

@@ -1,3 +1,6 @@
/////
vim:set ts=4 sw=4 syntax=asciidoc noet spell spelllang=en_us:
/////
BUILDINFO(5)
============
@@ -50,9 +53,6 @@ BUILDINFO file format.
*builddir*::
The directory where the package was built.
*startdir*::
The directory from which makepkg was executed.
*buildenv (array)*::
The build environment specified in makepkg.conf.

View File

@@ -8,7 +8,7 @@ PROJECT_NAME = libalpm
PROJECT_NUMBER =
PROJECT_BRIEF = "Arch Linux Package Manager Library"
PROJECT_LOGO =
OUTPUT_DIRECTORY = @OUTPUT_DIRECTORY@
OUTPUT_DIRECTORY = ./
CREATE_SUBDIRS = NO
OUTPUT_LANGUAGE = English
BRIEF_MEMBER_DESC = YES

178
doc/Makefile.am Normal file
View File

@@ -0,0 +1,178 @@
# We have to do some funny stuff here with the manpages. In order to ensure
# a dist tarball doesn't get put out there without manpages, we keep those
# files listed in EXTRA_DIST no matter what. However, we only add them to
# man_MANS if --enable-asciidoc and/or --enable-doxygen are used.
ASCIIDOC_MANS = \
alpm-hooks.5 \
pacman.8 \
makepkg.8 \
makepkg-template.1 \
repo-add.8 \
vercmp.8 \
pkgdelta.8 \
pacman-key.8 \
PKGBUILD.5 \
makepkg.conf.5 \
pacman.conf.5 \
libalpm.3 \
BUILDINFO.5
DOXYGEN_MANS = $(wildcard man3/*.3)
HTML_MANPAGES = \
alpm-hooks.5.html \
pacman.8.html \
makepkg.8.html \
makepkg-template.1.html \
repo-add.8.html \
vercmp.8.html \
pkgdelta.8.html \
pacman-key.8.html \
PKGBUILD.5.html \
makepkg.conf.5.html \
pacman.conf.5.html \
libalpm.3.html
HTML_OTHER = \
index.html \
submitting-patches.html \
translation-help.html \
HACKING.html
HTML_DOCS = \
$(HTML_MANPAGES) \
$(HTML_OTHER)
EXTRA_DIST = \
asciidoc.conf \
asciidoc-override.css \
alpm-hooks.5.asciidoc \
pacman.8.asciidoc \
makepkg.8.asciidoc \
makepkg-template.1.asciidoc \
repo-add.8.asciidoc \
vercmp.8.asciidoc \
pkgdelta.8.asciidoc \
pacman-key.8.asciidoc \
PKGBUILD.5.asciidoc \
PKGBUILD-example.txt \
makepkg.conf.5.asciidoc \
pacman.conf.5.asciidoc \
BUILDINFO.5.asciidoc \
libalpm.3.asciidoc \
footer.asciidoc \
index.asciidoc \
submitting-patches.asciidoc \
translation-help.asciidoc \
Doxyfile \
$(ASCIIDOC_MANS) \
$(DOXYGEN_MANS)
# Files that should be removed, but which Automake does not know.
MOSTLYCLEANFILES = *.xml $(ASCIIDOC_MANS) $(HTML_DOCS) repo-remove.8 website.tar.gz
# Ensure manpages are fresh when building a dist tarball
dist-hook:
$(MAKE) $(AM_MAKEFLAGS) clean
$(MAKE) $(AM_MAKEFLAGS) all
if USE_GIT_VERSION
GIT_VERSION := $(shell sh -c 'git describe --abbrev=4 --dirty | sed s/^v//')
REAL_PACKAGE_VERSION = $(GIT_VERSION)
else
REAL_PACKAGE_VERSION = $(PACKAGE_VERSION)
endif
man_MANS =
dist_man_MANS = $(ASCIIDOC_MANS)
if USE_DOXYGEN
man_MANS += $(DOXYGEN_MANS)
all-local: doxygen.in
doxygen.in:
$(DOXYGEN) $(srcdir)/Doxyfile
endif
html: $(HTML_DOCS)
website: website.tar.gz
.PHONY: html website
website.tar.gz: html
$(AM_V_GEN)bsdtar czf $@ $(HTML_DOCS) \
asciidoc-override.css \
-C /etc/asciidoc/stylesheets/ \
asciidoc.css \
-C /etc/asciidoc/javascripts/ \
asciidoc.js \
-C /etc/asciidoc/ \
images
pkgdatadir = ${datadir}/${PACKAGE}
ASCIIDOC_OPTS = \
-f $(srcdir)/asciidoc.conf \
-a pacman_version="$(REAL_PACKAGE_VERSION)" \
-a pacman_date="`date +%Y-%m-%d`" \
-a pkgdatadir=$(pkgdatadir) \
-a localstatedir=$(localstatedir) \
-a sysconfdir=$(sysconfdir) \
-a datarootdir=$(datarootdir)
A2X_OPTS = \
--no-xmllint \
-d manpage \
-f manpage \
--xsltproc-opts='-param man.endnotes.list.enabled 0 -param man.endnotes.are.numbered 0'
# These rules are due to the includes and files of the asciidoc text
$(ASCIIDOC_MANS): asciidoc.conf footer.asciidoc Makefile.am
$(AM_V_GEN)a2x $(A2X_OPTS) --asciidoc-opts="$(ASCIIDOC_OPTS) --out-file=./$@.xml" $(srcdir)/$@.asciidoc
%.html: %.asciidoc
$(AM_V_GEN)asciidoc $(ASCIIDOC_OPTS) -o - $*.asciidoc | \
sed -e 's/\r$$//' > $@
HACKING.html: ../HACKING
$(AM_V_GEN)asciidoc $(ASCIIDOC_OPTS) -o - ../HACKING | \
sed -e 's/\r$$//' > $@
# Customizations for certain HTML docs
$(HTML_MANPAGES): asciidoc.conf footer.asciidoc Makefile.am
$(HTML_OTHER): asciidoc.conf Makefile.am
%.html: ASCIIDOC_OPTS += -a linkcss -a toc -a icons -a max-width=960px -a stylesheet=asciidoc-override.css
%.8.html: ASCIIDOC_OPTS += -d manpage
%.5.html: ASCIIDOC_OPTS += -d manpage
%.3.html: ASCIIDOC_OPTS += -d manpage
# Dependency rules
alpm-hooks.5 alpm-hooks.5.html: alpm-hooks.5.asciidoc
pacman.8 pacman.8.html: pacman.8.asciidoc
makepkg.8 makepkg.8.html: makepkg.8.asciidoc
makepkg-template.1 makepkg-template.1.html: makepkg-template.1.asciidoc
repo-add.8 repo-add.8.html: repo-add.8.asciidoc
vercmp.8 vercmp.8.html: vercmp.8.asciidoc
pkgdelta.8 pkgdelta.8.html: pkgdelta.8.asciidoc
pacman-key.8 pacman-key.8.html: pacman-key.8.asciidoc
PKGBUILD.5 PKGBUILD.5.html: PKGBUILD.5.asciidoc PKGBUILD-example.txt
makepkg.conf.5 makepkg.conf.5.html: makepkg.conf.5.asciidoc
pacman.conf.5 pacman.conf.5.html: pacman.conf.5.asciidoc
libalpm.3 libalpm.3.html: libalpm.3.asciidoc
# this one is just a symlink
repo-remove.8: repo-add.8
$(RM) repo-remove.8
$(LN_S) repo-add.8 repo-remove.8
install-data-hook:
cd $(DESTDIR)$(mandir)/man8 && \
$(RM) repo-remove.8 && \
( $(LN_S) repo-add.8 repo-remove.8 || \
ln repo-add.8 repo-remove.8 || \
cp repo-add.8 repo-remove.8 )
uninstall-hook:
$(RM) $(DESTDIR)$(mandir)/man8/repo-remove.8

View File

@@ -60,8 +60,8 @@ systems (see below).
allows package maintainers to make updates to the package's configure
flags, for example. This is typically set to '1' for each new upstream
software release and incremented for intermediate PKGBUILD updates. The
variable is a positive integer, with an optional subrelease level
specified by adding another positive integer separated by a period
variable is a postive integer, with an optional subrelease level
specified by adding another postive integer separated by a period
(i.e. in the form x.y).
*epoch*::
@@ -118,7 +118,7 @@ systems (see below).
+
Additional architecture-specific sources can be added by appending an
underscore and the architecture name e.g., 'source_x86_64=()'. There must be a
corresponding integrity array with checksums, e.g. 'cksums_x86_64=()'.
corresponding integrity array with checksums, e.g. 'md5sums_x86_64=()'.
+
It is also possible to change the name of the downloaded file, which is helpful
with weird URLs and for handling multiple source files with the same
@@ -146,19 +146,17 @@ contain whitespace characters.
listed here will not be extracted with the rest of the source files. This
is useful for packages that use compressed data directly.
*cksums (array)*::
This array contains CRC checksums for every source file specified in the
*md5sums (array)*::
This array contains an MD5 hash for every source file specified in the
source array (in the same order). makepkg will use this to verify source
file integrity during subsequent builds. If 'SKIP' is put in the array
in place of a normal hash, the integrity check for that source file will
be skipped. To easily generate cksums, run ``makepkg -g >> PKGBUILD''.
If desired, move the cksums line to an appropriate location. Note that
checksums generated by "makepkg -g" should be verified using checksum
values provided by the software developer.
be skipped. To easily generate md5sums, run ``makepkg -g >> PKGBUILD''.
If desired, move the md5sums line to an appropriate location.
*md5sums, sha1sums, sha224sums, sha256sums, sha384sums, sha512sums, b2sums (arrays)*::
*sha1sums, sha224sums, sha256sums, sha384sums, sha512sums (arrays)*::
Alternative integrity checks that makepkg supports; these all behave
similar to the cksums option described above. To enable use and generation
similar to the md5sums option described above. To enable use and generation
of these checksums, be sure to set up the `INTEGRITY_CHECK` option in
linkman:makepkg.conf[5].
@@ -298,23 +296,23 @@ underscore and the architecture name e.g., 'replaces_x86_64=()'.
Compress man and info pages with gzip.
*ccache*;;
Allow the use of ccache during `build()`. More useful in its negative
Allow the use of ccache during build. More useful in its negative
form `!ccache` with select packages that have problems building
with ccache.
*distcc*;;
Allow the use of distcc during `build()`. More useful in its negative
Allow the use of distcc during build. More useful in its negative
form `!distcc` with select packages that have problems building
with distcc.
*buildflags*;;
Allow the use of user-specific buildflags (CPPFLAGS, CFLAGS, CXXFLAGS,
LDFLAGS) during `build()` as specified in linkman:makepkg.conf[5]. More
LDFLAGS) during build as specified in linkman:makepkg.conf[5]. More
useful in its negative form `!buildflags` with select packages that
have problems building with custom buildflags.
*makeflags*;;
Allow the use of user-specific makeflags during `build()` as specified
Allow the use of user-specific makeflags during build as specified
in linkman:makepkg.conf[5]. More useful in its negative form
`!makeflags` with select packages that have problems building with
custom makeflags such as `-j2` (or higher).
@@ -334,14 +332,6 @@ PKGBUILD must contain a `package()` function which installs all the package's
files into the packaging directory, with optional `prepare()`, `build()`, and
`check()` functions being used to create those files from source.
This is directly sourced and executed by makepkg, so anything that Bash or the
system has available is available for use here. Be sure any exotic commands
used are covered by the `makedepends` array.
If you create any variables of your own in any of these functions, it is
recommended to use the Bash `local` keyword to scope the variable to inside the
function.
*package() Function*::
The `package()` function is used to install files into the directory that
will become the root directory of the built package and is run after all
@@ -358,7 +348,14 @@ function.
*build() Function*::
The optional `build()` function is use to compile and/or adjust the source
files in preparation to be installed by the `package()` function.
files in preparation to be installed by the `package()` function. This is
directly sourced and executed by makepkg, so anything that Bash or the
system has available is available for use here. Be sure any exotic
commands used are covered by the `makedepends` array.
+
If you create any variables of your own in the `build()` function, it is
recommended to use the Bash `local` keyword to scope the variable to inside
the `build()` function.
*check() Function*::
An optional `check()` function can be specified in which a package's
@@ -468,13 +465,11 @@ reference with all of the available functions defined.
Using VCS Sources[[VCS]]
------------------------
Building a developmental version of a package using sources from a version
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.
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.
The source URL is divided into four components:
@@ -492,16 +487,13 @@ The source URL is divided into four components:
*fragment*::
(optional) Allows specifying a revision number or branch for makepkg to checkout
from the VCS. A fragment has the form `type=value`, for example to checkout a
given revision the source line would be `source=(url#revision=123)`. The
available types depends on the VCS being used:
from the VCS. For example, to checkout a given revision, the source line would
have the format `source=(url#revision=123)`. The available fragments depends on
the VCS being used:
*bzr*;;
revision (see `'bzr help revisionspec'` for details)
*fossil*;;
branch, commit, tag
*git*;;
branch, commit, tag

View File

@@ -12,7 +12,7 @@ SYNOPSIS
--------
[Trigger] (Required, Repeatable)
Operation = Install|Upgrade|Remove (Required, Repeatable)
Type = Path|Package (Required)
Type = File|Package (Required)
Target = <Path|PkgName> (Required, Repeatable)
[Action] (Required)
@@ -49,20 +49,19 @@ defined the hook will run if the transaction matches *any* of the triggers.
Select the type of operation to match targets against. May be specified
multiple times. Installations are considered an upgrade if the package or
file is already present on the system regardless of whether the new package
version is actually greater than the currently installed version. For Path
version is actually greater than the currently installed version. For File
triggers, this is true even if the file changes ownership from one package
to another. Required.
*Type =* Path|Package::
*Type =* File|Package::
Select whether targets are matched against transaction packages or files.
See CAVEATS for special notes regarding Path triggers. 'File' is a deprecated
alias for 'Path' and will be removed in a future release. Required.
See CAVEATS for special notes regarding File triggers. Required.
*Target =* <path|package>::
The path or package name to match against the active transaction.
Paths refer to the files in the package archive; the installation root
The file path or package name to match against the active transaction.
File paths refer to the files in the package archive; the installation root
should *not* be included in the path. Shell-style glob patterns are
allowed. It is possible to invert matches by prepending a target with an
allowed. It is possible to invert matches by prepending a file with an
exclamation mark. May be specified multiple times. Required.
ACTIONS
@@ -120,7 +119,7 @@ Exec = /usr/bin/sync
CAVEATS
-------
There are situations when path triggers may act in unexpected ways. Hooks are
There are situations when file triggers may act in unexpected ways. Hooks are
triggered using the file list of the installed, upgraded, or removed package.
When installing or upgrading a file that is extracted with a '.pacnew'
extension, the original file name is used in triggering the hook. When

View File

@@ -6,9 +6,8 @@ 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, send us an email with as much detail as possible to
mailto:pacman-dev@archlinux.org[].
Authors
@@ -18,15 +17,14 @@ Current maintainers:
* Allan McRae <allan@archlinux.org>
* Andrew Gregory <andrew.gregory.8@gmail.com>
* Dan McGee <dan@archlinux.org>
* Dave Reisner <dreisner@archlinux.org>
* Eli Schwartz <eschwartz@archlinux.org>
Past major contributors:
* Judd Vinet <jvinet@zeroflux.org>
* Aurelien Foret <aurelien@archlinux.org>
* Aaron Griffin <aaron@archlinux.org>
* Dan McGee <dan@archlinux.org>
* Xavier Chantry <shiningxc@gmail.com>
* Nagy Gabor <ngaba@bibl.u-szeged.hu>

View File

@@ -43,27 +43,25 @@ There are several man pages available for the programs, utilities, and
configuration files dealing with pacman.
* linkman:alpm-hooks[5]
* linkman:BUILDINFO[5]
* linkman:PKGBUILD[5]
* linkman:libalpm[3]
* linkman:makepkg[8]
* linkman:makepkg-template[1]
* linkman:makepkg.conf[5]
* linkman:pacman[8]
* linkman:pacman-key[8]
* linkman:pacman-conf[8]
* linkman:pacman.conf[5]
* linkman:pkgdelta[8]
* linkman:repo-add[8]
* linkman:vercmp[8]
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://projects.archlinux.org/pacman.git/[Git summary page] for the
project.
See the most recent
link:https://git.archlinux.org/pacman.git/tree/NEWS[NEWS]
link:https://projects.archlinux.org/pacman.git/tree/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,13 +75,9 @@ Releases
[frame="topbot",grid="none",options="header,autowidth"]
!======
!Version !Date
!5.2.1 !2019-11-01
!5.2.0 !2019-10-21
!5.1.3 !2019-03-01
!5.1.2 !2018-12-25
!5.1.1 !2018-07-27
!5.1.0 !2018-05-28
!5.0.2 !2017-06-03
!5.0.1 !2016-02-23
!5.0.0 !2016-01-30
!4.2.1 !2015-02-20
@@ -193,11 +187,11 @@ link:https://sources.archlinux.org/other/pacman/[]. To install, download the new
available source tarball, unpack it in a directory, and run the three magic
commands:
$ meson build
$ ninja -C build
# ninja -C build install
$ ./configure
$ make
# make install
You may wish to read the options presented by `meson` in order to
You may wish to read the options presented by `./configure --help` in order to
set appropriate paths and build options that are correct for your system.
Development
@@ -206,8 +200,8 @@ Development
Mailing List
~~~~~~~~~~~~
There is a mailing list devoted to pacman development, hosted by Arch Linux.
link:https://lists.archlinux.org/listinfo/pacman-dev/[Subscribe] or
link:https://lists.archlinux.org/pipermail/pacman-dev/[view the archives].
link:https://mailman.archlinux.org/mailman/listinfo/pacman-dev/[Subscribe] or
link:https://mailman.archlinux.org/pipermail/pacman-dev/[view the archives].
Source Code
~~~~~~~~~~~
@@ -218,11 +212,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 git://projects.archlinux.org/pacman.git pacman
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
link:https://projects.archlinux.org/pacman.git/[cgit]. HTTP/HTTPS URLs are also
available for cloning purposes; these URLs are listed at the above page.
If you are interested in hacking on pacman, it is highly recommended you join
@@ -241,13 +235,15 @@ 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].
link:https://projects.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
* link:https://projects.archlinux.org/abs.git/[abs] - ABS (Arch Build System), scripts to download & use the Arch Linux PKGBUILD tree
* link:https://projects.archlinux.org/dbscripts.git/[dbscripts] - scripts used by Arch Linux to manage the main package repositories
* link:https://projects.archlinux.org/devtools.git/[devtools] - tools to assist in packaging and dependency checking
* link:https://projects.archlinux.org/namcap.git/[namcap] - a package analysis utility written in python
* link:https://projects.archlinux.org/srcpac.git/[srcpac] - a bash build-from-source pacman wrapper
Bugs
----
@@ -262,7 +258,7 @@ bugs under the Pacman project.
Copyright
---------
pacman is Copyright (C) 2006-2020 Pacman Development Team
pacman is Copyright (C) 2006-2018 Pacman Development Team
<pacman-dev@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

@@ -274,7 +274,7 @@ Environment Variables
**GPGKEY=**"keyid"::
Specify a key to use when signing packages, overriding the GPGKEY setting
in linkman:makepkg.conf[5].
in linkman:makepkg.conf[5]
**SOURCE_DATE_EPOCH=**"<date>"::
Used for link:https://reproducible-builds.org/docs/[Reproducible Builds].
@@ -299,7 +299,7 @@ On exit, makepkg will return one of the following error codes.
Error in configuration file.
3::
User specified an invalid option.
User specified an invalid option
4::
Error in user-supplied function in PKGBUILD.
@@ -340,7 +340,7 @@ On exit, makepkg will return one of the following error codes.
Programs necessary to run makepkg are missing.
16::
Specified GPG key does not exist or failed to sign package.
Specified GPG key does not exist.
See Also
--------

View File

@@ -72,10 +72,6 @@ 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
@@ -93,11 +89,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
@@ -192,7 +183,7 @@ Options
**INTEGRITY_CHECK=(**check1 ...**)**::
File integrity checks to use. Multiple checks may be specified; this
affects both generation and checking. The current valid options are:
`ck`, `md5`, `sha1`, `sha224`, `sha256`, `sha384`, `sha512`, and `b2`.
`md5`, `sha1`, `sha224`, `sha256`, `sha384`, and `sha512`.
**STRIP_BINARIES=**"--strip-all"::
Options to be used when stripping binaries. See linkman:strip[1]
@@ -253,27 +244,22 @@ Options
**PACKAGER=**"John Doe <john@example.com>"::
This value is used when querying a package to see who was the builder.
The given format is required for PGP key lookup through WKD.
It is recommended to change this to your name and email address.
**COMPRESSGZ=**"(gzip -c -f -n)"::
**COMPRESSBZ2=**"(bzip2 -c -f)"::
**COMPRESSXZ=**"(xz -c -z -)"::
**COMPRESSZST=**"(zstd -c -z -)"::
**COMPRESSLZO**"(lzop -q)"::
**COMPRESSLRZ=**"(lrzip -q)"::
**COMPRESSLZ4=**"(lz4 -q)"::
**COMPRESSZ=**"(compress -c -f)"::
**COMPRESSLZ=**"(lzip -c -f)"::
Sets the command and options used when compressing compiled or source
packages in the named format.
**PKGEXT=**"{pkgext}", **SRCEXT=**"{srcext}"::
**PKGEXT=**".pkg.tar.gz", **SRCEXT=**".src.tar.gz"::
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 `.tar`, `.tar.gz`, `.tar.bz2`, `.tar.xz`,
`.tar.lzo`, `.tar.lrz`, and `.tar.Z`.
Do not touch these unless you know what you are doing.
See Also

View File

@@ -1,154 +0,0 @@
manpages = [
{ 'name': 'alpm-hooks.5' },
{ 'name': 'pacman.8' },
{ 'name': 'makepkg.8' },
{ 'name': 'makepkg-template.1' },
{ 'name': 'repo-add.8' },
{ 'name': 'vercmp.8' },
{ 'name': 'pacman-key.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' },
]
sitepages = [
{ 'name': 'submitting-patches' },
{ 'name': 'translation-help' },
{ 'name': 'HACKING', 'source': '../HACKING' },
{ 'name': 'index' },
]
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', 'localstatedir=@0@'.format(LOCALSTATEDIR),
'-a', 'sysconfdir=@0@'.format(SYSCONFDIR),
'-a', 'datarootdir=@0@'.format(DATAROOTDIR),
'-a', 'rootdir=@0@'.format(ROOTDIR),
]
html_targets = []
html_files = []
foreach page : manpages
manpage = page['name']
htmlpage = '@0@.html'.format(manpage)
input = '@0@.asciidoc'.format(manpage)
section = page['name'].split('.')[-1]
mandirn = join_paths(MANDIR, 'man' + section)
custom_target(
manpage,
command : [
A2X,
'--no-xmllint',
'-d', 'manpage',
'-f', 'manpage',
'--xsltproc-opts', '-param man.endnotes.list.enabled 0 -param man.endnotes.are.numbered 0',
'-D', '@OUTDIR@',
'--asciidoc-opts', ' '.join(asciidoc_opts),
'@INPUT@',
],
input : input,
output : [manpage],
depend_files : [
asciidoc_conf,
] + page.get('extra_depends', []),
install : true,
install_dir : mandirn,
)
endforeach
foreach page: manpages + sitepages
manpage = page['name']
htmlpage = '@0@.html'.format(manpage)
input = page.get('source', '@0@.asciidoc'.format(manpage))
html = custom_target(
htmlpage,
command : [
ASCIIDOC,
] + asciidoc_opts + [
'-a', 'linkcss',
'-a', 'toc',
'-a', 'icons',
'-a', 'max-width=960px',
'-a', 'stylesheet=asciidoc-override.css',
'-o', '@OUTPUT@',
'@INPUT@',
],
input : input,
output : [htmlpage],
depend_files : [
asciidoc_conf,
'asciidoc-override.css',
] + page.get('extra_depends', []),
build_by_default : false,
install : false,
)
html_targets += [html]
html_files += [htmlpage]
endforeach
run_target('html',
command : ['/bin/true'],
depends : html_targets)
custom_target(
'website.tar.gz',
command : [
'bsdtar', 'czf', '@OUTPUT@',
'-C', meson.current_build_dir(),
] + html_files + [
'-C', meson.current_source_dir(),
'asciidoc-override.css',
'-C', '/etc/asciidoc/stylesheets/',
'asciidoc.css',
'-C', '/etc/asciidoc/javascripts/',
'asciidoc.js',
'-C', '/etc/asciidoc/',
'images',
],
output : ['website.tar.gz'],
build_by_default : false,
depends : html_targets,
)
meson.add_install_script(MESON_MAKE_SYMLINK,
'repo-add.8',
join_paths(MANDIR, 'man8/repo-remove.8'))
meson.add_install_script(MESON_MAKE_SYMLINK,
'alpm-hooks.5',
join_paths(MANDIR, 'man5/pacman-hooks.5'))
doxygen = find_program('doxygen', required : get_option('doxygen'))
if doxygen.found() and not get_option('doxygen').disabled()
doxyconf = configuration_data()
doxyconf.set('OUTPUT_DIRECTORY', meson.current_build_dir())
doxyfile = configure_file(
input : 'Doxyfile.in',
output : 'Doxyfile',
configuration : doxyconf,
install : false)
custom_target(
'doxygen',
input : doxyfile,
output : ['man3'],
command : [doxygen, doxyfile],
build_by_default : true,
install : true,
install_dir : MANDIR)
endif

View File

@@ -1,67 +0,0 @@
pacman-conf(8)
==============
Name
----
pacman-conf - query pacman's configuration file
Synopsis
--------
'pacman-conf' [options] [<directive> ...]
'pacman-conf' (--repo-list|--help|--version)
Description
-----------
'pacman-conf' is a utility for parsing the 'pacman' configuration file
and returning script-friendly output. It is designed to properly handle
non-trivial configuration features such as variable interpolation and
the use of the Include directive, and guarantees that it will return the
same configuration values which 'pacman' itself would use.
'pacman-conf' will output the fully-resolved contents of the
configuration file by default, or, if provided with the name of a
configuration directive, output the contents of the given directive alone.
Options
-------
*-c, \--config* <path>::
Specify an alternate configuration file.
*-R, \--rootdir* <path>::
Specify an alternate installation root (default is `/`).
*-r, \--repo* <remote>::
Query options for a specific repository.
*-v, \--verbose*::
Always shown directive names.
*-l, \--repo-list*::
List configured repositories.
*-h, \--help*::
Output syntax and command line options.
*-V, \--version*::
Display version and exit.
Examples
--------
pacman-conf -r core Usage::
Show the value of the Usage configuration option for core repository.
pacman-conf HoldPkg::
Show the value of the HoldPkg configuration option.
See Also
--------
linkman:pacman.conf[5]
include::footer.asciidoc[]

View File

@@ -97,13 +97,7 @@ Operations
Displays the program version.
*-v, \--verify*::
Assume that the first argument is a signature and verify it. If a second
argument is provided, it is the file to be verified.
+
With only one argument given, assume that the signature is a detached
signature, and look for a matching data file to verify by stripping the file
extension. If no matching data file is found, fall back on GnuPG semantics and
attempt to verify a file with an embedded signature.
Verify the file(s) specified by the signature(s).
Options

View File

@@ -131,7 +131,7 @@ Options
not automatically prepended.
*-r, \--root* <path>::
Specify an alternative installation root (default is +{rootdir}+). This should
Specify an alternative installation root (default is `/`). This should
not be used as a way to install software into `/usr/local` instead of
`/usr`.
*NOTE*: If database path or log file are not specified on either the
@@ -141,7 +141,7 @@ Options
guest system. See '\--sysroot' instead.
*-v, \--verbose*::
Output paths such as the Root, Conf File, DB Path, Cache Dirs, etc.
Output paths such as as the Root, Conf File, DB Path, Cache Dirs, etc.
*\--arch* <arch>::
Specify an alternate architecture.
@@ -464,7 +464,7 @@ Database Options (apply to '-D')[[QO]]
*\--asexplicit* <package>::
Mark a package as explicitly installed; in other words, set their install
reason to be explicitly installed. This is useful if you want to keep a
reason to be explicitly installed. This is useful it you want to keep a
package installed even when it was initially installed as a dependency
of another package.
@@ -488,8 +488,14 @@ File Options (apply to '-F')[[FO]]
*-l, \--list*::
List the files owned by the queried package.
*-s, \--search*::
Search package file names for matching strings.
*-x, --regex*::
Interpret each query as a regular expression.
Treat arguments to '--search' as regular expressions.
*-o, \--owns*::
Search for packages that own a particular file.
*-q, \--quiet*::
Show less information for certain file operations. This is useful when
@@ -497,9 +503,9 @@ File Options (apply to '-F')[[FO]]
'--machinereadable' instead.
*--machinereadable*::
Print each match in a machine readable output format. The format is
'repository\0pkgname\0pkgver\0path\n' with '\0' being the NULL character
and '\n' a linefeed.
Use a machine readable output format for '--list', '--search' and
'--owns'. The format is 'repository\0pkgname\0pkgver\0path\n' with '\0'
being the NULL character and '\n' a linefeed.
Handling Config Files[[HCF]]
----------------------------
@@ -508,7 +514,7 @@ designated to be backed up. During an upgrade, three MD5 hashes are used for
each backup file to determine the required action: one for the original file
installed, one for the new file that is about to be installed, and one for the
actual file existing on the file system. After comparing these three hashes, the
following scenarios can result:
follow scenarios can result:
original=X, current=X, new=X::
All three files are the same, so overwrites are not an issue. Install the

View File

@@ -176,7 +176,7 @@ Options
operation on a local file. Uses the value from SigLevel as the default.
*RemoteFileSigLevel =* ...::
Set the signature verification level for installing packages using the "-U"
Set the signature verification level for installing packages using the "-U"
operation on a remote file URL. Uses the value from SigLevel as the default.
*UseSyslog*::
@@ -186,9 +186,13 @@ Options
*Color*::
Automatically enable colors only when pacman's output is on a tty.
*NoProgressBar*::
Disables progress bars. This is useful for terminals which do
not support escape characters.
*UseDelta* [= ratio]::
Download delta files instead of complete packages if possible. Requires
the `xdelta3` program to be installed. If a ratio is specified (e.g.,
`0.5`), then it is used as a cutoff for determining whether to use deltas.
Allowed values are between `0.0` and `2.0`; sensible values are between
`0.2` and `0.9`. Using a value above `1.0` is not recommended. The
default is `0.7` if left unspecified.
*TotalDownload*::
When downloading, display the amount downloaded, download rate, ETA,
@@ -209,11 +213,6 @@ 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*::
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).
Repository Sections
-------------------

53
doc/pkgdelta.8.asciidoc Normal file
View File

@@ -0,0 +1,53 @@
pkgdelta(8)
=========
Name
----
pkgdelta - package delta generation utility
Synopsis
--------
'pkgdelta' [options] <package1> <package2>
Description
-----------
'pkgdelta' is used to create package delta files between two versions of the
same package. These files are essentially binary patches. linkman:pacman[8] can
download deltas instead of full package upgrades, and use them with the
previous versions of packages (in the package cache) to synthesize the upgraded
version of the packages. This likely reduces download sizes for upgrades
significantly.
'pkgdelta' requires linkman:xdelta3[1] to do its job.
Options
-------
*--max-delta-size <ratio>*::
Only create delta files if the delta is smaller than ratio * package_size.
Possible values: 0.0 to 2.0.
Recommended values: 0.2 to 0.9.
Default value: 0.7
*--min-pkg-size <size>*::
Minimal size of the package file in bytes to be considered for delta creation.
Default value: 1048576 bytes = 1 MiB. This may be any absolute size in bytes or
a human-readable value such as `4MiB` or `3.5MB`.
*-q, \--quiet*::
Be quiet. Do not output anything but warnings and errors.
Examples
--------
$ pkgdelta libreoffice-3.3.2-1-x86_64.pkg.tar.xz libreoffice-3.3.2-2-x86_64.pkg.tar.xz
See Also
--------
linkman:pacman[8], linkman:xdelta3[1]
include::footer.asciidoc[]

View File

@@ -8,25 +8,27 @@ repo-add - package database maintenance utility
Synopsis
--------
'repo-add' [options] <path-to-db> <package> [<package> ...]
'repo-add' [options] <path-to-db> <package|delta> [<package|delta> ...]
'repo-remove' [options] <path-to-db> <packagename> [<packagename> ...]
'repo-remove' [options] <path-to-db> <packagename|delta> [<packagename|delta> ...]
Description
-----------
'repo-add' and 'repo-remove' are two scripts to help build a package database for
packages built with linkman:makepkg[8] and installed with linkman:pacman[8].
They also handle package deltas produced by linkman:pkgdelta[8].
'repo-add' will update a package database by reading a built package file.
Multiple packages to add can be specified on the command line.
'repo-add' will update a package database by reading a built package or package
delta file. Multiple packages and/or deltas to add can be specified on the
command line.
If a matching ``.sig'' file is found alongside a package file, the signature
will automatically be embedded into the database.
'repo-remove' will update a package database by removing the package name
specified on the command line. Multiple packages to remove can be specified
on the command line.
'repo-remove' will update a package database by removing the package name or
delta specified on the command line. Multiple packages and/or delta 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'',
@@ -62,6 +64,10 @@ Common Options
repo-add Options
----------------
*-d, \--delta*::
Automatically generate and add a delta file between the old entry and the
new one, if the old package file is found next to the new one.
*-n, \--new*::
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.
@@ -83,6 +89,6 @@ db.tar* extension), there is currently no additional benefit for the larger down
See Also
--------
linkman:makepkg[8], linkman:pacman[8]
linkman:makepkg[8], linkman:pacman[8], linkman:pkgdelta[8]
include::footer.asciidoc[]

View File

@@ -20,7 +20,7 @@ started with GIT if you have not worked with it before.
The pacman code can be fetched using the following command:
git clone git://git.archlinux.org/pacman.git
git clone git://projects.archlinux.org/pacman.git
Creating your patch
@@ -39,7 +39,7 @@ address if you're afraid of spam.
* Describe your patch.
It helps if you describe the overview and goals of the patch in the git commit
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.

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 http://www.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].
http://www.transifex.com/projects/p/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.
http://docs.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
@@ -78,7 +78,7 @@ 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 git://projects.archlinux.org/pacman.git pacman
Next, you will need to run `./autogen.sh` and `./configure` in the base
directory to generate the correct Makefiles. At this point, all necessary

27
etc/Makefile.am Normal file
View File

@@ -0,0 +1,27 @@
dist_sysconf_DATA = makepkg.conf pacman.conf
EXTRA_DIST = makepkg.conf.in pacman.conf.in
# Files that should be removed, but which Automake does not know.
MOSTLYCLEANFILES = $(dist_sysconf_DATA)
SED_PROCESS = \
$(AM_V_GEN)$(MKDIR_P) $(dir $@) && \
$(SED) \
-e 's|@sysconfdir[@]|$(sysconfdir)|g' \
-e 's|@localstatedir[@]|$(localstatedir)|g' \
-e 's|@prefix[@]|$(prefix)|g' \
-e 's|@PACKAGE_VERSION[@]|$(PACKAGE_VERSION)|g' \
-e 's|@PACKAGE_NAME[@]|$(PACKAGE_NAME)|g' \
-e 's|@PKGEXT[@]|$(PKGEXT)|g' \
-e 's|@SRCEXT[@]|$(SRCEXT)|g' \
-e 's|@STRIP_BINARIES[@]|$(STRIP_BINARIES)|g' \
-e 's|@STRIP_SHARED[@]|$(STRIP_SHARED)|g' \
-e 's|@STRIP_STATIC[@]|$(STRIP_STATIC)|g' \
-e 's|@CARCH[@]|$(CARCH)|g' \
-e 's|@CHOST[@]|$(CHOST)|g' \
-e 's|@ARCHSWITCH[@]|$(ARCHSWITCH)|g' \
-e 's|@ROOTDIR[@]|$(ROOTDIR)|g' \
< $< > $@
%.conf: %.conf.in Makefile
$(SED_PROCESS)

View File

@@ -24,7 +24,6 @@ DLAGENTS=('file::/usr/bin/curl -gqC - -o %o %u'
#-- The package required by makepkg to download VCS sources
# Format: 'protocol::package'
VCSCLIENTS=('bzr::bzr'
'fossil::fossil'
'git::git'
'hg::mercurial'
'svn::subversion')
@@ -41,19 +40,17 @@ CHOST="@CHOST@"
#CFLAGS="-O2 -pipe"
#CXXFLAGS="-O2 -pipe"
#LDFLAGS=""
#RUSTFLAGS="-C opt-level=2"
#-- 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
#########################################################################
#
# Makepkg defaults: BUILDENV=(!distcc !color !ccache check !sign)
# Defaults: BUILDENV=(!distcc !color !ccache check !sign)
# A negated environment option will do the opposite of the comments below.
#
#-- distcc: Use the Distributed C/C++/ObjC compiler
@@ -76,7 +73,7 @@ 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)
# Default: OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug)
# A negated option will do the opposite of the comments below.
#
#-- strip: Strip symbols from binaries/libraries
@@ -90,8 +87,8 @@ BUILDENV=(!distcc color !ccache check !sign)
#
OPTIONS=(strip docs libtool staticlibs emptydirs zipman purge !debug)
#-- File integrity checks to use. Valid: ck, md5, sha1, sha224, sha256, sha384, sha512, b2
INTEGRITY_CHECK=(ck)
#-- File integrity checks to use. Valid: md5, sha1, sha224, sha256, sha384, sha512
INTEGRITY_CHECK=(md5)
#-- Options to be used when stripping binaries. See `man strip' for details.
STRIP_BINARIES="@STRIP_BINARIES@"
#-- Options to be used when stripping shared libraries. See `man strip' for details.
@@ -133,16 +130,16 @@ DBGSRCDIR="/usr/src/debug"
COMPRESSGZ=(gzip -c -f -n)
COMPRESSBZ2=(bzip2 -c -f)
COMPRESSXZ=(xz -c -z -)
COMPRESSZST=(zstd -c -z -q -)
COMPRESSLRZ=(lrzip -q)
COMPRESSLZO=(lzop -q)
COMPRESSZ=(compress -c -f)
COMPRESSLZ4=(lz4 -q)
COMPRESSLZ=(lzip -c -f)
#########################################################################
# EXTENSION DEFAULTS
#########################################################################
#
# WARNING: Do NOT modify these variables unless you know what you are
# doing.
#
PKGEXT='@PKGEXT@'
SRCEXT='@SRCEXT@'

View File

@@ -19,6 +19,7 @@ HoldPkg = pacman glibc
#XferCommand = /usr/bin/curl -L -C - -f -o %o %u
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled
#UseDelta = 0.7
Architecture = auto
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
@@ -31,11 +32,9 @@ Architecture = auto
# Misc options
#UseSyslog
#Color
#NoProgressBar
#TotalDownload
CheckSpace
#VerbosePkgLists
ParallelDownloads = 5
# PGP signature checking
#SigLevel = Optional

77
lib/libalpm/Makefile.am Normal file
View File

@@ -0,0 +1,77 @@
AUTOMAKE_OPTIONS = gnu
SUBDIRS = po
lib_LTLIBRARIES = libalpm.la
include_HEADERS = alpm_list.h alpm.h
AM_CPPFLAGS = \
-imacros $(top_builddir)/config.h \
-DSYSHOOKDIR=\"@datarootdir@/libalpm/hooks/\" \
-DLOCALEDIR=\"@localedir@\"
AM_CFLAGS = -pedantic -D_GNU_SOURCE $(WARNING_CFLAGS)
if ENABLE_VISIBILITY_CC
if DARWIN
AM_CFLAGS += -fvisibility=hidden
else
AM_CFLAGS += -fvisibility=internal
endif
endif
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libalpm.pc
libalpm_la_SOURCES = \
add.h add.c \
alpm.h alpm.c \
alpm_list.h alpm_list.c \
backup.h backup.c \
base64.h base64.c \
be_local.c \
be_package.c \
be_sync.c \
conflict.h conflict.c \
db.h db.c \
delta.h delta.c \
deps.h deps.c \
diskspace.h diskspace.c \
dload.h dload.c \
error.c \
filelist.h filelist.c \
graph.h graph.c \
group.h group.c \
handle.h handle.c \
hook.h hook.c \
ini.h ini.c \
libarchive-compat.h \
log.h log.c \
package.h package.c \
pkghash.h pkghash.c \
rawstr.c \
remove.h remove.c \
signing.c signing.h \
sync.h sync.c \
trans.h trans.c \
util.h util.c \
util-common.h util-common.c \
version.c
libalpm_la_LDFLAGS = -no-undefined -version-info $(LIB_VERSION_INFO)
libalpm_la_CFLAGS = \
$(AM_CFLAGS) \
$(GPGME_CFLAGS) \
$(LIBARCHIVE_CFLAGS) \
$(LIBCURL_CFLAGS) \
$(LIBSSL_CFLAGS) \
$(NETTLE_CFLAGS)
libalpm_la_LIBADD = \
$(LTLIBINTL) \
$(GPGME_LIBS) \
$(LIBARCHIVE_LIBS) \
$(LIBCURL_LIBS) \
$(LIBSSL_LIBS) \
$(NETTLE_LIBS)

View File

@@ -1,7 +1,7 @@
/*
* add.c
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify
@@ -47,12 +47,12 @@
#include "remove.h"
#include "handle.h"
/** Add a package to the transaction. */
int SYMEXPORT alpm_add_pkg(alpm_handle_t *handle, alpm_pkg_t *pkg)
{
const char *pkgname, *pkgver;
alpm_trans_t *trans;
alpm_pkg_t *local;
alpm_pkg_t *dup;
/* Sanity checks */
CHECK_HANDLE(handle, return -1);
@@ -70,16 +70,12 @@ int SYMEXPORT alpm_add_pkg(alpm_handle_t *handle, alpm_pkg_t *pkg)
_alpm_log(handle, ALPM_LOG_DEBUG, "adding package '%s'\n", pkgname);
if((dup = alpm_pkg_find(trans->add, pkgname))) {
if(dup == pkg) {
_alpm_log(handle, ALPM_LOG_DEBUG, "skipping duplicate target: %s\n", pkgname);
return 0;
}
/* error for separate packages with the same name */
if(alpm_pkg_find(trans->add, pkgname)) {
RET_ERR(handle, ALPM_ERR_TRANS_DUP_TARGET, -1);
}
if((local = _alpm_db_get_pkgfromcache(handle->db_local, pkgname))) {
local = _alpm_db_get_pkgfromcache(handle->db_local, pkgname);
if(local) {
const char *localpkgname = local->name;
const char *localpkgver = local->version;
int cmp = _alpm_pkg_compare_versions(pkg, local);
@@ -431,7 +427,7 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
ASSERT(trans != NULL, return -1);
/* see if this is an upgrade. if so, remove the old package first */
if(_alpm_db_get_pkgfromcache(db, newpkg->name) && (oldpkg = newpkg->oldpkg)) {
if((oldpkg = newpkg->oldpkg)) {
int cmp = _alpm_pkg_compare_versions(newpkg, oldpkg);
if(cmp < 0) {
log_msg = "downgrading";
@@ -483,7 +479,8 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
/* set up fake remove transaction */
if(_alpm_remove_single_package(handle, oldpkg, newpkg, 0, 0) == -1) {
handle->pm_errno = ALPM_ERR_TRANS_ABORT;
return -1;
ret = -1;
goto cleanup;
}
}
@@ -494,13 +491,15 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
"error: could not create database entry %s-%s\n",
newpkg->name, newpkg->version);
handle->pm_errno = ALPM_ERR_DB_WRITE;
return -1;
ret = -1;
goto cleanup;
}
fd = _alpm_open_archive(db->handle, pkgfile, &buf,
&archive, ALPM_ERR_PKG_OPEN);
if(fd < 0) {
return -1;
ret = -1;
goto cleanup;
}
/* save the cwd so we can restore it later */
@@ -518,7 +517,8 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
close(cwdfd);
}
close(fd);
return -1;
ret = -1;
goto cleanup;
}
if(trans->flags & ALPM_TRANS_FLAG_DBONLY) {
@@ -602,7 +602,8 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
"error: could not update database entry %s-%s\n",
newpkg->name, newpkg->version);
handle->pm_errno = ALPM_ERR_DB_WRITE;
return -1;
ret = -1;
goto cleanup;
}
if(_alpm_db_add_pkgincache(db, newpkg) == -1) {
@@ -648,6 +649,7 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
event.type = ALPM_EVENT_PACKAGE_OPERATION_DONE;
EVENT(handle, &event);
cleanup:
return ret;
}

View File

@@ -1,7 +1,7 @@
/*
* add.h
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@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-2018 Pacman Development Team <pacman-dev@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>
@@ -32,6 +32,19 @@
#include "log.h"
#include "util.h"
/** \addtogroup alpm_interface Interface Functions
* @brief Functions to initialize and release libalpm
* @{
*/
/** Initializes the library.
* Creates handle, connects to database and creates lockfile.
* This must be called before any other functions are called.
* @param root the root path for all filesystem operations
* @param dbpath the absolute path to the libalpm database
* @param err an optional variable to hold any error return codes
* @return a context handle on success, NULL on error, err will be set if provided
*/
alpm_handle_t SYMEXPORT *alpm_initialize(const char *root, const char *dbpath,
alpm_errno_t *err)
{
@@ -55,7 +68,7 @@ alpm_handle_t SYMEXPORT *alpm_initialize(const char *root, const char *dbpath,
* 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]);
sprintf(hookdir, "%s%s", myhandle->root, SYSHOOKDIR + 1);
myhandle->hookdirs = alpm_list_add(NULL, hookdir);
/* set default database extension */
@@ -70,13 +83,6 @@ alpm_handle_t SYMEXPORT *alpm_initialize(const char *root, const char *dbpath,
goto cleanup;
}
#ifdef HAVE_LIBCURL
curl_global_init(CURL_GLOBAL_ALL);
myhandle->curlm = curl_multi_init();
#endif
myhandle->parallel_downloads = 1;
#ifdef ENABLE_NLS
bindtextdomain("libalpm", LOCALEDIR);
#endif
@@ -93,6 +99,14 @@ cleanup:
return NULL;
}
/** Release the library.
* Disconnects from the database, removes handle and lockfile
* This should be the last alpm call you make.
* After this returns, handle should be considered invalid and cannot be reused
* in any way.
* @param myhandle the context handle
* @return 0 on success, -1 on error
*/
int SYMEXPORT alpm_release(alpm_handle_t *myhandle)
{
int ret = 0;
@@ -111,22 +125,33 @@ int SYMEXPORT alpm_release(alpm_handle_t *myhandle)
ret = -1;
}
#ifdef HAVE_LIBCURL
curl_multi_cleanup(myhandle->curlm);
curl_global_cleanup();
#endif
_alpm_handle_unlock(myhandle);
_alpm_handle_free(myhandle);
#ifdef HAVE_LIBCURL
curl_global_cleanup();
#endif
return ret;
}
/** @} */
/** @defgroup alpm_misc Miscellaneous Functions
* @brief Various libalpm functions
*/
/** Get the version of library.
* @return the library version, e.g. "6.0.4"
* */
const char SYMEXPORT *alpm_version(void)
{
return LIB_VERSION;
}
/** Get the capabilities of the library.
* @return a bitmask of the capabilities
* */
int SYMEXPORT alpm_capabilities(void)
{
return 0

View File

@@ -1,7 +1,7 @@
/*
* alpm.h
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@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>
@@ -104,6 +104,9 @@ typedef enum _alpm_errno_t {
/* Signatures */
ALPM_ERR_SIG_MISSING,
ALPM_ERR_SIG_INVALID,
/* Deltas */
ALPM_ERR_DLT_INVALID,
ALPM_ERR_DLT_PATCHFAILED,
/* Dependencies */
ALPM_ERR_UNSATISFIED_DEPS,
ALPM_ERR_CONFLICTING_DEPS,
@@ -115,9 +118,7 @@ typedef enum _alpm_errno_t {
ALPM_ERR_LIBARCHIVE,
ALPM_ERR_LIBCURL,
ALPM_ERR_EXTERNAL_DOWNLOAD,
ALPM_ERR_GPGME,
/* Missing compile-time features */
ALPM_ERR_MISSING_CAPABILITY_SIGNATURES
ALPM_ERR_GPGME
} alpm_errno_t;
/** Returns the current error code from the handle. */
@@ -270,6 +271,22 @@ typedef struct _alpm_group_t {
alpm_list_t *packages;
} alpm_group_t;
/** Package upgrade delta */
typedef struct _alpm_delta_t {
/** filename of the delta patch */
char *delta;
/** md5sum of the delta file */
char *delta_md5;
/** filename of the 'before' file */
char *from;
/** filename of the 'after' file */
char *to;
/** filesize of the delta file */
off_t delta_size;
/** download filesize of the delta file */
off_t download_size;
} alpm_delta_t;
/** File in a package */
typedef struct _alpm_file_t {
char *name;
@@ -335,11 +352,6 @@ typedef enum _alpm_hook_when_t {
* Logging facilities
*/
/** \addtogroup alpm_log Logging Functions
* @brief Functions to log using libalpm
* @{
*/
/** Logging Levels */
typedef enum _alpm_loglevel_t {
ALPM_LOG_ERROR = 1,
@@ -350,17 +362,9 @@ typedef enum _alpm_loglevel_t {
typedef void (*alpm_cb_log)(alpm_loglevel_t, const char *, va_list);
/** A printf-like function for logging.
* @param handle the context handle
* @param prefix caller-specific prefix for the log
* @param fmt output format
* @return 0 on success, -1 on error (pm_errno is set accordingly)
*/
int alpm_logaction(alpm_handle_t *handle, const char *prefix,
const char *fmt, ...) __attribute__((format(printf, 3, 4)));
/** @} */
/**
* Type of events.
*/
@@ -399,21 +403,39 @@ typedef enum _alpm_event_type_t {
ALPM_EVENT_LOAD_START,
/** Target package is finished loading. */
ALPM_EVENT_LOAD_DONE,
/** Target delta's integrity will be checked. */
ALPM_EVENT_DELTA_INTEGRITY_START,
/** Target delta's integrity was checked. */
ALPM_EVENT_DELTA_INTEGRITY_DONE,
/** Deltas will be applied to packages. */
ALPM_EVENT_DELTA_PATCHES_START,
/** Deltas were applied to packages. */
ALPM_EVENT_DELTA_PATCHES_DONE,
/** Delta patch will be applied to target package; See
* alpm_event_delta_patch_t for arguments.. */
ALPM_EVENT_DELTA_PATCH_START,
/** Delta patch was applied to target package. */
ALPM_EVENT_DELTA_PATCH_DONE,
/** Delta patch failed to apply to target package. */
ALPM_EVENT_DELTA_PATCH_FAILED,
/** Scriptlet has printed information; See alpm_event_scriptlet_info_t for
* arguments. */
ALPM_EVENT_SCRIPTLET_INFO,
/** Database files will be downloaded from a repository. */
ALPM_EVENT_DB_RETRIEVE_START,
/** Database files were downloaded from a repository. */
ALPM_EVENT_DB_RETRIEVE_DONE,
/** Not all database files were successfully downloaded from a repository. */
ALPM_EVENT_DB_RETRIEVE_FAILED,
/** Package files will be downloaded from a repository. */
ALPM_EVENT_PKG_RETRIEVE_START,
/** Package files were downloaded from a repository. */
ALPM_EVENT_PKG_RETRIEVE_DONE,
/** Not all package files were successfully downloaded from a repository. */
ALPM_EVENT_PKG_RETRIEVE_FAILED,
/** Files will be downloaded from a repository. */
ALPM_EVENT_RETRIEVE_START,
/** Files were downloaded from a repository. */
ALPM_EVENT_RETRIEVE_DONE,
/** Not all files were successfully downloaded from a repository. */
ALPM_EVENT_RETRIEVE_FAILED,
/** A file will be downloaded from a repository; See alpm_event_pkgdownload_t
* for arguments */
ALPM_EVENT_PKGDOWNLOAD_START,
/** A file was downloaded from a repository; See alpm_event_pkgdownload_t
* for arguments */
ALPM_EVENT_PKGDOWNLOAD_DONE,
/** A file failed to be downloaded from a repository; See
* alpm_event_pkgdownload_t for arguments */
ALPM_EVENT_PKGDOWNLOAD_FAILED,
/** Disk space usage will be computed for a package. */
ALPM_EVENT_DISKSPACE_START,
/** Disk space usage was computed for a package. */
@@ -485,6 +507,13 @@ typedef struct _alpm_event_optdep_removal_t {
alpm_depend_t *optdep;
} alpm_event_optdep_removal_t;
typedef struct _alpm_event_delta_patch_t {
/** Type of event. */
alpm_event_type_t type;
/** Delta info */
alpm_delta_t *delta;
} alpm_event_delta_patch_t;
typedef struct _alpm_event_scriptlet_info_t {
/** Type of event. */
alpm_event_type_t type;
@@ -558,6 +587,7 @@ typedef union _alpm_event_t {
alpm_event_any_t any;
alpm_event_package_operation_t package_operation;
alpm_event_optdep_removal_t optdep_removal;
alpm_event_delta_patch_t delta_patch;
alpm_event_scriptlet_info_t scriptlet_info;
alpm_event_database_missing_t database_missing;
alpm_event_pkgdownload_t pkgdownload;
@@ -706,42 +736,13 @@ typedef void (*alpm_cb_progress)(alpm_progress_t, const char *, int, size_t, siz
* Downloading
*/
/* File download events.
* These events are reported by ALPM via download callback.
*/
typedef enum {
ALPM_DOWNLOAD_INIT, /* alpm initializes file download logic */
ALPM_DOWNLOAD_PROGRESS, /* download progress reported */
ALPM_DOWNLOAD_COMPLETED /* alpm is about to release data related to the file */
} alpm_download_event_type_t;
typedef struct {
int optional; /* whether this file is optional and thus the errors could be ignored */
} alpm_download_event_init_t;
typedef struct {
off_t downloaded; /* amount of data downloaded */
off_t total; /* total amount need to be downloaded */
} alpm_download_event_progress_t;
typedef struct {
/* total bytes in file */
off_t total;
/* download result code:
* 0 - download completed successfully
* 1 - the file is up-to-date
* -1 - error
*/
int result;
} alpm_download_event_completed_t;
/** Type of download progress callbacks.
* @param filename the name of the file being downloaded
* @param event the event type
* @param data the event data of type alpm_download_event_*_t
* @param xfered the number of transferred bytes
* @param total the total number of bytes to transfer
*/
typedef void (*alpm_cb_download)(const char *filename,
alpm_download_event_type_t event, void *data);
off_t xfered, off_t total);
typedef void (*alpm_cb_totaldl)(off_t total);
@@ -755,17 +756,12 @@ typedef void (*alpm_cb_totaldl)(off_t total);
typedef int (*alpm_cb_fetch)(const char *url, const char *localpath,
int force);
/** Fetch a list of remote packages.
/** Fetch a remote pkg.
* @param handle the context handle
* @param urls list of package URLs to download
* @param fetched list of filepaths to the fetched packages, each item
* corresponds to one in `urls` list. This is an output parameter,
* the caller should provide a pointer to an empty list
* (*fetched === NULL) and the callee fills the list with data.
* @return 0 on success or -1 on failure
* @param url URL of the package to download
* @return the downloaded filepath on success, NULL on error
*/
int alpm_fetch_pkgurl(alpm_handle_t *handle, const alpm_list_t *urls,
alpm_list_t **fetched);
char *alpm_fetch_pkgurl(alpm_handle_t *handle, const char *url);
/** @addtogroup alpm_api_options Options
* Libalpm option getters and setters
@@ -917,6 +913,9 @@ const char *alpm_option_get_arch(alpm_handle_t *handle);
/** Sets the targeted architecture. */
int alpm_option_set_arch(alpm_handle_t *handle, const char *arch);
double alpm_option_get_deltaratio(alpm_handle_t *handle);
int alpm_option_set_deltaratio(alpm_handle_t *handle, double ratio);
int alpm_option_get_checkspace(alpm_handle_t *handle);
int alpm_option_set_checkspace(alpm_handle_t *handle, int checkspace);
@@ -934,17 +933,6 @@ int alpm_option_set_remote_file_siglevel(alpm_handle_t *handle, int level);
int alpm_option_set_disable_dl_timeout(alpm_handle_t *handle, unsigned short disable_dl_timeout);
int alpm_option_get_parallel_downloads(alpm_handle_t *handle);
/** Sets number of parallel streams to download database and package files.
* If the function is not called then the default value of '1' stream
* (i.e. sequential download) is used.
* @param handle the context handle
* @param num_streams number of parallel download streams
* @return 0 on success, -1 on error
*/
int alpm_option_set_parallel_downloads(alpm_handle_t *handle, unsigned int num_streams);
/** @} */
/** @addtogroup alpm_api_databases Database Functions
@@ -1015,65 +1003,13 @@ int alpm_db_get_valid(alpm_db_t *db);
/** @name Accessors to the list of servers for a database.
* @{
*/
/** Get the list of servers assigned to this db.
* @param db pointer to the database to get the servers from
* @return a char* list of servers
*/
alpm_list_t *alpm_db_get_servers(const alpm_db_t *db);
/** Sets the list of servers for the database to use.
* @param db the database to set the servers
* @param a char* list of servers. Note: the database will
* take ownership of the list and it should no longer be
* freed by the caller
*/
int alpm_db_set_servers(alpm_db_t *db, alpm_list_t *servers);
/** Add a download server to a database.
* @param db database pointer
* @param url url of the server
* @return 0 on success, -1 on error (pm_errno is set accordingly)
*/
int alpm_db_add_server(alpm_db_t *db, const char *url);
/** Remove a download server from a database.
* @param db database pointer
* @param url url of the server
* @return 0 on success, 1 on server not present,
* -1 on error (pm_errno is set accordingly)
*/
int alpm_db_remove_server(alpm_db_t *db, const char *url);
/** @} */
/** Update package databases
*
* An update of the package databases in the list \a dbs will be attempted.
* Unless \a force is true, the update will only be performed if the remote
* databases were modified since the last update.
*
* This operation requires a database lock, and will return an applicable error
* if the lock could not be obtained.
*
* Example:
* @code
* alpm_list_t *dbs = alpm_get_syncdbs();
* ret = alpm_db_update(config->handle, dbs, force);
* if(ret < 0) {
* pm_printf(ALPM_LOG_ERROR, _("failed to synchronize all databases (%s)\n"),
* alpm_strerror(alpm_errno(config->handle)));
* }
* @endcode
*
* @note After a successful update, the \link alpm_db_get_pkgcache()
* package cache \endlink will be invalidated
* @param handle the context handle
* @param dbs list of package databases to update
* @param force if true, then forces the update, otherwise update only in case
* the databases aren't up to date
* @return 0 on success, -1 on error (pm_errno is set accordingly)
*/
int alpm_db_update(alpm_handle_t *handle, alpm_list_t *dbs, int force);
int alpm_db_update(int force, alpm_db_t *db);
/** Get a package entry from a package database.
* @param db pointer to the package database to get the package from
@@ -1104,14 +1040,11 @@ alpm_list_t *alpm_db_get_groupcache(alpm_db_t *db);
/** Searches a database with regular expressions.
* @param db pointer to the package database to search in
* @param needles a list of regular expressions to search for
* @param ret pointer to list for storing packages matching all
* regular expressions - must point to an empty (NULL) alpm_list_t *.
* @return 0 on success, -1 on error (pm_errno is set accordingly)
* @return the list of packages matching all regular expressions on success, NULL on error
*/
int alpm_db_search(alpm_db_t *db, const alpm_list_t *needles,
alpm_list_t **ret);
alpm_list_t *alpm_db_search(alpm_db_t *db, const alpm_list_t *needles);
typedef enum _alpm_db_usage_t {
typedef enum _alpm_db_usage_ {
ALPM_DB_USAGE_SYNC = 1,
ALPM_DB_USAGE_SEARCH = (1 << 1),
ALPM_DB_USAGE_INSTALL = (1 << 2),
@@ -1176,20 +1109,7 @@ int alpm_pkg_free(alpm_pkg_t *pkg);
*/
int alpm_pkg_checkmd5sum(alpm_pkg_t *pkg);
/** Compare two version strings and determine which one is 'newer'.
* Returns a value comparable to the way strcmp works. Returns 1
* if a is newer than b, 0 if a and b are the same version, or -1
* if b is newer than a.
*
* Different epoch values for version strings will override any further
* comparison. If no epoch is provided, 0 is assumed.
*
* Keep in mind that the pkgrel is only compared if it is available
* on both versions handed to this function. For example, comparing
* 1.5-1 and 1.5 will yield 0; comparing 1.5-1 and 1.5-2 will yield
* -1 as expected. This is mainly for supporting versioned dependencies
* that do not include the pkgrel.
*/
/** Compare two version strings and determine which one is 'newer'. */
int alpm_pkg_vercmp(const char *a, const char *b);
/** Computes the list of packages requiring a given package.
@@ -1372,6 +1292,12 @@ alpm_list_t *alpm_pkg_get_conflicts(alpm_pkg_t *pkg);
*/
alpm_list_t *alpm_pkg_get_provides(alpm_pkg_t *pkg);
/** Returns the list of available deltas for pkg.
* @param pkg a pointer to package
* @return a reference to an internal list of strings.
*/
alpm_list_t *alpm_pkg_get_deltas(alpm_pkg_t *pkg);
/** Returns the list of packages to be replaced by pkg.
* @param pkg a pointer to package
* @return a reference to an internal list of alpm_depend_t structures.
@@ -1407,17 +1333,6 @@ alpm_db_t *alpm_pkg_get_db(alpm_pkg_t *pkg);
*/
const char *alpm_pkg_get_base64_sig(alpm_pkg_t *pkg);
/** Extracts package signature either from embedded package signature
* or if it is absent then reads data from detached signature file.
* @param pkg a pointer to package.
* @param sig output parameter for signature data. Callee function allocates
* a buffer needed for the signature data. Caller is responsible for
* freeing this buffer.
* @param sig_len output parameter for the signature data length.
* @return 0 on success, negative number on error.
*/
int alpm_pkg_get_sig(alpm_pkg_t *pkg, unsigned char **sig, size_t *sig_len);
/** Returns the method used to validate a package during install.
* @param pkg a pointer to package
* @return an enum member giving the validation method
@@ -1448,15 +1363,11 @@ void *alpm_pkg_changelog_open(alpm_pkg_t *pkg);
size_t alpm_pkg_changelog_read(void *ptr, size_t size,
const alpm_pkg_t *pkg, void *fp);
/** Close a package changelog for reading.
* @param pkg the package to close the changelog of (either file or db)
* @return 0 on success, -1 on error
*/
int alpm_pkg_changelog_close(const alpm_pkg_t *pkg, void *fp);
/** Open a package mtree file for reading.
* @param pkg the local package to read the mtree of
* @return an archive structure for the package mtree file
* @param pkg the local package to read the changelog of
* @return a archive structure for the package mtree file
*/
struct archive *alpm_pkg_mtree_open(alpm_pkg_t *pkg);
@@ -1464,15 +1375,11 @@ struct archive *alpm_pkg_mtree_open(alpm_pkg_t *pkg);
* @param pkg the package that the mtree file is being read from
* @param archive the archive structure reading from the mtree file
* @param entry an archive_entry to store the entry header information
* @return 0 on success, 1 if end of archive is reached, -1 otherwise.
* @return 0 if end of archive is reached, non-zero otherwise.
*/
int alpm_pkg_mtree_next(const alpm_pkg_t *pkg, struct archive *archive,
struct archive_entry **entry);
/** Close a package mtree file.
* @param pkg the local package to close the mtree of
* @param the archive to close
*/
int alpm_pkg_mtree_close(const alpm_pkg_t *pkg, struct archive *archive);
/** Returns whether the package has an install scriptlet.
@@ -1480,13 +1387,16 @@ int alpm_pkg_mtree_close(const alpm_pkg_t *pkg, struct archive *archive);
*/
int alpm_pkg_has_scriptlet(alpm_pkg_t *pkg);
/** Returns the size of the files that will be downloaded to install a
/** Returns the size of download.
* Returns the size of the files that will be downloaded to install a
* package.
* @param newpkg the new package to upgrade to
* @return the size of the download
*/
off_t alpm_pkg_download_size(alpm_pkg_t *newpkg);
alpm_list_t *alpm_pkg_unused_deltas(alpm_pkg_t *pkg);
/** Set install reason for a package in the local database.
* The provided package object must be from the local database or this method
* will fail. The write to the local database is performed immediately.
@@ -1518,48 +1428,15 @@ alpm_file_t *alpm_filelist_contains(alpm_filelist_t *filelist, const char *path)
* Signatures
*/
/**
* Check the PGP signature for the given package file.
* @param pkg the package to check
* @param siglist a pointer to storage for signature results
* @return a int value : 0 (valid), 1 (invalid), -1 (an error occurred)
*/
int alpm_pkg_check_pgp_signature(alpm_pkg_t *pkg, alpm_siglist_t *siglist);
/**
* Check the PGP signature for the given database.
* @param db the database to check
* @param siglist a pointer to storage for signature results
* @return a int value : 0 (valid), 1 (invalid), -1 (an error occurred)
*/
int alpm_db_check_pgp_signature(alpm_db_t *db, alpm_siglist_t *siglist);
/**
* Clean up and free a signature result list.
* Note that this does not free the siglist object itself in case that
* was allocated on the stack; this is the responsibility of the caller.
* @param siglist a pointer to storage for signature results
* @return 0 on success, -1 on error
*/
int alpm_siglist_cleanup(alpm_siglist_t *siglist);
/**
* Decode a loaded signature in base64 form.
* @param base64_data the signature to attempt to decode
* @param data the decoded data; must be freed by the caller
* @param data_len the length of the returned data
* @return 0 on success, -1 on failure to properly decode
*/
int alpm_decode_signature(const char *base64_data,
unsigned char **data, size_t *data_len);
/**
* Extract the Issuer Key ID from a signature
* @param sig PGP signature
* @param len length of signature
* @param keys a pointer to storage for key IDs
* @return 0 on success, -1 on error
*/
int alpm_extract_keyid(alpm_handle_t *handle, const char *identifier,
const unsigned char *sig, const size_t len, alpm_list_t **keys);
@@ -1567,23 +1444,13 @@ int alpm_extract_keyid(alpm_handle_t *handle, const char *identifier,
* Groups
*/
/** Find group members across a list of databases.
* If a member exists in several databases, only the first database is used.
* IgnorePkg is also handled.
* @param dbs the list of alpm_db_t *
* @param name the name of the group
* @return the list of alpm_pkg_t * (caller is responsible for alpm_list_free)
*/
alpm_list_t *alpm_find_group_pkgs(alpm_list_t *dbs, const char *name);
/*
* Sync
*/
/** Check for new version of pkg in sync repos
* (only the first occurrence is considered in sync)
*/
alpm_pkg_t *alpm_sync_get_new_version(alpm_pkg_t *pkg, alpm_list_t *dbs_sync);
alpm_pkg_t *alpm_sync_newversion(alpm_pkg_t *pkg, alpm_list_t *dbs_sync);
/** @addtogroup alpm_api_trans Transaction Functions
* Functions to manipulate libalpm transactions
@@ -1594,7 +1461,8 @@ alpm_pkg_t *alpm_sync_get_new_version(alpm_pkg_t *pkg, alpm_list_t *dbs_sync);
typedef enum _alpm_transflag_t {
/** Ignore dependency checks. */
ALPM_TRANS_FLAG_NODEPS = 1,
/* (1 << 1) flag can go here */
/** Ignore file conflicts and overwrite files. */
ALPM_TRANS_FLAG_FORCE = (1 << 1),
/** Delete files even if they are tagged as backup. */
ALPM_TRANS_FLAG_NOSAVE = (1 << 2),
/** Ignore version numbers when checking dependencies. */
@@ -1715,49 +1583,12 @@ int alpm_remove_pkg(alpm_handle_t *handle, alpm_pkg_t *pkg);
* @{
*/
/** Checks dependencies and returns missing ones in a list.
* Dependencies can include versions with depmod operators.
* @param handle the context handle
* @param pkglist the list of local packages
* @param remove an alpm_list_t* of packages to be removed
* @param upgrade an alpm_list_t* of packages to be upgraded (remove-then-upgrade)
* @param reversedeps handles the backward dependencies
* @return an alpm_list_t* of alpm_depmissing_t pointers.
*/
alpm_list_t *alpm_checkdeps(alpm_handle_t *handle, alpm_list_t *pkglist,
alpm_list_t *remove, alpm_list_t *upgrade, int reversedeps);
/** Find a package satisfying a specified dependency.
* The dependency can include versions with depmod operators.
* @param pkgs an alpm_list_t* of alpm_pkg_t where the satisfier will be searched
* @param depstring package or provision name, versioned or not
* @return a alpm_pkg_t* satisfying depstring
*/
alpm_pkg_t *alpm_find_satisfier(alpm_list_t *pkgs, const char *depstring);
/** Find a package satisfying a specified dependency.
* First look for a literal, going through each db one by one. Then look for
* providers. The first satisfier that belongs to an installed package is
* returned. If no providers belong to an installed package then an
* alpm_question_select_provider_t is created to select the provider.
* The dependency can include versions with depmod operators.
*
* @param handle the context handle
* @param dbs an alpm_list_t* of alpm_db_t where the satisfier will be searched
* @param depstring package or provision name, versioned or not
* @return a alpm_pkg_t* satisfying depstring
*/
alpm_pkg_t *alpm_find_dbs_satisfier(alpm_handle_t *handle,
alpm_list_t *dbs, const char *depstring);
/**
* @brief Check the package conflicts in a database
*
* @param handle the context handle
* @param pkglist the list of packages to check
*
* @return an alpm_list_t of alpm_conflict_t
*/
alpm_list_t *alpm_checkconflicts(alpm_handle_t *handle, alpm_list_t *pkglist);
/** Returns a newly allocated string representing the dependency information.
@@ -1786,60 +1617,12 @@ void alpm_dep_free(alpm_depend_t *dep);
*/
/* checksums */
/** \addtogroup alpm_misc Miscellaneous Functions
* @brief Various libalpm functions
* @{
*/
/** Get the md5 sum of file.
* @param filename name of the file
* @return the checksum on success, NULL on error
*/
char *alpm_compute_md5sum(const char *filename);
/** Get the sha256 sum of file.
* @param filename name of the file
* @return the checksum on success, NULL on error
*/
char *alpm_compute_sha256sum(const char *filename);
/** @} */
/** \addtogroup alpm_interface Interface Functions
* @brief Functions to initialize and release libalpm
* @{
*/
/** Initializes the library.
* Creates handle, connects to database and creates lockfile.
* This must be called before any other functions are called.
* @param root the root path for all filesystem operations
* @param dbpath the absolute path to the libalpm database
* @param err an optional variable to hold any error return codes
* @return a context handle on success, NULL on error, err will be set if provided
*/
alpm_handle_t *alpm_initialize(const char *root, const char *dbpath,
alpm_errno_t *err);
/** Release the library.
* Disconnects from the database, removes handle and lockfile
* This should be the last alpm call you make.
* After this returns, handle should be considered invalid and cannot be reused
* in any way.
* @param myhandle the context handle
* @return 0 on success, -1 on error
*/
int alpm_release(alpm_handle_t *handle);
/** @} */
/** Remove the database lock file
* @param handle the context handle
* @return 0 on success, -1 on error
*
* @note Safe to call from inside signal handlers.
*/
int alpm_unlock(alpm_handle_t *handle);
enum alpm_caps {
@@ -1848,27 +1631,12 @@ enum alpm_caps {
ALPM_CAPABILITY_SIGNATURES = (1 << 2)
};
/** Get the version of library.
* @return the library version, e.g. "6.0.4"
* */
const char *alpm_version(void);
/** Get the capabilities of the library.
* @return a bitmask of the capabilities
* */
/* Return a bitfield of capabilities using values from 'enum alpm_caps' */
int alpm_capabilities(void);
/**
* Free a fileconflict and its members.
* @param conflict the fileconflict to free
*/
void alpm_fileconflict_free(alpm_fileconflict_t *conflict);
void alpm_depmissing_free(alpm_depmissing_t *miss);
/**
* Free a conflict and its members.
* @param conflict the conflict to free
*/
void alpm_conflict_free(alpm_conflict_t *conflict);
/* End of alpm_api */

View File

@@ -1,7 +1,7 @@
/*
* alpm_list.c
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@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_list.h
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@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 @@
/*
* backup.c
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@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-2018 Pacman Development Team <pacman-dev@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-2018 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify
@@ -153,18 +153,6 @@ static alpm_list_t *_cache_get_optdepends(alpm_pkg_t *pkg)
return pkg->optdepends;
}
static alpm_list_t *_cache_get_makedepends(alpm_pkg_t *pkg)
{
LAZY_LOAD(INFRQ_DESC);
return pkg->makedepends;
}
static alpm_list_t *_cache_get_checkdepends(alpm_pkg_t *pkg)
{
LAZY_LOAD(INFRQ_DESC);
return pkg->checkdepends;
}
static alpm_list_t *_cache_get_conflicts(alpm_pkg_t *pkg)
{
LAZY_LOAD(INFRQ_DESC);
@@ -256,7 +244,8 @@ static struct archive *_cache_mtree_open(alpm_pkg_t *pkg)
}
if((mtree = archive_read_new()) == NULL) {
GOTO_ERR(pkg->handle, ALPM_ERR_LIBARCHIVE, error);
pkg->handle->pm_errno = ALPM_ERR_LIBARCHIVE;
goto error;
}
_alpm_archive_read_support_filter_all(mtree);
@@ -265,8 +254,9 @@ static struct archive *_cache_mtree_open(alpm_pkg_t *pkg)
if((r = _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));
pkg->handle->pm_errno = ALPM_ERR_LIBARCHIVE;
_alpm_archive_read_free(mtree);
GOTO_ERR(pkg->handle, ALPM_ERR_LIBARCHIVE, error);
goto error;
}
free(mtfile);
@@ -282,26 +272,12 @@ error:
* @param pkg the package that the mtree file is being read from
* @param archive the archive structure reading from the mtree file
* @param entry an archive_entry to store the entry header information
* @return 0 on success, 1 if end of archive is reached, -1 otherwise.
* @return 0 if end of archive is reached, non-zero otherwise.
*/
static int _cache_mtree_next(const alpm_pkg_t UNUSED *pkg,
struct archive *mtree, struct archive_entry **entry)
{
int ret;
ret = archive_read_next_header(mtree, entry);
switch(ret) {
case ARCHIVE_OK:
return 0;
break;
case ARCHIVE_EOF:
return 1;
break;
default:
break;
}
return -1;
return archive_read_next_header(mtree, entry);
}
/**
@@ -327,38 +303,36 @@ static int _cache_force_load(alpm_pkg_t *pkg)
* logic.
*/
static struct pkg_operations local_pkg_ops = {
.get_base = _cache_get_base,
.get_desc = _cache_get_desc,
.get_url = _cache_get_url,
.get_builddate = _cache_get_builddate,
.get_base = _cache_get_base,
.get_desc = _cache_get_desc,
.get_url = _cache_get_url,
.get_builddate = _cache_get_builddate,
.get_installdate = _cache_get_installdate,
.get_packager = _cache_get_packager,
.get_arch = _cache_get_arch,
.get_isize = _cache_get_isize,
.get_reason = _cache_get_reason,
.get_validation = _cache_get_validation,
.has_scriptlet = _cache_has_scriptlet,
.get_licenses = _cache_get_licenses,
.get_groups = _cache_get_groups,
.get_depends = _cache_get_depends,
.get_optdepends = _cache_get_optdepends,
.get_makedepends = _cache_get_makedepends,
.get_checkdepends = _cache_get_checkdepends,
.get_conflicts = _cache_get_conflicts,
.get_provides = _cache_get_provides,
.get_replaces = _cache_get_replaces,
.get_files = _cache_get_files,
.get_backup = _cache_get_backup,
.get_packager = _cache_get_packager,
.get_arch = _cache_get_arch,
.get_isize = _cache_get_isize,
.get_reason = _cache_get_reason,
.get_validation = _cache_get_validation,
.has_scriptlet = _cache_has_scriptlet,
.get_licenses = _cache_get_licenses,
.get_groups = _cache_get_groups,
.get_depends = _cache_get_depends,
.get_optdepends = _cache_get_optdepends,
.get_conflicts = _cache_get_conflicts,
.get_provides = _cache_get_provides,
.get_replaces = _cache_get_replaces,
.get_files = _cache_get_files,
.get_backup = _cache_get_backup,
.changelog_open = _cache_changelog_open,
.changelog_read = _cache_changelog_read,
.changelog_open = _cache_changelog_open,
.changelog_read = _cache_changelog_read,
.changelog_close = _cache_changelog_close,
.mtree_open = _cache_mtree_open,
.mtree_next = _cache_mtree_next,
.mtree_close = _cache_mtree_close,
.mtree_open = _cache_mtree_open,
.mtree_next = _cache_mtree_next,
.mtree_close = _cache_mtree_close,
.force_load = _cache_force_load,
.force_load = _cache_force_load,
};
static int checkdbdir(alpm_db_t *db)
@@ -692,7 +666,7 @@ char *_alpm_local_db_pkgpath(alpm_db_t *db, alpm_pkg_t *info,
static int local_db_read(alpm_pkg_t *info, int inforeq)
{
FILE *fp = NULL;
char line[1024] = {0};
char line[1024];
alpm_db_t *db = info->origin_data.db;
/* bitmask logic here:
@@ -715,6 +689,9 @@ static int local_db_read(alpm_pkg_t *info, int inforeq)
"loading package data for %s : level=0x%x\n",
info->name, inforeq);
/* clear out 'line', to be certain - and to make valgrind happy */
memset(line, 0, sizeof(line));
/* DESC */
if(inforeq & INFRQ_DESC && !(info->infolevel & INFRQ_DESC)) {
char *path = _alpm_local_db_pkgpath(db, info, "desc");
@@ -796,10 +773,6 @@ static int local_db_read(alpm_pkg_t *info, int inforeq)
READ_AND_SPLITDEP(info->depends);
} else if(strcmp(line, "%OPTDEPENDS%") == 0) {
READ_AND_SPLITDEP(info->optdepends);
} else if(strcmp(line, "%MAKEDEPENDS%") == 0) {
READ_AND_SPLITDEP(info->makedepends);
} else if(strcmp(line, "%CHECKDEPENDS%") == 0) {
READ_AND_SPLITDEP(info->checkdepends);
} else if(strcmp(line, "%CONFLICTS%") == 0) {
READ_AND_SPLITDEP(info->conflicts);
} else if(strcmp(line, "%PROVIDES%") == 0) {
@@ -841,7 +814,12 @@ static int local_db_read(alpm_pkg_t *info, int inforeq)
}
/* attempt to hand back any memory we don't need */
if(files_count > 0) {
REALLOC(files, sizeof(alpm_file_t) * files_count, (void)0);
alpm_file_t *newfiles;
newfiles = realloc(files, sizeof(alpm_file_t) * files_count);
if(newfiles != NULL) {
files = newfiles;
}
} else {
FREE(files);
}

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-2018 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify
@@ -164,8 +164,9 @@ static int parse_descfile(alpm_handle_t *handle, struct archive *a, alpm_pkg_t *
char *ptr = NULL;
char *key = NULL;
int ret, linenum = 0;
struct archive_read_buffer buf = {0};
struct archive_read_buffer buf;
memset(&buf, 0, sizeof(buf));
/* 512K for a line length seems reasonable */
buf.max_line_size = 512 * 1024;
@@ -201,15 +202,11 @@ static int parse_descfile(alpm_handle_t *handle, struct archive *a, alpm_pkg_t *
} else if(strcmp(key, "pkgdesc") == 0) {
STRDUP(newpkg->desc, ptr, return -1);
} else if(strcmp(key, "group") == 0) {
char *tmp = NULL;
STRDUP(tmp, ptr, return -1);
newpkg->groups = alpm_list_add(newpkg->groups, tmp);
newpkg->groups = alpm_list_add(newpkg->groups, strdup(ptr));
} else if(strcmp(key, "url") == 0) {
STRDUP(newpkg->url, ptr, return -1);
} else if(strcmp(key, "license") == 0) {
char *tmp = NULL;
STRDUP(tmp, ptr, return -1);
newpkg->licenses = alpm_list_add(newpkg->licenses, tmp);
newpkg->licenses = alpm_list_add(newpkg->licenses, strdup(ptr));
} else if(strcmp(key, "builddate") == 0) {
newpkg->builddate = _alpm_parsedate(ptr);
} else if(strcmp(key, "packager") == 0) {
@@ -311,7 +308,7 @@ int _alpm_pkg_validate_internal(alpm_handle_t *handle,
}
}
if(syncpkg && (!has_sig || !syncpkg->base64_sig)) {
if(syncpkg && !has_sig) {
if(syncpkg->md5sum && !syncpkg->sha256sum) {
_alpm_log(handle, ALPM_LOG_DEBUG, "md5sum: %s\n", syncpkg->md5sum);
_alpm_log(handle, ALPM_LOG_DEBUG, "checking md5sum for %s\n", pkgfile);
@@ -451,15 +448,18 @@ static int build_filelist_from_mtree(alpm_handle_t *handle, alpm_pkg_t *pkg, str
char *mtree_data = NULL;
struct archive *mtree;
struct archive_entry *mtree_entry = NULL;
alpm_filelist_t filelist = {0};
alpm_filelist_t filelist;
_alpm_log(handle, ALPM_LOG_DEBUG,
"found mtree for package %s, getting file list\n", pkg->filename);
memset(&filelist, 0, sizeof(alpm_filelist_t));
/* create a new archive to parse the mtree and load it from archive into memory */
/* TODO: split this into a function */
if((mtree = archive_read_new()) == NULL) {
GOTO_ERR(handle, ALPM_ERR_LIBARCHIVE, error);
handle->pm_errno = ALPM_ERR_LIBARCHIVE;
goto error;
}
_alpm_archive_read_support_filter_all(mtree);
@@ -478,7 +478,8 @@ static int build_filelist_from_mtree(alpm_handle_t *handle, alpm_pkg_t *pkg, str
if(size < 0) {
_alpm_log(handle, ALPM_LOG_DEBUG, _("error while reading package %s: %s\n"),
pkg->filename, archive_error_string(archive));
GOTO_ERR(handle, ALPM_ERR_LIBARCHIVE, error);
handle->pm_errno = ALPM_ERR_LIBARCHIVE;
goto error;
}
if(size == 0) {
break;
@@ -491,7 +492,8 @@ static int build_filelist_from_mtree(alpm_handle_t *handle, alpm_pkg_t *pkg, str
_alpm_log(handle, ALPM_LOG_DEBUG,
_("error while reading mtree of package %s: %s\n"),
pkg->filename, archive_error_string(mtree));
GOTO_ERR(handle, ALPM_ERR_LIBARCHIVE, error);
handle->pm_errno = ALPM_ERR_LIBARCHIVE;
goto error;
}
while((ret = archive_read_next_header(mtree, &mtree_entry)) == ARCHIVE_OK) {
@@ -514,7 +516,8 @@ static int build_filelist_from_mtree(alpm_handle_t *handle, alpm_pkg_t *pkg, str
if(ret != ARCHIVE_EOF && ret != ARCHIVE_OK) { /* An error occurred */
_alpm_log(handle, ALPM_LOG_DEBUG, _("error while reading mtree of package %s: %s\n"),
pkg->filename, archive_error_string(mtree));
GOTO_ERR(handle, ALPM_ERR_LIBARCHIVE, error);
handle->pm_errno = ALPM_ERR_LIBARCHIVE;
goto error;
}
/* throw away any files we loaded directly from the archive */
@@ -579,9 +582,11 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
newpkg = _alpm_pkg_new();
if(newpkg == NULL) {
GOTO_ERR(handle, ALPM_ERR_MEMORY, error);
handle->pm_errno = ALPM_ERR_MEMORY;
goto error;
}
STRDUP(newpkg->filename, pkgfile, GOTO_ERR(handle, ALPM_ERR_MEMORY, error));
STRDUP(newpkg->filename, pkgfile,
handle->pm_errno = ALPM_ERR_MEMORY; goto error);
newpkg->size = st.st_size;
_alpm_log(handle, ALPM_LOG_DEBUG, "starting package load for %s\n", pkgfile);
@@ -631,7 +636,8 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
if(archive_read_data_skip(archive)) {
_alpm_log(handle, ALPM_LOG_ERROR, _("error while reading package %s: %s\n"),
pkgfile, archive_error_string(archive));
GOTO_ERR(handle, ALPM_ERR_LIBARCHIVE, error);
handle->pm_errno = ALPM_ERR_LIBARCHIVE;
goto error;
}
/* if we are not doing a full read, see if we have all we need */
@@ -643,7 +649,8 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
if(ret != ARCHIVE_EOF && ret != ARCHIVE_OK) { /* An error occurred */
_alpm_log(handle, ALPM_LOG_ERROR, _("error while reading package %s: %s\n"),
pkgfile, archive_error_string(archive));
GOTO_ERR(handle, ALPM_ERR_LIBARCHIVE, error);
handle->pm_errno = ALPM_ERR_LIBARCHIVE;
goto error;
}
if(!config) {
@@ -656,7 +663,7 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
/* internal fields for package struct */
newpkg->origin = ALPM_PKG_FROM_FILE;
STRDUP(newpkg->origin_data.file, pkgfile, goto error);
newpkg->origin_data.file = strdup(pkgfile);
newpkg->ops = get_file_pkg_ops();
newpkg->handle = handle;
newpkg->infolevel = INFRQ_BASE | INFRQ_DESC | INFRQ_SCRIPTLET;
@@ -665,7 +672,8 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
if(full) {
if(newpkg->files.files) {
/* attempt to hand back any memory we don't need */
REALLOC(newpkg->files.files, sizeof(alpm_file_t) * newpkg->files.count, (void)0);
newpkg->files.files = realloc(newpkg->files.files,
sizeof(alpm_file_t) * newpkg->files.count);
/* "checking for conflicts" requires a sorted list, ensure that here */
_alpm_log(handle, ALPM_LOG_DEBUG,
"sorting package filelist for %s\n", pkgfile);
@@ -723,8 +731,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));
@@ -749,17 +755,9 @@ int SYMEXPORT alpm_pkg_load(alpm_handle_t *handle, const char *filename, int ful
for(k = keys; k; k = k->next) {
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, key) == -1) {
fail = 1;
}
_alpm_pkg_free(pkg_temp);
}
}
FREELIST(keys);

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-2018 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify
@@ -37,6 +37,7 @@
#include "alpm_list.h"
#include "package.h"
#include "handle.h"
#include "delta.h"
#include "deps.h"
#include "dload.h"
#include "filelist.h"
@@ -136,86 +137,178 @@ valid:
return 0;
}
int SYMEXPORT alpm_db_update(alpm_handle_t *handle, alpm_list_t *dbs, int force) {
/** Update a package database
*
* An update of the package database \a db will be attempted. Unless
* \a force is true, the update will only be performed if the remote
* database was modified since the last update.
*
* This operation requires a database lock, and will return an applicable error
* if the lock could not be obtained.
*
* Example:
* @code
* alpm_list_t *syncs = alpm_get_syncdbs();
* for(i = syncs; i; i = alpm_list_next(i)) {
* alpm_db_t *db = alpm_list_getdata(i);
* result = alpm_db_update(0, db);
*
* if(result < 0) {
* printf("Unable to update database: %s\n", alpm_strerrorlast());
* } else if(result == 1) {
* printf("Database already up to date\n");
* } else {
* printf("Database updated\n");
* }
* }
* @endcode
*
* @ingroup alpm_databases
* @note After a successful update, the \link alpm_db_get_pkgcache()
* package cache \endlink will be invalidated
* @param force if true, then forces the update, otherwise update only in case
* the database isn't up to date
* @param db pointer to the package database to update
* @return 0 on success, -1 on error (pm_errno is set accordingly), 1 if up to
* to date
*/
int SYMEXPORT alpm_db_update(int force, alpm_db_t *db)
{
char *syncpath;
const char *dbext = handle->dbext;
const char *dbext;
alpm_list_t *i;
int updated = 0;
int ret = -1;
mode_t oldmask;
alpm_list_t *payloads = NULL;
alpm_event_t event;
alpm_handle_t *handle;
int siglevel;
/* Sanity checks */
CHECK_HANDLE(handle, return -1);
ASSERT(dbs != NULL, return -1);
ASSERT(db != NULL, return -1);
handle = db->handle;
handle->pm_errno = ALPM_ERR_OK;
ASSERT(db != handle->db_local, RET_ERR(handle, ALPM_ERR_WRONG_ARGS, -1));
ASSERT(db->servers != NULL, RET_ERR(handle, ALPM_ERR_SERVER_NONE, -1));
if(!(db->usage & ALPM_DB_USAGE_SYNC)) {
return 0;
}
syncpath = get_sync_dir(handle);
ASSERT(syncpath != NULL, return -1);
if(!syncpath) {
return -1;
}
/* force update of invalid databases to fix potential mismatched database/signature */
if(db->status & DB_STATUS_INVALID) {
force = 1;
}
/* make sure we have a sane umask */
oldmask = umask(0022);
siglevel = alpm_db_get_siglevel(db);
/* attempt to grab a lock */
if(_alpm_handle_lock(handle)) {
GOTO_ERR(handle, ALPM_ERR_HANDLE_LOCK, cleanup);
free(syncpath);
umask(oldmask);
RET_ERR(handle, ALPM_ERR_HANDLE_LOCK, -1);
}
for(i = dbs; i; i = i->next) {
alpm_db_t *db = i->data;
int dbforce = force;
struct dload_payload *payload = NULL;
dbext = db->handle->dbext;
for(i = db->servers; i; i = i->next) {
const char *server = i->data, *final_db_url = NULL;
struct dload_payload payload;
size_t len;
int siglevel;
int sig_ret = 0;
if(!(db->usage & ALPM_DB_USAGE_SYNC)) {
continue;
}
memset(&payload, 0, sizeof(struct dload_payload));
ASSERT(db != handle->db_local, GOTO_ERR(handle, ALPM_ERR_WRONG_ARGS, cleanup));
ASSERT(db->servers != NULL, GOTO_ERR(handle, ALPM_ERR_SERVER_NONE, cleanup));
/* set hard upper limit of 25MiB */
payload.max_size = 25 * 1024 * 1024;
/* force update of invalid databases to fix potential mismatched database/signature */
if(db->status & DB_STATUS_INVALID) {
dbforce = 1;
}
siglevel = alpm_db_get_siglevel(db);
CALLOC(payload, 1, sizeof(*payload), GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
payload->servers = db->servers;
/* print server + filename into a buffer */
len = strlen(db->treename) + strlen(dbext) + 1;
MALLOC(payload->filepath, len,
FREE(payload); GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
snprintf(payload->filepath, len, "%s%s", db->treename, dbext);
payload->handle = handle;
payload->force = dbforce;
payload->unlink_on_fail = 1;
payload->download_signature = (siglevel & ALPM_SIG_DATABASE);
payload->signature_optional = (siglevel & ALPM_SIG_DATABASE_OPTIONAL);
/* set hard upper limit of 128 MiB */
payload->max_size = 128 * 1024 * 1024;
payloads = alpm_list_add(payloads, payload);
}
len = strlen(server) + strlen(db->treename) + strlen(dbext) + 2;
MALLOC(payload.fileurl, len,
{
free(syncpath);
umask(oldmask);
RET_ERR(handle, ALPM_ERR_MEMORY, -1);
}
);
snprintf(payload.fileurl, len, "%s/%s%s", server, db->treename, dbext);
payload.handle = handle;
payload.force = force;
payload.unlink_on_fail = 1;
event.type = ALPM_EVENT_DB_RETRIEVE_START;
EVENT(handle, &event);
ret = _alpm_download(handle, payloads, syncpath);
if(ret < 0) {
event.type = ALPM_EVENT_DB_RETRIEVE_FAILED;
EVENT(handle, &event);
goto cleanup;
}
event.type = ALPM_EVENT_DB_RETRIEVE_DONE;
EVENT(handle, &event);
ret = _alpm_download(&payload, syncpath, NULL, &final_db_url);
_alpm_dload_payload_reset(&payload);
updated = (updated || ret == 0);
for(i = dbs; i; i = i->next) {
alpm_db_t *db = i->data;
if(!(db->usage & ALPM_DB_USAGE_SYNC)) {
continue;
if(ret != -1 && updated && (siglevel & ALPM_SIG_DATABASE)) {
/* an existing sig file is no good at this point */
char *sigpath = _alpm_sigpath(handle, _alpm_db_path(db));
if(!sigpath) {
ret = -1;
break;
}
unlink(sigpath);
free(sigpath);
/* check if the final URL from internal downloader looks reasonable */
if(final_db_url != NULL) {
if(strlen(final_db_url) < 3
|| strcmp(final_db_url + strlen(final_db_url) - strlen(dbext),
dbext) != 0) {
final_db_url = NULL;
}
}
/* if we downloaded a DB, we want the .sig from the same server */
if(final_db_url != NULL) {
/* print final_db_url into a buffer (leave space for .sig) */
len = strlen(final_db_url) + 5;
} else {
/* print server + filename into a buffer (leave space for separator and .sig) */
len = strlen(server) + strlen(db->treename) + strlen(dbext) + 6;
}
MALLOC(payload.fileurl, len,
{
free(syncpath);
umask(oldmask);
RET_ERR(handle, ALPM_ERR_MEMORY, -1);
}
);
if(final_db_url != NULL) {
snprintf(payload.fileurl, len, "%s.sig", final_db_url);
} else {
snprintf(payload.fileurl, len, "%s/%s%s.sig", server, db->treename, dbext);
}
payload.handle = handle;
payload.force = 1;
payload.errors_ok = (siglevel & ALPM_SIG_DATABASE_OPTIONAL);
/* set hard upper limit of 16KiB */
payload.max_size = 16 * 1024;
sig_ret = _alpm_download(&payload, syncpath, NULL, NULL);
/* errors_ok suppresses error messages, but not the return code */
sig_ret = payload.errors_ok ? 0 : sig_ret;
_alpm_dload_payload_reset(&payload);
}
if(ret != -1 && sig_ret != -1) {
break;
}
}
if(updated) {
/* Cache needs to be rebuilt */
_alpm_db_free_pkgcache(db);
@@ -226,29 +319,21 @@ int SYMEXPORT alpm_db_update(alpm_handle_t *handle, alpm_list_t *dbs, int force)
db->status &= ~DB_STATUS_MISSING;
/* if the download failed skip validation to preserve the download error */
if(sync_db_validate(db) != 0) {
_alpm_log(handle, ALPM_LOG_DEBUG, "failed to validate db: %s\n",
db->treename);
if(ret != -1 && sync_db_validate(db) != 0) {
/* pm_errno should be set */
ret = -1;
}
}
cleanup:
_alpm_handle_unlock(handle);
if(ret == -1) {
/* pm_errno was set by the download code */
_alpm_log(handle, ALPM_LOG_DEBUG, "failed to sync dbs: %s\n",
_alpm_log(handle, ALPM_LOG_DEBUG, "failed to sync db: %s\n",
alpm_strerror(handle->pm_errno));
} else {
handle->pm_errno = ALPM_ERR_OK;
}
if(payloads) {
alpm_list_free_inner(payloads, (alpm_list_fn_free)_alpm_dload_payload_reset);
FREELIST(payloads);
}
_alpm_handle_unlock(handle);
free(syncpath);
umask(oldmask);
return ret;
@@ -342,8 +427,9 @@ static alpm_pkg_t *load_pkg_for_entry(alpm_db_t *db, const char *entryname,
/* This function doesn't work as well as one might think, as size of database
* entries varies considerably. Adding signatures nearly doubles the size of a
* single entry. These current values are heavily influenced by Arch Linux;
* databases with a single signature per package. */
* single entry; deltas also can make for large variations in size. These
* current values are heavily influenced by Arch Linux; databases with no
* deltas and a single signature per package. */
static size_t estimate_package_count(struct stat *st, struct archive *archive)
{
int per_package;
@@ -417,14 +503,15 @@ static int sync_db_populate(alpm_db_t *db)
db->pkgcache = _alpm_pkghash_create(est_count);
if(db->pkgcache == NULL) {
db->handle->pm_errno = ALPM_ERR_MEMORY;
ret = -1;
GOTO_ERR(db->handle, ALPM_ERR_MEMORY, cleanup);
goto cleanup;
}
while((archive_ret = archive_read_next_header(archive, &entry)) == ARCHIVE_OK) {
mode_t mode = archive_entry_mode(entry);
if(!S_ISDIR(mode)) {
/* we have desc or depends - parse it */
/* we have desc, depends or deltas - parse it */
if(sync_db_read(db, archive, entry, &pkg) != 0) {
_alpm_log(db->handle, ALPM_LOG_ERROR,
_("could not parse package description file '%s' from db '%s'\n"),
@@ -437,8 +524,9 @@ static int sync_db_populate(alpm_db_t *db)
_alpm_log(db->handle, ALPM_LOG_ERROR, _("could not read db '%s' (%s)\n"),
db->treename, archive_error_string(archive));
_alpm_db_free_pkgcache(db);
db->handle->pm_errno = ALPM_ERR_LIBARCHIVE;
ret = -1;
GOTO_ERR(db->handle, ALPM_ERR_LIBARCHIVE, cleanup);
goto cleanup;
}
count = alpm_list_count(db->pkgcache->list);
@@ -515,7 +603,7 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
{
const char *entryname, *filename;
alpm_pkg_t *pkg;
struct archive_read_buffer buf = {0};
struct archive_read_buffer buf;
entryname = archive_entry_pathname(entry);
if(entryname == NULL) {
@@ -527,6 +615,7 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
_alpm_log(db->handle, ALPM_LOG_FUNCTION, "loading package data from archive entry %s\n",
entryname);
memset(&buf, 0, sizeof(buf));
/* 512K for a line length seems reasonable */
buf.max_line_size = 512 * 1024;
@@ -548,7 +637,8 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
}
if(strcmp(filename, "desc") == 0 || strcmp(filename, "depends") == 0
|| strcmp(filename, "files") == 0) {
|| strcmp(filename, "files") == 0
|| (strcmp(filename, "deltas") == 0 && db->handle->deltaratio > 0.0) ) {
int ret;
while((ret = _alpm_archive_fgets(archive, &buf)) == ARCHIVE_OK) {
char *line = buf.line;
@@ -610,13 +700,29 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
} else if(strcmp(line, "%OPTDEPENDS%") == 0) {
READ_AND_SPLITDEP(pkg->optdepends);
} else if(strcmp(line, "%MAKEDEPENDS%") == 0) {
READ_AND_SPLITDEP(pkg->makedepends);
/* currently unused */
while(1) {
READ_NEXT();
if(strlen(line) == 0) break;
}
} else if(strcmp(line, "%CHECKDEPENDS%") == 0) {
READ_AND_SPLITDEP(pkg->checkdepends);
/* currently unused */
while(1) {
READ_NEXT();
if(strlen(line) == 0) break;
}
} else if(strcmp(line, "%CONFLICTS%") == 0) {
READ_AND_SPLITDEP(pkg->conflicts);
} else if(strcmp(line, "%PROVIDES%") == 0) {
READ_AND_SPLITDEP(pkg->provides);
} else if(strcmp(line, "%DELTAS%") == 0) {
/* Different than the rest because of the _alpm_delta_parse call. */
while(1) {
READ_NEXT();
if(strlen(line) == 0) break;
pkg->deltas = alpm_list_add(pkg->deltas,
_alpm_delta_parse(db->handle, line));
}
} else if(strcmp(line, "%FILES%") == 0) {
/* TODO: this could lazy load if there is future demand */
size_t files_count = 0, files_size = 0;
@@ -640,7 +746,7 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
}
/* attempt to hand back any memory we don't need */
if(files_count > 0) {
REALLOC(files, sizeof(alpm_file_t) * files_count, (void)0);
files = realloc(files, sizeof(alpm_file_t) * files_count);
} else {
FREE(files);
}
@@ -653,6 +759,8 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
goto error;
}
*likely_pkg = pkg;
} else if(strcmp(filename, "deltas") == 0) {
/* skip reading delta files if UseDelta is unset */
} else {
/* unknown database file */
_alpm_log(db->handle, ALPM_LOG_DEBUG, "unknown database file: %s\n", filename);
@@ -680,7 +788,7 @@ alpm_db_t *_alpm_db_register_sync(alpm_handle_t *handle, const char *treename,
#ifndef HAVE_LIBGPGME
if(level != 0 && level != ALPM_SIG_USE_DEFAULT) {
RET_ERR(handle, ALPM_ERR_MISSING_CAPABILITY_SIGNATURES, NULL);
RET_ERR(handle, ALPM_ERR_WRONG_ARGS, NULL);
}
#endif

View File

@@ -1,7 +1,7 @@
/*
* conflict.c
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@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>
@@ -63,6 +63,9 @@ error:
return NULL;
}
/**
* @brief Free a conflict and its members.
*/
void SYMEXPORT alpm_conflict_free(alpm_conflict_t *conflict)
{
ASSERT(conflict != NULL, return);
@@ -240,6 +243,14 @@ alpm_list_t *_alpm_outerconflicts(alpm_db_t *db, alpm_list_t *packages)
return baddeps;
}
/**
* @brief Check the package conflicts in a database
*
* @param handle the context handle
* @param pkglist the list of packages to check
*
* @return an alpm_list_t of alpm_conflict_t
*/
alpm_list_t SYMEXPORT *alpm_checkconflicts(alpm_handle_t *handle,
alpm_list_t *pkglist)
{
@@ -289,6 +300,9 @@ error:
RET_ERR(handle, ALPM_ERR_MEMORY, conflicts);
}
/**
* @brief Frees a conflict and its members.
*/
void SYMEXPORT alpm_fileconflict_free(alpm_fileconflict_t *conflict)
{
ASSERT(conflict != NULL, return);
@@ -387,7 +401,8 @@ static alpm_pkg_t *_alpm_find_file_owner(alpm_handle_t *handle, const char *path
static int _alpm_can_overwrite_file(alpm_handle_t *handle, const char *path, const char *rootedpath)
{
return _alpm_fnmatch_patterns(handle->overwrite_files, path) == 0
return handle->trans->flags & ALPM_TRANS_FLAG_FORCE
|| _alpm_fnmatch_patterns(handle->overwrite_files, path) == 0
|| _alpm_fnmatch_patterns(handle->overwrite_files, rootedpath) == 0;
}

View File

@@ -1,7 +1,7 @@
/*
* conflict.h
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@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-2018 Pacman Development Team <pacman-dev@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>
@@ -37,6 +37,12 @@
#include "package.h"
#include "group.h"
/** \addtogroup alpm_databases Database Functions
* @brief Functions to query and manipulate the database of libalpm
* @{
*/
/** Register a sync database of packages. */
alpm_db_t SYMEXPORT *alpm_register_syncdb(alpm_handle_t *handle,
const char *treename, int siglevel)
{
@@ -75,6 +81,7 @@ void _alpm_db_unregister(alpm_db_t *db)
_alpm_db_free(db);
}
/** Unregister all package databases. */
int SYMEXPORT alpm_unregister_all_syncdbs(alpm_handle_t *handle)
{
alpm_list_t *i;
@@ -95,6 +102,7 @@ int SYMEXPORT alpm_unregister_all_syncdbs(alpm_handle_t *handle)
return 0;
}
/** Unregister a package database. */
int SYMEXPORT alpm_db_unregister(alpm_db_t *db)
{
int found = 0;
@@ -131,12 +139,14 @@ int SYMEXPORT alpm_db_unregister(alpm_db_t *db)
return 0;
}
/** Get the serverlist of a database. */
alpm_list_t SYMEXPORT *alpm_db_get_servers(const alpm_db_t *db)
{
ASSERT(db != NULL, return NULL);
return db->servers;
}
/** Set the serverlist of a database. */
int SYMEXPORT alpm_db_set_servers(alpm_db_t *db, alpm_list_t *servers)
{
ASSERT(db != NULL, return -1);
@@ -158,6 +168,11 @@ static char *sanitize_url(const char *url)
return newurl;
}
/** Add a download server to a database.
* @param db database pointer
* @param url url of the server
* @return 0 on success, -1 on error (pm_errno is set accordingly)
*/
int SYMEXPORT alpm_db_add_server(alpm_db_t *db, const char *url)
{
char *newurl;
@@ -178,6 +193,12 @@ int SYMEXPORT alpm_db_add_server(alpm_db_t *db, const char *url)
return 0;
}
/** Remove a download server from a database.
* @param db database pointer
* @param url url of the server
* @return 0 on success, 1 on server not present,
* -1 on error (pm_errno is set accordingly)
*/
int SYMEXPORT alpm_db_remove_server(alpm_db_t *db, const char *url)
{
char *newurl, *vdata = NULL;
@@ -206,12 +227,14 @@ int SYMEXPORT alpm_db_remove_server(alpm_db_t *db, const char *url)
return ret;
}
/** Get the name of a package database. */
const char SYMEXPORT *alpm_db_get_name(const alpm_db_t *db)
{
ASSERT(db != NULL, return NULL);
return db->treename;
}
/** Get the signature verification level for a database. */
int SYMEXPORT alpm_db_get_siglevel(alpm_db_t *db)
{
ASSERT(db != NULL, return -1);
@@ -222,6 +245,7 @@ int SYMEXPORT alpm_db_get_siglevel(alpm_db_t *db)
}
}
/** Check the validity of a database. */
int SYMEXPORT alpm_db_get_valid(alpm_db_t *db)
{
ASSERT(db != NULL, return -1);
@@ -229,6 +253,7 @@ int SYMEXPORT alpm_db_get_valid(alpm_db_t *db)
return db->ops->validate(db);
}
/** Get a package entry from a package database. */
alpm_pkg_t SYMEXPORT *alpm_db_get_pkg(alpm_db_t *db, const char *name)
{
alpm_pkg_t *pkg;
@@ -244,6 +269,7 @@ alpm_pkg_t SYMEXPORT *alpm_db_get_pkg(alpm_db_t *db, const char *name)
return pkg;
}
/** Get the package cache of a package database. */
alpm_list_t SYMEXPORT *alpm_db_get_pkgcache(alpm_db_t *db)
{
ASSERT(db != NULL, return NULL);
@@ -251,6 +277,7 @@ alpm_list_t SYMEXPORT *alpm_db_get_pkgcache(alpm_db_t *db)
return _alpm_db_get_pkgcache(db);
}
/** Get a group entry from a package database. */
alpm_group_t SYMEXPORT *alpm_db_get_group(alpm_db_t *db, const char *name)
{
ASSERT(db != NULL, return NULL);
@@ -261,6 +288,7 @@ alpm_group_t SYMEXPORT *alpm_db_get_group(alpm_db_t *db, const char *name)
return _alpm_db_get_groupfromcache(db, name);
}
/** Get the group cache of a package database. */
alpm_list_t SYMEXPORT *alpm_db_get_groupcache(alpm_db_t *db)
{
ASSERT(db != NULL, return NULL);
@@ -269,16 +297,16 @@ alpm_list_t SYMEXPORT *alpm_db_get_groupcache(alpm_db_t *db)
return _alpm_db_get_groupcache(db);
}
int SYMEXPORT alpm_db_search(alpm_db_t *db, const alpm_list_t *needles,
alpm_list_t **ret)
/** Searches a database. */
alpm_list_t SYMEXPORT *alpm_db_search(alpm_db_t *db, const alpm_list_t *needles)
{
ASSERT(db != NULL && ret != NULL && *ret == NULL,
RET_ERR(db->handle, ALPM_ERR_WRONG_ARGS, -1));
ASSERT(db != NULL, return NULL);
db->handle->pm_errno = ALPM_ERR_OK;
return _alpm_db_search(db, needles, ret);
return _alpm_db_search(db, needles);
}
/** Sets the usage bitmask for a repo */
int SYMEXPORT alpm_db_set_usage(alpm_db_t *db, int usage)
{
ASSERT(db != NULL, return -1);
@@ -286,6 +314,7 @@ int SYMEXPORT alpm_db_set_usage(alpm_db_t *db, int usage)
return 0;
}
/** Gets the usage bitmask for a repo */
int SYMEXPORT alpm_db_get_usage(alpm_db_t *db, int *usage)
{
ASSERT(db != NULL, return -1);
@@ -294,6 +323,9 @@ int SYMEXPORT alpm_db_get_usage(alpm_db_t *db, int *usage)
return 0;
}
/** @} */
alpm_db_t *_alpm_db_new(const char *treename, int is_local)
{
alpm_db_t *db;
@@ -364,13 +396,13 @@ int _alpm_db_cmp(const void *d1, const void *d2)
return strcmp(db1->treename, db2->treename);
}
int _alpm_db_search(alpm_db_t *db, const alpm_list_t *needles,
alpm_list_t **ret)
alpm_list_t *_alpm_db_search(alpm_db_t *db, const alpm_list_t *needles)
{
const alpm_list_t *i, *j, *k;
alpm_list_t *ret = NULL;
if(!(db->usage & ALPM_DB_USAGE_SEARCH)) {
return 0;
return NULL;
}
/* copy the pkgcache- we will free the list var after each needle */
@@ -383,15 +415,12 @@ int _alpm_db_search(alpm_db_t *db, const alpm_list_t *needles,
if(i->data == NULL) {
continue;
}
*ret = NULL;
ret = NULL;
targ = i->data;
_alpm_log(db->handle, ALPM_LOG_DEBUG, "searching for target '%s'\n", targ);
if(regcomp(&reg, targ, REG_EXTENDED | REG_NOSUB | REG_ICASE | REG_NEWLINE) != 0) {
db->handle->pm_errno = ALPM_ERR_INVALID_REGEX;
alpm_list_free(list);
alpm_list_free(*ret);
return -1;
RET_ERR(db->handle, ALPM_ERR_INVALID_REGEX, NULL);
}
for(j = list; j; j = j->next) {
@@ -434,18 +463,18 @@ int _alpm_db_search(alpm_db_t *db, const alpm_list_t *needles,
_alpm_log(db->handle, ALPM_LOG_DEBUG,
"search target '%s' matched '%s' on package '%s'\n",
targ, matched, name);
*ret = alpm_list_add(*ret, pkg);
ret = alpm_list_add(ret, pkg);
}
}
/* Free the existing search list, and use the returned list for the
* next needle. This allows for AND-based package searching. */
alpm_list_free(list);
list = *ret;
list = ret;
regfree(&reg);
}
return 0;
return ret;
}
/* Returns a new package cache from db.

View File

@@ -1,7 +1,7 @@
/*
* db.h
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@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>
@@ -87,8 +87,7 @@ alpm_db_t *_alpm_db_new(const char *treename, int is_local);
void _alpm_db_free(alpm_db_t *db);
const char *_alpm_db_path(alpm_db_t *db);
int _alpm_db_cmp(const void *d1, const void *d2);
int _alpm_db_search(alpm_db_t *db, const alpm_list_t *needles,
alpm_list_t **ret);
alpm_list_t *_alpm_db_search(alpm_db_t *db, const alpm_list_t *needles);
alpm_db_t *_alpm_db_register_local(alpm_handle_t *handle);
alpm_db_t *_alpm_db_register_sync(alpm_handle_t *handle, const char *treename,
int level);

361
lib/libalpm/delta.c Normal file
View File

@@ -0,0 +1,361 @@
/*
* delta.c
*
* Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2007-2006 by Judd Vinet <jvinet@zeroflux.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
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdlib.h>
#include <string.h>
#include <stdint.h> /* intmax_t */
#include <limits.h>
#include <sys/types.h>
#include <regex.h>
/* libalpm */
#include "delta.h"
#include "alpm_list.h"
#include "util.h"
#include "log.h"
#include "graph.h"
static alpm_list_t *graph_init(alpm_list_t *deltas, int reverse)
{
alpm_list_t *i, *j;
alpm_list_t *vertices = NULL;
/* create the vertices */
for(i = deltas; i; i = i->next) {
alpm_graph_t *v = _alpm_graph_new();
if(!v) {
alpm_list_free(vertices);
return NULL;
}
alpm_delta_t *vdelta = i->data;
vdelta->download_size = vdelta->delta_size;
v->weight = LONG_MAX;
v->data = vdelta;
vertices = alpm_list_add(vertices, v);
}
/* compute the edges */
for(i = vertices; i; i = i->next) {
alpm_graph_t *v_i = i->data;
alpm_delta_t *d_i = v_i->data;
/* loop a second time so we make all possible comparisons */
for(j = vertices; j; j = j->next) {
alpm_graph_t *v_j = j->data;
alpm_delta_t *d_j = v_j->data;
/* We want to create a delta tree like the following:
* 1_to_2
* |
* 1_to_3 2_to_3
* \ /
* 3_to_4
* If J 'from' is equal to I 'to', then J is a child of I.
* */
if((!reverse && strcmp(d_j->from, d_i->to) == 0) ||
(reverse && strcmp(d_j->to, d_i->from) == 0)) {
v_i->children = alpm_list_add(v_i->children, v_j);
}
}
v_i->iterator = v_i->children;
}
return vertices;
}
static void graph_init_size(alpm_handle_t *handle, alpm_list_t *vertices)
{
alpm_list_t *i;
for(i = vertices; i; i = i->next) {
char *fpath, *md5sum;
alpm_graph_t *v = i->data;
alpm_delta_t *vdelta = v->data;
/* determine whether the delta file already exists */
fpath = _alpm_filecache_find(handle, vdelta->delta);
if(fpath) {
md5sum = alpm_compute_md5sum(fpath);
if(md5sum && strcmp(md5sum, vdelta->delta_md5) == 0) {
vdelta->download_size = 0;
}
FREE(md5sum);
FREE(fpath);
} else {
char *fnamepart;
CALLOC(fnamepart, strlen(vdelta->delta) + 6, sizeof(char), return);
sprintf(fnamepart, "%s.part", vdelta->delta);
fpath = _alpm_filecache_find(handle, fnamepart);
if(fpath) {
struct stat st;
if(stat(fpath, &st) == 0) {
vdelta->download_size = vdelta->delta_size - st.st_size;
vdelta->download_size = vdelta->download_size < 0 ? 0 : vdelta->download_size;
}
FREE(fpath);
}
FREE(fnamepart);
}
/* determine whether a base 'from' file exists */
fpath = _alpm_filecache_find(handle, vdelta->from);
if(fpath) {
v->weight = vdelta->download_size;
}
FREE(fpath);
}
}
static void dijkstra(alpm_list_t *vertices)
{
alpm_list_t *i;
alpm_graph_t *v;
while(1) {
v = NULL;
/* find the smallest vertice not visited yet */
for(i = vertices; i; i = i->next) {
alpm_graph_t *v_i = i->data;
if(v_i->state == ALPM_GRAPH_STATE_PROCESSING) {
continue;
}
if(v == NULL || v_i->weight < v->weight) {
v = v_i;
}
}
if(v == NULL || v->weight == LONG_MAX) {
break;
}
v->state = ALPM_GRAPH_STATE_PROCESSING;
v->iterator = v->children;
while(v->iterator) {
alpm_graph_t *v_c = v->iterator->data;
alpm_delta_t *d_c = v_c->data;
if(v_c->weight > v->weight + d_c->download_size) {
v_c->weight = v->weight + d_c->download_size;
v_c->parent = v;
}
v->iterator = (v->iterator)->next;
}
}
}
static off_t shortest_path(alpm_list_t *vertices, const char *to, alpm_list_t **path)
{
alpm_list_t *i;
alpm_graph_t *v = NULL;
off_t bestsize = 0;
alpm_list_t *rpath = NULL;
for(i = vertices; i; i = i->next) {
alpm_graph_t *v_i = i->data;
alpm_delta_t *d_i = v_i->data;
if(strcmp(d_i->to, to) == 0) {
if(v == NULL || v_i->weight < v->weight) {
v = v_i;
bestsize = v->weight;
}
}
}
while(v != NULL) {
alpm_delta_t *vdelta = v->data;
rpath = alpm_list_add(rpath, vdelta);
v = v->parent;
}
*path = alpm_list_reverse(rpath);
alpm_list_free(rpath);
return bestsize;
}
/** Calculates the shortest path from one version to another.
* The shortest path is defined as the path with the smallest combined
* size, not the length of the path.
* @param handle the context handle
* @param deltas the list of alpm_delta_t * objects that a file has
* @param to the file to start the search at
* @param path the pointer to a list location where alpm_delta_t * objects that
* have the smallest size are placed. NULL is set if there is no path
* possible with the files available.
* @return the size of the path stored, or LONG_MAX if path is unfindable
*/
off_t _alpm_shortest_delta_path(alpm_handle_t *handle, alpm_list_t *deltas,
const char *to, alpm_list_t **path)
{
alpm_list_t *bestpath = NULL;
alpm_list_t *vertices;
off_t bestsize = LONG_MAX;
if(deltas == NULL) {
*path = NULL;
return bestsize;
}
_alpm_log(handle, ALPM_LOG_DEBUG, "started delta shortest-path search for '%s'\n", to);
vertices = graph_init(deltas, 0);
graph_init_size(handle, vertices);
dijkstra(vertices);
bestsize = shortest_path(vertices, to, &bestpath);
_alpm_log(handle, ALPM_LOG_DEBUG, "delta shortest-path search complete : '%jd'\n", (intmax_t)bestsize);
alpm_list_free_inner(vertices, _alpm_graph_free);
alpm_list_free(vertices);
*path = bestpath;
return bestsize;
}
static alpm_list_t *find_unused(alpm_list_t *deltas, const char *to, off_t quota)
{
alpm_list_t *unused = NULL;
alpm_list_t *vertices;
alpm_list_t *i;
vertices = graph_init(deltas, 1);
for(i = vertices; i; i = i->next) {
alpm_graph_t *v = i->data;
alpm_delta_t *vdelta = v->data;
if(strcmp(vdelta->to, to) == 0) {
v->weight = vdelta->download_size;
}
}
dijkstra(vertices);
for(i = vertices; i; i = i->next) {
alpm_graph_t *v = i->data;
alpm_delta_t *vdelta = v->data;
if(v->weight > quota) {
unused = alpm_list_add(unused, vdelta->delta);
}
}
alpm_list_free_inner(vertices, _alpm_graph_free);
alpm_list_free(vertices);
return unused;
}
/** \addtogroup alpm_deltas Delta Functions
* @brief Functions to manipulate libalpm deltas
* @{
*/
alpm_list_t SYMEXPORT *alpm_pkg_unused_deltas(alpm_pkg_t *pkg)
{
ASSERT(pkg != NULL, return NULL);
return find_unused(pkg->deltas, pkg->filename,
pkg->size * pkg->handle->deltaratio);
}
/** @} */
#define NUM_MATCHES 6
/** Parses the string representation of a alpm_delta_t object.
* This function assumes that the string is in the correct format.
* This format is as follows:
* $deltafile $deltamd5 $deltasize $oldfile $newfile
* @param handle the context handle
* @param line the string to parse
* @return A pointer to the new alpm_delta_t object
*/
alpm_delta_t *_alpm_delta_parse(alpm_handle_t *handle, const char *line)
{
alpm_delta_t *delta;
size_t len;
regmatch_t pmatch[NUM_MATCHES];
char filesize[32];
/* this is so we only have to compile the pattern once */
if(!handle->delta_regex_compiled) {
/* $deltafile $deltamd5 $deltasize $oldfile $newfile*/
regcomp(&handle->delta_regex,
"^([^[:space:]]+) ([[:xdigit:]]{32}) ([[:digit:]]+)"
" ([^[:space:]]+) ([^[:space:]]+)$",
REG_EXTENDED | REG_NEWLINE);
handle->delta_regex_compiled = 1;
}
if(regexec(&handle->delta_regex, line, NUM_MATCHES, pmatch, 0) != 0) {
/* delta line is invalid, return NULL */
return NULL;
}
CALLOC(delta, 1, sizeof(alpm_delta_t), return NULL);
/* start at index 1 -- match 0 is the entire match */
len = pmatch[1].rm_eo - pmatch[1].rm_so;
STRNDUP(delta->delta, &line[pmatch[1].rm_so], len, goto error);
len = pmatch[2].rm_eo - pmatch[2].rm_so;
STRNDUP(delta->delta_md5, &line[pmatch[2].rm_so], len, goto error);
len = pmatch[3].rm_eo - pmatch[3].rm_so;
if(len < sizeof(filesize)) {
strncpy(filesize, &line[pmatch[3].rm_so], len);
filesize[len] = '\0';
delta->delta_size = _alpm_strtoofft(filesize);
}
len = pmatch[4].rm_eo - pmatch[4].rm_so;
STRNDUP(delta->from, &line[pmatch[4].rm_so], len, goto error);
len = pmatch[5].rm_eo - pmatch[5].rm_so;
STRNDUP(delta->to, &line[pmatch[5].rm_so], len, goto error);
return delta;
error:
_alpm_delta_free(delta);
return NULL;
}
#undef NUM_MATCHES
void _alpm_delta_free(alpm_delta_t *delta)
{
ASSERT(delta != NULL, return);
FREE(delta->delta);
FREE(delta->delta_md5);
FREE(delta->from);
FREE(delta->to);
FREE(delta);
}
alpm_delta_t *_alpm_delta_dup(const alpm_delta_t *delta)
{
alpm_delta_t *newdelta;
CALLOC(newdelta, 1, sizeof(alpm_delta_t), return NULL);
STRDUP(newdelta->delta, delta->delta, goto error);
STRDUP(newdelta->delta_md5, delta->delta_md5, goto error);
STRDUP(newdelta->from, delta->from, goto error);
STRDUP(newdelta->to, delta->to, goto error);
newdelta->delta_size = delta->delta_size;
newdelta->download_size = delta->download_size;
return newdelta;
error:
_alpm_delta_free(newdelta);
return NULL;
}

33
lib/libalpm/delta.h Normal file
View File

@@ -0,0 +1,33 @@
/*
* delta.h
*
* Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2007-2006 by Judd Vinet <jvinet@zeroflux.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
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* 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_DELTA_H
#define ALPM_DELTA_H
#include <sys/types.h> /* off_t */
#include "alpm.h"
alpm_delta_t *_alpm_delta_parse(alpm_handle_t *handle, const char *line);
void _alpm_delta_free(alpm_delta_t *delta);
alpm_delta_t *_alpm_delta_dup(const alpm_delta_t *delta);
off_t _alpm_shortest_delta_path(alpm_handle_t *handle, alpm_list_t *deltas,
const char *to, alpm_list_t **path);
#endif /* ALPM_DELTA_H */

View File

@@ -1,7 +1,7 @@
/*
* deps.c
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@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>
@@ -286,6 +286,12 @@ static int no_dep_version(alpm_handle_t *handle)
return (handle->trans->flags & ALPM_TRANS_FLAG_NODEPVERSION);
}
/** Find a package satisfying a specified dependency.
* The dependency can include versions with depmod operators.
* @param pkgs an alpm_list_t* of alpm_pkg_t where the satisfier will be searched
* @param depstring package or provision name, versioned or not
* @return a alpm_pkg_t* satisfying depstring
*/
alpm_pkg_t SYMEXPORT *alpm_find_satisfier(alpm_list_t *pkgs, const char *depstring)
{
alpm_depend_t *dep = alpm_dep_from_string(depstring);
@@ -297,6 +303,15 @@ alpm_pkg_t SYMEXPORT *alpm_find_satisfier(alpm_list_t *pkgs, const char *depstri
return pkg;
}
/** Checks dependencies and returns missing ones in a list.
* Dependencies can include versions with depmod operators.
* @param handle the context handle
* @param pkglist the list of local packages
* @param remove an alpm_list_t* of packages to be removed
* @param upgrade an alpm_list_t* of packages to be upgraded (remove-then-upgrade)
* @param reversedeps handles the backward dependencies
* @return an alpm_list_t* of alpm_depmissing_t pointers.
*/
alpm_list_t SYMEXPORT *alpm_checkdeps(alpm_handle_t *handle,
alpm_list_t *pkglist, alpm_list_t *rem, alpm_list_t *upgrade,
int reversedeps)
@@ -628,9 +643,10 @@ int _alpm_recursedeps(alpm_db_t *db, alpm_list_t **targs, int include_explicit)
* @param dep is the dependency to search for
* @param dbs are the databases to search
* @param excluding are the packages to exclude from the search
* @param prompt if true, ask an alpm_question_install_ignorepkg_t to decide
* if ignored packages should be installed; if false, skip ignored
* packages.
* @param prompt if true, will cause an unresolvable dependency to issue an
* interactive prompt asking whether the package should be removed from
* the transaction or the transaction aborted; if false, simply returns
* an error code without prompting
* @return the resolved package
**/
static alpm_pkg_t *resolvedep(alpm_handle_t *handle, alpm_depend_t *dep,
@@ -683,8 +699,7 @@ static alpm_pkg_t *resolvedep(alpm_handle_t *handle, alpm_depend_t *dep,
for(j = _alpm_db_get_pkgcache(db); j; j = j->next) {
alpm_pkg_t *pkg = j->data;
if((pkg->name_hash != dep->name_hash || strcmp(pkg->name, dep->name) != 0)
&& _alpm_depcmp_provides(dep, alpm_pkg_get_provides(pkg))
&& !alpm_pkg_find(excluding, pkg->name)) {
&& _alpm_depcmp(pkg, dep) && !alpm_pkg_find(excluding, pkg->name)) {
if(alpm_pkg_should_ignore(handle, pkg)) {
alpm_question_install_ignorepkg_t question = {
.type = ALPM_QUESTION_INSTALL_IGNOREPKG,
@@ -704,19 +719,20 @@ static alpm_pkg_t *resolvedep(alpm_handle_t *handle, alpm_depend_t *dep,
}
_alpm_log(handle, ALPM_LOG_DEBUG, "provider found (%s provides %s)\n",
pkg->name, dep->name);
/* provide is already installed so return early instead of prompting later */
if(_alpm_db_get_pkgfromcache(handle->db_local, pkg->name)) {
alpm_list_free(providers);
return pkg;
}
providers = alpm_list_add(providers, pkg);
/* keep looking for other providers in the all dbs */
}
}
}
/* first check if one provider is already installed locally */
for(i = providers; i; i = i->next) {
alpm_pkg_t *pkg = i->data;
if(_alpm_db_get_pkgfromcache(handle->db_local, pkg->name)) {
alpm_list_free(providers);
return pkg;
}
}
count = alpm_list_count(providers);
if(count >= 1) {
alpm_question_select_provider_t question = {
@@ -748,6 +764,15 @@ static alpm_pkg_t *resolvedep(alpm_handle_t *handle, alpm_depend_t *dep,
return NULL;
}
/** Find a package satisfying a specified dependency.
* First look for a literal, going through each db one by one. Then look for
* providers. The first satisfier found is returned.
* The dependency can include versions with depmod operators.
* @param handle the context handle
* @param dbs an alpm_list_t* of alpm_db_t where the satisfier will be searched
* @param depstring package or provision name, versioned or not
* @return a alpm_pkg_t* satisfying depstring
*/
alpm_pkg_t SYMEXPORT *alpm_find_dbs_satisfier(alpm_handle_t *handle,
alpm_list_t *dbs, const char *depstring)
{
@@ -862,6 +887,11 @@ int _alpm_resolvedeps(alpm_handle_t *handle, alpm_list_t *localpkgs,
return ret;
}
/** Reverse of splitdep; make a dep string from a alpm_depend_t struct.
* The string must be freed!
* @param dep the depend to turn into a string
* @return a string-formatted dependency with operator if necessary
*/
char SYMEXPORT *alpm_dep_compute_string(const alpm_depend_t *dep)
{
const char *name, *opr, *ver, *desc_delim, *desc;

View File

@@ -1,7 +1,7 @@
/*
* deps.h
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@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-2018 Pacman Development Team <pacman-dev@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
@@ -359,7 +359,7 @@ static int check_mountpoint(alpm_handle_t *handle, alpm_mountpoint_t *mp)
}
int _alpm_check_downloadspace(alpm_handle_t *handle, const char *cachedir,
size_t num_files, const off_t *file_sizes)
size_t num_files, off_t *file_sizes)
{
alpm_list_t *mount_points;
alpm_mountpoint_t *cachedir_mp;

View File

@@ -1,7 +1,7 @@
/*
* diskspace.h
*
* Copyright (c) 2010-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2010-2018 Pacman Development Team <pacman-dev@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
@@ -58,6 +58,6 @@ typedef struct __alpm_mountpoint_t {
int _alpm_check_diskspace(alpm_handle_t *handle);
int _alpm_check_downloadspace(alpm_handle_t *handle, const char *cachedir,
size_t num_files, const off_t *file_sizes);
size_t num_files, off_t *file_sizes);
#endif /* ALPM_DISKSPACE_H */

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-2018 Pacman Development Team <pacman-dev@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,13 +30,7 @@ struct dload_payload {
char *tempfile_name;
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
* server list and tries to download "$server/$filepath"
*/
char *fileurl;
char *filepath; /* download URL path */
alpm_list_t *servers;
long respcode;
off_t initial_size;
@@ -47,20 +41,16 @@ struct dload_payload {
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 */
int cb_initialized;
#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 */
CURLcode curlerr; /* last error produced by curl */
#endif
};
void _alpm_dload_payload_reset(struct dload_payload *payload);
void _alpm_dload_payload_reset_for_retry(struct dload_payload *payload);
int _alpm_download(alpm_handle_t *handle,
alpm_list_t *payloads /* struct dload_payload */,
const char *localpath);
int _alpm_download(struct dload_payload *payload, const char *localpath,
char **final_file, const char **final_url);
#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-2018 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify
@@ -130,6 +130,11 @@ const char SYMEXPORT *alpm_strerror(alpm_errno_t err)
return _("missing PGP signature");
case ALPM_ERR_SIG_INVALID:
return _("invalid PGP signature");
/* Deltas */
case ALPM_ERR_DLT_INVALID:
return _("invalid or corrupted delta");
case ALPM_ERR_DLT_PATCHFAILED:
return _("delta patch failed");
/* Dependencies */
case ALPM_ERR_UNSATISFIED_DEPS:
return _("could not satisfy dependencies");
@@ -154,9 +159,6 @@ const char SYMEXPORT *alpm_strerror(alpm_errno_t err)
return _("gpgme error");
case ALPM_ERR_EXTERNAL_DOWNLOAD:
return _("error invoking external downloader");
/* Missing compile-time features */
case ALPM_ERR_MISSING_CAPABILITY_SIGNATURES:
return _("compiled without signature support");
/* Unknown error! */
default:
return _("unexpected error");

View File

@@ -1,7 +1,7 @@
/*
* filelist.c
*
* Copyright (c) 2012-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2012-2018 Pacman Development Team <pacman-dev@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 @@
/*
* filelist.h
*
* Copyright (c) 2012-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2012-2018 Pacman Development Team <pacman-dev@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-2018 Pacman Development Team <pacman-dev@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-2018 Pacman Development Team <pacman-dev@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 @@
/*
* group.c
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@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-2018 Pacman Development Team <pacman-dev@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-2018 Pacman Development Team <pacman-dev@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>
@@ -34,6 +34,7 @@
#include "alpm_list.h"
#include "util.h"
#include "log.h"
#include "delta.h"
#include "trans.h"
#include "alpm.h"
#include "deps.h"
@@ -43,6 +44,7 @@ alpm_handle_t *_alpm_handle_new(void)
alpm_handle_t *handle;
CALLOC(handle, 1, sizeof(alpm_handle_t), return NULL);
handle->deltaratio = 0.0;
handle->lockfd = -1;
return handle;
@@ -64,10 +66,17 @@ void _alpm_handle_free(alpm_handle_t *handle)
closelog();
}
#ifdef HAVE_LIBCURL
/* release curl handle */
curl_easy_cleanup(handle->curl);
#endif
#ifdef HAVE_LIBGPGME
FREELIST(handle->known_keys);
#endif
regfree(&handle->delta_regex);
/* free memory */
_alpm_trans_free(handle->trans);
FREE(handle->root);
@@ -100,7 +109,7 @@ int _alpm_handle_lock(alpm_handle_t *handle)
ASSERT(handle->lockfd < 0, return 0);
/* create the dir of the lockfile first */
STRDUP(dir, handle->lockfile, return -1);
dir = strdup(handle->lockfile);
ptr = strrchr(dir, '/');
if(ptr) {
*ptr = '\0';
@@ -118,6 +127,12 @@ int _alpm_handle_lock(alpm_handle_t *handle)
return (handle->lockfd >= 0 ? 0 : -1);
}
/** Remove the database lock file
* @param handle the context handle
* @return 0 on success, -1 on error
*
* @note Safe to call from inside signal handlers.
*/
int SYMEXPORT alpm_unlock(alpm_handle_t *handle)
{
ASSERT(handle != NULL, return -1);
@@ -288,6 +303,12 @@ const char SYMEXPORT *alpm_option_get_arch(alpm_handle_t *handle)
return handle->arch;
}
double SYMEXPORT alpm_option_get_deltaratio(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return -1);
return handle->deltaratio;
}
int SYMEXPORT alpm_option_get_checkspace(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return -1);
@@ -300,16 +321,6 @@ const char SYMEXPORT *alpm_option_get_dbext(alpm_handle_t *handle)
return handle->dbext;
}
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)
{
CHECK_HANDLE(handle, return -1);
@@ -689,7 +700,6 @@ int SYMEXPORT alpm_option_set_assumeinstalled(alpm_handle_t *handle, alpm_list_t
if(handle->assumeinstalled) {
alpm_list_free_inner(handle->assumeinstalled, (alpm_list_fn_free)alpm_dep_free);
alpm_list_free(handle->assumeinstalled);
handle->assumeinstalled = NULL;
}
while(deps) {
if(alpm_option_add_assumeinstalled(handle, deps->data) != 0) {
@@ -745,6 +755,16 @@ int SYMEXPORT alpm_option_set_arch(alpm_handle_t *handle, const char *arch)
return 0;
}
int SYMEXPORT alpm_option_set_deltaratio(alpm_handle_t *handle, double ratio)
{
CHECK_HANDLE(handle, return -1);
if(ratio < 0.0 || ratio > 2.0) {
RET_ERR(handle, ALPM_ERR_WRONG_ARGS, -1);
}
handle->deltaratio = ratio;
return 0;
}
alpm_db_t SYMEXPORT *alpm_get_localdb(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return NULL);
@@ -783,14 +803,11 @@ int SYMEXPORT alpm_option_set_default_siglevel(alpm_handle_t *handle,
int level)
{
CHECK_HANDLE(handle, return -1);
if(level == ALPM_SIG_USE_DEFAULT) {
RET_ERR(handle, ALPM_ERR_WRONG_ARGS, -1);
}
#ifdef HAVE_LIBGPGME
handle->siglevel = level;
#else
if(level != 0) {
RET_ERR(handle, ALPM_ERR_MISSING_CAPABILITY_SIGNATURES, -1);
if(level != 0 && level != ALPM_SIG_USE_DEFAULT) {
RET_ERR(handle, ALPM_ERR_WRONG_ARGS, -1);
}
#endif
return 0;
@@ -810,7 +827,7 @@ int SYMEXPORT alpm_option_set_local_file_siglevel(alpm_handle_t *handle,
handle->localfilesiglevel = level;
#else
if(level != 0 && level != ALPM_SIG_USE_DEFAULT) {
RET_ERR(handle, ALPM_ERR_MISSING_CAPABILITY_SIGNATURES, -1);
RET_ERR(handle, ALPM_ERR_WRONG_ARGS, -1);
}
#endif
return 0;
@@ -834,7 +851,7 @@ int SYMEXPORT alpm_option_set_remote_file_siglevel(alpm_handle_t *handle,
handle->remotefilesiglevel = level;
#else
if(level != 0 && level != ALPM_SIG_USE_DEFAULT) {
RET_ERR(handle, ALPM_ERR_MISSING_CAPABILITY_SIGNATURES, -1);
RET_ERR(handle, ALPM_ERR_WRONG_ARGS, -1);
}
#endif
return 0;
@@ -856,21 +873,6 @@ int SYMEXPORT alpm_option_set_disable_dl_timeout(alpm_handle_t *handle,
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;
}
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;
}

View File

@@ -1,7 +1,7 @@
/*
* handle.h
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify
@@ -59,9 +59,8 @@ struct __alpm_handle_t {
#ifdef HAVE_LIBCURL
/* libcurl handle */
CURLM *curlm;
CURL *curl; /* reusable curl_easy handle */
unsigned short disable_dl_timeout;
unsigned int parallel_downloads; /* number of download streams */
#endif
#ifdef HAVE_LIBGPGME
@@ -96,6 +95,7 @@ struct __alpm_handle_t {
/* options */
char *arch; /* Architecture of packages we should allow */
double deltaratio; /* Download deltas if possible; a ratio value */
int usesyslog; /* Use syslog instead of logfile? */ /* TODO move to frontend */
int checkspace; /* Check disk space before installing */
char *dbext; /* Sync DB extension */
@@ -110,6 +110,10 @@ struct __alpm_handle_t {
/* lock file descriptor */
int lockfd;
/* for delta parsing efficiency */
int delta_regex_compiled;
regex_t delta_regex;
};
alpm_handle_t *_alpm_handle_new(void);

View File

@@ -1,7 +1,7 @@
/*
* hook.c
*
* Copyright (c) 2015-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2015-2018 Pacman Development Team <pacman-dev@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
@@ -17,6 +17,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <ctype.h>
#include <dirent.h>
#include <errno.h>
#include <limits.h>
@@ -37,7 +38,7 @@ enum _alpm_hook_op_t {
enum _alpm_trigger_type_t {
ALPM_HOOK_TYPE_PACKAGE = 1,
ALPM_HOOK_TYPE_PATH,
ALPM_HOOK_TYPE_FILE,
};
struct _alpm_trigger_t {
@@ -70,12 +71,23 @@ static void _alpm_trigger_free(struct _alpm_trigger_t *trigger)
}
}
static void _alpm_wordsplit_free(char **ws)
{
if(ws) {
char **c;
for(c = ws; *c; c++) {
free(*c);
}
free(ws);
}
}
static void _alpm_hook_free(struct _alpm_hook_t *hook)
{
if(hook) {
free(hook->name);
free(hook->desc);
wordsplit_free(hook->cmd);
_alpm_wordsplit_free(hook->cmd);
alpm_list_free_inner(hook->triggers, (alpm_list_fn_free) _alpm_trigger_free);
alpm_list_free(hook->triggers);
alpm_list_free(hook->matches);
@@ -146,6 +158,107 @@ static int _alpm_hook_validate(alpm_handle_t *handle,
return ret;
}
static char **_alpm_wordsplit(char *str)
{
char *c = str, *end;
char **out = NULL, **outsave;
size_t count = 0;
if(str == NULL) {
errno = EINVAL;
return NULL;
}
for(c = str; isspace(*c); c++);
while(*c) {
size_t wordlen = 0;
/* extend our array */
outsave = out;
if((out = realloc(out, (count + 1) * sizeof(char*))) == NULL) {
out = outsave;
goto error;
}
/* calculate word length and check for unbalanced quotes */
for(end = c; *end && !isspace(*end); end++) {
if(*end == '\'' || *end == '"') {
char quote = *end;
while(*(++end) && *end != quote) {
if(*end == '\\' && *(end + 1) == quote) {
end++;
}
wordlen++;
}
if(*end != quote) {
errno = EINVAL;
goto error;
}
} else {
if(*end == '\\' && (end[1] == '\'' || end[1] == '"')) {
end++; /* skip the '\\' */
}
wordlen++;
}
}
if(wordlen == (size_t) (end - c)) {
/* no internal quotes or escapes, copy it the easy way */
if((out[count++] = strndup(c, wordlen)) == NULL) {
goto error;
}
} else {
/* manually copy to remove quotes and escapes */
char *dest = out[count++] = malloc(wordlen + 1);
if(dest == NULL) { goto error; }
while(c < end) {
if(*c == '\'' || *c == '"') {
char quote = *c;
/* we know there must be a matching end quote,
* no need to check for '\0' */
for(c++; *c != quote; c++) {
if(*c == '\\' && *(c + 1) == quote) {
c++;
}
*(dest++) = *c;
}
c++;
} else {
if(*c == '\\' && (c[1] == '\'' || c[1] == '"')) {
c++; /* skip the '\\' */
}
*(dest++) = *(c++);
}
}
*dest = '\0';
}
if(*end == '\0') {
break;
} else {
for(c = end + 1; isspace(*c); c++);
}
}
outsave = out;
if((out = realloc(out, (count + 1) * sizeof(char*))) == NULL) {
out = outsave;
goto error;
}
out[count++] = NULL;
return out;
error:
/* can't use wordsplit_free here because NULL has not been appended */
while(count) {
free(out[--count]);
}
free(out);
return NULL;
}
static int _alpm_hook_parse_cb(const char *file, int line,
const char *section, char *key, char *value, void *data)
{
@@ -190,11 +303,7 @@ static int _alpm_hook_parse_cb(const char *file, int line,
if(strcmp(value, "Package") == 0) {
t->type = ALPM_HOOK_TYPE_PACKAGE;
} else if(strcmp(value, "File") == 0) {
_alpm_log(handle, ALPM_LOG_DEBUG,
"File targets are deprecated, use Path instead\n");
t->type = ALPM_HOOK_TYPE_PATH;
} else if(strcmp(value, "Path") == 0) {
t->type = ALPM_HOOK_TYPE_PATH;
t->type = ALPM_HOOK_TYPE_FILE;
} else {
error(_("hook %s line %d: invalid value %s\n"), file, line, value);
}
@@ -234,9 +343,9 @@ static int _alpm_hook_parse_cb(const char *file, int line,
} else if(strcmp(key, "Exec") == 0) {
if(hook->cmd != NULL) {
warning(_("hook %s line %d: overwriting previous definition of %s\n"), file, line, "Exec");
wordsplit_free(hook->cmd);
_alpm_wordsplit_free(hook->cmd);
}
if((hook->cmd = wordsplit(value)) == NULL) {
if((hook->cmd = _alpm_wordsplit(value)) == NULL) {
if(errno == EINVAL) {
error(_("hook %s line %d: invalid value %s\n"), file, line, value);
} else {
@@ -442,16 +551,7 @@ static int _alpm_hook_triggered(alpm_handle_t *handle, struct _alpm_hook_t *hook
static int _alpm_hook_cmp(struct _alpm_hook_t *h1, struct _alpm_hook_t *h2)
{
size_t suflen = strlen(ALPM_HOOK_SUFFIX), l1, l2;
int ret;
l1 = strlen(h1->name) - suflen;
l2 = strlen(h2->name) - suflen;
/* exclude the suffixes from comparison */
ret = strncmp(h1->name, h2->name, l1 <= l2 ? l1 : l2);
if(ret == 0 && l1 != l2) {
return l1 < l2 ? -1 : 1;
}
return ret;
return strcmp(h1->name, h2->name);
}
static alpm_list_t *find_hook(alpm_list_t *haystack, const void *needle)
@@ -534,7 +634,8 @@ int _alpm_hook_run(alpm_handle_t *handle, alpm_hook_when_t when)
alpm_event_hook_t event = { .when = when };
alpm_event_hook_run_t hook_event;
alpm_list_t *i, *hooks = NULL, *hooks_triggered = NULL;
size_t suflen = strlen(ALPM_HOOK_SUFFIX), triggered = 0;
const char *suffix = ".hook";
size_t suflen = strlen(suffix), triggered = 0;
int ret = 0;
for(i = alpm_list_last(handle->hookdirs); i; i = alpm_list_previous(i)) {
@@ -580,7 +681,7 @@ int _alpm_hook_run(alpm_handle_t *handle, alpm_hook_when_t when)
memcpy(path + dirlen, entry->d_name, name_len + 1);
if(name_len < suflen
|| strcmp(entry->d_name + name_len - suflen, ALPM_HOOK_SUFFIX) != 0) {
|| strcmp(entry->d_name + name_len - suflen, suffix) != 0) {
_alpm_log(handle, ALPM_LOG_DEBUG, "skipping non-hook file %s\n", path);
continue;
}

View File

@@ -1,7 +1,7 @@
/*
* hook.h
*
* Copyright (c) 2015-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2015-2018 Pacman Development Team <pacman-dev@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
@@ -22,8 +22,6 @@
#include "alpm.h"
#define ALPM_HOOK_SUFFIX ".hook"
int _alpm_hook_run(alpm_handle_t *handle, alpm_hook_when_t when);
#endif /* ALPM_HOOK_H */

1
lib/libalpm/ini.c Symbolic link
View File

@@ -0,0 +1 @@
../../src/common/ini.c

1
lib/libalpm/ini.h Symbolic link
View File

@@ -0,0 +1 @@
../../src/common/ini.h

View File

@@ -7,7 +7,7 @@ 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@
Requires.private: libarchive @pc_crypto@ @pc_libcurl@
Cflags: -I${includedir} @LFS_CFLAGS@
Libs: -L${libdir} -lalpm
Libs.private: @LIBS@ @pc_gpgme_libs@ @LIBINTL@
Libs.private: @LIBS@ @GPGME_LIBS@

View File

@@ -4,7 +4,7 @@
/*
* libarchive-compat.h
*
* Copyright (c) 2013-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2013-2018 Pacman Development Team <pacman-dev@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 @@
/*
* log.c
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify
@@ -22,7 +22,6 @@
#include <stdarg.h>
#include <errno.h>
#include <syslog.h>
#include <time.h>
/* libalpm */
#include "log.h"
@@ -30,18 +29,28 @@
#include "util.h"
#include "alpm.h"
/** \addtogroup alpm_log Logging Functions
* @brief Functions to log using libalpm
* @{
*/
static int _alpm_log_leader(FILE *f, const char *prefix)
{
time_t t = time(NULL);
struct tm *tm = localtime(&t);
int length = 32;
char timestamp[length];
/* Use ISO-8601 date format */
strftime(timestamp,length,"%FT%T%z", tm);
return fprintf(f, "[%s] [%s] ", timestamp, prefix);
return fprintf(f, "[%04d-%02d-%02d %02d:%02d] [%s] ",
tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
tm->tm_hour, tm->tm_min, prefix);
}
/** A printf-like function for logging.
* @param handle the context handle
* @param prefix caller-specific prefix for the log
* @param fmt output format
* @return 0 on success, -1 on error (pm_errno is set accordingly)
*/
int SYMEXPORT alpm_logaction(alpm_handle_t *handle, const char *prefix,
const char *fmt, ...)
{
@@ -98,6 +107,8 @@ int SYMEXPORT alpm_logaction(alpm_handle_t *handle, const char *prefix,
return ret;
}
/** @} */
void _alpm_log(alpm_handle_t *handle, alpm_loglevel_t flag, const char *fmt, ...)
{
va_list args;

View File

@@ -1,7 +1,7 @@
/*
* log.h
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@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,32 +0,0 @@
libalpm_sources = files('''
add.h add.c
alpm.h alpm.c
alpm_list.h alpm_list.c
backup.h backup.c
base64.h base64.c
be_local.c
be_package.c
be_sync.c
conflict.h conflict.c
db.h db.c
deps.h deps.c
diskspace.h diskspace.c
dload.h dload.c
error.c
filelist.h filelist.c
graph.h graph.c
group.h group.c
handle.h handle.c
hook.h hook.c
libarchive-compat.h
log.h log.c
package.h package.c
pkghash.h pkghash.c
rawstr.c
remove.h remove.c
signing.c signing.h
sync.h sync.c
trans.h trans.c
util.h util.c
version.c
'''.split())

View File

@@ -1,7 +1,7 @@
/*
* package.c
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@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>
@@ -31,9 +31,16 @@
#include "log.h"
#include "util.h"
#include "db.h"
#include "delta.h"
#include "handle.h"
#include "deps.h"
/** \addtogroup alpm_packages Package Functions
* @brief Functions to manipulate libalpm packages
* @{
*/
/** Free a package. */
int SYMEXPORT alpm_pkg_free(alpm_pkg_t *pkg)
{
ASSERT(pkg != NULL, return -1);
@@ -46,6 +53,7 @@ int SYMEXPORT alpm_pkg_free(alpm_pkg_t *pkg)
return 0;
}
/** Check the integrity (with md5) of a package from the sync cache. */
int SYMEXPORT alpm_pkg_checkmd5sum(alpm_pkg_t *pkg)
{
char *fpath;
@@ -268,44 +276,6 @@ const char SYMEXPORT *alpm_pkg_get_base64_sig(alpm_pkg_t *pkg)
return pkg->base64_sig;
}
int SYMEXPORT alpm_pkg_get_sig(alpm_pkg_t *pkg, unsigned char **sig, size_t *sig_len)
{
ASSERT(pkg != NULL, return -1);
if(pkg->base64_sig) {
int ret = alpm_decode_signature(pkg->base64_sig, sig, sig_len);
if(ret != 0) {
RET_ERR(pkg->handle, ALPM_ERR_SIG_INVALID, -1);
}
return 0;
} else {
char *pkgpath = NULL, *sigpath = NULL;
alpm_errno_t err;
int ret = -1;
pkgpath = _alpm_filecache_find(pkg->handle, pkg->filename);
if(!pkgpath) {
GOTO_ERR(pkg->handle, ALPM_ERR_PKG_NOT_FOUND, cleanup);
}
sigpath = _alpm_sigpath(pkg->handle, pkgpath);
if(!sigpath || _alpm_access(pkg->handle, NULL, sigpath, R_OK)) {
GOTO_ERR(pkg->handle, ALPM_ERR_SIG_MISSING, cleanup);
}
err = _alpm_read_file(sigpath, sig, sig_len);
if(err == ALPM_ERR_OK) {
_alpm_log(pkg->handle, ALPM_LOG_DEBUG, "found detached signature %s with size %ld\n",
sigpath, *sig_len);
} else {
GOTO_ERR(pkg->handle, err, cleanup);
}
ret = 0;
cleanup:
FREE(pkgpath);
FREE(sigpath);
return ret;
}
}
const char SYMEXPORT *alpm_pkg_get_arch(alpm_pkg_t *pkg)
{
ASSERT(pkg != NULL, return NULL);
@@ -404,6 +374,13 @@ alpm_list_t SYMEXPORT *alpm_pkg_get_replaces(alpm_pkg_t *pkg)
return pkg->ops->get_replaces(pkg);
}
alpm_list_t SYMEXPORT *alpm_pkg_get_deltas(alpm_pkg_t *pkg)
{
ASSERT(pkg != NULL, return NULL);
pkg->handle->pm_errno = ALPM_ERR_OK;
return pkg->deltas;
}
alpm_filelist_t SYMEXPORT *alpm_pkg_get_files(alpm_pkg_t *pkg)
{
ASSERT(pkg != NULL, return NULL);
@@ -428,6 +405,7 @@ alpm_db_t SYMEXPORT *alpm_pkg_get_db(alpm_pkg_t *pkg)
return pkg->origin_data.db;
}
/** Open a package changelog for reading. */
void SYMEXPORT *alpm_pkg_changelog_open(alpm_pkg_t *pkg)
{
ASSERT(pkg != NULL, return NULL);
@@ -435,6 +413,7 @@ void SYMEXPORT *alpm_pkg_changelog_open(alpm_pkg_t *pkg)
return pkg->ops->changelog_open(pkg);
}
/** Read data from an open changelog 'file stream'. */
size_t SYMEXPORT alpm_pkg_changelog_read(void *ptr, size_t size,
const alpm_pkg_t *pkg, void *fp)
{
@@ -443,6 +422,7 @@ size_t SYMEXPORT alpm_pkg_changelog_read(void *ptr, size_t size,
return pkg->ops->changelog_read(ptr, size, pkg, fp);
}
/** Close a package changelog for reading. */
int SYMEXPORT alpm_pkg_changelog_close(const alpm_pkg_t *pkg, void *fp)
{
ASSERT(pkg != NULL, return -1);
@@ -450,6 +430,7 @@ int SYMEXPORT alpm_pkg_changelog_close(const alpm_pkg_t *pkg, void *fp)
return pkg->ops->changelog_close(pkg, fp);
}
/** Open a package mtree file for reading. */
struct archive SYMEXPORT *alpm_pkg_mtree_open(alpm_pkg_t * pkg)
{
ASSERT(pkg != NULL, return NULL);
@@ -457,6 +438,7 @@ struct archive SYMEXPORT *alpm_pkg_mtree_open(alpm_pkg_t * pkg)
return pkg->ops->mtree_open(pkg);
}
/** Read entry from an open mtree file. */
int SYMEXPORT alpm_pkg_mtree_next(const alpm_pkg_t * pkg, struct archive *archive,
struct archive_entry **entry)
{
@@ -465,6 +447,7 @@ int SYMEXPORT alpm_pkg_mtree_next(const alpm_pkg_t * pkg, struct archive *archiv
return pkg->ops->mtree_next(pkg, archive, entry);
}
/** Close a package mtree file for reading. */
int SYMEXPORT alpm_pkg_mtree_close(const alpm_pkg_t * pkg, struct archive *archive)
{
ASSERT(pkg != NULL, return -1);
@@ -535,16 +518,21 @@ static alpm_list_t *compute_requiredby(alpm_pkg_t *pkg, int optional)
return reqs;
}
/** Compute the packages requiring a given package. */
alpm_list_t SYMEXPORT *alpm_pkg_compute_requiredby(alpm_pkg_t *pkg)
{
return compute_requiredby(pkg, 0);
}
/** Compute the packages optionally requiring a given package. */
alpm_list_t SYMEXPORT *alpm_pkg_compute_optionalfor(alpm_pkg_t *pkg)
{
return compute_requiredby(pkg, 1);
}
/** @} */
alpm_file_t *_alpm_file_copy(alpm_file_t *dest,
const alpm_file_t *src)
{
@@ -632,6 +620,9 @@ int _alpm_pkg_dup(alpm_pkg_t *pkg, alpm_pkg_t **new_ptr)
newpkg->optdepends = list_depdup(pkg->optdepends);
newpkg->conflicts = list_depdup(pkg->conflicts);
newpkg->provides = list_depdup(pkg->provides);
for(i = pkg->deltas; i; i = i->next) {
newpkg->deltas = alpm_list_add(newpkg->deltas, _alpm_delta_dup(i->data));
}
if(pkg->files.count) {
size_t filenum;
@@ -703,10 +694,11 @@ void _alpm_pkg_free(alpm_pkg_t *pkg)
alpm_list_free(pkg->backup);
free_deplist(pkg->depends);
free_deplist(pkg->optdepends);
free_deplist(pkg->checkdepends);
free_deplist(pkg->makedepends);
free_deplist(pkg->conflicts);
free_deplist(pkg->provides);
alpm_list_free_inner(pkg->deltas, (alpm_list_fn_free)_alpm_delta_free);
alpm_list_free(pkg->deltas);
alpm_list_free(pkg->delta_path);
alpm_list_free(pkg->removes);
_alpm_pkg_free(pkg->oldpkg);
@@ -784,6 +776,16 @@ alpm_pkg_t SYMEXPORT *alpm_pkg_find(alpm_list_t *haystack, const char *needle)
return NULL;
}
/** Test if a package should be ignored.
*
* Checks if the package is ignored via IgnorePkg, or if the package is
* in a group ignored via IgnoreGroup.
*
* @param handle the context handle
* @param pkg the package to test
*
* @return 1 if the package should be ignored, 0 otherwise
*/
int SYMEXPORT alpm_pkg_should_ignore(alpm_handle_t *handle, alpm_pkg_t *pkg)
{
alpm_list_t *groups = NULL;

View File

@@ -1,7 +1,7 @@
/*
* package.h
*
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@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>
@@ -38,7 +38,7 @@
/** Package operations struct. This struct contains function pointers to
* all methods used to access data in a package to allow for things such
* as lazy package initialization (such as used by the file backend). Each
* backend is free to define a struct containing pointers to a specific
* backend is free to define a stuct containing pointers to a specific
* implementation of these methods. Some backends may find using the
* defined default_pkg_ops struct to work just fine for their needs.
*/
@@ -118,6 +118,8 @@ struct __alpm_pkg_t {
alpm_list_t *makedepends;
alpm_list_t *conflicts;
alpm_list_t *provides;
alpm_list_t *deltas;
alpm_list_t *delta_path;
alpm_list_t *removes; /* in transaction targets only */
alpm_pkg_t *oldpkg; /* in transaction targets only */

View File

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

@@ -12,6 +12,7 @@ lib/libalpm/be_package.c
lib/libalpm/be_sync.c
lib/libalpm/conflict.c
lib/libalpm/db.c
lib/libalpm/delta.c
lib/libalpm/deps.c
lib/libalpm/diskspace.c
lib/libalpm/dload.c

View File

@@ -9,16 +9,15 @@
# kraim <biskraim@gmail.com>, 2013
# Mosaab Alzoubi <moceap@hotmail.com>, 2013
# Mosaab Alzoubi <moceap@hotmail.com>, 2013
# Mutaz ismail <mutaz@gmx.net>, 2015
# Mutaz ismail <mutaz@gmx.net>, 2015
# Mutaz ismail <m3taz.ismail@gmail.com>, 2015
# سند <0otibi0@gmail.com>, 2013
# صفا الفليج <safaalfulaij@hotmail.com>, 2016-2017
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"
"POT-Creation-Date: 2018-12-12 11:09+1000\n"
"PO-Revision-Date: 2018-05-15 01:05+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"Language-Team: Arabic (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/ar/)\n"
@@ -29,52 +28,52 @@ 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:86
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s محدّثة -- سأتجاوزها\n"
#: lib/libalpm/add.c:95
#: lib/libalpm/add.c:90
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s محدّثة -- سأعيد تثبيتها\n"
#: lib/libalpm/add.c:100
#: lib/libalpm/add.c:95
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "سأُنزِل الحزمة %s (من %s إلى %s)\n"
#: lib/libalpm/add.c:129
#: lib/libalpm/add.c:124
#, c-format
msgid "cannot allocate disk archive object"
msgstr ""
#: lib/libalpm/add.c:143 lib/libalpm/util.c:382
#: lib/libalpm/add.c:138 lib/libalpm/util.c:382
#, 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:141 lib/libalpm/util.c:385
#, 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:154 lib/libalpm/dload.c:569 lib/libalpm/remove.c:541
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "تعذر إعادة تسمية %s إلى %s (%s)\n"
#: lib/libalpm/add.c:210
#: lib/libalpm/add.c:205
#, c-format
msgid "file not found in file list for package %s. skipping extraction of %s\n"
msgstr "لم يتم العثور على قائمة الملفات في الحزمة %s. تم تخطي الاستخراج %s\n"
#: lib/libalpm/add.c:219
#: lib/libalpm/add.c:214
#, c-format
msgid "unable to extract %s%s: path too long"
msgstr ""
#: lib/libalpm/add.c:261
#: lib/libalpm/add.c:256
#, c-format
msgid ""
"directory permissions differ on %s\n"
@@ -83,7 +82,7 @@ msgstr ""
"صلاحيات المجلد تختلف عن %s\n"
"نظام الملفات: %o الحزمة: %o\n"
#: lib/libalpm/add.c:276
#: lib/libalpm/add.c:271
#, c-format
msgid ""
"directory ownership differs on %s\n"
@@ -92,101 +91,101 @@ msgstr ""
"ملكية المجلد تختلف عن %s\n"
"ملفات النظام: %u:%u الحزمة: %u:%u\n"
#: lib/libalpm/add.c:292
#: lib/libalpm/add.c:287
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr "الاستخراج: عدم الكتابة فوق المجلد بالملف %s\n"
#: lib/libalpm/add.c:320
#: lib/libalpm/add.c:315
#, c-format
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:508 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#, 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/add.c:513 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/util.c:650
#, 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:570 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#, c-format
msgid "could not restore working directory (%s)\n"
msgstr "تعذر استعادة مجلد العمل (%s)\n"
#: lib/libalpm/add.c:583
#: lib/libalpm/add.c:578
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "حدثت مشكلة أثناء ترقية %s\n"
#: lib/libalpm/add.c:589
#: lib/libalpm/add.c:584
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "حدثت مشكلة أثناء تثبيت %s\n"
#: lib/libalpm/add.c:604
#: lib/libalpm/add.c:599
#, 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:255
#, 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:350
#, 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:401 lib/libalpm/be_local.c:887
#, 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:576 lib/libalpm/be_sync.c:387
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "مدخل قاعدة بيانات غير صالح '%s'\n"
#: lib/libalpm/be_local.c:598
#: lib/libalpm/be_local.c:584
#, c-format
msgid "duplicated database entry '%s'\n"
msgstr "مدخل قاعدة بيانات مكرر '%s'\n"
#: lib/libalpm/be_local.c:610
#: lib/libalpm/be_local.c:596
#, 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/be_local.c:699 lib/libalpm/be_local.c:791
#: lib/libalpm/be_local.c:936 lib/libalpm/be_local.c:1033
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:419 lib/libalpm/util.c:253
#: lib/libalpm/util.c:269
#, 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:715 lib/libalpm/be_sync.c:653
#, 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:721 lib/libalpm/be_sync.c:659
#, 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:762
#, c-format
msgid "unknown validation type for package %s: %s\n"
msgstr "نوع التّحقق غير مألوف في الحزمة %s: %s\n"
@@ -227,42 +226,42 @@ msgstr "إصدارة الحزمة غير صالح في %s\n"
msgid "missing package metadata in %s\n"
msgstr "معلومات الحزمة مفقودة في %s\n"
#: lib/libalpm/be_package.c:750
#: lib/libalpm/be_package.c:748
#, 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:769 lib/libalpm/sync.c:1113
#, c-format
msgid "required key missing from keyring\n"
msgstr "مفتاح ضروري غير موجود في حلقة المفاتيح\n"
#: lib/libalpm/be_sync.c:61
#: lib/libalpm/be_sync.c:62
#, c-format
msgid "removing invalid file: %s\n"
msgstr "يجري حذف ملف غير صالح: %s\n"
#: lib/libalpm/be_sync.c:515
#: lib/libalpm/be_sync.c:517
#, 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:524
#, 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:558 lib/libalpm/be_sync.c:563
#, 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:568
#, 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:634
#, c-format
msgid "unknown database file: %s\n"
msgstr "ملف قاعدة البيانات مجهول : %s\n"
@@ -287,12 +286,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:682 lib/libalpm/deps.c:712
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "تجاهل الحزمة %s-%s\n"
#: lib/libalpm/deps.c:869
#: lib/libalpm/deps.c:867
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "تعذّر تحليل \"%s\"، اعتمادية لـ \"%s\"\n"
@@ -347,37 +346,37 @@ msgstr "غير قادر على تحديد نقطة وصل الجذر %s\n"
msgid "Partition %s is mounted read only\n"
msgstr "القسم %s موصول بصفة القراءة فقط\n"
#: lib/libalpm/dload.c:161
#: lib/libalpm/dload.c:159
#, c-format
msgid "disk"
msgstr "القرص"
#: lib/libalpm/dload.c:348
#: lib/libalpm/dload.c:345
#, c-format
msgid "failed to create temporary file for download\n"
msgstr "غير قادر على إنشاء ملف مؤقت للتحميل\n"
#: lib/libalpm/dload.c:393
#: lib/libalpm/dload.c:390
#, c-format
msgid "url '%s' is invalid\n"
msgstr "العنوان '%s' غير صالح\n"
#: lib/libalpm/dload.c:464 lib/libalpm/dload.c:485 lib/libalpm/dload.c:496
#: lib/libalpm/dload.c:460 lib/libalpm/dload.c:481 lib/libalpm/dload.c:492
#, 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:473
#, 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:528
#, 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:672 lib/libalpm/dload.c:701
#, c-format
msgid "failed to download %s\n"
msgstr "tag td jpldg %s\n"
@@ -597,196 +596,201 @@ msgstr "توقيع PGP مفقود"
msgid "invalid PGP signature"
msgstr "توقيع PGP غير سليم"
#: lib/libalpm/error.c:135 lib/libalpm/hook.c:514
#: lib/libalpm/error.c:135
#, c-format
msgid "invalid or corrupted delta"
msgstr "فروقات غير سليمة أو معطوبة"
#: lib/libalpm/error.c:137
#, c-format
msgid "delta patch failed"
msgstr "فشل تطبيق الفروقات"
#: lib/libalpm/error.c:140 lib/libalpm/hook.c:614
#, c-format
msgid "could not satisfy dependencies"
msgstr "غير قادر على استيفاء الاعتماديات"
#: lib/libalpm/error.c:137
#: lib/libalpm/error.c:142
#, c-format
msgid "conflicting dependencies"
msgstr "اعتماديات متضاربة"
#: lib/libalpm/error.c:139
#: lib/libalpm/error.c:144
#, c-format
msgid "conflicting files"
msgstr "ملفات متضاربة"
#: lib/libalpm/error.c:142
#: lib/libalpm/error.c:147
#, c-format
msgid "failed to retrieve some files"
msgstr "فشل في استقبال بعض الملفات"
#: lib/libalpm/error.c:144
#: lib/libalpm/error.c:149
#, c-format
msgid "invalid regular expression"
msgstr "تعبير غير نظامي"
#: lib/libalpm/error.c:150
#: lib/libalpm/error.c:155
#, c-format
msgid "libarchive error"
msgstr "خطا في مكتبة الارشيف"
#: lib/libalpm/error.c:152
#: lib/libalpm/error.c:157
#, c-format
msgid "download library error"
msgstr "خطأ في مكتبة التحميل"
#: lib/libalpm/error.c:154
#: lib/libalpm/error.c:159
#, c-format
msgid "gpgme error"
msgstr "خطأ gpgme"
#: lib/libalpm/error.c:156
#: lib/libalpm/error.c:161
#, c-format
msgid "error invoking external downloader"
msgstr "خطأ في استحضار المحمّل الخارجي"
#: lib/libalpm/error.c:159
#, c-format
msgid "compiled without signature support"
msgstr ""
#: lib/libalpm/error.c:162
#: lib/libalpm/error.c:164
#, c-format
msgid "unexpected error"
msgstr "خطأ غير متوقع"
#: lib/libalpm/handle.c:153
#: lib/libalpm/handle.c:157
#, c-format
msgid "lock file missing %s\n"
msgstr "الملف المغلق مفقود %s\n"
#: lib/libalpm/handle.c:159
#: lib/libalpm/handle.c:163
#, c-format
msgid "could not remove lock file %s\n"
msgstr "تعذّر إزالة ملف القفل %s\n"
#: lib/libalpm/hook.c:95
#: lib/libalpm/hook.c:107
#, c-format
msgid "Missing trigger targets in hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:101
#: lib/libalpm/hook.c:113
#, c-format
msgid "Missing trigger type in hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:107
#: lib/libalpm/hook.c:119
#, c-format
msgid "Missing trigger operation in hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:134
#: lib/libalpm/hook.c:146
#, c-format
msgid "Missing Exec option in hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:140
#: lib/libalpm/hook.c:152
#, c-format
msgid "Missing When option in hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:143
#: lib/libalpm/hook.c:155
#, c-format
msgid "AbortOnFail set for PostTransaction hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:160
#: lib/libalpm/hook.c:273
#, c-format
msgid "error while reading hook %s: %s\n"
msgstr ""
#: lib/libalpm/hook.c:162 lib/libalpm/hook.c:206 lib/libalpm/hook.c:248
#: lib/libalpm/hook.c:275 lib/libalpm/hook.c:315 lib/libalpm/hook.c:357
#, c-format
msgid "hook %s line %d: invalid option %s\n"
msgstr ""
#: lib/libalpm/hook.c:172
#: lib/libalpm/hook.c:285
#, c-format
msgid "hook %s line %d: invalid section %s\n"
msgstr ""
#: lib/libalpm/hook.c:184 lib/libalpm/hook.c:199 lib/libalpm/hook.c:218
#: lib/libalpm/hook.c:241
#: lib/libalpm/hook.c:297 lib/libalpm/hook.c:308 lib/libalpm/hook.c:327
#: lib/libalpm/hook.c:350
#, c-format
msgid "hook %s line %d: invalid value %s\n"
msgstr ""
#: lib/libalpm/hook.c:188 lib/libalpm/hook.c:211 lib/libalpm/hook.c:222
#: lib/libalpm/hook.c:236
#: lib/libalpm/hook.c:301 lib/libalpm/hook.c:320 lib/libalpm/hook.c:331
#: lib/libalpm/hook.c:345
#, c-format
msgid "hook %s line %d: overwriting previous definition of %s\n"
msgstr ""
#: lib/libalpm/hook.c:243
#: lib/libalpm/hook.c:352
#, c-format
msgid "hook %s line %d: unable to set option (%s)\n"
msgstr ""
#: lib/libalpm/hook.c:513
#: lib/libalpm/hook.c:613
#, c-format
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:648 lib/libalpm/hook.c:660 lib/libalpm/remove.c:385
#, c-format
msgid "could not open directory: %s: %s\n"
msgstr "تعذّر فتح المجلد: %s: %s\n"
#: lib/libalpm/hook.c:575
#: lib/libalpm/hook.c:676
#, c-format
msgid "could not open file: %s%s: %s\n"
msgstr ""
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:259
#: lib/libalpm/hook.c:696 lib/libalpm/util.c:259
#, c-format
msgid "could not stat file %s: %s\n"
msgstr "تعذّر إحصاء الملف %s: %s\n"
#: lib/libalpm/hook.c:621
#: lib/libalpm/hook.c:722
#, c-format
msgid "could not read directory: %s: %s\n"
msgstr ""
#: lib/libalpm/package.c:578
#: lib/libalpm/package.c:586
#, c-format
msgid "could not fully load metadata for package %s-%s\n"
msgstr "غير قادر على استيراد معلومات الميتا للحزمة %s-%s\n"
#: lib/libalpm/remove.c:119
#: lib/libalpm/remove.c:118
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "لم يعثر على %s في قاعدة البيانات -- يجري التجاوز\n"
#: lib/libalpm/remove.c:154
#: lib/libalpm/remove.c:153
#, c-format
msgid "removing %s from target list\n"
msgstr "يجري حذف %s من قائمة الأهداف\n"
#: lib/libalpm/remove.c:346
#: lib/libalpm/remove.c:345
#, 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:410 lib/libalpm/remove.c:419
#, c-format
msgid "could not backup %s due to PATH_MAX overflow\n"
msgstr ""
#: lib/libalpm/remove.c:562
#: lib/libalpm/remove.c:561
#, c-format
msgid "cannot remove %s (%s)\n"
msgstr "تعذّر إزالة %s (%s)\n"
#: lib/libalpm/remove.c:735
#: lib/libalpm/remove.c:734
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "تعذّر إزالة مدخل قاعدة البيانات %s-%s\n"
#: lib/libalpm/remove.c:740
#: lib/libalpm/remove.c:739
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "تعذر إزالة المدخل '%s' من المخبئيات\n"
@@ -796,154 +800,139 @@ msgstr "تعذر إزالة المدخل '%s' من المخبئيات\n"
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:207 lib/libalpm/signing.c:705
#, c-format
msgid "GPGME error: %s\n"
msgstr ""
#: lib/libalpm/signing.c:284
#, c-format
msgid "looking up key %s using WKD\n"
msgstr ""
#: lib/libalpm/signing.c:293
#, c-format
msgid "gpg error: %s\n"
msgstr ""
#: lib/libalpm/signing.c:441 lib/libalpm/signing.c:515
#: lib/libalpm/signing.c:402
#, c-format
msgid "keyring is not writable\n"
msgstr ""
#: lib/libalpm/signing.c:539
#, c-format
msgid "key \"%s\" on keyserver\n"
msgstr ""
#: lib/libalpm/signing.c:544
#: lib/libalpm/signing.c:460
#, c-format
msgid "key \"%s\" could not be imported\n"
msgstr ""
#: lib/libalpm/signing.c:548
#: lib/libalpm/signing.c:466
#, c-format
msgid "key %s, \"%s\" found on keyserver, keyring is not writable\n"
msgstr ""
#: lib/libalpm/signing.c:471
#, 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:859 lib/libalpm/sync.c:1181
#, c-format
msgid "%s: missing required signature\n"
msgstr "التوقيع المطلوب مفقود :%s\n"
#: lib/libalpm/signing.c:958
#: lib/libalpm/signing.c:874
#, c-format
msgid "%s: signature from \"%s\" is marginal trust\n"
msgstr ""
#: lib/libalpm/signing.c:966
#: lib/libalpm/signing.c:882
#, c-format
msgid "%s: signature from \"%s\" is unknown trust\n"
msgstr ""
#: lib/libalpm/signing.c:973
#: lib/libalpm/signing.c:889
#, c-format
msgid "%s: signature from \"%s\" should never be trusted\n"
msgstr ""
#: lib/libalpm/signing.c:985
#: lib/libalpm/signing.c:901
#, c-format
msgid "%s: key \"%s\" is unknown\n"
msgstr ""
#: lib/libalpm/signing.c:994
#: lib/libalpm/signing.c:910
#, c-format
msgid "%s: key \"%s\" is disabled\n"
msgstr ""
#: lib/libalpm/signing.c:998
#: lib/libalpm/signing.c:914
#, c-format
msgid "%s: signature from \"%s\" is expired\n"
msgstr ""
#: lib/libalpm/signing.c:1002
#: lib/libalpm/signing.c:918
#, 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:995 lib/libalpm/signing.c:1063
#: lib/libalpm/signing.c:1142
#, 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:1095 lib/libalpm/signing.c:1128
#: lib/libalpm/signing.c:1136
#, c-format
msgid "%s: unsupported signature format\n"
msgstr ""
#: lib/libalpm/sync.c:99
#: lib/libalpm/sync.c:98
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: يجري تجاهل تحديث الحزمة (%s => %s) \n"
#: lib/libalpm/sync.c:111
#: lib/libalpm/sync.c:110
#, c-format
msgid "%s: ignoring package downgrade (%s => %s)\n"
msgstr "%s: يجري تجاهل إرجاع الحزمة (%s => %s) \n"
#: lib/libalpm/sync.c:114
#: lib/libalpm/sync.c:113
#, 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:119
#, 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:160
#, 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:176
#, 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:538 lib/libalpm/sync.c:608
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr "حدثت تعارضات حزميّة تعذّر تحليلها\n"
#: lib/libalpm/sync.c:555
#: lib/libalpm/sync.c:558
#, c-format
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgstr " يجري حذف '%s' من قائمة الأهداف بسبب تعارضها مع '%s'\n"
#: lib/libalpm/sync.c:849
#: lib/libalpm/sync.c:1019
#, c-format
msgid "failed to retrieve some files\n"
msgstr "تعذّر استقبال بعض الملفات\n"
#: lib/libalpm/sync.c:1036
#, c-format
msgid "failed to read file %s: %s\n"
msgstr ""
#: lib/libalpm/sync.c:1223
#: lib/libalpm/sync.c:1384
#, c-format
msgid "not enough free disk space\n"
msgstr "لا توجد مساحة خالية كافية على القرص\n"
#: lib/libalpm/sync.c:1245
#: lib/libalpm/sync.c:1406
#, c-format
msgid "could not commit removal transaction\n"
msgstr "تعذّر بدء مُبادلة الإزالة\n"
#: lib/libalpm/sync.c:1253
#: lib/libalpm/sync.c:1414
#, c-format
msgid "could not commit transaction\n"
msgstr "فشل في بدء المُبادلة\n"

View File

@@ -3,7 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# enolp <enolp@softastur.org>, 2015-2016,2018-2019
# enolp <enolp@softastur.org>, 2015-2016,2018
# Ḷḷumex03 <tornes@opmbx.org>, 2014
# Ḷḷumex03 <tornes@opmbx.org>, 2014
# Ḷḷumex03 <tornes@opmbx.org>, 2014-2015
@@ -11,8 +11,8 @@ 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"
"POT-Creation-Date: 2018-12-12 11:09+1000\n"
"PO-Revision-Date: 2018-05-15 01:05+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"Language-Team: Asturian (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/ast/)\n"
@@ -22,54 +22,54 @@ 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:86
#, 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:90
#, 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:95
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "baxando de versión el paquete %s (%s => %s)\n"
#: lib/libalpm/add.c:129
#: lib/libalpm/add.c:124
#, c-format
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:138 lib/libalpm/util.c:382
#, 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:141 lib/libalpm/util.c:385
#, 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:154 lib/libalpm/dload.c:569 lib/libalpm/remove.c:541
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "nun pudo renomase %s a %s (%s)\n"
#: lib/libalpm/add.c:210
#: lib/libalpm/add.c:205
#, c-format
msgid "file not found in file list for package %s. skipping extraction of %s\n"
msgstr ""
"nun s'alcontró'l ficheru nel llistáu de ficheros pal paquete %s. saltando la "
"estraición de %s\n"
#: lib/libalpm/add.c:219
#: lib/libalpm/add.c:214
#, c-format
msgid "unable to extract %s%s: path too long"
msgstr "nun pue estrayese %s%s: camín perllargu"
#: lib/libalpm/add.c:261
#: lib/libalpm/add.c:256
#, c-format
msgid ""
"directory permissions differ on %s\n"
@@ -78,7 +78,7 @@ msgstr ""
"los permisos del direutoriu son distintos en %s\n"
"sistema de ficheros: %o paquete: %o\n"
#: lib/libalpm/add.c:276
#: lib/libalpm/add.c:271
#, c-format
msgid ""
"directory ownership differs on %s\n"
@@ -87,103 +87,103 @@ msgstr ""
"la propiedá del direutoriu ye distinta en %s\n"
"sistema de ficheros: %u:%u paquete: %u:%u\n"
#: lib/libalpm/add.c:292
#: lib/libalpm/add.c:287
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr "estración: nun pue sobrescribise'l direutoriu col ficheru %s\n"
#: lib/libalpm/add.c:320
#: lib/libalpm/add.c:315
#, c-format
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:508 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#, 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/add.c:513 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/util.c:650
#, 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:570 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#, 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:578
#, 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:584
#, 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:599
#, 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:255
#, 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:350
#, 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:401 lib/libalpm/be_local.c:887
#, 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:576 lib/libalpm/be_sync.c:387
#, 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:584
#, 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:596
#, 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/be_local.c:699 lib/libalpm/be_local.c:791
#: lib/libalpm/be_local.c:936 lib/libalpm/be_local.c:1033
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:419 lib/libalpm/util.c:253
#: lib/libalpm/util.c:269
#, 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:715 lib/libalpm/be_sync.c:653
#, 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:721 lib/libalpm/be_sync.c:659
#, 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:762
#, c-format
msgid "unknown validation type for package %s: %s\n"
msgstr "triba de validación desconocida pal paquete %s: %s\n"
@@ -224,46 +224,46 @@ msgstr "versión del paquete non válida en %s\n"
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:748
#, 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:769 lib/libalpm/sync.c:1113
#, c-format
msgid "required key missing from keyring\n"
msgstr "clave riquida del aniellu claves faltante\n"
#: lib/libalpm/be_sync.c:61
#: lib/libalpm/be_sync.c:62
#, c-format
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:517
#, 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:524
#, 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:558 lib/libalpm/be_sync.c:563
#, 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:568
#, 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:634
#, c-format
msgid "unknown database file: %s\n"
msgstr "ficheru de base de datos desconocíu: %s\n"
@@ -288,12 +288,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:682 lib/libalpm/deps.c:712
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "inorando paquete %s-%s\n"
#: lib/libalpm/deps.c:869
#: lib/libalpm/deps.c:867
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "nun pue iguase \"%s\", una dependencia de \"%s\"\n"
@@ -348,37 +348,37 @@ msgstr "nun pudo determinase'l puntu de montaxe root %s\n"
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
#: lib/libalpm/dload.c:159
#, c-format
msgid "disk"
msgstr "discu"
#: lib/libalpm/dload.c:348
#: lib/libalpm/dload.c:345
#, 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:390
#, c-format
msgid "url '%s' is invalid\n"
msgstr "l'enllaz '%s' ye inválidu\n"
#: lib/libalpm/dload.c:464 lib/libalpm/dload.c:485 lib/libalpm/dload.c:496
#: lib/libalpm/dload.c:460 lib/libalpm/dload.c:481 lib/libalpm/dload.c:492
#, 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:473
#, 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:528
#, 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:672 lib/libalpm/dload.c:701
#, c-format
msgid "failed to download %s\n"
msgstr "fallu al lleer %s\n"
@@ -598,194 +598,199 @@ msgstr "falta la robla PGP"
msgid "invalid PGP signature"
msgstr "robla PGP non válida"
#: lib/libalpm/error.c:135 lib/libalpm/hook.c:514
#: lib/libalpm/error.c:135
#, c-format
msgid "invalid or corrupted delta"
msgstr "delta non válidu o toriáu"
#: lib/libalpm/error.c:137
#, c-format
msgid "delta patch failed"
msgstr "fallu del parche delta"
#: lib/libalpm/error.c:140 lib/libalpm/hook.c:614
#, c-format
msgid "could not satisfy dependencies"
msgstr "nun pudieron satisfacese les dependencies"
#: lib/libalpm/error.c:137
#: lib/libalpm/error.c:142
#, c-format
msgid "conflicting dependencies"
msgstr "dependencies en conflictu"
#: lib/libalpm/error.c:139
#: lib/libalpm/error.c:144
#, c-format
msgid "conflicting files"
msgstr "ficheros en conflictu"
#: lib/libalpm/error.c:142
#: lib/libalpm/error.c:147
#, c-format
msgid "failed to retrieve some files"
msgstr "fallu al recibir dello ficheros"
#: lib/libalpm/error.c:144
#: lib/libalpm/error.c:149
#, c-format
msgid "invalid regular expression"
msgstr "espresión regular non válida"
#: lib/libalpm/error.c:150
#: lib/libalpm/error.c:155
#, c-format
msgid "libarchive error"
msgstr "fallu de libarchive"
#: lib/libalpm/error.c:152
#: lib/libalpm/error.c:157
#, c-format
msgid "download library error"
msgstr "fallu de llibrería de descarga"
#: lib/libalpm/error.c:154
#: lib/libalpm/error.c:159
#, c-format
msgid "gpgme error"
msgstr "fallu de gpgme"
#: lib/libalpm/error.c:156
#: lib/libalpm/error.c:161
#, c-format
msgid "error invoking external downloader"
msgstr "fallu invocando'l descargador esternu"
#: lib/libalpm/error.c:159
#, c-format
msgid "compiled without signature support"
msgstr ""
#: lib/libalpm/error.c:162
#: lib/libalpm/error.c:164
#, c-format
msgid "unexpected error"
msgstr "fallu inesperáu"
#: lib/libalpm/handle.c:153
#: lib/libalpm/handle.c:157
#, 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:163
#, c-format
msgid "could not remove lock file %s\n"
msgstr "nun pudo desaniciase'l ficheru de bloquéu %s\n"
#: lib/libalpm/hook.c:95
#: lib/libalpm/hook.c:107
#, c-format
msgid "Missing trigger targets in hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:101
#: lib/libalpm/hook.c:113
#, c-format
msgid "Missing trigger type in hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:107
#: lib/libalpm/hook.c:119
#, c-format
msgid "Missing trigger operation in hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:134
#: lib/libalpm/hook.c:146
#, c-format
msgid "Missing Exec option in hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:140
#: lib/libalpm/hook.c:152
#, c-format
msgid "Missing When option in hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:143
#: lib/libalpm/hook.c:155
#, c-format
msgid "AbortOnFail set for PostTransaction hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:160
#: lib/libalpm/hook.c:273
#, c-format
msgid "error while reading hook %s: %s\n"
msgstr ""
#: lib/libalpm/hook.c:162 lib/libalpm/hook.c:206 lib/libalpm/hook.c:248
#: lib/libalpm/hook.c:275 lib/libalpm/hook.c:315 lib/libalpm/hook.c:357
#, c-format
msgid "hook %s line %d: invalid option %s\n"
msgstr ""
#: lib/libalpm/hook.c:172
#: lib/libalpm/hook.c:285
#, c-format
msgid "hook %s line %d: invalid section %s\n"
msgstr ""
#: lib/libalpm/hook.c:184 lib/libalpm/hook.c:199 lib/libalpm/hook.c:218
#: lib/libalpm/hook.c:241
#: lib/libalpm/hook.c:297 lib/libalpm/hook.c:308 lib/libalpm/hook.c:327
#: lib/libalpm/hook.c:350
#, c-format
msgid "hook %s line %d: invalid value %s\n"
msgstr ""
#: lib/libalpm/hook.c:188 lib/libalpm/hook.c:211 lib/libalpm/hook.c:222
#: lib/libalpm/hook.c:236
#: lib/libalpm/hook.c:301 lib/libalpm/hook.c:320 lib/libalpm/hook.c:331
#: lib/libalpm/hook.c:345
#, c-format
msgid "hook %s line %d: overwriting previous definition of %s\n"
msgstr ""
#: lib/libalpm/hook.c:243
#: lib/libalpm/hook.c:352
#, c-format
msgid "hook %s line %d: unable to set option (%s)\n"
msgstr ""
#: lib/libalpm/hook.c:513
#: lib/libalpm/hook.c:613
#, c-format
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:648 lib/libalpm/hook.c:660 lib/libalpm/remove.c:385
#, c-format
msgid "could not open directory: %s: %s\n"
msgstr "nun pudo abrise'l direutoriu: %s: %s\n"
#: lib/libalpm/hook.c:575
#: lib/libalpm/hook.c:676
#, c-format
msgid "could not open file: %s%s: %s\n"
msgstr ""
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:259
#: lib/libalpm/hook.c:696 lib/libalpm/util.c:259
#, c-format
msgid "could not stat file %s: %s\n"
msgstr ""
#: lib/libalpm/hook.c:621
#: lib/libalpm/hook.c:722
#, c-format
msgid "could not read directory: %s: %s\n"
msgstr ""
#: lib/libalpm/package.c:578
#: lib/libalpm/package.c:586
#, 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/remove.c:118
#, 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:153
#, 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:345
#, 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:410 lib/libalpm/remove.c:419
#, c-format
msgid "could not backup %s due to PATH_MAX overflow\n"
msgstr ""
#: lib/libalpm/remove.c:562
#: lib/libalpm/remove.c:561
#, c-format
msgid "cannot remove %s (%s)\n"
msgstr "nun pue desaniciase %s (%s)\n"
#: lib/libalpm/remove.c:735
#: lib/libalpm/remove.c:734
#, 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:739
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "nun pudo desaniciase la entrada '%s' de la caché\n"
@@ -795,155 +800,140 @@ msgstr "nun pudo desaniciase la entrada '%s' de la caché\n"
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:207 lib/libalpm/signing.c:705
#, c-format
msgid "GPGME error: %s\n"
msgstr ""
#: lib/libalpm/signing.c:284
#, c-format
msgid "looking up key %s using WKD\n"
msgstr ""
#: lib/libalpm/signing.c:293
#, c-format
msgid "gpg error: %s\n"
msgstr ""
#: lib/libalpm/signing.c:441 lib/libalpm/signing.c:515
#: lib/libalpm/signing.c:402
#, c-format
msgid "keyring is not writable\n"
msgstr ""
#: lib/libalpm/signing.c:539
#, c-format
msgid "key \"%s\" on keyserver\n"
msgstr ""
#: lib/libalpm/signing.c:544
#: lib/libalpm/signing.c:460
#, c-format
msgid "key \"%s\" could not be imported\n"
msgstr ""
#: lib/libalpm/signing.c:548
#: lib/libalpm/signing.c:466
#, c-format
msgid "key %s, \"%s\" found on keyserver, keyring is not writable\n"
msgstr ""
#: lib/libalpm/signing.c:471
#, 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:859 lib/libalpm/sync.c:1181
#, c-format
msgid "%s: missing required signature\n"
msgstr "%s: falta la robla riquida\n"
#: lib/libalpm/signing.c:958
#: lib/libalpm/signing.c:874
#, c-format
msgid "%s: signature from \"%s\" is marginal trust\n"
msgstr ""
#: lib/libalpm/signing.c:966
#: lib/libalpm/signing.c:882
#, c-format
msgid "%s: signature from \"%s\" is unknown trust\n"
msgstr ""
#: lib/libalpm/signing.c:973
#: lib/libalpm/signing.c:889
#, c-format
msgid "%s: signature from \"%s\" should never be trusted\n"
msgstr ""
#: lib/libalpm/signing.c:985
#: lib/libalpm/signing.c:901
#, c-format
msgid "%s: key \"%s\" is unknown\n"
msgstr ""
#: lib/libalpm/signing.c:994
#: lib/libalpm/signing.c:910
#, c-format
msgid "%s: key \"%s\" is disabled\n"
msgstr ""
#: lib/libalpm/signing.c:998
#: lib/libalpm/signing.c:914
#, c-format
msgid "%s: signature from \"%s\" is expired\n"
msgstr ""
#: lib/libalpm/signing.c:1002
#: lib/libalpm/signing.c:918
#, 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:995 lib/libalpm/signing.c:1063
#: lib/libalpm/signing.c:1142
#, 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:1095 lib/libalpm/signing.c:1128
#: lib/libalpm/signing.c:1136
#, c-format
msgid "%s: unsupported signature format\n"
msgstr ""
#: lib/libalpm/sync.c:99
#: lib/libalpm/sync.c:98
#, 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:110
#, 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:113
#, 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:119
#, 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:160
#, 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:176
#, 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:538 lib/libalpm/sync.c:608
#, 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:558
#, c-format
msgid "removing '%s' from target list because it conflicts with '%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:1019
#, c-format
msgid "failed to retrieve some files\n"
msgstr "fallu al recuperar dellos ficheros\n"
#: lib/libalpm/sync.c:1036
#, c-format
msgid "failed to read file %s: %s\n"
msgstr ""
#: lib/libalpm/sync.c:1223
#: lib/libalpm/sync.c:1384
#, 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:1406
#, 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:1414
#, c-format
msgid "could not commit transaction\n"
msgstr "nun pudo unviase la transaición\n"

View File

@@ -3,14 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Galin Iskrenov <loot270@abv.bg>, 2017-2019
# Galin Iskrenov <loot270@abv.bg>, 2017-2018
# 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"
"POT-Creation-Date: 2018-12-12 11:09+1000\n"
"PO-Revision-Date: 2018-05-15 12:11+0000\n"
"Last-Translator: Galin Iskrenov <loot270@abv.bg>\n"
"Language-Team: Bulgarian (http://www.transifex.com/toofishes/archlinux-"
"pacman/language/bg/)\n"
@@ -20,54 +20,54 @@ 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:86
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s е актуален -- пропускане\n"
#: lib/libalpm/add.c:95
#: lib/libalpm/add.c:90
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s е актуален -- преинсталиране\n"
#: lib/libalpm/add.c:100
#: lib/libalpm/add.c:95
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "понижаване на пакет %s (%s => %s)\n"
#: lib/libalpm/add.c:129
#: lib/libalpm/add.c:124
#, c-format
msgid "cannot allocate disk archive object"
msgstr "не се открие указания архив на диск"
#: lib/libalpm/add.c:143 lib/libalpm/util.c:382
#: lib/libalpm/add.c:138 lib/libalpm/util.c:382
#, 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:141 lib/libalpm/util.c:385
#, 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:154 lib/libalpm/dload.c:569 lib/libalpm/remove.c:541
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "не може да се преименува %s на %s (%s)\n"
#: lib/libalpm/add.c:210
#: lib/libalpm/add.c:205
#, c-format
msgid "file not found in file list for package %s. skipping extraction of %s\n"
msgstr ""
"файл не е намерен в листа с файлове на пекет %s. пропускане извличането на "
"%s\n"
#: lib/libalpm/add.c:219
#: lib/libalpm/add.c:214
#, c-format
msgid "unable to extract %s%s: path too long"
msgstr "неспешно извличането на %s%s: пътят е твърде дълъг"
#: lib/libalpm/add.c:261
#: lib/libalpm/add.c:256
#, c-format
msgid ""
"directory permissions differ on %s\n"
@@ -76,7 +76,7 @@ msgstr ""
"разлика в правата на папка за %s\n"
"filesystem: %o пакет: %o\n"
#: lib/libalpm/add.c:276
#: lib/libalpm/add.c:271
#, c-format
msgid ""
"directory ownership differs on %s\n"
@@ -85,101 +85,101 @@ msgstr ""
"правата на директория се различава от %s\n"
"filesystem: %u:%u пакет: %u:%u\n"
#: lib/libalpm/add.c:292
#: lib/libalpm/add.c:287
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr "извличане: не се презаписва папка с файл %s\n"
#: lib/libalpm/add.c:320
#: lib/libalpm/add.c:315
#, c-format
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:508 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#, 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/add.c:513 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/util.c:650
#, 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:570 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#, c-format
msgid "could not restore working directory (%s)\n"
msgstr "не може да се възстанови работната директория (%s)\n"
#: lib/libalpm/add.c:583
#: lib/libalpm/add.c:578
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "възникнал проблем при подновяване %s\n"
#: lib/libalpm/add.c:589
#: lib/libalpm/add.c:584
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "възникнал проблем при инсталиране %s\n"
#: lib/libalpm/add.c:604
#: lib/libalpm/add.c:599
#, 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:255
#, 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:350
#, 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:401 lib/libalpm/be_local.c:887
#, 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:576 lib/libalpm/be_sync.c:387
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "невалидно име за запис в базата '%s'\n"
#: lib/libalpm/be_local.c:598
#: lib/libalpm/be_local.c:584
#, c-format
msgid "duplicated database entry '%s'\n"
msgstr "дублиран запис в базата '%s'\n"
#: lib/libalpm/be_local.c:610
#: lib/libalpm/be_local.c:596
#, 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/be_local.c:699 lib/libalpm/be_local.c:791
#: lib/libalpm/be_local.c:936 lib/libalpm/be_local.c:1033
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:419 lib/libalpm/util.c:253
#: lib/libalpm/util.c:269
#, 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:715 lib/libalpm/be_sync.c:653
#, 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:721 lib/libalpm/be_sync.c:659
#, 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:762
#, c-format
msgid "unknown validation type for package %s: %s\n"
msgstr "непознат валидиращ тип на пакета %s: %s\n"
@@ -220,42 +220,42 @@ msgstr "невалидна версия на пакет в %s\n"
msgid "missing package metadata in %s\n"
msgstr "липсват метаданни за пакета %s\n"
#: lib/libalpm/be_package.c:750
#: lib/libalpm/be_package.c:748
#, 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:769 lib/libalpm/sync.c:1113
#, c-format
msgid "required key missing from keyring\n"
msgstr "нужния ключ липсва от keyring\n"
#: lib/libalpm/be_sync.c:61
#: lib/libalpm/be_sync.c:62
#, c-format
msgid "removing invalid file: %s\n"
msgstr "премахване невалиден файл: %s\n"
#: lib/libalpm/be_sync.c:515
#: lib/libalpm/be_sync.c:517
#, 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:524
#, 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:558 lib/libalpm/be_sync.c:563
#, 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:568
#, 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:634
#, c-format
msgid "unknown database file: %s\n"
msgstr "непознат датабаза файл: %s\n"
@@ -280,12 +280,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:682 lib/libalpm/deps.c:712
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "пренебрегване на пакет %s-%s\n"
#: lib/libalpm/deps.c:869
#: lib/libalpm/deps.c:867
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "не може да се разреши \"%s\", зависи от \"%s\"\n"
@@ -342,39 +342,39 @@ msgstr "не може да се определи root mount point %s\n"
msgid "Partition %s is mounted read only\n"
msgstr "Дялът %s е монтиран само за четене\n"
#: lib/libalpm/dload.c:161
#: lib/libalpm/dload.c:159
#, c-format
msgid "disk"
msgstr "диск"
#: lib/libalpm/dload.c:348
#: lib/libalpm/dload.c:345
#, c-format
msgid "failed to create temporary file for download\n"
msgstr "не може да се създаде временен файл за сваляне\n"
#: lib/libalpm/dload.c:393
#: lib/libalpm/dload.c:390
#, c-format
msgid "url '%s' is invalid\n"
msgstr "url '%s' е невалиден\n"
#: lib/libalpm/dload.c:464 lib/libalpm/dload.c:485 lib/libalpm/dload.c:496
#: lib/libalpm/dload.c:460 lib/libalpm/dload.c:481 lib/libalpm/dload.c:492
#, 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:473
#, 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:528
#, 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:672 lib/libalpm/dload.c:701
#, c-format
msgid "failed to download %s\n"
msgstr "неуспех при сваляне на %s\n"
@@ -594,194 +594,199 @@ msgstr "липсва PGP подпис"
msgid "invalid PGP signature"
msgstr "невалиден PGP подпис"
#: lib/libalpm/error.c:135 lib/libalpm/hook.c:514
#: lib/libalpm/error.c:135
#, c-format
msgid "invalid or corrupted delta"
msgstr "невалидна или повредена delta"
#: lib/libalpm/error.c:137
#, c-format
msgid "delta patch failed"
msgstr "делта пач се провали"
#: lib/libalpm/error.c:140 lib/libalpm/hook.c:614
#, c-format
msgid "could not satisfy dependencies"
msgstr "зависимостите не са решени"
#: lib/libalpm/error.c:137
#: lib/libalpm/error.c:142
#, c-format
msgid "conflicting dependencies"
msgstr "зависимости в конфликт"
#: lib/libalpm/error.c:139
#: lib/libalpm/error.c:144
#, c-format
msgid "conflicting files"
msgstr "файлове в конфликт"
#: lib/libalpm/error.c:142
#: lib/libalpm/error.c:147
#, c-format
msgid "failed to retrieve some files"
msgstr "не могат да се извлекат файлове"
#: lib/libalpm/error.c:144
#: lib/libalpm/error.c:149
#, c-format
msgid "invalid regular expression"
msgstr "невалиден регулярен израз"
#: lib/libalpm/error.c:150
#: lib/libalpm/error.c:155
#, c-format
msgid "libarchive error"
msgstr "грешка в libarchive"
#: lib/libalpm/error.c:152
#: lib/libalpm/error.c:157
#, c-format
msgid "download library error"
msgstr "грешка в библиотеката за сваляне"
#: lib/libalpm/error.c:154
#: lib/libalpm/error.c:159
#, c-format
msgid "gpgme error"
msgstr "грешка в gpgme"
#: lib/libalpm/error.c:156
#: lib/libalpm/error.c:161
#, c-format
msgid "error invoking external downloader"
msgstr "грешка при извикването на външен downloader"
#: lib/libalpm/error.c:159
#, c-format
msgid "compiled without signature support"
msgstr "компилиран без поддръжка на подпис"
#: lib/libalpm/error.c:162
#: lib/libalpm/error.c:164
#, c-format
msgid "unexpected error"
msgstr "неочаквана грешка"
#: lib/libalpm/handle.c:153
#: lib/libalpm/handle.c:157
#, c-format
msgid "lock file missing %s\n"
msgstr "липсва заключващ файл %s\n"
#: lib/libalpm/handle.c:159
#: lib/libalpm/handle.c:163
#, c-format
msgid "could not remove lock file %s\n"
msgstr "не се премахва заключен файл %s\n"
#: lib/libalpm/hook.c:95
#: lib/libalpm/hook.c:107
#, c-format
msgid "Missing trigger targets in hook: %s\n"
msgstr "Липсва цели на спусъка в куката: %s\n"
#: lib/libalpm/hook.c:101
#: lib/libalpm/hook.c:113
#, c-format
msgid "Missing trigger type in hook: %s\n"
msgstr "Липсва тип на спусъка в куката: %s\n"
#: lib/libalpm/hook.c:107
#: lib/libalpm/hook.c:119
#, c-format
msgid "Missing trigger operation in hook: %s\n"
msgstr "Липсва операция на спусъка в куката: %s\n"
#: lib/libalpm/hook.c:134
#: lib/libalpm/hook.c:146
#, c-format
msgid "Missing Exec option in hook: %s\n"
msgstr "Липсва Exec опция в куката: %s\n"
#: lib/libalpm/hook.c:140
#: lib/libalpm/hook.c:152
#, c-format
msgid "Missing When option in hook: %s\n"
msgstr "Липсва When опция в куката: %s\n"
#: lib/libalpm/hook.c:143
#: lib/libalpm/hook.c:155
#, c-format
msgid "AbortOnFail set for PostTransaction hook: %s\n"
msgstr "AbortOnFail е зададен за PostTransaction кука: %s\n"
#: lib/libalpm/hook.c:160
#: lib/libalpm/hook.c:273
#, c-format
msgid "error while reading hook %s: %s\n"
msgstr "грешка при четене на куката %s: %s\n"
#: lib/libalpm/hook.c:162 lib/libalpm/hook.c:206 lib/libalpm/hook.c:248
#: lib/libalpm/hook.c:275 lib/libalpm/hook.c:315 lib/libalpm/hook.c:357
#, c-format
msgid "hook %s line %d: invalid option %s\n"
msgstr "кука %s ред %d: невалидна опция %s\n"
#: lib/libalpm/hook.c:172
#: lib/libalpm/hook.c:285
#, c-format
msgid "hook %s line %d: invalid section %s\n"
msgstr "кука %s ред %d: невалидна секция %s\n"
#: lib/libalpm/hook.c:184 lib/libalpm/hook.c:199 lib/libalpm/hook.c:218
#: lib/libalpm/hook.c:241
#: lib/libalpm/hook.c:297 lib/libalpm/hook.c:308 lib/libalpm/hook.c:327
#: lib/libalpm/hook.c:350
#, c-format
msgid "hook %s line %d: invalid value %s\n"
msgstr "кука %s ред %d: невалидна стойност %s\n"
#: lib/libalpm/hook.c:188 lib/libalpm/hook.c:211 lib/libalpm/hook.c:222
#: lib/libalpm/hook.c:236
#: lib/libalpm/hook.c:301 lib/libalpm/hook.c:320 lib/libalpm/hook.c:331
#: lib/libalpm/hook.c:345
#, c-format
msgid "hook %s line %d: overwriting previous definition of %s\n"
msgstr "кука %s ред %d: пренаписва предишната дефиниция на %s\n"
#: lib/libalpm/hook.c:243
#: lib/libalpm/hook.c:352
#, c-format
msgid "hook %s line %d: unable to set option (%s)\n"
msgstr "кука %s ред %d: невъзможно да се зададе опцията (%s)\n"
#: lib/libalpm/hook.c:513
#: lib/libalpm/hook.c:613
#, c-format
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:648 lib/libalpm/hook.c:660 lib/libalpm/remove.c:385
#, c-format
msgid "could not open directory: %s: %s\n"
msgstr "не се отваря папка: %s: %s\n"
#: lib/libalpm/hook.c:575
#: lib/libalpm/hook.c:676
#, c-format
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:696 lib/libalpm/util.c:259
#, c-format
msgid "could not stat file %s: %s\n"
msgstr "не се коригира %s: %s\n"
#: lib/libalpm/hook.c:621
#: lib/libalpm/hook.c:722
#, c-format
msgid "could not read directory: %s: %s\n"
msgstr "не може да се прочете папката: %s: %s\n"
#: lib/libalpm/package.c:578
#: lib/libalpm/package.c:586
#, c-format
msgid "could not fully load metadata for package %s-%s\n"
msgstr "не пълно извеждане на метаданни за пакет %s-%s\n"
#: lib/libalpm/remove.c:119
#: lib/libalpm/remove.c:118
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "няма %s в базата -- пропускане\n"
#: lib/libalpm/remove.c:154
#: lib/libalpm/remove.c:153
#, c-format
msgid "removing %s from target list\n"
msgstr "премахване %s от списъка с целите\n"
#: lib/libalpm/remove.c:346
#: lib/libalpm/remove.c:345
#, 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:410 lib/libalpm/remove.c:419
#, 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:561
#, c-format
msgid "cannot remove %s (%s)\n"
msgstr "не се премахва %s (%s)\n"
#: lib/libalpm/remove.c:735
#: lib/libalpm/remove.c:734
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "не може да се премахне запис в базата %s-%s\n"
#: lib/libalpm/remove.c:740
#: lib/libalpm/remove.c:739
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "не може да се премахне '%s' от кеша\n"
@@ -791,154 +796,139 @@ msgstr "не може да се премахне '%s' от кеша\n"
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:207 lib/libalpm/signing.c:705
#, c-format
msgid "GPGME error: %s\n"
msgstr "GPGME грешка: %s\n"
#: lib/libalpm/signing.c:284
#, c-format
msgid "looking up key %s using WKD\n"
msgstr "търсене на ключ %s използвайки WKD\n"
#: lib/libalpm/signing.c:293
#, 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:402
#, c-format
msgid "keyring is not writable\n"
msgstr "ключодържателя не се записва\n"
#: lib/libalpm/signing.c:539
#, c-format
msgid "key \"%s\" on keyserver\n"
msgstr "ключ \"%s\" на ключов съвър\n"
#: lib/libalpm/signing.c:544
#: lib/libalpm/signing.c:460
#, c-format
msgid "key \"%s\" could not be imported\n"
msgstr "ключ \"%s\" не може да се внесе\n"
#: lib/libalpm/signing.c:548
#: lib/libalpm/signing.c:466
#, c-format
msgid "key %s, \"%s\" found on keyserver, keyring is not writable\n"
msgstr "ключ %s, \"%s\" е открит в сървъра с ключове, ключ не се записва\n"
#: lib/libalpm/signing.c:471
#, 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:859 lib/libalpm/sync.c:1181
#, c-format
msgid "%s: missing required signature\n"
msgstr "%s: липсва изискващ се подпис\n"
#: lib/libalpm/signing.c:958
#: lib/libalpm/signing.c:874
#, c-format
msgid "%s: signature from \"%s\" is marginal trust\n"
msgstr "%s: подписът от \"%s\" е изрично доверен\n"
#: lib/libalpm/signing.c:966
#: lib/libalpm/signing.c:882
#, c-format
msgid "%s: signature from \"%s\" is unknown trust\n"
msgstr "%s: подписът от \"%s\" е с непознато доверие\n"
#: lib/libalpm/signing.c:973
#: lib/libalpm/signing.c:889
#, 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:901
#, c-format
msgid "%s: key \"%s\" is unknown\n"
msgstr "%s: ключ \"%s\" е непознат\n"
#: lib/libalpm/signing.c:994
#: lib/libalpm/signing.c:910
#, c-format
msgid "%s: key \"%s\" is disabled\n"
msgstr "%s: ключа е \"%s\" е негоден\n"
#: lib/libalpm/signing.c:998
#: lib/libalpm/signing.c:914
#, c-format
msgid "%s: signature from \"%s\" is expired\n"
msgstr "%s: подписът от \"%s\" е изтекъл\n"
#: lib/libalpm/signing.c:1002
#: lib/libalpm/signing.c:918
#, 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:995 lib/libalpm/signing.c:1063
#: lib/libalpm/signing.c:1142
#, 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:1095 lib/libalpm/signing.c:1128
#: lib/libalpm/signing.c:1136
#, c-format
msgid "%s: unsupported signature format\n"
msgstr "%s: неподдържан формат на подписа\n"
#: lib/libalpm/sync.c:99
#: lib/libalpm/sync.c:98
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: игнориране надграждането на пакет (%s => %s)\n"
#: lib/libalpm/sync.c:111
#: lib/libalpm/sync.c:110
#, 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:113
#, 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:119
#, 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:160
#, 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:176
#, 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:538 lib/libalpm/sync.c:608
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr "засечени нерешени пакетни конфликти\n"
#: lib/libalpm/sync.c:555
#: lib/libalpm/sync.c:558
#, c-format
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgstr "премахване '%s' от целевия списък заради конфликт с '%s'\n"
#: lib/libalpm/sync.c:849
#: lib/libalpm/sync.c:1019
#, c-format
msgid "failed to retrieve some files\n"
msgstr "неуспех при извличане на файлове\n"
#: lib/libalpm/sync.c:1036
#, c-format
msgid "failed to read file %s: %s\n"
msgstr "не успя да се прочете файла %s: %s\n"
#: lib/libalpm/sync.c:1223
#: lib/libalpm/sync.c:1384
#, c-format
msgid "not enough free disk space\n"
msgstr "няма достатъчно свободно място на диска\n"
#: lib/libalpm/sync.c:1245
#: lib/libalpm/sync.c:1406
#, c-format
msgid "could not commit removal transaction\n"
msgstr "не се потвърждава транзакцията по премахване\n"
#: lib/libalpm/sync.c:1253
#: lib/libalpm/sync.c:1414
#, c-format
msgid "could not commit transaction\n"
msgstr "не се потвърждава транзакцията\n"

View File

@@ -4,14 +4,14 @@
#
# Translators:
# Gwenn M <tornoz@laposte.net>, 2015
# Gwenn M <tornoz@laposte.net>, 2015,2018-2019
# Gwenn M <tornoz@laposte.net>, 2015,2018
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"
"POT-Creation-Date: 2018-12-12 11:09+1000\n"
"PO-Revision-Date: 2018-08-06 13:32+0000\n"
"Last-Translator: Gwenn M <tornoz@laposte.net>\n"
"Language-Team: Breton (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/br/)\n"
"Language: br\n"
@@ -24,54 +24,54 @@ msgstr ""
"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:86
#, 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:90
#, 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:95
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "o pellgargañ ar pakad %s (%s => %s)\n"
#: lib/libalpm/add.c:129
#: lib/libalpm/add.c:124
#, c-format
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:138 lib/libalpm/util.c:382
#, 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:141 lib/libalpm/util.c:385
#, 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:154 lib/libalpm/dload.c:569 lib/libalpm/remove.c:541
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "n'haller ket adenvel %s e %s (%s)\n"
#: lib/libalpm/add.c:210
#: lib/libalpm/add.c:205
#, c-format
msgid "file not found in file list for package %s. skipping extraction of %s\n"
msgstr ""
"n'eo ket bet kavet ar restr er roll restroù evit ar pakad %s. o tremen "
"eztennadur %s\n"
#: lib/libalpm/add.c:219
#: lib/libalpm/add.c:214
#, c-format
msgid "unable to extract %s%s: path too long"
msgstr "n'haller ket eztennañ %s%s : re hir eo an treug"
#: lib/libalpm/add.c:261
#: lib/libalpm/add.c:256
#, c-format
msgid ""
"directory permissions differ on %s\n"
@@ -80,7 +80,7 @@ msgstr ""
"disheñvel eo an aotreoù kavlec'hioù war %s\n"
"reizhad restroù : %o pakad : %o\n"
#: lib/libalpm/add.c:276
#: lib/libalpm/add.c:271
#, c-format
msgid ""
"directory ownership differs on %s\n"
@@ -89,102 +89,102 @@ msgstr ""
"disheñvel eo perc'henniezh ar c'havlec'hioù evit %s\n"
"reizhad restroù : %u:%u pakad : %u:%u\n"
#: lib/libalpm/add.c:292
#: lib/libalpm/add.c:287
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr "eztannadur : flastradur kavlec'h gant restr %s ebet \n"
#: lib/libalpm/add.c:320
#: lib/libalpm/add.c:315
#, c-format
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:508 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#, 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/add.c:513 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/util.c:650
#, 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:570 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#, 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:578
#, 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:584
#, 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:599
#, 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:255
#, 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:350
#, 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:401 lib/libalpm/be_local.c:887
#, 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:576 lib/libalpm/be_sync.c:387
#, 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:584
#, 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:596
#, 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/be_local.c:699 lib/libalpm/be_local.c:791
#: lib/libalpm/be_local.c:936 lib/libalpm/be_local.c:1033
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:419 lib/libalpm/util.c:253
#: lib/libalpm/util.c:269
#, 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:715 lib/libalpm/be_sync.c:653
#, 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:721 lib/libalpm/be_sync.c:659
#, 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:762
#, c-format
msgid "unknown validation type for package %s: %s\n"
msgstr "doare gwiriadur dianav evit ar pakad %s : %s\n"
@@ -225,44 +225,44 @@ msgstr "handelv pakad direizh e %s\n"
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:748
#, 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:769 lib/libalpm/sync.c:1113
#, c-format
msgid "required key missing from keyring\n"
msgstr "mankout a ra an alc'hwez goulennet en droñsell\n"
#: lib/libalpm/be_sync.c:61
#: lib/libalpm/be_sync.c:62
#, c-format
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:517
#, 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:524
#, 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:558 lib/libalpm/be_sync.c:563
#, 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:568
#, 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:634
#, c-format
msgid "unknown database file: %s\n"
msgstr "restr stlennvon dianav : %s\n"
@@ -287,12 +287,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:682 lib/libalpm/deps.c:712
#, 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:867
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "n'haller ket diskoulmañ \"%s\", un amzalc'h \"%s\"\n"
@@ -348,39 +348,39 @@ msgstr "n'haller ket despizañ poent kenstrollañ ar gwrizienn %s\n"
msgid "Partition %s is mounted read only\n"
msgstr "E mod lenn nemetken eo kenstrollet ar parzhad %s\n"
#: lib/libalpm/dload.c:161
#: lib/libalpm/dload.c:159
#, c-format
msgid "disk"
msgstr "pladenn"
#: lib/libalpm/dload.c:348
#: lib/libalpm/dload.c:345
#, 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:390
#, c-format
msgid "url '%s' is invalid\n"
msgstr "direizh eo an url '%s'\n"
#: lib/libalpm/dload.c:464 lib/libalpm/dload.c:485 lib/libalpm/dload.c:496
#: lib/libalpm/dload.c:460 lib/libalpm/dload.c:481 lib/libalpm/dload.c:492
#, 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:473
#, 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:528
#, 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:672 lib/libalpm/dload.c:701
#, c-format
msgid "failed to download %s\n"
msgstr "fazi en ur pellgargañ %s\n"
@@ -601,194 +601,199 @@ msgstr "mankout a ra ar sinadur PGP"
msgid "invalid PGP signature"
msgstr "direizh eo ar sinadur PGP"
#: lib/libalpm/error.c:135 lib/libalpm/hook.c:514
#: lib/libalpm/error.c:135
#, c-format
msgid "invalid or corrupted delta"
msgstr "direizh pe kontronet eo an delta"
#: lib/libalpm/error.c:137
#, c-format
msgid "delta patch failed"
msgstr "c'hwitadenn war pegell an delta"
#: lib/libalpm/error.c:140 lib/libalpm/hook.c:614
#, c-format
msgid "could not satisfy dependencies"
msgstr "n'haller ket kejañ an holl amzalc'hoù"
#: lib/libalpm/error.c:137
#: lib/libalpm/error.c:142
#, c-format
msgid "conflicting dependencies"
msgstr "tabutoù en amzalc'hoù"
#: lib/libalpm/error.c:139
#: lib/libalpm/error.c:144
#, c-format
msgid "conflicting files"
msgstr "tabut er restroù"
#: lib/libalpm/error.c:142
#: lib/libalpm/error.c:147
#, c-format
msgid "failed to retrieve some files"
msgstr "c'hwitadenn war atoradur restroù 'zo"
#: lib/libalpm/error.c:144
#: lib/libalpm/error.c:149
#, c-format
msgid "invalid regular expression"
msgstr "direizh eo ar bomm reol"
#: lib/libalpm/error.c:150
#: lib/libalpm/error.c:155
#, c-format
msgid "libarchive error"
msgstr "fazi libarchive"
#: lib/libalpm/error.c:152
#: lib/libalpm/error.c:157
#, c-format
msgid "download library error"
msgstr "pellgargañ fazi al levraoueg"
#: lib/libalpm/error.c:154
#: lib/libalpm/error.c:159
#, c-format
msgid "gpgme error"
msgstr "fazi gpgme"
#: lib/libalpm/error.c:156
#: lib/libalpm/error.c:161
#, c-format
msgid "error invoking external downloader"
msgstr "fazi en ur gervel ar pellgarger diavaez"
#: lib/libalpm/error.c:159
#, c-format
msgid "compiled without signature support"
msgstr ""
#: lib/libalpm/error.c:162
#: lib/libalpm/error.c:164
#, c-format
msgid "unexpected error"
msgstr "fazi dic'hortoz"
#: lib/libalpm/handle.c:153
#: lib/libalpm/handle.c:157
#, 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:163
#, c-format
msgid "could not remove lock file %s\n"
msgstr "n'haller ket dilemel ar restr marilhañ %s\n"
#: lib/libalpm/hook.c:95
#: lib/libalpm/hook.c:107
#, c-format
msgid "Missing trigger targets in hook: %s\n"
msgstr "Mankout a ra bukennoù delusker er c'hrog: %s\n"
#: lib/libalpm/hook.c:101
#: lib/libalpm/hook.c:113
#, c-format
msgid "Missing trigger type in hook: %s\n"
msgstr "Mankout a ra rizh an delusker er c'hrog: %s\n"
#: lib/libalpm/hook.c:107
#: lib/libalpm/hook.c:119
#, c-format
msgid "Missing trigger operation in hook: %s\n"
msgstr "Mankout a ra gwezhiadur an delusker er c'hrog: %s\n"
#: lib/libalpm/hook.c:134
#: lib/libalpm/hook.c:146
#, c-format
msgid "Missing Exec option in hook: %s\n"
msgstr "Mankout a ra an dibarzh Exec er c'hrog: %s\n"
#: lib/libalpm/hook.c:140
#: lib/libalpm/hook.c:152
#, c-format
msgid "Missing When option in hook: %s\n"
msgstr "Mankout a ra an dibarzh When er c'hrog: %s\n"
#: lib/libalpm/hook.c:143
#: lib/libalpm/hook.c:155
#, c-format
msgid "AbortOnFail set for PostTransaction hook: %s\n"
msgstr "AbortOnFail lakaet evit ar c'hrog PostTransaction: %s\n"
#: lib/libalpm/hook.c:160
#: lib/libalpm/hook.c:273
#, c-format
msgid "error while reading hook %s: %s\n"
msgstr "fazi en ul lenn ar c'hrog %s: %s\n"
#: lib/libalpm/hook.c:162 lib/libalpm/hook.c:206 lib/libalpm/hook.c:248
#: lib/libalpm/hook.c:275 lib/libalpm/hook.c:315 lib/libalpm/hook.c:357
#, c-format
msgid "hook %s line %d: invalid option %s\n"
msgstr "krog %s linenn %d: dibarzh didalvoudek %s\n"
#: lib/libalpm/hook.c:172
#: lib/libalpm/hook.c:285
#, c-format
msgid "hook %s line %d: invalid section %s\n"
msgstr "krog %slinenn %d: dibarzh didalvoudek %s\n"
#: lib/libalpm/hook.c:184 lib/libalpm/hook.c:199 lib/libalpm/hook.c:218
#: lib/libalpm/hook.c:241
#: lib/libalpm/hook.c:297 lib/libalpm/hook.c:308 lib/libalpm/hook.c:327
#: lib/libalpm/hook.c:350
#, c-format
msgid "hook %s line %d: invalid value %s\n"
msgstr "krog %s linenn %d: gwerzh didalvoudek %s\n"
#: lib/libalpm/hook.c:188 lib/libalpm/hook.c:211 lib/libalpm/hook.c:222
#: lib/libalpm/hook.c:236
#: lib/libalpm/hook.c:301 lib/libalpm/hook.c:320 lib/libalpm/hook.c:331
#: lib/libalpm/hook.c:345
#, c-format
msgid "hook %s line %d: overwriting previous definition of %s\n"
msgstr "krog %s linenn %d: flastrañ despizadur kent %s\n"
#: lib/libalpm/hook.c:243
#: lib/libalpm/hook.c:352
#, c-format
msgid "hook %s line %d: unable to set option (%s)\n"
msgstr "krog %s linenn %d: n'haller ket arventennañ an dibarzh (%s)\n"
#: lib/libalpm/hook.c:513
#: lib/libalpm/hook.c:613
#, c-format
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:648 lib/libalpm/hook.c:660 lib/libalpm/remove.c:385
#, c-format
msgid "could not open directory: %s: %s\n"
msgstr "n'haller ket digeriñ ar c'havlec'h : %s : %s\n"
#: lib/libalpm/hook.c:575
#: lib/libalpm/hook.c:676
#, c-format
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:696 lib/libalpm/util.c:259
#, c-format
msgid "could not stat file %s: %s\n"
msgstr "n'heller ket kaout stad ar restr %s : %s\n"
#: lib/libalpm/hook.c:621
#: lib/libalpm/hook.c:722
#, c-format
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:586
#, 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/remove.c:118
#, 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:153
#, 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:345
#, 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:410 lib/libalpm/remove.c:419
#, 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:561
#, 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:734
#, 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:739
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "n'haller ket dilemel an enankad '%s' eus ar c'hrubuilh\n"
@@ -798,154 +803,139 @@ msgstr "n'haller ket dilemel an enankad '%s' eus ar c'hrubuilh\n"
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:207 lib/libalpm/signing.c:705
#, c-format
msgid "GPGME error: %s\n"
msgstr "Fazi GPGME: %s\n"
#: lib/libalpm/signing.c:284
#, c-format
msgid "looking up key %s using WKD\n"
msgstr ""
#: lib/libalpm/signing.c:293
#, c-format
msgid "gpg error: %s\n"
msgstr ""
#: lib/libalpm/signing.c:441 lib/libalpm/signing.c:515
#: lib/libalpm/signing.c:402
#, c-format
msgid "keyring is not writable\n"
msgstr "n'haller ket skrivañ en droñsell\n"
#: lib/libalpm/signing.c:539
#, c-format
msgid "key \"%s\" on keyserver\n"
msgstr ""
#: lib/libalpm/signing.c:544
#: lib/libalpm/signing.c:460
#, c-format
msgid "key \"%s\" could not be imported\n"
msgstr ""
#: lib/libalpm/signing.c:548
#: lib/libalpm/signing.c:466
#, c-format
msgid "key %s, \"%s\" found on keyserver, keyring is not writable\n"
msgstr ""
#: lib/libalpm/signing.c:471
#, 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:859 lib/libalpm/sync.c:1181
#, 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:874
#, c-format
msgid "%s: signature from \"%s\" is marginal trust\n"
msgstr "%s: mentrezh ar sinadur \"%s\" n'eo ket fizius-tre\n"
msgstr ""
#: lib/libalpm/signing.c:966
#: lib/libalpm/signing.c:882
#, c-format
msgid "%s: signature from \"%s\" is unknown trust\n"
msgstr ""
#: lib/libalpm/signing.c:973
#: lib/libalpm/signing.c:889
#, c-format
msgid "%s: signature from \"%s\" should never be trusted\n"
msgstr ""
#: lib/libalpm/signing.c:985
#: lib/libalpm/signing.c:901
#, c-format
msgid "%s: key \"%s\" is unknown\n"
msgstr "%s: dianav zo an alc'hwez \"%s\"\n"
msgstr ""
#: lib/libalpm/signing.c:994
#: lib/libalpm/signing.c:910
#, c-format
msgid "%s: key \"%s\" is disabled\n"
msgstr ""
#: lib/libalpm/signing.c:998
#: lib/libalpm/signing.c:914
#, c-format
msgid "%s: signature from \"%s\" is expired\n"
msgstr ""
#: lib/libalpm/signing.c:1002
#: lib/libalpm/signing.c:918
#, 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:995 lib/libalpm/signing.c:1063
#: lib/libalpm/signing.c:1142
#, 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:1095 lib/libalpm/signing.c:1128
#: lib/libalpm/signing.c:1136
#, c-format
msgid "%s: unsupported signature format\n"
msgstr "%s: mentrezh sinadur anskor\n"
msgstr ""
#: lib/libalpm/sync.c:99
#: lib/libalpm/sync.c:98
#, 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:110
#, 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:113
#, 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:119
#, 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:160
#, 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:176
#, 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:538 lib/libalpm/sync.c:608
#, 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:558
#, 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"
#: lib/libalpm/sync.c:849
#: lib/libalpm/sync.c:1019
#, c-format
msgid "failed to retrieve some files\n"
msgstr "c'hwitadenn war atoradur restroù 'zo\n"
#: lib/libalpm/sync.c:1036
#, c-format
msgid "failed to read file %s: %s\n"
msgstr ""
#: lib/libalpm/sync.c:1223
#: lib/libalpm/sync.c:1384
#, 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:1406
#, 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:1414
#, c-format
msgid "could not commit transaction\n"
msgstr "n'haller ket erounit an treuzkas\n"

File diff suppressed because it is too large Load Diff

View File

@@ -7,8 +7,8 @@
# David Kolibáč <david@kolibac.cz>, 2011
# David Macek <david.macek.0@gmail.com>, 2018
# IAmNotImportant, 2017
# Jaroslav Lichtblau <jlichtblau@seznam.cz>, 2014-2015
# Jaroslav Lichtblau <jlichtblau@seznam.cz>, 2014
# Jaroslav Lichtblau <dragonlord@seznam.cz>, 2014-2015
# Jaroslav Lichtblau <dragonlord@seznam.cz>, 2014
# mmm <markotahal@gmail.com>, 2013
# mmm <markotahal@gmail.com>, 2011
# IAmNotImportant, 2017
@@ -18,9 +18,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"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2018-12-12 11:09+1000\n"
"PO-Revision-Date: 2018-05-15 06:59+0000\n"
"Last-Translator: David Macek <david.macek.0@gmail.com>\n"
"Language-Team: Czech (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/cs/)\n"
"Language: cs\n"
@@ -30,53 +30,53 @@ msgstr ""
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n "
"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
#: lib/libalpm/add.c:91 lib/libalpm/sync.c:290
#: lib/libalpm/add.c:86
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s je aktuální -- vynechat\n"
#: lib/libalpm/add.c:95
#: lib/libalpm/add.c:90
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s je aktuální -- přeinstalovat\n"
#: lib/libalpm/add.c:100
#: lib/libalpm/add.c:95
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "snížení verze balíčku %s (%s => %s)\n"
#: lib/libalpm/add.c:129
#: lib/libalpm/add.c:124
#, c-format
msgid "cannot allocate disk archive object"
msgstr "nedostatek paměti pro alokaci objektu"
#: lib/libalpm/add.c:143 lib/libalpm/util.c:382
#: lib/libalpm/add.c:138 lib/libalpm/util.c:382
#, c-format
msgid "warning given when extracting %s (%s)\n"
msgstr "varování při rozbalování %s (%s)\n"
#: lib/libalpm/add.c:146 lib/libalpm/util.c:385
#: lib/libalpm/add.c:141 lib/libalpm/util.c:385
#, c-format
msgid "could not extract %s (%s)\n"
msgstr "nelze rozbalit %s (%s)\n"
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:574 lib/libalpm/remove.c:542
#: lib/libalpm/add.c:154 lib/libalpm/dload.c:569 lib/libalpm/remove.c:541
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "nelze přejmenovat %s na %s (%s)\n"
#: lib/libalpm/add.c:210
#: lib/libalpm/add.c:205
#, c-format
msgid "file not found in file list for package %s. skipping extraction of %s\n"
msgstr ""
"soubor nenalezen v seznamu souborů balíčku %s. přeskakuje se rozbalení %s\n"
#: lib/libalpm/add.c:219
#: lib/libalpm/add.c:214
#, c-format
msgid "unable to extract %s%s: path too long"
msgstr "nelze rozbalit %s%s: příliš dlouhá cesta"
#: lib/libalpm/add.c:261
#: lib/libalpm/add.c:256
#, c-format
msgid ""
"directory permissions differ on %s\n"
@@ -85,7 +85,7 @@ msgstr ""
"přístupová práva adresáře %s se neshodují\n"
"souborový systém: %o balíček: %o\n"
#: lib/libalpm/add.c:276
#: lib/libalpm/add.c:271
#, c-format
msgid ""
"directory ownership differs on %s\n"
@@ -94,101 +94,101 @@ msgstr ""
"rozdílný vlastník adresáře %s\n"
"souborový systém: %u:%u balíček: %u:%u\n"
#: lib/libalpm/add.c:292
#: lib/libalpm/add.c:287
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr "rozbalení: adresář nebyl přepsán souborem %s\n"
#: lib/libalpm/add.c:320
#: lib/libalpm/add.c:315
#, c-format
msgid "unable to extract %s.pacnew: path too long"
msgstr "nelze rozbalit %s.pacnew: příliš dlouhá cesta"
#: lib/libalpm/add.c:513 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#: lib/libalpm/add.c:508 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#, c-format
msgid "could not get current working directory\n"
msgstr "nelze určit aktuální pracovní adresář\n"
#: lib/libalpm/add.c:518 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/add.c:513 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/util.c:650
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "nelze změnit adresář na %s (%s)\n"
#: lib/libalpm/add.c:575 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#: lib/libalpm/add.c:570 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#, c-format
msgid "could not restore working directory (%s)\n"
msgstr "nelze obnovit pracovní adresář (%s)\n"
#: lib/libalpm/add.c:583
#: lib/libalpm/add.c:578
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "nastal problém při aktualizaci %s\n"
#: lib/libalpm/add.c:589
#: lib/libalpm/add.c:584
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "nastal problém při instalaci %s\n"
#: lib/libalpm/add.c:604
#: lib/libalpm/add.c:599
#, c-format
msgid "could not update database entry %s-%s\n"
msgstr "nelze aktualizovat záznam databáze %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 "nelze přidat položku '%s' do mezipaměti\n"
#: lib/libalpm/be_local.c:267
#: lib/libalpm/be_local.c:255
#, c-format
msgid "error while reading file %s: %s\n"
msgstr "chyba při čtení souboru %s: %s\n"
#: lib/libalpm/be_local.c:364
#: lib/libalpm/be_local.c:350
#, c-format
msgid "removing invalid database: %s\n"
msgstr "odstraňuje se chybná databáze: %s\n"
#: lib/libalpm/be_local.c:415 lib/libalpm/be_local.c:905
#: lib/libalpm/be_local.c:401 lib/libalpm/be_local.c:887
#, c-format
msgid "could not create directory %s: %s\n"
msgstr "nelze změnit adresář %s: %s\n"
#: lib/libalpm/be_local.c:590 lib/libalpm/be_sync.c:386
#: lib/libalpm/be_local.c:576 lib/libalpm/be_sync.c:387
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "chybný název záznamu v databázi '%s'\n"
#: lib/libalpm/be_local.c:598
#: lib/libalpm/be_local.c:584
#, c-format
msgid "duplicated database entry '%s'\n"
msgstr "duplicitní záznam v databázi '%s'\n"
#: lib/libalpm/be_local.c:610
#: lib/libalpm/be_local.c:596
#, c-format
msgid "corrupted database entry '%s'\n"
msgstr "poškozený záznam v databázi '%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/be_local.c:699 lib/libalpm/be_local.c:791
#: lib/libalpm/be_local.c:936 lib/libalpm/be_local.c:1033
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:419 lib/libalpm/util.c:253
#: lib/libalpm/util.c:269
#, c-format
msgid "could not open file %s: %s\n"
msgstr "nelze otevřít soubor %s: %s\n"
#: lib/libalpm/be_local.c:729 lib/libalpm/be_sync.c:650
#: lib/libalpm/be_local.c:715 lib/libalpm/be_sync.c:653
#, c-format
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr "databáze %s je nekonzistentní: nesouhlasí jméno balíčku %s\n"
#: lib/libalpm/be_local.c:735 lib/libalpm/be_sync.c:656
#: lib/libalpm/be_local.c:721 lib/libalpm/be_sync.c:659
#, c-format
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr "databáze %s je nekonzistentní: nesouhlasí verze balíčku %s\n"
#: lib/libalpm/be_local.c:776
#: lib/libalpm/be_local.c:762
#, c-format
msgid "unknown validation type for package %s: %s\n"
msgstr "neznámý způsob ověření pro balíček %s: %s\n"
@@ -229,42 +229,42 @@ msgstr "neplatná verze balíčku v %s\n"
msgid "missing package metadata in %s\n"
msgstr "chybí metadata balíčku v %s\n"
#: lib/libalpm/be_package.c:750
#: lib/libalpm/be_package.c:748
#, c-format
msgid "failed to read signature file: %s\n"
msgstr "nelze načíst soubor s podpisy: %s\n"
#: lib/libalpm/be_package.c:779 lib/libalpm/sync.c:953
#: lib/libalpm/be_package.c:769 lib/libalpm/sync.c:1113
#, c-format
msgid "required key missing from keyring\n"
msgstr "požadovaný klíč není v klíčence\n"
#: lib/libalpm/be_sync.c:61
#: lib/libalpm/be_sync.c:62
#, c-format
msgid "removing invalid file: %s\n"
msgstr "odstraněn neplatný soubor: %s\n"
#: lib/libalpm/be_sync.c:515
#: lib/libalpm/be_sync.c:517
#, c-format
msgid "could not parse package description file '%s' from db '%s'\n"
msgstr "nelze načíst soubor s popisem balíčku '%s' z databáze '%s'\n"
#: lib/libalpm/be_sync.c:522
#: lib/libalpm/be_sync.c:524
#, c-format
msgid "could not read db '%s' (%s)\n"
msgstr "nelze přečíst databázi '%s' (%s)\n"
#: lib/libalpm/be_sync.c:556 lib/libalpm/be_sync.c:561
#: lib/libalpm/be_sync.c:558 lib/libalpm/be_sync.c:563
#, c-format
msgid "%s database is inconsistent: filename of package %s is illegal\n"
msgstr "databáze %s je nekonzistentní: jméno balíčku %s je nepřípustné\n"
#: lib/libalpm/be_sync.c:566
#: lib/libalpm/be_sync.c:568
#, c-format
msgid "%s database is inconsistent: filename of package %s is too long\n"
msgstr "databáze %s je nekonzistentní: jméno balíčku %s je příliš dlouhé\n"
#: lib/libalpm/be_sync.c:632
#: lib/libalpm/be_sync.c:634
#, c-format
msgid "unknown database file: %s\n"
msgstr "neznámý soubor databáze: %s\n"
@@ -289,12 +289,12 @@ msgstr "%s bude odstraněn po %s, na kterém závisí\n"
msgid "%s will be installed before its %s dependency\n"
msgstr "%s bude nainstalován před %s, na kterém závisí\n"
#: lib/libalpm/deps.c:681 lib/libalpm/deps.c:712
#: lib/libalpm/deps.c:682 lib/libalpm/deps.c:712
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "ignoruje se balíček %s-%s\n"
#: lib/libalpm/deps.c:869
#: lib/libalpm/deps.c:867
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "nelze vyřešit \"%s\", závislost \"%s\"\n"
@@ -349,39 +349,39 @@ msgstr "nepodařilo se určit kořen přípojného bodu %s\n"
msgid "Partition %s is mounted read only\n"
msgstr "Diskový oddíl %s je připojen jen pro čtení\n"
#: lib/libalpm/dload.c:161
#: lib/libalpm/dload.c:159
#, c-format
msgid "disk"
msgstr "disk"
#: lib/libalpm/dload.c:348
#: lib/libalpm/dload.c:345
#, c-format
msgid "failed to create temporary file for download\n"
msgstr "nepodařilo se vytvořit dočasný soubor pro stahování\n"
#: lib/libalpm/dload.c:393
#: lib/libalpm/dload.c:390
#, c-format
msgid "url '%s' is invalid\n"
msgstr "URL '%s' je chybná\n"
#: lib/libalpm/dload.c:464 lib/libalpm/dload.c:485 lib/libalpm/dload.c:496
#: lib/libalpm/dload.c:460 lib/libalpm/dload.c:481 lib/libalpm/dload.c:492
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "selhalo získání souboru '%s' z %s: %s\n"
#: lib/libalpm/dload.c:477
#: lib/libalpm/dload.c:473
#, c-format
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
msgstr ""
"selhalo získání souboru '%s' z %s : překročení očekávané velikosti "
"stahování\n"
#: lib/libalpm/dload.c:532
#: lib/libalpm/dload.c:528
#, c-format
msgid "%s appears to be truncated: %jd/%jd bytes\n"
msgstr "%s se zdá být zkrácen: %jd/%jd bytů\n"
#: lib/libalpm/dload.c:677 lib/libalpm/dload.c:706
#: lib/libalpm/dload.c:672 lib/libalpm/dload.c:701
#, c-format
msgid "failed to download %s\n"
msgstr "selhalo stahování %s\n"
@@ -601,194 +601,199 @@ msgstr "chybějící podpis PGP"
msgid "invalid PGP signature"
msgstr "neplatný podpis PGP"
#: lib/libalpm/error.c:135 lib/libalpm/hook.c:514
#: lib/libalpm/error.c:135
#, c-format
msgid "invalid or corrupted delta"
msgstr "neplatný nebo poškozený delta rozdíl"
#: lib/libalpm/error.c:137
#, c-format
msgid "delta patch failed"
msgstr "aplikace delta rozdílu selhala"
#: lib/libalpm/error.c:140 lib/libalpm/hook.c:614
#, c-format
msgid "could not satisfy dependencies"
msgstr "nelze vyřešit závislosti"
#: lib/libalpm/error.c:137
#: lib/libalpm/error.c:142
#, c-format
msgid "conflicting dependencies"
msgstr "konfliktní závislosti"
#: lib/libalpm/error.c:139
#: lib/libalpm/error.c:144
#, c-format
msgid "conflicting files"
msgstr "konfliktní soubory"
#: lib/libalpm/error.c:142
#: lib/libalpm/error.c:147
#, c-format
msgid "failed to retrieve some files"
msgstr "selhalo získání některých souborů"
#: lib/libalpm/error.c:144
#: lib/libalpm/error.c:149
#, c-format
msgid "invalid regular expression"
msgstr "nesprávný regulární výraz"
#: lib/libalpm/error.c:150
#: lib/libalpm/error.c:155
#, c-format
msgid "libarchive error"
msgstr "chyba knihovny libarchive"
#: lib/libalpm/error.c:152
#: lib/libalpm/error.c:157
#, c-format
msgid "download library error"
msgstr "chyba knihovny pro stahování souborů"
#: lib/libalpm/error.c:154
#: lib/libalpm/error.c:159
#, c-format
msgid "gpgme error"
msgstr "chyba v gpgme"
#: lib/libalpm/error.c:156
#: lib/libalpm/error.c:161
#, c-format
msgid "error invoking external downloader"
msgstr "chyba volání externího programu pro stahování souborů"
#: lib/libalpm/error.c:159
#, c-format
msgid "compiled without signature support"
msgstr ""
#: lib/libalpm/error.c:162
#: lib/libalpm/error.c:164
#, c-format
msgid "unexpected error"
msgstr "neočekávaná chyba"
#: lib/libalpm/handle.c:153
#: lib/libalpm/handle.c:157
#, c-format
msgid "lock file missing %s\n"
msgstr "chybí soubor zámku %s\n"
#: lib/libalpm/handle.c:159
#: lib/libalpm/handle.c:163
#, c-format
msgid "could not remove lock file %s\n"
msgstr "nelze odstranit zamykací soubor %s\n"
#: lib/libalpm/hook.c:95
#: lib/libalpm/hook.c:107
#, c-format
msgid "Missing trigger targets in hook: %s\n"
msgstr "Chybí cíle pro triggery v hooku: %s\n"
#: lib/libalpm/hook.c:101
#: lib/libalpm/hook.c:113
#, c-format
msgid "Missing trigger type in hook: %s\n"
msgstr "Chybí typ triggeru v hooku: %s\n"
#: lib/libalpm/hook.c:107
#: lib/libalpm/hook.c:119
#, c-format
msgid "Missing trigger operation in hook: %s\n"
msgstr "Chybí operace triggeru v hooku: %s\n"
#: lib/libalpm/hook.c:134
#: lib/libalpm/hook.c:146
#, c-format
msgid "Missing Exec option in hook: %s\n"
msgstr "Chybí volba Exec v hooku: %s\n"
#: lib/libalpm/hook.c:140
#: lib/libalpm/hook.c:152
#, c-format
msgid "Missing When option in hook: %s\n"
msgstr "Chybí volba When v hooku: %s\n"
#: lib/libalpm/hook.c:143
#: lib/libalpm/hook.c:155
#, c-format
msgid "AbortOnFail set for PostTransaction hook: %s\n"
msgstr "V hooku typu PostTransaction bylo nastaveno AbortOnFail: %s\n"
#: lib/libalpm/hook.c:160
#: lib/libalpm/hook.c:273
#, c-format
msgid "error while reading hook %s: %s\n"
msgstr "chyba při čtení hooku %s: %s\n"
#: lib/libalpm/hook.c:162 lib/libalpm/hook.c:206 lib/libalpm/hook.c:248
#: lib/libalpm/hook.c:275 lib/libalpm/hook.c:315 lib/libalpm/hook.c:357
#, c-format
msgid "hook %s line %d: invalid option %s\n"
msgstr "v hooku %s na řádku %d: neplatná volba %s\n"
#: lib/libalpm/hook.c:172
#: lib/libalpm/hook.c:285
#, c-format
msgid "hook %s line %d: invalid section %s\n"
msgstr "v hooku %s na řádku %d: neplatná sekce %s\n"
#: lib/libalpm/hook.c:184 lib/libalpm/hook.c:199 lib/libalpm/hook.c:218
#: lib/libalpm/hook.c:241
#: lib/libalpm/hook.c:297 lib/libalpm/hook.c:308 lib/libalpm/hook.c:327
#: lib/libalpm/hook.c:350
#, c-format
msgid "hook %s line %d: invalid value %s\n"
msgstr "v hooku %s na řádku %d: neplatná hodnota %s\n"
#: lib/libalpm/hook.c:188 lib/libalpm/hook.c:211 lib/libalpm/hook.c:222
#: lib/libalpm/hook.c:236
#: lib/libalpm/hook.c:301 lib/libalpm/hook.c:320 lib/libalpm/hook.c:331
#: lib/libalpm/hook.c:345
#, c-format
msgid "hook %s line %d: overwriting previous definition of %s\n"
msgstr "v hooku %s na řádku %d: přepsání předchozí definice volby %s\n"
#: lib/libalpm/hook.c:243
#: lib/libalpm/hook.c:352
#, c-format
msgid "hook %s line %d: unable to set option (%s)\n"
msgstr "v hooku %s na řádku %d: nelze nastavit volbu (%s)\n"
#: lib/libalpm/hook.c:513
#: lib/libalpm/hook.c:613
#, c-format
msgid "unable to run hook %s: %s\n"
msgstr "nelze spustit hook %s: %s\n"
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:386
#: lib/libalpm/hook.c:648 lib/libalpm/hook.c:660 lib/libalpm/remove.c:385
#, c-format
msgid "could not open directory: %s: %s\n"
msgstr "nelze otevřít adresář %s: %s\n"
#: lib/libalpm/hook.c:575
#: lib/libalpm/hook.c:676
#, c-format
msgid "could not open file: %s%s: %s\n"
msgstr "nelze otevřít soubor: %s%s: %s\n"
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:259
#: lib/libalpm/hook.c:696 lib/libalpm/util.c:259
#, c-format
msgid "could not stat file %s: %s\n"
msgstr "nelze najít soubor %s: %s\n"
#: lib/libalpm/hook.c:621
#: lib/libalpm/hook.c:722
#, c-format
msgid "could not read directory: %s: %s\n"
msgstr "nelze přečíst adresář: %s: %s\n"
#: lib/libalpm/package.c:578
#: lib/libalpm/package.c:586
#, c-format
msgid "could not fully load metadata for package %s-%s\n"
msgstr "nelze zcela načíst metadata pro balíček %s-%s\n"
#: lib/libalpm/remove.c:119
#: lib/libalpm/remove.c:118
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "nelze nalézt %s v databázi -- vynechat\n"
#: lib/libalpm/remove.c:154
#: lib/libalpm/remove.c:153
#, c-format
msgid "removing %s from target list\n"
msgstr "'%s' odstraněn ze seznamu cílů\n"
#: lib/libalpm/remove.c:346
#: lib/libalpm/remove.c:345
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "nelze odstranit soubor '%s': %s\n"
#: lib/libalpm/remove.c:411 lib/libalpm/remove.c:420
#: lib/libalpm/remove.c:410 lib/libalpm/remove.c:419
#, c-format
msgid "could not backup %s due to PATH_MAX overflow\n"
msgstr "nelze zazálohovat %s kvůli přetečení PATH_MAX\n"
#: lib/libalpm/remove.c:562
#: lib/libalpm/remove.c:561
#, c-format
msgid "cannot remove %s (%s)\n"
msgstr "nelze odstranit %s (%s)\n"
#: lib/libalpm/remove.c:735
#: lib/libalpm/remove.c:734
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "nelze odstranit záznam databáze %s-%s\n"
#: lib/libalpm/remove.c:740
#: lib/libalpm/remove.c:739
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "nelze odstranit položku '%s' z mezipaměti\n"
@@ -798,154 +803,141 @@ msgstr "nelze odstranit položku '%s' z mezipaměti\n"
msgid "Public keyring not found; have you run '%s'?\n"
msgstr "Nebyla nalezena veřejná klíčenka; spustili jste '%s'?\n"
#: lib/libalpm/signing.c:207 lib/libalpm/signing.c:784
#: lib/libalpm/signing.c:207 lib/libalpm/signing.c:705
#, c-format
msgid "GPGME error: %s\n"
msgstr "Chyba GPGME: %s\n"
#: lib/libalpm/signing.c:284
#, c-format
msgid "looking up key %s using WKD\n"
msgstr ""
#: lib/libalpm/signing.c:293
#, c-format
msgid "gpg error: %s\n"
msgstr ""
#: lib/libalpm/signing.c:441 lib/libalpm/signing.c:515
#: lib/libalpm/signing.c:402
#, c-format
msgid "keyring is not writable\n"
msgstr "do klíčenky nelze zapisovat\n"
#: lib/libalpm/signing.c:539
#, c-format
msgid "key \"%s\" on keyserver\n"
msgstr ""
#: lib/libalpm/signing.c:544
#: lib/libalpm/signing.c:460
#, c-format
msgid "key \"%s\" could not be imported\n"
msgstr "klíč \"%s\" se nepodařilo importovat\n"
#: lib/libalpm/signing.c:548
#: lib/libalpm/signing.c:466
#, c-format
msgid "key %s, \"%s\" found on keyserver, keyring is not writable\n"
msgstr ""
"klíč %s, \"%s\" byl nalezen na serveru s klíči, ale do klíčenky nelze "
"zapisovat\n"
#: lib/libalpm/signing.c:471
#, c-format
msgid "key \"%s\" could not be looked up remotely\n"
msgstr "klíč \"%s\" nebylo možné vzdáleně vyhledat\n"
#: lib/libalpm/signing.c:943 lib/libalpm/sync.c:1022
#: lib/libalpm/signing.c:859 lib/libalpm/sync.c:1181
#, c-format
msgid "%s: missing required signature\n"
msgstr "%s: chybí vyžadovaný podpis\n"
#: lib/libalpm/signing.c:958
#: lib/libalpm/signing.c:874
#, c-format
msgid "%s: signature from \"%s\" is marginal trust\n"
msgstr "%s: podpis od \"%s\" má částečnou důvěru\n"
#: lib/libalpm/signing.c:966
#: lib/libalpm/signing.c:882
#, c-format
msgid "%s: signature from \"%s\" is unknown trust\n"
msgstr "%s: u podpisu od \"%s\" není známá úroveň důvěry\n"
#: lib/libalpm/signing.c:973
#: lib/libalpm/signing.c:889
#, c-format
msgid "%s: signature from \"%s\" should never be trusted\n"
msgstr "%s: podpis od \"%s\" je nedůvěryhodný\n"
#: lib/libalpm/signing.c:985
#: lib/libalpm/signing.c:901
#, c-format
msgid "%s: key \"%s\" is unknown\n"
msgstr "%s: klíč \"%s\" je neznámý\n"
#: lib/libalpm/signing.c:994
#: lib/libalpm/signing.c:910
#, c-format
msgid "%s: key \"%s\" is disabled\n"
msgstr "%s: klíč \"%s\" je vypnut\n"
#: lib/libalpm/signing.c:998
#: lib/libalpm/signing.c:914
#, c-format
msgid "%s: signature from \"%s\" is expired\n"
msgstr "%s: podpis od \"%s\" vypršel\n"
#: lib/libalpm/signing.c:1002
#: lib/libalpm/signing.c:918
#, c-format
msgid "%s: signature from \"%s\" is invalid\n"
msgstr "%s: podpis od \"%s\" je neplatný\n"
#: lib/libalpm/signing.c:1079 lib/libalpm/signing.c:1147
#: lib/libalpm/signing.c:1226
#: lib/libalpm/signing.c:995 lib/libalpm/signing.c:1063
#: lib/libalpm/signing.c:1142
#, c-format
msgid "%s: signature format error\n"
msgstr "%s: chyba formátu podpisu\n"
#: lib/libalpm/signing.c:1179 lib/libalpm/signing.c:1212
#: lib/libalpm/signing.c:1220
#: lib/libalpm/signing.c:1095 lib/libalpm/signing.c:1128
#: lib/libalpm/signing.c:1136
#, c-format
msgid "%s: unsupported signature format\n"
msgstr "%s: nepodporovaný formát podpisu\n"
#: lib/libalpm/sync.c:99
#: lib/libalpm/sync.c:98
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: ignoruje se aktualizace balíčku (%s => %s)\n"
#: lib/libalpm/sync.c:111
#: lib/libalpm/sync.c:110
#, c-format
msgid "%s: ignoring package downgrade (%s => %s)\n"
msgstr "%s: ignoruje se snížení verze balíčku (%s => %s)\n"
#: lib/libalpm/sync.c:114
#: lib/libalpm/sync.c:113
#, c-format
msgid "%s: downgrading from version %s to version %s\n"
msgstr "%s: snížení z verze %s na verzi %s\n"
#: lib/libalpm/sync.c:120
#: lib/libalpm/sync.c:119
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr "%s: lokální verze (%s) je novější než v %s (%s)\n"
#: lib/libalpm/sync.c:161
#: lib/libalpm/sync.c:160
#, c-format
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
msgstr "ignoruje se náhrada balíčku (%s-%s => %s-%s)\n"
#: lib/libalpm/sync.c:177
#: lib/libalpm/sync.c:176
#, c-format
msgid "cannot replace %s by %s\n"
msgstr "nelze nahradit soubor %s souborem %s\n"
#: lib/libalpm/sync.c:535 lib/libalpm/sync.c:605
#: lib/libalpm/sync.c:538 lib/libalpm/sync.c:608
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr "zjištěn konflikt nerozlišitelných balíčků\n"
#: lib/libalpm/sync.c:555
#: lib/libalpm/sync.c:558
#, c-format
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgstr "'%s' odstraněn ze seznamu cílů, protože je konfliktní s '%s'\n"
#: lib/libalpm/sync.c:849
#: lib/libalpm/sync.c:1019
#, c-format
msgid "failed to retrieve some files\n"
msgstr "selhalo získání některých souborů\n"
#: lib/libalpm/sync.c:1036
#, c-format
msgid "failed to read file %s: %s\n"
msgstr ""
#: lib/libalpm/sync.c:1223
#: lib/libalpm/sync.c:1384
#, c-format
msgid "not enough free disk space\n"
msgstr "není dostatek volného místa na disku\n"
#: lib/libalpm/sync.c:1245
#: lib/libalpm/sync.c:1406
#, c-format
msgid "could not commit removal transaction\n"
msgstr "nelze provést transakci pro odstranění\n"
#: lib/libalpm/sync.c:1253
#: lib/libalpm/sync.c:1414
#, c-format
msgid "could not commit transaction\n"
msgstr "nelze provést transakci\n"

View File

@@ -9,13 +9,13 @@
# jakobw <jakob.wadsager@gmail.com>, 2012
# Joe Hansen <joedalton2@yahoo.dk>, 2011,2013
# scootergrisen, 2017
# scootergrisen, 2017-2019
# scootergrisen, 2017-2018
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"
"POT-Creation-Date: 2018-12-12 11:09+1000\n"
"PO-Revision-Date: 2018-06-07 09:48+0000\n"
"Last-Translator: scootergrisen\n"
"Language-Team: Danish (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/da/)\n"
@@ -25,53 +25,53 @@ 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:86
#, 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:90
#, 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:95
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "nedgraderer pakke %s (%s => %s)\n"
#: lib/libalpm/add.c:129
#: lib/libalpm/add.c:124
#, c-format
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:138 lib/libalpm/util.c:382
#, 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:141 lib/libalpm/util.c:385
#, 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:154 lib/libalpm/dload.c:569 lib/libalpm/remove.c:541
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "kunne ikke omdøbe %s til %s (%s)\n"
#: lib/libalpm/add.c:210
#: lib/libalpm/add.c:205
#, c-format
msgid "file not found in file list for package %s. skipping extraction of %s\n"
msgstr ""
"fil ikke fundet i fillisten for pakke %s. springer over udpakkelse af %s\n"
#: lib/libalpm/add.c:219
#: lib/libalpm/add.c:214
#, c-format
msgid "unable to extract %s%s: path too long"
msgstr "kan ikke pakke %s%s ud: sti for lang"
#: lib/libalpm/add.c:261
#: lib/libalpm/add.c:256
#, c-format
msgid ""
"directory permissions differ on %s\n"
@@ -80,7 +80,7 @@ msgstr ""
"mapperettigheder er forskellige for %s\n"
"filsystem: %o pakke: %o\n"
#: lib/libalpm/add.c:276
#: lib/libalpm/add.c:271
#, c-format
msgid ""
"directory ownership differs on %s\n"
@@ -89,101 +89,101 @@ msgstr ""
"mapperettigheder er forskellige for %s\n"
"filsystem: %u:%u pakke: %u:%u\n"
#: lib/libalpm/add.c:292
#: lib/libalpm/add.c:287
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr "udtræk: overskriver ikke mappe med fil %s\n"
#: lib/libalpm/add.c:320
#: lib/libalpm/add.c:315
#, c-format
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:508 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#, 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/add.c:513 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/util.c:650
#, 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:570 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#, 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:578
#, 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:584
#, 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:599
#, 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:255
#, 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:350
#, 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:401 lib/libalpm/be_local.c:887
#, 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:576 lib/libalpm/be_sync.c:387
#, 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:584
#, c-format
msgid "duplicated database entry '%s'\n"
msgstr "duplikeret databasepunkt '%s'\n"
#: lib/libalpm/be_local.c:610
#: lib/libalpm/be_local.c:596
#, 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/be_local.c:699 lib/libalpm/be_local.c:791
#: lib/libalpm/be_local.c:936 lib/libalpm/be_local.c:1033
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:419 lib/libalpm/util.c:253
#: lib/libalpm/util.c:269
#, 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:715 lib/libalpm/be_sync.c:653
#, 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:721 lib/libalpm/be_sync.c:659
#, 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:762
#, c-format
msgid "unknown validation type for package %s: %s\n"
msgstr "ukendt valideringstype for pakke %s: %s\n"
@@ -224,42 +224,42 @@ msgstr "ugyldig pakkeversion i %s\n"
msgid "missing package metadata in %s\n"
msgstr "manglende pakkemetadata i %s\n"
#: lib/libalpm/be_package.c:750
#: lib/libalpm/be_package.c:748
#, 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:769 lib/libalpm/sync.c:1113
#, c-format
msgid "required key missing from keyring\n"
msgstr "krævede nøgle mangler fra nøglering\n"
#: lib/libalpm/be_sync.c:61
#: lib/libalpm/be_sync.c:62
#, c-format
msgid "removing invalid file: %s\n"
msgstr "fjerner ugyldig fil: %s\n"
#: lib/libalpm/be_sync.c:515
#: lib/libalpm/be_sync.c:517
#, 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:524
#, 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:558 lib/libalpm/be_sync.c:563
#, 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:568
#, 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:634
#, c-format
msgid "unknown database file: %s\n"
msgstr "ukendt databaseful: %s\n"
@@ -284,12 +284,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:682 lib/libalpm/deps.c:712
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "ignorerer pakke %s-%s\n"
#: lib/libalpm/deps.c:869
#: lib/libalpm/deps.c:867
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "kan ikke læse '%s', en afhængighed af '%s'\n"
@@ -344,39 +344,39 @@ msgstr "kunne ikke bestemme rodmonteringspunkt %s\n"
msgid "Partition %s is mounted read only\n"
msgstr "Partition %s er monteret som læs-kun\n"
#: lib/libalpm/dload.c:161
#: lib/libalpm/dload.c:159
#, c-format
msgid "disk"
msgstr "disk"
#: lib/libalpm/dload.c:348
#: lib/libalpm/dload.c:345
#, 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:390
#, c-format
msgid "url '%s' is invalid\n"
msgstr "adressen '%s' er ugyldig\n"
#: lib/libalpm/dload.c:464 lib/libalpm/dload.c:485 lib/libalpm/dload.c:496
#: lib/libalpm/dload.c:460 lib/libalpm/dload.c:481 lib/libalpm/dload.c:492
#, 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:473
#, 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:528
#, 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:672 lib/libalpm/dload.c:701
#, c-format
msgid "failed to download %s\n"
msgstr "kunne ikke hente %s\n"
@@ -596,194 +596,199 @@ msgstr "manglende PGP-signatur"
msgid "invalid PGP signature"
msgstr "ugyldig PGP-signatur"
#: lib/libalpm/error.c:135 lib/libalpm/hook.c:514
#: lib/libalpm/error.c:135
#, c-format
msgid "invalid or corrupted delta"
msgstr "ugyldig eller ødelagt delta"
#: lib/libalpm/error.c:137
#, c-format
msgid "delta patch failed"
msgstr "deltarettelse (patch) fejlede"
#: lib/libalpm/error.c:140 lib/libalpm/hook.c:614
#, c-format
msgid "could not satisfy dependencies"
msgstr "kunne ikke tilfredsstille afhængigheder"
#: lib/libalpm/error.c:137
#: lib/libalpm/error.c:142
#, c-format
msgid "conflicting dependencies"
msgstr "konfliktende afhængigheder"
#: lib/libalpm/error.c:139
#: lib/libalpm/error.c:144
#, c-format
msgid "conflicting files"
msgstr "konfliktende filer"
#: lib/libalpm/error.c:142
#: lib/libalpm/error.c:147
#, c-format
msgid "failed to retrieve some files"
msgstr "kunne ikke indhente nogle filer"
#: lib/libalpm/error.c:144
#: lib/libalpm/error.c:149
#, c-format
msgid "invalid regular expression"
msgstr "ugyldigt regulært udtryk"
#: lib/libalpm/error.c:150
#: lib/libalpm/error.c:155
#, c-format
msgid "libarchive error"
msgstr "biblioteksarkivfejl"
#: lib/libalpm/error.c:152
#: lib/libalpm/error.c:157
#, c-format
msgid "download library error"
msgstr "hent biblioteksfejl"
#: lib/libalpm/error.c:154
#: lib/libalpm/error.c:159
#, c-format
msgid "gpgme error"
msgstr "gpgme fejl"
#: lib/libalpm/error.c:156
#: lib/libalpm/error.c:161
#, c-format
msgid "error invoking external downloader"
msgstr "fejl under opstart af ekstern hentningsprogram"
#: lib/libalpm/error.c:159
#, c-format
msgid "compiled without signature support"
msgstr "kompileret uden understøttelse af signatur"
#: lib/libalpm/error.c:162
#: lib/libalpm/error.c:164
#, c-format
msgid "unexpected error"
msgstr "uventet fejl"
#: lib/libalpm/handle.c:153
#: lib/libalpm/handle.c:157
#, c-format
msgid "lock file missing %s\n"
msgstr "låsefil mangler %s\n"
#: lib/libalpm/handle.c:159
#: lib/libalpm/handle.c:163
#, c-format
msgid "could not remove lock file %s\n"
msgstr "kunne ikke fjerne låsningsfil %s\n"
#: lib/libalpm/hook.c:95
#: lib/libalpm/hook.c:107
#, c-format
msgid "Missing trigger targets in hook: %s\n"
msgstr "Manglende udløsermål i krog: %s\n"
#: lib/libalpm/hook.c:101
#: lib/libalpm/hook.c:113
#, c-format
msgid "Missing trigger type in hook: %s\n"
msgstr "Manglende udløsertype i krog: %s\n"
#: lib/libalpm/hook.c:107
#: lib/libalpm/hook.c:119
#, c-format
msgid "Missing trigger operation in hook: %s\n"
msgstr "Manglende udløserhanlding i krog: %s\n"
#: lib/libalpm/hook.c:134
#: lib/libalpm/hook.c:146
#, c-format
msgid "Missing Exec option in hook: %s\n"
msgstr "Manglende Exec-tilvalg i krog: %s\n"
#: lib/libalpm/hook.c:140
#: lib/libalpm/hook.c:152
#, c-format
msgid "Missing When option in hook: %s\n"
msgstr "Manglende When-tilvalg i krog: %s\n"
#: lib/libalpm/hook.c:143
#: lib/libalpm/hook.c:155
#, c-format
msgid "AbortOnFail set for PostTransaction hook: %s\n"
msgstr "AbortOnFail sat for PostTransaction-hook: %s\n"
#: lib/libalpm/hook.c:160
#: lib/libalpm/hook.c:273
#, c-format
msgid "error while reading hook %s: %s\n"
msgstr "fejl ved læsning af hook %s: %s\n"
#: lib/libalpm/hook.c:162 lib/libalpm/hook.c:206 lib/libalpm/hook.c:248
#: lib/libalpm/hook.c:275 lib/libalpm/hook.c:315 lib/libalpm/hook.c:357
#, c-format
msgid "hook %s line %d: invalid option %s\n"
msgstr "hook %s linje %d: ugyldigt tilvalg %s\n"
#: lib/libalpm/hook.c:172
#: lib/libalpm/hook.c:285
#, c-format
msgid "hook %s line %d: invalid section %s\n"
msgstr "hook %s linje %d: ugyldigt afsnit %s\n"
#: lib/libalpm/hook.c:184 lib/libalpm/hook.c:199 lib/libalpm/hook.c:218
#: lib/libalpm/hook.c:241
#: lib/libalpm/hook.c:297 lib/libalpm/hook.c:308 lib/libalpm/hook.c:327
#: lib/libalpm/hook.c:350
#, c-format
msgid "hook %s line %d: invalid value %s\n"
msgstr "hook %s linje %d: ugyldig værdi %s\n"
#: lib/libalpm/hook.c:188 lib/libalpm/hook.c:211 lib/libalpm/hook.c:222
#: lib/libalpm/hook.c:236
#: lib/libalpm/hook.c:301 lib/libalpm/hook.c:320 lib/libalpm/hook.c:331
#: lib/libalpm/hook.c:345
#, c-format
msgid "hook %s line %d: overwriting previous definition of %s\n"
msgstr "hook %s linje %d: overskriver forrige definition af %s\n"
#: lib/libalpm/hook.c:243
#: lib/libalpm/hook.c:352
#, c-format
msgid "hook %s line %d: unable to set option (%s)\n"
msgstr "hook %s linje %d: kan ikke sætte tilvalg (%s)\n"
#: lib/libalpm/hook.c:513
#: lib/libalpm/hook.c:613
#, c-format
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:648 lib/libalpm/hook.c:660 lib/libalpm/remove.c:385
#, c-format
msgid "could not open directory: %s: %s\n"
msgstr "kunne ikke åbne mappe: %s: %s\n"
#: lib/libalpm/hook.c:575
#: lib/libalpm/hook.c:676
#, c-format
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:696 lib/libalpm/util.c:259
#, c-format
msgid "could not stat file %s: %s\n"
msgstr "kunne ikke køre (stat) fil %s: %s\n"
#: lib/libalpm/hook.c:621
#: lib/libalpm/hook.c:722
#, c-format
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:586
#, 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/remove.c:118
#, 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:153
#, 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:345
#, 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:410 lib/libalpm/remove.c:419
#, 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:561
#, c-format
msgid "cannot remove %s (%s)\n"
msgstr "kan ikke fjerne %s (%s)\n"
#: lib/libalpm/remove.c:735
#: lib/libalpm/remove.c:734
#, 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:739
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "kunne ikke fjerne punkt '%s' fra cache\n"
@@ -793,154 +798,140 @@ msgstr "kunne ikke fjerne punkt '%s' fra cache\n"
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:207 lib/libalpm/signing.c:705
#, c-format
msgid "GPGME error: %s\n"
msgstr "Fejl ved GPGME: %s\n"
#: lib/libalpm/signing.c:284
#, 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
#, 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:402
#, c-format
msgid "keyring is not writable\n"
msgstr "der kan ikke skrives til nøglering\n"
#: lib/libalpm/signing.c:539
#, 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:460
#, 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:466
#, c-format
msgid "key %s, \"%s\" found on keyserver, keyring is not writable\n"
msgstr ""
"nøglen %s, \"%s\" fundet på nøgleserver, der kan ikke skrives til nøglering\n"
#: lib/libalpm/signing.c:471
#, c-format
msgid "key \"%s\" could not be looked up remotely\n"
msgstr "nøglen \"%s\" kunne ikke opslås eksternt\n"
msgstr "nøglen \"%s\" kunne ikke fjernopslås\n"
#: lib/libalpm/signing.c:943 lib/libalpm/sync.c:1022
#: lib/libalpm/signing.c:859 lib/libalpm/sync.c:1181
#, c-format
msgid "%s: missing required signature\n"
msgstr "%s: mangler krævet signatur\n"
#: lib/libalpm/signing.c:958
#: lib/libalpm/signing.c:874
#, 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:882
#, 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:889
#, 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:901
#, 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:910
#, 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:914
#, 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:918
#, 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:995 lib/libalpm/signing.c:1063
#: lib/libalpm/signing.c:1142
#, 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:1095 lib/libalpm/signing.c:1128
#: lib/libalpm/signing.c:1136
#, c-format
msgid "%s: unsupported signature format\n"
msgstr "%s: signaturformat understøttes ikke\n"
#: lib/libalpm/sync.c:99
#: lib/libalpm/sync.c:98
#, 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:110
#, 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:113
#, 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:119
#, 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:160
#, 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:176
#, 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:538 lib/libalpm/sync.c:608
#, 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:558
#, 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"
#: lib/libalpm/sync.c:849
#: lib/libalpm/sync.c:1019
#, c-format
msgid "failed to retrieve some files\n"
msgstr "kunne ikke indhente nogle filer\n"
#: lib/libalpm/sync.c:1036
#, 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:1384
#, c-format
msgid "not enough free disk space\n"
msgstr "ikke nok ledig diskplads\n"
#: lib/libalpm/sync.c:1245
#: lib/libalpm/sync.c:1406
#, 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:1414
#, c-format
msgid "could not commit transaction\n"
msgstr "kunne ikke indsende (commit) transaktion\n"

View File

@@ -4,7 +4,6 @@
#
# Translators:
# Dan McGee <dpmcgee@gmail.com>, 2011
# Dieter S <ptpsmail@web.de>, 2019
# Frank Theile, 2018
# Frank Theile, 2018
# Jakob Gahde <j5lx@fmail.co.uk>, 2014-2015
@@ -21,9 +20,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"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2018-12-12 11:09+1000\n"
"PO-Revision-Date: 2018-05-15 15:58+0000\n"
"Last-Translator: Frank Theile\n"
"Language-Team: German (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/de/)\n"
"Language: de\n"
@@ -32,54 +31,54 @@ 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:86
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s ist aktuell -- Überspringe\n"
#: lib/libalpm/add.c:95
#: lib/libalpm/add.c:90
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s ist aktuell -- Reinstalliere\n"
#: lib/libalpm/add.c:100
#: lib/libalpm/add.c:95
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "Downgrade des Paketes %s (%s => %s)\n"
#: lib/libalpm/add.c:129
#: lib/libalpm/add.c:124
#, c-format
msgid "cannot allocate disk archive object"
msgstr "Archivobjekt konnte nicht reserviert werden"
#: lib/libalpm/add.c:143 lib/libalpm/util.c:382
#: lib/libalpm/add.c:138 lib/libalpm/util.c:382
#, c-format
msgid "warning given when extracting %s (%s)\n"
msgstr "Es erscheint eine Warnung, wenn %s extrahiert wird (%s)\n"
#: lib/libalpm/add.c:146 lib/libalpm/util.c:385
#: lib/libalpm/add.c:141 lib/libalpm/util.c:385
#, c-format
msgid "could not extract %s (%s)\n"
msgstr "Konnte %s nicht entpacken (%s)\n"
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:574 lib/libalpm/remove.c:542
#: lib/libalpm/add.c:154 lib/libalpm/dload.c:569 lib/libalpm/remove.c:541
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "Konnte %s nicht in %s umbenennen (%s)\n"
#: lib/libalpm/add.c:210
#: lib/libalpm/add.c:205
#, c-format
msgid "file not found in file list for package %s. skipping extraction of %s\n"
msgstr ""
"Datei nicht in Dateiliste des Pakets %s gefunden. Überspringe Entpacken von "
"%s\n"
#: lib/libalpm/add.c:219
#: lib/libalpm/add.c:214
#, c-format
msgid "unable to extract %s%s: path too long"
msgstr "konnte %s%s nicht entpacken: Pfad zu lang"
#: lib/libalpm/add.c:261
#: lib/libalpm/add.c:256
#, c-format
msgid ""
"directory permissions differ on %s\n"
@@ -88,7 +87,7 @@ msgstr ""
"Verzeichnis-Berechtigungen unterscheiden sich für %s\n"
"Dateisystem: %o Paket: %o\n"
#: lib/libalpm/add.c:276
#: lib/libalpm/add.c:271
#, c-format
msgid ""
"directory ownership differs on %s\n"
@@ -97,105 +96,105 @@ msgstr ""
"Verzeichnis-Eigentümer unterscheidet sich für %s\n"
"Dateisystem: %u:%u Paket: %u:%u\n"
#: lib/libalpm/add.c:292
#: lib/libalpm/add.c:287
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr "Entpacken: Überschreibe Verzeichnis nicht mit Datei %s\n"
#: lib/libalpm/add.c:320
#: lib/libalpm/add.c:315
#, c-format
msgid "unable to extract %s.pacnew: path too long"
msgstr "konnte %s.pacnew nicht entpacken: Pfad zu lang"
#: lib/libalpm/add.c:513 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#: lib/libalpm/add.c:508 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#, c-format
msgid "could not get current working directory\n"
msgstr "Konnte aktuelles Arbeitsverzeichnis nicht ermitteln\n"
#: lib/libalpm/add.c:518 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/add.c:513 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/util.c:650
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "Konnte nicht zu Verzeichnis %s wechseln (%s)\n"
#: lib/libalpm/add.c:575 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#: lib/libalpm/add.c:570 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#, c-format
msgid "could not restore working directory (%s)\n"
msgstr "Konnte das Arbeitsverzeichnis (%s) nicht wiederherstellen\n"
#: lib/libalpm/add.c:583
#: lib/libalpm/add.c:578
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "Fehler traten auf, während %s aktualisiert wurde\n"
#: lib/libalpm/add.c:589
#: lib/libalpm/add.c:584
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "Fehler traten bei der Installation von %s auf\n"
#: lib/libalpm/add.c:604
#: lib/libalpm/add.c:599
#, c-format
msgid "could not update database entry %s-%s\n"
msgstr "Konnte Datenbankeintrag %s-%s nicht aktualisieren\n"
#: lib/libalpm/add.c:615
#: lib/libalpm/add.c:610
#, c-format
msgid "could not add entry '%s' in cache\n"
msgstr "Konnte Eintrag '%s' nicht zum Pufferspeicher hinzufügen\n"
#: lib/libalpm/be_local.c:267
#: lib/libalpm/be_local.c:255
#, c-format
msgid "error while reading file %s: %s\n"
msgstr "Fehler beim Lesen der Datei %s: %s\n"
#: lib/libalpm/be_local.c:364
#: lib/libalpm/be_local.c:350
#, c-format
msgid "removing invalid database: %s\n"
msgstr "Entferne die ungültige Datenbank: %s\n"
#: lib/libalpm/be_local.c:415 lib/libalpm/be_local.c:905
#: lib/libalpm/be_local.c:401 lib/libalpm/be_local.c:887
#, c-format
msgid "could not create directory %s: %s\n"
msgstr "Konnte Verzeichnis %s nicht erstellen: %s\n"
#: lib/libalpm/be_local.c:590 lib/libalpm/be_sync.c:386
#: lib/libalpm/be_local.c:576 lib/libalpm/be_sync.c:387
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "Ungültiger Name für Datenbank-Eintrag '%s'\n"
#: lib/libalpm/be_local.c:598
#: lib/libalpm/be_local.c:584
#, c-format
msgid "duplicated database entry '%s'\n"
msgstr "Doppelter Datenbank-Eintrag '%s'\n"
#: lib/libalpm/be_local.c:610
#: lib/libalpm/be_local.c:596
#, c-format
msgid "corrupted database entry '%s'\n"
msgstr "Beschädigter Datenbank-Eintrag '%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/be_local.c:699 lib/libalpm/be_local.c:791
#: lib/libalpm/be_local.c:936 lib/libalpm/be_local.c:1033
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:419 lib/libalpm/util.c:253
#: lib/libalpm/util.c:269
#, c-format
msgid "could not open file %s: %s\n"
msgstr "Konnte Datei %s nicht öffnen: %s\n"
#: lib/libalpm/be_local.c:729 lib/libalpm/be_sync.c:650
#: lib/libalpm/be_local.c:715 lib/libalpm/be_sync.c:653
#, c-format
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr ""
"Die Datenbank von %s ist inkonsistent: Die Paketnamen für %s stimmen nicht "
"überein\n"
#: lib/libalpm/be_local.c:735 lib/libalpm/be_sync.c:656
#: lib/libalpm/be_local.c:721 lib/libalpm/be_sync.c:659
#, c-format
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr ""
"Die Datenbank von %s ist inkonsistent: Die Versionsnummern für das Paket %s "
"stimmen nicht überein\n"
#: lib/libalpm/be_local.c:776
#: lib/libalpm/be_local.c:762
#, c-format
msgid "unknown validation type for package %s: %s\n"
msgstr "Unbekannter Validierungstyp für das Paket %s: %s\n"
@@ -236,47 +235,47 @@ msgstr "Ungültige Paketversion in %s\n"
msgid "missing package metadata in %s\n"
msgstr "Fehlende Paket-Metadaten in %s\n"
#: lib/libalpm/be_package.c:750
#: lib/libalpm/be_package.c:748
#, c-format
msgid "failed to read signature file: %s\n"
msgstr "Konnte die Signatur-Datei nicht lesen: %s\n"
#: lib/libalpm/be_package.c:779 lib/libalpm/sync.c:953
#: lib/libalpm/be_package.c:769 lib/libalpm/sync.c:1113
#, c-format
msgid "required key missing from keyring\n"
msgstr "Erforderlicher Schlüssel fehlt im Schlüsselbund\n"
#: lib/libalpm/be_sync.c:61
#: lib/libalpm/be_sync.c:62
#, c-format
msgid "removing invalid file: %s\n"
msgstr "Entferne ungültige Datei: %s\n"
#: lib/libalpm/be_sync.c:515
#: lib/libalpm/be_sync.c:517
#, c-format
msgid "could not parse package description file '%s' from db '%s'\n"
msgstr ""
"Konnte Paket-Beschreibungsdatei '%s' der Datenbank '%s' nicht analysieren\n"
#: lib/libalpm/be_sync.c:522
#: lib/libalpm/be_sync.c:524
#, c-format
msgid "could not read db '%s' (%s)\n"
msgstr "konnte Datenbank '%s' (%s) nicht lesen\n"
msgstr ""
#: lib/libalpm/be_sync.c:556 lib/libalpm/be_sync.c:561
#: lib/libalpm/be_sync.c:558 lib/libalpm/be_sync.c:563
#, c-format
msgid "%s database is inconsistent: filename of package %s is illegal\n"
msgstr ""
"Datenbank %s ist inkonsistent: Der Dateiname des Paketes %s ist nicht "
"erlaubt\n"
#: lib/libalpm/be_sync.c:566
#: lib/libalpm/be_sync.c:568
#, c-format
msgid "%s database is inconsistent: filename of package %s is too long\n"
msgstr ""
"Die Datenbank von %s ist inkonsistent: Der Dateiname des Paketes %s ist zu "
"lang\n"
#: lib/libalpm/be_sync.c:632
#: lib/libalpm/be_sync.c:634
#, c-format
msgid "unknown database file: %s\n"
msgstr "Unbekannte Datenbankdatei: %s\n"
@@ -301,12 +300,12 @@ msgstr "%s wird nach seiner Abhängigkeit %s entfernt werden\n"
msgid "%s will be installed before its %s dependency\n"
msgstr "%s wird vor seiner Abhängigkeit %s installiert werden\n"
#: lib/libalpm/deps.c:681 lib/libalpm/deps.c:712
#: lib/libalpm/deps.c:682 lib/libalpm/deps.c:712
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "Ignoriere Paket %s-%s\n"
#: lib/libalpm/deps.c:869
#: lib/libalpm/deps.c:867
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "Kann \"%s\" nicht auflösen (eine Abhängigkeit von \"%s\")\n"
@@ -363,39 +362,39 @@ msgstr "Konnte den Root-Einhängepunkt %s nicht ermitteln\n"
msgid "Partition %s is mounted read only\n"
msgstr "Die Partition %s ist so eingehängt, dass sie nur gelesen werden kann\n"
#: lib/libalpm/dload.c:161
#: lib/libalpm/dload.c:159
#, c-format
msgid "disk"
msgstr "Platte"
#: lib/libalpm/dload.c:348
#: lib/libalpm/dload.c:345
#, c-format
msgid "failed to create temporary file for download\n"
msgstr "Konnte temporäre Datei für den Download nicht anlegen\n"
#: lib/libalpm/dload.c:393
#: lib/libalpm/dload.c:390
#, c-format
msgid "url '%s' is invalid\n"
msgstr "URL '%s' ist ungültig\n"
#: lib/libalpm/dload.c:464 lib/libalpm/dload.c:485 lib/libalpm/dload.c:496
#: lib/libalpm/dload.c:460 lib/libalpm/dload.c:481 lib/libalpm/dload.c:492
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "Konnte Datei '%s' nicht von %s übertragen : %s\n"
#: lib/libalpm/dload.c:477
#: lib/libalpm/dload.c:473
#, c-format
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
msgstr ""
"Konnte Datei '%s' nicht von %s empfangen: Erwartete Downloadgröße "
"überschritten\n"
#: lib/libalpm/dload.c:532
#: lib/libalpm/dload.c:528
#, c-format
msgid "%s appears to be truncated: %jd/%jd bytes\n"
msgstr "%s scheint abgeschnitten zu sein: %jd/%jd Bytes\n"
#: lib/libalpm/dload.c:677 lib/libalpm/dload.c:706
#: lib/libalpm/dload.c:672 lib/libalpm/dload.c:701
#, c-format
msgid "failed to download %s\n"
msgstr "Konnte %s nicht herunterladen\n"
@@ -616,194 +615,199 @@ msgstr "Fehlende PGP-Signatur"
msgid "invalid PGP signature"
msgstr "Ungültige PGP-Signatur"
#: lib/libalpm/error.c:135 lib/libalpm/hook.c:514
#: lib/libalpm/error.c:135
#, c-format
msgid "invalid or corrupted delta"
msgstr "Ungültiges oder beschädigtes Delta"
#: lib/libalpm/error.c:137
#, c-format
msgid "delta patch failed"
msgstr "Delta-Patch fehlgeschlagen"
#: lib/libalpm/error.c:140 lib/libalpm/hook.c:614
#, c-format
msgid "could not satisfy dependencies"
msgstr "Kann Abhängigkeiten nicht erfüllen"
#: lib/libalpm/error.c:137
#: lib/libalpm/error.c:142
#, c-format
msgid "conflicting dependencies"
msgstr "In Konflikt stehende Abhängigkeiten"
#: lib/libalpm/error.c:139
#: lib/libalpm/error.c:144
#, c-format
msgid "conflicting files"
msgstr "In Konflikt stehende Dateien"
#: lib/libalpm/error.c:142
#: lib/libalpm/error.c:147
#, c-format
msgid "failed to retrieve some files"
msgstr "Konnte manche Dateien nicht übertragen"
#: lib/libalpm/error.c:144
#: lib/libalpm/error.c:149
#, c-format
msgid "invalid regular expression"
msgstr "Ungültiger Regulärer Ausdruck"
#: lib/libalpm/error.c:150
#: lib/libalpm/error.c:155
#, c-format
msgid "libarchive error"
msgstr "libarchive-Fehler"
#: lib/libalpm/error.c:152
#: lib/libalpm/error.c:157
#, c-format
msgid "download library error"
msgstr "Fehler in der Bibliothek für Downloads"
#: lib/libalpm/error.c:154
#: lib/libalpm/error.c:159
#, c-format
msgid "gpgme error"
msgstr "gpgme-Fehler"
#: lib/libalpm/error.c:156
#: lib/libalpm/error.c:161
#, c-format
msgid "error invoking external downloader"
msgstr "Fehler beim Aufruf eines externen Downloaders"
#: lib/libalpm/error.c:159
#, c-format
msgid "compiled without signature support"
msgstr "Kompiliert ohne Signatur-Unterstützung"
#: lib/libalpm/error.c:162
#: lib/libalpm/error.c:164
#, c-format
msgid "unexpected error"
msgstr "Unerwarteter Fehler"
#: lib/libalpm/handle.c:153
#: lib/libalpm/handle.c:157
#, c-format
msgid "lock file missing %s\n"
msgstr "%s fehlt in Sperrdatei\n"
#: lib/libalpm/handle.c:159
#: lib/libalpm/handle.c:163
#, c-format
msgid "could not remove lock file %s\n"
msgstr "Konnte Sperrdatei %s nicht entfernen\n"
#: lib/libalpm/hook.c:95
#: lib/libalpm/hook.c:107
#, c-format
msgid "Missing trigger targets in hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:101
#: lib/libalpm/hook.c:113
#, c-format
msgid "Missing trigger type in hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:107
#: lib/libalpm/hook.c:119
#, c-format
msgid "Missing trigger operation in hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:134
#: lib/libalpm/hook.c:146
#, c-format
msgid "Missing Exec option in hook: %s\n"
msgstr "Fehlende Exec-Option im hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:140
#: lib/libalpm/hook.c:152
#, c-format
msgid "Missing When option in hook: %s\n"
msgstr "Fehlende Exec-Option im hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:143
#: lib/libalpm/hook.c:155
#, c-format
msgid "AbortOnFail set for PostTransaction hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:160
#: lib/libalpm/hook.c:273
#, c-format
msgid "error while reading hook %s: %s\n"
msgstr "Fehler beim Lesen des hooks %s: %s\n"
msgstr ""
#: lib/libalpm/hook.c:162 lib/libalpm/hook.c:206 lib/libalpm/hook.c:248
#: lib/libalpm/hook.c:275 lib/libalpm/hook.c:315 lib/libalpm/hook.c:357
#, c-format
msgid "hook %s line %d: invalid option %s\n"
msgstr "Hook %s, Zeile %d: ungültige Option %s\n"
#: lib/libalpm/hook.c:172
#: lib/libalpm/hook.c:285
#, c-format
msgid "hook %s line %d: invalid section %s\n"
msgstr "hook %s, Zeile %d: Ungültige Sektion %s\n"
msgstr ""
#: lib/libalpm/hook.c:184 lib/libalpm/hook.c:199 lib/libalpm/hook.c:218
#: lib/libalpm/hook.c:241
#: lib/libalpm/hook.c:297 lib/libalpm/hook.c:308 lib/libalpm/hook.c:327
#: lib/libalpm/hook.c:350
#, c-format
msgid "hook %s line %d: invalid value %s\n"
msgstr "hook %s, Zeile %d: Ungültiger Wert %s\n"
msgstr ""
#: lib/libalpm/hook.c:188 lib/libalpm/hook.c:211 lib/libalpm/hook.c:222
#: lib/libalpm/hook.c:236
#: lib/libalpm/hook.c:301 lib/libalpm/hook.c:320 lib/libalpm/hook.c:331
#: lib/libalpm/hook.c:345
#, c-format
msgid "hook %s line %d: overwriting previous definition of %s\n"
msgstr "hook %s, Zeile %d: Üerschreibe vorherige Definition von %s\n"
msgstr ""
#: lib/libalpm/hook.c:243
#: lib/libalpm/hook.c:352
#, c-format
msgid "hook %s line %d: unable to set option (%s)\n"
msgstr "hook %s, Zeile %d: Kann die Option (%s) nicht setzen\n"
msgstr ""
#: lib/libalpm/hook.c:513
#: lib/libalpm/hook.c:613
#, c-format
msgid "unable to run hook %s: %s\n"
msgstr "Kann den hook %s nicht starten: %s\n"
msgstr ""
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:386
#: lib/libalpm/hook.c:648 lib/libalpm/hook.c:660 lib/libalpm/remove.c:385
#, c-format
msgid "could not open directory: %s: %s\n"
msgstr "Konnte das Verzeichnis nicht öffnen: %s: %s\n"
#: lib/libalpm/hook.c:575
#: lib/libalpm/hook.c:676
#, c-format
msgid "could not open file: %s%s: %s\n"
msgstr "Konnte die Datei nicht öffnen: %s%s: %s\n"
msgstr ""
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:259
#: lib/libalpm/hook.c:696 lib/libalpm/util.c:259
#, c-format
msgid "could not stat file %s: %s\n"
msgstr "Konnte Status-Information für die Datei %s nicht ermitteln: %s\n"
#: lib/libalpm/hook.c:621
#: lib/libalpm/hook.c:722
#, c-format
msgid "could not read directory: %s: %s\n"
msgstr "Konnte Verzeichnis nicht lesen: %s: %s\n"
msgstr ""
#: lib/libalpm/package.c:578
#: lib/libalpm/package.c:586
#, c-format
msgid "could not fully load metadata for package %s-%s\n"
msgstr "Konnte die Metadaten für Paket %s-%s nicht vollständig laden\n"
#: lib/libalpm/remove.c:119
#: lib/libalpm/remove.c:118
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "Konnte %s nicht in Datenbank finden -- Überspringe\n"
#: lib/libalpm/remove.c:154
#: lib/libalpm/remove.c:153
#, c-format
msgid "removing %s from target list\n"
msgstr "Entferne '%s' aus der Ziel-Liste\n"
#: lib/libalpm/remove.c:346
#: lib/libalpm/remove.c:345
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "Kann Datei '%s' nicht entfernen: %s\n"
#: lib/libalpm/remove.c:411 lib/libalpm/remove.c:420
#: lib/libalpm/remove.c:410 lib/libalpm/remove.c:419
#, c-format
msgid "could not backup %s due to PATH_MAX overflow\n"
msgstr "Kann kein Backup von %s erstellen, auf Grund eines PATH_MAX overflow\n"
msgstr ""
#: lib/libalpm/remove.c:562
#: lib/libalpm/remove.c:561
#, c-format
msgid "cannot remove %s (%s)\n"
msgstr "Konnte %s nicht entfernen (%s)\n"
#: lib/libalpm/remove.c:735
#: lib/libalpm/remove.c:734
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "Konnte Datenbank-Eintrag %s-%s nicht entfernen\n"
#: lib/libalpm/remove.c:740
#: lib/libalpm/remove.c:739
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "Konnte Eintrag '%s' nicht aus dem Puffer entfernen\n"
@@ -813,154 +817,139 @@ msgstr "Konnte Eintrag '%s' nicht aus dem Puffer entfernen\n"
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:207 lib/libalpm/signing.c:705
#, c-format
msgid "GPGME error: %s\n"
msgstr ""
#: lib/libalpm/signing.c:284
#, c-format
msgid "looking up key %s using WKD\n"
msgstr ""
#: lib/libalpm/signing.c:293
#, c-format
msgid "gpg error: %s\n"
msgstr ""
#: lib/libalpm/signing.c:441 lib/libalpm/signing.c:515
#: lib/libalpm/signing.c:402
#, c-format
msgid "keyring is not writable\n"
msgstr "Schlüssebund ist nicht schreibbar\n"
#: lib/libalpm/signing.c:539
#, c-format
msgid "key \"%s\" on keyserver\n"
msgstr ""
#: lib/libalpm/signing.c:544
#: lib/libalpm/signing.c:460
#, c-format
msgid "key \"%s\" could not be imported\n"
msgstr "Schlüssel \"%s\" konnte nicht importiert werden\n"
msgstr ""
#: lib/libalpm/signing.c:548
#: lib/libalpm/signing.c:466
#, c-format
msgid "key %s, \"%s\" found on keyserver, keyring is not writable\n"
msgstr ""
#: lib/libalpm/signing.c:471
#, c-format
msgid "key \"%s\" could not be looked up remotely\n"
msgstr "Schlüssel \"%s\" konnte nicht entfernt abgerufen werden\n"
msgstr ""
#: lib/libalpm/signing.c:943 lib/libalpm/sync.c:1022
#: lib/libalpm/signing.c:859 lib/libalpm/sync.c:1181
#, c-format
msgid "%s: missing required signature\n"
msgstr "%s: Erforderliche Signatur fehlt\n"
#: lib/libalpm/signing.c:958
#: lib/libalpm/signing.c:874
#, c-format
msgid "%s: signature from \"%s\" is marginal trust\n"
msgstr ""
#: lib/libalpm/signing.c:966
#: lib/libalpm/signing.c:882
#, c-format
msgid "%s: signature from \"%s\" is unknown trust\n"
msgstr ""
#: lib/libalpm/signing.c:973
#: lib/libalpm/signing.c:889
#, c-format
msgid "%s: signature from \"%s\" should never be trusted\n"
msgstr ""
#: lib/libalpm/signing.c:985
#: lib/libalpm/signing.c:901
#, c-format
msgid "%s: key \"%s\" is unknown\n"
msgstr "%s: Schlüssel \"%s\" ist unbekannt\n"
msgstr ""
#: lib/libalpm/signing.c:994
#: lib/libalpm/signing.c:910
#, c-format
msgid "%s: key \"%s\" is disabled\n"
msgstr "%s: Schlüssel \"%s\" ist deaktiviert\n"
msgstr ""
#: lib/libalpm/signing.c:998
#: lib/libalpm/signing.c:914
#, c-format
msgid "%s: signature from \"%s\" is expired\n"
msgstr "%s: Signatur von \"%s\" ist abgelaufen\n"
msgstr ""
#: lib/libalpm/signing.c:1002
#: lib/libalpm/signing.c:918
#, c-format
msgid "%s: signature from \"%s\" is invalid\n"
msgstr "%s: Signatur von \"%s\" ist ungültig\n"
msgstr ""
#: lib/libalpm/signing.c:1079 lib/libalpm/signing.c:1147
#: lib/libalpm/signing.c:1226
#: lib/libalpm/signing.c:995 lib/libalpm/signing.c:1063
#: lib/libalpm/signing.c:1142
#, c-format
msgid "%s: signature format error\n"
msgstr "%s: Signaturformatfehler\n"
msgstr ""
#: lib/libalpm/signing.c:1179 lib/libalpm/signing.c:1212
#: lib/libalpm/signing.c:1220
#: lib/libalpm/signing.c:1095 lib/libalpm/signing.c:1128
#: lib/libalpm/signing.c:1136
#, c-format
msgid "%s: unsupported signature format\n"
msgstr "%s: nicht unterstütztes Signaturformat\n"
msgstr ""
#: lib/libalpm/sync.c:99
#: lib/libalpm/sync.c:98
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: Ignoriere Paket-Aktualisierung (%s => %s)\n"
#: lib/libalpm/sync.c:111
#: lib/libalpm/sync.c:110
#, c-format
msgid "%s: ignoring package downgrade (%s => %s)\n"
msgstr "%s: Ignoriere Paket-Downgrade (%s => %s)\n"
#: lib/libalpm/sync.c:114
#: lib/libalpm/sync.c:113
#, c-format
msgid "%s: downgrading from version %s to version %s\n"
msgstr "%s: Downgrade von Version %s zu Version %s\n"
#: lib/libalpm/sync.c:120
#: lib/libalpm/sync.c:119
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr "%s: Lokale Version (%s) ist neuer als %s (%s)\n"
#: lib/libalpm/sync.c:161
#: lib/libalpm/sync.c:160
#, c-format
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
msgstr "Ignoriere Paket-Ersetzung (%s-%s => %s-%s)\n"
#: lib/libalpm/sync.c:177
#: lib/libalpm/sync.c:176
#, c-format
msgid "cannot replace %s by %s\n"
msgstr "Kann %s nicht durch %s ersetzen\n"
#: lib/libalpm/sync.c:535 lib/libalpm/sync.c:605
#: lib/libalpm/sync.c:538 lib/libalpm/sync.c:608
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr "Nicht auflösbare Paketkonflikte gefunden\n"
#: lib/libalpm/sync.c:555
#: lib/libalpm/sync.c:558
#, c-format
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgstr "Entferne '%s' aus der Ziel-Liste, da es mit '%s' in Konflikt steht\n"
#: lib/libalpm/sync.c:849
#: lib/libalpm/sync.c:1019
#, c-format
msgid "failed to retrieve some files\n"
msgstr "Konnte einige Dateien nicht übertragen\n"
#: lib/libalpm/sync.c:1036
#, c-format
msgid "failed to read file %s: %s\n"
msgstr "konnte die Datei nicht lesen %s: %s\n"
#: lib/libalpm/sync.c:1223
#: lib/libalpm/sync.c:1384
#, c-format
msgid "not enough free disk space\n"
msgstr "Nicht genug freier Festplattenspeicher\n"
#: lib/libalpm/sync.c:1245
#: lib/libalpm/sync.c:1406
#, c-format
msgid "could not commit removal transaction\n"
msgstr "Konnte Löschvorgang nicht durchführen\n"
#: lib/libalpm/sync.c:1253
#: lib/libalpm/sync.c:1414
#, c-format
msgid "could not commit transaction\n"
msgstr "Konnte den Vorgang nicht durchführen\n"

View File

@@ -7,7 +7,7 @@
# Achilleas Pipinellis, 2014
# Achilleas Pipinellis, 2013
# Achilleas Pipinellis, 2013
# Christos Nouskas <nous@archlinux.us>, 2011,2013-2014,2017,2019
# Christos Nouskas <nous@archlinux.us>, 2011,2013-2014,2017
# Dan McGee <dpmcgee@gmail.com>, 2011
# ifaigios <ifaigios@gmail.com>, 2015
# ifaigios <ifaigios@gmail.com>, 2015
@@ -17,8 +17,8 @@ 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"
"POT-Creation-Date: 2018-12-12 11:09+1000\n"
"PO-Revision-Date: 2018-05-15 01:05+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"Language-Team: Greek (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/el/)\n"
@@ -28,54 +28,54 @@ 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:86
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s ενημερωμένο -- παράλειψη\n"
#: lib/libalpm/add.c:95
#: lib/libalpm/add.c:90
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s ενημερωμένο -- επανεγκατάσταση\n"
#: lib/libalpm/add.c:100
#: lib/libalpm/add.c:95
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "υποβάθμιση πακέτου %s (%s => %s)\n"
#: lib/libalpm/add.c:129
#: lib/libalpm/add.c:124
#, c-format
msgid "cannot allocate disk archive object"
msgstr "αδυναμία κατανομής αντικειμένου αρχείου δίσκου"
#: lib/libalpm/add.c:143 lib/libalpm/util.c:382
#: lib/libalpm/add.c:138 lib/libalpm/util.c:382
#, 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:141 lib/libalpm/util.c:385
#, 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:154 lib/libalpm/dload.c:569 lib/libalpm/remove.c:541
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "αδυναμία μετονομασίας %s σε %s (%s)\n"
#: lib/libalpm/add.c:210
#: lib/libalpm/add.c:205
#, c-format
msgid "file not found in file list for package %s. skipping extraction of %s\n"
msgstr ""
"αρχείο δεν βρέθηκε στην λίστα αρχείων του πακέτου %s. παράλειψη εξαγωγής του "
"%s\n"
#: lib/libalpm/add.c:219
#: lib/libalpm/add.c:214
#, c-format
msgid "unable to extract %s%s: path too long"
msgstr "αδυναμία εξαγωγής %s%s: πολύ μεγάλο μήκος διαδρομής"
#: lib/libalpm/add.c:261
#: lib/libalpm/add.c:256
#, c-format
msgid ""
"directory permissions differ on %s\n"
@@ -84,7 +84,7 @@ msgstr ""
"τα δικαιώματα καταλόγου διαφέρουν στο %s\n"
"σύστημα αρχείων: %o πακέτο: %o\n"
#: lib/libalpm/add.c:276
#: lib/libalpm/add.c:271
#, c-format
msgid ""
"directory ownership differs on %s\n"
@@ -93,101 +93,101 @@ msgstr ""
"κυριότητα καταλόγου διαφορετική από του %s\n"
"σύστημα αρχείων: %u:%u πακέτου: %u:%u\n"
#: lib/libalpm/add.c:292
#: lib/libalpm/add.c:287
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr "εξαγωγή: μη αντικατάσταση καταλόγου με αρχείο %s\n"
#: lib/libalpm/add.c:320
#: lib/libalpm/add.c:315
#, c-format
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:508 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#, 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/add.c:513 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/util.c:650
#, 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:570 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#, c-format
msgid "could not restore working directory (%s)\n"
msgstr "αδυναμία επαναφοράς καταλόγου εργασίας (%s)\n"
#: lib/libalpm/add.c:583
#: lib/libalpm/add.c:578
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "πρόβλημα κατά την αναβάθμιση του %s\n"
#: lib/libalpm/add.c:589
#: lib/libalpm/add.c:584
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "πρόβλημα κατά την εγκατάσταση του %s\n"
#: lib/libalpm/add.c:604
#: lib/libalpm/add.c:599
#, 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:255
#, 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:350
#, 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:401 lib/libalpm/be_local.c:887
#, 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:576 lib/libalpm/be_sync.c:387
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "άκυρο όνομα εγγραφής βάσης '%s'\n"
#: lib/libalpm/be_local.c:598
#: lib/libalpm/be_local.c:584
#, c-format
msgid "duplicated database entry '%s'\n"
msgstr "διπλότυπη εγγραφή βάσης '%s'\n"
#: lib/libalpm/be_local.c:610
#: lib/libalpm/be_local.c:596
#, 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/be_local.c:699 lib/libalpm/be_local.c:791
#: lib/libalpm/be_local.c:936 lib/libalpm/be_local.c:1033
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:419 lib/libalpm/util.c:253
#: lib/libalpm/util.c:269
#, 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:715 lib/libalpm/be_sync.c:653
#, 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:721 lib/libalpm/be_sync.c:659
#, 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:762
#, c-format
msgid "unknown validation type for package %s: %s\n"
msgstr "άγνωστος τύπος επικύρωσης πακέτου %s: %s\n"
@@ -228,45 +228,45 @@ msgstr "άκυρη έκδοση πακέτου στο %s\n"
msgid "missing package metadata in %s\n"
msgstr "απόντα μετα-δεδομένα πακέτου στο %s\n"
#: lib/libalpm/be_package.c:750
#: lib/libalpm/be_package.c:748
#, 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:769 lib/libalpm/sync.c:1113
#, c-format
msgid "required key missing from keyring\n"
msgstr ""
"απόν κλειδί από τον κλειδούχο\n"
"\n"
#: lib/libalpm/be_sync.c:61
#: lib/libalpm/be_sync.c:62
#, c-format
msgid "removing invalid file: %s\n"
msgstr "διαγραφή άκυρου αρχείου: %s\n"
#: lib/libalpm/be_sync.c:515
#: lib/libalpm/be_sync.c:517
#, 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:524
#, c-format
msgid "could not read db '%s' (%s)\n"
msgstr "αδυναμία ανάγνωσης βάσης '%s' (%s)\n"
msgstr ""
#: lib/libalpm/be_sync.c:556 lib/libalpm/be_sync.c:561
#: lib/libalpm/be_sync.c:558 lib/libalpm/be_sync.c:563
#, 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:568
#, 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:634
#, c-format
msgid "unknown database file: %s\n"
msgstr "άγνωστο αρχείο βάσης: %s\n"
@@ -291,12 +291,12 @@ msgstr "κατάργηση του %s μετά την εξάρτησή του %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:682 lib/libalpm/deps.c:712
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "παράβλεψη πακέτου %s-%s\n"
#: lib/libalpm/deps.c:869
#: lib/libalpm/deps.c:867
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "αδυναμία εύρεσης του \"%s\", εξάρτησης του \"%s\"\n"
@@ -353,38 +353,38 @@ msgstr "αδυναμία καθορισμού ριζικού σημείου πρ
msgid "Partition %s is mounted read only\n"
msgstr "Η κατάτμηση %s είναι προσαρτημένη μόνο για ανάγνωση\n"
#: lib/libalpm/dload.c:161
#: lib/libalpm/dload.c:159
#, c-format
msgid "disk"
msgstr "δίσκο"
#: lib/libalpm/dload.c:348
#: lib/libalpm/dload.c:345
#, c-format
msgid "failed to create temporary file for download\n"
msgstr "αποτυχία δημιουργίας προσωρινού αρχείου λήψης\n"
#: lib/libalpm/dload.c:393
#: lib/libalpm/dload.c:390
#, c-format
msgid "url '%s' is invalid\n"
msgstr "άκυρη διεύθυνση '%s'\n"
#: lib/libalpm/dload.c:464 lib/libalpm/dload.c:485 lib/libalpm/dload.c:496
#: lib/libalpm/dload.c:460 lib/libalpm/dload.c:481 lib/libalpm/dload.c:492
#, 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:473
#, 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:528
#, 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:672 lib/libalpm/dload.c:701
#, c-format
msgid "failed to download %s\n"
msgstr "αποτυχία λήψης %s\n"
@@ -604,194 +604,199 @@ msgstr "απούσα υπογραφή PGP"
msgid "invalid PGP signature"
msgstr "άκυρη υπογραφή PGP"
#: lib/libalpm/error.c:135 lib/libalpm/hook.c:514
#: lib/libalpm/error.c:135
#, c-format
msgid "invalid or corrupted delta"
msgstr "άκυρο ή κατεστραμμένο delta"
#: lib/libalpm/error.c:137
#, c-format
msgid "delta patch failed"
msgstr "αποτυχία μπάλωματος delta"
#: lib/libalpm/error.c:140 lib/libalpm/hook.c:614
#, c-format
msgid "could not satisfy dependencies"
msgstr "αδυναμία επίλυσης εξαρτήσεων"
#: lib/libalpm/error.c:137
#: lib/libalpm/error.c:142
#, c-format
msgid "conflicting dependencies"
msgstr "διένεξη εξαρτήσεων"
#: lib/libalpm/error.c:139
#: lib/libalpm/error.c:144
#, c-format
msgid "conflicting files"
msgstr "διένεξη αρχείων"
#: lib/libalpm/error.c:142
#: lib/libalpm/error.c:147
#, c-format
msgid "failed to retrieve some files"
msgstr "αποτυχία λήψης κάποιων αρχείων"
#: lib/libalpm/error.c:144
#: lib/libalpm/error.c:149
#, c-format
msgid "invalid regular expression"
msgstr "άκυρη κανονική έκφραση"
#: lib/libalpm/error.c:150
#: lib/libalpm/error.c:155
#, c-format
msgid "libarchive error"
msgstr "σφάλμα libarchive"
#: lib/libalpm/error.c:152
#: lib/libalpm/error.c:157
#, c-format
msgid "download library error"
msgstr "σφάλμα βιβλιοθήκης λήψης"
#: lib/libalpm/error.c:154
#: lib/libalpm/error.c:159
#, c-format
msgid "gpgme error"
msgstr "σφάλμα gpgme"
#: lib/libalpm/error.c:156
#: lib/libalpm/error.c:161
#, c-format
msgid "error invoking external downloader"
msgstr "σφάλμα κλήσης προγράμματος λήψης"
#: lib/libalpm/error.c:159
#, c-format
msgid "compiled without signature support"
msgstr ""
#: lib/libalpm/error.c:162
#: lib/libalpm/error.c:164
#, c-format
msgid "unexpected error"
msgstr "απρόσμενο σφάλμα"
#: lib/libalpm/handle.c:153
#: lib/libalpm/handle.c:157
#, c-format
msgid "lock file missing %s\n"
msgstr "απόν αρχείο κλειδώματος %s\n"
#: lib/libalpm/handle.c:159
#: lib/libalpm/handle.c:163
#, c-format
msgid "could not remove lock file %s\n"
msgstr "αδυναμία διαγραφής αρχείου κλειδώματος %s\n"
#: lib/libalpm/hook.c:95
#, c-format
msgid "Missing trigger targets in hook: %s\n"
msgstr "Απόντες διακόπτες στόχων στο hook: %s\n"
#: lib/libalpm/hook.c:101
#, c-format
msgid "Missing trigger type in hook: %s\n"
msgstr "Απών τύπος διακόπτη στο hook: %s\n"
#: lib/libalpm/hook.c:107
#, c-format
msgid "Missing trigger operation in hook: %s\n"
msgstr "Απούσα λειτουργία διακόπτη στο hook: %s\n"
msgid "Missing trigger targets in hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:134
#: lib/libalpm/hook.c:113
#, c-format
msgid "Missing trigger type in hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:119
#, c-format
msgid "Missing trigger operation in hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:146
#, c-format
msgid "Missing Exec option in hook: %s\n"
msgstr "Απούσα επιλογή Exec στο hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:140
#: lib/libalpm/hook.c:152
#, c-format
msgid "Missing When option in hook: %s\n"
msgstr "Απούσα επιλογή When στο hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:143
#: lib/libalpm/hook.c:155
#, c-format
msgid "AbortOnFail set for PostTransaction hook: %s\n"
msgstr "Τέθηκε AbortOnFail στο PostTransaction hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:160
#: lib/libalpm/hook.c:273
#, c-format
msgid "error while reading hook %s: %s\n"
msgstr "σφάλμα ανάγνωσης hook %s: %s\n"
msgstr ""
#: lib/libalpm/hook.c:162 lib/libalpm/hook.c:206 lib/libalpm/hook.c:248
#: lib/libalpm/hook.c:275 lib/libalpm/hook.c:315 lib/libalpm/hook.c:357
#, c-format
msgid "hook %s line %d: invalid option %s\n"
msgstr "hook %s γραμμή %d: άκυρη επιλογή %s\n"
msgstr ""
#: lib/libalpm/hook.c:172
#: lib/libalpm/hook.c:285
#, c-format
msgid "hook %s line %d: invalid section %s\n"
msgstr "hook %s γραμμή %d: άκυρη ενότητα %s\n"
msgstr ""
#: lib/libalpm/hook.c:184 lib/libalpm/hook.c:199 lib/libalpm/hook.c:218
#: lib/libalpm/hook.c:241
#: lib/libalpm/hook.c:297 lib/libalpm/hook.c:308 lib/libalpm/hook.c:327
#: lib/libalpm/hook.c:350
#, c-format
msgid "hook %s line %d: invalid value %s\n"
msgstr "hook %s γραμμή %d: άκυρη τιμή %s\n"
msgstr ""
#: lib/libalpm/hook.c:188 lib/libalpm/hook.c:211 lib/libalpm/hook.c:222
#: lib/libalpm/hook.c:236
#: lib/libalpm/hook.c:301 lib/libalpm/hook.c:320 lib/libalpm/hook.c:331
#: lib/libalpm/hook.c:345
#, c-format
msgid "hook %s line %d: overwriting previous definition of %s\n"
msgstr "hook %s γραμμή %d: αντικατάσταση προηγούμενου ορισμού %s\n"
msgstr ""
#: lib/libalpm/hook.c:243
#: lib/libalpm/hook.c:352
#, c-format
msgid "hook %s line %d: unable to set option (%s)\n"
msgstr "hook %s γραμμή %d: αδυναμία ορισμού επιλογής (%s)\n"
msgstr ""
#: lib/libalpm/hook.c:513
#: lib/libalpm/hook.c:613
#, c-format
msgid "unable to run hook %s: %s\n"
msgstr "αδυναμία εκτελέσεως hook %s: %s\n"
msgstr ""
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:386
#: lib/libalpm/hook.c:648 lib/libalpm/hook.c:660 lib/libalpm/remove.c:385
#, c-format
msgid "could not open directory: %s: %s\n"
msgstr "αδυναμία ανοίγματος καταλόγου %s: %s\n"
#: lib/libalpm/hook.c:575
#: lib/libalpm/hook.c:676
#, c-format
msgid "could not open file: %s%s: %s\n"
msgstr "αδυναμία ανοίγματος αρχείου: %s%s: %s\n"
msgstr ""
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:259
#: lib/libalpm/hook.c:696 lib/libalpm/util.c:259
#, c-format
msgid "could not stat file %s: %s\n"
msgstr "αδυναμία εντοπισμού αρχείου %s: %s\n"
#: lib/libalpm/hook.c:621
#: lib/libalpm/hook.c:722
#, c-format
msgid "could not read directory: %s: %s\n"
msgstr "αδυναμία ανάγνωσης καταλόγου: %s: %s\n"
msgstr ""
#: lib/libalpm/package.c:578
#: lib/libalpm/package.c:586
#, c-format
msgid "could not fully load metadata for package %s-%s\n"
msgstr "αδυναμία πλήρους φόρτωσης μεταδεδομένων πακέτου %s-%s\n"
#: lib/libalpm/remove.c:119
#: lib/libalpm/remove.c:118
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "δεν βρέθηκε το %s στη βάση -- παράλειψη\n"
#: lib/libalpm/remove.c:154
#: lib/libalpm/remove.c:153
#, c-format
msgid "removing %s from target list\n"
msgstr "αφαίρεση του %s από λίστα διεκπεραίωσης\n"
#: lib/libalpm/remove.c:346
#: lib/libalpm/remove.c:345
#, 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:410 lib/libalpm/remove.c:419
#, c-format
msgid "could not backup %s due to PATH_MAX overflow\n"
msgstr "αδυναμία εφεδρικής αντιγραφής %s εξαιτίας υπερχείλισης PATH_MAX\n"
msgstr ""
#: lib/libalpm/remove.c:562
#: lib/libalpm/remove.c:561
#, c-format
msgid "cannot remove %s (%s)\n"
msgstr "αδυναμία κατάργησης %s (%s)\n"
#: lib/libalpm/remove.c:735
#: lib/libalpm/remove.c:734
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "αδυναμία κατάργησης εγγραφής βάσης %s-%s\n"
#: lib/libalpm/remove.c:740
#: lib/libalpm/remove.c:739
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "αδυναμία κατάργησης εγγραφής '%s' από κρύπτη\n"
@@ -799,157 +804,142 @@ msgstr "αδυναμία κατάργησης εγγραφής '%s' από κρ
#: lib/libalpm/signing.c:171
#, c-format
msgid "Public keyring not found; have you run '%s'?\n"
msgstr "Δεν ευρέθη δημόσιος κλειδούχος· εκτελέστηκε '%s';\n"
msgstr ""
#: lib/libalpm/signing.c:207 lib/libalpm/signing.c:784
#: lib/libalpm/signing.c:207 lib/libalpm/signing.c:705
#, c-format
msgid "GPGME error: %s\n"
msgstr "σφάλμα GPGME: %s\n"
#: lib/libalpm/signing.c:284
#, c-format
msgid "looking up key %s using WKD\n"
msgstr ""
#: lib/libalpm/signing.c:293
#, c-format
msgid "gpg error: %s\n"
msgstr ""
#: lib/libalpm/signing.c:441 lib/libalpm/signing.c:515
#: lib/libalpm/signing.c:402
#, c-format
msgid "keyring is not writable\n"
msgstr "μη εγγράψιμος κλειδούχος\n"
#: lib/libalpm/signing.c:539
#, c-format
msgid "key \"%s\" on keyserver\n"
msgstr ""
#: lib/libalpm/signing.c:544
#: lib/libalpm/signing.c:460
#, c-format
msgid "key \"%s\" could not be imported\n"
msgstr "αδυναμία εισαγωγής κλειδιού \"%s\"\n"
msgstr ""
#: lib/libalpm/signing.c:548
#: lib/libalpm/signing.c:466
#, c-format
msgid "key %s, \"%s\" found on keyserver, keyring is not writable\n"
msgstr ""
#: lib/libalpm/signing.c:471
#, c-format
msgid "key \"%s\" could not be looked up remotely\n"
msgstr "αδυναμία απομεμακρυσμένης αναζήτησης κλειδιού \"%s\"\n"
msgstr ""
#: lib/libalpm/signing.c:943 lib/libalpm/sync.c:1022
#: lib/libalpm/signing.c:859 lib/libalpm/sync.c:1181
#, c-format
msgid "%s: missing required signature\n"
msgstr "%s: απούσα απαιτούμενη υπογραφή\n"
#: lib/libalpm/signing.c:958
#: lib/libalpm/signing.c:874
#, c-format
msgid "%s: signature from \"%s\" is marginal trust\n"
msgstr "%s: υπογραφή από \"%s\" οριακής εμπιστοσύνης\n"
msgstr ""
#: lib/libalpm/signing.c:966
#: lib/libalpm/signing.c:882
#, c-format
msgid "%s: signature from \"%s\" is unknown trust\n"
msgstr "%s: υπογραφή από \"%s\" αγνώστου εμπιστοσύνης\n"
msgstr ""
#: lib/libalpm/signing.c:973
#: lib/libalpm/signing.c:889
#, c-format
msgid "%s: signature from \"%s\" should never be trusted\n"
msgstr "%s: υπογραφή από \"%s\" ουδεμίας εμπιστοσύνης\n"
msgstr ""
#: lib/libalpm/signing.c:985
#: lib/libalpm/signing.c:901
#, c-format
msgid "%s: key \"%s\" is unknown\n"
msgstr "%s: κλειδί \"%s\" άγνωστο\n"
msgstr ""
#: lib/libalpm/signing.c:994
#: lib/libalpm/signing.c:910
#, c-format
msgid "%s: key \"%s\" is disabled\n"
msgstr "%s: κλειδί \"%s\" απενεργοποιημένο\n"
msgstr ""
#: lib/libalpm/signing.c:998
#: lib/libalpm/signing.c:914
#, c-format
msgid "%s: signature from \"%s\" is expired\n"
msgstr "%s: υπογραφή από \"%s\" ληγμένη\n"
msgstr ""
#: lib/libalpm/signing.c:1002
#: lib/libalpm/signing.c:918
#, c-format
msgid "%s: signature from \"%s\" is invalid\n"
msgstr "%s: υπογραφή από \"%s\" άκυρη\n"
msgstr ""
#: lib/libalpm/signing.c:1079 lib/libalpm/signing.c:1147
#: lib/libalpm/signing.c:1226
#: lib/libalpm/signing.c:995 lib/libalpm/signing.c:1063
#: lib/libalpm/signing.c:1142
#, c-format
msgid "%s: signature format error\n"
msgstr "%s: σφάλμα μορφής υπογραφής\n"
msgstr ""
#: lib/libalpm/signing.c:1179 lib/libalpm/signing.c:1212
#: lib/libalpm/signing.c:1220
#: lib/libalpm/signing.c:1095 lib/libalpm/signing.c:1128
#: lib/libalpm/signing.c:1136
#, c-format
msgid "%s: unsupported signature format\n"
msgstr "%s: μη υποστηριζόμενη μορφή υπογραφής\n"
msgstr ""
#: lib/libalpm/sync.c:99
#: lib/libalpm/sync.c:98
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: παράβλεψη αναβάθμισης πακέτου (%s => %s)\n"
#: lib/libalpm/sync.c:111
#: lib/libalpm/sync.c:110
#, c-format
msgid "%s: ignoring package downgrade (%s => %s)\n"
msgstr "%s: παράβλεψη υποβάθμισης πακέτου (%s => %s)\n"
#: lib/libalpm/sync.c:114
#: lib/libalpm/sync.c:113
#, 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:119
#, 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:160
#, 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:176
#, 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:538 lib/libalpm/sync.c:608
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr "εντοπισμός ανεπίλυτων διενέξεων πακέτων\n"
#: lib/libalpm/sync.c:555
#: lib/libalpm/sync.c:558
#, c-format
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgstr ""
"αφαίρεση του '%s' από την λίστα διεκπεραίωσης λόγω διένεξης με το '%s'\n"
#: lib/libalpm/sync.c:849
#: lib/libalpm/sync.c:1019
#, c-format
msgid "failed to retrieve some files\n"
msgstr "σφάλμα λήψης μερικών αρχείων\n"
#: lib/libalpm/sync.c:1036
#, c-format
msgid "failed to read file %s: %s\n"
msgstr ""
#: lib/libalpm/sync.c:1223
#: lib/libalpm/sync.c:1384
#, c-format
msgid "not enough free disk space\n"
msgstr "μη αρκετός ελεύθερος χώρος στο δίσκο\n"
#: lib/libalpm/sync.c:1245
#: lib/libalpm/sync.c:1406
#, c-format
msgid "could not commit removal transaction\n"
msgstr "αδυναμία διεκπεραίωσης διαγραφής\n"
#: lib/libalpm/sync.c:1253
#: lib/libalpm/sync.c:1414
#, c-format
msgid "could not commit transaction\n"
msgstr "αδυναμία διεκπεραίωσης\n"

View File

@@ -4,14 +4,14 @@
#
# Translators:
# Allan McRae <allan@archlinux.org>, 2013
# Allan McRae <allan@archlinux.org>, 2013-2015,2017-2019
# Allan McRae <allan@archlinux.org>, 2013-2015,2017-2018
# 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"
"POT-Creation-Date: 2018-12-12 11:09+1000\n"
"PO-Revision-Date: 2018-05-15 01:15+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"Language-Team: English (United Kingdom) (http://www.transifex.com/toofishes/"
"archlinux-pacman/language/en_GB/)\n"
@@ -21,53 +21,53 @@ 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:86
#, 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:90
#, 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:95
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "downgrading package %s (%s => %s)\n"
#: lib/libalpm/add.c:129
#: lib/libalpm/add.c:124
#, c-format
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:138 lib/libalpm/util.c:382
#, 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:141 lib/libalpm/util.c:385
#, 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:154 lib/libalpm/dload.c:569 lib/libalpm/remove.c:541
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "could not rename %s to %s (%s)\n"
#: lib/libalpm/add.c:210
#: lib/libalpm/add.c:205
#, c-format
msgid "file not found in file list for package %s. skipping extraction of %s\n"
msgstr ""
"file not found in file list for package %s. skipping extraction of %s\n"
#: lib/libalpm/add.c:219
#: lib/libalpm/add.c:214
#, c-format
msgid "unable to extract %s%s: path too long"
msgstr "unable to extract %s%s: path too long"
#: lib/libalpm/add.c:261
#: lib/libalpm/add.c:256
#, c-format
msgid ""
"directory permissions differ on %s\n"
@@ -76,7 +76,7 @@ msgstr ""
"directory permissions differ on %s\n"
"filesystem: %o package: %o\n"
#: lib/libalpm/add.c:276
#: lib/libalpm/add.c:271
#, c-format
msgid ""
"directory ownership differs on %s\n"
@@ -85,101 +85,101 @@ msgstr ""
"directory ownership differs on %s\n"
"filesystem: %u:%u package: %u:%u\n"
#: lib/libalpm/add.c:292
#: lib/libalpm/add.c:287
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr "extract: not overwriting dir with file %s\n"
#: lib/libalpm/add.c:320
#: lib/libalpm/add.c:315
#, c-format
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:508 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#, 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/add.c:513 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/util.c:650
#, 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:570 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#, 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:578
#, 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:584
#, 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:599
#, 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:255
#, 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:350
#, 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:401 lib/libalpm/be_local.c:887
#, 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:576 lib/libalpm/be_sync.c:387
#, 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:584
#, 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:596
#, 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/be_local.c:699 lib/libalpm/be_local.c:791
#: lib/libalpm/be_local.c:936 lib/libalpm/be_local.c:1033
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:419 lib/libalpm/util.c:253
#: lib/libalpm/util.c:269
#, 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:715 lib/libalpm/be_sync.c:653
#, 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:721 lib/libalpm/be_sync.c:659
#, 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:762
#, c-format
msgid "unknown validation type for package %s: %s\n"
msgstr "unknown validation type for package %s: %s\n"
@@ -220,42 +220,42 @@ msgstr "invalid package version in %s\n"
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:748
#, 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:769 lib/libalpm/sync.c:1113
#, c-format
msgid "required key missing from keyring\n"
msgstr "required key missing from keyring\n"
#: lib/libalpm/be_sync.c:61
#: lib/libalpm/be_sync.c:62
#, c-format
msgid "removing invalid file: %s\n"
msgstr "removing invalid file: %s\n"
#: lib/libalpm/be_sync.c:515
#: lib/libalpm/be_sync.c:517
#, 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:524
#, 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:558 lib/libalpm/be_sync.c:563
#, 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:568
#, 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:634
#, c-format
msgid "unknown database file: %s\n"
msgstr "unknown database file: %s\n"
@@ -280,12 +280,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:682 lib/libalpm/deps.c:712
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "ignoring package %s-%s\n"
#: lib/libalpm/deps.c:869
#: lib/libalpm/deps.c:867
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "cannot resolve \"%s\", a dependency of \"%s\"\n"
@@ -340,38 +340,38 @@ msgstr "could not determine root mount point %s\n"
msgid "Partition %s is mounted read only\n"
msgstr "Partition %s is mounted read only\n"
#: lib/libalpm/dload.c:161
#: lib/libalpm/dload.c:159
#, c-format
msgid "disk"
msgstr "disk"
#: lib/libalpm/dload.c:348
#: lib/libalpm/dload.c:345
#, 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:390
#, c-format
msgid "url '%s' is invalid\n"
msgstr "URL '%s' is invalid\n"
#: lib/libalpm/dload.c:464 lib/libalpm/dload.c:485 lib/libalpm/dload.c:496
#: lib/libalpm/dload.c:460 lib/libalpm/dload.c:481 lib/libalpm/dload.c:492
#, 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:473
#, 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:528
#, 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:672 lib/libalpm/dload.c:701
#, c-format
msgid "failed to download %s\n"
msgstr "failed to download %s\n"
@@ -591,194 +591,199 @@ msgstr "missing PGP signature"
msgid "invalid PGP signature"
msgstr "invalid PGP signature"
#: lib/libalpm/error.c:135 lib/libalpm/hook.c:514
#: lib/libalpm/error.c:135
#, c-format
msgid "invalid or corrupted delta"
msgstr "invalid or corrupted delta"
#: lib/libalpm/error.c:137
#, c-format
msgid "delta patch failed"
msgstr "delta patch failed"
#: lib/libalpm/error.c:140 lib/libalpm/hook.c:614
#, c-format
msgid "could not satisfy dependencies"
msgstr "could not satisfy dependencies"
#: lib/libalpm/error.c:137
#: lib/libalpm/error.c:142
#, c-format
msgid "conflicting dependencies"
msgstr "conflicting dependencies"
#: lib/libalpm/error.c:139
#: lib/libalpm/error.c:144
#, c-format
msgid "conflicting files"
msgstr "conflicting files"
#: lib/libalpm/error.c:142
#: lib/libalpm/error.c:147
#, c-format
msgid "failed to retrieve some files"
msgstr "failed to retrieve some files"
#: lib/libalpm/error.c:144
#: lib/libalpm/error.c:149
#, c-format
msgid "invalid regular expression"
msgstr "invalid regular expression"
#: lib/libalpm/error.c:150
#: lib/libalpm/error.c:155
#, c-format
msgid "libarchive error"
msgstr "libarchive error"
#: lib/libalpm/error.c:152
#: lib/libalpm/error.c:157
#, c-format
msgid "download library error"
msgstr "download library error"
#: lib/libalpm/error.c:154
#: lib/libalpm/error.c:159
#, c-format
msgid "gpgme error"
msgstr "gpgme error"
#: lib/libalpm/error.c:156
#: lib/libalpm/error.c:161
#, c-format
msgid "error invoking external downloader"
msgstr "error invoking external downloader"
#: lib/libalpm/error.c:159
#, c-format
msgid "compiled without signature support"
msgstr "compiled without signature support"
#: lib/libalpm/error.c:162
#: lib/libalpm/error.c:164
#, c-format
msgid "unexpected error"
msgstr "unexpected error"
#: lib/libalpm/handle.c:153
#: lib/libalpm/handle.c:157
#, c-format
msgid "lock file missing %s\n"
msgstr "lock file missing %s\n"
#: lib/libalpm/handle.c:159
#: lib/libalpm/handle.c:163
#, c-format
msgid "could not remove lock file %s\n"
msgstr "could not remove lock file %s\n"
#: lib/libalpm/hook.c:95
#: lib/libalpm/hook.c:107
#, c-format
msgid "Missing trigger targets in hook: %s\n"
msgstr "Missing trigger targets in hook: %s\n"
#: lib/libalpm/hook.c:101
#: lib/libalpm/hook.c:113
#, c-format
msgid "Missing trigger type in hook: %s\n"
msgstr "Missing trigger type in hook: %s\n"
#: lib/libalpm/hook.c:107
#: lib/libalpm/hook.c:119
#, c-format
msgid "Missing trigger operation in hook: %s\n"
msgstr "Missing trigger operation in hook: %s\n"
#: lib/libalpm/hook.c:134
#: lib/libalpm/hook.c:146
#, c-format
msgid "Missing Exec option in hook: %s\n"
msgstr "Missing Exec option in hook: %s\n"
#: lib/libalpm/hook.c:140
#: lib/libalpm/hook.c:152
#, c-format
msgid "Missing When option in hook: %s\n"
msgstr "Missing When option in hook: %s\n"
#: lib/libalpm/hook.c:143
#: lib/libalpm/hook.c:155
#, c-format
msgid "AbortOnFail set for PostTransaction hook: %s\n"
msgstr "AbortOnFail set for PostTransaction hook: %s\n"
#: lib/libalpm/hook.c:160
#: lib/libalpm/hook.c:273
#, c-format
msgid "error while reading hook %s: %s\n"
msgstr "error while reading hook %s: %s\n"
#: lib/libalpm/hook.c:162 lib/libalpm/hook.c:206 lib/libalpm/hook.c:248
#: lib/libalpm/hook.c:275 lib/libalpm/hook.c:315 lib/libalpm/hook.c:357
#, c-format
msgid "hook %s line %d: invalid option %s\n"
msgstr "hook %s line %d: invalid option %s\n"
#: lib/libalpm/hook.c:172
#: lib/libalpm/hook.c:285
#, c-format
msgid "hook %s line %d: invalid section %s\n"
msgstr "hook %s line %d: invalid section %s\n"
#: lib/libalpm/hook.c:184 lib/libalpm/hook.c:199 lib/libalpm/hook.c:218
#: lib/libalpm/hook.c:241
#: lib/libalpm/hook.c:297 lib/libalpm/hook.c:308 lib/libalpm/hook.c:327
#: lib/libalpm/hook.c:350
#, c-format
msgid "hook %s line %d: invalid value %s\n"
msgstr "hook %s line %d: invalid value %s\n"
#: lib/libalpm/hook.c:188 lib/libalpm/hook.c:211 lib/libalpm/hook.c:222
#: lib/libalpm/hook.c:236
#: lib/libalpm/hook.c:301 lib/libalpm/hook.c:320 lib/libalpm/hook.c:331
#: lib/libalpm/hook.c:345
#, c-format
msgid "hook %s line %d: overwriting previous definition of %s\n"
msgstr "hook %s line %d: overwriting previous definition of %s\n"
#: lib/libalpm/hook.c:243
#: lib/libalpm/hook.c:352
#, c-format
msgid "hook %s line %d: unable to set option (%s)\n"
msgstr "hook %s line %d: unable to set option (%s)\n"
#: lib/libalpm/hook.c:513
#: lib/libalpm/hook.c:613
#, c-format
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:648 lib/libalpm/hook.c:660 lib/libalpm/remove.c:385
#, c-format
msgid "could not open directory: %s: %s\n"
msgstr "could not open directory: %s: %s\n"
#: lib/libalpm/hook.c:575
#: lib/libalpm/hook.c:676
#, c-format
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:696 lib/libalpm/util.c:259
#, c-format
msgid "could not stat file %s: %s\n"
msgstr "could not stat file %s: %s\n"
#: lib/libalpm/hook.c:621
#: lib/libalpm/hook.c:722
#, c-format
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:586
#, 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/remove.c:118
#, 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:153
#, 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:345
#, 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:410 lib/libalpm/remove.c:419
#, 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:561
#, c-format
msgid "cannot remove %s (%s)\n"
msgstr "cannot remove %s (%s)\n"
#: lib/libalpm/remove.c:735
#: lib/libalpm/remove.c:734
#, 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:739
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "could not remove entry '%s' from cache\n"
@@ -788,154 +793,139 @@ msgstr "could not remove entry '%s' from cache\n"
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:207 lib/libalpm/signing.c:705
#, c-format
msgid "GPGME error: %s\n"
msgstr "GPGME error: %s\n"
#: lib/libalpm/signing.c:284
#, c-format
msgid "looking up key %s using WKD\n"
msgstr "looking up key %s using WKD\n"
#: lib/libalpm/signing.c:293
#, 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:402
#, c-format
msgid "keyring is not writable\n"
msgstr "keyring is not writable\n"
#: lib/libalpm/signing.c:539
#, c-format
msgid "key \"%s\" on keyserver\n"
msgstr "key \"%s\" on keyserver\n"
#: lib/libalpm/signing.c:544
#: lib/libalpm/signing.c:460
#, 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:466
#, c-format
msgid "key %s, \"%s\" found on keyserver, keyring is not writable\n"
msgstr "key %s, \"%s\" found on keyserver, keyring is not writable\n"
#: lib/libalpm/signing.c:471
#, 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:859 lib/libalpm/sync.c:1181
#, c-format
msgid "%s: missing required signature\n"
msgstr "%s: missing required signature\n"
#: lib/libalpm/signing.c:958
#: lib/libalpm/signing.c:874
#, 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:882
#, 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:889
#, 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:901
#, 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:910
#, 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:914
#, 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:918
#, 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:995 lib/libalpm/signing.c:1063
#: lib/libalpm/signing.c:1142
#, 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:1095 lib/libalpm/signing.c:1128
#: lib/libalpm/signing.c:1136
#, c-format
msgid "%s: unsupported signature format\n"
msgstr "%s: unsupported signature format\n"
#: lib/libalpm/sync.c:99
#: lib/libalpm/sync.c:98
#, 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:110
#, 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:113
#, 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:119
#, 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:160
#, 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:176
#, 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:538 lib/libalpm/sync.c:608
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr "unresolvable package conflicts detected\n"
#: lib/libalpm/sync.c:555
#: lib/libalpm/sync.c:558
#, 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"
#: lib/libalpm/sync.c:849
#: lib/libalpm/sync.c:1019
#, c-format
msgid "failed to retrieve some files\n"
msgstr "failed to retrieve some files\n"
#: lib/libalpm/sync.c:1036
#, 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:1384
#, 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:1406
#, 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:1414
#, c-format
msgid "could not commit transaction\n"
msgstr "could not commit transaction\n"

View File

@@ -11,8 +11,8 @@ 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"
"POT-Creation-Date: 2018-12-12 11:09+1000\n"
"PO-Revision-Date: 2018-05-15 01:05+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"Language-Team: Esperanto (http://www.transifex.com/toofishes/archlinux-"
"pacman/language/eo/)\n"
@@ -22,54 +22,54 @@ 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:86
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s estas ĝisdata -- preterpasante\n"
#: lib/libalpm/add.c:95
#: lib/libalpm/add.c:90
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s estas ĝisdata -- reinstalante\n"
#: lib/libalpm/add.c:100
#: lib/libalpm/add.c:95
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "malpromociante pakaĵon %s (%s => %s)\n"
#: lib/libalpm/add.c:129
#: lib/libalpm/add.c:124
#, c-format
msgid "cannot allocate disk archive object"
msgstr "maleblas disponigi diskarkivaĵon"
#: lib/libalpm/add.c:143 lib/libalpm/util.c:382
#: lib/libalpm/add.c:138 lib/libalpm/util.c:382
#, c-format
msgid "warning given when extracting %s (%s)\n"
msgstr "averto donita dum eltirado de %s (%s)\n"
#: lib/libalpm/add.c:146 lib/libalpm/util.c:385
#: lib/libalpm/add.c:141 lib/libalpm/util.c:385
#, c-format
msgid "could not extract %s (%s)\n"
msgstr "ne eblis eltiri %s (%s)\n"
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:574 lib/libalpm/remove.c:542
#: lib/libalpm/add.c:154 lib/libalpm/dload.c:569 lib/libalpm/remove.c:541
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "ne eblis renomi %s al %s (%s)\n"
#: lib/libalpm/add.c:210
#: lib/libalpm/add.c:205
#, c-format
msgid "file not found in file list for package %s. skipping extraction of %s\n"
msgstr ""
"dosiero ne trovita en la dosierlisto por pakaĵo %s. preterpasante eltirado "
"de %s\n"
#: lib/libalpm/add.c:219
#: lib/libalpm/add.c:214
#, c-format
msgid "unable to extract %s%s: path too long"
msgstr "ne eblis eltiri %s%s: la dosierindiko estas tro longa"
#: lib/libalpm/add.c:261
#: lib/libalpm/add.c:256
#, c-format
msgid ""
"directory permissions differ on %s\n"
@@ -78,7 +78,7 @@ msgstr ""
"dosierujaj permesoj malsamas en\n"
"dosiersistemo %s: pakaĵo %o: %o\n"
#: lib/libalpm/add.c:276
#: lib/libalpm/add.c:271
#, c-format
msgid ""
"directory ownership differs on %s\n"
@@ -87,101 +87,101 @@ msgstr ""
"dosieruja posedo malsamas en\n"
"dosiersistemo %s: %u:%u pakaĵo: %u:%u\n"
#: lib/libalpm/add.c:292
#: lib/libalpm/add.c:287
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr "eltiri: ne superskribante dosierujon kun dosiero %s\n"
#: lib/libalpm/add.c:320
#: lib/libalpm/add.c:315
#, c-format
msgid "unable to extract %s.pacnew: path too long"
msgstr "ne eblis eltiri %s.pacnew: la dosierindiko estas tro longa"
#: lib/libalpm/add.c:513 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#: lib/libalpm/add.c:508 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#, c-format
msgid "could not get current working directory\n"
msgstr "ne eblis akiri nunan funkciantan dosierujon\n"
#: lib/libalpm/add.c:518 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/add.c:513 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/util.c:650
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "ne eblis ŝanĝi dosierujon al %s (%s)\n"
#: lib/libalpm/add.c:575 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#: lib/libalpm/add.c:570 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#, c-format
msgid "could not restore working directory (%s)\n"
msgstr "ne eblis restaŭri nunan funkciantan dosierujon (%s)\n"
#: lib/libalpm/add.c:583
#: lib/libalpm/add.c:578
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "problemo okazis dum ĝisdatigo de %s\n"
#: lib/libalpm/add.c:589
#: lib/libalpm/add.c:584
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "problemo okazis dum instalo de %s\n"
#: lib/libalpm/add.c:604
#: lib/libalpm/add.c:599
#, c-format
msgid "could not update database entry %s-%s\n"
msgstr "ne eblis ĝisdatigi datumbazan enigon %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 "ne eblis aldoni enigon '%s' en kaŝmemoro\n"
#: lib/libalpm/be_local.c:267
#: lib/libalpm/be_local.c:255
#, c-format
msgid "error while reading file %s: %s\n"
msgstr "eraro dum legado de dosiero %s: %s\n"
#: lib/libalpm/be_local.c:364
#: lib/libalpm/be_local.c:350
#, c-format
msgid "removing invalid database: %s\n"
msgstr "forigante nevalidan datumbazon: %s\n"
#: lib/libalpm/be_local.c:415 lib/libalpm/be_local.c:905
#: lib/libalpm/be_local.c:401 lib/libalpm/be_local.c:887
#, c-format
msgid "could not create directory %s: %s\n"
msgstr "ne eblis krei dosierujon %s: %s\n"
#: lib/libalpm/be_local.c:590 lib/libalpm/be_sync.c:386
#: lib/libalpm/be_local.c:576 lib/libalpm/be_sync.c:387
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "nevalida nomo por datumbaza enigo '%s'\n"
#: lib/libalpm/be_local.c:598
#: lib/libalpm/be_local.c:584
#, c-format
msgid "duplicated database entry '%s'\n"
msgstr "duobla datumbaza enigo '%s'\n"
#: lib/libalpm/be_local.c:610
#: lib/libalpm/be_local.c:596
#, c-format
msgid "corrupted database entry '%s'\n"
msgstr "difektita datumbaza enigo '%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/be_local.c:699 lib/libalpm/be_local.c:791
#: lib/libalpm/be_local.c:936 lib/libalpm/be_local.c:1033
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:419 lib/libalpm/util.c:253
#: lib/libalpm/util.c:269
#, c-format
msgid "could not open file %s: %s\n"
msgstr "ne eblis malfermi dosieron %s: %s\n"
#: lib/libalpm/be_local.c:729 lib/libalpm/be_sync.c:650
#: lib/libalpm/be_local.c:715 lib/libalpm/be_sync.c:653
#, c-format
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr "la datumbazo %s estas nekohera: noma malkongruo en la pakaĵo %s\n"
#: lib/libalpm/be_local.c:735 lib/libalpm/be_sync.c:656
#: lib/libalpm/be_local.c:721 lib/libalpm/be_sync.c:659
#, c-format
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr "la datumbazo %s estas nekohera: versia malkongruo en la pakaĵo %s\n"
#: lib/libalpm/be_local.c:776
#: lib/libalpm/be_local.c:762
#, c-format
msgid "unknown validation type for package %s: %s\n"
msgstr "nekonata validiga tipo por pakaĵo %s: %s\n"
@@ -222,46 +222,46 @@ msgstr "nevalida pakaĵa versio en %s\n"
msgid "missing package metadata in %s\n"
msgstr "mankas pakaĵaj metadatumoj en %s\n"
#: lib/libalpm/be_package.c:750
#: lib/libalpm/be_package.c:748
#, c-format
msgid "failed to read signature file: %s\n"
msgstr "malsukcesis legi subskriban dosieron: %s\n"
#: lib/libalpm/be_package.c:779 lib/libalpm/sync.c:953
#: lib/libalpm/be_package.c:769 lib/libalpm/sync.c:1113
#, c-format
msgid "required key missing from keyring\n"
msgstr "bezonata ŝlosilo mankas de la ŝlosilingo\n"
#: lib/libalpm/be_sync.c:61
#: lib/libalpm/be_sync.c:62
#, c-format
msgid "removing invalid file: %s\n"
msgstr "forigante nevalidan dosieron: %s\n"
#: lib/libalpm/be_sync.c:515
#: lib/libalpm/be_sync.c:517
#, c-format
msgid "could not parse package description file '%s' from db '%s'\n"
msgstr "ne eblis analizi priskriba dosiero de la pakaĵo '%s' el db '%s'\n"
#: lib/libalpm/be_sync.c:522
#: lib/libalpm/be_sync.c:524
#, 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:558 lib/libalpm/be_sync.c:563
#, c-format
msgid "%s database is inconsistent: filename of package %s is illegal\n"
msgstr ""
"la datumbazo %s estas malkongrua: la dosiernomo de pakaĵo %s estas "
"malpermesata\n"
#: lib/libalpm/be_sync.c:566
#: lib/libalpm/be_sync.c:568
#, c-format
msgid "%s database is inconsistent: filename of package %s is too long\n"
msgstr ""
"la datumbazo %s estas malkongrua: la dosiernomo de pakaĵo %s estas tro "
"longa\n"
#: lib/libalpm/be_sync.c:632
#: lib/libalpm/be_sync.c:634
#, c-format
msgid "unknown database file: %s\n"
msgstr "nekonata datumbaza dosiero: %s\n"
@@ -286,12 +286,12 @@ msgstr "oni forigos %s post sia dependenco %s\n"
msgid "%s will be installed before its %s dependency\n"
msgstr "oni instalos %s antaŭ sia dependenco %s\n"
#: lib/libalpm/deps.c:681 lib/libalpm/deps.c:712
#: lib/libalpm/deps.c:682 lib/libalpm/deps.c:712
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "ignorante pakaĵon %s-%s\n"
#: lib/libalpm/deps.c:869
#: lib/libalpm/deps.c:867
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "ne eblas solvi \"%s\", dependeco de \"%s\"\n"
@@ -348,39 +348,39 @@ msgstr "ne eblis scii radikan surmetingon %s\n"
msgid "Partition %s is mounted read only\n"
msgstr "La subdisko %s estas surmetita nurlegebla\n"
#: lib/libalpm/dload.c:161
#: lib/libalpm/dload.c:159
#, c-format
msgid "disk"
msgstr "disko"
#: lib/libalpm/dload.c:348
#: lib/libalpm/dload.c:345
#, c-format
msgid "failed to create temporary file for download\n"
msgstr "malsukcesis krei provizoran dosieron por elŝuto\n"
#: lib/libalpm/dload.c:393
#: lib/libalpm/dload.c:390
#, c-format
msgid "url '%s' is invalid\n"
msgstr "la url '%s' ne estas valida\n"
#: lib/libalpm/dload.c:464 lib/libalpm/dload.c:485 lib/libalpm/dload.c:496
#: lib/libalpm/dload.c:460 lib/libalpm/dload.c:481 lib/libalpm/dload.c:492
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "malsukcesis ricevi dosieron '%s' de %s: %s\n"
#: lib/libalpm/dload.c:477
#: lib/libalpm/dload.c:473
#, c-format
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
msgstr ""
"malsukcesis ricevi dosieron '%s' de %s: atendita elŝuta grando grandigis\n"
"\n"
#: lib/libalpm/dload.c:532
#: lib/libalpm/dload.c:528
#, c-format
msgid "%s appears to be truncated: %jd/%jd bytes\n"
msgstr "%s ŝajnas esti trunkita: %jd/%jd bitokoj\n"
#: lib/libalpm/dload.c:677 lib/libalpm/dload.c:706
#: lib/libalpm/dload.c:672 lib/libalpm/dload.c:701
#, c-format
msgid "failed to download %s\n"
msgstr "malsukcesis elŝuti %s\n"
@@ -600,194 +600,199 @@ msgstr "mankas PGP-subskribo"
msgid "invalid PGP signature"
msgstr "nevalida PGP-subskribo"
#: lib/libalpm/error.c:135 lib/libalpm/hook.c:514
#: lib/libalpm/error.c:135
#, c-format
msgid "invalid or corrupted delta"
msgstr "nevalida aŭ difektita diferencodosiero"
#: lib/libalpm/error.c:137
#, c-format
msgid "delta patch failed"
msgstr "diferencodosiera fliko fiaskis"
#: lib/libalpm/error.c:140 lib/libalpm/hook.c:614
#, c-format
msgid "could not satisfy dependencies"
msgstr "ne eblis satigi dependencojn"
#: lib/libalpm/error.c:137
#: lib/libalpm/error.c:142
#, c-format
msgid "conflicting dependencies"
msgstr "konfliktantaj dependencoj"
#: lib/libalpm/error.c:139
#: lib/libalpm/error.c:144
#, c-format
msgid "conflicting files"
msgstr "konfliktantaj dosieroj"
#: lib/libalpm/error.c:142
#: lib/libalpm/error.c:147
#, c-format
msgid "failed to retrieve some files"
msgstr "malsukcesis ricevi kelkajn dosierojn"
#: lib/libalpm/error.c:144
#: lib/libalpm/error.c:149
#, c-format
msgid "invalid regular expression"
msgstr "nevalida regula esprimo"
#: lib/libalpm/error.c:150
#: lib/libalpm/error.c:155
#, c-format
msgid "libarchive error"
msgstr "eraro en libarchive"
#: lib/libalpm/error.c:152
#: lib/libalpm/error.c:157
#, c-format
msgid "download library error"
msgstr "eraro de biblioteka elŝuto"
#: lib/libalpm/error.c:154
#: lib/libalpm/error.c:159
#, c-format
msgid "gpgme error"
msgstr "eraro de gpgme"
#: lib/libalpm/error.c:156
#: lib/libalpm/error.c:161
#, c-format
msgid "error invoking external downloader"
msgstr "eraro alvokante eksteran elŝutilon"
#: lib/libalpm/error.c:159
#, c-format
msgid "compiled without signature support"
msgstr ""
#: lib/libalpm/error.c:162
#: lib/libalpm/error.c:164
#, c-format
msgid "unexpected error"
msgstr "neatendita eraro"
#: lib/libalpm/handle.c:153
#: lib/libalpm/handle.c:157
#, c-format
msgid "lock file missing %s\n"
msgstr "ŝlosa dosiero mankas %s\n"
#: lib/libalpm/handle.c:159
#: lib/libalpm/handle.c:163
#, c-format
msgid "could not remove lock file %s\n"
msgstr "ne eblis forigi ŝlosan dosieron %s\n"
#: lib/libalpm/hook.c:95
#: lib/libalpm/hook.c:107
#, c-format
msgid "Missing trigger targets in hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:101
#: lib/libalpm/hook.c:113
#, c-format
msgid "Missing trigger type in hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:107
#: lib/libalpm/hook.c:119
#, c-format
msgid "Missing trigger operation in hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:134
#: lib/libalpm/hook.c:146
#, c-format
msgid "Missing Exec option in hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:140
#: lib/libalpm/hook.c:152
#, c-format
msgid "Missing When option in hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:143
#: lib/libalpm/hook.c:155
#, c-format
msgid "AbortOnFail set for PostTransaction hook: %s\n"
msgstr ""
#: lib/libalpm/hook.c:160
#: lib/libalpm/hook.c:273
#, c-format
msgid "error while reading hook %s: %s\n"
msgstr ""
#: lib/libalpm/hook.c:162 lib/libalpm/hook.c:206 lib/libalpm/hook.c:248
#: lib/libalpm/hook.c:275 lib/libalpm/hook.c:315 lib/libalpm/hook.c:357
#, c-format
msgid "hook %s line %d: invalid option %s\n"
msgstr ""
#: lib/libalpm/hook.c:172
#: lib/libalpm/hook.c:285
#, c-format
msgid "hook %s line %d: invalid section %s\n"
msgstr ""
#: lib/libalpm/hook.c:184 lib/libalpm/hook.c:199 lib/libalpm/hook.c:218
#: lib/libalpm/hook.c:241
#: lib/libalpm/hook.c:297 lib/libalpm/hook.c:308 lib/libalpm/hook.c:327
#: lib/libalpm/hook.c:350
#, c-format
msgid "hook %s line %d: invalid value %s\n"
msgstr ""
#: lib/libalpm/hook.c:188 lib/libalpm/hook.c:211 lib/libalpm/hook.c:222
#: lib/libalpm/hook.c:236
#: lib/libalpm/hook.c:301 lib/libalpm/hook.c:320 lib/libalpm/hook.c:331
#: lib/libalpm/hook.c:345
#, c-format
msgid "hook %s line %d: overwriting previous definition of %s\n"
msgstr ""
#: lib/libalpm/hook.c:243
#: lib/libalpm/hook.c:352
#, c-format
msgid "hook %s line %d: unable to set option (%s)\n"
msgstr ""
#: lib/libalpm/hook.c:513
#: lib/libalpm/hook.c:613
#, c-format
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:648 lib/libalpm/hook.c:660 lib/libalpm/remove.c:385
#, c-format
msgid "could not open directory: %s: %s\n"
msgstr "ne eblis malfermi dosierujon: %s: %s\n"
#: lib/libalpm/hook.c:575
#: lib/libalpm/hook.c:676
#, c-format
msgid "could not open file: %s%s: %s\n"
msgstr ""
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:259
#: lib/libalpm/hook.c:696 lib/libalpm/util.c:259
#, c-format
msgid "could not stat file %s: %s\n"
msgstr "ne eblis statikigi dosieron %s: %s\n"
#: lib/libalpm/hook.c:621
#: lib/libalpm/hook.c:722
#, c-format
msgid "could not read directory: %s: %s\n"
msgstr ""
#: lib/libalpm/package.c:578
#: lib/libalpm/package.c:586
#, c-format
msgid "could not fully load metadata for package %s-%s\n"
msgstr "ne eblis tute ŝarĝi la metadatumojn por la pakaĵo %s-%s\n"
#: lib/libalpm/remove.c:119
#: lib/libalpm/remove.c:118
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "ne eblis trovi %s en la datumbazo -- preterpasante\n"
#: lib/libalpm/remove.c:154
#: lib/libalpm/remove.c:153
#, c-format
msgid "removing %s from target list\n"
msgstr "forigante %s de la cela listo\n"
#: lib/libalpm/remove.c:346
#: lib/libalpm/remove.c:345
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "ne eblas forigi dosieron '%s': '%s'\n"
#: lib/libalpm/remove.c:411 lib/libalpm/remove.c:420
#: lib/libalpm/remove.c:410 lib/libalpm/remove.c:419
#, c-format
msgid "could not backup %s due to PATH_MAX overflow\n"
msgstr ""
#: lib/libalpm/remove.c:562
#: lib/libalpm/remove.c:561
#, c-format
msgid "cannot remove %s (%s)\n"
msgstr "ne eblas forigi %s (%s)\n"
#: lib/libalpm/remove.c:735
#: lib/libalpm/remove.c:734
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "ne eblis forigi datumbazan enigon %s-%s\n"
#: lib/libalpm/remove.c:740
#: lib/libalpm/remove.c:739
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "ne eblis forigi enigon '%s' el la kaŝmemoro\n"
@@ -797,156 +802,141 @@ msgstr "ne eblis forigi enigon '%s' el la kaŝmemoro\n"
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:207 lib/libalpm/signing.c:705
#, c-format
msgid "GPGME error: %s\n"
msgstr ""
#: lib/libalpm/signing.c:284
#, c-format
msgid "looking up key %s using WKD\n"
msgstr ""
#: lib/libalpm/signing.c:293
#, c-format
msgid "gpg error: %s\n"
msgstr ""
#: lib/libalpm/signing.c:441 lib/libalpm/signing.c:515
#: lib/libalpm/signing.c:402
#, c-format
msgid "keyring is not writable\n"
msgstr ""
#: lib/libalpm/signing.c:539
#, c-format
msgid "key \"%s\" on keyserver\n"
msgstr ""
#: lib/libalpm/signing.c:544
#: lib/libalpm/signing.c:460
#, c-format
msgid "key \"%s\" could not be imported\n"
msgstr ""
#: lib/libalpm/signing.c:548
#: lib/libalpm/signing.c:466
#, c-format
msgid "key %s, \"%s\" found on keyserver, keyring is not writable\n"
msgstr ""
#: lib/libalpm/signing.c:471
#, 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:859 lib/libalpm/sync.c:1181
#, c-format
msgid "%s: missing required signature\n"
msgstr "%s: mankas bezonata subskribo\n"
#: lib/libalpm/signing.c:958
#: lib/libalpm/signing.c:874
#, c-format
msgid "%s: signature from \"%s\" is marginal trust\n"
msgstr ""
#: lib/libalpm/signing.c:966
#: lib/libalpm/signing.c:882
#, c-format
msgid "%s: signature from \"%s\" is unknown trust\n"
msgstr ""
#: lib/libalpm/signing.c:973
#: lib/libalpm/signing.c:889
#, c-format
msgid "%s: signature from \"%s\" should never be trusted\n"
msgstr ""
#: lib/libalpm/signing.c:985
#: lib/libalpm/signing.c:901
#, c-format
msgid "%s: key \"%s\" is unknown\n"
msgstr ""
#: lib/libalpm/signing.c:994
#: lib/libalpm/signing.c:910
#, c-format
msgid "%s: key \"%s\" is disabled\n"
msgstr ""
#: lib/libalpm/signing.c:998
#: lib/libalpm/signing.c:914
#, c-format
msgid "%s: signature from \"%s\" is expired\n"
msgstr ""
#: lib/libalpm/signing.c:1002
#: lib/libalpm/signing.c:918
#, 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:995 lib/libalpm/signing.c:1063
#: lib/libalpm/signing.c:1142
#, 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:1095 lib/libalpm/signing.c:1128
#: lib/libalpm/signing.c:1136
#, c-format
msgid "%s: unsupported signature format\n"
msgstr ""
#: lib/libalpm/sync.c:99
#: lib/libalpm/sync.c:98
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: ignorante pakaĵan promocion (%s => %s)\n"
#: lib/libalpm/sync.c:111
#: lib/libalpm/sync.c:110
#, c-format
msgid "%s: ignoring package downgrade (%s => %s)\n"
msgstr "%s: ignorante pakaĵan malpromocion (%s => %s)\n"
#: lib/libalpm/sync.c:114
#: lib/libalpm/sync.c:113
#, c-format
msgid "%s: downgrading from version %s to version %s\n"
msgstr "%s: malpromociante de versio %s al versio %s\n"
#: lib/libalpm/sync.c:120
#: lib/libalpm/sync.c:119
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr "%s: la loka (%s) estas pli nova ol %s (%s)\n"
#: lib/libalpm/sync.c:161
#: lib/libalpm/sync.c:160
#, c-format
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
msgstr "ignorante pakaĵan anstataŭon (%s-%s => %s-%s)\n"
#: lib/libalpm/sync.c:177
#: lib/libalpm/sync.c:176
#, c-format
msgid "cannot replace %s by %s\n"
msgstr "ne eblas anstataŭi %s por %s\n"
#: lib/libalpm/sync.c:535 lib/libalpm/sync.c:605
#: lib/libalpm/sync.c:538 lib/libalpm/sync.c:608
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr "nesolveblaj pakaĵaj konfliktoj detektitaj\n"
#: lib/libalpm/sync.c:555
#: lib/libalpm/sync.c:558
#, c-format
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgstr "forigante '%s' el cela listo ĉar ĝi konfliktas kun '%s'\n"
#: lib/libalpm/sync.c:849
#: lib/libalpm/sync.c:1019
#, c-format
msgid "failed to retrieve some files\n"
msgstr "malsukcesis ricevi kelkajn dosierojn\n"
#: lib/libalpm/sync.c:1036
#, c-format
msgid "failed to read file %s: %s\n"
msgstr ""
#: lib/libalpm/sync.c:1223
#: lib/libalpm/sync.c:1384
#, c-format
msgid "not enough free disk space\n"
msgstr "ne estas sufiĉe granda malokupata diskspaco\n"
#: lib/libalpm/sync.c:1245
#: lib/libalpm/sync.c:1406
#, c-format
msgid "could not commit removal transaction\n"
msgstr ""
"malsukcesis enmeti forigan transakcion\n"
"\n"
#: lib/libalpm/sync.c:1253
#: lib/libalpm/sync.c:1414
#, c-format
msgid "could not commit transaction\n"
msgstr "ne eblis enmeti transakcion\n"

View File

@@ -11,20 +11,19 @@
# Leonel <leonelmalon@gmail.com>, 2013
# Leonel <leonelmalon@gmail.com>, 2013
# neiko <neikokz+tsfx@gmail.com>, 2011
# prflr88 <prflr88@gmail.com>, 2017
# prflr88 <prflr88@gmail.com>, 2013-2016
# prflr88 <prflr88@gmail.com>, 2017
# Pedro Román <roizheim@gmail.com>, 2013-2014,2016-2019
# picodotdev <pico.dev@gmail.com>, 2016,2019
# prflr88 <prflr88@gmail.com>, 2017
# Pablo Lezaeta Reyes [pˈaβ̞lo lˌe̞θaˈeta rˈejɛ] <prflr88@gmail.com>, 2017
# Pablo Lezaeta Reyes [pˈaβ̞lo lˌe̞θaˈeta rˈejɛ] <prflr88@gmail.com>, 2013-2016
# Pablo Lezaeta Reyes [pˈaβ̞lo lˌe̞θaˈeta rˈejɛ] <prflr88@gmail.com>, 2017
# Pedro Román <roizheim@gmail.com>, 2013-2014,2016-2018
# picodotdev <pico.dev@gmail.com>, 2016
# Swyter <Swyterzone@gmail.com>, 2015,2017-2018
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 09:15+0000\n"
"Last-Translator: picodotdev <pico.dev@gmail.com>\n"
"POT-Creation-Date: 2018-12-12 11:09+1000\n"
"PO-Revision-Date: 2018-06-22 07:25+0000\n"
"Last-Translator: Pedro Román <roizheim@gmail.com>\n"
"Language-Team: Spanish (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/es/)\n"
"Language: es\n"
@@ -33,55 +32,55 @@ 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:86
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s está actualizado -- omitiéndolo\n"
#: lib/libalpm/add.c:95
#: lib/libalpm/add.c:90
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s está actualizado -- reinstalándolo\n"
#: lib/libalpm/add.c:100
#: lib/libalpm/add.c:95
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "revertiendo el paquete %s a una versión anterior (%s => %s)\n"
#: lib/libalpm/add.c:129
#: lib/libalpm/add.c:124
#, c-format
msgid "cannot allocate disk archive object"
msgstr ""
"memoria insuficiente en el sistema para lograr los objetivos del archivo"
#: lib/libalpm/add.c:143 lib/libalpm/util.c:382
#: lib/libalpm/add.c:138 lib/libalpm/util.c:382
#, c-format
msgid "warning given when extracting %s (%s)\n"
msgstr "se han advertido errores mientras se extraía %s (%s)\n"
#: lib/libalpm/add.c:146 lib/libalpm/util.c:385
#: lib/libalpm/add.c:141 lib/libalpm/util.c:385
#, c-format
msgid "could not extract %s (%s)\n"
msgstr "no se pudo extraer %s (%s)\n"
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:574 lib/libalpm/remove.c:542
#: lib/libalpm/add.c:154 lib/libalpm/dload.c:569 lib/libalpm/remove.c:541
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "no se pudo renombrar %s a %s (%s)\n"
#: lib/libalpm/add.c:210
#: lib/libalpm/add.c:205
#, c-format
msgid "file not found in file list for package %s. skipping extraction of %s\n"
msgstr ""
"el archivo no figura en la lista de archivos del paquete %s. Omitiendo la "
"extracción de %s\n"
#: lib/libalpm/add.c:219
#: lib/libalpm/add.c:214
#, c-format
msgid "unable to extract %s%s: path too long"
msgstr "no se pudo extraer %s%s: ruta demasiado larga"
#: lib/libalpm/add.c:261
#: lib/libalpm/add.c:256
#, c-format
msgid ""
"directory permissions differ on %s\n"
@@ -90,7 +89,7 @@ msgstr ""
"los permisos del directorio difieren respecto de %s\n"
"sistema de archivos: %o paquete: %o\n"
#: lib/libalpm/add.c:276
#: lib/libalpm/add.c:271
#, c-format
msgid ""
"directory ownership differs on %s\n"
@@ -99,107 +98,107 @@ msgstr ""
"la propiedad del directorio difiere respecto de %s\n"
"sistema de archivos: %u:%u paquete: %u:%u\n"
#: lib/libalpm/add.c:292
#: lib/libalpm/add.c:287
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr ""
"sobre la extracción: no se puede sobrescribir el directorio con el archivo "
"%s\n"
#: lib/libalpm/add.c:320
#: lib/libalpm/add.c:315
#, c-format
msgid "unable to extract %s.pacnew: path too long"
msgstr "no se pudo extraer %s.pacnew: ruta demasiado larga"
#: lib/libalpm/add.c:513 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#: lib/libalpm/add.c:508 lib/libalpm/util.c:334 lib/libalpm/util.c:592
#, c-format
msgid "could not get current working directory\n"
msgstr "no se pudo determinar el directorio de trabajo actual\n"
#: lib/libalpm/add.c:518 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/add.c:513 lib/libalpm/util.c:339 lib/libalpm/util.c:597
#: lib/libalpm/util.c:650
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "no se pudo cambiar el directorio a %s (%s)\n"
#: lib/libalpm/add.c:575 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#: lib/libalpm/add.c:570 lib/libalpm/util.c:403 lib/libalpm/util.c:766
#, c-format
msgid "could not restore working directory (%s)\n"
msgstr "no se pudo restaurar el directorio de trabajo (%s)\n"
#: lib/libalpm/add.c:583
#: lib/libalpm/add.c:578
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "ocurrió un error durante la actualización de %s\n"
#: lib/libalpm/add.c:589
#: lib/libalpm/add.c:584
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "ocurrió un error durante la instalación de %s\n"
#: lib/libalpm/add.c:604
#: lib/libalpm/add.c:599
#, c-format
msgid "could not update database entry %s-%s\n"
msgstr "no se pudo actualizar la entrada %s-%s en la base de datos\n"
#: lib/libalpm/add.c:615
#: lib/libalpm/add.c:610
#, c-format
msgid "could not add entry '%s' in cache\n"
msgstr "no se pudo agregar la entrada «%s» a la caché\n"
#: lib/libalpm/be_local.c:267
#: lib/libalpm/be_local.c:255
#, c-format
msgid "error while reading file %s: %s\n"
msgstr "error al leer el archivo %s: %s\n"
#: lib/libalpm/be_local.c:364
#: lib/libalpm/be_local.c:350
#, c-format
msgid "removing invalid database: %s\n"
msgstr "quitando la base de datos no válida: %s\n"
#: lib/libalpm/be_local.c:415 lib/libalpm/be_local.c:905
#: lib/libalpm/be_local.c:401 lib/libalpm/be_local.c:887
#, c-format
msgid "could not create directory %s: %s\n"
msgstr "no se pudo crear el directorio %s: %s\n"
#: lib/libalpm/be_local.c:590 lib/libalpm/be_sync.c:386
#: lib/libalpm/be_local.c:576 lib/libalpm/be_sync.c:387
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "nombre no válido para la entrada «%s» de la base de datos\n"
#: lib/libalpm/be_local.c:598
#: lib/libalpm/be_local.c:584
#, c-format
msgid "duplicated database entry '%s'\n"
msgstr "entrada «%s» duplicada en la base de datos\n"
#: lib/libalpm/be_local.c:610
#: lib/libalpm/be_local.c:596
#, c-format
msgid "corrupted database entry '%s'\n"
msgstr "la entrada «%s» de la base de datos está dañada\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/be_local.c:699 lib/libalpm/be_local.c:791
#: lib/libalpm/be_local.c:936 lib/libalpm/be_local.c:1033
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:419 lib/libalpm/util.c:253
#: lib/libalpm/util.c:269
#, c-format
msgid "could not open file %s: %s\n"
msgstr "no se pudo abrir el archivo %s: %s\n"
#: lib/libalpm/be_local.c:729 lib/libalpm/be_sync.c:650
#: lib/libalpm/be_local.c:715 lib/libalpm/be_sync.c:653
#, c-format
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr ""
"la base de datos %s es inconsistente: nombre mal emparejado en el paquete "
"%s\n"
#: lib/libalpm/be_local.c:735 lib/libalpm/be_sync.c:656
#: lib/libalpm/be_local.c:721 lib/libalpm/be_sync.c:659
#, c-format
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr ""
"la base de datos %s es inconsistente: versión mal emparejada en el paquete "
"%s\n"
#: lib/libalpm/be_local.c:776
#: lib/libalpm/be_local.c:762
#, c-format
msgid "unknown validation type for package %s: %s\n"
msgstr "tipo de validación desconocida para el paquete %s: %s\n"
@@ -240,48 +239,48 @@ msgstr "versión del paquete no válida en %s\n"
msgid "missing package metadata in %s\n"
msgstr "faltan los metadatos del paquete en %s\n"
#: lib/libalpm/be_package.c:750
#: lib/libalpm/be_package.c:748
#, c-format
msgid "failed to read signature file: %s\n"
msgstr "no se pudo leer correctamente el archivo de firmas: %s\n"
#: lib/libalpm/be_package.c:779 lib/libalpm/sync.c:953
#: lib/libalpm/be_package.c:769 lib/libalpm/sync.c:1113
#, c-format
msgid "required key missing from keyring\n"
msgstr "la clave necesaria no está presente en el depósito\n"
#: lib/libalpm/be_sync.c:61
#: lib/libalpm/be_sync.c:62
#, c-format
msgid "removing invalid file: %s\n"
msgstr "quitando archivo no válido: %s\n"
#: lib/libalpm/be_sync.c:515
#: lib/libalpm/be_sync.c:517
#, c-format
msgid "could not parse package description file '%s' from db '%s'\n"
msgstr ""
"no se pudo analizar el archivo de descripción del paquete «%s» de la base de "
"datos «%s»\n"
#: lib/libalpm/be_sync.c:522
#: lib/libalpm/be_sync.c:524
#, c-format
msgid "could not read db '%s' (%s)\n"
msgstr "no se pudo leer la base de datos '%s' (%s)\n"
#: lib/libalpm/be_sync.c:556 lib/libalpm/be_sync.c:561
#: lib/libalpm/be_sync.c:558 lib/libalpm/be_sync.c:563
#, c-format
msgid "%s database is inconsistent: filename of package %s is illegal\n"
msgstr ""
"la base de datos %s es inconsistente: el nombre del archivo del paquete %s "
"no entra dentro de lo permisible\n"
#: lib/libalpm/be_sync.c:566
#: lib/libalpm/be_sync.c:568
#, c-format
msgid "%s database is inconsistent: filename of package %s is too long\n"
msgstr ""
"la base de datos %s es inconsistente: el nombre del archivo del paquete %s "
"es demasiado largo\n"
#: lib/libalpm/be_sync.c:632
#: lib/libalpm/be_sync.c:634
#, c-format
msgid "unknown database file: %s\n"
msgstr "archivo de base de datos desconocido: %s\n"
@@ -306,12 +305,12 @@ msgstr "%s se quitará después de su dependencia %s\n"
msgid "%s will be installed before its %s dependency\n"
msgstr "%s se instalará antes de su dependencia %s\n"
#: lib/libalpm/deps.c:681 lib/libalpm/deps.c:712
#: lib/libalpm/deps.c:682 lib/libalpm/deps.c:712
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "ignorando el paquete %s-%s\n"
#: lib/libalpm/deps.c:869
#: lib/libalpm/deps.c:867
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "no se pudo resolver «%s», una dependencia de «%s»\n"
@@ -370,39 +369,39 @@ msgstr "no se pudo determinar el punto de montaje de la raíz %s\n"
msgid "Partition %s is mounted read only\n"
msgstr "La partición %s está montada solamente en modo lectura\n"
#: lib/libalpm/dload.c:161
#: lib/libalpm/dload.c:159
#, c-format
msgid "disk"
msgstr "disco"
#: lib/libalpm/dload.c:348
#: lib/libalpm/dload.c:345
#, c-format
msgid "failed to create temporary file for download\n"
msgstr "no se pudo crear el archivo temporal para la descarga\n"
#: lib/libalpm/dload.c:393
#: lib/libalpm/dload.c:390
#, c-format
msgid "url '%s' is invalid\n"
msgstr "la dirección «%s» no es válida\n"
#: lib/libalpm/dload.c:464 lib/libalpm/dload.c:485 lib/libalpm/dload.c:496
#: lib/libalpm/dload.c:460 lib/libalpm/dload.c:481 lib/libalpm/dload.c:492
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "no se pudo obtener el archivo «%s» desde %s: %s\n"
#: lib/libalpm/dload.c:477
#: lib/libalpm/dload.c:473
#, c-format
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
msgstr ""
"no se pudo obtener el archivo «%s» desde %s : el tamaño de la descarga "
"supera lo esperado\n"
#: lib/libalpm/dload.c:532
#: lib/libalpm/dload.c:528
#, c-format
msgid "%s appears to be truncated: %jd/%jd bytes\n"
msgstr "%s parece estar incompleto: %jd/%jd bytes\n"
#: lib/libalpm/dload.c:677 lib/libalpm/dload.c:706
#: lib/libalpm/dload.c:672 lib/libalpm/dload.c:701
#, c-format
msgid "failed to download %s\n"
msgstr "no se pudo descargar %s\n"
@@ -623,197 +622,202 @@ msgstr "falta la firma PGP"
msgid "invalid PGP signature"
msgstr "firma PGP no válida"
#: lib/libalpm/error.c:135 lib/libalpm/hook.c:514
#: lib/libalpm/error.c:135
#, c-format
msgid "invalid or corrupted delta"
msgstr "el archivo diferencial no es válido o está dañado"
#: lib/libalpm/error.c:137
#, c-format
msgid "delta patch failed"
msgstr "el parche del diferencial ha fallado"
#: lib/libalpm/error.c:140 lib/libalpm/hook.c:614
#, c-format
msgid "could not satisfy dependencies"
msgstr "no se pudieron satisfacer las dependencias"
#: lib/libalpm/error.c:137
#: lib/libalpm/error.c:142
#, c-format
msgid "conflicting dependencies"
msgstr "dependencias en conflicto"
#: lib/libalpm/error.c:139
#: lib/libalpm/error.c:144
#, c-format
msgid "conflicting files"
msgstr "archivos en conflicto"
#: lib/libalpm/error.c:142
#: lib/libalpm/error.c:147
#, c-format
msgid "failed to retrieve some files"
msgstr "no se pudieron descargar algunos archivos"
#: lib/libalpm/error.c:144
#: lib/libalpm/error.c:149
#, c-format
msgid "invalid regular expression"
msgstr "expresión regular no válida"
#: lib/libalpm/error.c:150
#: lib/libalpm/error.c:155
#, c-format
msgid "libarchive error"
msgstr "error de la biblioteca libarchive"
#: lib/libalpm/error.c:152
#: lib/libalpm/error.c:157
#, c-format
msgid "download library error"
msgstr "error de la biblioteca de descarga"
#: lib/libalpm/error.c:154
#: lib/libalpm/error.c:159
#, c-format
msgid "gpgme error"
msgstr "error de gpgme"
#: lib/libalpm/error.c:156
#: lib/libalpm/error.c:161
#, c-format
msgid "error invoking external downloader"
msgstr "error al invocar al gestor de descargas externo"
#: lib/libalpm/error.c:159
#, c-format
msgid "compiled without signature support"
msgstr "compilado sin soporte de firma"
#: lib/libalpm/error.c:162
#: lib/libalpm/error.c:164
#, c-format
msgid "unexpected error"
msgstr "error inesperado"
#: lib/libalpm/handle.c:153
#: lib/libalpm/handle.c:157
#, c-format
msgid "lock file missing %s\n"
msgstr "falta el archivo de bloqueo %s\n"
#: lib/libalpm/handle.c:159
#: lib/libalpm/handle.c:163
#, c-format
msgid "could not remove lock file %s\n"
msgstr "no se pudo quitar el archivo de bloqueo %s\n"
#: lib/libalpm/hook.c:95
#: lib/libalpm/hook.c:107
#, c-format
msgid "Missing trigger targets in hook: %s\n"
msgstr "Paquetes de ejecución que faltan en el «hook»: %s\n"
#: lib/libalpm/hook.c:101
#: lib/libalpm/hook.c:113
#, c-format
msgid "Missing trigger type in hook: %s\n"
msgstr "Tipo de ejecución que falta en el «hook»: %s\n"
#: lib/libalpm/hook.c:107
#: lib/libalpm/hook.c:119
#, c-format
msgid "Missing trigger operation in hook: %s\n"
msgstr "Operación de ejecución que falta en el «hook»: %s\n"
#: lib/libalpm/hook.c:134
#: lib/libalpm/hook.c:146
#, c-format
msgid "Missing Exec option in hook: %s\n"
msgstr "Falta la opción «Exec» en el «hook»: %s\n"
#: lib/libalpm/hook.c:140
#: lib/libalpm/hook.c:152
#, c-format
msgid "Missing When option in hook: %s\n"
msgstr "Falta la opción «When» en el «hook»: %s\n"
#: lib/libalpm/hook.c:143
#: lib/libalpm/hook.c:155
#, c-format
msgid "AbortOnFail set for PostTransaction hook: %s\n"
msgstr "«AbortOnFail» establecido para el «hook» de posinstalación: %s\n"
#: lib/libalpm/hook.c:160
#: lib/libalpm/hook.c:273
#, c-format
msgid "error while reading hook %s: %s\n"
msgstr "hubo un error al leer el «hook» %s: %s\n"
#: lib/libalpm/hook.c:162 lib/libalpm/hook.c:206 lib/libalpm/hook.c:248
#: lib/libalpm/hook.c:275 lib/libalpm/hook.c:315 lib/libalpm/hook.c:357
#, c-format
msgid "hook %s line %d: invalid option %s\n"
msgstr "«hook» %s línea %d: la opción %s no es correcta\n"
#: lib/libalpm/hook.c:172
#: lib/libalpm/hook.c:285
#, c-format
msgid "hook %s line %d: invalid section %s\n"
msgstr "«hook» %s línea %d: la sección %s no es correcta\n"
#: lib/libalpm/hook.c:184 lib/libalpm/hook.c:199 lib/libalpm/hook.c:218
#: lib/libalpm/hook.c:241
#: lib/libalpm/hook.c:297 lib/libalpm/hook.c:308 lib/libalpm/hook.c:327
#: lib/libalpm/hook.c:350
#, c-format
msgid "hook %s line %d: invalid value %s\n"
msgstr "«hook» %s línea %d: el valor %s no es correcto\n"
#: lib/libalpm/hook.c:188 lib/libalpm/hook.c:211 lib/libalpm/hook.c:222
#: lib/libalpm/hook.c:236
#: lib/libalpm/hook.c:301 lib/libalpm/hook.c:320 lib/libalpm/hook.c:331
#: lib/libalpm/hook.c:345
#, c-format
msgid "hook %s line %d: overwriting previous definition of %s\n"
msgstr "«hook» %s línea %d: sobrescribiendo la definición de %s\n"
#: lib/libalpm/hook.c:243
#: lib/libalpm/hook.c:352
#, c-format
msgid "hook %s line %d: unable to set option (%s)\n"
msgstr "«hook» %s línea %d: no se puede especificar la opción (%s)\n"
#: lib/libalpm/hook.c:513
#: lib/libalpm/hook.c:613
#, c-format
msgid "unable to run hook %s: %s\n"
msgstr "no se pudo ejecutar el «hook» %s: %s\n"
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:386
#: lib/libalpm/hook.c:648 lib/libalpm/hook.c:660 lib/libalpm/remove.c:385
#, c-format
msgid "could not open directory: %s: %s\n"
msgstr "no se pudo abrir el directorio: %s: %s\n"
#: lib/libalpm/hook.c:575
#: lib/libalpm/hook.c:676
#, c-format
msgid "could not open file: %s%s: %s\n"
msgstr "no se pudo abrir el archivo: %s%s: %s\n"
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:259
#: lib/libalpm/hook.c:696 lib/libalpm/util.c:259
#, c-format
msgid "could not stat file %s: %s\n"
msgstr "no se pudo recuperar la información del archivo %s: %s\n"
#: lib/libalpm/hook.c:621
#: lib/libalpm/hook.c:722
#, c-format
msgid "could not read directory: %s: %s\n"
msgstr "no se pudo crear la carpeta: %s: %s\n"
#: lib/libalpm/package.c:578
#: lib/libalpm/package.c:586
#, c-format
msgid "could not fully load metadata for package %s-%s\n"
msgstr ""
"no se pudieron cargar completamente los metadatos para el paquete %s-%s\n"
#: lib/libalpm/remove.c:119
#: lib/libalpm/remove.c:118
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "no se pudo encontrar %s en la base de datos -- omitiéndolo\n"
#: lib/libalpm/remove.c:154
#: lib/libalpm/remove.c:153
#, c-format
msgid "removing %s from target list\n"
msgstr "quitando %s de la lista de paquetes\n"
#: lib/libalpm/remove.c:346
#: lib/libalpm/remove.c:345
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "no se pudo quitar el archivo «%s»: %s\n"
#: lib/libalpm/remove.c:411 lib/libalpm/remove.c:420
#: lib/libalpm/remove.c:410 lib/libalpm/remove.c:419
#, c-format
msgid "could not backup %s due to PATH_MAX overflow\n"
msgstr ""
"no se ha podido respaldar %s debido a que la ruta supera el tamaño de "
"PATH_MAX\n"
#: lib/libalpm/remove.c:562
#: lib/libalpm/remove.c:561
#, c-format
msgid "cannot remove %s (%s)\n"
msgstr "no se pudo quitar %s (%s)\n"
#: lib/libalpm/remove.c:735
#: lib/libalpm/remove.c:734
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "no se pudo quitar la entrada %s-%s de la base de datos\n"
#: lib/libalpm/remove.c:740
#: lib/libalpm/remove.c:739
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "no se pudo quitar la entrada «%s» de la caché\n"
@@ -825,158 +829,145 @@ msgstr ""
"No se ha encontrado el depósito público de claves; ¿ya se ha ejecutado "
"«%s»?\n"
#: lib/libalpm/signing.c:207 lib/libalpm/signing.c:784
#: lib/libalpm/signing.c:207 lib/libalpm/signing.c:705
#, c-format
msgid "GPGME error: %s\n"
msgstr "Error de GPGME: %s\n"
#: lib/libalpm/signing.c:284
#, c-format
msgid "looking up key %s using WKD\n"
msgstr "buscando clave %s usando WKD\n"
#: lib/libalpm/signing.c:293
#, c-format
msgid "gpg error: %s\n"
msgstr "error gpg: %s\n"
#: lib/libalpm/signing.c:441 lib/libalpm/signing.c:515
#: lib/libalpm/signing.c:402
#, c-format
msgid "keyring is not writable\n"
msgstr "no se puede escribir en el depósito de claves\n"
#: lib/libalpm/signing.c:539
#, c-format
msgid "key \"%s\" on keyserver\n"
msgstr "clave «%s» en servidor de claves\n"
#: lib/libalpm/signing.c:544
#: lib/libalpm/signing.c:460
#, c-format
msgid "key \"%s\" could not be imported\n"
msgstr "no se pudo importar la clave «%s»\n"
#: lib/libalpm/signing.c:548
#: lib/libalpm/signing.c:466
#, c-format
msgid "key %s, \"%s\" found on keyserver, keyring is not writable\n"
msgstr ""
"se ha encontrado la clave %s, «%s» en el servidor de claves, pero no se "
"puede añadir al llavero porque está protegido contra escritura\n"
#: lib/libalpm/signing.c:471
#, c-format
msgid "key \"%s\" could not be looked up remotely\n"
msgstr "no se pudo buscar la clave «%s» de forma remota\n"
#: lib/libalpm/signing.c:943 lib/libalpm/sync.c:1022
#: lib/libalpm/signing.c:859 lib/libalpm/sync.c:1181
#, c-format
msgid "%s: missing required signature\n"
msgstr "%s: falta la firma exigida\n"
#: lib/libalpm/signing.c:958
#: lib/libalpm/signing.c:874
#, c-format
msgid "%s: signature from \"%s\" is marginal trust\n"
msgstr "%s: la firma de «%s» es de confianza mínima\n"
#: lib/libalpm/signing.c:966
#: lib/libalpm/signing.c:882
#, c-format
msgid "%s: signature from \"%s\" is unknown trust\n"
msgstr "%s: se desconoce el nivel de confianza de la firma de «%s»\n"
#: lib/libalpm/signing.c:973
#: lib/libalpm/signing.c:889
#, c-format
msgid "%s: signature from \"%s\" should never be trusted\n"
msgstr ""
"%s: la firma de «%s» no es de confianza y no se debería confiar en ella bajo "
"ningún concepto\n"
#: lib/libalpm/signing.c:985
#: lib/libalpm/signing.c:901
#, c-format
msgid "%s: key \"%s\" is unknown\n"
msgstr "%s: clave «%s» desconocida\n"
#: lib/libalpm/signing.c:994
#: lib/libalpm/signing.c:910
#, c-format
msgid "%s: key \"%s\" is disabled\n"
msgstr "%s: la clave «%s» está desactivada\n"
#: lib/libalpm/signing.c:998
#: lib/libalpm/signing.c:914
#, c-format
msgid "%s: signature from \"%s\" is expired\n"
msgstr "%s: la firma de «%s» ha expirado\n"
#: lib/libalpm/signing.c:1002
#: lib/libalpm/signing.c:918
#, c-format
msgid "%s: signature from \"%s\" is invalid\n"
msgstr "%s: la firma de «%s» no es válida\n"
#: lib/libalpm/signing.c:1079 lib/libalpm/signing.c:1147
#: lib/libalpm/signing.c:1226
#: lib/libalpm/signing.c:995 lib/libalpm/signing.c:1063
#: lib/libalpm/signing.c:1142
#, c-format
msgid "%s: signature format error\n"
msgstr "%s: hubo un error con el formato de la firma\n"
#: lib/libalpm/signing.c:1179 lib/libalpm/signing.c:1212
#: lib/libalpm/signing.c:1220
#: lib/libalpm/signing.c:1095 lib/libalpm/signing.c:1128
#: lib/libalpm/signing.c:1136
#, c-format
msgid "%s: unsupported signature format\n"
msgstr "%s: formato de firma desconocido\n"
#: lib/libalpm/sync.c:99
#: lib/libalpm/sync.c:98
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: ignorando la actualización del paquete (%s => %s)\n"
#: lib/libalpm/sync.c:111
#: lib/libalpm/sync.c:110
#, c-format
msgid "%s: ignoring package downgrade (%s => %s)\n"
msgstr "%s: ignorando la desactualización del paquete (%s => %s)\n"
#: lib/libalpm/sync.c:114
#: lib/libalpm/sync.c:113
#, c-format
msgid "%s: downgrading from version %s to version %s\n"
msgstr "%s: desactualizando de la versión %s a la versión %s\n"
#: lib/libalpm/sync.c:120
#: lib/libalpm/sync.c:119
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr "%s: la versión instalada (%s) es más nueva que %s (%s)\n"
#: lib/libalpm/sync.c:161
#: lib/libalpm/sync.c:160
#, c-format
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
msgstr "ignorando el remplazo del paquete (%s-%s => %s-%s)\n"
#: lib/libalpm/sync.c:177
#: lib/libalpm/sync.c:176
#, c-format
msgid "cannot replace %s by %s\n"
msgstr "no se pudo remplazar el archivo %s por %s\n"
#: lib/libalpm/sync.c:535 lib/libalpm/sync.c:605
#: lib/libalpm/sync.c:538 lib/libalpm/sync.c:608
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr "se han detectado paquetes con conflictos sin resolver\n"
#: lib/libalpm/sync.c:555
#: lib/libalpm/sync.c:558
#, c-format
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgstr ""
"quitando «%s» de la lista de paquetes debido a que tiene conflictos con "
"«%s»\n"
#: lib/libalpm/sync.c:849
#: lib/libalpm/sync.c:1019
#, c-format
msgid "failed to retrieve some files\n"
msgstr "no se pudieron recibir algunos archivos\n"
#: lib/libalpm/sync.c:1036
#, c-format
msgid "failed to read file %s: %s\n"
msgstr "no se pudo leer el archivo %s: %s\n"
#: lib/libalpm/sync.c:1223
#: lib/libalpm/sync.c:1384
#, c-format
msgid "not enough free disk space\n"
msgstr "no hay suficiente espacio libre en el disco\n"
#: lib/libalpm/sync.c:1245
#: lib/libalpm/sync.c:1406
#, c-format
msgid "could not commit removal transaction\n"
msgstr "no se pudo realizar la operación de eliminación\n"
#: lib/libalpm/sync.c:1253
#: lib/libalpm/sync.c:1414
#, c-format
msgid "could not commit transaction\n"
msgstr "no se pudo realizar la operación\n"

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