forked from mirrors/pacman
Compare commits
26 Commits
allan/priv
...
v6.0.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c2d4568d35 | ||
|
|
8c61170ca4 | ||
|
|
69eae86445 | ||
|
|
5c10680f6f | ||
|
|
1daabff0fb | ||
|
|
958475a7cf | ||
|
|
4b21c60e50 | ||
|
|
d55924dbd7 | ||
|
|
ce40629b7d | ||
|
|
a1837fa585 | ||
|
|
3bad984871 | ||
|
|
b187daefdf | ||
|
|
2c83cd08a4 | ||
|
|
c974d6d245 | ||
|
|
51354b7da9 | ||
|
|
c4a21f333a | ||
|
|
23e337ba5a | ||
|
|
6c880acb5c | ||
|
|
95ef989978 | ||
|
|
ff91a9d449 | ||
|
|
0352053e30 | ||
|
|
53289acdc9 | ||
|
|
e56c7a3f41 | ||
|
|
ec0bf17ced | ||
|
|
77420fe500 | ||
|
|
6b1a836544 |
@@ -16,22 +16,18 @@ default:
|
||||
python
|
||||
fakeroot fakechroot
|
||||
meson
|
||||
artifacts:
|
||||
when: always
|
||||
paths:
|
||||
- build/meson-logs/meson-log.txt
|
||||
|
||||
arch:
|
||||
extends: .arch-test
|
||||
script:
|
||||
- meson setup build
|
||||
- meson build
|
||||
- ninja -C build
|
||||
- fakechroot meson test -C build
|
||||
|
||||
arch-debug:
|
||||
extends: .arch-test
|
||||
script:
|
||||
- meson setup --buildtype=debug --werror build
|
||||
- meson --buildtype=debug build
|
||||
- ninja -C build
|
||||
- fakechroot meson test -C build
|
||||
|
||||
@@ -39,51 +35,51 @@ arch-docs:
|
||||
extends: .arch-test
|
||||
script:
|
||||
- pacman -Syu --needed --noconfirm asciidoc
|
||||
- meson setup -Ddoc=enabled build
|
||||
- meson -Ddoc=enabled build
|
||||
- ninja -C build
|
||||
|
||||
arch-clang:
|
||||
extends: .arch-test
|
||||
script:
|
||||
- pacman -Syu --needed --noconfirm clang
|
||||
- CC=clang meson setup build
|
||||
- CC=clang meson build
|
||||
- ninja -C build
|
||||
- fakechroot meson test -C build
|
||||
|
||||
#arch-valgrind:
|
||||
# extends: .arch-test
|
||||
# script:
|
||||
# - pacman -Syu --needed --noconfirm valgrind
|
||||
# - pacman -U --noconfirm https://geo.mirror.pkgbuild.com/core-debug/os/x86_64/glibc-debug-$(pacman -S --print-format %v glibc)-x86_64.pkg.tar.zst
|
||||
# - meson setup build
|
||||
# - ninja -C build
|
||||
# - PACTEST_VALGRIND=1 fakechroot meson test -C build
|
||||
arch-valgrind:
|
||||
extends: .arch-test
|
||||
script:
|
||||
- pacman -Syu --needed --noconfirm valgrind
|
||||
- pacman -U --noconfirm https://geo.mirror.pkgbuild.com/core-debug/os/x86_64/glibc-debug-$(pacman -S --print-format %v glibc)-x86_64.pkg.tar.zst
|
||||
- meson build
|
||||
- ninja -C build
|
||||
- PACTEST_VALGRIND=1 fakechroot meson test -C build
|
||||
|
||||
arch-nettle:
|
||||
extends: .arch-test
|
||||
script:
|
||||
- meson setup -Dcrypto=nettle --buildtype=debug build
|
||||
- meson -Dcrypto=nettle --buildtype=debug build
|
||||
- ninja -C build
|
||||
- fakechroot meson test -C build
|
||||
|
||||
arch-no-gpg:
|
||||
extends: .arch-test
|
||||
script:
|
||||
- meson setup -Dgpgme=disabled --buildtype=debug build
|
||||
- meson -Dgpgme=disabled --buildtype=debug build
|
||||
- ninja -C build
|
||||
- fakechroot meson test -C build
|
||||
|
||||
arch-no-curl:
|
||||
extends: .arch-test
|
||||
script:
|
||||
- meson setup -Dcurl=disabled --buildtype=debug build
|
||||
- meson -Dcurl=disabled --buildtype=debug build
|
||||
- ninja -C build
|
||||
- fakechroot meson test -C build
|
||||
|
||||
arch-no-nls:
|
||||
extends: .arch-test
|
||||
script:
|
||||
- meson setup -Di18n=false --buildtype=debug build
|
||||
- meson -Di18n=false --buildtype=debug build
|
||||
- ninja -C build
|
||||
- fakechroot meson test -C build
|
||||
|
||||
@@ -98,7 +94,7 @@ debian:
|
||||
gettext python3 python3-setuptools dash gawk ca-certificates
|
||||
fakeroot fakechroot
|
||||
script:
|
||||
- meson setup --buildtype=debug build
|
||||
- meson --buildtype=debug build
|
||||
- ninja -C build
|
||||
- fakechroot meson test -C build
|
||||
|
||||
@@ -114,6 +110,6 @@ fedora:
|
||||
fakeroot fakechroot
|
||||
perl-Module-Load-Conditional
|
||||
script:
|
||||
- meson setup --buildtype=debug build
|
||||
- meson --buildtype=debug build
|
||||
- ninja -C build
|
||||
- fakechroot meson test -C build
|
||||
|
||||
14
NEWS
14
NEWS
@@ -1,5 +1,19 @@
|
||||
VERSION DESCRIPTION
|
||||
-----------------------------------------------------------------------------
|
||||
6.0.2 - Fix potential content injection during PGP import (FS#73703)
|
||||
- Fix potential segfault during PGP key import (FS#73534)
|
||||
- Fix potential information leak while parsing badly formed
|
||||
download header (FS#73704)
|
||||
- Translation fixes to avoid segfault (FS#75680)
|
||||
- makepkg:
|
||||
- Fix compatability with bash 5.2 (FS#76035)
|
||||
- Fix behaviour while attempting stripping of readonly files
|
||||
(FS#74486)
|
||||
- Use debugedit instead of awk for identifying source files
|
||||
for debug packages
|
||||
- Use -ffile-prefix-map instead of -fdebug-prefix-map to
|
||||
capture all source files in debug packages
|
||||
- Add -flto to LDFLAGS for clang
|
||||
6.0.1 - Prevent download error pages ending up in package files
|
||||
(FS#71083)
|
||||
- Give -U downloads a random .part file name if needed
|
||||
|
||||
2
RELEASE
2
RELEASE
@@ -14,7 +14,7 @@ The following checklist should be used for making a pacman release.
|
||||
- Update pacman website
|
||||
|
||||
Transifex updates are handled using the transifex client. The basic process is:
|
||||
- Pull updates from transifex ("tx pull -f --minimum-perc 75")
|
||||
- Pull updates from transifex ("tx pull -a -f --minimum-perc 75")
|
||||
- Update po files ("./build-aux/update-po")
|
||||
- Fix all translation errors found
|
||||
- Add any new locales to the relevant LINGUAS file
|
||||
|
||||
@@ -11,7 +11,6 @@ sed \
|
||||
-e "s|@localstatedir[@]|@localstatedir@|g" \
|
||||
-e "s|@libmakepkgdir[@]|@LIBMAKEPKGDIR@|g" \
|
||||
-e "s|@pkgdatadir[@]|@PKGDATADIR@|g" \
|
||||
-e "s|@keyringdir[@]|@KEYRINGDIR@|g" \
|
||||
-e "s|@prefix[@]|@PREFIX@|g" \
|
||||
-e "1s|#!/bin/bash|#!@BASH@|g" \
|
||||
-e "s|@PACKAGE_VERSION[@]|@PACKAGE_VERSION@|g" \
|
||||
|
||||
@@ -3,4 +3,4 @@
|
||||
# This script serves as a trampoline for running scripts which depend on
|
||||
# libmakepkg with the libmakepkg within the build tree.
|
||||
|
||||
MAKEPKG_LIBRARY=@BUILDDIR@/libmakepkg exec @BASH@ -$- @REAL_PROGPATH@ "$@"
|
||||
LIBRARY=@BUILDDIR@/libmakepkg exec @BASH@ -$- @REAL_PROGPATH@ "$@"
|
||||
|
||||
@@ -18,7 +18,7 @@ value.
|
||||
Description
|
||||
-----------
|
||||
|
||||
This is a description of the contents of version '2' of the
|
||||
This is a description of the contents of version '1' of the
|
||||
BUILDINFO file format.
|
||||
|
||||
*format*::
|
||||
@@ -53,15 +53,6 @@ BUILDINFO file format.
|
||||
*startdir*::
|
||||
The directory from which makepkg was executed.
|
||||
|
||||
*buildtool*::
|
||||
The name of the tool ecosystem used to set up the build environment. Used
|
||||
for defining a spec for reproducible builds, e.g. the source of the
|
||||
linkman:makepkg.conf[5] used.
|
||||
|
||||
*buildtoolver*::
|
||||
The full version of the 'buildtool', for example:
|
||||
"$pkgver-$pkgrel-$pkgarch".
|
||||
|
||||
*buildenv (array)*::
|
||||
The build environment specified in makepkg.conf.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Doxyfile 1.9.3
|
||||
# Doxyfile 1.8.20
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Project related configuration options
|
||||
@@ -12,6 +12,7 @@ OUTPUT_DIRECTORY = @OUTPUT_DIRECTORY@
|
||||
CREATE_SUBDIRS = NO
|
||||
ALLOW_UNICODE_NAMES = NO
|
||||
OUTPUT_LANGUAGE = English
|
||||
OUTPUT_TEXT_DIRECTION = None
|
||||
BRIEF_MEMBER_DESC = YES
|
||||
REPEAT_BRIEF = YES
|
||||
ABBREVIATE_BRIEF = "The $name class" \
|
||||
@@ -72,7 +73,6 @@ EXTRACT_STATIC = NO
|
||||
EXTRACT_LOCAL_CLASSES = YES
|
||||
EXTRACT_LOCAL_METHODS = NO
|
||||
EXTRACT_ANON_NSPACES = NO
|
||||
RESOLVE_UNNAMED_PARAMS = YES
|
||||
HIDE_UNDOC_MEMBERS = NO
|
||||
HIDE_UNDOC_CLASSES = NO
|
||||
HIDE_FRIEND_COMPOUNDS = NO
|
||||
@@ -81,7 +81,6 @@ INTERNAL_DOCS = NO
|
||||
CASE_SENSE_NAMES = YES
|
||||
HIDE_SCOPE_NAMES = NO
|
||||
HIDE_COMPOUND_REFERENCE= NO
|
||||
SHOW_HEADERFILE = YES
|
||||
SHOW_INCLUDE_FILES = YES
|
||||
SHOW_GROUPED_MEMB_INC = NO
|
||||
FORCE_LOCAL_INCLUDES = NO
|
||||
@@ -111,7 +110,6 @@ QUIET = NO
|
||||
WARNINGS = YES
|
||||
WARN_IF_UNDOCUMENTED = YES
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
WARN_IF_INCOMPLETE_DOC = YES
|
||||
WARN_NO_PARAMDOC = NO
|
||||
WARN_AS_ERROR = NO
|
||||
WARN_FORMAT = "$file:$line: $text"
|
||||
@@ -154,6 +152,7 @@ VERBATIM_HEADERS = YES
|
||||
# Configuration options related to the alphabetical class index
|
||||
#---------------------------------------------------------------------------
|
||||
ALPHABETICAL_INDEX = NO
|
||||
COLS_IN_ALPHA_INDEX = 5
|
||||
IGNORE_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the HTML output
|
||||
@@ -169,12 +168,12 @@ HTML_EXTRA_FILES =
|
||||
HTML_COLORSTYLE_HUE = 220
|
||||
HTML_COLORSTYLE_SAT = 100
|
||||
HTML_COLORSTYLE_GAMMA = 80
|
||||
HTML_TIMESTAMP = YES
|
||||
HTML_DYNAMIC_MENUS = YES
|
||||
HTML_DYNAMIC_SECTIONS = NO
|
||||
HTML_INDEX_NUM_ENTRIES = 100
|
||||
GENERATE_DOCSET = NO
|
||||
DOCSET_FEEDNAME = "Doxygen generated docs"
|
||||
DOCSET_FEEDURL =
|
||||
DOCSET_BUNDLE_ID = org.doxygen.Project
|
||||
DOCSET_PUBLISHER_ID = org.doxygen.Publisher
|
||||
DOCSET_PUBLISHER_NAME = Publisher
|
||||
@@ -197,16 +196,14 @@ GENERATE_ECLIPSEHELP = NO
|
||||
ECLIPSE_DOC_ID = org.doxygen.Project
|
||||
DISABLE_INDEX = NO
|
||||
GENERATE_TREEVIEW = NO
|
||||
FULL_SIDEBAR = NO
|
||||
ENUM_VALUES_PER_LINE = 4
|
||||
TREEVIEW_WIDTH = 250
|
||||
EXT_LINKS_IN_WINDOW = NO
|
||||
OBFUSCATE_EMAILS = YES
|
||||
HTML_FORMULA_FORMAT = png
|
||||
FORMULA_FONTSIZE = 10
|
||||
FORMULA_TRANSPARENT = YES
|
||||
FORMULA_MACROFILE =
|
||||
USE_MATHJAX = NO
|
||||
MATHJAX_VERSION = MathJax_2
|
||||
MATHJAX_FORMAT = HTML-CSS
|
||||
MATHJAX_RELPATH = http://www.mathjax.org/mathjax
|
||||
MATHJAX_EXTENSIONS =
|
||||
@@ -237,7 +234,9 @@ PDF_HYPERLINKS = NO
|
||||
USE_PDFLATEX = NO
|
||||
LATEX_BATCHMODE = NO
|
||||
LATEX_HIDE_INDICES = NO
|
||||
LATEX_SOURCE_CODE = NO
|
||||
LATEX_BIB_STYLE = plain
|
||||
LATEX_TIMESTAMP = NO
|
||||
LATEX_EMOJI_DIRECTORY =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the RTF output
|
||||
@@ -248,6 +247,7 @@ COMPACT_RTF = NO
|
||||
RTF_HYPERLINKS = NO
|
||||
RTF_STYLESHEET_FILE =
|
||||
RTF_EXTENSIONS_FILE =
|
||||
RTF_SOURCE_CODE = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the man page output
|
||||
#---------------------------------------------------------------------------
|
||||
@@ -268,9 +268,7 @@ XML_NS_MEMB_FILE_SCOPE = NO
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_DOCBOOK = NO
|
||||
DOCBOOK_OUTPUT = docbook
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options for the AutoGen Definitions output
|
||||
#---------------------------------------------------------------------------
|
||||
DOCBOOK_PROGRAMLISTING = NO
|
||||
GENERATE_AUTOGEN_DEF = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the Perl module output
|
||||
@@ -306,18 +304,19 @@ EXTERNAL_PAGES = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the dot tool
|
||||
#---------------------------------------------------------------------------
|
||||
CLASS_DIAGRAMS = NO
|
||||
DIA_PATH =
|
||||
HIDE_UNDOC_RELATIONS = YES
|
||||
HAVE_DOT = YES
|
||||
DOT_NUM_THREADS = 0
|
||||
DOT_FONTNAME = Helvetica
|
||||
DOT_FONTSIZE = 10
|
||||
DOT_FONTPATH =
|
||||
CLASS_GRAPH = YES
|
||||
COLLABORATION_GRAPH = YES
|
||||
GROUP_GRAPHS = YES
|
||||
UML_LOOK = NO
|
||||
UML_LIMIT_NUM_FIELDS = 10
|
||||
DOT_UML_DETAILS = NO
|
||||
DOT_WRAP_THRESHOLD = 17
|
||||
TEMPLATE_RELATIONS = NO
|
||||
INCLUDE_GRAPH = YES
|
||||
INCLUDED_BY_GRAPH = YES
|
||||
@@ -325,7 +324,6 @@ CALL_GRAPH = NO
|
||||
CALLER_GRAPH = NO
|
||||
GRAPHICAL_HIERARCHY = YES
|
||||
DIRECTORY_GRAPH = YES
|
||||
DIR_GRAPH_MAX_DEPTH = 1
|
||||
DOT_IMAGE_FORMAT = png
|
||||
INTERACTIVE_SVG = NO
|
||||
DOT_PATH =
|
||||
@@ -337,6 +335,7 @@ PLANTUML_CFG_FILE =
|
||||
PLANTUML_INCLUDE_PATH =
|
||||
DOT_GRAPH_MAX_NODES = 50
|
||||
MAX_DOT_GRAPH_DEPTH = 3
|
||||
DOT_TRANSPARENT = NO
|
||||
DOT_MULTI_TARGETS = NO
|
||||
GENERATE_LEGEND = YES
|
||||
DOT_CLEANUP = YES
|
||||
|
||||
@@ -12,8 +12,8 @@ depends=('glibc')
|
||||
makedepends=('ed')
|
||||
optdepends=('ed: for "patch -e" functionality')
|
||||
source=("ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz"{,.sig})
|
||||
sha256sums=('9124ba46db0abd873d0995c2ca880e81252676bb6c03e0a37dfc5f608a9b0ceb'
|
||||
'SKIP')
|
||||
md5sums=('e9ae5393426d3ad783a300a338c09b72'
|
||||
'SKIP')
|
||||
|
||||
build() {
|
||||
cd "$srcdir/$pkgname-$pkgver"
|
||||
|
||||
@@ -3,7 +3,7 @@ PKGBUILD(5)
|
||||
|
||||
Name
|
||||
----
|
||||
PKGBUILD - Package build description file
|
||||
PKGBUILD - Arch Linux package build description file
|
||||
|
||||
|
||||
Synopsis
|
||||
@@ -84,7 +84,14 @@ systems (see below).
|
||||
|
||||
*license (array)*::
|
||||
This field specifies the license(s) that apply to the package.
|
||||
If multiple licenses are applicable, list all of them:
|
||||
Commonly used licenses can be found in '/usr/share/licenses/common'. If you
|
||||
see the package's license there, simply reference it in the license
|
||||
field (e.g., `license=('GPL')`). If the package provides a license not
|
||||
available in '/usr/share/licenses/common', then you should include it
|
||||
in the package itself and set `license=('custom')` or
|
||||
`license=('custom:LicenseName')`. The license should be placed in
|
||||
'$pkgdir/usr/share/licenses/$pkgname/' when building the package. If
|
||||
multiple licenses are applicable, list all of them:
|
||||
`license=('GPL' 'FDL')`.
|
||||
|
||||
*install*::
|
||||
@@ -180,6 +187,11 @@ contain whitespace characters.
|
||||
than or equal to), `<=` (less than or equal to), `=` (equal to), `>`
|
||||
(greater than), or `<` (less than).
|
||||
+
|
||||
If the dependency name appears to be a library (ends with .so), makepkg will
|
||||
try to find a binary that depends on the library in the built package and
|
||||
append the version needed by the binary. Appending the version yourself
|
||||
disables automatic detection.
|
||||
+
|
||||
Additional architecture-specific depends can be added by appending an
|
||||
underscore and the architecture name e.g., 'depends_x86_64=()'.
|
||||
|
||||
@@ -233,6 +245,10 @@ example, dcron can provide 'cron=2.0' to satisfy the 'cron>=2.0' dependency of
|
||||
other packages. Provisions involving the `>` and `<` operators are invalid as
|
||||
only specific versions of a package may be provided.
|
||||
+
|
||||
If the provision name appears to be a library (ends with .so), makepkg will
|
||||
try to find the library in the built package and append the correct
|
||||
version. Appending the version yourself disables automatic detection.
|
||||
+
|
||||
Additional architecture-specific provides can be added by appending an
|
||||
underscore and the architecture name e.g., 'provides_x86_64=()'.
|
||||
|
||||
@@ -336,13 +352,6 @@ function.
|
||||
the optional functions listed below. The packaging stage is run using
|
||||
fakeroot to ensure correct file permissions in the resulting package.
|
||||
All other functions will be run as the user calling makepkg.
|
||||
This function is run inside `$srcdir`.
|
||||
|
||||
*verify() Function*::
|
||||
An optional `verify()` function can be specified to implement arbitrary
|
||||
source authentication. The function should return a non-zero exit code when
|
||||
verification fails. This function is run before sources are extracted.
|
||||
This function is run inside `$startdir`.
|
||||
|
||||
*prepare() Function*::
|
||||
An optional `prepare()` function can be specified in which operations to
|
||||
@@ -350,19 +359,16 @@ function.
|
||||
function is run after the source extraction and before the `build()`
|
||||
function. The `prepare()` function is skipped when source extraction
|
||||
is skipped.
|
||||
This function is run inside `$srcdir`.
|
||||
|
||||
*build() Function*::
|
||||
The optional `build()` function is used to compile and/or adjust the source
|
||||
files in preparation to be installed by the `package()` function.
|
||||
This function is run inside `$srcdir`.
|
||||
|
||||
*check() Function*::
|
||||
An optional `check()` function can be specified in which a package's
|
||||
test-suite may be run. This function is run between the `build()` and
|
||||
`package()` functions. Be sure any exotic commands used are covered by the
|
||||
`checkdepends` array.
|
||||
This function is run inside `$srcdir`.
|
||||
|
||||
All of the above variables such as `$pkgname` and `$pkgver` are available for
|
||||
use in the packaging functions. In addition, makepkg defines the following
|
||||
@@ -372,6 +378,7 @@ variables:
|
||||
This contains the directory where makepkg extracts, or copies, all source
|
||||
files.
|
||||
+
|
||||
All of the packaging functions defined above are run starting inside `$srcdir`
|
||||
|
||||
*pkgdir*::
|
||||
This contains the directory where makepkg bundles the installed package.
|
||||
@@ -473,9 +480,6 @@ Currently makepkg supports the Bazaar, Git, Subversion, Fossil and Mercurial
|
||||
version control systems. For other version control systems, manual cloning of
|
||||
upstream repositories must be done in the `prepare()` function.
|
||||
|
||||
Some <<VCS,VCS Sources>> like Git support pinning the checkout by a checksum of
|
||||
its content using deterministic export functionality like ``git archive''.
|
||||
|
||||
The source URL is divided into four components:
|
||||
|
||||
*directory*::
|
||||
@@ -520,7 +524,8 @@ The source URL is divided into four components:
|
||||
Example
|
||||
-------
|
||||
The following is an example PKGBUILD for the 'patch' package. For more
|
||||
examples, look through the build files of your distribution's packages.
|
||||
examples, look through the build files of your distribution's packages. For
|
||||
those using Arch Linux, consult the Arch Build System (ABS) tree.
|
||||
|
||||
[source,sh]
|
||||
-------------------------------
|
||||
|
||||
@@ -18,6 +18,7 @@ Current maintainers:
|
||||
|
||||
* Allan McRae <allan@archlinux.org>
|
||||
* Andrew Gregory <andrew.gregory.8@gmail.com>
|
||||
* Eli Schwartz <eschwartz@archlinux.org>
|
||||
* Morgan Adamiec <morganamilo@archlinux.org>
|
||||
|
||||
Past major contributors:
|
||||
@@ -29,7 +30,6 @@ Past major contributors:
|
||||
* Xavier Chantry <shiningxc@gmail.com>
|
||||
* Nagy Gabor <ngaba@bibl.u-szeged.hu>
|
||||
* Dave Reisner <dreisner@archlinux.org>
|
||||
* Eli Schwartz <eschwartz@archlinux.org>
|
||||
|
||||
For additional contributors, use `git shortlog -s` on the pacman.git
|
||||
repository.
|
||||
|
||||
@@ -77,6 +77,7 @@ Releases
|
||||
[frame="topbot",grid="none",options="header,autowidth"]
|
||||
!======
|
||||
!Version !Date
|
||||
!6.0.2 !2022-10-03
|
||||
!6.0.1 !2021-09-04
|
||||
!6.0.0 !2021-05-20
|
||||
!6.0.0alpha1 !2020-12-04
|
||||
@@ -240,7 +241,7 @@ link:translation-help.html[translation-help].
|
||||
Bugs
|
||||
----
|
||||
If you find bugs (which is quite likely), please email them to the pacman-dev
|
||||
mailing last at mailto:pacman-dev@lists.archlinux.org[] with specific information
|
||||
mailing last at mailto:pacman-dev@archlinux.org[] with specific information
|
||||
such as your command-line, the nature of the bug, and even the package database
|
||||
if it helps.
|
||||
|
||||
@@ -250,7 +251,7 @@ bugs under the Pacman project.
|
||||
|
||||
Copyright
|
||||
---------
|
||||
pacman is Copyright (C) 2006-2022 Pacman Development Team
|
||||
<pacman-dev@lists.archlinux.org> and Copyright (C) 2002-2006 Judd Vinet
|
||||
pacman is Copyright (C) 2006-2021 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.
|
||||
|
||||
@@ -85,7 +85,7 @@ Example PKGBUILD
|
||||
license=('PerlArtistic' 'GPL')
|
||||
depends=('perl')
|
||||
source=("http://search.cpan.org/CPAN/authors/id/S/SH/SHERZODR/Config-Simple-${pkgver}.tar.gz")
|
||||
sha256sums=('dd9995706f0f9384a15ccffe116c3b6e22f42ba2e58d8f24ed03c4a0e386edb4')
|
||||
md5sums=('f014aec54f0a1e2e880d317180fce502')
|
||||
_distname="Config-Simple"
|
||||
|
||||
# template start; name=perl-module; version=1.0;
|
||||
|
||||
@@ -75,7 +75,7 @@ Options
|
||||
For each source file in the source array of PKGBUILD, download the file
|
||||
if required and generate integrity checks. The integrity checks generated
|
||||
are determined by the checks present in the PKGBUILD, falling back to the
|
||||
value of the INTEGRITY_CHECK array in makepkg.conf(5) if these are absent.
|
||||
value of the INTEGRITY_CHECK array in makepkg.conf(5) if these are absent
|
||||
This output can be redirected into your PKGBUILD for source validation
|
||||
using "`makepkg -g >> PKGBUILD`".
|
||||
|
||||
@@ -146,9 +146,6 @@ Options
|
||||
*-C, \--cleanbuild*::
|
||||
Remove the $srcdir before building the package.
|
||||
|
||||
*-D* <dir>, *\--dir* <dir> ::
|
||||
Change to directory <dir> before reading the PKGBUILD or doing anything else.
|
||||
|
||||
*\--allsource*::
|
||||
Do not actually build the package, but build a source-only tarball that
|
||||
includes all sources, including those that are normally downloaded via
|
||||
@@ -171,9 +168,6 @@ Options
|
||||
*\--noprepare*::
|
||||
Do not run the prepare() function in the PKGBUILD.
|
||||
|
||||
*\--noverify*::
|
||||
Do not run the verify() function in the PKGBUILD.
|
||||
|
||||
*\--sign*::
|
||||
Sign the resulting package with gpg, overriding the setting in
|
||||
linkman:makepkg.conf[5].
|
||||
@@ -233,9 +227,6 @@ before building.
|
||||
|
||||
Environment Variables
|
||||
---------------------
|
||||
**MAKEPKG_LIBRARY**="/path/to/directory"::
|
||||
Use an alternative libmakepkg path instead of the {libmakepkgdir} default.
|
||||
|
||||
**PACMAN**::
|
||||
The command that will be used to check for missing dependencies and to
|
||||
install and remove packages. Pacman's '-Qq', '-Rns', '-S', '-T', and '-U'
|
||||
@@ -296,10 +287,6 @@ Environment Variables
|
||||
**BUILDTOOLVER=**"<version>"::
|
||||
The version of the '$BUILDTOOL' used.
|
||||
|
||||
**GITFLAGS**::
|
||||
The options to pass when checking out git sources, replacing the default
|
||||
"--mirror".
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
See linkman:makepkg.conf[5] for more details on configuring makepkg using the
|
||||
|
||||
@@ -199,11 +199,6 @@ Options
|
||||
flags specified in LTOFLAGS to CFLAGS, CXXFLAGS and LDFLAGS (or
|
||||
``-flto'' if LTOFLAGS is empty).
|
||||
|
||||
*autodeps*;;
|
||||
Enable the automatic addition of libraries to the depends and
|
||||
provides arrays. Search library directories are controlled by
|
||||
the LIB_DIRS variable defined below.
|
||||
|
||||
**INTEGRITY_CHECK=(**check1 ...**)**::
|
||||
File integrity checks to use. Multiple checks may be specified; this
|
||||
affects both generation and checking. The current valid options are:
|
||||
@@ -234,12 +229,6 @@ Options
|
||||
that are located in opt/, you may need to add the directory to this
|
||||
array. *NOTE:* Do not add the leading slash to the directory name.
|
||||
|
||||
**LIB_DIRS=(**lib:usr/lib ...**)**::
|
||||
If `autodeps` is specified in the `OPTIONS` array, this variable will
|
||||
instruct makepkg where to look to find libraries to add to the `provides`
|
||||
array. The format is "prefix:path", where provides will be added for
|
||||
libraries found in "path" with the specified prefix added.
|
||||
|
||||
**PURGE_TARGETS=(**usr/{,share}/info/dir .podlist *.pod...**)**::
|
||||
If `purge` is specified in the `OPTIONS` array, this variable will
|
||||
instruct makepkg which files to remove from the package. This is
|
||||
@@ -291,10 +280,9 @@ Options
|
||||
|
||||
**PKGEXT=**"{pkgext}", **SRCEXT=**"{srcext}"::
|
||||
Sets the compression used when making compiled or source packages.
|
||||
Valid suffixes are `.pkg` or `.src` (for PKGEXT and SRCEXT resepectively)
|
||||
followed by one of `.tar.gz`, `.tar.bz2`, `.tar.xz`, `.tar.zst`, `.tar.lzo`,
|
||||
`.tar.lrz`, `.tar.lz4`, `.tar.lz` and `.tar.Z`, or simply `.tar` to
|
||||
disable compression entirely.
|
||||
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.
|
||||
|
||||
**PACMAN_AUTH=()**::
|
||||
Specify a command prefix for running pacman as root. If unset, makepkg will
|
||||
|
||||
@@ -5,9 +5,7 @@ manpages = [
|
||||
{ 'name': 'makepkg-template.1' },
|
||||
{ 'name': 'repo-add.8' },
|
||||
{ 'name': 'vercmp.8' },
|
||||
{ 'name': 'testpkg.8' },
|
||||
{ 'name': 'pacman-key.8' },
|
||||
{ 'name': 'pacman-db-upgrade.8' },
|
||||
{ 'name': 'PKGBUILD.5', 'extra_depends' : [ 'PKGBUILD-example.txt' ] },
|
||||
{ 'name': 'makepkg.conf.5' },
|
||||
{ 'name': 'pacman.conf.5' },
|
||||
@@ -30,12 +28,10 @@ asciidoc_opts = [
|
||||
'-a', 'srcext=@0@'.format(get_option('src-ext')),
|
||||
'-a', 'pkgext=@0@'.format(get_option('pkg-ext')),
|
||||
'-a', 'pkgdatadir=@0@'.format(PKGDATADIR),
|
||||
'-a', 'keyringdir=@0@'.format(KEYRINGDIR),
|
||||
'-a', 'localstatedir=@0@'.format(LOCALSTATEDIR),
|
||||
'-a', 'sysconfdir=@0@'.format(SYSCONFDIR),
|
||||
'-a', 'datarootdir=@0@'.format(DATAROOTDIR),
|
||||
'-a', 'rootdir=@0@'.format(ROOTDIR),
|
||||
'-a', 'libmakepkgdir=@0@'.format(LIBMAKEPKGDIR),
|
||||
]
|
||||
|
||||
html_targets = []
|
||||
|
||||
@@ -34,7 +34,7 @@ Options
|
||||
*-R, \--rootdir* <path>::
|
||||
Specify an alternate installation root (default is `/`).
|
||||
|
||||
*-r, \--repo* <repository>::
|
||||
*-r, \--repo* <remote>::
|
||||
Query options for a specific repository.
|
||||
|
||||
*-v, \--verbose*::
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
pacman-db-upgrade(8)
|
||||
====================
|
||||
|
||||
Name
|
||||
----
|
||||
pacman-db-upgrade - upgrade the local pacman database to a newer format
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
'pacman-db-upgrade' [options]
|
||||
|
||||
Description
|
||||
-----------
|
||||
'pacman-db-upgrade' is a script that upgrades the local database used
|
||||
by linkman:pacman[8] to a newer format.
|
||||
|
||||
Options
|
||||
--------------
|
||||
*-h, \--help*::
|
||||
Show the built-in help message and exit.
|
||||
*-V, \--version*::
|
||||
Show version information and exit.
|
||||
*-d, \--dbpath* <path>::
|
||||
Set an alternate database location.
|
||||
*-r, \--root* <path>::
|
||||
Set an alternate installation root.
|
||||
*\--config* <path>::
|
||||
Set an alternate configuration file.
|
||||
*\--nocolor*::
|
||||
Remove color from output.
|
||||
|
||||
See Also
|
||||
--------
|
||||
linkman:pacman[8]
|
||||
|
||||
include::footer.asciidoc[]
|
||||
@@ -86,7 +86,7 @@ Operations
|
||||
|
||||
*\--populate*::
|
||||
Reload the default keys from the (optionally provided) keyrings in
|
||||
+{keyringdir}+. For more information, see
|
||||
+{pkgdatadir}/keyrings+. For more information, see
|
||||
<<PK,Providing a Keyring for Import>> below.
|
||||
|
||||
*-u, \--updatedb*::
|
||||
@@ -129,7 +129,7 @@ A distribution or other repository provided may want to provide a set of
|
||||
PGP keys used in the signing of its packages and repository databases that can
|
||||
be readily imported into the pacman keyring. This is achieved by providing a
|
||||
PGP keyring file `foo.gpg` that contains the keys for the foo keyring in the
|
||||
directory +{keyringdir}+.
|
||||
directory +{pkgdatadir}/keyrings+.
|
||||
|
||||
Optionally, the file `foo-trusted` can be provided containing a list of trusted
|
||||
key IDs for that keyring. This is a file in a format compatible with 'gpg
|
||||
|
||||
@@ -212,7 +212,7 @@ Transaction Options (apply to '-S', '-R' and '-U')
|
||||
|
||||
*\--assume-installed* <package=version>::
|
||||
Add a virtual package "package" with version "version" to the transaction
|
||||
to satisfy dependencies. This allows disabling the specific dependency checks
|
||||
to satisfy dependencies. This allows to disable specific dependency checks
|
||||
without affecting all dependency checks. To disable all dependency
|
||||
checking, see the '\--nodeps' option.
|
||||
|
||||
@@ -235,15 +235,8 @@ Transaction Options (apply to '-S', '-R' and '-U')
|
||||
|
||||
*\--print-format* <format>::
|
||||
Specify a printf-like format to control the output of the '\--print'
|
||||
operation. The possible attributes are: "%a" for arch, "%b" for
|
||||
builddate, "%d" for description, "%e" for pkgbase, "%f" for filename,
|
||||
"%g" for base64 encoded PGP signature, "%h" for sha256sum, "%m" for
|
||||
md5sum, "%n" for pkgname, "%p" for packager, "%v" for pkgver, "%l" for
|
||||
location, "%r" for repository, "%s" for size, "%C" for checkdepends,
|
||||
"%D" for depends, "%G" for groups, "%H" for conflicts, "%L" for
|
||||
licenses, "%M" for makedepends, "%O" for optional depends, "%P" for
|
||||
provides and "%R" for replaces.
|
||||
Implies '\--print'.
|
||||
operation. The possible attributes are: "%n" for pkgname, "%v" for pkgver,
|
||||
"%l" for location, "%r" for repository, and "%s" for size. Implies '\--print'.
|
||||
|
||||
|
||||
Upgrade Options (apply to '-S' and '-U')[[UO]]
|
||||
@@ -456,11 +449,11 @@ Additional targets can also be specified manually, so that '-Su foo' will do a
|
||||
system upgrade and install/upgrade the "foo" package in the same operation.
|
||||
|
||||
*-y, \--refresh*::
|
||||
Download a fresh copy of the master package databases '(repo.db)' from the
|
||||
server(s) defined in linkman:pacman.conf[5]. This should typically be used
|
||||
each time you use '\--sysupgrade' or '-u'. Passing two '\--refresh' or '-y'
|
||||
flags will force a refresh of all package databases, even if they appear to
|
||||
be up-to-date.
|
||||
Download a fresh copy of the master package database from the server(s)
|
||||
defined in linkman:pacman.conf[5]. This should typically be used each time
|
||||
you use '\--sysupgrade' or '-u'. Passing two '\--refresh' or '-y' flags
|
||||
will force a refresh of all package databases, even if they appear to be
|
||||
up-to-date.
|
||||
|
||||
|
||||
Database Options (apply to '-D')[[QO]]
|
||||
@@ -489,8 +482,8 @@ Database Options (apply to '-D')[[QO]]
|
||||
File Options (apply to '-F')[[FO]]
|
||||
----------------------------------
|
||||
*-y, --refresh*::
|
||||
Download fresh package file databases '(repo.files)' from the server.
|
||||
Use twice to force a refresh even if databases are up to date.
|
||||
Download fresh package databases from the server. Use twice to force a
|
||||
refresh even if databases are up to date.
|
||||
|
||||
*-l, \--list*::
|
||||
List the files owned by the queried package.
|
||||
|
||||
@@ -121,7 +121,7 @@ Options
|
||||
architecture 'any' can always be installed, as they are meant to be
|
||||
architecture independent.
|
||||
|
||||
*XferCommand =* /path/to/command %u [%o]::
|
||||
*XferCommand =* /path/to/command %u::
|
||||
If set, an external program will be used to download all remote files.
|
||||
All instances of `%u` will be replaced with the download URL. If present,
|
||||
instances of `%o` will be replaced with the local filename, plus a
|
||||
@@ -207,10 +207,6 @@ Options
|
||||
positive integer. If this config option is not set then only one download
|
||||
stream is used (i.e. downloads happen sequentially).
|
||||
|
||||
*DownloadUser =* username::
|
||||
Specifies the user to switch to for downloading files. If this config
|
||||
option is not set then the downloads are done as the user running pacman.
|
||||
|
||||
|
||||
Repository Sections
|
||||
-------------------
|
||||
@@ -244,12 +240,6 @@ number.
|
||||
general configuration options. Wildcards in the specified paths will get
|
||||
expanded based on linkman:glob[7] rules.
|
||||
|
||||
*CacheServer =* url::
|
||||
A full URL to a location where the packages, and signatures (if
|
||||
available) for this repository can be found. Cache servers will be tried
|
||||
before any non-cache servers, will not be removed from the server pool for
|
||||
404 download errors, and will not be used for database files.
|
||||
|
||||
*Server =* url::
|
||||
A full URL to a location where the database, packages, and signatures (if
|
||||
available) for this repository can be found.
|
||||
|
||||
@@ -70,8 +70,6 @@ repo-add Options
|
||||
Remove old package files from the disk when updating their entry in the
|
||||
database.
|
||||
|
||||
*\--include-sigs*::
|
||||
Include package PGP signatures in the repository database (if available)
|
||||
|
||||
Example
|
||||
-------
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
testpkg(8)
|
||||
==========
|
||||
|
||||
Name
|
||||
----
|
||||
testpkg - test a pacman package for validity
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
'testpkg' <package file>
|
||||
|
||||
Description
|
||||
-----------
|
||||
'testpkg' is a script used to make sure that a pacman package is valid.
|
||||
|
||||
See Also
|
||||
--------
|
||||
linkman:pacman[8]
|
||||
|
||||
include::footer.asciidoc[]
|
||||
@@ -55,7 +55,7 @@ Pre-release Updates
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
A week or two before each release, the codebase will go into a string freeze
|
||||
and an email will be sent to the mailto:pacman-dev@lists.archlinux.org[pacman-dev]
|
||||
and an email will be sent to the mailto:pacman-dev@archlinux.org[pacman-dev]
|
||||
mailing list asking for translations. This email will have a prefix of
|
||||
*[translation]* for anyone looking to set up an email filter.
|
||||
|
||||
@@ -150,4 +150,4 @@ There are currently no efforts underway to include translated manual pages in
|
||||
the pacman codebase. However, this is not to say translations are unwelcome. If
|
||||
someone has experience with i18n man pages and how to best include them with our
|
||||
source, please contact the pacman-dev mailing list at
|
||||
mailto:pacman-dev@lists.archlinux.org[].
|
||||
mailto:pacman-dev@archlinux.org[].
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
#!/hint/bash
|
||||
#
|
||||
# @sysconfdir@/makepkg.conf.d/rust.conf
|
||||
#
|
||||
|
||||
#########################################################################
|
||||
# RUST LANGUAGE SUPPORT
|
||||
#########################################################################
|
||||
#
|
||||
#RUSTFLAGS="-C opt-level=2"
|
||||
#DEBUG_RUSTFLAGS="-C debuginfo=2"
|
||||
@@ -9,10 +9,10 @@
|
||||
#
|
||||
#-- The download utilities that makepkg should use to acquire sources
|
||||
# Format: 'protocol::agent'
|
||||
DLAGENTS=('file::/usr/bin/curl -qgC - -o %o %u'
|
||||
'ftp::/usr/bin/curl -qgfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
|
||||
'http::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
|
||||
'https::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
|
||||
DLAGENTS=('file::/usr/bin/curl -gqC - -o %o %u'
|
||||
'ftp::/usr/bin/curl -gqfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
|
||||
'http::/usr/bin/curl -gqb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
|
||||
'https::/usr/bin/curl -gqb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
|
||||
'rsync::/usr/bin/rsync --no-motd -z %u %o'
|
||||
'scp::/usr/bin/scp -C %u %o')
|
||||
|
||||
@@ -23,7 +23,7 @@ DLAGENTS=('file::/usr/bin/curl -qgC - -o %o %u'
|
||||
|
||||
#-- The package required by makepkg to download VCS sources
|
||||
# Format: 'protocol::package'
|
||||
VCSCLIENTS=('bzr::breezy'
|
||||
VCSCLIENTS=('bzr::bzr'
|
||||
'fossil::fossil'
|
||||
'git::git'
|
||||
'hg::mercurial'
|
||||
@@ -42,11 +42,13 @@ CHOST="@CHOST@"
|
||||
#CXXFLAGS="-O2 -pipe"
|
||||
#LDFLAGS=""
|
||||
#LTOFLAGS="-flto"
|
||||
#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
|
||||
@@ -75,8 +77,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 !lto !autodeps)
|
||||
# Makepkg defaults: OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug !lto)
|
||||
# A negated option will do the opposite of the comments below.
|
||||
#
|
||||
#-- strip: Strip symbols from binaries/libraries
|
||||
@@ -88,9 +89,8 @@ BUILDENV=(!distcc color !ccache check !sign)
|
||||
#-- purge: Remove files specified by PURGE_TARGETS
|
||||
#-- debug: Add debugging flags as specified in DEBUG_* variables
|
||||
#-- lto: Add compile flags for building with link time optimization
|
||||
#-- autodeps: Automatically add depends/provides
|
||||
#
|
||||
OPTIONS=(strip docs libtool staticlibs emptydirs zipman purge !debug !lto !autodeps)
|
||||
OPTIONS=(strip docs libtool staticlibs emptydirs zipman purge !debug !lto)
|
||||
|
||||
#-- File integrity checks to use. Valid: ck, md5, sha1, sha224, sha256, sha384, sha512, b2
|
||||
INTEGRITY_CHECK=(ck)
|
||||
@@ -108,8 +108,6 @@ DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
|
||||
PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)
|
||||
#-- Directory to store source code in for debug packages
|
||||
DBGSRCDIR="/usr/src/debug"
|
||||
#-- Prefix and directories for library autodeps
|
||||
LIB_DIRS=('lib:usr/lib' 'lib32:usr/lib32')
|
||||
|
||||
#########################################################################
|
||||
# PACKAGE OUTPUT
|
||||
|
||||
@@ -74,4 +74,4 @@ ParallelDownloads = 5
|
||||
# tips on creating your own repositories.
|
||||
#[custom]
|
||||
#SigLevel = Optional TrustAll
|
||||
#Server = file:///home/packages
|
||||
#Server = file:///home/custompkgs
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* add.c
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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
|
||||
@@ -262,7 +262,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive,
|
||||
"filesystem: %o package: %o\n"), filename, lsbuf.st_mode & mask,
|
||||
entrymode & mask);
|
||||
alpm_logaction(handle, ALPM_CALLER_PREFIX,
|
||||
"warning: directory permissions differ on %s, "
|
||||
"warning: directory permissions differ on %s\n"
|
||||
"filesystem: %o package: %o\n", filename, lsbuf.st_mode & mask,
|
||||
entrymode & mask);
|
||||
}
|
||||
@@ -277,7 +277,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive,
|
||||
"filesystem: %u:%u package: %u:%u\n"), filename,
|
||||
lsbuf.st_uid, lsbuf.st_gid, entryuid, entrygid);
|
||||
alpm_logaction(handle, ALPM_CALLER_PREFIX,
|
||||
"warning: directory ownership differs on %s, "
|
||||
"warning: directory ownership differs on %s\n"
|
||||
"filesystem: %u:%u package: %u:%u\n", filename,
|
||||
lsbuf.st_uid, lsbuf.st_gid, entryuid, entrygid);
|
||||
}
|
||||
@@ -415,7 +415,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive,
|
||||
static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
|
||||
size_t pkg_current, size_t pkg_count)
|
||||
{
|
||||
int ret = 0, errors = 0;
|
||||
int i, ret = 0, errors = 0;
|
||||
int is_upgrade = 0;
|
||||
alpm_pkg_t *oldpkg = NULL;
|
||||
alpm_db_t *db = handle->db_local;
|
||||
@@ -538,7 +538,7 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
|
||||
/* call PROGRESS once with 0 percent, as we sort-of skip that here */
|
||||
PROGRESS(handle, progress, newpkg->name, 0, pkg_count, pkg_current);
|
||||
|
||||
while(archive_read_next_header(archive, &entry) == ARCHIVE_OK) {
|
||||
for(i = 0; archive_read_next_header(archive, &entry) == ARCHIVE_OK; i++) {
|
||||
int percent;
|
||||
|
||||
if(newpkg->size != 0) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* add.h
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* alpm.c
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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>
|
||||
@@ -93,16 +93,34 @@ cleanup:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* check current state and free all resources including storage locks */
|
||||
int SYMEXPORT alpm_release(alpm_handle_t *myhandle)
|
||||
{
|
||||
int ret = 0;
|
||||
alpm_db_t *db;
|
||||
|
||||
CHECK_HANDLE(myhandle, return -1);
|
||||
ASSERT(myhandle->trans == NULL, RET_ERR(myhandle, ALPM_ERR_TRANS_NOT_NULL, -1));
|
||||
|
||||
/* close local database */
|
||||
db = myhandle->db_local;
|
||||
if(db) {
|
||||
db->ops->unregister(db);
|
||||
myhandle->db_local = NULL;
|
||||
}
|
||||
|
||||
if(alpm_unregister_all_syncdbs(myhandle) == -1) {
|
||||
ret = -1;
|
||||
}
|
||||
|
||||
#ifdef HAVE_LIBCURL
|
||||
curl_multi_cleanup(myhandle->curlm);
|
||||
curl_global_cleanup();
|
||||
FREELIST(myhandle->server_errors);
|
||||
#endif
|
||||
|
||||
_alpm_handle_unlock(myhandle);
|
||||
_alpm_handle_free(myhandle);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
const char SYMEXPORT *alpm_version(void)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* alpm.h
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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>
|
||||
@@ -78,7 +78,7 @@ extern "C" {
|
||||
* This struct represents an instance of libalpm.
|
||||
* @ingroup libalpm_handle
|
||||
*/
|
||||
typedef struct _alpm_handle_t alpm_handle_t;
|
||||
typedef struct __alpm_handle_t alpm_handle_t;
|
||||
|
||||
/** A database.
|
||||
*
|
||||
@@ -98,7 +98,7 @@ typedef struct _alpm_handle_t alpm_handle_t;
|
||||
* Databases are automatically unregistered when the \link alpm_handle_t \endlink is released.
|
||||
* @ingroup libalpm_databases
|
||||
*/
|
||||
typedef struct _alpm_db_t alpm_db_t;
|
||||
typedef struct __alpm_db_t alpm_db_t;
|
||||
|
||||
|
||||
/** A package.
|
||||
@@ -107,19 +107,17 @@ typedef struct _alpm_db_t alpm_db_t;
|
||||
* Packages from databases are automatically freed when the database is unregistered. Packages loaded
|
||||
* from a file must be freed manually.
|
||||
*
|
||||
* Packages can then be queried for metadata or added to a transaction
|
||||
* Packages can then be queried for metadata or added to a \link alpm_trans_t transaction \endlink
|
||||
* to be added or removed from the system.
|
||||
* @ingroup libalpm_packages
|
||||
*/
|
||||
typedef struct _alpm_pkg_t alpm_pkg_t;
|
||||
typedef struct __alpm_pkg_t alpm_pkg_t;
|
||||
|
||||
/** Transaction structure used internally by libalpm
|
||||
* @ingroup libalpm_trans
|
||||
* */
|
||||
typedef struct __alpm_trans_t alpm_trans_t;
|
||||
|
||||
/** The extended data type used to store non-standard package data fields
|
||||
* @ingroup libalpm_packages
|
||||
*/
|
||||
typedef struct _alpm_pkg_xdata_t {
|
||||
char *name;
|
||||
char *value;
|
||||
} alpm_pkg_xdata_t;
|
||||
|
||||
/** The time type used by libalpm. Represents a unix time stamp
|
||||
* @ingroup libalpm_misc */
|
||||
@@ -164,7 +162,7 @@ typedef struct _alpm_backup_t {
|
||||
* @param path the path to search for in the package
|
||||
* @return a pointer to the matching file or NULL if not found
|
||||
*/
|
||||
alpm_file_t *alpm_filelist_contains(const alpm_filelist_t *filelist, const char *path);
|
||||
alpm_file_t *alpm_filelist_contains(alpm_filelist_t *filelist, const char *path);
|
||||
|
||||
/* End of libalpm_files */
|
||||
/** @} */
|
||||
@@ -488,7 +486,7 @@ typedef struct _alpm_siglist_t {
|
||||
* 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 0 if valid, -1 if an error occurred or signature is invalid
|
||||
* @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);
|
||||
|
||||
@@ -496,7 +494,7 @@ 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 0 if valid, -1 if an error occurred or signature is invalid
|
||||
* @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);
|
||||
|
||||
@@ -600,10 +598,16 @@ typedef struct _alpm_depmissing_t {
|
||||
|
||||
/** A conflict that has occurred between two packages. */
|
||||
typedef struct _alpm_conflict_t {
|
||||
/** The first package */
|
||||
alpm_pkg_t *package1;
|
||||
/** The second package */
|
||||
alpm_pkg_t *package2;
|
||||
/** Hash of the first package name
|
||||
* (used internally to speed up conflict checks) */
|
||||
unsigned long package1_hash;
|
||||
/** Hash of the second package name
|
||||
* (used internally to speed up conflict checks) */
|
||||
unsigned long package2_hash;
|
||||
/** Name of the first package */
|
||||
char *package1;
|
||||
/** Name of the second package */
|
||||
char *package2;
|
||||
/** The conflict */
|
||||
alpm_depend_t *reason;
|
||||
} alpm_conflict_t;
|
||||
@@ -969,7 +973,7 @@ typedef union _alpm_event_t {
|
||||
* Called when an event occurs
|
||||
* @param ctx user-provided context
|
||||
* @param event the event that occurred */
|
||||
typedef void (*alpm_cb_event)(void *ctx, alpm_event_t *event);
|
||||
typedef void (*alpm_cb_event)(void *ctx, alpm_event_t *);
|
||||
|
||||
/**
|
||||
* Type of question.
|
||||
@@ -1076,10 +1080,8 @@ typedef struct _alpm_question_import_key_t {
|
||||
alpm_question_type_t type;
|
||||
/** Answer: whether or not to import key */
|
||||
int import;
|
||||
/** UID of the key to import */
|
||||
const char *uid;
|
||||
/** Fingerprint the key to import */
|
||||
const char *fingerprint;
|
||||
/** The key to import */
|
||||
alpm_pgpkey_t *key;
|
||||
} alpm_question_import_key_t;
|
||||
|
||||
/**
|
||||
@@ -1116,7 +1118,7 @@ typedef union _alpm_question_t {
|
||||
* @param ctx user-provided context
|
||||
* @param question the question being asked.
|
||||
*/
|
||||
typedef void (*alpm_cb_question)(void *ctx, alpm_question_t *question);
|
||||
typedef void (*alpm_cb_question)(void *ctx, alpm_question_t *);
|
||||
|
||||
/** An enum over different kinds of progress alerts. */
|
||||
typedef enum _alpm_progress_t {
|
||||
@@ -1283,12 +1285,6 @@ int alpm_unregister_all_syncdbs(alpm_handle_t *handle);
|
||||
*/
|
||||
int alpm_db_unregister(alpm_db_t *db);
|
||||
|
||||
/** Get the handle of a package database.
|
||||
* @param db pointer to the package database
|
||||
* @return the alpm handle that the package database belongs to
|
||||
*/
|
||||
alpm_handle_t *alpm_db_get_handle(alpm_db_t *db);
|
||||
|
||||
/** Get the name of a package database.
|
||||
* @param db pointer to the package database
|
||||
* @return the name of the package database, NULL on error
|
||||
@@ -1343,34 +1339,6 @@ int alpm_db_add_server(alpm_db_t *db, const char *url);
|
||||
*/
|
||||
int alpm_db_remove_server(alpm_db_t *db, const char *url);
|
||||
|
||||
/** Get the list of cache 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_cache_servers(const alpm_db_t *db);
|
||||
|
||||
/** Sets the list of cache servers for the database to use.
|
||||
* @param db the database to set the servers. The list will be duped and
|
||||
* the original will still need to be freed by the caller.
|
||||
* @param servers a char* list of servers.
|
||||
*/
|
||||
int alpm_db_set_cache_servers(alpm_db_t *db, alpm_list_t *servers);
|
||||
|
||||
/** Add a download cache 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_cache_server(alpm_db_t *db, const char *url);
|
||||
|
||||
/** Remove a download cache 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_cache_server(alpm_db_t *db, const char *url);
|
||||
|
||||
/* End of server accessors */
|
||||
/** @} */
|
||||
|
||||
@@ -1866,29 +1834,7 @@ const char *alpm_option_get_gpgdir(alpm_handle_t *handle);
|
||||
* @param gpgdir the gpgdir to set
|
||||
*/
|
||||
int alpm_option_set_gpgdir(alpm_handle_t *handle, const char *gpgdir);
|
||||
/* End of gpgdir accessors */
|
||||
/** @} */
|
||||
|
||||
|
||||
/** @name Accessors for use sandboxuser
|
||||
*
|
||||
* This controls the user that libalpm will use for sensitive operations like
|
||||
* downloading files.
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** Returns the user to switch to for sensitive operations.
|
||||
* @return the user name
|
||||
*/
|
||||
const char *alpm_option_get_sandboxuser(alpm_handle_t *handle);
|
||||
|
||||
/** Sets the user to switch to for sensitive operations.
|
||||
* @param handle the context handle
|
||||
* @param sandboxuser the user to set
|
||||
*/
|
||||
int alpm_option_set_sandboxuser(alpm_handle_t *handle, const char *sandboxuser);
|
||||
|
||||
/* End of sandboxuser accessors */
|
||||
/* End of gpdir accessors */
|
||||
/** @} */
|
||||
|
||||
|
||||
@@ -2444,12 +2390,6 @@ int alpm_pkg_should_ignore(alpm_handle_t *handle, alpm_pkg_t *pkg);
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** Gets the handle of a package
|
||||
* @param pkg a pointer to package
|
||||
* @return the alpm handle that the package belongs to
|
||||
*/
|
||||
alpm_handle_t *alpm_pkg_get_handle(alpm_pkg_t *pkg);
|
||||
|
||||
/** Gets the name of the file from which the package was loaded.
|
||||
* @param pkg a pointer to package
|
||||
* @return a reference to an internal string
|
||||
@@ -2650,12 +2590,6 @@ int alpm_pkg_get_sig(alpm_pkg_t *pkg, unsigned char **sig, size_t *sig_len);
|
||||
*/
|
||||
int alpm_pkg_get_validation(alpm_pkg_t *pkg);
|
||||
|
||||
/** Gets the extended data field of a package.
|
||||
* @param pkg a pointer to package
|
||||
* @return a reference to a list of alpm_pkg_xdata_t objects
|
||||
*/
|
||||
alpm_list_t *alpm_pkg_get_xdata(alpm_pkg_t *pkg);
|
||||
|
||||
/** Returns whether the package has an install scriptlet.
|
||||
* @return 0 if FALSE, TRUE otherwise
|
||||
*/
|
||||
@@ -2785,8 +2719,7 @@ typedef enum _alpm_transflag_t {
|
||||
ALPM_TRANS_FLAG_RECURSE = (1 << 5),
|
||||
/** Modify database but do not commit changes to the filesystem. */
|
||||
ALPM_TRANS_FLAG_DBONLY = (1 << 6),
|
||||
/** Do not run hooks during a transaction */
|
||||
ALPM_TRANS_FLAG_NOHOOKS = (1 << 7),
|
||||
/* (1 << 7) flag can go here */
|
||||
/** Use ALPM_PKG_REASON_DEPEND when installing packages. */
|
||||
ALPM_TRANS_FLAG_ALLDEPS = (1 << 8),
|
||||
/** Only download packages and do not actually install. */
|
||||
@@ -2951,12 +2884,6 @@ const char *alpm_version(void);
|
||||
* */
|
||||
int alpm_capabilities(void);
|
||||
|
||||
/** Drop privileges by switching to a different user.
|
||||
* @param sandboxuser the user to switch to
|
||||
* @return 0 on success, -1 on failure
|
||||
*/
|
||||
int alpm_sandbox_setup_child(const char *sandboxuser);
|
||||
|
||||
/* End of libalpm_misc */
|
||||
/** @} */
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* alpm_list.c
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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
|
||||
@@ -417,7 +417,6 @@ alpm_list_t SYMEXPORT *alpm_list_reverse(alpm_list_t *list)
|
||||
while(lp) {
|
||||
if(alpm_list_append(&newlist, lp->data) == NULL) {
|
||||
alpm_list_free(newlist);
|
||||
list->prev = backup;
|
||||
return NULL;
|
||||
}
|
||||
lp = lp->prev;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* alpm_list.h
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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
|
||||
@@ -48,13 +48,13 @@ extern "C" {
|
||||
*/
|
||||
|
||||
/** A doubly linked list */
|
||||
typedef struct _alpm_list_t {
|
||||
typedef struct __alpm_list_t {
|
||||
/** data held by the list node */
|
||||
void *data;
|
||||
/** pointer to the previous node */
|
||||
struct _alpm_list_t *prev;
|
||||
struct __alpm_list_t *prev;
|
||||
/** pointer to the next node */
|
||||
struct _alpm_list_t *next;
|
||||
struct __alpm_list_t *next;
|
||||
} alpm_list_t;
|
||||
|
||||
/** Frees a list and its contents */
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* backup.c
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* backup.h
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* be_local.c : backend for the local database
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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
|
||||
@@ -195,12 +195,6 @@ static alpm_list_t *_cache_get_backup(alpm_pkg_t *pkg)
|
||||
return pkg->backup;
|
||||
}
|
||||
|
||||
static alpm_list_t *_cache_get_xdata(alpm_pkg_t *pkg)
|
||||
{
|
||||
LAZY_LOAD(INFRQ_DESC);
|
||||
return pkg->xdata;
|
||||
}
|
||||
|
||||
/**
|
||||
* Open a package changelog for reading. Similar to fopen in functionality,
|
||||
* except that the returned 'file stream' is from the database.
|
||||
@@ -250,6 +244,7 @@ static int _cache_changelog_close(const alpm_pkg_t UNUSED *pkg, void *fp)
|
||||
*/
|
||||
static struct archive *_cache_mtree_open(alpm_pkg_t *pkg)
|
||||
{
|
||||
int r;
|
||||
struct archive *mtree;
|
||||
|
||||
alpm_db_t *db = alpm_pkg_get_db(pkg);
|
||||
@@ -267,7 +262,7 @@ static struct archive *_cache_mtree_open(alpm_pkg_t *pkg)
|
||||
_alpm_archive_read_support_filter_all(mtree);
|
||||
archive_read_support_format_mtree(mtree);
|
||||
|
||||
if(_alpm_archive_read_open_file(mtree, mtfile, ALPM_BUFFER_SIZE)) {
|
||||
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));
|
||||
_alpm_archive_read_free(mtree);
|
||||
@@ -354,7 +349,6 @@ static const struct pkg_operations local_pkg_ops = {
|
||||
.get_replaces = _cache_get_replaces,
|
||||
.get_files = _cache_get_files,
|
||||
.get_backup = _cache_get_backup,
|
||||
.get_xdata = _cache_get_xdata,
|
||||
|
||||
.changelog_open = _cache_changelog_open,
|
||||
.changelog_read = _cache_changelog_read,
|
||||
@@ -810,18 +804,6 @@ static int local_db_read(alpm_pkg_t *info, int inforeq)
|
||||
READ_AND_SPLITDEP(info->conflicts);
|
||||
} else if(strcmp(line, "%PROVIDES%") == 0) {
|
||||
READ_AND_SPLITDEP(info->provides);
|
||||
} else if(strcmp(line, "%XDATA%") == 0) {
|
||||
alpm_list_t *i, *lines = NULL;
|
||||
READ_AND_STORE_ALL(lines);
|
||||
for(i = lines; i; i = i->next) {
|
||||
alpm_pkg_xdata_t *pd = _alpm_pkg_parse_xdata(i->data);
|
||||
if(pd == NULL || !alpm_list_append(&info->xdata, pd)) {
|
||||
_alpm_pkg_xdata_free(pd);
|
||||
FREELIST(lines);
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
FREELIST(lines);
|
||||
}
|
||||
}
|
||||
fclose(fp);
|
||||
@@ -1058,15 +1040,6 @@ int _alpm_local_db_write(alpm_db_t *db, alpm_pkg_t *info, int inforeq)
|
||||
write_deps(fp, "%CONFLICTS%", info->conflicts);
|
||||
write_deps(fp, "%PROVIDES%", info->provides);
|
||||
|
||||
if(info->xdata) {
|
||||
fputs("%XDATA%\n", fp);
|
||||
for(lp = info->xdata; lp; lp = lp->next) {
|
||||
alpm_pkg_xdata_t *pd = lp->data;
|
||||
fprintf(fp, "%s=%s\n", pd->name, pd->value);
|
||||
}
|
||||
fputc('\n', fp);
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
fp = NULL;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* be_package.c : backend for packages
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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
|
||||
@@ -244,12 +244,10 @@ static int parse_descfile(alpm_handle_t *handle, struct archive *a, alpm_pkg_t *
|
||||
CALLOC(backup, 1, sizeof(alpm_backup_t), return -1);
|
||||
STRDUP(backup->name, ptr, FREE(backup); return -1);
|
||||
newpkg->backup = alpm_list_add(newpkg->backup, backup);
|
||||
} else if(strcmp(key, "xdata") == 0) {
|
||||
alpm_pkg_xdata_t *pd = _alpm_pkg_parse_xdata(ptr);
|
||||
if(pd == NULL || !alpm_list_append(&newpkg->xdata, pd)) {
|
||||
_alpm_pkg_xdata_free(pd);
|
||||
return -1;
|
||||
}
|
||||
} else if(strcmp(key, "force") == 0) {
|
||||
/* deprecated, skip it */
|
||||
} else if(strcmp(key, "makepkgopt") == 0) {
|
||||
/* not used atm */
|
||||
} else {
|
||||
_alpm_log(handle, ALPM_LOG_DEBUG, "%s: unknown key '%s' in description file line %d\n",
|
||||
newpkg->name ? newpkg->name : "error", key, linenum);
|
||||
@@ -653,6 +651,7 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
|
||||
}
|
||||
|
||||
_alpm_archive_read_free(archive);
|
||||
close(fd);
|
||||
|
||||
/* internal fields for package struct */
|
||||
newpkg->origin = ALPM_PKG_FROM_FILE;
|
||||
@@ -675,7 +674,6 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
|
||||
newpkg->infolevel |= INFRQ_FILES;
|
||||
}
|
||||
|
||||
close(fd);
|
||||
return newpkg;
|
||||
|
||||
pkg_invalid:
|
||||
@@ -683,7 +681,9 @@ pkg_invalid:
|
||||
error:
|
||||
_alpm_pkg_free(newpkg);
|
||||
_alpm_archive_read_free(archive);
|
||||
close(fd);
|
||||
if(fd >= 0) {
|
||||
close(fd);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* be_sync.c : backend for sync databases
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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
|
||||
@@ -189,18 +189,6 @@ int SYMEXPORT alpm_db_update(alpm_handle_t *handle, alpm_list_t *dbs, int force)
|
||||
MALLOC(payload->filepath, len,
|
||||
FREE(payload); GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
|
||||
snprintf(payload->filepath, len, "%s%s", db->treename, dbext);
|
||||
|
||||
STRDUP(payload->remote_name, payload->filepath,
|
||||
_alpm_dload_payload_reset(payload); FREE(payload);
|
||||
GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
|
||||
payload->destfile_name = _alpm_get_fullpath(syncpath, payload->remote_name, "");
|
||||
payload->tempfile_name = _alpm_get_fullpath(syncpath, payload->remote_name, ".part");
|
||||
if(!payload->destfile_name || !payload->tempfile_name) {
|
||||
_alpm_dload_payload_reset(payload);
|
||||
FREE(payload);
|
||||
GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup);
|
||||
}
|
||||
|
||||
payload->handle = handle;
|
||||
payload->force = dbforce;
|
||||
payload->unlink_on_fail = 1;
|
||||
@@ -678,18 +666,6 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
|
||||
pkg->files.count = files_count;
|
||||
pkg->files.files = files;
|
||||
_alpm_filelist_sort(&pkg->files);
|
||||
} else if(strcmp(line, "%DATA%") == 0) {
|
||||
alpm_list_t *i, *lines = NULL;
|
||||
READ_AND_STORE_ALL(lines);
|
||||
for(i = lines; i; i = i->next) {
|
||||
alpm_pkg_xdata_t *pd = _alpm_pkg_parse_xdata(i->data);
|
||||
if(pd == NULL || !alpm_list_append(&pkg->xdata, pd)) {
|
||||
_alpm_pkg_xdata_free(pd);
|
||||
FREELIST(lines);
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
FREELIST(lines);
|
||||
}
|
||||
}
|
||||
if(ret != ARCHIVE_EOF) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* conflict.c
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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>
|
||||
@@ -50,8 +50,10 @@ static alpm_conflict_t *conflict_new(alpm_pkg_t *pkg1, alpm_pkg_t *pkg2,
|
||||
|
||||
CALLOC(conflict, 1, sizeof(alpm_conflict_t), return NULL);
|
||||
|
||||
ASSERT(_alpm_pkg_dup(pkg1, &conflict->package1) == 0, goto error);
|
||||
ASSERT(_alpm_pkg_dup(pkg2, &conflict->package2) == 0, goto error);
|
||||
conflict->package1_hash = pkg1->name_hash;
|
||||
conflict->package2_hash = pkg2->name_hash;
|
||||
STRDUP(conflict->package1, pkg1->name, goto error);
|
||||
STRDUP(conflict->package2, pkg2->name, goto error);
|
||||
conflict->reason = reason;
|
||||
|
||||
return conflict;
|
||||
@@ -64,9 +66,8 @@ error:
|
||||
void SYMEXPORT alpm_conflict_free(alpm_conflict_t *conflict)
|
||||
{
|
||||
ASSERT(conflict != NULL, return);
|
||||
_alpm_pkg_free(conflict->package1);
|
||||
_alpm_pkg_free(conflict->package2);
|
||||
|
||||
FREE(conflict->package2);
|
||||
FREE(conflict->package1);
|
||||
FREE(conflict);
|
||||
}
|
||||
|
||||
@@ -78,8 +79,10 @@ alpm_conflict_t *_alpm_conflict_dup(const alpm_conflict_t *conflict)
|
||||
alpm_conflict_t *newconflict;
|
||||
CALLOC(newconflict, 1, sizeof(alpm_conflict_t), return NULL);
|
||||
|
||||
ASSERT(_alpm_pkg_dup(conflict->package1, &newconflict->package1) == 0, goto error);
|
||||
ASSERT(_alpm_pkg_dup(conflict->package2, &newconflict->package2) == 0, goto error);
|
||||
newconflict->package1_hash = conflict->package1_hash;
|
||||
newconflict->package2_hash = conflict->package2_hash;
|
||||
STRDUP(newconflict->package1, conflict->package1, goto error);
|
||||
STRDUP(newconflict->package2, conflict->package2, goto error);
|
||||
newconflict->reason = conflict->reason;
|
||||
|
||||
return newconflict;
|
||||
@@ -102,10 +105,10 @@ static int conflict_isin(alpm_conflict_t *needle, alpm_list_t *haystack)
|
||||
alpm_list_t *i;
|
||||
for(i = haystack; i; i = i->next) {
|
||||
alpm_conflict_t *conflict = i->data;
|
||||
if(needle->package1->name_hash == conflict->package1->name_hash
|
||||
&& needle->package2->name_hash == conflict->package2->name_hash
|
||||
&& strcmp(needle->package1->name, conflict->package1->name) == 0
|
||||
&& strcmp(needle->package2->name, conflict->package2->name) == 0) {
|
||||
if(needle->package1_hash == conflict->package1_hash
|
||||
&& needle->package2_hash == conflict->package2_hash
|
||||
&& strcmp(needle->package1, conflict->package1) == 0
|
||||
&& strcmp(needle->package2, conflict->package2) == 0) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* conflict.h
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* db.c
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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>
|
||||
@@ -131,26 +131,6 @@ int SYMEXPORT alpm_db_unregister(alpm_db_t *db)
|
||||
return 0;
|
||||
}
|
||||
|
||||
alpm_list_t SYMEXPORT *alpm_db_get_cache_servers(const alpm_db_t *db)
|
||||
{
|
||||
ASSERT(db != NULL, return NULL);
|
||||
return db->cache_servers;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_db_set_cache_servers(alpm_db_t *db, alpm_list_t *cache_servers)
|
||||
{
|
||||
alpm_list_t *i;
|
||||
ASSERT(db != NULL, return -1);
|
||||
FREELIST(db->cache_servers);
|
||||
for(i = cache_servers; i; i = i->next) {
|
||||
char *url = i->data;
|
||||
if(alpm_db_add_cache_server(db, url) != 0) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
alpm_list_t SYMEXPORT *alpm_db_get_servers(const alpm_db_t *db)
|
||||
{
|
||||
ASSERT(db != NULL, return NULL);
|
||||
@@ -184,25 +164,6 @@ static char *sanitize_url(const char *url)
|
||||
return newurl;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_db_add_cache_server(alpm_db_t *db, const char *url)
|
||||
{
|
||||
char *newurl;
|
||||
|
||||
/* Sanity checks */
|
||||
ASSERT(db != NULL, return -1);
|
||||
db->handle->pm_errno = ALPM_ERR_OK;
|
||||
ASSERT(url != NULL && strlen(url) != 0, RET_ERR(db->handle, ALPM_ERR_WRONG_ARGS, -1));
|
||||
|
||||
newurl = sanitize_url(url);
|
||||
ASSERT(newurl != NULL, RET_ERR(db->handle, ALPM_ERR_MEMORY, -1));
|
||||
|
||||
db->cache_servers = alpm_list_add(db->cache_servers, newurl);
|
||||
_alpm_log(db->handle, ALPM_LOG_DEBUG, "adding new cache server URL to database '%s': %s\n",
|
||||
db->treename, newurl);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_db_add_server(alpm_db_t *db, const char *url)
|
||||
{
|
||||
char *newurl;
|
||||
@@ -213,8 +174,9 @@ int SYMEXPORT alpm_db_add_server(alpm_db_t *db, const char *url)
|
||||
ASSERT(url != NULL && strlen(url) != 0, RET_ERR(db->handle, ALPM_ERR_WRONG_ARGS, -1));
|
||||
|
||||
newurl = sanitize_url(url);
|
||||
ASSERT(newurl != NULL, RET_ERR(db->handle, ALPM_ERR_MEMORY, -1));
|
||||
|
||||
if(!newurl) {
|
||||
return -1;
|
||||
}
|
||||
db->servers = alpm_list_add(db->servers, newurl);
|
||||
_alpm_log(db->handle, ALPM_LOG_DEBUG, "adding new server URL to database '%s': %s\n",
|
||||
db->treename, newurl);
|
||||
@@ -222,32 +184,6 @@ int SYMEXPORT alpm_db_add_server(alpm_db_t *db, const char *url)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_db_remove_cache_server(alpm_db_t *db, const char *url)
|
||||
{
|
||||
char *newurl, *vdata = NULL;
|
||||
int ret = 1;
|
||||
|
||||
/* Sanity checks */
|
||||
ASSERT(db != NULL, return -1);
|
||||
db->handle->pm_errno = ALPM_ERR_OK;
|
||||
ASSERT(url != NULL && strlen(url) != 0, RET_ERR(db->handle, ALPM_ERR_WRONG_ARGS, -1));
|
||||
|
||||
newurl = sanitize_url(url);
|
||||
ASSERT(newurl != NULL, RET_ERR(db->handle, ALPM_ERR_MEMORY, -1));
|
||||
|
||||
db->cache_servers = alpm_list_remove_str(db->cache_servers, newurl, &vdata);
|
||||
|
||||
if(vdata) {
|
||||
_alpm_log(db->handle, ALPM_LOG_DEBUG, "removed cache server URL from database '%s': %s\n",
|
||||
db->treename, newurl);
|
||||
free(vdata);
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
free(newurl);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_db_remove_server(alpm_db_t *db, const char *url)
|
||||
{
|
||||
char *newurl, *vdata = NULL;
|
||||
@@ -259,7 +195,9 @@ int SYMEXPORT alpm_db_remove_server(alpm_db_t *db, const char *url)
|
||||
ASSERT(url != NULL && strlen(url) != 0, RET_ERR(db->handle, ALPM_ERR_WRONG_ARGS, -1));
|
||||
|
||||
newurl = sanitize_url(url);
|
||||
ASSERT(newurl != NULL, RET_ERR(db->handle, ALPM_ERR_MEMORY, -1));
|
||||
if(!newurl) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
db->servers = alpm_list_remove_str(db->servers, newurl, &vdata);
|
||||
|
||||
@@ -274,12 +212,6 @@ int SYMEXPORT alpm_db_remove_server(alpm_db_t *db, const char *url)
|
||||
return ret;
|
||||
}
|
||||
|
||||
alpm_handle_t SYMEXPORT *alpm_db_get_handle(alpm_db_t *db)
|
||||
{
|
||||
ASSERT(db != NULL, return NULL);
|
||||
return db->handle;
|
||||
}
|
||||
|
||||
const char SYMEXPORT *alpm_db_get_name(const alpm_db_t *db)
|
||||
{
|
||||
ASSERT(db != NULL, return NULL);
|
||||
@@ -390,7 +322,6 @@ void _alpm_db_free(alpm_db_t *db)
|
||||
/* cleanup pkgcache */
|
||||
_alpm_db_free_pkgcache(db);
|
||||
/* cleanup server list */
|
||||
FREELIST(db->cache_servers);
|
||||
FREELIST(db->servers);
|
||||
FREE(db->_path);
|
||||
FREE(db->treename);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* db.h
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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>
|
||||
@@ -62,14 +62,13 @@ struct db_operations {
|
||||
};
|
||||
|
||||
/* Database */
|
||||
struct _alpm_db_t {
|
||||
struct __alpm_db_t {
|
||||
alpm_handle_t *handle;
|
||||
char *treename;
|
||||
/* do not access directly, use _alpm_db_path(db) for lazy access */
|
||||
char *_path;
|
||||
alpm_pkghash_t *pkgcache;
|
||||
alpm_list_t *grpcache;
|
||||
alpm_list_t *cache_servers;
|
||||
alpm_list_t *servers;
|
||||
const struct db_operations *ops;
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* deps.c
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* deps.h
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* diskspace.c
|
||||
*
|
||||
* Copyright (c) 2010-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2010-2021 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
|
||||
@@ -111,10 +111,6 @@ static alpm_list_t *mount_point_list(alpm_handle_t *handle)
|
||||
}
|
||||
|
||||
while((mnt = getmntent(fp))) {
|
||||
if(mnt->mnt_dir == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
CALLOC(mp, 1, sizeof(alpm_mountpoint_t), RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
|
||||
STRDUP(mp->mount_dir, mnt->mnt_dir, free(mp); RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
|
||||
mp->mount_dir_len = strlen(mp->mount_dir);
|
||||
@@ -138,10 +134,6 @@ static alpm_list_t *mount_point_list(alpm_handle_t *handle)
|
||||
}
|
||||
|
||||
while((ret = getmntent(fp, &mnt)) == 0) {
|
||||
if(mnt->mnt_mountp == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
CALLOC(mp, 1, sizeof(alpm_mountpoint_t), RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
|
||||
STRDUP(mp->mount_dir, mnt->mnt_mountp, free(mp); RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
|
||||
mp->mount_dir_len = strlen(mp->mount_dir);
|
||||
@@ -169,10 +161,6 @@ static alpm_list_t *mount_point_list(alpm_handle_t *handle)
|
||||
}
|
||||
|
||||
for(; entries-- > 0; fsp++) {
|
||||
if(fsp->f_mntonname == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
CALLOC(mp, 1, sizeof(alpm_mountpoint_t), RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
|
||||
STRDUP(mp->mount_dir, fsp->f_mntonname, free(mp); RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
|
||||
mp->mount_dir_len = strlen(mp->mount_dir);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* diskspace.h
|
||||
*
|
||||
* Copyright (c) 2010-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2010-2021 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
|
||||
@@ -43,7 +43,7 @@ enum mount_fsinfo {
|
||||
MOUNT_FSINFO_FAIL,
|
||||
};
|
||||
|
||||
typedef struct _alpm_mountpoint_t {
|
||||
typedef struct __alpm_mountpoint_t {
|
||||
/* mount point information */
|
||||
char *mount_dir;
|
||||
size_t mount_dir_len;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* dload.c
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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
|
||||
@@ -28,9 +28,7 @@
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/wait.h>
|
||||
#include <signal.h>
|
||||
#include <pwd.h>
|
||||
|
||||
#ifdef HAVE_NETINET_IN_H
|
||||
#include <netinet/in.h> /* IPPROTO_TCP */
|
||||
@@ -50,145 +48,6 @@
|
||||
#include "log.h"
|
||||
#include "util.h"
|
||||
#include "handle.h"
|
||||
#include "sandbox.h"
|
||||
|
||||
|
||||
static const char *get_filename(const char *url)
|
||||
{
|
||||
char *filename = strrchr(url, '/');
|
||||
if(filename != NULL) {
|
||||
return filename + 1;
|
||||
}
|
||||
|
||||
/* no slash found, it's a filename */
|
||||
return url;
|
||||
}
|
||||
|
||||
/* prefix to avoid possible future clash with getumask(3) */
|
||||
static mode_t _getumask(void)
|
||||
{
|
||||
mode_t mask = umask(0);
|
||||
umask(mask);
|
||||
return mask;
|
||||
}
|
||||
|
||||
static int touch_and_own_file(const char *filename, const char *user)
|
||||
{
|
||||
int fd;
|
||||
struct passwd const *pw = NULL;
|
||||
|
||||
ASSERT(filename != NULL, return -1);
|
||||
ASSERT(user != NULL, return -1);
|
||||
|
||||
ASSERT((fd = open(filename, O_CREAT | O_WRONLY, 0644)) != -1, return -1);
|
||||
close(fd);
|
||||
|
||||
ASSERT((pw = getpwnam(user)) != NULL, return -1);
|
||||
ASSERT(chown(filename, pw->pw_uid, pw->pw_gid) != -1, return -1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int intialize_download_file(struct dload_payload *p)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
ret = touch_and_own_file(p->tempfile_name, p->handle->sandboxuser);
|
||||
|
||||
if(ret == 0 && p->download_signature) {
|
||||
int len = strlen(p->destfile_name) + strlen(".sig") + strlen(".part") + 1;
|
||||
char * sig;
|
||||
MALLOC(sig, len, FREE(sig); RET_ERR(p->handle, ALPM_ERR_MEMORY, -1));
|
||||
snprintf(sig, len, "%s.sig.part", p->destfile_name);
|
||||
ret = touch_and_own_file(sig, p->handle->sandboxuser);
|
||||
free(sig);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int unlink_or_move(const char *file, const char* dest) {
|
||||
struct stat st;
|
||||
|
||||
ASSERT(stat(file, &st) == 0, return -1);
|
||||
|
||||
if(st.st_size == 0) {
|
||||
unlink(file);
|
||||
} else {
|
||||
ASSERT(chown(file, 0, 0) != -1, return -1);
|
||||
if(rename(file, dest)) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int finalize_download_file(struct dload_payload *p)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
ret = unlink_or_move(p->tempfile_name, p->destfile_name);
|
||||
|
||||
if(ret == -1) {
|
||||
_alpm_log(p->handle, ALPM_LOG_ERROR, _("could not rename %s to %s (%s)\n"),
|
||||
p->tempfile_name, p->destfile_name, strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(p->download_signature) {
|
||||
char *sig_temp, *sig_dest;
|
||||
int len = strlen(p->destfile_name) + strlen(".sig") + 1;
|
||||
MALLOC(sig_dest, len, RET_ERR(p->handle, ALPM_ERR_MEMORY, -1));
|
||||
snprintf(sig_dest, len, "%s.sig", p->destfile_name);
|
||||
len = len + 5;
|
||||
MALLOC(sig_temp, len, FREE(sig_dest); RET_ERR(p->handle, ALPM_ERR_MEMORY, -1));
|
||||
snprintf(sig_temp, len, "%s.sig.part", p->destfile_name);
|
||||
|
||||
ret = unlink_or_move(sig_temp, sig_dest);
|
||||
if(ret == -1) {
|
||||
_alpm_log(p->handle, ALPM_LOG_ERROR, _("could not rename %s to %s (%s)\n"),
|
||||
sig_temp, sig_dest, strerror(errno));
|
||||
}
|
||||
|
||||
free(sig_dest);
|
||||
free(sig_temp);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static FILE *create_tempfile(struct dload_payload *payload, const char *localpath)
|
||||
{
|
||||
int fd;
|
||||
FILE *fp;
|
||||
char *randpath;
|
||||
size_t len;
|
||||
|
||||
/* create a random filename, which is opened with O_EXCL */
|
||||
len = strlen(localpath) + 14 + 1;
|
||||
MALLOC(randpath, len, RET_ERR(payload->handle, ALPM_ERR_MEMORY, NULL));
|
||||
snprintf(randpath, len, "%salpmtmp.XXXXXX", localpath);
|
||||
if((fd = mkstemp(randpath)) == -1 ||
|
||||
fchmod(fd, ~(_getumask()) & 0666) ||
|
||||
!(fp = fdopen(fd, payload->tempfile_openmode))) {
|
||||
unlink(randpath);
|
||||
close(fd);
|
||||
_alpm_log(payload->handle, ALPM_LOG_ERROR,
|
||||
_("failed to create temporary file for download\n"));
|
||||
free(randpath);
|
||||
return NULL;
|
||||
}
|
||||
/* fp now points to our alpmtmp.XXXXXX */
|
||||
free(payload->tempfile_name);
|
||||
payload->tempfile_name = randpath;
|
||||
free(payload->remote_name);
|
||||
STRDUP(payload->remote_name, strrchr(randpath, '/') + 1,
|
||||
fclose(fp); RET_ERR(payload->handle, ALPM_ERR_MEMORY, NULL));
|
||||
|
||||
return fp;
|
||||
}
|
||||
|
||||
|
||||
#ifdef HAVE_LIBCURL
|
||||
|
||||
@@ -196,16 +55,16 @@ static FILE *create_tempfile(struct dload_payload *payload, const char *localpat
|
||||
#define HOSTNAME_SIZE 256
|
||||
|
||||
static int curl_add_payload(alpm_handle_t *handle, CURLM *curlm,
|
||||
struct dload_payload *payload);
|
||||
struct dload_payload *payload, const char *localpath);
|
||||
static int curl_gethost(const char *url, char *buffer, size_t buf_len);
|
||||
|
||||
/* number of "soft" errors required to blacklist a server, set to 0 to disable
|
||||
* server blacklisting */
|
||||
const int server_error_limit = 3;
|
||||
const unsigned int server_error_limit = 3;
|
||||
|
||||
struct server_error_count {
|
||||
char server[HOSTNAME_SIZE];
|
||||
int errors;
|
||||
unsigned int errors;
|
||||
};
|
||||
|
||||
static struct server_error_count *find_server_errors(alpm_handle_t *handle, const char *server)
|
||||
@@ -235,34 +94,22 @@ static struct server_error_count *find_server_errors(alpm_handle_t *handle, cons
|
||||
}
|
||||
}
|
||||
|
||||
/* skip for hard errors or too many soft errors */
|
||||
static int should_skip_server(alpm_handle_t *handle, const char *server)
|
||||
{
|
||||
struct server_error_count *h;
|
||||
if(server_error_limit && (h = find_server_errors(handle, server)) ) {
|
||||
return h->errors < 0 || h->errors >= server_error_limit;
|
||||
return h->errors >= server_error_limit;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* only skip for hard errors */
|
||||
static int should_skip_cache_server(alpm_handle_t *handle, const char *server)
|
||||
{
|
||||
struct server_error_count *h;
|
||||
if(server_error_limit && (h = find_server_errors(handle, server)) ) {
|
||||
return h->errors < 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* block normal servers after too many errors */
|
||||
static void server_soft_error(alpm_handle_t *handle, const char *server)
|
||||
static void server_increment_error(alpm_handle_t *handle, const char *server, int count)
|
||||
{
|
||||
struct server_error_count *h;
|
||||
if(server_error_limit
|
||||
&& (h = find_server_errors(handle, server))
|
||||
&& !should_skip_server(handle, server) ) {
|
||||
h->errors++;
|
||||
h->errors += count;
|
||||
|
||||
if(should_skip_server(handle, server)) {
|
||||
_alpm_log(handle, ALPM_LOG_WARNING,
|
||||
@@ -272,50 +119,42 @@ static void server_soft_error(alpm_handle_t *handle, const char *server)
|
||||
}
|
||||
}
|
||||
|
||||
/* immediate block for both servers and cache servers */
|
||||
static void server_hard_error(alpm_handle_t *handle, const char *server)
|
||||
static void server_soft_error(alpm_handle_t *handle, const char *server)
|
||||
{
|
||||
struct server_error_count *h;
|
||||
if(server_error_limit && (h = find_server_errors(handle, server))) {
|
||||
if(h->errors != -1) {
|
||||
/* always set even if already skipped for soft errors
|
||||
* to disable cache servers too */
|
||||
h->errors = -1;
|
||||
|
||||
_alpm_log(handle, ALPM_LOG_WARNING,
|
||||
_("fatal error from %s, skipping for the remainder of this transaction\n"),
|
||||
h->server);
|
||||
}
|
||||
}
|
||||
server_increment_error(handle, server, 1);
|
||||
}
|
||||
|
||||
static const char *payload_next_server(struct dload_payload *payload)
|
||||
static void server_hard_error(alpm_handle_t *handle, const char *server)
|
||||
{
|
||||
while(payload->cache_servers
|
||||
&& should_skip_cache_server(payload->handle, payload->cache_servers->data)) {
|
||||
payload->cache_servers = payload->cache_servers->next;
|
||||
server_increment_error(handle, server, server_error_limit);
|
||||
}
|
||||
|
||||
static const char *get_filename(const char *url)
|
||||
{
|
||||
char *filename = strrchr(url, '/');
|
||||
if(filename != NULL) {
|
||||
return filename + 1;
|
||||
}
|
||||
if(payload->cache_servers) {
|
||||
const char *server = payload->cache_servers->data;
|
||||
payload->cache_servers = payload->cache_servers->next;
|
||||
payload->request_errors_ok = 1;
|
||||
return server;
|
||||
}
|
||||
while(payload->servers
|
||||
&& should_skip_server(payload->handle, payload->servers->data)) {
|
||||
payload->servers = payload->servers->next;
|
||||
}
|
||||
if(payload->servers) {
|
||||
const char *server = payload->servers->data;
|
||||
payload->servers = payload->servers->next;
|
||||
payload->request_errors_ok = payload->errors_ok;
|
||||
return server;
|
||||
}
|
||||
return NULL;
|
||||
|
||||
/* no slash found, it's a filename */
|
||||
return url;
|
||||
}
|
||||
|
||||
static char *get_fullpath(const char *path, const char *filename,
|
||||
const char *suffix)
|
||||
{
|
||||
char *filepath;
|
||||
/* len = localpath len + filename len + suffix len + null */
|
||||
size_t len = strlen(path) + strlen(filename) + strlen(suffix) + 1;
|
||||
MALLOC(filepath, len, return NULL);
|
||||
snprintf(filepath, len, "%s%s%s", path, filename, suffix);
|
||||
|
||||
return filepath;
|
||||
}
|
||||
|
||||
enum {
|
||||
ABORT_OVER_MAXFILESIZE = 1,
|
||||
ABORT_SIGINT = 1,
|
||||
ABORT_OVER_MAXFILESIZE
|
||||
};
|
||||
|
||||
static int dload_interrupted;
|
||||
@@ -424,12 +263,45 @@ static int utimes_long(const char *path, long seconds)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* prefix to avoid possible future clash with getumask(3) */
|
||||
static mode_t _getumask(void)
|
||||
{
|
||||
mode_t mask = umask(0);
|
||||
umask(mask);
|
||||
return mask;
|
||||
}
|
||||
|
||||
static size_t dload_parseheader_cb(void *ptr, size_t size, size_t nmemb, void *user)
|
||||
{
|
||||
size_t realsize = size * nmemb;
|
||||
const char *fptr, *endptr = NULL;
|
||||
const char * const cd_header = "Content-Disposition:";
|
||||
const char * const fn_key = "filename=";
|
||||
struct dload_payload *payload = (struct dload_payload *)user;
|
||||
long respcode;
|
||||
(void) ptr;
|
||||
|
||||
if(_alpm_raw_ncmp(cd_header, ptr, strlen(cd_header)) == 0) {
|
||||
if((fptr = strstr(ptr, fn_key))) {
|
||||
fptr += strlen(fn_key);
|
||||
|
||||
/* find the end of the field, which is either a semi-colon, or the end of
|
||||
* the data. As per curl_easy_setopt(3), we cannot count on headers being
|
||||
* null terminated, so we look for the closing \r\n */
|
||||
endptr = fptr + strcspn(fptr, ";\r\n") - 1;
|
||||
|
||||
/* remove quotes */
|
||||
if(*fptr == '"' && *endptr == '"') {
|
||||
fptr++;
|
||||
endptr--;
|
||||
}
|
||||
|
||||
/* avoid information leakage with badly formed headers */
|
||||
if(endptr > fptr) {
|
||||
STRNDUP(payload->content_disp_name, fptr, endptr - fptr + 1,
|
||||
RET_ERR(payload->handle, ALPM_ERR_MEMORY, realsize));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
curl_easy_getinfo(payload->curl, CURLINFO_RESPONSE_CODE, &respcode);
|
||||
if(payload->respcode != respcode) {
|
||||
@@ -503,28 +375,62 @@ static void curl_set_handle_opts(CURL *curl, struct dload_payload *payload)
|
||||
}
|
||||
}
|
||||
|
||||
static FILE *create_tempfile(struct dload_payload *payload, const char *localpath)
|
||||
{
|
||||
int fd;
|
||||
FILE *fp;
|
||||
char *randpath;
|
||||
size_t len;
|
||||
|
||||
/* create a random filename, which is opened with O_EXCL */
|
||||
len = strlen(localpath) + 14 + 1;
|
||||
MALLOC(randpath, len, RET_ERR(payload->handle, ALPM_ERR_MEMORY, NULL));
|
||||
snprintf(randpath, len, "%salpmtmp.XXXXXX", localpath);
|
||||
if((fd = mkstemp(randpath)) == -1 ||
|
||||
fchmod(fd, ~(_getumask()) & 0666) ||
|
||||
!(fp = fdopen(fd, payload->tempfile_openmode))) {
|
||||
unlink(randpath);
|
||||
close(fd);
|
||||
_alpm_log(payload->handle, ALPM_LOG_ERROR,
|
||||
_("failed to create temporary file for download\n"));
|
||||
free(randpath);
|
||||
return NULL;
|
||||
}
|
||||
/* fp now points to our alpmtmp.XXXXXX */
|
||||
free(payload->tempfile_name);
|
||||
payload->tempfile_name = randpath;
|
||||
free(payload->remote_name);
|
||||
STRDUP(payload->remote_name, strrchr(randpath, '/') + 1,
|
||||
fclose(fp); RET_ERR(payload->handle, ALPM_ERR_MEMORY, NULL));
|
||||
|
||||
return fp;
|
||||
}
|
||||
|
||||
/* Return 0 if retry was successful, -1 otherwise */
|
||||
static int curl_retry_next_server(CURLM *curlm, CURL *curl, struct dload_payload *payload)
|
||||
{
|
||||
const char *server = NULL;
|
||||
const char *server;
|
||||
size_t len;
|
||||
struct stat st;
|
||||
alpm_handle_t *handle = payload->handle;
|
||||
|
||||
if((server = payload_next_server(payload)) == NULL) {
|
||||
while(payload->servers && should_skip_server(handle, payload->servers->data)) {
|
||||
payload->servers = payload->servers->next;
|
||||
}
|
||||
if(!payload->servers) {
|
||||
_alpm_log(payload->handle, ALPM_LOG_DEBUG,
|
||||
"%s: no more servers to retry\n", payload->remote_name);
|
||||
return -1;
|
||||
}
|
||||
server = payload->servers->data;
|
||||
payload->servers = payload->servers->next;
|
||||
|
||||
/* regenerate a new fileurl */
|
||||
FREE(payload->fileurl);
|
||||
len = strlen(server) + strlen(payload->filepath) + 2;
|
||||
MALLOC(payload->fileurl, len, RET_ERR(handle, ALPM_ERR_MEMORY, -1));
|
||||
snprintf(payload->fileurl, len, "%s/%s", server, payload->filepath);
|
||||
_alpm_log(handle, ALPM_LOG_DEBUG,
|
||||
"%s: retrying from %s\n",
|
||||
payload->remote_name, payload->fileurl);
|
||||
|
||||
|
||||
fflush(payload->localf);
|
||||
|
||||
@@ -565,9 +471,10 @@ static int curl_retry_next_server(CURLM *curlm, CURL *curl, struct dload_payload
|
||||
* Returns -1 if an error happened for a required file
|
||||
* Returns -2 if an error happened for an optional file
|
||||
*/
|
||||
static int curl_check_finished_download(alpm_handle_t *handle, CURLM *curlm, CURLMsg *msg,
|
||||
int *active_downloads_num)
|
||||
static int curl_check_finished_download(CURLM *curlm, CURLMsg *msg,
|
||||
const char *localpath, int *active_downloads_num)
|
||||
{
|
||||
alpm_handle_t *handle = NULL;
|
||||
struct dload_payload *payload = NULL;
|
||||
CURL *curl = msg->easy_handle;
|
||||
CURLcode curlerr;
|
||||
@@ -582,11 +489,12 @@ static int curl_check_finished_download(alpm_handle_t *handle, CURLM *curlm, CUR
|
||||
|
||||
curlerr = curl_easy_getinfo(curl, CURLINFO_PRIVATE, &payload);
|
||||
ASSERT(curlerr == CURLE_OK, RET_ERR(handle, ALPM_ERR_LIBCURL, -1));
|
||||
handle = payload->handle;
|
||||
|
||||
curl_gethost(payload->fileurl, hostname, sizeof(hostname));
|
||||
curlerr = msg->data.result;
|
||||
_alpm_log(handle, ALPM_LOG_DEBUG, "%s: %s returned result %d from transfer\n",
|
||||
payload->remote_name, "curl", curlerr);
|
||||
_alpm_log(handle, ALPM_LOG_DEBUG, "%s: curl returned result %d from transfer\n",
|
||||
payload->remote_name, curlerr);
|
||||
|
||||
/* was it a success? */
|
||||
switch(curlerr) {
|
||||
@@ -595,7 +503,7 @@ static int curl_check_finished_download(alpm_handle_t *handle, CURLM *curlm, CUR
|
||||
_alpm_log(handle, ALPM_LOG_DEBUG, "%s: response code %ld\n",
|
||||
payload->remote_name, payload->respcode);
|
||||
if(payload->respcode >= 400) {
|
||||
if(!payload->request_errors_ok) {
|
||||
if(!payload->errors_ok) {
|
||||
handle->pm_errno = ALPM_ERR_RETRIEVE;
|
||||
/* non-translated message is same as libcurl */
|
||||
snprintf(payload->error_buffer, sizeof(payload->error_buffer),
|
||||
@@ -650,7 +558,7 @@ static int curl_check_finished_download(alpm_handle_t *handle, CURLM *curlm, CUR
|
||||
goto cleanup;
|
||||
}
|
||||
default:
|
||||
if(!payload->request_errors_ok) {
|
||||
if(!payload->errors_ok) {
|
||||
handle->pm_errno = ALPM_ERR_LIBCURL;
|
||||
_alpm_log(handle, ALPM_LOG_ERROR,
|
||||
_("failed retrieving file '%s' from %s : %s\n"),
|
||||
@@ -680,6 +588,31 @@ static int curl_check_finished_download(alpm_handle_t *handle, CURLM *curlm, CUR
|
||||
curl_easy_getinfo(curl, CURLINFO_CONDITION_UNMET, &timecond);
|
||||
curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &effective_url);
|
||||
|
||||
if(payload->trust_remote_name) {
|
||||
if(payload->content_disp_name) {
|
||||
/* content-disposition header has a better name for our file */
|
||||
free(payload->destfile_name);
|
||||
payload->destfile_name = get_fullpath(localpath,
|
||||
get_filename(payload->content_disp_name), "");
|
||||
} else {
|
||||
const char *effective_filename = strrchr(effective_url, '/');
|
||||
|
||||
if(effective_filename && strlen(effective_filename) > 2) {
|
||||
effective_filename++;
|
||||
|
||||
/* if destfile was never set, we wrote to a tempfile. even if destfile is
|
||||
* set, we may have followed some redirects and the effective url may
|
||||
* have a better suggestion as to what to name our file. in either case,
|
||||
* refactor destfile to this newly derived name. */
|
||||
if(!payload->destfile_name || strcmp(effective_filename,
|
||||
strrchr(payload->destfile_name, '/') + 1) != 0) {
|
||||
free(payload->destfile_name);
|
||||
payload->destfile_name = get_fullpath(localpath, effective_filename, "");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Let's check if client requested downloading accompanion *.sig file */
|
||||
if(!payload->signature && payload->download_signature && curlerr == CURLE_OK && payload->respcode < 400) {
|
||||
struct dload_payload *sig = NULL;
|
||||
@@ -711,23 +644,22 @@ static int curl_check_finished_download(alpm_handle_t *handle, CURLM *curlm, CUR
|
||||
MALLOC(sig->fileurl, len, FREE(sig); GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
|
||||
snprintf(sig->fileurl, len, "%s.sig", url);
|
||||
|
||||
int remote_name_len = strlen(payload->remote_name) + 5;
|
||||
MALLOC(sig->remote_name, remote_name_len, _alpm_dload_payload_reset(sig);
|
||||
FREE(sig); GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
|
||||
snprintf(sig->remote_name, remote_name_len, "%s.sig", payload->remote_name);
|
||||
if(payload->trust_remote_name) {
|
||||
/* In this case server might provide a new name for the main payload.
|
||||
* Choose *.sig filename based on this new name.
|
||||
*/
|
||||
const char *final_file = get_filename(realname);
|
||||
int remote_name_len = strlen(final_file) + 5;
|
||||
MALLOC(sig->remote_name, remote_name_len, FREE(sig->fileurl); FREE(sig); GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
|
||||
snprintf(sig->remote_name, remote_name_len, "%s.sig", final_file);
|
||||
}
|
||||
|
||||
/* force the filename to be realname + ".sig" */
|
||||
int destfile_name_len = strlen(realname) + 5;
|
||||
MALLOC(sig->destfile_name, destfile_name_len, _alpm_dload_payload_reset(sig);
|
||||
FREE(sig); GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
|
||||
MALLOC(sig->destfile_name, destfile_name_len, FREE(sig->remote_name);
|
||||
FREE(sig->fileurl); FREE(sig); GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
|
||||
snprintf(sig->destfile_name, destfile_name_len, "%s.sig", realname);
|
||||
|
||||
int tempfile_name_len = strlen(realname) + 10;
|
||||
MALLOC(sig->tempfile_name, tempfile_name_len, _alpm_dload_payload_reset(sig);
|
||||
FREE(sig); GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
|
||||
snprintf(sig->tempfile_name, tempfile_name_len, "%s.sig.part", realname);
|
||||
|
||||
|
||||
sig->signature = 1;
|
||||
sig->handle = handle;
|
||||
sig->force = payload->force;
|
||||
@@ -736,7 +668,7 @@ static int curl_check_finished_download(alpm_handle_t *handle, CURLM *curlm, CUR
|
||||
/* set hard upper limit of 16KiB */
|
||||
sig->max_size = 16 * 1024;
|
||||
|
||||
curl_add_payload(handle, curlm, sig);
|
||||
curl_add_payload(handle, curlm, sig, localpath);
|
||||
(*active_downloads_num)++;
|
||||
}
|
||||
|
||||
@@ -775,7 +707,7 @@ cleanup:
|
||||
}
|
||||
|
||||
if(ret == 0) {
|
||||
if(payload->destfile_name && handle->sandboxuser == NULL) {
|
||||
if(payload->destfile_name) {
|
||||
if(rename(payload->tempfile_name, payload->destfile_name)) {
|
||||
_alpm_log(handle, ALPM_LOG_ERROR, _("could not rename %s to %s (%s)\n"),
|
||||
payload->tempfile_name, payload->destfile_name, strerror(errno));
|
||||
@@ -819,7 +751,7 @@ cleanup:
|
||||
* Returns -1 if am error happened while starting a new download
|
||||
*/
|
||||
static int curl_add_payload(alpm_handle_t *handle, CURLM *curlm,
|
||||
struct dload_payload *payload)
|
||||
struct dload_payload *payload, const char *localpath)
|
||||
{
|
||||
size_t len;
|
||||
CURL *curl = NULL;
|
||||
@@ -832,24 +764,53 @@ static int curl_add_payload(alpm_handle_t *handle, CURLM *curlm,
|
||||
if(payload->fileurl) {
|
||||
ASSERT(!payload->servers, GOTO_ERR(handle, ALPM_ERR_WRONG_ARGS, cleanup));
|
||||
ASSERT(!payload->filepath, GOTO_ERR(handle, ALPM_ERR_WRONG_ARGS, cleanup));
|
||||
payload->request_errors_ok = payload->errors_ok;
|
||||
} else {
|
||||
const char *server = payload_next_server(payload);
|
||||
const char *server;
|
||||
while(payload->servers && should_skip_server(handle, payload->servers->data)) {
|
||||
payload->servers = payload->servers->next;
|
||||
}
|
||||
|
||||
ASSERT(server, GOTO_ERR(handle, ALPM_ERR_SERVER_NONE, cleanup));
|
||||
ASSERT(payload->servers, GOTO_ERR(handle, ALPM_ERR_SERVER_NONE, cleanup));
|
||||
ASSERT(payload->filepath, GOTO_ERR(handle, ALPM_ERR_WRONG_ARGS, cleanup));
|
||||
|
||||
server = payload->servers->data;
|
||||
payload->servers = payload->servers->next;
|
||||
|
||||
len = strlen(server) + strlen(payload->filepath) + 2;
|
||||
MALLOC(payload->fileurl, len, GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
|
||||
snprintf(payload->fileurl, len, "%s/%s", server, payload->filepath);
|
||||
}
|
||||
|
||||
payload->tempfile_openmode = "wb";
|
||||
if(!payload->remote_name) {
|
||||
STRDUP(payload->remote_name, get_filename(payload->fileurl),
|
||||
GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
|
||||
}
|
||||
if(curl_gethost(payload->fileurl, hostname, sizeof(hostname)) != 0) {
|
||||
_alpm_log(handle, ALPM_LOG_ERROR, _("url '%s' is invalid\n"), payload->fileurl);
|
||||
GOTO_ERR(handle, ALPM_ERR_SERVER_BAD_URL, cleanup);
|
||||
}
|
||||
|
||||
if(!payload->random_partfile && payload->remote_name && strlen(payload->remote_name) > 0) {
|
||||
if(!payload->destfile_name) {
|
||||
payload->destfile_name = get_fullpath(localpath, payload->remote_name, "");
|
||||
}
|
||||
payload->tempfile_name = get_fullpath(localpath, payload->remote_name, ".part");
|
||||
if(!payload->destfile_name || !payload->tempfile_name) {
|
||||
goto cleanup;
|
||||
}
|
||||
} else {
|
||||
/* We want a random filename or the URL does not contain a filename, so download to a
|
||||
* temporary location. We can not support resuming this kind of download; any partial
|
||||
* transfers will be destroyed */
|
||||
payload->unlink_on_fail = 1;
|
||||
|
||||
payload->localf = create_tempfile(payload, localpath);
|
||||
if(payload->localf == NULL) {
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
curl_set_handle_opts(curl, payload);
|
||||
|
||||
if(payload->max_size == payload->initial_size && payload->max_size != 0) {
|
||||
@@ -907,7 +868,8 @@ static int compare_dload_payload_sizes(const void *left_ptr, const void *right_p
|
||||
* Returns 1 if no files were downloaded and all errors were non-fatal
|
||||
*/
|
||||
static int curl_download_internal(alpm_handle_t *handle,
|
||||
alpm_list_t *payloads /* struct dload_payload */)
|
||||
alpm_list_t *payloads /* struct dload_payload */,
|
||||
const char *localpath)
|
||||
{
|
||||
int active_downloads_num = 0;
|
||||
int err = 0;
|
||||
@@ -925,7 +887,7 @@ static int curl_download_internal(alpm_handle_t *handle,
|
||||
for(; active_downloads_num < max_streams && payloads; active_downloads_num++) {
|
||||
struct dload_payload *payload = payloads->data;
|
||||
|
||||
if(curl_add_payload(handle, curlm, payload) == 0) {
|
||||
if(curl_add_payload(handle, curlm, payload, localpath) == 0) {
|
||||
payloads = payloads->next;
|
||||
} else {
|
||||
/* The payload failed to start. Do not start any new downloads.
|
||||
@@ -955,8 +917,8 @@ static int curl_download_internal(alpm_handle_t *handle,
|
||||
break;
|
||||
}
|
||||
if(msg->msg == CURLMSG_DONE) {
|
||||
int ret = curl_check_finished_download(handle, curlm, msg,
|
||||
&active_downloads_num);
|
||||
int ret = curl_check_finished_download(curlm, msg,
|
||||
localpath, &active_downloads_num);
|
||||
if(ret == -1) {
|
||||
/* if current payload failed to download then stop adding new payloads but wait for the
|
||||
* current ones
|
||||
@@ -976,177 +938,8 @@ static int curl_download_internal(alpm_handle_t *handle,
|
||||
return err ? -1 : updated ? 0 : 1;
|
||||
}
|
||||
|
||||
/* Download the requested files by launching a process inside a sandbox.
|
||||
* Returns -1 if an error happened for a required file
|
||||
* Returns 0 if a payload was actually downloaded
|
||||
* Returns 1 if no files were downloaded and all errors were non-fatal
|
||||
*/
|
||||
static int curl_download_internal_sandboxed(alpm_handle_t *handle,
|
||||
alpm_list_t *payloads /* struct dload_payload */,
|
||||
const char *localpath)
|
||||
{
|
||||
int pid, err = 0, ret = -1, callbacks_fd[2];
|
||||
sigset_t oldblock;
|
||||
struct sigaction sa_ign, oldint, oldquit;
|
||||
_alpm_sandbox_callback_context callbacks_ctx;
|
||||
|
||||
sigemptyset(&sa_ign.sa_mask);
|
||||
sa_ign.sa_handler = SIG_IGN;
|
||||
sa_ign.sa_flags=0;
|
||||
|
||||
if(pipe(callbacks_fd) != 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
sigaction(SIGINT, &sa_ign, &oldint);
|
||||
sigaction(SIGQUIT, &sa_ign, &oldquit);
|
||||
sigaddset(&sa_ign.sa_mask, SIGCHLD);
|
||||
sigprocmask(SIG_BLOCK, &sa_ign.sa_mask, &oldblock);
|
||||
|
||||
pid = fork();
|
||||
if(pid == -1) {
|
||||
/* fork failed, make sure errno is preserved after cleanup */
|
||||
err = errno;
|
||||
}
|
||||
|
||||
/* child */
|
||||
if(pid == 0) {
|
||||
close(callbacks_fd[0]);
|
||||
fcntl(callbacks_fd[1], F_SETFD, FD_CLOEXEC);
|
||||
callbacks_ctx.callback_pipe = callbacks_fd[1];
|
||||
alpm_option_set_logcb(handle, _alpm_sandbox_cb_log, &callbacks_ctx);
|
||||
alpm_option_set_dlcb(handle, _alpm_sandbox_cb_dl, &callbacks_ctx);
|
||||
alpm_option_set_fetchcb(handle, NULL, NULL);
|
||||
alpm_option_set_eventcb(handle, NULL, NULL);
|
||||
alpm_option_set_questioncb(handle, NULL, NULL);
|
||||
alpm_option_set_progresscb(handle, NULL, NULL);
|
||||
|
||||
/* restore default signal handling in the child */
|
||||
_alpm_reset_signals();
|
||||
|
||||
/* cwd to the download directory */
|
||||
ret = chdir(localpath);
|
||||
if(ret != 0) {
|
||||
handle->pm_errno = errno;
|
||||
_alpm_log(handle, ALPM_LOG_ERROR, _("could not chdir to download directory %s\n"), localpath);
|
||||
ret = -1;
|
||||
} else {
|
||||
ret = alpm_sandbox_setup_child(handle->sandboxuser);
|
||||
if (ret != 0) {
|
||||
_alpm_log(handle, ALPM_LOG_ERROR, _("switching to sandbox user '%s' failed!\n"), handle->sandboxuser);
|
||||
_Exit(ret | 128);
|
||||
}
|
||||
|
||||
ret = curl_download_internal(handle, payloads);
|
||||
}
|
||||
|
||||
/* pass the result back to the parent */
|
||||
if(ret == 0) {
|
||||
/* a payload was actually downloaded */
|
||||
_Exit(0);
|
||||
}
|
||||
else if(ret == 1) {
|
||||
/* no files were downloaded and all errors were non-fatal */
|
||||
_Exit(handle->pm_errno);
|
||||
}
|
||||
else {
|
||||
/* an error happened for a required file */
|
||||
_Exit(handle->pm_errno | 128);
|
||||
}
|
||||
}
|
||||
|
||||
/* parent */
|
||||
close(callbacks_fd[1]);
|
||||
|
||||
if(pid != -1) {
|
||||
bool had_error = false;
|
||||
while(true) {
|
||||
_alpm_sandbox_callback_t callback_type;
|
||||
ssize_t got = read(callbacks_fd[0], &callback_type, sizeof(callback_type));
|
||||
if(got < 0 || (size_t)got != sizeof(callback_type)) {
|
||||
had_error = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if(callback_type == ALPM_SANDBOX_CB_DOWNLOAD) {
|
||||
if(!_alpm_sandbox_process_cb_download(handle, callbacks_fd[0])) {
|
||||
had_error = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if(callback_type == ALPM_SANDBOX_CB_LOG) {
|
||||
if(!_alpm_sandbox_process_cb_log(handle, callbacks_fd[0])) {
|
||||
had_error = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(had_error) {
|
||||
kill(pid, SIGTERM);
|
||||
}
|
||||
|
||||
int wret;
|
||||
while((wret = waitpid(pid, &ret, 0)) == -1 && errno == EINTR);
|
||||
if(wret > 0) {
|
||||
if(!WIFEXITED(ret)) {
|
||||
/* the child did not terminate normally */
|
||||
ret = -1;
|
||||
}
|
||||
else {
|
||||
ret = WEXITSTATUS(ret);
|
||||
if(ret != 0) {
|
||||
if(ret & 128) {
|
||||
/* an error happened for a required file, or unexpected exit status */
|
||||
handle->pm_errno = ret & ~128;
|
||||
ret = -1;
|
||||
}
|
||||
else {
|
||||
handle->pm_errno = ret;
|
||||
ret = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* waitpid failed */
|
||||
err = errno;
|
||||
}
|
||||
}
|
||||
|
||||
close(callbacks_fd[0]);
|
||||
|
||||
sigaction(SIGINT, &oldint, NULL);
|
||||
sigaction(SIGQUIT, &oldquit, NULL);
|
||||
sigprocmask(SIG_SETMASK, &oldblock, NULL);
|
||||
|
||||
if(err) {
|
||||
errno = err;
|
||||
ret = -1;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static int payload_download_fetchcb(struct dload_payload *payload,
|
||||
const char *server, const char *localpath)
|
||||
{
|
||||
int ret;
|
||||
char *fileurl;
|
||||
alpm_handle_t *handle = payload->handle;
|
||||
|
||||
size_t len = strlen(server) + strlen(payload->filepath) + 2;
|
||||
MALLOC(fileurl, len, RET_ERR(handle, ALPM_ERR_MEMORY, -1));
|
||||
snprintf(fileurl, len, "%s/%s", server, payload->filepath);
|
||||
|
||||
ret = handle->fetchcb(handle->fetchcb_ctx, fileurl, localpath, payload->force);
|
||||
free(fileurl);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Returns -1 if an error happened for a required file
|
||||
* Returns 0 if a payload was actually downloaded
|
||||
* Returns 1 if no files were downloaded and all errors were non-fatal
|
||||
@@ -1157,26 +950,7 @@ int _alpm_download(alpm_handle_t *handle,
|
||||
{
|
||||
if(handle->fetchcb == NULL) {
|
||||
#ifdef HAVE_LIBCURL
|
||||
if(handle->sandboxuser) {
|
||||
int ret = 0;
|
||||
alpm_list_t *i;
|
||||
|
||||
for(i = payloads; i; i = i->next) {
|
||||
struct dload_payload *p = i->data;
|
||||
intialize_download_file(p);
|
||||
}
|
||||
|
||||
ret = curl_download_internal_sandboxed(handle, payloads, localpath);
|
||||
|
||||
for(i = payloads; i; i = i->next) {
|
||||
struct dload_payload *p = i->data;
|
||||
finalize_download_file(p);
|
||||
}
|
||||
|
||||
return ret;
|
||||
} else {
|
||||
return curl_download_internal(handle, payloads);
|
||||
}
|
||||
return curl_download_internal(handle, payloads, localpath);
|
||||
#else
|
||||
RET_ERR(handle, ALPM_ERR_EXTERNAL_DOWNLOAD, -1);
|
||||
#endif
|
||||
@@ -1191,11 +965,16 @@ int _alpm_download(alpm_handle_t *handle,
|
||||
if(payload->fileurl) {
|
||||
ret = handle->fetchcb(handle->fetchcb_ctx, payload->fileurl, localpath, payload->force);
|
||||
} else {
|
||||
for(s = payload->cache_servers; s && ret == -1; s = s->next) {
|
||||
ret = payload_download_fetchcb(payload, s->data, localpath);
|
||||
}
|
||||
for(s = payload->servers; s && ret == -1; s = s->next) {
|
||||
ret = payload_download_fetchcb(payload, s->data, localpath);
|
||||
const char *server = s->data;
|
||||
char *fileurl;
|
||||
|
||||
size_t len = strlen(server) + strlen(payload->filepath) + 2;
|
||||
MALLOC(fileurl, len, RET_ERR(handle, ALPM_ERR_MEMORY, -1));
|
||||
snprintf(fileurl, len, "%s/%s", server, payload->filepath);
|
||||
|
||||
ret = handle->fetchcb(handle->fetchcb_ctx, fileurl, localpath, payload->force);
|
||||
free(fileurl);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1255,34 +1034,16 @@ int SYMEXPORT alpm_fetch_pkgurl(alpm_handle_t *handle, const alpm_list_t *urls,
|
||||
CALLOC(payload, 1, sizeof(*payload), GOTO_ERR(handle, ALPM_ERR_MEMORY, err));
|
||||
STRDUP(payload->fileurl, url, FREE(payload); GOTO_ERR(handle, ALPM_ERR_MEMORY, err));
|
||||
|
||||
STRDUP(payload->remote_name, get_filename(payload->fileurl),
|
||||
GOTO_ERR(handle, ALPM_ERR_MEMORY, err));
|
||||
|
||||
c = strrchr(url, '/');
|
||||
if(payload->remote_name && strlen(payload->remote_name) > 0 && strstr(c, ".pkg")) {
|
||||
if(strstr(c, ".pkg")) {
|
||||
/* we probably have a usable package filename to download to */
|
||||
payload->destfile_name = _alpm_get_fullpath(cachedir, payload->remote_name, "");
|
||||
payload->tempfile_name = _alpm_get_fullpath(cachedir, payload->remote_name, ".part");
|
||||
payload->allow_resume = 1;
|
||||
|
||||
if(!payload->destfile_name || !payload->tempfile_name) {
|
||||
goto err;
|
||||
}
|
||||
|
||||
} else {
|
||||
/* The URL does not contain a filename, so download to a temporary location.
|
||||
* We can not support resuming this kind of download; any partial transfers
|
||||
* will be destroyed */
|
||||
payload->unlink_on_fail = 1;
|
||||
|
||||
payload->tempfile_openmode = "wb";
|
||||
payload->localf = create_tempfile(payload, cachedir);
|
||||
if(payload->localf == NULL) {
|
||||
goto err;
|
||||
}
|
||||
payload->random_partfile = 1;
|
||||
}
|
||||
|
||||
payload->handle = handle;
|
||||
payload->trust_remote_name = 1;
|
||||
payload->download_signature = (handle->siglevel & ALPM_SIG_PACKAGE);
|
||||
payload->signature_optional = (handle->siglevel & ALPM_SIG_PACKAGE_OPTIONAL);
|
||||
payloads = alpm_list_add(payloads, payload);
|
||||
@@ -1343,6 +1104,7 @@ void _alpm_dload_payload_reset(struct dload_payload *payload)
|
||||
FREE(payload->remote_name);
|
||||
FREE(payload->tempfile_name);
|
||||
FREE(payload->destfile_name);
|
||||
FREE(payload->content_disp_name);
|
||||
FREE(payload->fileurl);
|
||||
FREE(payload->filepath);
|
||||
*payload = (struct dload_payload){0};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* dload.h
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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
|
||||
@@ -26,12 +26,10 @@
|
||||
struct dload_payload {
|
||||
alpm_handle_t *handle;
|
||||
const char *tempfile_openmode;
|
||||
/* name of the remote file */
|
||||
char *remote_name;
|
||||
/* temporary file name, to which the payload is downloaded */
|
||||
char *tempfile_name;
|
||||
/* name to which the downloaded file will be renamed */
|
||||
char *destfile_name;
|
||||
char *content_disp_name;
|
||||
/* client has to provide either
|
||||
* 1) fileurl - full URL to the file
|
||||
* 2) pair of (servers, filepath), in this case ALPM iterates over the
|
||||
@@ -39,7 +37,6 @@ struct dload_payload {
|
||||
*/
|
||||
char *fileurl;
|
||||
char *filepath; /* download URL path */
|
||||
alpm_list_t *cache_servers;
|
||||
alpm_list_t *servers;
|
||||
long respcode;
|
||||
off_t initial_size;
|
||||
@@ -47,17 +44,18 @@ struct dload_payload {
|
||||
off_t prevprogress;
|
||||
int force;
|
||||
int allow_resume;
|
||||
int random_partfile;
|
||||
int errors_ok;
|
||||
int unlink_on_fail;
|
||||
int trust_remote_name;
|
||||
int download_signature; /* specifies if an accompanion *.sig file need to be downloaded*/
|
||||
int signature_optional; /* *.sig file is optional */
|
||||
#ifdef HAVE_LIBCURL
|
||||
CURL *curl;
|
||||
char error_buffer[CURL_ERROR_SIZE];
|
||||
int signature; /* specifies if this payload is for a signature file */
|
||||
int request_errors_ok; /* per-request errors-ok */
|
||||
#endif
|
||||
FILE *localf; /* temp download file */
|
||||
int signature; /* specifies if this payload is for a signature file */
|
||||
#endif
|
||||
};
|
||||
|
||||
void _alpm_dload_payload_reset(struct dload_payload *payload);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* error.c
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* filelist.c
|
||||
*
|
||||
* Copyright (c) 2012-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2012-2021 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
|
||||
@@ -118,7 +118,7 @@ static int _alpm_files_cmp(const void *f1, const void *f2)
|
||||
return strcmp(file1->name, file2->name);
|
||||
}
|
||||
|
||||
alpm_file_t SYMEXPORT *alpm_filelist_contains(const alpm_filelist_t *filelist,
|
||||
alpm_file_t SYMEXPORT *alpm_filelist_contains(alpm_filelist_t *filelist,
|
||||
const char *path)
|
||||
{
|
||||
alpm_file_t key;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* filelist.h
|
||||
*
|
||||
* Copyright (c) 2012-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2012-2021 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
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* graph.c - helpful graph structure and setup/teardown methods
|
||||
*
|
||||
* Copyright (c) 2007-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2007-2021 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
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* graph.h - helpful graph structure and setup/teardown methods
|
||||
*
|
||||
* Copyright (c) 2007-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2007-2021 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
|
||||
@@ -23,19 +23,19 @@
|
||||
|
||||
#include "alpm_list.h"
|
||||
|
||||
enum _alpm_graph_vertex_state {
|
||||
enum __alpm_graph_vertex_state {
|
||||
ALPM_GRAPH_STATE_UNPROCESSED,
|
||||
ALPM_GRAPH_STATE_PROCESSING,
|
||||
ALPM_GRAPH_STATE_PROCESSED
|
||||
};
|
||||
|
||||
typedef struct _alpm_graph_t {
|
||||
typedef struct __alpm_graph_t {
|
||||
void *data;
|
||||
struct _alpm_graph_t *parent; /* where did we come from? */
|
||||
struct __alpm_graph_t *parent; /* where did we come from? */
|
||||
alpm_list_t *children;
|
||||
alpm_list_t *iterator; /* used for DFS without recursion */
|
||||
off_t weight; /* weight of the node */
|
||||
enum _alpm_graph_vertex_state state;
|
||||
enum __alpm_graph_vertex_state state;
|
||||
} alpm_graph_t;
|
||||
|
||||
alpm_graph_t *_alpm_graph_new(void);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* group.c
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* group.h
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* handle.c
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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>
|
||||
@@ -48,28 +48,12 @@ alpm_handle_t *_alpm_handle_new(void)
|
||||
return handle;
|
||||
}
|
||||
|
||||
/* free all in-memory resources */
|
||||
void _alpm_handle_free(alpm_handle_t *handle)
|
||||
{
|
||||
alpm_list_t *i;
|
||||
alpm_db_t *db;
|
||||
|
||||
if(handle == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* close local database */
|
||||
if((db = handle->db_local)) {
|
||||
db->ops->unregister(db);
|
||||
}
|
||||
|
||||
/* unregister all sync dbs */
|
||||
for(i = handle->dbs_sync; i; i = i->next) {
|
||||
db = i->data;
|
||||
db->ops->unregister(db);
|
||||
}
|
||||
alpm_list_free(handle->dbs_sync);
|
||||
|
||||
/* close logfile */
|
||||
if(handle->logstream) {
|
||||
fclose(handle->logstream);
|
||||
@@ -84,12 +68,6 @@ void _alpm_handle_free(alpm_handle_t *handle)
|
||||
FREELIST(handle->known_keys);
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_LIBCURL
|
||||
curl_multi_cleanup(handle->curlm);
|
||||
curl_global_cleanup();
|
||||
FREELIST(handle->server_errors);
|
||||
#endif
|
||||
|
||||
/* free memory */
|
||||
_alpm_trans_free(handle->trans);
|
||||
FREE(handle->root);
|
||||
@@ -101,7 +79,6 @@ void _alpm_handle_free(alpm_handle_t *handle)
|
||||
FREE(handle->lockfile);
|
||||
FREELIST(handle->architectures);
|
||||
FREE(handle->gpgdir);
|
||||
FREE(handle->sandboxuser);
|
||||
FREELIST(handle->noupgrade);
|
||||
FREELIST(handle->noextract);
|
||||
FREELIST(handle->ignorepkg);
|
||||
@@ -293,12 +270,6 @@ const char SYMEXPORT *alpm_option_get_gpgdir(alpm_handle_t *handle)
|
||||
return handle->gpgdir;
|
||||
}
|
||||
|
||||
const char SYMEXPORT *alpm_option_get_sandboxuser(alpm_handle_t *handle)
|
||||
{
|
||||
CHECK_HANDLE(handle, return NULL);
|
||||
return handle->sandboxuser;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_get_usesyslog(alpm_handle_t *handle)
|
||||
{
|
||||
CHECK_HANDLE(handle, return -1);
|
||||
@@ -602,19 +573,6 @@ int SYMEXPORT alpm_option_set_gpgdir(alpm_handle_t *handle, const char *gpgdir)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_set_sandboxuser(alpm_handle_t *handle, const char *sandboxuser)
|
||||
{
|
||||
CHECK_HANDLE(handle, return -1);
|
||||
if(handle->sandboxuser) {
|
||||
FREE(handle->sandboxuser);
|
||||
}
|
||||
|
||||
STRDUP(handle->sandboxuser, sandboxuser, RET_ERR(handle, ALPM_ERR_MEMORY, -1));
|
||||
|
||||
_alpm_log(handle, ALPM_LOG_DEBUG, "option 'sandboxuser' = %s\n", handle->sandboxuser);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SYMEXPORT alpm_option_set_usesyslog(alpm_handle_t *handle, int usesyslog)
|
||||
{
|
||||
CHECK_HANDLE(handle, return -1);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* handle.h
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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
|
||||
@@ -26,7 +26,6 @@
|
||||
|
||||
#include "alpm_list.h"
|
||||
#include "alpm.h"
|
||||
#include "trans.h"
|
||||
|
||||
#ifdef HAVE_LIBCURL
|
||||
#include <curl/curl.h>
|
||||
@@ -51,7 +50,7 @@ do { \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
struct _alpm_handle_t {
|
||||
struct __alpm_handle_t {
|
||||
/* internal usage */
|
||||
alpm_db_t *db_local; /* local db pointer */
|
||||
alpm_list_t *dbs_sync; /* List of (alpm_db_t *) */
|
||||
@@ -91,7 +90,6 @@ struct _alpm_handle_t {
|
||||
char *logfile; /* Name of the log file */
|
||||
char *lockfile; /* Name of the lock file */
|
||||
char *gpgdir; /* Directory where GnuPG files are stored */
|
||||
char *sandboxuser; /* User to switch to for sensitive operations */
|
||||
alpm_list_t *cachedirs; /* Paths to pacman cache directories */
|
||||
alpm_list_t *hookdirs; /* Paths to hook directories */
|
||||
alpm_list_t *overwrite_files; /* Paths that may be overwritten */
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* hook.c
|
||||
*
|
||||
* Copyright (c) 2015-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2015-2021 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
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* hook.h
|
||||
*
|
||||
* Copyright (c) 2015-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2015-2021 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
|
||||
|
||||
13
lib/libalpm/libalpm.pc.in
Normal file
13
lib/libalpm/libalpm.pc.in
Normal file
@@ -0,0 +1,13 @@
|
||||
prefix=@prefix@
|
||||
exec_prefix=@exec_prefix@
|
||||
libdir=@libdir@
|
||||
includedir=@includedir@
|
||||
|
||||
Name: libalpm
|
||||
Description: Arch Linux package management library
|
||||
URL: http://archlinux.org/pacman/
|
||||
Version: @LIB_VERSION@
|
||||
Requires.private: libarchive @pc_crypto@ @pc_libcurl@ @pc_gpgme@
|
||||
Cflags: -I${includedir} @LFS_CFLAGS@
|
||||
Libs: -L${libdir} -lalpm
|
||||
Libs.private: @LIBS@ @pc_gpgme_libs@ @LIBINTL@
|
||||
@@ -4,7 +4,7 @@
|
||||
/*
|
||||
* libarchive-compat.h
|
||||
*
|
||||
* Copyright (c) 2013-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2013-2021 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
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* log.c
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* log.h
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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
|
||||
|
||||
@@ -24,7 +24,6 @@ libalpm_sources = files('''
|
||||
pkghash.h pkghash.c
|
||||
rawstr.c
|
||||
remove.h remove.c
|
||||
sandbox.h sandbox.c
|
||||
signing.c signing.h
|
||||
sync.h sync.c
|
||||
trans.h trans.c
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* package.c
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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>
|
||||
@@ -98,7 +98,6 @@ static alpm_list_t *_pkg_get_provides(alpm_pkg_t *pkg) { return pkg->provides;
|
||||
static alpm_list_t *_pkg_get_replaces(alpm_pkg_t *pkg) { return pkg->replaces; }
|
||||
static alpm_filelist_t *_pkg_get_files(alpm_pkg_t *pkg) { return &(pkg->files); }
|
||||
static alpm_list_t *_pkg_get_backup(alpm_pkg_t *pkg) { return pkg->backup; }
|
||||
static alpm_list_t *_pkg_get_xdata(alpm_pkg_t *pkg) { return pkg->xdata; }
|
||||
|
||||
static void *_pkg_changelog_open(alpm_pkg_t UNUSED *pkg)
|
||||
{
|
||||
@@ -163,7 +162,6 @@ const struct pkg_operations default_pkg_ops = {
|
||||
.get_replaces = _pkg_get_replaces,
|
||||
.get_files = _pkg_get_files,
|
||||
.get_backup = _pkg_get_backup,
|
||||
.get_xdata = _pkg_get_xdata,
|
||||
|
||||
.changelog_open = _pkg_changelog_open,
|
||||
.changelog_read = _pkg_changelog_read,
|
||||
@@ -193,12 +191,6 @@ const char SYMEXPORT *alpm_pkg_get_base(alpm_pkg_t *pkg)
|
||||
return pkg->ops->get_base(pkg);
|
||||
}
|
||||
|
||||
alpm_handle_t SYMEXPORT *alpm_pkg_get_handle(alpm_pkg_t *pkg)
|
||||
{
|
||||
ASSERT(pkg != NULL, return NULL);
|
||||
return pkg->handle;
|
||||
}
|
||||
|
||||
const char SYMEXPORT *alpm_pkg_get_name(alpm_pkg_t *pkg)
|
||||
{
|
||||
ASSERT(pkg != NULL, return NULL);
|
||||
@@ -487,13 +479,6 @@ int SYMEXPORT alpm_pkg_has_scriptlet(alpm_pkg_t *pkg)
|
||||
return pkg->ops->has_scriptlet(pkg);
|
||||
}
|
||||
|
||||
alpm_list_t SYMEXPORT *alpm_pkg_get_xdata(alpm_pkg_t *pkg)
|
||||
{
|
||||
ASSERT(pkg != NULL, return NULL);
|
||||
pkg->handle->pm_errno = ALPM_ERR_OK;
|
||||
return pkg->ops->get_xdata(pkg);
|
||||
}
|
||||
|
||||
static void find_requiredby(alpm_pkg_t *pkg, alpm_db_t *db, alpm_list_t **reqs,
|
||||
int optional)
|
||||
{
|
||||
@@ -686,30 +671,6 @@ static void free_deplist(alpm_list_t *deps)
|
||||
alpm_list_free(deps);
|
||||
}
|
||||
|
||||
alpm_pkg_xdata_t *_alpm_pkg_parse_xdata(const char *string)
|
||||
{
|
||||
alpm_pkg_xdata_t *pd;
|
||||
const char *sep;
|
||||
if(string == NULL || (sep = strchr(string, '=')) == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
CALLOC(pd, 1, sizeof(alpm_pkg_xdata_t), return NULL);
|
||||
STRNDUP(pd->name, string, sep - string, FREE(pd); return NULL);
|
||||
STRDUP(pd->value, sep + 1, FREE(pd->name); FREE(pd); return NULL);
|
||||
|
||||
return pd;
|
||||
}
|
||||
|
||||
void _alpm_pkg_xdata_free(alpm_pkg_xdata_t *pd)
|
||||
{
|
||||
if(pd) {
|
||||
free(pd->name);
|
||||
free(pd->value);
|
||||
free(pd);
|
||||
}
|
||||
}
|
||||
|
||||
void _alpm_pkg_free(alpm_pkg_t *pkg)
|
||||
{
|
||||
if(pkg == NULL) {
|
||||
@@ -740,8 +701,6 @@ void _alpm_pkg_free(alpm_pkg_t *pkg)
|
||||
}
|
||||
alpm_list_free_inner(pkg->backup, (alpm_list_fn_free)_alpm_backup_free);
|
||||
alpm_list_free(pkg->backup);
|
||||
alpm_list_free_inner(pkg->xdata, (alpm_list_fn_free)_alpm_pkg_xdata_free);
|
||||
alpm_list_free(pkg->xdata);
|
||||
free_deplist(pkg->depends);
|
||||
free_deplist(pkg->optdepends);
|
||||
free_deplist(pkg->checkdepends);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* package.h
|
||||
*
|
||||
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2006-2021 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>
|
||||
@@ -67,8 +67,6 @@ struct pkg_operations {
|
||||
alpm_filelist_t *(*get_files) (alpm_pkg_t *);
|
||||
alpm_list_t *(*get_backup) (alpm_pkg_t *);
|
||||
|
||||
alpm_list_t *(*get_xdata) (alpm_pkg_t *);
|
||||
|
||||
void *(*changelog_open) (alpm_pkg_t *);
|
||||
size_t (*changelog_read) (void *, size_t, const alpm_pkg_t *, void *);
|
||||
int (*changelog_close) (const alpm_pkg_t *, void *);
|
||||
@@ -87,7 +85,7 @@ struct pkg_operations {
|
||||
*/
|
||||
extern const struct pkg_operations default_pkg_ops;
|
||||
|
||||
struct _alpm_pkg_t {
|
||||
struct __alpm_pkg_t {
|
||||
unsigned long name_hash;
|
||||
char *filename;
|
||||
char *base;
|
||||
@@ -138,8 +136,6 @@ struct _alpm_pkg_t {
|
||||
alpm_pkgreason_t reason;
|
||||
int scriptlet;
|
||||
|
||||
alpm_list_t *xdata;
|
||||
|
||||
/* Bitfield from alpm_dbinfrq_t */
|
||||
int infolevel;
|
||||
/* Bitfield from alpm_pkgvalidation_t */
|
||||
@@ -162,7 +158,4 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
|
||||
int _alpm_pkg_cmp(const void *p1, const void *p2);
|
||||
int _alpm_pkg_compare_versions(alpm_pkg_t *local_pkg, alpm_pkg_t *pkg);
|
||||
|
||||
alpm_pkg_xdata_t *_alpm_pkg_parse_xdata(const char *string);
|
||||
void _alpm_pkg_xdata_free(alpm_pkg_xdata_t *pd);
|
||||
|
||||
#endif /* ALPM_PACKAGE_H */
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* pkghash.c
|
||||
*
|
||||
* Copyright (c) 2011-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2011-2021 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
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* pkghash.h
|
||||
*
|
||||
* Copyright (c) 2011-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
* Copyright (c) 2011-2021 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
|
||||
@@ -32,7 +32,7 @@
|
||||
* A combination of a hash table and a list, allowing for fast look-up
|
||||
* by package name but also iteration over the packages.
|
||||
*/
|
||||
struct _alpm_pkghash_t {
|
||||
struct __alpm_pkghash_t {
|
||||
/** data held by the hash table */
|
||||
alpm_list_t **hash_table;
|
||||
/** head node of the hash table data in normal list format */
|
||||
@@ -45,7 +45,7 @@ struct _alpm_pkghash_t {
|
||||
unsigned int limit;
|
||||
};
|
||||
|
||||
typedef struct _alpm_pkghash_t alpm_pkghash_t;
|
||||
typedef struct __alpm_pkghash_t alpm_pkghash_t;
|
||||
|
||||
alpm_pkghash_t *_alpm_pkghash_create(unsigned int size);
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ XGETTEXT_OPTIONS = \
|
||||
# This is the copyright holder that gets inserted into the header of the
|
||||
# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
|
||||
# package.
|
||||
COPYRIGHT_HOLDER = Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
COPYRIGHT_HOLDER = Pacman Development Team <pacman-dev@archlinux.org>
|
||||
|
||||
# This is the email address or URL to which the translators shall report
|
||||
# bugs in the untranslated strings.
|
||||
|
||||
@@ -9,17 +9,17 @@
|
||||
# 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 <egypsy79@gmail.com>, 2015
|
||||
# Mutaz ismail <egypsy79@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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: سند <0otibi0@gmail.com>, 2013\n"
|
||||
"Language-Team: Arabic (http://www.transifex.com/toofishes/archlinux-pacman/"
|
||||
"language/ar/)\n"
|
||||
"Language: ar\n"
|
||||
|
||||
@@ -12,9 +12,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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Ḷḷumex03, 2014\n"
|
||||
"Language-Team: Asturian (http://www.transifex.com/toofishes/archlinux-pacman/"
|
||||
"language/ast/)\n"
|
||||
"Language: ast\n"
|
||||
|
||||
@@ -3,21 +3,22 @@
|
||||
# This file is distributed under the same license as the libalpm package.
|
||||
#
|
||||
# Translators:
|
||||
# xxmn77 <xxmn77@gmail.com>, 2021
|
||||
# xxmn77 <xxmn77@gmail.com>, 2021
|
||||
# xxmn77 <xxmn77@gmail.com>, 2021
|
||||
# Xəyyam Qocayev <xxmn77@gmail.com>, 2021-2022
|
||||
# Xəyyam Qocayev <xxmn77@gmail.com>, 2021
|
||||
# Xəyyam Qocayev <xxmn77@gmail.com>, 2021
|
||||
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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-07-04 11:31+0000\n"
|
||||
"Last-Translator: xxmn77 <xxmn77@gmail.com>\n"
|
||||
"Language-Team: Azerbaijani (Azerbaijan) (http://www.transifex.com/toofishes/archlinux-pacman/language/az_AZ/)\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Xəyyam Qocayev <xxmn77@gmail.com>, 2021-2022\n"
|
||||
"Language-Team: Azerbaijani (Azerbaijan) (http://www.transifex.com/toofishes/"
|
||||
"archlinux-pacman/language/az_AZ/)\n"
|
||||
"Language: az_AZ\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: az_AZ\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
|
||||
@@ -58,7 +59,8 @@ msgstr "%s adı, %s kimi dəyişdirilə bilmədi (%s)\n"
|
||||
#: lib/libalpm/add.c:210
|
||||
#, c-format
|
||||
msgid "file not found in file list for package %s. skipping extraction of %s\n"
|
||||
msgstr "%s paketi üçün fayl siyahısında fayl tapılmadı. %s çıxarılması buraxılır\n"
|
||||
msgstr ""
|
||||
"%s paketi üçün fayl siyahısında fayl tapılmadı. %s çıxarılması buraxılır\n"
|
||||
|
||||
#: lib/libalpm/add.c:219
|
||||
#, c-format
|
||||
@@ -70,14 +72,18 @@ msgstr "%s %s çıxarıla bilmədi: yol çox uzundur"
|
||||
msgid ""
|
||||
"directory permissions differ on %s\n"
|
||||
"filesystem: %o package: %o\n"
|
||||
msgstr "%s-də kataloqa giriş icazələri fərqlidir \nfayl sistemi: %o paketi: %o\n"
|
||||
msgstr ""
|
||||
"%s-də kataloqa giriş icazələri fərqlidir \n"
|
||||
"fayl sistemi: %o paketi: %o\n"
|
||||
|
||||
#: lib/libalpm/add.c:276
|
||||
#, c-format
|
||||
msgid ""
|
||||
"directory ownership differs on %s\n"
|
||||
"filesystem: %u:%u package: %u:%u\n"
|
||||
msgstr "kataloqa sahiblik %s fayl sistemində\nfətqlənir: %u:%u paketi: %u:%u\n"
|
||||
msgstr ""
|
||||
"kataloqa sahiblik %s fayl sistemində\n"
|
||||
"fətqlənir: %u:%u paketi: %u:%u\n"
|
||||
|
||||
#: lib/libalpm/add.c:292
|
||||
#, c-format
|
||||
@@ -153,7 +159,7 @@ msgstr "təkrarlanmış '%s' verilənlər bazası qeydi\n"
|
||||
#: lib/libalpm/be_local.c:622
|
||||
#, c-format
|
||||
msgid "corrupted database entry '%s'\n"
|
||||
msgstr "pozulmuş '%s' verilənlər bazası qeydi\n"
|
||||
msgstr "'%s' verilənlər bazası qeydi korlanıb\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:722 lib/libalpm/be_local.c:818
|
||||
#: lib/libalpm/be_local.c:958 lib/libalpm/be_local.c:1055
|
||||
@@ -166,12 +172,14 @@ msgstr "%s faylı açıla bilmədi: %s\n"
|
||||
#: lib/libalpm/be_local.c:738 lib/libalpm/be_sync.c:582
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: name mismatch on package %s\n"
|
||||
msgstr "%s verilənlər bazası ziddiyətlidir: %s paketindəki ad ilə uyğun deyil\n"
|
||||
msgstr ""
|
||||
"%s verilənlər bazası ziddiyətlidir: %s paketindəki ad ilə uyğun deyil\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:744 lib/libalpm/be_sync.c:588
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: version mismatch on package %s\n"
|
||||
msgstr "%s verilənlər bazası ziddiyyətlidir: %s paketindəki versiya uyğun gəlmir\n"
|
||||
msgstr ""
|
||||
"%s verilənlər bazası ziddiyyətlidir: %s paketindəki versiya uyğun gəlmir\n"
|
||||
|
||||
#: lib/libalpm/be_local.c:785
|
||||
#, c-format
|
||||
@@ -242,12 +250,14 @@ msgstr "'%s' veri. bazası oxuna bilmədi (%s)\n"
|
||||
#: lib/libalpm/be_sync.c:489 lib/libalpm/be_sync.c:494
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: filename of package %s is illegal\n"
|
||||
msgstr "%s verilənlər bazası ziddiyətlidir: %s paketinin fayl_adı yararsızdır\n"
|
||||
msgstr ""
|
||||
"%s verilənlər bazası ziddiyətlidir: %s paketinin fayl_adı yararsızdır\n"
|
||||
|
||||
#: lib/libalpm/be_sync.c:499
|
||||
#, c-format
|
||||
msgid "%s database is inconsistent: filename of package %s is too long\n"
|
||||
msgstr "%s verilənlər bazası ziddiyətlidir: %s paketinin fayl_adı çox uzundur\n"
|
||||
msgstr ""
|
||||
"%s verilənlər bazası ziddiyətlidir: %s paketinin fayl_adı çox uzundur\n"
|
||||
|
||||
#: lib/libalpm/be_sync.c:564
|
||||
#, c-format
|
||||
@@ -358,7 +368,8 @@ msgstr "'%s' faylının '%s'dən/dan alınması uğursuz oldu: %s\n"
|
||||
#: lib/libalpm/dload.c:539
|
||||
#, c-format
|
||||
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
|
||||
msgstr "'%s' faylının '%s'dən/dan alınması uğursuz oldu: gözlənilən ölçünü aşdı\n"
|
||||
msgstr ""
|
||||
"'%s' faylının '%s'dən/dan alınması uğursuz oldu: gözlənilən ölçünü aşdı\n"
|
||||
|
||||
#: lib/libalpm/dload.c:687
|
||||
#, c-format
|
||||
@@ -473,12 +484,12 @@ msgstr "verilənlər bazası tapıla bilmədi"
|
||||
#: lib/libalpm/error.c:72
|
||||
#, c-format
|
||||
msgid "invalid or corrupted database"
|
||||
msgstr "verilənlər bazası səhvdir və ya pozulub"
|
||||
msgstr "yararsız və ya korlanmış verilənlər bazası"
|
||||
|
||||
#: lib/libalpm/error.c:74
|
||||
#, c-format
|
||||
msgid "invalid or corrupted database (PGP signature)"
|
||||
msgstr "verilənlər bazası səhvdir və ya pozulub (PGP imzası)"
|
||||
msgstr "Yararsız və ya korlanmış verilənlər bazası (PGP imzası)"
|
||||
|
||||
#: lib/libalpm/error.c:76
|
||||
#, c-format
|
||||
@@ -503,7 +514,7 @@ msgstr "server üçün səhv url"
|
||||
#: lib/libalpm/error.c:85
|
||||
#, c-format
|
||||
msgid "no servers configured for repository"
|
||||
msgstr "saxlama yeri üçün serverlər tənzimlənməyib"
|
||||
msgstr "repozitoriya üçün serverlər tənzimlənməyib"
|
||||
|
||||
#: lib/libalpm/error.c:88
|
||||
#, c-format
|
||||
@@ -563,17 +574,17 @@ msgstr "əməliyyat ignorepkg səbəbindən ləğv edildi"
|
||||
#: lib/libalpm/error.c:113
|
||||
#, c-format
|
||||
msgid "invalid or corrupted package"
|
||||
msgstr "paket səhvdir və ya pozulub"
|
||||
msgstr "yararsız və ya korlanmış fayl"
|
||||
|
||||
#: lib/libalpm/error.c:115
|
||||
#, c-format
|
||||
msgid "invalid or corrupted package (checksum)"
|
||||
msgstr "paket (yoxlama cəmi) səhvdir və ya pozulub"
|
||||
msgstr "yararsız və ya korlanmış paket (yoxlama_cəmi)"
|
||||
|
||||
#: lib/libalpm/error.c:117
|
||||
#, c-format
|
||||
msgid "invalid or corrupted package (PGP signature)"
|
||||
msgstr "paket (PGP imza) səhvdir və ya pozulub"
|
||||
msgstr "yararsız və ya korlanmış paket (PGP imza)"
|
||||
|
||||
#: lib/libalpm/error.c:119
|
||||
#, c-format
|
||||
|
||||
@@ -3,15 +3,15 @@
|
||||
# This file is distributed under the same license as the libalpm package.
|
||||
#
|
||||
# Translators:
|
||||
# Galin Iskrenov <loot270@abv.bg>, 2017-2019
|
||||
# Galin Iskrenov <loot270@abv.bg>, 2017-2019,2022
|
||||
# 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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Galin Iskrenov <loot270@abv.bg>, 2017-2019,2022\n"
|
||||
"Language-Team: Bulgarian (http://www.transifex.com/toofishes/archlinux-"
|
||||
"pacman/language/bg/)\n"
|
||||
"Language: bg\n"
|
||||
@@ -346,7 +346,7 @@ msgstr "Дялът %s е монтиран само за четене\n"
|
||||
#, c-format
|
||||
msgid ""
|
||||
"too many errors from %s, skipping for the remainder of this transaction\n"
|
||||
msgstr ""
|
||||
msgstr "твърде много грешки от %s, прескачане на останалото от транзакцията\n"
|
||||
|
||||
#: lib/libalpm/dload.c:220
|
||||
#, c-format
|
||||
@@ -383,17 +383,17 @@ msgstr "url '%s' е невалиден\n"
|
||||
#: lib/libalpm/dload.c:893
|
||||
#, c-format
|
||||
msgid "failed to setup a download payload for %s\n"
|
||||
msgstr ""
|
||||
msgstr "Неуспешно настройване на нужното за изтегляне %s\n"
|
||||
|
||||
#: lib/libalpm/dload.c:905
|
||||
#, c-format
|
||||
msgid "curl returned error %d from transfer\n"
|
||||
msgstr ""
|
||||
msgstr "curl върна грешка %d при трансфера\n"
|
||||
|
||||
#: lib/libalpm/dload.c:929
|
||||
#, c-format
|
||||
msgid "curl transfer error: %d\n"
|
||||
msgstr ""
|
||||
msgstr "curl трансферна грешка: %d\n"
|
||||
|
||||
#: lib/libalpm/dload.c:1055 lib/libalpm/sync.c:840
|
||||
#, c-format
|
||||
@@ -403,7 +403,7 @@ msgstr "неуспех при извличане на файлове\n"
|
||||
#: lib/libalpm/dload.c:1078
|
||||
#, c-format
|
||||
msgid "download completed successfully but no file in the cache\n"
|
||||
msgstr ""
|
||||
msgstr "изтеглянето завърши успешно, но няма файл в кеша\n"
|
||||
|
||||
#: lib/libalpm/error.c:40
|
||||
#, c-format
|
||||
@@ -533,7 +533,7 @@ msgstr "дублирана цел"
|
||||
#: lib/libalpm/error.c:94
|
||||
#, c-format
|
||||
msgid "duplicate filename"
|
||||
msgstr ""
|
||||
msgstr "дублиране на файлово име"
|
||||
|
||||
#: lib/libalpm/error.c:98
|
||||
#, c-format
|
||||
@@ -937,7 +937,7 @@ msgstr "не може да се замести %s от %s\n"
|
||||
#: lib/libalpm/sync.c:476
|
||||
#, c-format
|
||||
msgid "packages %s and %s have the same filename: %s\n"
|
||||
msgstr ""
|
||||
msgstr "пакети %s и %s имат еднакво име: %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:542 lib/libalpm/sync.c:612
|
||||
#, c-format
|
||||
|
||||
@@ -9,9 +9,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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Gwenn M <tornoz@laposte.net>, 2015,2018-2019\n"
|
||||
"Language-Team: Breton (http://www.transifex.com/toofishes/archlinux-pacman/"
|
||||
"language/br/)\n"
|
||||
"Language: br\n"
|
||||
@@ -19,10 +19,10 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !"
|
||||
"=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n"
|
||||
"%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > "
|
||||
"19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 "
|
||||
"&& n % 1000000 == 0) ? 3 : 4);\n"
|
||||
"=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && "
|
||||
"(n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 "
|
||||
"> 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != "
|
||||
"0 && n % 1000000 == 0) ? 3 : 4);\n"
|
||||
|
||||
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
|
||||
#, c-format
|
||||
|
||||
@@ -16,9 +16,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Arch Linux Pacman package manager\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
|
||||
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 08:01+0000\n"
|
||||
"Last-Translator: Davidmp <medipas@gmail.com>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Ramon Buldó <rbuldo@gmail.com>, 2014\n"
|
||||
"Language-Team: Catalan (http://www.transifex.com/toofishes/archlinux-pacman/"
|
||||
"language/ca/)\n"
|
||||
"Language: ca\n"
|
||||
@@ -969,8 +969,8 @@ msgstr "s'han detectat conflictes de paquets impossibles de resoldre.\n"
|
||||
#, c-format
|
||||
msgid "removing '%s' from target list because it conflicts with '%s'\n"
|
||||
msgstr ""
|
||||
"Se suprimeix \"%s\" de la llista d'objectius perquè té conflictes amb \"%s"
|
||||
"\".\n"
|
||||
"Se suprimeix \"%s\" de la llista d'objectius perquè té conflictes amb "
|
||||
"\"%s\".\n"
|
||||
|
||||
#: lib/libalpm/sync.c:1036
|
||||
#, c-format
|
||||
@@ -1071,5 +1071,5 @@ msgstr "no existeix la memòria cau %s, es crea...\n"
|
||||
#, c-format
|
||||
msgid "couldn't find or create package cache, using %s instead\n"
|
||||
msgstr ""
|
||||
"No s'ha pogut trobar o crear el paquet de memòria cau; en lloc d'això, s'usa"
|
||||
"%s.\n"
|
||||
"No s'ha pogut trobar o crear el paquet de memòria cau; en lloc d'això, "
|
||||
"s'usa%s.\n"
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# 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 <jlichtblau@seznam.cz>, 2014,2022
|
||||
# Lukáš Kucharczyk <lukas@kucharczyk.xyz>, 2020
|
||||
# mmm <markotahal@gmail.com>, 2013
|
||||
# mmm <markotahal@gmail.com>, 2011
|
||||
@@ -19,9 +19,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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Jaroslav Lichtblau <jlichtblau@seznam.cz>, 2014,2022\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/toofishes/archlinux-pacman/"
|
||||
"language/cs/)\n"
|
||||
"Language: cs\n"
|
||||
@@ -541,7 +541,7 @@ msgstr "duplicitní cíl"
|
||||
#: lib/libalpm/error.c:94
|
||||
#, c-format
|
||||
msgid "duplicate filename"
|
||||
msgstr ""
|
||||
msgstr "duplicitní jméno souboru"
|
||||
|
||||
#: lib/libalpm/error.c:98
|
||||
#, c-format
|
||||
|
||||
@@ -14,9 +14,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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: scootergrisen, 2017\n"
|
||||
"Language-Team: Danish (http://www.transifex.com/toofishes/archlinux-pacman/"
|
||||
"language/da/)\n"
|
||||
"Language: da\n"
|
||||
|
||||
@@ -8,13 +8,14 @@
|
||||
# 21db53640bd6018c4a99700a4cf2ee28_f478df7 <98034cbca98620f1cf39d6ebdfa44311_785827>, 2019-2020
|
||||
# Frank Theile, 2018
|
||||
# Frank Theile, 2018
|
||||
# Jakob Gahde <j5lx@fmail.co.uk>, 2014-2015
|
||||
# J5lx <j5lx@fmail.co.uk>, 2014-2015
|
||||
# 65138391f015e4001c6ef9d675c96796_707a378 <99e420e9f3ea1b91cb2cbbb4cbc7cd27_2862>, 2013
|
||||
# 65138391f015e4001c6ef9d675c96796_707a378 <99e420e9f3ea1b91cb2cbbb4cbc7cd27_2862>, 2013
|
||||
# Martin Kühne <mysatyre@gmail.com>, 2017
|
||||
# Matthias Gorissen <matthias@archlinux.de>, 2011
|
||||
# Wieland Hoffmann <themineo+transifex@googlemail.com>, 2013
|
||||
# 65138391f015e4001c6ef9d675c96796_707a378 <99e420e9f3ea1b91cb2cbbb4cbc7cd27_2862>, 2013
|
||||
# Roman Volak <romanvolak@web.de>, 2021
|
||||
# Silvan Jegen <s.jegen@gmail.com>, 2015
|
||||
# Wieland Hoffmann <themineo+transifex@googlemail.com>, 2013
|
||||
# Wieland Hoffmann <themineo+transifex@googlemail.com>, 2013
|
||||
@@ -22,9 +23,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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Roman Volak <romanvolak@web.de>, 2021\n"
|
||||
"Language-Team: German (http://www.transifex.com/toofishes/archlinux-pacman/"
|
||||
"language/de/)\n"
|
||||
"Language: de\n"
|
||||
@@ -368,7 +369,7 @@ msgstr "Die Partition %s ist so eingehängt, dass sie nur gelesen werden kann\n"
|
||||
#, c-format
|
||||
msgid ""
|
||||
"too many errors from %s, skipping for the remainder of this transaction\n"
|
||||
msgstr ""
|
||||
msgstr "zu viele Fehlermeldungen von %s, überspringe den Rest des Vorgangs\n"
|
||||
|
||||
#: lib/libalpm/dload.c:220
|
||||
#, c-format
|
||||
@@ -405,17 +406,17 @@ msgstr "URL '%s' ist ungültig\n"
|
||||
#: lib/libalpm/dload.c:893
|
||||
#, c-format
|
||||
msgid "failed to setup a download payload for %s\n"
|
||||
msgstr ""
|
||||
msgstr "gescheiterte Einstellung der Downloadmenge für %s\n"
|
||||
|
||||
#: lib/libalpm/dload.c:905
|
||||
#, c-format
|
||||
msgid "curl returned error %d from transfer\n"
|
||||
msgstr ""
|
||||
msgstr "curl(=Programm) meldet Fehler %d von der Übertragung\n"
|
||||
|
||||
#: lib/libalpm/dload.c:929
|
||||
#, c-format
|
||||
msgid "curl transfer error: %d\n"
|
||||
msgstr ""
|
||||
msgstr "curl(=Programm) Übertragungsfehler %d\n"
|
||||
|
||||
#: lib/libalpm/dload.c:1055 lib/libalpm/sync.c:840
|
||||
#, c-format
|
||||
@@ -425,7 +426,7 @@ msgstr "Konnte einige Dateien nicht übertragen\n"
|
||||
#: lib/libalpm/dload.c:1078
|
||||
#, c-format
|
||||
msgid "download completed successfully but no file in the cache\n"
|
||||
msgstr ""
|
||||
msgstr "Download vollständig und keine Datei im Zwischenspeicher\n"
|
||||
|
||||
#: lib/libalpm/error.c:40
|
||||
#, c-format
|
||||
@@ -555,7 +556,7 @@ msgstr "Doppelte Ziele"
|
||||
#: lib/libalpm/error.c:94
|
||||
#, c-format
|
||||
msgid "duplicate filename"
|
||||
msgstr ""
|
||||
msgstr "gleicher Dateiname"
|
||||
|
||||
#: lib/libalpm/error.c:98
|
||||
#, c-format
|
||||
@@ -843,7 +844,7 @@ msgstr ""
|
||||
#: lib/libalpm/signing.c:199 lib/libalpm/signing.c:767
|
||||
#, c-format
|
||||
msgid "GPGME error: %s\n"
|
||||
msgstr ""
|
||||
msgstr "GPGME-Fehler: %s\n"
|
||||
|
||||
#: lib/libalpm/signing.c:274
|
||||
#, c-format
|
||||
|
||||
@@ -13,14 +13,16 @@
|
||||
# ifaigios <ifaigios@gmail.com>, 2015
|
||||
# ifaigios <ifaigios@gmail.com>, 2015
|
||||
# Christos Nouskas <nous@artixlinux.org>, 2011
|
||||
# 492d30ca33568c5819a4f95c90617de1_3730d98 <c1a4cca7e440358a87e394a300ed18e2_882277>, 2021
|
||||
# th_ts <tsesmelistheodore@gmail.com>, 2014
|
||||
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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: 492d30ca33568c5819a4f95c90617de1_3730d98 "
|
||||
"<c1a4cca7e440358a87e394a300ed18e2_882277>, 2021\n"
|
||||
"Language-Team: Greek (http://www.transifex.com/toofishes/archlinux-pacman/"
|
||||
"language/el/)\n"
|
||||
"Language: el\n"
|
||||
@@ -359,6 +361,8 @@ msgstr "Η κατάτμηση %s είναι προσαρτημένη μόνο γ
|
||||
msgid ""
|
||||
"too many errors from %s, skipping for the remainder of this transaction\n"
|
||||
msgstr ""
|
||||
"υπερβολικά πολλά σφάλματα από %s, παράλειψη για το υπόλοιπο αυτής της "
|
||||
"συναλλαγής\n"
|
||||
|
||||
#: lib/libalpm/dload.c:220
|
||||
#, c-format
|
||||
@@ -404,7 +408,7 @@ msgstr ""
|
||||
#: lib/libalpm/dload.c:929
|
||||
#, c-format
|
||||
msgid "curl transfer error: %d\n"
|
||||
msgstr ""
|
||||
msgstr "σφάλμα μεταφοράς curl: %d\n"
|
||||
|
||||
#: lib/libalpm/dload.c:1055 lib/libalpm/sync.c:840
|
||||
#, c-format
|
||||
@@ -414,7 +418,7 @@ msgstr "σφάλμα λήψης μερικών αρχείων\n"
|
||||
#: lib/libalpm/dload.c:1078
|
||||
#, c-format
|
||||
msgid "download completed successfully but no file in the cache\n"
|
||||
msgstr ""
|
||||
msgstr "η λήψη ολοκληρώθηκε επιτυχώς αλλά δίχως αρχείο στην κρυφή μνήμη\n"
|
||||
|
||||
#: lib/libalpm/error.c:40
|
||||
#, c-format
|
||||
@@ -544,7 +548,7 @@ msgstr "διπλότυπος στόχος"
|
||||
#: lib/libalpm/error.c:94
|
||||
#, c-format
|
||||
msgid "duplicate filename"
|
||||
msgstr ""
|
||||
msgstr "διπλότυπο όνομα αρχείου"
|
||||
|
||||
#: lib/libalpm/error.c:98
|
||||
#, c-format
|
||||
@@ -948,7 +952,7 @@ msgstr "αδυναμία αντικατάστασης του %s από το %s\n
|
||||
#: lib/libalpm/sync.c:476
|
||||
#, c-format
|
||||
msgid "packages %s and %s have the same filename: %s\n"
|
||||
msgstr ""
|
||||
msgstr "τα πακέτα %s και %s έχουν το ίδιο όνομα αρχείου: %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:542 lib/libalpm/sync.c:612
|
||||
#, c-format
|
||||
|
||||
@@ -10,9 +10,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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Dan McGee <dpmcgee@gmail.com>, 2011\n"
|
||||
"Language-Team: English (United Kingdom) (http://www.transifex.com/toofishes/"
|
||||
"archlinux-pacman/language/en_GB/)\n"
|
||||
"Language: en_GB\n"
|
||||
|
||||
@@ -12,9 +12,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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Sebastien Zurfluh <sebastien.zurfluh@gmail.com>, 2017\n"
|
||||
"Language-Team: Esperanto (http://www.transifex.com/toofishes/archlinux-"
|
||||
"pacman/language/eo/)\n"
|
||||
"Language: eo\n"
|
||||
|
||||
@@ -11,28 +11,29 @@
|
||||
# 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
|
||||
# Pablo Lezaeta Reyes <prflr88@gmail.com>, 2017
|
||||
# Pablo Lezaeta Reyes <prflr88@gmail.com>, 2013-2016
|
||||
# Pablo Lezaeta Reyes <prflr88@gmail.com>, 2017
|
||||
# Pedro Román <roizheim@gmail.com>, 2013-2014,2016-2019
|
||||
# picodotdev <pico.dev@gmail.com>, 2016,2019,2021
|
||||
# prflr88 <prflr88@gmail.com>, 2017
|
||||
# picodotdev <pico.dev@gmail.com>, 2016,2019,2021-2022
|
||||
# Pablo Lezaeta Reyes <prflr88@gmail.com>, 2017
|
||||
# Swyter <Swyterzone@gmail.com>, 2015,2017-2018,2021
|
||||
# Swyter <Swyterzone@gmail.com>, 2021
|
||||
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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 04:57+0000\n"
|
||||
"Last-Translator: Swyter <Swyterzone@gmail.com>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: picodotdev <pico.dev@gmail.com>, 2016,2019,2021-2022\n"
|
||||
"Language-Team: Spanish (http://www.transifex.com/toofishes/archlinux-pacman/"
|
||||
"language/es/)\n"
|
||||
"Language: es\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? "
|
||||
"1 : 2;\n"
|
||||
|
||||
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
|
||||
#, c-format
|
||||
@@ -295,7 +296,7 @@ msgstr "la ruta de la base de datos no está definida\n"
|
||||
#: lib/libalpm/deps.c:184
|
||||
#, c-format
|
||||
msgid "dependency cycle detected:\n"
|
||||
msgstr "se ha detectado un bucle de dependencias:\n"
|
||||
msgstr "detectado bucle de dependencias:\n"
|
||||
|
||||
#: lib/libalpm/deps.c:187
|
||||
#, c-format
|
||||
@@ -305,7 +306,7 @@ msgstr "%s se quitará después de su dependencia %s\n"
|
||||
#: lib/libalpm/deps.c:191
|
||||
#, c-format
|
||||
msgid "%s will be installed before its %s dependency\n"
|
||||
msgstr "%s se instalará antes de su dependencia %s\n"
|
||||
msgstr "%s se instalará antes que su dependencia %s\n"
|
||||
|
||||
#: lib/libalpm/deps.c:666 lib/libalpm/deps.c:697
|
||||
#, c-format
|
||||
@@ -429,7 +430,7 @@ msgstr "error de transferencia de curl: %d\n"
|
||||
#: lib/libalpm/dload.c:1055 lib/libalpm/sync.c:840
|
||||
#, c-format
|
||||
msgid "failed to retrieve some files\n"
|
||||
msgstr "no se pudieron recibir algunos archivos\n"
|
||||
msgstr "no se pudo recibir algunos archivos\n"
|
||||
|
||||
#: lib/libalpm/dload.c:1078
|
||||
#, c-format
|
||||
@@ -590,7 +591,7 @@ msgstr ""
|
||||
#: lib/libalpm/error.c:106
|
||||
#, c-format
|
||||
msgid "failed to run transaction hooks"
|
||||
msgstr "no se pudieron ejecutar los «hooks»"
|
||||
msgstr "no se pudo ejecutar los «hooks»"
|
||||
|
||||
#: lib/libalpm/error.c:109
|
||||
#, c-format
|
||||
@@ -630,7 +631,7 @@ msgstr "no se pudo abrir el archivo del paquete"
|
||||
#: lib/libalpm/error.c:123
|
||||
#, c-format
|
||||
msgid "cannot remove all files for package"
|
||||
msgstr "no se pudieron quitar todos los archivos del paquete"
|
||||
msgstr "no se pudo quitar todos los archivos del paquete"
|
||||
|
||||
#: lib/libalpm/error.c:125
|
||||
#, c-format
|
||||
@@ -655,7 +656,7 @@ msgstr "firma PGP no válida"
|
||||
#: lib/libalpm/error.c:135 lib/libalpm/hook.c:514
|
||||
#, c-format
|
||||
msgid "could not satisfy dependencies"
|
||||
msgstr "no se pudieron satisfacer las dependencias"
|
||||
msgstr "no se pudo satisfacer las dependencias"
|
||||
|
||||
#: lib/libalpm/error.c:137
|
||||
#, c-format
|
||||
@@ -670,7 +671,7 @@ msgstr "archivos en conflicto"
|
||||
#: lib/libalpm/error.c:142
|
||||
#, c-format
|
||||
msgid "failed to retrieve some files"
|
||||
msgstr "no se pudieron descargar algunos archivos"
|
||||
msgstr "no se pudo descargar algunos archivos"
|
||||
|
||||
#: lib/libalpm/error.c:144
|
||||
#, c-format
|
||||
@@ -807,8 +808,7 @@ msgstr "no se pudo crear la carpeta: %s: %s\n"
|
||||
#: lib/libalpm/package.c:598
|
||||
#, 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"
|
||||
msgstr "no se pudo cargar completamente los metadatos para el paquete %s-%s\n"
|
||||
|
||||
#: lib/libalpm/remove.c:111
|
||||
#, c-format
|
||||
|
||||
@@ -12,24 +12,25 @@
|
||||
# ice, 2016
|
||||
# Leonel <leonelmalon@gmail.com>, 2013
|
||||
# neiko <neikokz+tsfx@gmail.com>, 2011
|
||||
# prflr88 <prflr88@gmail.com>, 2015,2017
|
||||
# prflr88 <prflr88@gmail.com>, 2015
|
||||
# prflr88 <prflr88@gmail.com>, 2015,2017
|
||||
# prflr88 <prflr88@gmail.com>, 2015,2017
|
||||
# Pablo Lezaeta Reyes <prflr88@gmail.com>, 2015,2017
|
||||
# Pablo Lezaeta Reyes <prflr88@gmail.com>, 2015
|
||||
# Pablo Lezaeta Reyes <prflr88@gmail.com>, 2015,2017
|
||||
# Pablo Lezaeta Reyes <prflr88@gmail.com>, 2015,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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Pablo Lezaeta Reyes <prflr88@gmail.com>, 2015,2017\n"
|
||||
"Language-Team: Spanish (Latin America) (http://www.transifex.com/toofishes/"
|
||||
"archlinux-pacman/language/es_419/)\n"
|
||||
"Language: es_419\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? "
|
||||
"1 : 2;\n"
|
||||
|
||||
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
|
||||
#, c-format
|
||||
|
||||
@@ -9,9 +9,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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Osoitz <oelkoro@gmail.com>, 2013\n"
|
||||
"Language-Team: Basque (http://www.transifex.com/toofishes/archlinux-pacman/"
|
||||
"language/eu/)\n"
|
||||
"Language: eu\n"
|
||||
|
||||
@@ -8,9 +8,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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Osoitz <oelkoro@gmail.com>, 2013\n"
|
||||
"Language-Team: Basque (Spain) (http://www.transifex.com/toofishes/archlinux-"
|
||||
"pacman/language/eu_ES/)\n"
|
||||
"Language: eu_ES\n"
|
||||
|
||||
@@ -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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Sami Korkalainen, 2018\n"
|
||||
"Language-Team: Finnish (http://www.transifex.com/toofishes/archlinux-pacman/"
|
||||
"language/fi/)\n"
|
||||
"Language: fi\n"
|
||||
|
||||
@@ -20,16 +20,17 @@ 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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-07-05 08:09+0000\n"
|
||||
"Last-Translator: Charles Monzat <c.monzat@laposte.net>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Xavier Devlamynck <magicrhesus@ouranos.be>, 2011\n"
|
||||
"Language-Team: French (http://www.transifex.com/toofishes/archlinux-pacman/"
|
||||
"language/fr/)\n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % "
|
||||
"1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
|
||||
#, c-format
|
||||
|
||||
@@ -15,9 +15,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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Alexandre Filgueira <faidoc@gmail.com>, 2013\n"
|
||||
"Language-Team: Galician (http://www.transifex.com/toofishes/archlinux-pacman/"
|
||||
"language/gl/)\n"
|
||||
"Language: gl\n"
|
||||
|
||||
@@ -8,9 +8,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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 14:03+0000\n"
|
||||
"Last-Translator: Panwar108 <caspian7pena@gmail.com>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Panwar108 <caspian7pena@gmail.com>, 2018,2020-2021\n"
|
||||
"Language-Team: Hindi (http://www.transifex.com/toofishes/archlinux-pacman/"
|
||||
"language/hi/)\n"
|
||||
"Language: hi\n"
|
||||
|
||||
@@ -9,17 +9,17 @@ 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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Viktor Coric <viktor_coric94@hotmail.com>, 2016\n"
|
||||
"Language-Team: Croatian (http://www.transifex.com/toofishes/archlinux-pacman/"
|
||||
"language/hr/)\n"
|
||||
"Language: hr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
|
||||
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
|
||||
#, c-format
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
# This file is distributed under the same license as the libalpm package.
|
||||
#
|
||||
# Translators:
|
||||
# Ács Zoltán <acszoltan111@gmail.com>, 2021
|
||||
# c2e331a438add123670fbf39846b5de3_8c31b08 <d7888a78469511cd116b0058dd23f760_811520>, 2021
|
||||
# Balló György <ballogyor@gmail.com>, 2014
|
||||
# Balló György <ballogyor@gmail.com>, 2011,2014,2016
|
||||
# Gábor Nagy <ngaba@bibl.u-szeged.hu>, 2011,2013
|
||||
@@ -20,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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-06-19 17:38+0000\n"
|
||||
"Last-Translator: Ács Zoltán <acszoltan111@gmail.com>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: user14 <nleknh@gmail.com>, 2019\n"
|
||||
"Language-Team: Hungarian (http://www.transifex.com/toofishes/archlinux-"
|
||||
"pacman/language/hu/)\n"
|
||||
"Language: hu\n"
|
||||
|
||||
@@ -16,9 +16,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Arch Linux Pacman package manager\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
|
||||
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: se7entime <se7entime@disroot.org>, 2013,2015\n"
|
||||
"Language-Team: Indonesian (http://www.transifex.com/toofishes/archlinux-"
|
||||
"pacman/language/id/)\n"
|
||||
"Language: id\n"
|
||||
|
||||
@@ -9,22 +9,24 @@
|
||||
# d574d4bb40c84861791a694a999cce69_9aabecb <ec34fbc10d74f76d8160c2aae04a84b4_6702>, 2014
|
||||
# d574d4bb40c84861791a694a999cce69_9aabecb <ec34fbc10d74f76d8160c2aae04a84b4_6702>, 2014
|
||||
# Dan McGee <dpmcgee@gmail.com>, 2011
|
||||
# Giovanni Scafora <giovanni@archlinux.org>, 2011-2013,2015
|
||||
# Giovanni Scafora <scafora.giovanni@gmail.com>, 2011-2013,2015,2022
|
||||
# ~Smlb <smlb@riseup.net>, 2014
|
||||
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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Giovanni Scafora <scafora.giovanni@gmail.com>, "
|
||||
"2011-2013,2015,2022\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/toofishes/archlinux-pacman/"
|
||||
"language/it/)\n"
|
||||
"Language: it\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? "
|
||||
"1 : 2;\n"
|
||||
|
||||
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
|
||||
#, c-format
|
||||
@@ -364,7 +366,7 @@ msgstr "La partizione %s è montata in sola lettura\n"
|
||||
#, c-format
|
||||
msgid ""
|
||||
"too many errors from %s, skipping for the remainder of this transaction\n"
|
||||
msgstr ""
|
||||
msgstr "troppi errori da %s, ignoro il resto dell'operazione\n"
|
||||
|
||||
#: lib/libalpm/dload.c:220
|
||||
#, c-format
|
||||
@@ -401,17 +403,17 @@ msgstr "l'url '%s' non è valido\n"
|
||||
#: lib/libalpm/dload.c:893
|
||||
#, c-format
|
||||
msgid "failed to setup a download payload for %s\n"
|
||||
msgstr ""
|
||||
msgstr "impossibile impostare un payload di download per %s\n"
|
||||
|
||||
#: lib/libalpm/dload.c:905
|
||||
#, c-format
|
||||
msgid "curl returned error %d from transfer\n"
|
||||
msgstr ""
|
||||
msgstr "curl ha restituito l'errore %d dal download\n"
|
||||
|
||||
#: lib/libalpm/dload.c:929
|
||||
#, c-format
|
||||
msgid "curl transfer error: %d\n"
|
||||
msgstr ""
|
||||
msgstr "errore di curl: %d\n"
|
||||
|
||||
#: lib/libalpm/dload.c:1055 lib/libalpm/sync.c:840
|
||||
#, c-format
|
||||
@@ -421,7 +423,7 @@ msgstr "impossibile scaricare alcuni file\n"
|
||||
#: lib/libalpm/dload.c:1078
|
||||
#, c-format
|
||||
msgid "download completed successfully but no file in the cache\n"
|
||||
msgstr ""
|
||||
msgstr "download completato con successo ma nessun file nella cache\n"
|
||||
|
||||
#: lib/libalpm/error.c:40
|
||||
#, c-format
|
||||
@@ -551,7 +553,7 @@ msgstr "pacchetto duplicato"
|
||||
#: lib/libalpm/error.c:94
|
||||
#, c-format
|
||||
msgid "duplicate filename"
|
||||
msgstr ""
|
||||
msgstr "il nome del file è duplicato"
|
||||
|
||||
#: lib/libalpm/error.c:98
|
||||
#, c-format
|
||||
@@ -686,7 +688,7 @@ msgstr "si è verificato un errore lanciando il downloader esterno"
|
||||
#: lib/libalpm/error.c:159
|
||||
#, c-format
|
||||
msgid "compiled without signature support"
|
||||
msgstr "compilato senza supporto per le firme"
|
||||
msgstr "compilato senza supporto delle firme"
|
||||
|
||||
#: lib/libalpm/error.c:162
|
||||
#, c-format
|
||||
@@ -741,29 +743,29 @@ msgstr "si è verificato un errore durante la lettura dell'hook %s: %s\n"
|
||||
#: lib/libalpm/hook.c:162 lib/libalpm/hook.c:206 lib/libalpm/hook.c:248
|
||||
#, c-format
|
||||
msgid "hook %s line %d: invalid option %s\n"
|
||||
msgstr "hook %s, riga %d: opzione non valida: %s\n"
|
||||
msgstr "hook %s riga %d: l'opzione %s non è valida\n"
|
||||
|
||||
#: lib/libalpm/hook.c:172
|
||||
#, c-format
|
||||
msgid "hook %s line %d: invalid section %s\n"
|
||||
msgstr "hook %s, riga %d: sezione non valida: %s\n"
|
||||
msgstr "hook %s riga %d: la sezione %s non è valida\n"
|
||||
|
||||
#: lib/libalpm/hook.c:184 lib/libalpm/hook.c:199 lib/libalpm/hook.c:218
|
||||
#: lib/libalpm/hook.c:241
|
||||
#, c-format
|
||||
msgid "hook %s line %d: invalid value %s\n"
|
||||
msgstr "hook %s, riga %d: valore non valido: %s\n"
|
||||
msgstr "hook %s riga %d: il valore %s non è valido\n"
|
||||
|
||||
#: lib/libalpm/hook.c:188 lib/libalpm/hook.c:211 lib/libalpm/hook.c:222
|
||||
#: lib/libalpm/hook.c:236
|
||||
#, c-format
|
||||
msgid "hook %s line %d: overwriting previous definition of %s\n"
|
||||
msgstr "hook %s, riga %d: sovrascrivo la definizione precedente di %s\n"
|
||||
msgstr "hook %s riga %d: sovrascrivo la definizione precedente di %s\n"
|
||||
|
||||
#: lib/libalpm/hook.c:243
|
||||
#, c-format
|
||||
msgid "hook %s line %d: unable to set option (%s)\n"
|
||||
msgstr "hook %s, riga %d: impossibile impostare l'opzione (%s)\n"
|
||||
msgstr "hook %s riga %d: impossibile impostare l'opzione (%s)\n"
|
||||
|
||||
#: lib/libalpm/hook.c:513
|
||||
#, c-format
|
||||
@@ -813,7 +815,8 @@ msgstr "impossibile rimuovere il file '%s': %s\n"
|
||||
#: lib/libalpm/remove.c:403 lib/libalpm/remove.c:412
|
||||
#, c-format
|
||||
msgid "could not backup %s due to PATH_MAX overflow\n"
|
||||
msgstr "impossibile eseguire il backup %s a causa di un overflow di PATH_MAX\n"
|
||||
msgstr ""
|
||||
"impossibile eseguire il backup di %s a causa di un overflow di PATH_MAX\n"
|
||||
|
||||
#: lib/libalpm/remove.c:554
|
||||
#, c-format
|
||||
@@ -833,7 +836,7 @@ msgstr "impossibile rimuovere la voce '%s' dalla cache\n"
|
||||
#: lib/libalpm/signing.c:163
|
||||
#, c-format
|
||||
msgid "Public keyring not found; have you run '%s'?\n"
|
||||
msgstr "Portachiavi pubblico non trovato; hai eseguito '%s'?\n"
|
||||
msgstr "Il portachiavi pubblico non è stato trovato; hai eseguito '%s'?\n"
|
||||
|
||||
#: lib/libalpm/signing.c:199 lib/libalpm/signing.c:767
|
||||
#, c-format
|
||||
@@ -848,7 +851,7 @@ msgstr "ricerca della chiave %s tramite WKD in corso\n"
|
||||
#: lib/libalpm/signing.c:283
|
||||
#, c-format
|
||||
msgid "gpg error: %s\n"
|
||||
msgstr "errore GPG: %s\n"
|
||||
msgstr "errore gpg: %s\n"
|
||||
|
||||
#: lib/libalpm/signing.c:430 lib/libalpm/signing.c:503
|
||||
#, c-format
|
||||
@@ -894,12 +897,12 @@ msgstr ""
|
||||
#: lib/libalpm/signing.c:968
|
||||
#, c-format
|
||||
msgid "%s: key \"%s\" is unknown\n"
|
||||
msgstr "%s: chiave \"%s\" sconosciuta\n"
|
||||
msgstr "%s: la chiave \"%s\" è sconosciuta\n"
|
||||
|
||||
#: lib/libalpm/signing.c:977
|
||||
#, c-format
|
||||
msgid "%s: key \"%s\" is disabled\n"
|
||||
msgstr "%s: chiave \"%s\" disabilitata\n"
|
||||
msgstr "%s: la chiave \"%s\" è disabilitata\n"
|
||||
|
||||
#: lib/libalpm/signing.c:981
|
||||
#, c-format
|
||||
@@ -915,13 +918,13 @@ msgstr "%s: la firma di \"%s\" non è valida\n"
|
||||
#: lib/libalpm/signing.c:1183
|
||||
#, c-format
|
||||
msgid "%s: signature format error\n"
|
||||
msgstr "%s: errore formato firma\n"
|
||||
msgstr "%s: errore formato della firma\n"
|
||||
|
||||
#: lib/libalpm/signing.c:1136 lib/libalpm/signing.c:1169
|
||||
#: lib/libalpm/signing.c:1177
|
||||
#, c-format
|
||||
msgid "%s: unsupported signature format\n"
|
||||
msgstr "%s: formato firma non supportato\n"
|
||||
msgstr "%s: il formato della firma non è supportato\n"
|
||||
|
||||
#: lib/libalpm/sync.c:96
|
||||
#, c-format
|
||||
@@ -957,7 +960,7 @@ msgstr "impossibile sostituire %s con %s\n"
|
||||
#: lib/libalpm/sync.c:476
|
||||
#, c-format
|
||||
msgid "packages %s and %s have the same filename: %s\n"
|
||||
msgstr ""
|
||||
msgstr "i pacchetti %s e %s hanno lo stesso nome: %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:542 lib/libalpm/sync.c:612
|
||||
#, c-format
|
||||
|
||||
@@ -12,9 +12,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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-25 05:28+0000\n"
|
||||
"Last-Translator: kusakata\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Satoru Abe <s@polamjag.info>, 2015\n"
|
||||
"Language-Team: Japanese (http://www.transifex.com/toofishes/archlinux-pacman/"
|
||||
"language/ja/)\n"
|
||||
"Language: ja\n"
|
||||
|
||||
@@ -9,9 +9,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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Dan McGee <dpmcgee@gmail.com>, 2011\n"
|
||||
"Language-Team: Kazakh (http://www.transifex.com/toofishes/archlinux-pacman/"
|
||||
"language/kk/)\n"
|
||||
"Language: kk\n"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
# This file is distributed under the same license as the libalpm package.
|
||||
#
|
||||
# Translators:
|
||||
# 배태길 <esrevinu@gmail.com>, 2017-2019
|
||||
# 배태길 <esrevinu@gmail.com>, 2017-2019,2021
|
||||
# Ji-Hyeon Gim <potatogim@potatogim.net>, 2014,2018
|
||||
# Thomas Sungjin Kang <potopro@gmail.com>, 2012-2013
|
||||
# Thomas Sungjin Kang <potopro@gmail.com>, 2013
|
||||
@@ -16,9 +16,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Arch Linux Pacman package manager\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
|
||||
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: 배태길 <esrevinu@gmail.com>, 2017-2019,2021\n"
|
||||
"Language-Team: Korean (http://www.transifex.com/toofishes/archlinux-pacman/"
|
||||
"language/ko/)\n"
|
||||
"Language: ko\n"
|
||||
@@ -351,7 +351,7 @@ msgstr "파티션 %s가 읽기 전용으로 마운트되었습니다.\n"
|
||||
#, c-format
|
||||
msgid ""
|
||||
"too many errors from %s, skipping for the remainder of this transaction\n"
|
||||
msgstr ""
|
||||
msgstr "너무 많은 오류, 서버: %s, 이 처리의 나머지를 위해서 건너뜀\n"
|
||||
|
||||
#: lib/libalpm/dload.c:220
|
||||
#, c-format
|
||||
@@ -386,17 +386,17 @@ msgstr "url '%s'가 잘못되었습니다.\n"
|
||||
#: lib/libalpm/dload.c:893
|
||||
#, c-format
|
||||
msgid "failed to setup a download payload for %s\n"
|
||||
msgstr ""
|
||||
msgstr "다운로드 페이로드를 구성하지 못함, 대상: %s\n"
|
||||
|
||||
#: lib/libalpm/dload.c:905
|
||||
#, c-format
|
||||
msgid "curl returned error %d from transfer\n"
|
||||
msgstr ""
|
||||
msgstr "curl이 전송 중 오류 %d을 돌려 줌\n"
|
||||
|
||||
#: lib/libalpm/dload.c:929
|
||||
#, c-format
|
||||
msgid "curl transfer error: %d\n"
|
||||
msgstr ""
|
||||
msgstr "curl 전송 오류: %d\n"
|
||||
|
||||
#: lib/libalpm/dload.c:1055 lib/libalpm/sync.c:840
|
||||
#, c-format
|
||||
@@ -406,7 +406,7 @@ msgstr "일부 파일을 가져오지 못했습니다.\n"
|
||||
#: lib/libalpm/dload.c:1078
|
||||
#, c-format
|
||||
msgid "download completed successfully but no file in the cache\n"
|
||||
msgstr ""
|
||||
msgstr "다운로드를 성공적으로 완료하였지만 캐시에 파일이 없음\n"
|
||||
|
||||
#: lib/libalpm/error.c:40
|
||||
#, c-format
|
||||
@@ -536,7 +536,7 @@ msgstr "대상이 중복되었습니다."
|
||||
#: lib/libalpm/error.c:94
|
||||
#, c-format
|
||||
msgid "duplicate filename"
|
||||
msgstr ""
|
||||
msgstr "중복 파일이름"
|
||||
|
||||
#: lib/libalpm/error.c:98
|
||||
#, c-format
|
||||
@@ -940,7 +940,7 @@ msgstr "%s를 %s로 대체할 수 없습니다.\n"
|
||||
#: lib/libalpm/sync.c:476
|
||||
#, c-format
|
||||
msgid "packages %s and %s have the same filename: %s\n"
|
||||
msgstr ""
|
||||
msgstr "꾸러미 %s와 %s는 같은 파일이름을 가지고 있습니다: %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:542 lib/libalpm/sync.c:612
|
||||
#, c-format
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libalpm\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
|
||||
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
||||
@@ -9,14 +9,15 @@
|
||||
# Dan McGee <dpmcgee@gmail.com>, 2011
|
||||
# Kiprianas Spiridonovas <k.spiridonovas@gmail.com>, 2013
|
||||
# Moo, 2015-2019
|
||||
# Tautvydas Ž., 2021
|
||||
# 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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Tautvydas Ž., 2021\n"
|
||||
"Language-Team: Lithuanian (http://www.transifex.com/toofishes/archlinux-"
|
||||
"pacman/language/lt/)\n"
|
||||
"Language: lt\n"
|
||||
@@ -355,7 +356,7 @@ msgstr "Skirsnis %s prijungtas tik skaitymui\n"
|
||||
#, c-format
|
||||
msgid ""
|
||||
"too many errors from %s, skipping for the remainder of this transaction\n"
|
||||
msgstr ""
|
||||
msgstr "per daug klaidų iš %s, praleidžiama likusi šios operacijos dalis\n"
|
||||
|
||||
#: lib/libalpm/dload.c:220
|
||||
#, c-format
|
||||
@@ -391,17 +392,17 @@ msgstr "neteisingas url „%s“\n"
|
||||
#: lib/libalpm/dload.c:893
|
||||
#, c-format
|
||||
msgid "failed to setup a download payload for %s\n"
|
||||
msgstr ""
|
||||
msgstr "nepavyko nustatyti %s atsisiuntimo naudingojo krovinio\n"
|
||||
|
||||
#: lib/libalpm/dload.c:905
|
||||
#, c-format
|
||||
msgid "curl returned error %d from transfer\n"
|
||||
msgstr ""
|
||||
msgstr "curl grąžino %d perkėlimo klaidą\n"
|
||||
|
||||
#: lib/libalpm/dload.c:929
|
||||
#, c-format
|
||||
msgid "curl transfer error: %d\n"
|
||||
msgstr ""
|
||||
msgstr "cur perkėlimo klaida: %d\n"
|
||||
|
||||
#: lib/libalpm/dload.c:1055 lib/libalpm/sync.c:840
|
||||
#, c-format
|
||||
@@ -411,7 +412,7 @@ msgstr "nepavyko gauti kai kurių failų\n"
|
||||
#: lib/libalpm/dload.c:1078
|
||||
#, c-format
|
||||
msgid "download completed successfully but no file in the cache\n"
|
||||
msgstr ""
|
||||
msgstr "atsisiuntimas sėkmingai baigtas, bet talpykloje nėra failo\n"
|
||||
|
||||
#: lib/libalpm/error.c:40
|
||||
#, c-format
|
||||
@@ -541,7 +542,7 @@ msgstr "objektas jau yra"
|
||||
#: lib/libalpm/error.c:94
|
||||
#, c-format
|
||||
msgid "duplicate filename"
|
||||
msgstr ""
|
||||
msgstr "pasikartojantis failo vardas"
|
||||
|
||||
#: lib/libalpm/error.c:98
|
||||
#, c-format
|
||||
@@ -945,7 +946,7 @@ msgstr "negalima pakeisti %s failu %s\n"
|
||||
#: lib/libalpm/sync.c:476
|
||||
#, c-format
|
||||
msgid "packages %s and %s have the same filename: %s\n"
|
||||
msgstr ""
|
||||
msgstr "%s ir %s paketai turi vienodus vardus: %s\n"
|
||||
|
||||
#: lib/libalpm/sync.c:542 lib/libalpm/sync.c:612
|
||||
#, c-format
|
||||
|
||||
@@ -13,9 +13,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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-24 19:49+0000\n"
|
||||
"Last-Translator: Alexander F. Rødseth <rodseth@gmail.com>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Thor K. H. <nitrolinken@gmail.com>, 2019\n"
|
||||
"Language-Team: Norwegian Bokmål (http://www.transifex.com/toofishes/"
|
||||
"archlinux-pacman/language/nb/)\n"
|
||||
"Language: nb\n"
|
||||
|
||||
@@ -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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-08-03 21:32+0000\n"
|
||||
"Last-Translator: Philip Goto <philip.goto@gmail.com>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: zenlord <zenlord@gmail.com>, 2013,2015,2019\n"
|
||||
"Language-Team: Dutch (http://www.transifex.com/toofishes/archlinux-pacman/"
|
||||
"language/nl/)\n"
|
||||
"Language: nl\n"
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
# megamann, 2014
|
||||
# megamann, 2014-2015
|
||||
# megamann, 2015
|
||||
# Piotr Strębski <strebski@gmail.com>, 2013,2017-2018
|
||||
# Piotr Strębski <strebski@gmail.com>, 2013,2017-2018,2022
|
||||
# Piotr Strębski <strebski@gmail.com>, 2013
|
||||
# Sebastian Jakubiak, 2019
|
||||
# Sebastian Jakubiak, 2019
|
||||
@@ -21,18 +21,18 @@ 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: 2021-09-04 16:15+1000\n"
|
||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
|
||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
|
||||
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
|
||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
|
||||
"Last-Translator: Piotr Strębski <strebski@gmail.com>, 2013,2017-2018,2022\n"
|
||||
"Language-Team: Polish (http://www.transifex.com/toofishes/archlinux-pacman/"
|
||||
"language/pl/)\n"
|
||||
"Language: pl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n"
|
||||
"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n"
|
||||
"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && "
|
||||
"(n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && "
|
||||
"n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
|
||||
|
||||
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
|
||||
#, c-format
|
||||
@@ -416,7 +416,7 @@ msgstr "nie udało się pobrać niektórych plików\n"
|
||||
#: lib/libalpm/dload.c:1078
|
||||
#, c-format
|
||||
msgid "download completed successfully but no file in the cache\n"
|
||||
msgstr ""
|
||||
msgstr "pobieranie zakończone pomyślnie, ale brak pliku w pamięci podręcznej\n"
|
||||
|
||||
#: lib/libalpm/error.c:40
|
||||
#, c-format
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user