1
0
forked from mirrors/pacman

Compare commits

...

743 Commits

Author SHA1 Message Date
Xavier Chantry
aba58e95ab TRANSLATORS: update pt_BR responsible
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-08-02 18:12:47 -05:00
Xavier Chantry
e8db103122 fix warning when internal download is not used
After commit 30c4d53ce5, get_destfile and
get_tempfile are only used for internal download, so move these two
functions inside the ifdef

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-08-02 12:16:02 -05:00
Allan McRae
b2dcacb5aa Remove unneed order arguements in zn_CN translation
Fixes FS#12812

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-08-02 12:06:27 -05:00
Sergey Tereschenko
a5ef0e072a minor fixes on russian translation
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-08-02 12:05:41 -05:00
Gerardo Exequiel Pozzi
ac37e92449 Fix perms on files NEWS and TRANSLATORS
Recently changed accidentally from 644 to 755.

Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-08-01 17:13:32 -05:00
Armando M. Baratti
44359218ea Update Brazilian Portuguese translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-08-01 15:51:57 -05:00
Dan McGee
bc83ff76c6 French translation reformat
'make distcheck' had issues with this one and reformatted it. In addition,
it found a fuzzy message which is now fixed due to an inadvertent msgid
edit.

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-08-01 13:36:07 -05:00
Dan McGee
4eb1469765 Version bump for 3.3.0
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-08-01 13:35:59 -05:00
Dan McGee
cfc4c24db2 Merge commit 'xavier/trans' 2009-08-01 13:06:28 -05:00
Xavier Chantry
bf9249e929 Add -Suu operation to the NEWS.
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-08-01 13:03:54 -05:00
Jeff Bailes
4cadee4f08 update english british translation
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-07-31 01:49:07 +02:00
Nagy Gabor
fc29d0c990 update hungarian translation
Thanks to Avramucz Peter <muczyjoe@gmail.com>
for having translated all the scripts !

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-07-30 19:27:37 +02:00
Lu Gan
9a0122982c update simplified chinese translation
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-07-30 19:27:37 +02:00
Sergey Tereschenko
433c52bb91 update russian translation
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-07-30 19:27:37 +02:00
Roman Kyrylych (Роман Кирилич)
78e92b1d02 update ukrainian translation
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-07-30 19:27:36 +02:00
Matthias Gorissen
05533b8b11 update german translation
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-07-29 19:41:34 +02:00
Baurzhan Muftakhidinov
00c26338de update Kazakh translation
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-07-29 19:37:53 +02:00
Volodia Macovei
684047a764 update romanian translation
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-07-29 19:34:27 +02:00
Mateusz Herych
e65d82afa1 update polish translation
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-07-29 19:34:27 +02:00
Samed Beyribey
734aa1ce59 update turkish translation
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-07-29 19:34:27 +02:00
Vojtech Gondzala
4e643a3dd7 update czech translation
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-07-29 19:34:26 +02:00
Juan Pablo Gonzalez Tognarelli
08c535e262 update spanish translation
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-07-29 19:34:26 +02:00
Giovanni Scafora
8fdab1e1f0 update italian translation
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-07-29 19:34:26 +02:00
CalimeroTeknik
b9c6b41387 po/fr.po : corrections and improvements
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-07-29 19:33:39 +02:00
Xavier Chantry
04c31828b6 Update French translation
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-07-29 19:33:30 +02:00
Dan McGee
44272ca0c8 Regenerate pacman PO files
We missed a message. Commit 3a6ed1142 added the message to gettext, this
commit adds it to the PO files.

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-28 07:00:42 -05:00
Nagy Gabor
3a6ed11428 Fix an untranslated message in src/callback.c
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-28 06:59:48 -05:00
Dan McGee
9b086d8b9e Update PO files in prep for 3.3 release 2009-07-27 21:42:16 -05:00
Dan McGee
fb1936bc19 Update POT files 2009-07-27 21:41:58 -05:00
Dan McGee
2f0fc0decb Update copyrights in gettext files 2009-07-27 21:40:43 -05:00
Nagy Gabor
5753c12e7b Update README file
1. API changes between 3.2 and 3.3 section has been added.
2. Corrections on alpm_option documentation.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-27 21:06:19 -05:00
Nagy Gabor
7f3a20612e Change the e-mail address of Nagy Gabor in AUTHORS
The old one is invalid now.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-27 21:03:47 -05:00
Cedric Staniewski
fb97d325a5 Do not allow pkgnames to start with a hyphen
Commandline arguments starting with a hyphen are usually recognized as
options by unix tools. Therefore, allowing hyphens at the beginning of a
package name requires a different handling of pkgnames as suggested by
rm's manpage.
It would be possible to make the scripts 'hyphen-safe', but
hyphen-prefixed packages will cause trouble for pacman users which do
not know these tricks.

Signed-off-by: Cedric Staniewski <cedric@gmx.ca>
[Dan: remove the repo-add check]
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-26 23:29:55 -05:00
Dan McGee
2013d06266 Ensure version screen fits in 80 cols
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-26 23:02:20 -05:00
Allan McRae
a8ddc7618f PKGBUILD-split.proto: pkgbase is a string not an array
Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-26 22:59:13 -05:00
Dan McGee
597118ddd7 Revert "makepkg: Exit on failure within build() or package() functions"
As reported in FS#15210, we have some problems with split packages and
variable overrides because of this patch. For now, in prep for a release, it
is best to back it out and see what we can do later.

This reverts commit 621aa26e26.

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-26 12:58:02 -05:00
Xavier Chantry
6fa5f2075a Use lstat instead of stat for -Qo
This fixes: FS#15675 - pacman can not determine ownership of dangling
symlinks

Using lstat seems more correct than stat for the -Qo operation anyway.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-25 17:25:50 -05:00
Sebastian Nowicki
30c4d53ce5 Add a fetch callback to allow front-end download support
This allows a frontend to define its own download algorithm so that the
libfetch dependency can be omitted without using an external process.
The callback will be used when if it is defined, otherwise the old
behavior applies.

Signed-off-by: Sebastian Nowicki <sebnow@gmail.com>
[Dan: minor cleanups]
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-22 21:27:46 -05:00
Nagy Gabor
1d19f0896c Introduce -Suu
If the user switches from unstable repo to a stable one, it is quite hard to
sync its system with the new repo (the user will see many "Local is newer
than stable" messages, nothing more). That's why I introduced -Suu, which
treats a sync package like an upgrade, iff the package version doesn't match
with the local one's.

I added a new pactest (sync104.py) to test this, and I updated the
documentation of -Su.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
[Dan: slight doc reword]
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-22 20:16:52 -05:00
Dan McGee
ca6ef852f9 New feature: files verification
This implements FS#13877. Add a new option "-Qk" which checks if all of the
files for a given package (or packages) are really on the system (i.e. not
accidentally deleted). This can be combined with filters and other display
options. It also respects both the --quiet and --verbose flags to give
varying levels of output.

Based on the original patch by Charly Coste <changaco@laposte.net>, thanks
for your work!

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-22 20:13:53 -05:00
Allan McRae
4b21504ffc makepkg: add pkgbase to .PKGINFO and database for split packages
With split packages, the pkgbase variable provides a useful way to
find out which packages were build from the same PKGBUILD. Add it
to the packages .PKGINFO file and the repo database only when
package splitting is used.

Original-patch-by: Pierre Schmitz <pierre@archlinux.de>
[Allan: restrict to including only with spilt packages
        and include after pkgname]
Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-22 06:37:33 -05:00
Nagy Gabor
cf669eda9c Fix a minor memleak
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-21 21:45:07 -05:00
Giovanni Scafora
1c4596b4be Update Italian Translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-21 20:24:06 -05:00
Xavier Chantry
344ced22c3 Fix one bug with .paccheck leftover file
This happens for example if you install a new package, and one of its
backup config file is already on the file system.

If the local file was different, it was saved to .pacorig which is fine.

However if the local file and pkg file were the same, the pkg file
(temporarily extracted as .paccheck) was left on the system.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-20 16:38:15 -05:00
Xavier Chantry
60b6cde637 Fix 2 minor memleaks
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-20 16:37:45 -05:00
Xavier Chantry
5d15bb68f7 Do not create .pacsave with -R, if the file is unchanged
This fixes FS#15546

Also fix the interface of unlink_file which was really stupid..
(alpm_list_t used with only one element)

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-20 16:37:37 -05:00
Xavier Chantry
45f90de0eb Fix klibc conflict case.
A package can now replace symdir->dir by dir without fileconflicts.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-20 10:13:42 -05:00
Xavier Chantry
bfd6817112 Fix fileconflict004
When one package wants to replace a directory by a file, we check that all
files in that directory were owned by that package.

Additionally pacman can be more verbose when the extraction of the symlink
(or file) fails. The patch to add.c looks more complex than it is, I just
moved and reindented code to handle cases 10 and 11 together.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-20 10:13:25 -05:00
Xavier Chantry
a3ecbec6b5 pactest : safety check with MODE
check that the file exists first, otherwise pactest just breaks.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-20 10:12:26 -05:00
Xavier Chantry
8ebc07744a Offer to clean up non-package files in cache directory.
This implements FS#15142.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-16 06:15:26 -05:00
Xavier Chantry
2e043aae36 Run ldconfig inside chroot.
This fixes FS#15294.

The code to run a command inside a chroot was refactored from the
_alpm_runscriptlet function to _alpm_run_chroot.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-07-16 06:12:04 -05:00
Volodia Macovei
41a55d4eff Update Romanian translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-15 21:34:53 -05:00
Allan McRae
5dc0b80c26 makepkg: clean up BUILDSCRIPT usage
FS#15448 (which is made worse by the "fix" for FS#14727...), highlighted
some deficiencies in the usage of the BUILDSCRIPT variable. In particular,
only relative paths worked with "-p" and some output was very strange in
combination with the "-p" flag or reading from /dev/stdin. e.g.
"Please add a license line to your /dev/stdin!".

This patch adds a new variable, BUILDFILE, which contains the full path
to the BUILDSCRIPT.  This defaults to $startdir/$BUILDSCRIPT.

Also, fix a missed quoting of $BUILD{SCRIPT->FILE} and remove warning
about missing BUILDSCRIPT definition in makepkg.conf as the default
BUILDSCRIPT value is now specified during configure. Add check that
BUILDFILE is writable before updating VCS PKGBUILDs. When making a source
package, the BUILDSCRIPT always gets given the default name, regardless
of what it was originally called.

Signed-off-by: Allan McRae <allan@archlinux.org>
2009-07-12 17:32:57 +10:00
Allan McRae
104daa16a6 makepkg: allow spaces in source file names
The download command failed with sources that contained spaces.
Remainder of fix for FS#15323.

Signed-off-by: Allan McRae <allan@archlinux.org>
2009-07-12 01:17:25 +10:00
Dan McGee
caa0f2205a makepkg: fix breakage with '%' in source filenames
Ensure we don't pass a bare filename to printf that might contain a
lookalike '%' escape sequence. Fixes part of FS#15323.

Signed-off-by: Dan McGee <dan@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2009-07-12 01:02:25 +10:00
Dan McGee
68c10690ea makepkg: quote filenames when extracting
We currently fall apart on files with spaces in the names.

Signed-off-by: Dan McGee <dan@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2009-07-12 01:02:21 +10:00
Allan McRae
8d7764abae Quote values in the arch array in example PKGBUILD
Signed-off-by: Allan McRae <allan@archlinux.org>
2009-07-10 16:29:58 +10:00
Allan McRae
6092dda177 makepkg: check for package functions when package splitting
Makes sure the required package functions are present when using package
splitting.  Also moves setting of pkgbase variable outside the
check_sanity function to somewhere more appropriate.

Signed-off-by: Allan McRae <allan@archlinux.org>
2009-07-10 16:29:58 +10:00
Allan McRae
e72cce352a makepkg: fix pkgdesc restoration with split packaging
A pkgdesc with spaces in it would get restored to an array and thus only
the first word would be restored (FS#15210). Convert that array back to a
string.

Signed-off-by: Allan McRae <allan@archlinux.org>
2009-07-10 16:29:58 +10:00
Allan McRae
621aa26e26 makepkg: Exit on failure within build() or package() functions
Errors in build() functions were only fatal, if "--log" was enabled. Errors in
package() functions were never fatal. Piping these functions through "cat -"
triggers error trapping. This prevents the need for "|| return 1" usage in
PKGBUILDs.

Original-patch-by: Juergen Hoetzel <juergen@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2009-07-10 16:29:58 +10:00
Allan McRae
b312c820c8 makepkg: fix check for previously built packages with package splitting
Checks if some or all packages are built before overwriting/installing.
Adds some new strings for translation.

Signed-off-by: Allan McRae <allan@archlinux.org>
2009-07-10 16:29:58 +10:00
Allan McRae
617e7d512f makepkg: clean up moving PKGINFO creation to a function
Someone forgot to commit this when pulling in the original patch
to his working branch...

Signed-off-by: Allan McRae <allan@archlinux.org>
2009-07-10 16:29:57 +10:00
Dan McGee
c72b4543b6 Update copyright headers and messages
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-01 02:08:33 -05:00
Dan McGee
be7266155f Allow remove to accept 'local/' prefix
See FS#14642- this allows -Qs output to be fed back into pacman without
problems or having to strip off the 'local/' prefix manually.

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-07-01 01:42:35 -05:00
Xavier Chantry
a21d1f99b8 Update NEWS for 3.3
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-06-30 23:37:36 -05:00
Volodia Macovei
6af163dd79 Add new Romanian translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-06-30 23:34:18 -05:00
Dan McGee
a89eae99f6 Fix compile warning fail on older versions of GCC
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-06-30 23:14:18 -05:00
Nagy Gabor
6d2930cc5a Update the documentation of -Qs and -Ss
It was undocumented that multiple regexps are interpreted using logical AND.

Thanks to Recursive@#archlinux for his help.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-06-23 21:54:12 -05:00
Nagy Gabor
21fa09349b Document the .pacnew extension with NoUpgrade
See FS#13832.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-06-23 21:53:57 -05:00
Dan McGee
68813ca986 Merge commit 'allan/working' 2009-06-23 21:52:35 -05:00
Dan McGee
8c8fa2d82c Search package groups when searching a DB
See FS#13099. This makes sense especially for the pacman frontend, as we
show groups in the search output.

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-06-23 21:51:49 -05:00
Dan McGee
8bbaf045b9 repo-add: use bsdtar optimization for better performance
When unzipping packages and the database archives, we don't need to look
through the entire archive to do what we need to do. For packages, .PKGINFO
should only be found once and should be the first file in the package. For
the database check, we only really need to look for one desc file.

The bsdtar -q option is very similar to the GNU tar --occurrence=1 option.

Example of speedup:

$ time repo-add junkdb.db.tar.gz *.pkg.tar.gz >/dev/null
real	0m16.159s
user	0m14.836s
sys	0m2.277s

$ time ./scripts/repo-add junkdb.db.tar.gz *.pkg.tar.gz >/dev/null
real	0m4.949s
user	0m3.730s
sys	0m2.093s

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-06-23 21:51:42 -05:00
Loui Chang
01f9ae63e7 makepkg: Move .PKGINFO creation into a function.
Signed-off-by: Loui Chang <louipc.ist@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2009-06-22 17:09:16 +10:00
Loui Chang
02acf65ef3 makepkg: Download sources and check checksums for any source package.
It wouldn't be very nice to ship a PKGBUILD with the wrong checksums.

Signed-off-by: Loui Chang <louipc.ist@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2009-06-21 20:32:17 +10:00
Allan McRae
b3a5535360 Fix typos in PKGBUILD man page
Original-patch-by: Jason Ribeiro
Signed-off-by: Allan McRae <allan@archlinux.org>
2009-06-21 20:00:00 +10:00
Nagy Gabor
f250b034b4 Enable remove progressbar with -S (conflict resolving)
$ sudo pacman -S mc

Old output:
***********
:: mc conflicts with mc-mp. Remove mc-mp? [Y/n] y
...
(1/1) checking for file conflicts                   [################] 100%
(1/1) installing mc                                 [################] 100%

New output:
***********
:: mc conflicts with mc-mp. Remove mc-mp? [Y/n] y
...
(1/1) checking for file conflicts                   [################] 100%
(1/1) removing mc-mp                                [################] 100%
(1/1) installing mc                                 [################] 100%

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-06-13 09:57:59 -05:00
Allan McRae
ef500b44ce makepkg: fix variable backup/restore for splitpkg
The backup and restore of variables that can be overridden while
making split packages only dealt with the first element, not the
whole array (FS#15010).  Adjust the bash voodoo to fix it...

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-06-13 09:51:18 -05:00
Allan McRae
04d5c4294a makepkg: fix PKGBUILD sanity check
If PKGBUILD was good, the "insane" variable was not defined and so
the if statement failed.  Simplify and fix this check.

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-06-13 09:50:53 -05:00
Dan McGee
aa579b8438 Give sensible feedback when a repo has no configured servers
This fixes FS#14899. When running an -Sp operation without servers
configured for a repository, we would segfault, so add an assert to the
backend method returning the first server preventing a null pointer
dereference.

In addition, add a new error code to libalpm that indicates we have no
servers configured for a repository. This makes -Sy and -S <package>
operations fail gracefully and helpfully when a repo is set up with no
servers, as the default mirrorlist in Arch is provided this way.

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-06-08 20:02:17 -05:00
Nagy Gabor
19b8b63885 Introduce _alpm_pkg_free_trans()
The main purpose of this function to make our code more readable.
It frees transaction specific fields of pmpkg_t. (It is used when a package
is removed from the target list.)

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-06-07 15:11:16 -05:00
Dan McGee
e61ab1536f makepkg: refactor sanity checking into a function
No new checks, just move it into a function and return 1 rather than exit
directly. This also allows the use of local variables.

Signed-off-by: Dan McGee <dan@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2009-06-07 15:07:37 -05:00
Xavier Chantry
13b281d743 xdelta : only handle gz compression specifically
There is apparently no need to handle the re-compression manually when
applying a xdelta patch in case of bzip2 or xz.

Only gzip needs to be handled specifically for disabling timestamp with the
-n option.

After this patch, if xdelta is enhanced with xz support (1-line patch), it
will be transparent from pacman side.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-06-06 11:16:45 -05:00
Nagy Gabor
9af9c0f328 Document -T in the manual
See FS#14833.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
[Dan: slight wording rework]
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-06-06 10:46:56 -05:00
Nagy Gabor
f4ecc908ec We don't need root with -Sp
FS#8905 is fixed. The front-end passes PM_TRANS_FLAG_NOLOCK to the back-end,
so it doesn't lock the database. That's why we don't need root anymore.

I reworked (and renamed) needs_transaction() accordingly. I also added
missing -Sc check there (for example, -Sci didn't print non-root error, but
pacman wanted to lock the database).

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-06-01 22:01:04 -05:00
Nagy Gabor
c520d38451 Introduce PM_TRANS_FLAG_NOLOCK
This flag indicates that the front-end will not call alpm_trans_commit(),
so the database needn't be locked. This is the first step toward fixing
FS#8905.

If this flag is set, alpm_trans_commit() does nothing and returns with
an error (that has new code: PM_ERR_TRANS_NOT_LOCKED).

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-06-01 22:00:57 -05:00
Nagy Gabor
1b4135ca5d Change package to package(s) and file to file(s) in documentation
The pacman --help pages and the manual suggested that only one package can
be upgraded/removed per transaction.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-06-01 21:59:03 -05:00
Gerardo Exequiel Pozzi
6360fe0100 Remove unused string.h from src/pacman/remove.c
This header was used in the code for the function strdup()
that is not used anymore.

Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-06-01 21:57:58 -05:00
Xavier Chantry
30e2496775 repo-add: fail early if repo can not be created
Before this commit, the repo creation could fail after all packages have
been added to the database. Now this will be detected before adding
anything.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-05-23 12:27:32 -05:00
Gerardo Exequiel Pozzi
35b9dfc380 Remove unused included headers from testdb.c and testpkg.c
libgen.h was used for basename() in function main() from src/util/testdb.c
string.h was used for strlen() in function output_cb() from src/util/testpkg.c

Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-05-18 23:22:38 -05:00
Pierre Schmitz
c301d6aa25 Add support for the xz archive format
This simple patch adds support for the xz archive format to makepkg and repo-
add.
Xz can be used as source, package and package db file type.

Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
[Dan: fixed a few alignment issues]
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-05-18 23:16:59 -05:00
Nagy Gabor
0bf340f73c Remove unused error codes and handle PM_ERR_RETRIEVE by alpm_strerror()
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-05-18 23:11:43 -05:00
Nagy Gabor
882bff36ac Remove find_replacements()
"Foo replaces bar" simply means that "foo is a new version of bar".
So this patch refactors the code to use this "rule".

_alpm_sync_sysupgrade now does the following for each local package [bar]
(pseudo-code):
for db in syncdbs {
   if(db contains bar) {check if db/bar is an upgrade; break;}
   replacers = find(bar replacers in db);
   if(replacers!=NULL) {ask_user; break;}
}

Note:
1. Replacers are grouped per repo. If more than one package replace bar in
a repo, all of them are considered ("package set of bar replacers").
2. If repo1/foo1 and repo2/foo2 both replaces bar, only repo1/foo1 is
considered (if repo1 stands before repo2 in pacman.conf). FS#11737 is fixed.
3. It can happen that pacman doesn't consider any replacer, if it found a
literal "earlier", so sync132.py modified accordingly (btw, that situation
should not appear irl).

The new sysupgrade code doesn't use sync_newversion(), so I removed the
"local is newer than repo" message, which was annoying with -Qu and
SyncFirst.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-05-18 23:11:05 -05:00
Nagy Gabor
f89f7e136b Query documentation updates
The old documentation didn't emphasize our filtering options at all, and it
was a bit misleading. ("List ALL...")

I also clarified the description of -Qu.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-05-18 23:09:24 -05:00
Cedric Staniewski
212ea8a9ed repo-add: fix -n tests which are applicable only to strings
Signed-off-by: Cedric Staniewski <cedric@gmx.ca>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-05-18 23:04:28 -05:00
Cedric Staniewski
a812ad4ea4 libarchive development has moved to Google Code
Signed-off-by: Cedric Staniewski <cedric@gmx.ca>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-05-18 23:02:56 -05:00
Dan McGee
1bbb34365c Add pyc files to autoclean
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-05-18 23:02:56 -05:00
Dan McGee
1d8d932fa6 Remove recursive remove in autoclean.sh
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-05-18 23:02:46 -05:00
Gerardo Exequiel Pozzi
783e710839 Add more files to cleanup in autoclean.sh
Add files pactest/tests/Makefile.in , pactest/tests/Makefile
and contrib/Makefile.in , contrib/Makefile to list of cleanup script.

Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-05-18 22:57:16 -05:00
Gerardo Exequiel Pozzi
c5d9b999c7 Add repo-remove.8 to list of cleanup in doc/Makefile.am
repo-remove.8 is generated with Makefile but is not removed on clean.
This patch add it to list of untracked autoconf files.

Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-05-18 22:54:03 -05:00
Dan McGee
4a582fac2a Merge commit 'allan/working' 2009-05-18 22:51:25 -05:00
Gerardo Exequiel Pozzi
86cd72573b Add an initial pactest/test/.gitignore
Add an initial pactest/test/.gitignore to exclude sync200.py
that is generated from sync200.py.in

Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-05-18 22:25:53 -05:00
Allan McRae
80caeabce0 NEWS file updates for makepkg and contrib
Signed-off-by: Allan McRae <allan@archlinux.org>
2009-05-16 14:39:18 +10:00
Allan McRae
250e66e57b makepkg: fix sourcing BUILDSCRIPT and PATH issues
The bash source command looks in the users PATH for the file to source
before the local directory. This causes issues when someone has a
PKGBUILD somewhere in their path (for unknown some reason...).
Fixes FS#14727.

Signed-off-by: Allan McRae <allan@archlinux.org>
2009-05-16 13:48:10 +10:00
Allan McRae
5e32928a42 makepkg: Document package splitting
Signed-off-by: Allan McRae <allan@archlinux.org>
2009-05-14 16:30:02 +10:00
Allan McRae
de44a0f474 makepkg: do not update pkgver when building source package
When making a source package for a SCM PKGBUILD, makepkg should not
update the pkgver/pkgrel.  Noted in FS#14456.

Signed-off-by: Allan McRae <allan@archlinux.org>
2009-05-14 16:30:01 +10:00
Dan McGee
20017354f7 Remove version information from -Qqo output
This was the only --quiet operation that showed version information; make it
consistent with the rest.

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-05-11 21:43:36 -05:00
Nagy Gabor
a783f3fbf1 Introduce -Qlq
With --quiet flag, -Ql doesn't print the package name, just lists the files.
I made --quiet documentation up-to-date (I also added -Sgq/-Qgq).

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-05-11 21:36:43 -05:00
Allan McRae
f569c4a042 makepkg: several small fixes
1) Do not attempt to strip compressed binaries
Original-work-by: Marc - A. Dahlhaus <mad@wol.de>

2) Add "\" in "GPL\'ed" so quote mark does not break source code highlighting

3) Add local to docdir paths in makepkg.conf for consistency

4) Use full path to sed in MacOSX in case users have GNU sed earlier in
path

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-05-11 21:23:46 -05:00
Gerardo Exequiel Pozzi
ed848b1c54 Fix non-C style comments in libalpm
Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-05-11 20:26:49 -05:00
Allan McRae
c27904661e makepkg: make in-place sed portable
Do a sed replacement in-place is not very portable.  On Mac OSX and
BSDs, the syntax is "sed -i ''" where as with GNU sed the command is
"sed -i''" or just "sed -i".  This patch detects which command should
be used during configure.

Credit to Kevin Barry who researched this issue and provided a patch
to work around this using temporary backup files.

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-26 09:22:23 -05:00
Loui Chang
10584ec8ea Mention required libraries in INSTALL.
Signed-off-by: Loui Chang <louipc.ist@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-15 22:44:10 -05:00
Bryan Ischo
db3e166503 Look in target-list first to resolve dependencies
This fixes a bug introduced by my previous changes which changes the
behavior of IgnorePkg/IgnoreGroup to allow the user to remove unresolvable
packages from the transaction.  The bug is that the target-list was no
longer being consulted first to resolve dependencies, which means that if
two packages in the sync database satisfied a dependency, and the user
explicitly requested one of those two packages in the sync, the other
package was still being pulled in.

A new test was added, sync993.py, to verify the desired behavior.

Signed-off-by: Bryan Ischo <bji-keyword-pacman.3644cb@www.ischo.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-11 14:39:24 -05:00
Bryan Ischo
d70465decc Remove duplicates from the unresolvable list before prompting user
Signed-off-by: Bryan Ischo <bji-keyword-pacman.3644cb@www.ischo.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-11 14:24:52 -05:00
Dan McGee
4b78852f7e const-ify endswith()
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-11 14:13:03 -05:00
Nagy Gabor
aefb4e0fa5 Remove pmsyncpkg_t
pmsyncpkg_t data sructure was removed:
1. pmpkg_t.reason is used instead of pmsyncpkg_t.newreason. (The target
packages come from sync repos, so we can use this field without any
problems. Upgrade transaction also uses this field to store this info.)
2. pmsyncpkg_t.removes was moved to pmpkg_t.removes.
This step requires careful programming, because we don't duplicate packages
when we add them to trans->packages. So we modify sync pkgcache when we
add this transaction-only info to our package. Hence it is important to
free this list when we remove any package from the target list
(remove_unresolvable, remove_conflicts, trans_free), otherwise this could
confuse the new sync transactions (with non-pacman GUI).

Overall, our code became ~100 line shorter, and we can call our helper
functions directly on trans->packages in sync.c, we don't need to maintain
parallel package lists.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-11 14:05:13 -05:00
Nagy Gabor
391952600d Fix for trans001.py (FS#9088)
From now on _alpm_db_find_fileconflicts() works with upgrade and remove
target lists (like checkdeps), which makes it transaction independent
(we still need a trans param because of the progressbar). This is a small
step towards the universal transaction. So we call this function directly
from sync.c before commiting the remove transaction. This is much safer,
but we can get false fileconflict error alarms in some tricky cases
("symlinks puzzle" etc).

The patch on find_fileconflict looks complex, but it is mainly an
"indent-patch", the new code-part can be found after the
/* check remove list ... */ comment, and I modified something around the
"file has changed hand" case (see comment modifications in the code).

Unfortunately sync.c became more ugly, because we have to create 2 parallel
internal transactions: to avoid duplicated work, upgrade transaction is
used to load package data (filelists). This problem will disappear, when
we finally get rid of internal transactions.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-11 13:59:55 -05:00
Nagy Gabor
634304feae Free *data list when user removes unresolvable packages
Resolvedeps reports error when it cannot resolve some dependencies, puts
them into the *data list, and set pm_errno. If user removes the
unresolvable packages from the target list, we have no error anymore,
so from now on we free *data list (we eliminate a memleak) and unset
pm_errno.

(Additionally I removed two needless lines from the code, unresolvable list
is always freed in cleanup.)

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-11 13:55:46 -05:00
Nagy Gabor
56fd24ecf8 Print warning in _alpm_resolvedep() if a satisfier package is ignored without QUESTION
After commit f57f8d3386 pacman *silently*
ignores packages from IgnorePkg/IgnoreGroup during dependency resolving,
if prompt == 0. This behavior is changed to "give warning + ignore".
(Otherwise the user is not informed about the fact that the package
resolving was blocked by ignorepkg.)

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-11 13:54:50 -05:00
Nagy Gabor
77efd51216 New error type: PM_ERR_PKG_IGNORED
This patch fixes FS#12059.
Now sync_addtarget can return with PM_ERR_PKG_IGNORED, which indicates that
although the requested package was found it is in ignorepkg, so alpm could
not add it to the transaction. So the front-end can decide what to do.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-11 13:54:25 -05:00
Dan McGee
93ca155b48 Merge branch 'xav/repo-add' 2009-04-11 13:50:56 -05:00
Dan McGee
101c16b3eb makepkg: fix double check on same path
Commit 142225fd typo-ed this one, as it should look like the rest of the
checks similar to it.

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-11 13:30:38 -05:00
Loui Chang
52d184dae8 makepkg: Fix integrity check when files are missing.
The index in the for loop wasn't being incremented, so
if the first file wasn't found, the second file would be compared to the
first checksum, rather than the second.

Signed-off-by: Loui Chang <louipc.ist@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-11 12:52:11 -05:00
Sebastian Nowicki
63fc93607b Add detail documentation for alpm_db_update()
This adds alpm_db_update() to the alpm_databases Doxygen group. The function
is described in more detail and a code example is given.

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-11 12:50:37 -05:00
Dan McGee
d15d4f923d Small cleanups to index.txt
Simplify the gitweb links.

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-11 12:43:28 -05:00
Dan McGee
6fb0c5abd7 doc: move files around for consistency
Move some of our documentation files, even though they aren't manpages, to
the doc/ directory. This allows the new 'html' make target to manage them.

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-11 12:38:20 -05:00
Dan McGee
20ab91fb79 doc: add 'html' target to Makefile.am
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-11 12:34:15 -05:00
Dan McGee
afb2f39291 doc: fix repo-add manpage
Now the comment was showing up in the generated manpage and HTML
documentation. Just kill it as asciidoc keeps screwing us over.

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-11 12:33:33 -05:00
Dan McGee
e37ecbe8a4 Fix asciidoc formatting warnings and issues
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-11 11:14:28 -05:00
Dan McGee
22a4616550 Add the pacman home page to the doc directory
Also ignore .html files in doc/.

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-11 11:00:22 -05:00
Allan McRae
cb8aee58eb Fix doc building for asciidoc >= 8.4.1
Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-05 21:51:08 -05:00
Samed Beyribey
3cb4eaef4f fixed typos and alignment problem in Turkish translation
Signed-off-by: Samed Beyribey <ras0ir@eventualis.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-05 21:40:58 -05:00
Dan McGee
f385242f99 Merge commit 'allan/working' 2009-04-05 21:12:28 -05:00
Nagy Gabor
5fcc9ae7f4 Document --debug
After some irc/forum experiences, I decided to document this option.
However, I left the debug-level undocumented (--debug=2).

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-05 21:11:48 -05:00
Allan McRae
442b91a5dd makepkg: run tidy_install with no package() function
After the splitpkg implementation, the tidy_install function
was not being called in PKGBUILDs with only the build() function.

Signed-off-by: Allan McRae <allan@archlinux.org>
2009-03-30 17:41:34 +10:00
Allan McRae
deff57ce8b makepkg: do not bail on failure to install built package
Fixes FS#13417.  Do no exit makepkg on a failure to install the
built package(s).  This allows clean-up to still occur.

Signed-off-by: Allan McRae <allan@archlinux.org>
2009-03-29 16:49:57 +10:00
Allan McRae
7370fd595b makepkg: adjust log clean-up for new filenames
The log files now have -build or -package at the end and there
are separate log files for each *_package() function. Alter
clean_up() to deal with this. Also, move glob outside quotes so
this actually works.

Signed-off-by: Allan McRae <allan@archlinux.org>
2009-03-26 01:39:13 +10:00
Allan McRae
4c27a776bd makepkg: adjust install_package for split packages
Install all created packages when using the install option with
package splitting.

Signed-off-by: Allan McRae <allan@archlinux.org>
2009-03-25 23:52:27 +10:00
Allan McRae
7a8ba5a978 Refactor testing for color message output
Signed-off-by: Allan McRae <allan@archlinux.org>
2009-03-16 09:18:41 +10:00
Allan McRae
7df0d048d1 makepkg: add pkgbase variable
The pkgbase variable is added to improve informational output and
source package naming when using split packages.  Defaults to
${pkgname[0]} if not set.

Also:
 - move splitpkg detection to after pkgname presence is verified
 - add "cd" line to package_foo() functions in splitpkg proto

Signed-off-by: Allan McRae <allan@archlinux.org>
2009-03-16 09:17:10 +10:00
Xavier Chantry
0c614c181e repo-add : rename gstmpdir to tmpdir
What does gstmpdir mean?

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-03-15 18:10:24 +01:00
Xavier Chantry
91d43ba4b4 repo-add : don't change the modification time on depends and desc
The modification time on depends and desc file were changed to match the
modification time of the package file. I don't see why and we are actualling
losing information here. If we want to know the date of the package file, we
can just look inside the depends file. If we want to know when the entry was
created, we should not alter the modification time of depends and desc.

Besides, this had the non-obvious and undocumented side effect that the
depends file was always created, even if it was empty. And pacman actually
does require that. So I added a "touch depends" to always create the file.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-03-15 18:10:24 +01:00
Xavier Chantry
59b4725bbb repo-add : new locking system
Weird things could happen if several repo-add were run concurrently on the
same database. The introduced locking system will prevent this to happen.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-03-15 18:10:24 +01:00
Xavier Chantry
a556bc57fc repo-add : fix package variables declaration
- arch was missing

- backup is not used by repo-add. However makepkg still needs to put it in
  PKGINFO because pacman uses it

- startdir is no longer used after the new delta implementation

- the declaration of group, depend, backup, etc is not needed because these
  variables are always declared before being used :
	declare $var="$val"
	case "$var" in
		group)    _groups="$_groups$group\n" ;;

- reorder the variables declaration to follow the same order than they are
  written to the depends and desc file, for making future checks easier

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-03-15 18:10:24 +01:00
Xavier Chantry
bbcf96230a repo-add : rewrite delta support
Use the correct database format

Use xdelta3 to get the source and destination files from the delta itself

Allow delta files to be added with repo-add just like package files. delta
files can also be removed with repo-remove. This is simply done by looking
for a .delta extension in the arguments, and calling the appropriate
db_write_delta or db_remove_delta functions.

Example usage:
repo-add repo/test.db.tar.gz repo/libx11-1.1.99.2-2-x86_64.pkg.tar.gz
repo-add repo/test.db.tar.gz repo/libx11-1.1.5-2_to_1.1.99.2-2-x86_64.delta
repo-remove repo/test.db.tar.gz libx11-1.1.5-2_to_1.1.99.2-2-x86_64.delta

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-03-15 18:10:23 +01:00
Xavier Chantry
89685bdb29 repo-add : drop delta support to rewrite it from scratch
The current implementation has several problems :

Wrong database format

All the info is taken from the filename, which is a bit ugly

It looks for .delta files in the current directory when adding a package,
which is not very flexible

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-03-15 18:10:23 +01:00
Xavier Chantry
994804f20e repo-add.sh.in : repo-remove improvements
* report when a package entry to be removed is not found

* backup and restore eventual "deltas" files

* slight optimization when looking for an entry : only look at the entries
starting with $pkgname

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-03-15 18:10:23 +01:00
Xavier Chantry
f8bb69c1d2 repo-add cleanup
Refactor the main loop, which was difficult to read.

Use case instead of if when appropriate.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-03-15 18:10:23 +01:00
Xavier Chantry
9fa18d9a4b Add pkgdelta script to create deltas.
This should obsolete the delta support in makepkg. Having a separate script
should be more flexible.

Example usage:
$ pkgdelta repo/tzdata-2009a-1-x86_64.pkg.tar.gz repo/tzdata-2009b-1-x86_64.pkg.tar.gz
==> Generating delta from version 2009a-1 to version 2009b-1
==> Generated delta : 'repo/tzdata-2009a-1_to_2009b-1-x86_64.delta'

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-03-15 18:10:15 +01:00
Xavier Chantry
c8beffa790 Fix several issues with xdelta
1) The changes to sync.c look big but there are mostly caused by
the indentation. Fix a bug where download_size == 0 because the packages and
deltas are already in the cache, but we still need to build the deltas list
and apply the deltas to create the final package.

2) Fix the gzip / md5sum issue by switching to xdelta3, disabling external
recompression and using gzip -n in pacman, and disable bsdtar compression
and using gzip -n in makepkg.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-03-15 18:08:36 +01:00
Xavier Chantry
9519d22df7 be_files.c : use %jd instead of %ju for intmax_t
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-03-15 11:41:37 -05:00
Xavier Chantry
de97282fbd Revert "popen does NOT require /bin/sh in a subchroot"
This reverts commit 9558639d80.

This change was wrong, popen does require /bin/sh in a subchroot.

1) pacman -S lilo -r root

Notice no error

2) rm root/bin/sh ; pacman -S lilo -r root

Notice an error :
error: scriptlet failed to execute correctly

Actually, we already get an explicit error here, when popen is run, so there
is no need to check for bin/sh explicitely.

Besides this check was problematic in some cases. For example, bash itself
has a scriptlet, but only post_install and post_upgrade, no pre_install and
pre_upgrade. However, since bash has a scriptlet, runscriptlet will also be
called before bash is installed. It won't do anything since the scriptlet
has no pre_install function. But if we keep the check, we will still get
"error : no /bin/sh".

Conflicts:

	lib/libalpm/trans.c

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-03-15 11:41:37 -05:00
Xavier Chantry
36863b968f runscriptlet : Flush open fds before fork() to avoid cloning buffers
This is a bug I noticed 2 years ago :
http://www.nabble.com/Re%3A-logging-output-crazy-to11437357.html#a11479679

I thought I fixed it with 57d77eab32

But the bug was still here. Reading man fork, this part caught my attention:

*  The child inherits copies of the parent's set  of  open  file
descriptors.  Each  file descriptor  in  the  child refers to the same open
file description (see open(2)) as the corresponding file descriptor in the
parent.  This means that the two descriptors  share open  file  status
flags, current file offset, and signal-driven I/O attributes (see the
description of F_SETOWN and F_SETSIG in fcntl(2)).

Since the open file descriptors are inherited, it is probably a good idea to
flush them before forking.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-03-15 11:40:49 -05:00
Allan McRae
687f04ab46 Only check checksums if there is a source file
Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-03-15 11:38:54 -05:00
Allan McRae
a864a50bc6 contrib/pacscripts - print install scripts from a package
Prints the install script from a given package file or from a package
in the pacman repo.

Original-work-by: Giulio "giulivo" Fidente <giulivo.navigante@gmail.com>
Improvements-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-03-15 11:38:53 -05:00
Dan McGee
d8d9ab8c87 Update checks for python in configure
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-02-28 15:46:51 -06:00
Dan McGee
4458f71851 Merge branch 'maint' 2009-02-28 15:43:36 -06:00
Xavier Chantry
b4e1365657 makepkg : remove xdelta support
The pkgdelta script can be used instead.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-02-28 15:42:07 -06:00
Xavier Chantry
8c09c19139 libalpm: remove from_md5 and to_md5 from pmdelta_t
The from_md5 and to_md5 fields were a nice extra safety, which would avoid
trying to apply deltas on corrupted package files. However, they are not
strictly necessary, since xdelta should be able to detect that on its own.

The main problem is that it is impossible to compute these informations from
the delta only. So repo-add would not be able to compute the delta entry
based on just the delta file.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-02-28 15:33:46 -06:00
Xavier Chantry
f09f82ee59 repo-add: print warning if same version already exists
Simple fix for FS#13414.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-02-28 15:33:39 -06:00
Baurzhan Muftakhidinov
b3c67a195f Add new Kazakh translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-02-24 08:24:47 -06:00
Dan McGee
2268981ebf Merge branch 'maint' 2009-02-23 20:40:27 -06:00
Dan McGee
9d661240fe Update pactest to use hashlib
The md5 module is deprecated in favor of hashlib.

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-02-23 20:40:00 -06:00
Bryan Ischo
f57f8d3386 Don't prompt the user for unignore of IgnorePkg/IgnoreGroup packages
Don't prompt the user for unignore of IgnorePkg/IgnoreGroup packages,
except for packages explicitly listed for sync by the user.  This
eliminates many unnecessary prompts when IgnorePkg/IgnoreGroup is
used.

Signed-off-by: Bryan Ischo <bryan@ischo.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-02-23 20:37:14 -06:00
Bryan Ischo
0268550401 Enabled new interactive prompt and updated some tests
Enabled a new prompt to ask the user if they'd like to remove
unresolvable packages from the transaction rather than failing it.

Many pactest tests that used to fail now return success codes, because
pacman now issues a prompt allowing the user to cancel rather than
failing many transactions, and the pactest scripts always choose to
cancel with no error rather than failing.  The only net effect is that
the return status of pacman is now 0 in cases where it used to be
nonzero.

Signed-off-by: Bryan Ischo <bryan@ischo.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-02-23 20:33:56 -06:00
Allan McRae
a309a016bf makepkg: fix updating pkgrel with pkgver in SCM packages
Commit 1e656c0a introduced the changing of pkgrel to 1 when the
pkgver was updated in SCM PKGBUILDs. However, the output in the
"Making package:" was wrong. Attempting to fix that created
another bug (FS#13416). Interestingly, pkgver was only ever
being updated in the fakeroot stage which caused this problem.
Now both pkgver and pkgrel are updated after the first
devel_check and devel_update. Enjoy the really long explaination
for a two line fix...

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-02-23 20:18:08 -06:00
Xavier Chantry
c8a41b7d6d repo-add : remove realpath usage
Rework slightly db_write_entry so that $pkgfile is no longer referenced
from the temporary dir. This means $pkgfile can be a relative path and does
not need to be converted with realpath anymore.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-02-19 19:20:27 -06:00
Xavier Chantry
c590ac0997 repo-add : remove the need of realpath for REPO_DB_FILE
REPO_DB_FILE does not need to be an absolute path anymore so no need to
call realpath.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-02-19 19:20:19 -06:00
Dan McGee
1c4633ea2c Merge branch 'maint' 2009-02-18 21:20:17 -06:00
Bryan Ischo
6c4d702cb1 Reorganize code for one-at-a-time resolving
This change reorganizes the internal code so that packages are
resolved one at a time instead of all at once from a list.  This will
allow a future checkin to prompt the user to see if they'd rather
remove unresolvable packages from the transaction and continue, or
fail the transaction.  This change does not affect the actual behavior
of libalpm and all tests pass without changes.

Signed-off-by: Bryan Ischo <bryan@ischo.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-02-18 20:52:22 -06:00
Jan Stępień
e7daa59f84 A tiny fix in the Polish translation.
The previous translation of 'targets' meant literally 'it targets' and it
sounded awkwardly. The current version is a plural of a 'target'.

Signed-off-by: Jan Stępień <jstepien@users.sourceforge.net>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-02-18 19:25:57 -06:00
Xavier Chantry
e515d89969 repo-add : remove useless test_repo_db_file function
This function was used only once, was basically just one line, and was also
called with an unused argument.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-02-18 19:21:34 -06:00
Xavier Chantry
dce7aa8569 contrib/pacdiff : rework and cleanup
I initially only wanted to add a -l/--locate option to use locate instead of
find, which should have been easy.

Then I thought I would try to support filename with whitespace while I was
at it, and this was a bit more complex. The safest ways seem to be the
following ones : http://mywiki.wooledge.org/BashFAQ/020

Then I received a lot of suggestions on #bash about how to improve the
script, which I tried to address.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
[Dan: fix grouping of find arguments]
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-02-18 19:20:10 -06:00
Dan McGee
48b209d612 Rework optdepends documentation for clarity
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-02-17 16:58:33 -06:00
Kevin Barry
14c1a4423e configure.ac: use full path of stat for Mac OS X
Change configure.ac to use the full path of stat when on darwin/mac.
This is needed for situations when a user installs the GNU/coreutils
and places it in their path before /usr/bin, but the SIZECMD is
already configured for Darwin's version of stat.

Signed-off-by: Kevin Barry <barryk gmail com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-02-16 08:06:29 -06:00
Dan McGee
eb1775e485 repo-add: fix eval and quote issues
eval was ugly and dirty, and bit us here. Instead, use a safer form of
variable declaration to ensure quotes don't foil us in pkgdesc or any other
fields.

This fixes FS#10837.

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-02-15 21:16:21 -06:00
Dan McGee
04c2b9d4ed Merge branch 'maint' 2009-02-08 11:43:08 -06:00
Sebastian Nowicki
ea84819bbb makepkg: Make stripping debug symbols cross-platform
The Linux and BSD versions of strip have the --strip-debug option (as
well as the -S option), however Mac OS X only has -S.

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-02-08 11:33:33 -06:00
Xavier Chantry
34e1413d75 Delay the creation of local and sync db dir.
We don't need to create the directories when local or sync dbs are
registered. For example, if a sync db does not exist, we cannot even do
"pacman -Q" as an user.

Instead, we can create the local db if needed during the db_prepare
operation, and sync dbs on db_update.

Also remove some more useless abstractions in db_update and switch to a much
more efficient way to remove a sync db : rm -rf.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-01-20 14:07:15 +01:00
Xavier Chantry
14230869e6 Remove some db abstraction crap.
These db_open and db_close looked quite useless. And they caused the db
directory to be opened on a simple registering of a database. This is
totally unneeded, this opening can be delayed to when we actually need it.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-01-20 14:04:54 +01:00
Xavier Chantry
eab9684837 alpm_unpack : change prefix handling to workaround FS#12148.
Instead of appending the prefix to each entry name, we can chdir to the
prefix before extracting, and restoring when it is done.
This seems to work better with the strange and special case of FS#12148
where an archive contained the "./" entry.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-01-20 14:03:46 +01:00
Dan McGee
c794661f1e Merge branch 'maint' 2009-01-18 13:48:48 -06:00
Dan McGee
8929769902 makepkg: test fixes, part 2
The goal of this fix was empty string comparisons:
-  if [ "$pkgname" != "" ]; then
+  if [ -n "$pkgname" ]; then

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-18 13:48:31 -06:00
Dan McGee
350c3eb6ec makepkg: clean up test usage
In a lot of places, we had the following construct:
  [ "$foobar" = "0" ]
which is better represented by using the integer tests:
  [ $foobar -eq 0 ]

Attempt to unify makepkg to use the latter rather than the former in all
places. From here on out we should ensure anything that is set to 0, 1, etc.
uses the -eq format rather than =.

In addition, fix a few other test anomalies including usage of double
equals.

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-18 13:46:23 -06:00
Nagy Gabor
472e51b975 Use archive_entry_set_perm instead of archive_entry_set_mode
This patch fixes FS#12148 ('unstable' regular file).
I also changed the other archive_entry_set_mode usage in add.c to
archive_entry_set_perm.

Since I cannot find any relevant info in libarchive manual, I quote
Tim Kientzle (the author of libarchive) here, and I say thank you for
his help.

*** Tim Kientzle wrote *************************************

This is the problem in libalpm/util.c:

323    if(S_ISREG(st->st_mode)) {
324            archive_entry_set_mode(entry, 0644);
325    } else if(S_ISDIR(st->st_mode)) {
326            archive_entry_set_mode(entry, 0755);
327    }

Your example unstable.db.tar.gz is not empty.  It has
one entry in it, called "./".  That entry is marked
as a directory.  But, when you call archive_entry_set_mode(),
you are changing the file type!  archive_read_extract()
then creates the file /var/unstable as you requested.
(archive_read_extract() will replace an empty directory
with a file.)

You should either set the mode value correctly:

323    if(S_ISREG(st->st_mode)) {
324            archive_entry_set_mode(entry, IFREG | 0644);
325    } else if(S_ISDIR(st->st_mode)) {
326            archive_entry_set_mode(entry, IFDIR | 0755);
327    }

Or use archive_entry_set_perm(), which does not change
the file type:

323    if(S_ISREG(st->st_mode)) {
324            archive_entry_set_perm(entry, 0644);
325    } else if(S_ISDIR(st->st_mode)) {
326            archive_entry_set_perm(entry, 0755);
327    }

************************************************************

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-18 13:35:17 -06:00
Allan McRae
fba5771fa4 makepkg: repackage rework with package functions
When using the optional package() function or split packages, the
entire packaging step is rerun instead of just final package
creation step.

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-17 09:19:35 -06:00
Bryan Ischo
5bc23bc05d Fixed some inconsistencies and errors in the pactest documentation.
Signed-off-by: Bryan Ischo <bryan@ischo.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-16 20:22:58 -06:00
Dan McGee
3d49d88009 Merge branch 'am/splitpkg'
* am/splitpkg:
  makepkg: implement creation of split packages
  makepkg: Optional argument for run_package and create_package
  makepkg: hack around tee in run_package function
  makepkg: add functions for backup and restore of package fields
  makepkg: add optional package function
  makepkg: Add PKGBUILD-split.proto
2009-01-16 19:45:02 -06:00
Allan McRae
e946ee7745 makepkg: implement creation of split packages
Adds the ability to create multiple packages from one PKGBUILD

Signed-off-by: Allan McRae <allan@archlinux.org>
2009-01-16 22:32:05 +10:00
Allan McRae
21b8a5418d makepkg: Optional argument for run_package and create_package
Generalize run_package to allow the passing of a package name
directing the use of an alternative package function. A similar
adjustment to create_package to prepare split packages.

Signed-off-by: Allan McRae <allan@archlinux.org>
2009-01-16 22:26:52 +10:00
Allan McRae
708ce1480f makepkg: hack around tee in run_package function
Piping the package function through tee to log the outut also
clears any variables set in the package function.  This is a
problem in split packages as package variable overrides are done
in the package function.  This is fixed by creating a node which
the output is piped through and duplicated using the tee function.

Signed-off-by: Allan McRae <allan@archlinux.org>
2009-01-16 22:24:21 +10:00
Allan McRae
9804911c5f makepkg: add functions for backup and restore of package fields
Adds functions for the backup and restoration of package variables
that can be over-ridden during package splitting.  Variables which
can be overridden are given in the splitpkg_overrides variable.

Signed-off-by: Allan McRae <allan@archlinux.org>
2009-01-16 22:22:04 +10:00
Allan McRae
08034ceb17 makepkg: add optional package function
This patch allows us to split the building and packaging stages of
a PKGBUILD and minimize fakeroot usage. This can be done with less
code duplication (run_build and run_package look quite similiar) but
the run_package function will be where the package splitting logic
is implemented in the future.

Signed-off-by: Allan McRae <allan@archlinux.org>
2009-01-16 22:20:05 +10:00
Allan McRae
219cb2eaac makepkg: Add PKGBUILD-split.proto
Prototype PKGBUILD for package splitting in makepkg

Signed-off-by: Allan McRae <allan@archlinux.org>
2009-01-16 22:16:18 +10:00
Aaron Griffin
a9f030e84c Make the repo-add quiet flag less quiet
Considering one can easily run:
   repo-add .... >/dev/null
to get only warnings and errors, the -q flag is mostly useless.

Make the -q flag silence only level 2 messages.

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-14 19:18:08 -06:00
Dan McGee
7a3a718c7a makepkg: fix my own stupid mistake
We don't want to bail if a certain integrity check wasn't even provided.
Whoops.

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-13 20:13:31 -06:00
Aaron Schaefer
e3a06961f6 makepkg: use INTEGRITY_CHECK only for generation of checksums
Signed-off-by: Aaron Schaefer <aaron@elasticdog.com>
[Dan: fail if checksum array is incorrectly sized]
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-13 19:50:38 -06:00
Dan McGee
d7345da5ba doc: Consistency and formatting cleanups (for master)
Bring master in line with some things we just did on maint.

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-13 00:11:17 -06:00
Dan McGee
b369f71fd6 Merge branch 'maint'
Conflicts:
	doc/makepkg.conf.5.txt
2009-01-13 00:10:36 -06:00
Dan McGee
1191303f8b doc: Consistency and formatting cleanups
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-13 00:06:58 -06:00
Dan McGee
e9ca40b56e doc: fix some more asciidoc fallout
They keep changing things on us. This gets rid of the '.ft C' text sprinkled
around our listing blocks.

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-13 00:00:35 -06:00
Dan McGee
3d6da93093 doc: remove BUILDSCRIPT from makepkg.conf docs
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-12 23:59:44 -06:00
Nagy Gabor
cb7337eb64 db->pkgcache_loaded and db->grpcache_loaded
Clearly the old code was more elegant (NULL cache indicated "not loaded"),
but it had some drawbacks, so from now on we indicate the state of caches
explicitly.

Old drawbacks:
When we had an empty database (unstable), libalpm called db_populate after
every pkgcache access, because NULL pkgcache indicated "not loaded" state.
This is not a common case, but the same situation can happen with grpcache,
which is more problematic: If the user had a custom repo with no groups,
grpcache was always NULL. (grpcache is also loaded per database.) Thus
every get_grpcache call induced a load_grpcache operation, so the benefits
of grpcache was completely lost.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-12 23:59:37 -06:00
Nagy Gabor
4da70d800a Rename alpm_get_md5sum to alpm_compute_md5sum and alpm_dep_get_string to alpm_dep_compute_string
This patch introduces the following function name convention:
_compute_ in function name: the return value must be freed.
_get_ in function name: the return value must not be freed.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-12 23:59:30 -06:00
Nagy Gabor
a888f377a5 HoldPkg rework
The HoldPkg feature is even more important when the packages to be held are
pulled automatically by pacman, in a -Rc and -Rs operation. Before, it only
applied when the packages were explicitly requested by the user to be
removed. This patch extends holdpkg to -Rc and -Rs by doing the HoldPkg
check just before trans_commit.

Additionally, the whole HoldPkg stuff was moved to the front-end.

I changed the default behavior to "don't remove", so I modified remove030.py
pactest as well.

See also: FS#9173.

Original-work-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-12 22:44:00 -06:00
Xavier Chantry
8017b0bb8e Remove libdownload support and fix libfetch one.
Aaron said to consider libdownload a dead project so libdownload support was
removed to more easily fix libfetch one (otherwise many ifdef needed).

There was no direct replacement for ferror to detect an error while
downloading. So instead, I added a check at the end to see if the file was
fully downloaded, which is just a small chunk of code taken from here:
http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/net/libfetch/files/fetch.c?only_with_tag=MAIN

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-12 22:40:15 -06:00
Xavier Chantry
4ec846f5ac makepkg : fix a lot of breakages caused by Allan
This patch started as a simple typo fix (pugre instead of purge in two
places), as well as a fix of a test which was using PURGE_TARGETS instead of
$PURGE_TARGETS.

It evolved in a slight handling change of the OPTIONS which have a variable
affecting their behavior (strip STRIP_DIRS, docs DOC_DIRS, zipman MAN_DIRS
and purge PURGE_TARGETS), as well as a clarification in makepkg.conf. Now
when a variable is undefined or empty, the corresponding option will have no
effect. It looked weird to have a fallback when a option is defined but
empty, it seems more natural to not have any fallbacks.

Also re-enable docs by default. It seems arbitrary to delete files from
packages by default, and it would be more vanilla and distro agnostic to
keep them. docs was also the only negated option.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-12 22:28:10 -06:00
Dan McGee
94c2830572 Fix linkman macro to work with asciidoc > 8.3.0
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-11 22:09:40 -06:00
Dan McGee
0501d340cd Merge branch 'maint' 2009-01-06 20:22:15 -06:00
Vojtěch Gondžala
c6bcdf4dc7 Update Czech translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-05 19:06:39 -06:00
Hugo Doria
9f5e1dc8cd Update Portuguese (Brazil) translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-05 07:05:40 -06:00
Dan McGee
cebe36c42c Update configure.ac for 3.2.2 release
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-04 11:34:47 -06:00
Dan McGee
301fe17f57 Update NEWS for 3.2.2
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-04 11:27:03 -06:00
Dan McGee
6f9539aefb Merge branch 'maint'
Conflicts:
	po/it.po
2009-01-04 11:12:28 -06:00
Mateusz Herych
997a611fa4 Update Polish translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-03 19:07:44 -06:00
Sergey Tereschenko
162e77ffdc Update Russian translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-03 19:05:19 -06:00
Samed Beyribey
a2cbccb8c7 Update Turkish translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-03 09:25:24 -06:00
Sergey Tereschenko
c850786e43 Update Russian translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-03 09:24:07 -06:00
Roman Kyrylych
3acc265f9d Update Unkranian translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-03 09:20:41 -06:00
Giovanni Scafora
03a63e01a5 Update Italian translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-03 09:17:50 -06:00
Matthias Gorissen
024012649f Update German translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-03 09:14:35 -06:00
Nagy Gabor
93d47ebbc0 Update Hungarian translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-03 09:11:56 -06:00
甘露(Gan Lu)
c2dc05c065 Update Chinese translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-03 09:10:08 -06:00
Xavier Chantry
fb18679a00 Update French translation
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2009-01-03 11:49:06 +01:00
Juan Pablo González Tognarelli
792ee97645 Update Spanish translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-03 00:30:09 -06:00
Dan McGee
a30bf868ca Merge branch 'maint' 2009-01-03 00:18:22 -06:00
Allan McRae
1cc8ad6112 makepkg: Add support for specifying LDFLAGS
Provide support for specifying LDFLAGS within makepkg.conf but leaves
this undefined by default. Fixes FS#12542.

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-03 00:17:15 -06:00
Allan McRae
8f26bb9052 makepkg: move BUILDSCRIPT from makepkg.conf
Commit 4b183bf9 moved makepkg.conf sourcing to after the parsing
of options, breaking the -p option and --help output.  The solution
is to move BUILDSCRIPT out of makepkg.conf.  This patch moves the
definition BUILDSCRIPT back to makepkg itself and adds configure
option to allow easy changing of this value during build time.

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-03 00:13:54 -06:00
Allan McRae
9a7f68317a makepkg: Introduce purge option
The purge option, combined with the PURGE_TARGETS variable,
allows makepkg to automatically remove commonly confliting or
removed files (e.g. /usr/share/info/dir, *.pod).

Original work: Tim Yang
Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-03 00:11:51 -06:00
Allan McRae
774c252753 makepkg: Add used options to PKGINFO file
Adds defined options to the PKGINFO file in the form of "makepkgopt =".
It may be useful to be able to add these to the pacman DB at some point
as that would allow (e.g.) checking which packages have had their docs
striped (FS#7092).

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-03 00:11:48 -06:00
Allan McRae
1b7ff7a636 makepkg: add fallback for when MAN_DIRS is unset
This prevents makepkg compressing every file when MAN_DIRS is not
supplied in makepkg.conf

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-03 00:08:42 -06:00
Allan McRae
bb9b19a6c4 makepkg: provide MAN_DIRS configuration variable
Provides a MAN_DIRS variable in makepkg.conf which can be used
to specify folders to look for manual (man and info) pages to be
compressed.  Useful for packages that install to /opt.  Also
clarifies that "zipman" means "zip manuals" and covers both man
and info pages.

Original work by: Tiago Pierezan Camargo <tcamargo at gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-03 00:06:51 -06:00
Allan McRae
b55f478042 libalpm: add PID to db.lck
This is the first step in being able to automatically remove phantom
lock files.

Signed-off-by: Allan McRae <allan@archlinux.org>
[Dan: fix compilation warnings]
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-03 00:00:19 -06:00
Allan McRae
a73ad4f0e3 Separate local db directory creation and db write
Changelogs and install files were getting extracted into the local
db folder before it was manually created.  This created issues for
uses with 0077 umasks and was highlighted with the new sudo handling
of umasks (FS#12263).

This moves the local db creation to its own function which is called
before the start of package archive extraction.  Also, added a check
that the folder is actually created.

Signed-off-by: Allan McRae <allan@archlinux.org>
[Dan: rename to _alpm_db_prepare()]
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-02 23:52:32 -06:00
Sterling Winter
b3169a5687 Log pacsave warnings to pacman.log
Pacman currently logs .pacnew warnings to pacman.log but a similar history
of .pacsave warnings isn't kept. The user should be able to search
pacman.log to discover when and where all .pac* files were created by
pacman.

Addresses FS#12531.

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-02 23:40:20 -06:00
Dan McGee
e49adbea4c Add a .gitattributes file
This will make python diffs prettier.

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-02 22:49:51 -06:00
Dan McGee
f8b689d48e Merge branch 'maint'
Conflicts:
	lib/libalpm/dload.c
	po/it.po
	scripts/makepkg.sh.in
2009-01-02 22:48:52 -06:00
Dan McGee
c31fcfd833 Add new po files in prep for 3.2.2 release
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-02 22:46:48 -06:00
Dan McGee
cb03817ee8 Small makefile update
Use the proper call for symlink creation

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-02 22:46:48 -06:00
Xavier Chantry
bd2de5cdf6 Fix asciidoc manpage creation.
As reported here, man pages could no longer be built :
http://archlinux.org/pipermail/pacman-dev/2008-December/007726.html

I found the explanation here :
http://www.methods.co.nz/asciidoc/source-highlight-filter.html

"If you use a2x(1) to generate PDF you need to include the --no-xmllint
option to suppress xmllint(1) checking — the programlisting language
attribute (required by the dblatex source highlighter) is not part of the
DocBook 4 specification (but it is in the newer DocBook 5 specification)."

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-02 22:46:47 -06:00
Allan McRae
2f59996c54 makepkg: detect incorrect usage of provides array
Using > or < in the provides array is wrong so make it cause an error.
Fixes FS#12540.

Also, use bash substitution rather than spawning new processes where
possible in the error checking.  Move split package detection to a
better position.

Signed-off-by: Allan McRae <allan@archlinux.org>
[Dan: backport to maint]
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-02 22:46:47 -06:00
Allan McRae
f4651c49af makepkg: tidy version package tests
The use if "! -z" to check if a string is not null is not good practice
so replace with the "-n" option. Also use the AND comparison within one
test rather than on two separate tests.

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-02 22:46:47 -06:00
Allan McRae
751d37e749 makepkg: quote all uses of BUILDSCRIPT
Allows specifying alternative build script with spaces in name

Signed-off-by: Allan McRae <allan@archlinux.org>
[Dan: backport some of the fixes to maint]
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-02 22:46:37 -06:00
Allan McRae
08980fb4bc makepkg: Replace getopt with internal function
This will allow makepkg to work on systems like Mac OS X where the
default getopt is too old to properly handle long options.

The new parse_options function should replicate getopt's behaviour
completely.

Original work: Yun Zheng Hu <yunzheng.hu@gmail.com>
[Allan: Rewrite and bug fixes]
Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-01-02 22:17:24 -06:00
Dan McGee
cc7f3b705e Print proxy information when downloading
May help debug issues we come across with proxy behavior (e.g. those pesky
segfaults) as well as be informative to the user when things aren't working
quite right. Addresses FS#12396.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-12-10 19:45:15 -06:00
Dan McGee
89b0a76b3c Remove mention of -b from makepkg manpage
Fixes FS#12408.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-12-10 19:23:34 -06:00
Dan McGee
bd628274cc Merge branch 'maint' 2008-12-07 22:12:17 -06:00
Giovanni Scafora
9ae7eb1292 Update Italian translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-12-07 22:11:43 -06:00
Dan McGee
818fae320f makepkg: ensure PKGBUILD does not contain CRLF characters
Do a simple check before sourcing the file to ensure we are a valid bash
script.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-12-07 22:11:37 -06:00
Allan McRae
69be73f68c makepkg: several small bits of tidying
1. Do not warn people about missing arch if they are using --ignorearch.

2. Remove unneed reference to bug report about using fakeroot as little
   as possible.  We want to do that, bug report of not.

3. Removes superfluous warning given when building as root. The user
   has already used the "--asroot" flag.

4. Move comment about skipping warning message to above where it occurs

5. Do not warn about skipping source retreval, integrety checks and
   extraction when using --repackage

6. Do not warn about skipping build when using --repackage

7. Move comment about fakeroot usage to above test condition

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-12-07 22:11:29 -06:00
Dan McGee
78cf32e194 Small documentation updates for clarity
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-12-07 22:09:24 -06:00
Dan McGee
59776ef306 makepkg: save and restore shell options before and after build()
Fix the issue uncovered by FS#12344. In this instance, the dotglob shopt was
being set in the build() function but never cleared, causing issues in the
remaining parts of the makepkg script.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-12-07 22:09:24 -06:00
Allan McRae
b373b1d16b contrib/pactree: fix option parsing
The option parsing was catching any "-d" in an argument so packages
with this in their name did not work.

Also removed commented code line that appears to be inserted during
testing.

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-12-07 22:09:05 -06:00
Dan McGee
61c6552862 Merge branch 'maint'
Conflicts:
	lib/libalpm/dload.c
2008-12-02 22:15:02 -06:00
Allan McRae
a1f7c83dbf Add optdepends to PKGBUILD.proto
Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-12-02 07:39:44 -06:00
Simo Leone
6d8a6aef09 Add flush after downloading message
When the output is going to a file, glibc seems to buffer way too much
making it hard to monitor progress while tailing a file.

Signed-off-by: Simo Leone <simo@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-12-02 07:39:32 -06:00
Dan McGee
b99bebc008 Add regex to delta code so we don't segfault when reading line
If the delta line doesn't match our regex, we won't go and process it,
possibly walking off the end of the string.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-11-30 17:17:00 -06:00
Nagy Gabor
a50b067470 Give an error message on alpm_db_register_sync() error
This patch slightly modifies pacman.c/_parseconfig():

See FS#12148. Now pacman prints the following error message in that case:
"error: could not register 'unstable' database (could not open database)"

I also added an error message for alpm_db_setserver() error.

I changed the "return(1);" scheme to "ret = 1; goto cleanup;" to make
sure that we free allocated memory and close open files.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-11-30 16:38:37 -06:00
Dan McGee
346139298b Simplify mercurial revision command
Not only does this require less sed-magic, it also fixes FS#12286 where
fetching the revision number fails if mercurial is in compact mode.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-11-30 16:07:06 -06:00
Dan McGee
f7192b5958 Minor code cleanups
Mostly noticed when compiling libalpm/pacman with ICC.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-11-17 21:47:55 -06:00
Dan McGee
9394f229a0 Merge branch 'maint' 2008-10-31 19:55:50 -05:00
Dan McGee
43f9eb1aa9 Set SIGPIPE handler to SIG_IGN when downloading
We don't want a failed write to kill our whole program when we are
downloading things, so set the SIGPIPE handler to ignore when downloading
and restore any previous signal handler when we complete the download.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-10-31 19:46:13 -05:00
Dan McGee
8d4e1e6754 Make libfetch the 'native' download library
Use libfetch naming in the code in place of libdownload names. This is in
preparation for dropping support for libdownload at some point as libfetch
can run on Linux.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-10-31 19:46:13 -05:00
Nagy Gabor
314b4462d2 -Qu rework
From now on -Qu is an "outdated package" filter on local database.
(This is a behaviour change.)

This patch fixes some memleaks and makes the code cleaner, for details see
my comment on FS#7884.

FS#11868 is implemented.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-10-31 19:46:13 -05:00
Allan McRae
c4b9991258 makepkg: actually fix passing PKGBUILD from pipe
If PKGBUILD (BUILDSCRIPT) is not found, test for information from a
pipe and use that.  Fixes FS#9187.

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-10-31 19:46:13 -05:00
Dan McGee
2890114600 makepkg: fix bash substitution to work under older versions
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-10-31 18:59:19 -05:00
Allan McRae
8d33dcb81c makepkg: enable passing PKGBUILD from pipe
Do not attemp to update pkgver/pkgrel when reading a SCM based PKGBUILD
from a pipe.

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-10-28 22:33:58 -05:00
Dan McGee
cd51abf0c8 Merge branch 'maint' 2008-10-28 22:20:09 -05:00
Xavier Chantry
2e431e1cc3 testdb : extend the tool to allow checking sync dbs too.
Example usage and output :

> src/util/testdb -h
usage:
testdb [-b <pacman db>]                : check the local database
testdb [-b <pacman db>] core extra ... : check the listed sync databases

> src/util/testdb
Checking the integrity of the local database in /var/lib/pacman/

> src/util/testdb core extra testing community
Checking the integrity of the sync databases in /var/lib/pacman/
missing dependency for archboot : bcm43xx-fwcutter>=006-2
missing dependency for xvattr : xfree86
missing dependency for eclipse-ve : eclipse<3.3
missing dependency for flumotion : twisted-web
missing dependency for gg2 : arts
missing dependency for man-pages-cs : groff-utf8
missing dependency for qc-usb : kernel26<2.6.26

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-10-28 22:18:53 -05:00
Dan McGee
a63aeed562 Give pacman-optimize a refresher
This patch addresses quite a few lingering issues in the pacman-optimize
script. FS#11767 provoked this look-over and the following issues were
noticed and fixed:

* If an alternate dbroot was specified, then the lockfile location was never
  updated to reflect it. The lockfile location is now set after all dbpath
  initialization.
* The inclusion of a trailing slash on dbroot was problematic and led to the
  following command being executed:
    bsdtar -xpf /tmp/pacman-optimize.p12Q4vAUWY/pacman-db.tar.gz \
	  -C /var/lib/pacman/.new/
  It is doubtful we meant to create a hidden directory like this below our
  database root, only to go and delete it a second later and then
  re-extract. Fix the whole thing by ensuring our dbpath has its trailing
  slash stripped and then appending it when necessary.
* The DB extraction was performed twice for no real apparent reason. This
  opens the door for extraction problems the second time around, leaving you
  with no original database to fall back to. Change the behavior so we only
  extract once, and then perform a directory shuffle once we verify the
  checksums are correct.
* Perform an explicit sync after we drop the new database on the disk. It
  should work better this way.
* Tighten up our check for a pacman lockfile and the time we create one.
  There is still a possible race condition but the window is shorter.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-10-28 22:18:22 -05:00
Lyman Li
2f5d792725 Update Chinese translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-10-28 22:06:34 -05:00
Allan McRae
1e656c0a6a makepkg: fix updating PKGBUILD when building SCM packages
Fixes a bug and resets pkgrel to 1 when bumping pkgver

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-10-28 21:46:40 -05:00
Dan McGee
50e3dc02bf repo-add: Use openssl instead of md5sum
This is similar to the change we made in makepkg so it is cross-platform
compatible and doesn't require coreutils.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-10-18 23:59:37 -05:00
Dan McGee
d1fec15d81 Correctly close the pipe used for scriptlet execution
We never had a call to pclose() in here before, leaving our file descriptor
in some sort of limbo state. In addition, clean up some of the other logic
such as directly calling exit(1) on a popen() failure rather than going to
our cleanup block, and handling and respecting the exit status of the
subprocess correctly.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-10-18 23:59:28 -05:00
Sergey Tereschenko
d24592cbcd Minor updates to Russian translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-10-12 23:19:07 -05:00
Dan McGee
fa02a71abd Merge branch 'maint' 2008-10-12 21:36:45 -05:00
Dan McGee
91a013a879 makepkg: allow compression type to be autodetected
Inspired by commit 7e8f1469c4, use our given
PKGEXT or SRCEXT to determine what method of compression to use on the
package we create. If the extension is invalid, this should fall back to
creating a non-compressed tar file.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-10-12 21:36:40 -05:00
Dan McGee
f1f8f0e1c2 Quiet up the make process a bit
When we do our sed edits, we really don't need every command printed out to
the terminal. Now with "make -s", the output is quite palatable.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-10-12 21:36:30 -05:00
Dan McGee
30851a24ff Make interrupt handler async-safe
Calling printf() in a signal handler can be dangerous, so avoid it by
writing directly which is guaranteed to be safe according to signal(7).

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-10-12 21:35:30 -05:00
Dan McGee
f0e1846b51 Remove unnecessary unistd.h header inclusion
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-10-12 21:30:15 -05:00
Dan McGee
d7e502a467 Attempt to idiot-proof making and refreshing docs
I mess this up more often than not, and maybe this will do the trick. Remove
the --enable-asciidoc option as it has been superseded by the --disable-doc
option in usefulness. If you want to skip building docs, you skip building
all docs which is much easier when it comes to ensuring the make 'dist' and
'distcheck' targets will always build the manpages and always build the most
up to date manpages.

Developers shouldn't be affected in their normal builds, nor should end
users of the source tarball.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-10-12 21:29:33 -05:00
Dan McGee
927ce2b7a5 Rework fakechroot checking
Do the checks in the tests that need it, and get rid of some of the
cluttered output when it is not available (one line per test run).

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-10-12 21:29:04 -05:00
Dan McGee
ce3d70aa99 Reduce number of calls to getcols()
Every call to getcols() results in two ioctl() calls, which we really didn't
need as changing the number of columns in mid-print would be pretty crazy.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-10-12 21:28:05 -05:00
Dan McGee
f9be2334f7 libalpm: handle syscall interruption correctly
It is possible to throw EINTR from a system call such as open(), close(), or
waitpid() if custom signal handlers are set up and they are not initialized
with the SA_RESTART flag. This was noticed by Andreas Radke when ^C (SIGINT)
was given during the call to waitpid(), causing it to throw the EINTR error
and we could not accommodate it.

Simply wrap these calls in a simple loop that allows us to retry the call if
interrupted.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-10-12 21:28:05 -05:00
Dan McGee
18452a6c51 Ensure we don't have double slashes when creating frontend paths
Because libalpm always returns a root path with a trailing slash, when we
use it to create our unspecified paths we get double slashes in the result.
Use the fix suggested by Jürgen Hötzel to remedy this.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-10-12 21:27:52 -05:00
Dan McGee
da933c223e Remove unnecessary initialization in new functions
We don't need to zero things out, we are already using calloc for this
purpose.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-09-03 09:36:31 -05:00
Xavier Chantry
242e9e90f4 Another attempt at fixing totaldownload.
This fixes FS#11339, which is a regression of commit 89c2c5196:

When totaldownload is enabled, the database downloading percent (-Sy) is
always at 0. That is because we have no guarantee that the totaldownload
callback was called by libalpm. In particular, it is not called (and it
would not make sense to) when a single file is downloaded, like it is the
case with databases.

So the correct way to detect if totaldownload should be used is checking
both config->totaldownload and list_total, like it was already done in
several places in the cb_dl_progress function.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-09-02 09:38:01 -05:00
Xavier Chantry
95ea6fb3c1 Separate targets on -Qi/-Si with a newline.
This fixes FS#11331

The newline was lost with commit 9451b2e4f2.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2008-08-28 20:55:26 +02:00
Dan McGee
1c47500ea6 Merge branch 'maint' 2008-08-26 20:11:25 -05:00
Roman Kyrylych
afac773d19 New Ukrainian translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-26 20:00:10 -05:00
Dan McGee
8263bd0cc2 Updates in preparation for 3.2.1 release
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-25 18:23:57 -05:00
Xavier Chantry
d6f62ba22d makepkg : allow to specify a download filename
A source entry can now have the following form, to specify a different
filename :
"filename::http://path/to/file"

Of course, the old syntax is still supported :
"http://path/to/file"

And as before, in the second case, the filename used is simply "file".

This fixes FS#11292, because handling multiple source files with the same
name is now possible (just choose a different filename).

But it will also allow to deal much more nicely with funny url like this by
using a sane filename (and unfortunately, there are quite a few) :
http://www.vim.org/scripts/download_script.php?src_id=6992

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-25 18:23:05 -05:00
Xavier Chantry
d05882db9e Rename alpm_db_get{pkg,grp}cache to alpm_db_get_{pkg,grp}cache
This is more consistent with the private functions :
_alpm_db_get_{pkg,grp}cache

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-25 18:10:03 -05:00
Xavier Chantry
0701356260 Change checkdeps and checkdbconflicts to be more flexible.
These two functions now take directly a package list rather than a database.

checkdbconflicts was renamed to checkconflicts.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2008-08-25 18:08:52 -05:00
Xavier Chantry
9dbe5c9d1e pacman : smarter optdepends handling.
During an upgrade, only the new optdepends will be displayed, to only keep
the useful information and not clutter pacman output too much.

The whole optdepends list is always available with -Si / -Qi.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-25 18:06:51 -05:00
Xavier Chantry
a06d0de104 makepkg.conf : some info / docs adjustements
After commit 7865fb9af4, info pages are now treated like man pages.
This means even with !docs, info pages will still be included. And including
info pages was the main reason the docs option was enabled by default
recently. So this is now longer needed, and we can revert back to !docs by
default for disabling gigantic html pages and other docs.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-25 18:05:25 -05:00
Xavier Chantry
24d7c6a372 Final updates on all translation for 3.2.1
* Update all .po files because of the last "-q,--quiet" fix.
Also for some strange reason, en_GB was missing a few c-format tags.

* Finally, delete all unused translations.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-25 17:54:22 -05:00
Roman Kyrylych
ece3d3606a Add missing comma to -S --help message
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-25 17:54:05 -05:00
Hugo Doria
81853893a5 Update Portuguese (Brazil) translation
Xav : alignment fixes
2008-08-25 19:55:45 +02:00
Samed Beyribey
eeb3c6868c Update Turkish translation 2008-08-25 19:36:01 +02:00
甘露(Lu.Gan)
cfc52dad98 Update Chinese Simplified translation 2008-08-25 08:34:16 +02:00
Vojtěch Gondžala
49c58ce9db Update Czech translation 2008-08-24 14:10:17 +02:00
Matthias Gorissen
08b0fb856d Update German translation 2008-08-24 14:10:16 +02:00
Sergey Tereschenko
6f38cedd8d Update Russian translation
[Xav: one minor fix to libalpm po file]
2008-08-24 02:04:39 +02:00
Dan McGee
a4100b3847 Merge branch 'maint' 2008-08-23 18:28:58 -05:00
Xavier Chantry
14203d77f4 Allow sync200 pactest to pass without libdownload.
This was a stupid and unimportant regression caused by commit
4476598e4e .

When libdownload is not available, a xfercommand is needed for this pactest
to run properly.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-23 18:01:45 -05:00
Henning Garus
ec928faad3 Add autotools magic for pactests
Added a Makefile.am for the pactest/tests dir. This is a blatant ripoff
of scripts/Makefile.am, which replaces predefined expressions in
NAME.py.in pactests with configure variables.
This can be used to write pactests which consider compile time options.

Signed-off-by: Henning Garus <henning.garus@gmail.com>
[Dan: autotools are tough, make a few adjustments for correctness]
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-23 18:00:37 -05:00
Xavier Chantry
4b183bf9a9 makepkg : add --config option for an alternate config file.
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-23 17:46:56 -05:00
Xavier Chantry
7e8f1469c4 Remove DB_COMPRESSION and DB_CHECKSUMS from makepkg.conf
DB_COMPRESSION was only used in repo-add and DB_CHECKSUMS was not used
anywhere.
This also removes the dependency on makepkg.conf in repo-add, so repo-add no
longer needs to source makepkg.conf

And instead of DB_COMPRESSION, it seems better to just check the extension
of the repository file. It does not make sense to have a tar.gz file with a
tar.bz2 extension or whatever.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-23 17:39:58 -05:00
Xavier Chantry
68e59ecbaf Update British English translation
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2008-08-23 23:38:40 +02:00
Xavier Chantry
91eeee08de Update French translation
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2008-08-23 23:36:12 +02:00
Nagy Gabor
05d23059fd Update Hungarian translation 2008-08-23 23:36:12 +02:00
Juan Pablo González Tognarelli
f56d763547 Update Spanish translation
Xav : one minor fix (a missing %s in the downgrading message).
2008-08-23 23:35:21 +02:00
Mateusz Herych
8f99f75e6e Update Polish translation 2008-08-23 23:15:55 +02:00
Giovanni Scafora
4b4ad18348 Update Italian translation 2008-08-23 23:13:12 +02:00
Dan McGee
b0b5dabf1b Update translation files for pending 3.2.1 release
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-23 11:21:28 -05:00
Dan McGee
31c7e82a51 Fix 'None' text so we don't have to translate it twice
We had one "None" and one "None\n" string; we can let the program do the
addition of the newline so we don't have to.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-23 11:20:59 -05:00
Dan McGee
496b687c3d makepkg: check all integrity sums found in the PKGBUILD
Currently we use the INTEGRITY_CHECK array from makepkg.conf to limit both
the integrity sums generated and checked. It doesn't make a whole lot of
sense to ignore integrity sums that are present in a PKGBUILD, so this patch
will enable checking any that are available, but will only print a warning
about missing sums for those types found in INTEGRITY_CHECK.

It also adds a slight optimization of checking for openssl- we only need to
check once now because we use the same program for all checks.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-23 10:19:17 -05:00
Nagy Gabor
baf5852555 Move -Sp implementation to the front-end
This patch kills one of our hackish pseudo transactions: PRINTURIS.
(The other one is -Sw)

From now on, front-end must not call trans_commit in case of -Sp,
it should print the uris of target packages "by hand" instead.

PRINTURIS flag was removed, NOCONFLICTS flag can be passed to skip
conflict checks.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-23 09:50:40 -05:00
Nagy Gabor
8146f6f1c6 New public alpm_pkg_get_db function
This function returns with the origin database of a package.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-23 09:44:47 -05:00
Xavier Chantry
adc4078b87 split yesno() into yesno() and noyes() functions.
The yesno function had a preset argument for specifying the default answer :
yes or no.

However, in all our calls to yesno, only one used the default "no" answer.
Having to specify preset==1 for all the other cases was rather cumbersome.

To make this easier, this commit adds a noyes function, with the following
behavior :
yesno() : default answer is yes
noyes() : default answer is no

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-23 09:22:34 -05:00
Allan McRae
7865fb9af4 Treat info pages like man pages
As far a package building is concerned, info pages need to be treated
in the same fashion as man pages in that they both can be compressed.
This separates them from other forms of documentation and so it makes
sense to make that distinction within makepkg.

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-23 09:20:51 -05:00
Nagy Gabor
3ff7701e89 Pass the old package with PM_TRANS_EVT_UPGRADE_START
This is more rational and coherent with PM_TRANS_EVT_UPGRADE_DONE.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-23 09:20:32 -05:00
Dan McGee
b3033a59e9 pactest: remove need for pause when running tests
Instead of pausing 1.5 seconds on tests that check file mtimes, change the
mtimes to something in the far past so we can immediately tell if a file was
modified and/or touched. This saves a decent amount of time on the upgrade
tests which often check mtimes.

355 was a completely arbitrary time value, don't ask me why I picked it.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-23 09:20:32 -05:00
Xavier Chantry
5b51dbb11e Cleanup of _alpm_pkg_compare_versions.
* Change the return values to be more informative.

It was previously boolean, only indicating if a sync package was newer than
a local package.

Now it is a simple wrapper to vercmp, handling the force flag.

* Remove the verbose output from _alpm_pkg_compare_versions.

The "force" message is not so useful.
The "package : local (v1) is newer than repo (v2)" message can be moved to
-Su operation.
For the -S operation, it is better to have something like :
"downgrading package from v1 to v2"

* Don't display the "up to date -- skipping" and "up to date -- reinstalling"
messages, when the local version is newer than the sync one.

* Fix the behavior of --needed option to not skip a target when the local
version is newer, and clarify its description.

* Add a new alpm_pkg_has_force function

This allows us to access the pkg->force field like any other package fields.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-23 08:47:07 -05:00
Xavier Chantry
e760c4f478 download : disable progressbar when total is unknown.
This is a work around for FS#8725.

There are some bad combination of proxies and mirrors where the Content
Length is not returned, and thus the progress bar can't be displayed
correctly.

Dan: Note that this patch also adds a "downloading" message when the
progress bar is disabled, which was formerly not indicated at all in the
output.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-23 08:38:51 -05:00
Xavier Chantry
081f64aea3 fix HACKING asciidoc file.
The HACKING file seemed to be broken :
http://archlinux.org/pacman/HACKING.html

And indeed, running asciidoc HACKING issued a number of warnings :

WARNING: HACKING: line 27: missing [paradef-default] C-style entry
type:  numbered : expected  1  got  3
WARNING: HACKING: line 44: list item 3 out of sequence
WARNING: HACKING: line 49: missing [paradef-default] C-style entry
type:  numbered : expected  2  got  4
WARNING: HACKING: line 62: list item 4 out of sequence
type:  numbered : expected  3  got  5
WARNING: HACKING: line 69: list item 5 out of sequence
type:  numbered : expected  4  got  6
WARNING: HACKING: line 75: list item 6 out of sequence
type:  numbered : expected  5  got  7
WARNING: HACKING: line 83: list item 7 out of sequence
WARNING: HACKING: line 104: missing [paradef-default] C-style entry
WARNING: HACKING: line 116: missing [paradef-default] C-style entry
WARNING: HACKING: line 126: missing [paradef-default] C-style entry

I just followed the syntax example there :
http://www.methods.co.nz/asciidoc/userguide.html#X56
And all is fine now :)

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-23 08:38:43 -05:00
Xavier Chantry
0969c2e700 pacman : clarify help message.
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-23 08:38:36 -05:00
Xavier Chantry
56f0cf9d15 makepkg : localize the Y/n part of the question.
pacman already localizes the yesno stuff, so doing the same in makepkg is
more consistent.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-23 08:38:31 -05:00
Xavier Chantry
96e023c7bd pacman: print optdepends on install and upgrade.
This implements FS#10630.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-23 08:38:25 -05:00
Nagy Gabor
e27a8c9ae3 Add new list_display_linebreak function
list_display puts several members on the same line, which is not appropriate
for optdepends:

Optdepends: foo: feature1  bar: feature2  baz: feature3

The new list_display_linebreak function puts every member on its own line,
which is much better with optdepends:

Optdepends: foo: feature1
            bar: feature2
            baz: feature3

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
[Xav: implement this new behavior as a new function rather than as a
parameter of list_display]
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-23 08:38:18 -05:00
Nagy Gabor
9451b2e4f2 Move the the description parsing logic to string_display()
So dump_pkg_full will indent all strings correctly.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
[Xav: add string_length function]
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-23 08:38:11 -05:00
Xavier Chantry
901e4aa5c2 makepkg: do insensitive comparisons of checksums.
This fixes FS#11283 , which was originally reported on the forums :
http://bbs.archlinux.org/viewtopic.php?id=53794

Insensitive comparisons were implicitly made before since md5sum --status was
used for checking. Now that we use openssl and compare checksums manually in
bash, we lost that feature.
This can be easily reintroduced using tr '[A-F]' '[a-f]'

What convinced me to fix it is that the md5 command line tool generates md5sums
in upper case by default :
http://www.fourmilab.ch/md5/

And finally, A-F and a-f are the same in hex and both are used.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-23 08:37:19 -05:00
Dan McGee
282eeadc68 Factor shell script size command into configure script
Commit 149839c539 introduced a small behavior regression as a drawback
for a better portability. repo-add now includes the approximate size (to the
nearest KB) rather than an exact size due to the switching of the du command
to a more portable form. Instead of sacrificing the exact size, use
configure to help us determine a valid command to acquire our filesize and
place it in the sync database.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-19 23:29:56 -05:00
Xavier Chantry
9609c0f135 repo-add: add optdepends to the sync database.
See FS#10630.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-19 19:24:56 -05:00
Nagy Gabor
6417ac129d repo-add: Fix whitespaces handling in variables.
repo-add didn't handle whitespaces nicely in fields value, and this has hurt
us several times, first with provision version (FS#9171) and then with
optdepends (FS#10630), so it is time to fix it.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-19 19:24:48 -05:00
Nagy Gabor
729651a554 Remove an usused variable from alpm/util.c/_alpm_lckmk()
Probably a tweakable "lockdb-retry" option was planned which is not
implemented. (Now it should be implemented in front-end.)

So now this variable was unused and caused a small memleak.
(FREE(dir) was not reached in case of error.)

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-19 18:43:46 -05:00
Xavier Chantry
232b838a54 libalpm/add.c : ensure the old pkg was fully loaded.
This fixes FS#11218.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-19 18:42:51 -05:00
Xavier Chantry
fb5c5086e1 pacman.c: fix typo s/NoPassiveFTP/NoPassiveFtp
This fixes FS#11203.

The doc has always mentioned NoPassiveFtp, but an inconsistency was
introduced with commit 76f816b9f7 when case
sensitive comparision was introduced, and was only found after commit
b3e6cf652c which dropped the case insensitive
comparison.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-19 18:42:42 -05:00
Xavier Chantry
a28b8e187f pacman.conf : add curl example for XferCommand.
curl is likely to be available on the majority of systems and supports the
file:// protocol.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-13 21:13:16 -05:00
Xavier Chantry
89c2c51964 pacman/callback.c : fix detection of totaldownload
This fixes FS#11180.

The usage of the total percent was detected like this :
/* use disp_percent if it is not 0, else show bar_percent */

However, it is very possible that the total percent is 0 at the beginning,
if the first packages downloaded are very small compared to the total
download.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-13 21:13:10 -05:00
Allan McRae
a23fc08758 Fix error when sourcing profile script
With the "set -e" property set, a failure when sourcing /etc/profile
can cause makepkg to exit without error message.  The bash-completion
package activates this bug.  Fixes FS#11179.

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-13 21:09:38 -05:00
Allan McRae
57bd8974c7 Fix creation of source package with local source files
Fixes FS#11149.

Signed-off-by: Allan McRae <allan@archlinux.org>
2008-08-09 07:23:37 -05:00
Dan McGee
d8f8a12665 Fix segfault on x86_64 when using UseSyslog
Due to differences in handling va_list between i686 and x86_64, this bug
can only be seen on x86_64. va_list usage is not allowed but we had been
getting away with it. See
http://lists.opensuse.org/opensuse-programming/2008-02/msg00005.html
for details and explanation.

This fixes FS#11096.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-08 22:18:00 -05:00
Dan McGee
57393eb730 Fix variable naming issues in _alpm_db_cmp
When this function got a rewrite in commit f43805d875, argument and variable
names got a bit mixed up when separating the casts from the strcmp
operation. Fix the mixup which also fixes a possible segfault when this
function is called.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-08 13:45:46 -05:00
Dan McGee
f201f107db doc: allow asciidoc to format the note
By doing the bolding manually, it doesn't look as cool in the HTML generated
manpages. Let asciidoc do the work.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-07 13:11:20 -05:00
Xavier Chantry
72c5a298a3 Avoid double slashes in URLs given to libdownload.
If a Server specified in pacman.conf had a trailing slash, libalpm ended up
building URLs with double slashes, and this broke libdownload with errors
like the following one :

error: failed retrieving file 'redland-1.0.8-1-i686.pkg.tar.gz'
from 192.168.0.90 : Command okay

So the public function alpm_db_set_server will make sure to remove the
trailing slash of servers.  For the private function
_alpm_download_single_file, I only added a comment.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-05 19:30:29 -05:00
Xavier Chantry
4476598e4e dload.c : drop the specific handling of file: url.
Before commit fc48dc31, file:/// urls forced the use of the internal
downloader (libdownload), because the default XferCommand, wget, does not
handle them.  We tried to move away from forcing usage of libdownload, so
this commit implemented the handling of file:/// urls manually. However,
this implementation is way too basic. It does not handle the progress bar,
thus nothing at all appears in pacman's output when a file: repo is
synchronized, or when a file is downloaded from a sync repo. Also, it is not
able to detect when the repo is already up-to-date. When libdownload was
used, both were handled.

It seems better to just drop this implementation for now. All users who use
libdownload will get the much better file:// handling back. For the users of
XferCommand, it will be more problematic, but they have several options:

1) Switch to a downloader handling file:// (wget doesn't, but curl does for
example).
2) Drop the file:// repo, and set up light http or ftp servers instead.
Consider that going that way would make this repo available for the whole
local network, which can be useful.
3) Switch back to libdownload, which works perfectly for many users.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-05 09:58:52 -05:00
Xavier Chantry
9bc799ec7b makepkg: fix download functions with weird urls.
This fixes FS#11076.

1) quote the url in get_downloadclient
2) only enable nullglob where it is needed
You can see in 7fc306cd41 that nullglob was only enabled for one part, and
that it already caused other problems, which were fixed in 7ff5a917fd.
Thanks to Henning Garus for pointing out that nullglob was problematic with
urls containing expansion char like '?'.
3) change get_downloadcmd which displayed the download command line to
download_file which actually executes the download. It seems nicer that way.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-04 13:11:18 -05:00
Dan McGee
692ea72822 makepkg: Clarify usage instructions for --allsource/--source
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-08-04 13:02:58 -05:00
Dan McGee
fabf7ad6c4 Version bumps to configure for 3.2.0 release
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-30 19:28:07 -05:00
Xavier Chantry
8485b7b3a4 NEWS: updates from ML
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-30 07:25:23 -05:00
Xavier Chantry
115dcf0911 Final update of all translations.
Two recent commits slightly broke the translations, so this fixes all of
them.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-30 07:24:32 -05:00
Xavier Chantry
5949936777 Update README file.
Several pieces of information were outdated for the 3.2 release.  Add a
section for the API changes between 3.1 and 3.2.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
[Dan: small updates/grammar corrections]
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-29 22:33:26 -05:00
Dan McGee
a7244e6ab2 Further updates to submitting-patches
Xavier started the job, this should clean it up and get it up to date that
final bit.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-29 22:25:02 -05:00
Xavier Chantry
5d6788b36e Update submitting-patches file.
The submitting patches page needed a bit of updating. It was currently a
mash-up between the pre and post git eras.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-29 22:24:42 -05:00
Xavier Chantry
6ede1a5af0 makepkg: Fix STRIP_DIRS test.
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-29 21:57:17 -05:00
Xavier Chantry
0e0a846135 makepkg : use /etc/profile
This fixes FS#9486.
source /etc/profile instead of all individual files in /etc/profile.d/*
(which is done by /etc/profile anyway).

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-29 21:48:20 -05:00
Nagy Gabor
428b2fd8cc Put CleanMethod to pacman.conf (commented out)
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-29 21:46:55 -05:00
Nagy Gabor
9a6fd1b021 Remove UseColor from front-end
This option wasn't used.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-29 21:46:42 -05:00
Nagy Gabor
e4b1a97ff2 New fileconflict005.py pactest
This makes the fileconflict004.py test complete.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-29 21:46:36 -05:00
Robson Roberto Souza Peixoto
85f5279ec0 Small fix to pt_BR translation.
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-29 21:46:08 -05:00
Giovanni Scafora
20a0b8e201 Small fix to Italian translation
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-25 07:14:55 -05:00
Dan McGee
3bf9448943 vercmptest: fix binary existence check
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-25 07:12:04 -05:00
Dan McGee
cf25884e99 pactest: exit with a non-zero error code on unexpected failure
This will allow the return code of pactest to be useful, for such things as
use in a git-bisect test script.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-24 22:16:29 -05:00
Dan McGee
9f57921467 pactest: add test.expectfailure option for tests
This will enable us to mark tests we know currently fail to differentiate
them from those that we know should pass. Regressions should be easier to
spot this way.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-24 22:16:29 -05:00
Allan McRae
7bc34ccde3 Update NEWS file for 3.2.0 release
Signed-off-by: Allan McRae <allan@archlinux.org>
[Dan: updates of my own + some from ML]
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-24 22:16:29 -05:00
Xavier Chantry
b8e306b73e Implement AND based package searching.
This fixes FS#2334.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
[Dan: add some comments to the code]
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-24 22:16:29 -05:00
Xavier Chantry
8877c88def Show number of packages to be installed / removed.
This fixes FS#7794.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-24 22:16:29 -05:00
Xavier Chantry
dfae7bdd52 src/pacman : rework the display_targets function.
We had a lot of duplicated code here. The code handling the showsize option
needed to be there three times :
1) for install part of -S
2) for remove part of -S (conflict removal)
3) for -R

This patch introduce a new display_targets(pkglist, install) function which
can handle the 3 cases above. We pass install == 1 for case 1), and install
== 0 for case 2) and 3).

Now we can finally get the benefit of an old patch which handled the
ShowSize option consistently in the 3 cases above, without an awful lot of
duplicated code :
http://www.archlinux.org/pipermail/pacman-dev/2008-January/011029.html

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-24 22:16:29 -05:00
Dan McGee
e6fb229534 Remove unused strverscmp substitute
Our internal vercmp function was the only user of this, and it no longer
relies on it.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-24 22:16:28 -05:00
Dan McGee
5078ca580e pacsearch: quote args passed to pacman
Something such as "pacsearch foo|bar" would cause problems due to the
quoting being dropped. Adding quotes solves the problem.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-24 22:16:28 -05:00
Xavier Chantry
310b13a4b7 libalpm/package.c : fix infolevel bug in pkg_dup
The pkg_dup function shouldn't call any alpm_pkg_get_ accessors because
this can fill the old package with all INFRQ_DESC fields for example, and
this won't necessarily be reproduced in the new package (for all the fields
that were copied before).

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-24 22:16:28 -05:00
Carlo Bersani
c317222d71 contrib: add pactree script
Pactree is a dependency tree viewer for installed packages.
It features both textual and graphic (through graphviz) output.

Script by: Carlo Bersani <carlocci@gmail.com>
[Allan: removed whitespace errors]
Signed-off-by: Allan McRae <allan@archlinux.org>
[Dan: killed some unnecessary lines, moved license header]
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-24 22:16:28 -05:00
Allan McRae
67f388c3fc makepkg: add packages to pkgdeps list only after successful install
This fixed FS#9403.  With this you can use "makepkg -sr", install the
dependencies, Ctrl+c during the makedepends installation and have
makepkg remove the installed packages on the exit.  Previously makepkg
tried to also remove the makedepends which were not installed.

The deplist="" line in remove_deps is due to an obscure bug where local
varaibles from the handle_deps function seem stay in scope because we
never formally exited it.

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-24 22:16:28 -05:00
Dan McGee
5e4882dfe8 Fix vercmp and add additional tests
This vercmp issue has been a sticking point but this should resolve many of
the issues that have come up. Only a few minor code changes were necessary
to get the behavior we desired, and this version appears to beat any other
vercmp rendition on a few more cases added in this commit.

This commit passes all 58 vercmp tests currently out there. Other 'fixes'
still fail on a few tests, namely these ones:

test: ver1: 1.5.a ver2: 1.5 ret: -1 expected: 1
  ==> FAILURE
test: ver1: 1.5 ver2: 1.5.a ret: 1 expected: -1
  ==> FAILURE
test: ver1: 1.5-1 ver2: 1.5.b ret: 1 expected: -1
  ==> FAILURE
test: ver1: 1.5.b ver2: 1.5-1 ret: -1 expected: 1
  ==> FAILURE
4 of 58 tests failed

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-24 22:16:28 -05:00
Nagy Gabor
075b244be2 -Sqg and -Qqg
With --quiet, "pacman -Sg grp" and "pacman -Qg grp" don't list group names.

Note that "pacman -Qgq" and "pacman -Sggq" (without targets) still list
group names becuase their output would not be very useful without them.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-22 19:50:35 -05:00
Nagy Gabor
69f00385a9 Update pactest README
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-22 19:50:10 -05:00
Nagy Gabor
06a4a5bd68 Re-enable --debug with -Sw and -Sp
Commit 8741908276 disabled --debug in these
cases. We just clear PM_LOG_WARNING flag now.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-22 19:49:30 -05:00
Nagy Gabor
22722261cc New fileconflict004.py pactest
Thread: http://www.archlinux.org/pipermail/pacman-dev/2008-July/012465.html

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
2008-07-22 19:47:35 -05:00
Hugo Doria
24783e6b6b Update Portuguese (Brazil) translation
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2008-07-22 19:47:01 -05:00
Mateusz Herych
c9550e9655 Update Polish translation
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2008-07-22 19:47:01 -05:00
Sergey Tereschenko
a7ee8f90f9 Update Russian translation
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2008-07-22 19:47:01 -05:00
Vojtěch Gondžala
12e804511a Update Czech translation
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2008-07-22 19:47:01 -05:00
Jeff Bailes
6d4f235af9 Update British English translation
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2008-07-22 19:47:01 -05:00
Samed Beyribey
441c2dd550 Update Turkish translation
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2008-07-22 19:47:00 -05:00
甘露(Lu.Gan)
27f56304d6 Update Chinese Simplified translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-22 19:46:56 -05:00
Nagy Gabor
501ce943e6 Update Hungarian translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-22 19:46:12 -05:00
Juan Pablo González Tognarelli
b169925c1e Update Spanish translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-22 19:46:11 -05:00
Giovanni Scafora
c1a648137e Update Italian translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-22 19:46:11 -05:00
Matthias Gorissen
4ebad47ae7 Update German translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-22 19:46:11 -05:00
Xavier Chantry
ad697d2fd5 Update French translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-22 19:46:11 -05:00
Xavier Chantry
991dfca90e Update pot files.
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2008-07-22 19:46:11 -05:00
Allan McRae
ae9e33ed88 Make strip paths configurable
This patch introduces a new STRIP_DIRS makepkg.conf option
to change makepkg's search path when stripping binaries.

Original work by: Thomas Bächler <thomas@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-20 19:06:14 -05:00
Nagy Gabor
b4f2cb53ef Rephrase some debug messages in alpm/sync.c
Debug messages were removed from _alpm_sync_find, because it is a general
purpose function; debug messages should be placed in the caller function.

I inserted "adding package foo-1.0-1 to the transaction targets" debug
message to find_replacements and sync_sysupgrade.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-19 11:05:17 -05:00
Nagy Gabor
2b73d45127 Use NULL instead of "" as no causingpkg
Our STRDUP macro (used in _alpm_depmiss_new) is NULL safe.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-19 11:04:38 -05:00
Allan McRae
a8405847e6 Strip *.a libraries in makepkg
Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-19 11:03:10 -05:00
Allan McRae
99be5ab8d1 Use LC_ALL=C everywhere
Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-19 11:03:03 -05:00
Nagy Gabor
471ed04790 alpm_list_remove treat NULL needle as "nothing"
So if you want to remove NULL needle from a list, alpm_list_remove will
return with "not found".

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-17 20:20:13 -05:00
Nagy Gabor
5929508198 Fix a possible segfault in alpm/remove.c
Before removing a package from target list (in remove_prepare_keep_needed),
we should check whether we have already removed it.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-17 20:20:06 -05:00
Nagy Gabor
03021713e5 _alpm_db_add_pkgincache rework
Commit 8240da6cb3 broke some alpm hierarchy
and introduced a new memleak (trans->packages was never freed in case of add
transaction, even if the transaction wasn't committed), so it is reverted
now.

We follow a different approach to reduce memory usage:
_alpm_db_add_pkgincache doesn't duplicate the whole package before adding
it to the cache, only the package name and version (INFRQ_BASE).
This method needs very small extra memory (compared to the reverted method),
and after transaction commit we use less memory than before (since the
big 'files' fields are not copied to cache), this is useful in GUIs.

Note: The old add_pkgincache was a bit broken, since pkg->origin wasn't
filled in correctly.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Acked-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-15 19:16:42 -05:00
Nagy Gabor
ffa3056010 Use "pacman -S $dep" in makepkg's dependency resolving
This method is equivalent with pacman's resolvedeps.
$dep can be any (versioned) dependency.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-15 19:14:23 -05:00
Nagy Gabor
37b5972212 Fix some memleaks in alpm/add.c
In case of error some allocated memory wasn't freed in commit_single_pkg.
Note: The return value of this function is not used.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-15 19:13:30 -05:00
Nagy Gabor
17e9c9d9ff Fix a wrong FREELIST usage in add.c
The dynamic pmconflict_t must be freed with _alpm_conflict_free.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-15 19:12:22 -05:00
Dan McGee
0bf66b097f makepkg: speed up svn revision check for large repositories
Using the suggestion from FS#10905, use 'svn info' rather than 'svn log' to
get the current revision number, which is much quicker for large Subversion
repositories. Eventually git will rule the world. :)

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-15 19:09:15 -05:00
Dan McGee
95995ae93f Remove pacman.static build from build files
This presents plenty of problems on OSes besides Linux, and even on Linux
when the libtool file for libarchive isn't present. The static build isn't
all that useful anyway as missing something such as glibc will still leave
you unable to run the pacman.static binary. Remove it from the formal build
process.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-15 19:05:24 -05:00
Xavier Chantry
8741908276 src/pacman/sync.c : Display only errors with -Sp and -Sw operations.
In particular, this avoids warnings cluttering the output of these
operations.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-13 09:19:24 -05:00
Nagy Gabor
fd8969f678 sync_addtarget rework
Now '-S provision' handling is done in the back-end.

In case of multiple providers, the first one is selected (behavior change:
deleted provision002.py). The old processing order was: literal, group,
provision; the new one: literal, provision, group. This is more rational,
but "pacman -S group" will be slower now. "pacman -S repo/provision" also
works. Provision was generalized to dependencies, so you can resolve deps by
hand: "pacman -S 'bash>2.0'" or "pacman -S 'core/bash>2.0'" etc. This can be
useful in makepkg dependency resolving. The changes were documented in
pacman manual.

alpm_find_pkg_satisfiers and _alpm_find_dep_satisfiers functions were
removed, since they are no longer needed.

I added some verbosity to "select provider instead of literal" and
"fallback to group".

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-13 09:16:55 -05:00
Nagy Gabor
f724fb2702 remove_addtarget rework (in front-end)
Now "pacman -R foo" first searches for literal, and then for group.
This is faster in most cases, see:
http://www.archlinux.org/pipermail/pacman-dev/2008-July/012311.html

"-R group" implementation was broken, since alpm_grp_get_pkgs returns with
an pmpkg_t list, not a string list.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-13 09:15:07 -05:00
Nagy Gabor
1d9d47d62c New remove060.py pactest
This is a group removal test.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-13 09:14:36 -05:00
Dan McGee
b196cc43a5 Merge branch 'maint' 2008-07-07 21:39:42 -05:00
Nagy Gabor
d92b0e674d Fix a bogus message in Hungarian translation
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-07 21:30:42 -05:00
Nagy Gabor
30702350fa Remove requiredby from pactests
Also remove some meaningless pactests (broken requiredby, requiredby*.py
tests). requiredby001.py was renamed to upgrade076.py.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-07 21:14:13 -05:00
Nagy Gabor
72c0ab5c51 Resolvedeps rework
I divided resolvedeps into 2 functions. The new _alpm_resolvedep function
will resolve one dependency, for example the 'foo>=1.0-1' dependency.  It
can be useful in sync_addtarget refactoring.

The resolvedeps parameters were changed, to be coherent with recursedeps:
* the target-list is an alpm_list* instead of alpm_list**. This is OK,
  because alpm_list_add == alpm_list_add_last
* syncpkg param was removed. list contains the to-be-installed packages,
  resolvedeps will add the required dependencies into this list
* trans param was removed, it was used in QUESTION() only, which can be used
  on the main (handle->trans) transaction only (because the front-end cannot
  access our pseudo-transactions at all!).

The patch fixes some wrong dynamic pmdepmissing_t usage.

I did a behavior change (and sync1003.py was modified accordingly), which
needs some explanation: The old resolvedeps didn't elect packages from
'remove' list. I've dropped this because I don't want that 2nd excluding
list param. In fact, in real life, we ~never need this rule. Resolvedeps is
called before checkconflicts, so only -Su's %REPLACES% packages are sitting
in 'remove' list. This means, that we have the replacement packages in our
target list. Usually "foo replaces bar" means, that bar isn't in our repos
any more, so resolvedeps *cannot* elect it; but usually it won't try it at
all, because foo is in the target list, and it is expected to satisfy
'bar>=1.0-1'-like dependencies too. Since checkdeps and checkconflicts is
done after resolvedeps, this cannot cause any harm.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-07 21:12:55 -05:00
Nagy Gabor
8856146d71 Swap parameters on PM_TRANS_CONV_INSTALL_IGNOREPKG callback function
PM_TRANS_CONV_INSTALL_IGNOREPKG callback function can get 2 params: foo, bar
in this order (packages), bar can be NULL.

Old API:
foo, NULL: Do you want to install foo from IgnorePkg?
foo, bar: foo requires bar from IgnorePkg. Do you want to install bar?
New API:
foo, bar: Do you want to install foo from IgnorePkg? (If bar!=NULL:) bar
requires it.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-07 21:12:30 -05:00
Nagy Gabor
616b5967b8 New _alpm_find_dep_satisfier function
This function finds the first satisfier package in a pkglist. Using it
instead of _alpm_find_dep_satisfiers eliminates some memleaks and it is
faster. (_alpm_find_dep_satisfiers and _alpm_find_pkg_satisfiers will be
removed soon.)

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-07 21:04:37 -05:00
Nagy Gabor
f7199f36ba New _alpm_dep_edge function
The function is introduced to kill some code duplication. The function name
uses the 'dependency graph' terminology.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-07 21:04:16 -05:00
Nagy Gabor
2122eb1428 Don't duplicate packages in requiredby list
This is a "fix" for FS#10226. I think that multiple versioned dependencies
are quite common now, and the old behavior is quite annoying there. This
patch won't cause any slow-down.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-07 21:03:52 -05:00
Nagy Gabor
5f701005ed Use $PKGEXT (from /etc/makepkg.conf) in bacman
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-07-01 21:08:50 -05:00
Xavier Chantry
11695bd0d7 repo-add cleanup.
* change ln -s to ln -sf in the Makefile to prevent a failure when the link
already exists.
* make test_repo_db_file simpler and more natural, move the complexity out
of it.
* remove one $cmd = repo-remove check that wasn't needed

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-29 17:37:45 -05:00
Allan McRae
d534488f2d Remove symlinks to libtool files
This prevents dangling symlinks to removed libtool files when
the !libtool option is used.

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-27 09:07:39 -05:00
Carlo Bersani
b15fb504a1 bacman: fix issue with symlink early copy
test -e tries to resolve the link before testing, so if the link is copied
before the actual file, the script exited. This fixes the issue.

[Dan: also add some improved quoting in the script]

Signed-off-by: Carlo Bersani <carlocci@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-22 21:21:05 -05:00
Allan McRae
74eb2f5c61 Additional path quoting and srcdir/pkgdir usage
Removes the remaining $startdir/{src,pkg} usage and adds quoting
around (hopefully) all remaining path variables

Signed-off-by: Allan McRae <mcrae_allan@hotmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-22 21:12:39 -05:00
Dan McGee
7edb2e5b0d Add information on version comparison to manpages
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-19 19:28:56 -05:00
Dan McGee
d594b6e797 Merge branch 'maint' 2008-06-19 08:51:36 -05:00
Dan McGee
5c6809987e makepkg.conf: make keeping docs the default
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-19 08:50:17 -05:00
Dan McGee
deec3c8d00 autoclean.sh: Fix paths to po/ dir
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-19 08:47:44 -05:00
Alper KANAT
d88524ea0e Add libalpm Türkçe (Turkish) translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-19 08:46:56 -05:00
Dan McGee
29bf6814f7 Use access() instead of stat() when possible
We were using the stat() system call in quite a few places when we didn't
actually need anything the stat struct returned- we were simply checking for
file existence. access() will be more efficient in those cases.

Before (strace pacman -Ss pacman):
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 33.16    0.005987           0     19016           stat64

After:
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 34.85    0.003863           0     12633         1 access
  7.95    0.000881           0      6391         7 stat64

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-15 22:52:27 -05:00
Xavier Chantry
7ff5a917fd makepkg: add several quotes needed after nullglob.
After the "shopt -s nullglob" change, all regular expressions should be
properly quoted.
This commit only fixes the ones I found, there are probably others left, so
this should be kept in mind for easier future fixing.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-15 13:53:15 -05:00
Xavier Chantry
b9445c12cf makepkg: Add missing quotes for the source array.
Now makepkg can handle filenames with whitespaces in the source array.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-15 13:52:54 -05:00
Sebastian Nowicki
b8a66d6859 Use openssl for checksum verification instead of *sum utilities
md5sum, sha1sum, etc, do not exist on BSD systems by default. Openssl is a
good portable alternative. This also brings in a dependency for openssl.

Closes FS#10530.

Signed-off-by: Sebastian Nowicki <sebnow@gmail.com>
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-15 13:52:03 -05:00
Dan McGee
2158b8e298 Expand PKGBUILD documentation
Add documentation for $startdir, $srcdir, and $pkgdir variables, as well as
general information about the build() function and about custom variables
in PKGBUILDs. This addresses FS#10634.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-14 12:00:43 -05:00
Dan McGee
fff746052c Document pacman -q/--quiet operation
Fixes FS#10644.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-14 12:00:40 -05:00
Dan McGee
a1dfa8e61f Combine repo-add and repo-remove into one script
They shared about 75% of their code, so there is no real reason we should
maintain them separately. Merge the differences accordingly and add a check
based on the basename of the command used to decide what behavior to follow.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-14 11:31:18 -05:00
Dan McGee
89819b3f92 repo-*: allow use of readlink or realpath
Linux coreutils provides readlink, and BSD systems tend to have realpath
available. Both commands provide similar functionality but of course have
different names. Add a check for either and use what is available.

While doing this, also unify some of the differences that have cropped up
between repo-add and repo-remove.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-14 10:48:28 -05:00
Allan McRae
c11bdf19b1 Move geninteg block in makepkg before error checking
This patch moves the generating of integrity checks to before any
error checking takes place in the PKGBUILD file.  This allows integrity
generation to complete when unrelated errors exist in a PKGBUILD file
and allows the removal of multiple checks of the GENINTEG variable that
would otherwise be needed.

In addition a minor fix is made to a comment.

Signed-off-by: Allan McRae <mcrae_allan@hotmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-14 08:35:40 -05:00
Dan McGee
7313c8546a Merge branch 'maint' 2008-06-12 19:21:06 -05:00
Xavier Chantry
331891ceb1 fr.po : fix one minor alignment problem.
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2008-06-12 19:20:39 -05:00
Alper KANAT
6d737254fc Add pacman Türkçe (Turkish) translation
No libalpm translation yet.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-12 19:14:16 -05:00
Juan Pablo González Tognarelli
0077bfa3a0 Spanish translation updates
Fixes to old translations and new strings for upcoming 3.2 release.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-12 19:10:43 -05:00
Dan McGee
7fc306cd41 Use shell builtin to list files for package inclusion
On BSD systems, as super user, the 'ls' command displays all dot files by
default, causing these to get included when not intended. If we use the bash
glob operator, we can avoid issues with ls on different platforms; however,
we need to turn the nullglob shell option on first to ensure we don't have
problems in empty directories.

Originally-noticed-by: Sebastian Nowicki <sebnow@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-12 19:06:14 -05:00
Dan McGee
1824bc6ee6 Allow use of GIT_VERSION in documentation dir
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-08 17:26:02 -05:00
Dan McGee
f827c9572e makepkg: remove deprecated --usesudo code
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-08 17:25:28 -05:00
Allan McRae
4979157cba makepkg: add --allsource option
This supplements the --source option and does nearly the same thing, except
downloaded source files are included in the archive as well. The sources are
now packages with a pkgname/ prefix.

Original-work-by: Dan McGee <dan@archlinux.org>
Signed-off-by: Allan McRae <mcrae_allan@hotmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-08 17:16:40 -05:00
Dan McGee
0fc538fcdb Various updates needed prior to a new release
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-08 13:50:01 -05:00
Thomas Bächler
512282ca54 Minor fix to German translation
Signed-off-by: Thomas Bächler <thomas@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-07 15:30:55 -05:00
Allan McRae
fcac23763b bacman - regenerate package from system
Original work by Carlo "carlocci" Bersani with additions by
Xavier Chantry and Allan McRae

This script rebuilds an already installed package using metadata
stored into the pacman database and system files.  Replaces the
outdated re-pacman script

Signed-off-by: Allan McRae <mcrae_allan@hotmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-06 07:01:22 -05:00
Dan McGee
b04d6e751a Reformat -Sg output to look like -Qg
We used list_display() on -Sg output, which might have been slightly nicer
looking but made it much harder to parse in something like a shell script.
Reformat it in the 'grpname pkgname' format that -Qg is already using.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-05 14:36:35 -05:00
Xavier Chantry
5ae02e6ae7 Don't display filename on -Qip operation.
Some previous commits apparently broke the get_filename function for package
loaded with pkg_load (on a -Qip operation) because this field was no longer
filled. Now pkg_load fills it.
But the -Qip operation needs to be run like this : -Qip <filename>, so the
filename is already known. There is no need to display it again.
Besides, on a normal -Qi operation, the filename is not displayed either
because this information is not stored in the local database.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-04 16:25:31 -05:00
Xavier Chantry
d030d12542 src/pacman/sync.c : cleanup of pacman_sync
By putting the search / group / info / list operations just after the -Sy
op, we can simplify several checks :
1) the check for "missing targets". Since we took care of the above
operations, we now have less cases to consider :
* -Syu or -Su : we can proceed
* -Sy : we can end now (this is actually a bugfix)
* -S : this op requires targets, so exit with an error
2) the check to see if a transaction is needed. If we arrive at the end of
the function, it is either because we have -Su or -S <targets> so we already
know a transaction is needed there.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-04 16:25:31 -05:00
Xavier Chantry
0966c33a72 Get rid of double / in database paths.
Errors like the following one happen regularly (for unknown reasons...) :
error: could not open file /var/lib/pacman/local//glibc-2.7-9/depends: No
such file or directory

Anyway, every time an user reported an error like that, it always seemed
like he thought the error was caused by the double /, which is obviously
wrong.

Since db->path always include a trailing /, there is no need to add one when
concatenating paths in be_files.c or add.c.
Additionally, some static strings were switched to dynamic.
And the computation of the "dbpath"/"pkgname"-"pkgversion" was refactored
in db_read, db_write and db_remove with a get_pkgpath static function.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-04 16:25:27 -05:00
Dan McGee
fe781e4ce4 Reimplement TotalDownload functionality
Add a new totaldlcb callback function to libalpm and make pacman utilize it
when the TotalDownload option is enabled. This callback function is pretty
simple- it is meant to be called once at the beginning of a "list download"
action, and once at the end (with value 0 to indicate the list has been
finished). The frontend is responsible for keeping track of adding
individual file download amounts to the total xfered amount in order to
display some sort of overall progress.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-04 15:38:53 -05:00
Dan McGee
0669c9bfac Use correct C type for file sizes
We have been using unsigned long as a file size type for a while, which
works but isn't quite correct and could easily break. Worse was probably our
use of int in the download callback functions, which could be restrictive
for packages > 2GB in size.

Switch all file size variables to use off_t, which is the preferred type for
file sizes. Note that at least on Linux, all applications compiled against
libalpm must now be sure to use large file support, where _FILE_OFFSET_BITS
is defined to be 64 or there will be some weird issues that crop up.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-04 15:38:47 -05:00
Dan McGee
62b4195c76 libalpm/md5: Fix license header
This was mistakenly referencing the LGPL even after the XySSL code bump, so
fix the license clause to be correct.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-03 21:31:31 -05:00
Anton Fiuman
4a802838cb Don't require --force when using the --nobuild option
makepkg should not abort with error when a user uses the --nobuild option to
extract sources if a package has already been built.

Signed-off-by: Anton Fiuman <llexiw@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-06-01 23:49:38 -05:00
Dan McGee
5f0692def8 makepkg: remove some dead TODO code
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-31 12:06:45 -05:00
Dan McGee
636610432a Allow GIT version to be used in pacman builds
Add a new configure flag, --enable-git-version, that allows the output of
'git describe' to be used in the version string associated with this
package. This could aid in debugging for users that are using a development
version of pacman and we should be able to figure out which cut of code they
are using.

Sample output:
$ pacman --version
Pacman v3.1.4-190-g4cfa-dirty - libalpm v2.3.1

$ makepkg --version
makepkg (pacman) 3.1.4-190-g5861-dirty

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-31 12:06:34 -05:00
Dan McGee
54e1e3e642 Fix versioncmp regression after update
Commit 8428367285 introduced the regression,
and a previous commit introduced the vercmptest.sh test script to track down
these issues. This commit solves the problem by removing the previous
attempt at locating the pkgrel portions and replacing it with something that
performs the correct logic.

While tracking down everything I needed to, I also found a mistake in one of
the pactests which is fixed here as well as increased the functionality and
verbosity of the vercmptest script to both print out each test it is running
as well as automatically run the mirror of each test case.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-30 16:54:15 -05:00
Dan McGee
2cd0a87b3f Add simple vercmp test script
Commit 8428367285 updated the versioncmp code
in libalpm. Unfortunately for us, it also introduced the regression that
becomes apparant with the following upgrade:

warning: sonata: local (1.5-2) is newer than extra (1.5.1-2)

Add a vercmptest.sh test script that is run during the make check phase
which now points out three regressions in the version comparison function
that will need fixing. All current tests in this script pass with the old
versioncmp code.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-29 17:25:37 -05:00
Dan McGee
b48f703aa6 Add missing NULL set in group printing
If we don't set the pkgname var to NULL, we run into all sorts of beautiful
segfault behavior when a group spans multiple repositories and we try to
print out the location of the former list. Easy fix.

This regression was introduced in bf86700369.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-29 17:25:07 -05:00
Dan McGee
009f89c4d2 Merge branch 'maint' 2008-05-29 06:39:38 -05:00
Geoffroy Carrier
b32aa81b5e Add trailing / to DESTDIR for stupid Makefiles.
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-29 06:37:21 -05:00
Allan McRae
62ee1bfff0 Tidy up of the handle struct in libalpm
Removed unused handle->uid from pmhandle_t. The need to check permissions
should be determined by the frontend (and is in pacman).

Fixed comment on noextract in pmhandle_t.

Signed-off-by: Allan McRae <mcrae_allan@hotmail.com>
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-29 06:37:21 -05:00
Xavier Chantry
1cca4ef764 Remove PM_TRANS_EVT_EXTRACT_START.
This event was unused, was missing the equivalent EXTRACT_DONE event, and
was useless because we already have ADD / UPGRADE START and DONE events.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-29 06:37:21 -05:00
Xavier Chantry
b262ddb2ed be_files : stores REPLACES and FORCE in desc.
repo-add and db_read both assume that REPLACES and FORCE fields are in the
desc file, so do that for db_write as well (instead of depends file).

Note that db_write is currently only used on the local database. And the
only purpose of replaces and force in local database is for information
purpose (available on -Qi operations). So this is not a big problem.

Ref: http://www.archlinux.org/pipermail/pacman-dev/2008-May/011859.html

Acked-by: Dan McGee <dan@archlinux.org>
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-29 06:37:20 -05:00
Allan McRae
f30dab4b5a Pactests for sync operations with NoUpgrade and NoExtract
This adds the sync equivalents of upgrade010.py and upgrade070.py.
Both additional test pass.

Signed-off-by: Allan McRae <mcrae_allan@hotmail.com>
Acked-by: Dan McGee <dan@archlinux.org>
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-29 06:37:20 -05:00
Allan McRae
c1a5616c26 makepkg - add check for valid options in PKGBUILD
This patch removes the code block in makepkg that checked for depreciated
options in a PKGBUILD and provided a workaround.  Unknown and depreciated
options are upgraded to error conditions.

Also, removed TODO regarding including install script if exists and $install
is unset.  That should never happen.

Signed-off-by: Allan McRae <mcrae_allan@hotmail.com>
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-29 06:37:20 -05:00
Nagy Gabor
da1c11cc30 Add some verbosity to _alpm_db_read.
Name and version are computed from "/var/lib/pacman/..." pathname. And the
%NAME% and %VERSION% fields from the desc file were not even read. So now,
when we read the desc file, we make sure the %NAME% and %VERSION% fields are
consistent.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-29 06:37:20 -05:00
Nagy Gabor
ad54b28680 Fix for remove052.py by moving recursedeps before checkdeps.
In the case of -Rs operation, first pulling the dependencies with
recursedeps before calling checkdeps takes care of the dependency chain of
remove052 pactest.

In the case of -Rcs, we can keep the old behavior because we have no problem
there (any dependency returned by checkdeps will be added to the remove list
because of -Rc) and we have to run recursedeps on the final remove list
anyway to catch all orphans.

Ref.: http://www.archlinux.org/pipermail/pacman-dev/2008-April/011569.html

Signed-off-by: Nagy Gabor <ngaba at bibl.u-szeged.hu>
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-29 06:37:20 -05:00
Allan McRae
ae40d1c05b Pactest for removing multiple items in a dependency chain.
This adds a test for when removing multilpe packages recursively from a
chain of dependent packages. This situation can occur when removing
installed dependencies with makepkg if a "makedepend" recursively depends on
a "depend" or if redundant dependancies are included.

Signed-off-by: Allan McRae <mcrae_allan at hotmail.com>
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-29 06:37:19 -05:00
Allan McRae
9577c07d86 No error in makepkg when removing deps fails
Catches error from when pacman is unable to remove dependencies after
successfully building package and prints warning.  Fixes FS#10039.

Signed-off-by: Allan McRae <mcrae_allan at hotmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-29 06:37:19 -05:00
Sebastian Nowicki
c33cabd675 Use chown 0:0 instead of root.root
On BSD systems using a dot as a separator is not allowed. On Mac OSX it
is deprecated. A colon should be used instead. BSD systems also use the
"wheel" group instead of "root" to indicate the "super user" group. Both
groups use the id of 0.

Signed-off-by: Sebastian Nowicki <sebnow@gmail.com>
Acked-by: Aaron Griffin <aaronmgriffin@gmail.com>
Acked-by: Dan McGee <dan@archlinux.org>
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-29 06:37:14 -05:00
Sebastian Nowicki
20ae871940 Use "legacy mode" on Mac OSX (for file command)
For some reason `file` on Mac OSX has different arguments than BSD and
Linux; -i no longer prints out the mime strings. With the environment
variable COMMAND_MODE set to "legacy", `file` behaves more like it does
on Linux and BSD, i.e., `file -i` prints the mime type.

Signed-off-by: Sebastian Nowicki <sebnow@gmail.com>
Acked-by: Dan McGee <dan@archlinux.org>
Acked-by: Aaron Griffin <aaronmgriffin@gmail.com>
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-29 06:37:14 -05:00
Sebastian Nowicki
b9369a747d Allow an unprivileged user to create packages without fakeroot
When fakeroot was not in BUILDENV and the user was not root, makepkg still
tried to use fakeroot for building packages.
BUILDENV is now checked to see if fakeroot is enabled. If it is not enabled the
package can still be built, but root will not have ownership of files. This is
useful when users want to make packages for personal use and don't care about
ownership.

Closes FS#10450.

Signed-off-by: Sebastian Nowicki <sebnow@gmail.com>
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-29 06:37:14 -05:00
Xavier Chantry
149839c539 du -b is not available on BSD, use du -k instead.
This fixes FS#10459.

There is apparently no portable ways to get the apparent size of a file,
like du -b does. So the best compromise seems to get the block size in kB,
and then convert that to byte so that we keep compatibility.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-29 06:37:14 -05:00
Sebastian Nowicki
1d71079c5b Replace usage of "cp -s" with the more portable "ln -s"
The "-s" argument does not exist on BSD, and neither does
"--remove-destination". This patch replaces the calls to "cp -s
--remove-destination" with the equivalent "rm -f" and "ln -s" calls, in
order to increase portability.

Signed-off-by: Sebastian Nowicki <sebnow@gmail.com>
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-29 06:37:13 -05:00
甘露(Lu.Gan)
398d4aff2d Update of Chinese simplified pacman translation.
Some small adjustements according to feedback from users of chinese forum.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
2008-05-17 12:17:53 +02:00
Dan McGee
bf2964dc58 Fix compilation warning on x86_64
Glad we have so many developers using this as their native architecture.
int/size_t issue here.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-14 19:38:58 -05:00
Xavier Chantry
fb09d35e6a Disable geteuid in cygwin.
This is one of those rare cases where we actually want to code in a
platform-specific #ifdef. Because you don't need to be the root user on a
Windows box, and fakeroot doesn't exist so we can do easy testing, lets
disable any checking of the UID.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-14 09:17:02 -05:00
Xavier Chantry
33e3182dbd pactest: only use fakeroot when it is found.
Only use fakeroot and fakechroot when they are found AND required.
fakechroot only had the first condition, and fakeroot only the second.

When they are required (user != root) but not found, display a warning.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-14 09:15:14 -05:00
Dan McGee
a8ee185413 Remove wrapper call around versioncmp
Actually, just rename _alpm_versioncmp to alpm_pkg_vercmp and get rid of the
need for a wrapper since it did nothing anyway.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-14 00:37:51 -05:00
Dan McGee
8428367285 Update _alpm_versioncmp
This code hasn't been looked at in some time. I grabbed a more recent
version of the RPM source (4.4.2.3) and attempted to sync up any changes
they have made, as well as make the libalpm additional code much cleaner and
limited to only a few added lines of code.

The size of this patch might make you think we added code, but bloat-o-meter
actually tells us otherwise:
<function>                                 <old>   <new>  <diff>
_alpm_versioncmp                            1485    1021    -464

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-14 00:30:04 -05:00
Dan McGee
dd98aa8564 Simplify _alpm_pkg_new()
Any real call of this function doesn't specify a name or version ahead of
time, so just kill that functionality off. Now to remove those dummy
packages...

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-13 19:03:54 -05:00
Dan McGee
a422f6e39c Remove lazy init code from pkg name and version functions
If we have a package without name and/or version, we are really out of luck.
Speed these functions up by removing unnecessary code. Note that both the
splitname and pkg_load functions, where the name and version of packages are
initially populated for databases and pkg.tar.gz files respectively, enforce
that every new package struct created has a name and version.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-13 18:56:55 -05:00
Xavier Chantry
f671147282 Fix rewinddir regression by cleaning up db_scan
Commit 0460038447 caused a regression when
rereading the pkgcache after updating the on-disk databases. A rewinddir
call was errantly removed.

Instead of replacing the call to rewindir, clean up this whole mess.
db_scan is used only once and with target == NULL so there was actually half
the code of db_scan which was unused. This is gone now and replaced by a
single new db_populate function.

Dan: add_sorted ended up being 3x slower than one msort at the end, so I
changed back to that. I also made one pointer variable const and merged this
whole patch with my original fix for the rewinddir issue.

Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-13 18:44:13 -05:00
Dan McGee
ae5ef3b90f Remove --builddeps from makepkg
This really should be in an external script, as it is not makepkg's job to
rebuild your system.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-13 16:01:34 -05:00
Dan McGee
584ffa6aef Remove an outdated exception check in file conflict code
This has been around since at least pacman 2.9.8. Frugalware just dumped it
in commit 113ec73bfcfdc, and deleting it here and running pactest shows that
nothing that we have actually tested changes. If someone can pactest the
edge case where this is needed, then show me the money.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-13 15:49:02 -05:00
Chantry Xavier
d5278ebb3b Add SyncFirst option.
This patch offers a way to fix FS#9228.
By putting "SyncFirst = pacman" in pacman.conf, the version check will
happen before the transaction really starts, and before any replacements is
made.
Otherwise, no version check is done.

The sync301 pactest was updated to use this SyncFirst option.

Example session with SyncFirst = pacman, and a newer pacman version
available :
$ pacman -Su (or pacman -S <any targets>)
:: the following packages should be upgraded first :
    pacman
:: Do you want to cancel the current operation
:: and upgrade these packages now? [Y/n]

resolving dependencies...
looking for inter-conflicts...

Targets: pacman-x.y.z-t

Total Download Size:    x.xx MB
Total Installed Size:   x.xx MB

Proceed with installation? [Y/n] n

As Nagy previously noted, doing this check on any -S operations might look
intrusive, but it can be required.
For example, the case where you want to install a package with versioned
provisions, using a pacman version which didn't support that feature yet
(and there is already a newer pacman in sync db supporting it).

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-13 15:49:02 -05:00
Chantry Xavier
f43805d875 Cleanup usages of alpm_list_find and alpm_list_remove.
* remove obsolete and unused *_cmp helper functions like deppkg_cmp and
_alpm_grp_cmp

* new alpm_list_remove_str function, used 6 times in handle.c

* remove _alpm_prov_cmp / _alpm_db_whatprovides and replace them by
a more general alpm_find_pkg_satisfiers with a cleaner implementation.
before: alpm_db_whatprovides(db, targ)
after: alpm_find_pkg_satisfiers(alpm_db_getpkgcache(db), targ)

* remove satisfycmp and replace alpm_list_find + satisfycmp usage by
_alpm_find_dep_satisfiers.
before : alpm_list_find(_alpm_db_get_pkgcache(db), dep, satisfycmp)
after : _alpm_find_dep_satisfiers(_alpm_db_get_pkgcache(db), dep)

* remove _alpm_pkgname_pkg_cmp, which was used with alpm_list_remove, and
use _alpm_pkg_find + alpm_list_remove with _alpm_pkg_cmp instead.

This commit actually get rids of all complicated and asymmetric _cmp
functions. I first thought these functions were worth it, be caused it
allowed us to reuse list_find and list_remove. But this was at the detriment
of the clarity and also the ease of use of these functions, dangerous
because of their asymmetricity.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-13 15:49:02 -05:00
Nagy Gabor
8248b4bfb1 Swap the parameters of alpm_pkg_find
Now the syntax is coherent with alpm_list_find and alpm_sync_find.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-13 15:49:02 -05:00
Dan McGee
e80232f24c Remove errant include of error.h
This doesn't exist anymore, the header file was removed a while back in
commit 4c872594da.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-13 15:49:02 -05:00
Dan McGee
663408532a Merge branch 'maint'
Conflicts:

	lib/libalpm/package.c - comment location moved to be_package.c
2008-05-11 20:14:30 -05:00
Dan McGee
13f24a5bda Refactor pkg_load/parse_descfile into a new backend file
alpm_pkg_load() and parse_descfile() are specific to getting information
from package files, just as other code is specific to getting information
into or out of a package database. Move this code out of package.c, which
should eventually only contain operators on the pmpkg_t struct that do not
depend at all on where the data came from.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-11 20:07:55 -05:00
Dan McGee
0460038447 Remove some useless abstraction and start db cleanup
We have some useless abstractions like an alpm_db_rewind function. I've read
somewhere that readdir() was the worst filesystem function call invented,
and what do we do? Add a wrapper around it. Kill this abstraction and move
some other things into be_files that should be there anyway because they
are so tied to how a files backend works.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-11 20:05:59 -05:00
Allan McRae
3c3cb001a4 Make all error messages use pm_fprintf
Tested using many easily generated error conditions.  Also added "malloc
failure" (conf.c) and "segmentation fault" (pacman.c) error messages for
translation.

Signed-off-by: Allan McRae <mcrae_allan@hotmail.com>
[Dan: fix trailing whitespace errors, other compilation issues]
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-11 20:05:28 -05:00
Dan McGee
3175faace4 pactest: fix --gdb option
A libtool upgrade broke the gdb option as we need a MODE specified; add the
execute mode to the call.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-11 20:05:14 -05:00
Sebastian Nowicki
e3d35b3274 Add detailed description to alpm_pkg_load
It was unclear what "loading the full package" actually did. The
detailed description should clear that up, without having to look at the
code.

Signed-off-by: Sebastian Nowicki <sebnow@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-10 15:10:51 -05:00
Chantry Xavier
0bfc8adf37 contrib/paclist: list packages installed from given repo.
The paclist script provides a simple method for monitoring which packages
are installed from a given repo. This is particularly useful when using a
testing or unstable repository.

Thanks to Allan McRae for the idea and an initial bash script. As suggested
by Dan, I tried to rewrite in perl, and this resulted in much better
performance. Then Dan further cleaned up the script.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
[Dan: add to Makefile & README, minor script cleanups]
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-10 11:13:24 -05:00
Dan McGee
1ba0d84da2 pacsearch: rewrite in perl
This rewrite in perl blows the socks off the old shell script version for
large searches:

$ time ./pacsearch.perl ^.*$ >/dev/null
real    0m0.836s
user    0m0.593s
sys     0m0.217s

$ time pacsearch.sh ^.*$ >/dev/null
real    1m53.818s
user    1m16.818s
sys     0m33.694s

Functionality and output is identical to the old version with the exception
of the old version's missing EOL after all the output.  It should be a lot
easier to add new things like the --color flag that has been a TODO at the
top of the script for a long time.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-10 11:04:17 -05:00
Dan McGee
b49fc504ac Update makepath to remove PATH_MAX usage
The start of a few commits to remove some PATH_MAX usage from our code. Use
a dynamically allocated string instead.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-10 00:51:04 -05:00
Dan McGee
2edd01a973 scripts: add -q/--quiet option to repo-add and repo-remove
They are pretty noisy scripts in their normal course of operations, so allow
all messages to be squashed except for warning and error messages with this
new flag.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-10 00:48:55 -05:00
Dan McGee
502645c0e3 makepkg: Unify start and end messages
I've always found it odd why the package version is shown at the start but
not the end of the package build. Fix it, and while we are at it, add the
$CARCH variable to the display too.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-10 00:48:47 -05:00
Dan McGee
df5024fd64 Use strdup() instead of a static buffer
We only need a copy of this string once we know we are going to extract it,
and we don't need a static buffer to copy it into since it is coming from a
known-length string.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-08 20:59:59 -05:00
Dan McGee
081ba4816e Update md5 routines
XySSL 0.9 was released; sync our code with the upstream source. Note that
there weren't any real changes besides renaming of macros, so nothing much
to see here.

The biggest change may be the licence- it is now GPL/BSD software rather
than LGPL/BSD. The license header is changed to reflect this.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-08 20:59:18 -05:00
Dan McGee
7fccfc7819 be_files.c: PATH_MAX cleanup
Most of these are not easy to remove, but I could kill the ones in the two
lastupdate functions.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-08 20:59:02 -05:00
Dan McGee
a13bf74979 pacman-side code cleanups
When taking a look at PATH_MAX usage, I found a few small things we can
clean up or fix.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-05-08 20:58:33 -05:00
Dan McGee
5389cdf654 Merge branch 'maint' 2008-04-29 19:52:06 -05:00
Chantry Xavier
6b31183576 Doxyfile : enable JAVADOC_AUTOBRIEF.
From http://www.stack.nl/~dimitri/doxygen/config.html#cfg_javadoc_autobrief

JAVADOC_AUTOBRIEF
    If the JAVADOC_AUTOBRIEF is set to YES then doxygen will interpret the
first line (until the first dot) of a JavaDoc-style comment as the brief
description. If set to NO (the default), the Javadoc-style will behave just
like regular Qt-style comments (thus requiring an explicit @brief command
for a brief description.)

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-29 15:51:48 -05:00
Sebastian Nowicki
8f902865d9 Add documentation for transaction events
It is hard to decipher what the transaction events actually notify you
of, and what parameters are passed to the callback function, without
looking at the code. This patch adds documentation for the _pmtransevt_t
enum in order to clarify what the event is for and what data is passed
when the callback is called.

Signed-off-by: Sebastian Nowicki <sebnow@gmail.com>
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-29 15:51:45 -05:00
Dan McGee
010279e449 Updates to _alpm_copyfile()
Rework to use a single #define for the buffsize, and in the process clean up
some other code and double the default buffer size.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-28 22:24:40 -05:00
Dan McGee
4e6361642e Rework extract_single_file() temp file creation
We were a bit juryrigged using one call to mkstemp() before rather than
extracting the new files side-by-side and doing our comparisons there. We
were also facing some permissions issues. Instead, make our life easier by
extracting all temp files to a '.paccheck' extension, doing our md5
comparisons, and then taking the correct actions.

Still to be done here- a cleanup of the use of PATH_MAX which should not be
necessary if we use dynamic allocation on the heap.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-28 22:24:40 -05:00
Dan McGee
1201c8ce3a Update pactest to allow setting modes on created files
This should allow some future tests to set modes and ensure they are set
after installation. It is also in anticipation of a test for checking
permissions on pacnew files.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-28 22:24:40 -05:00
Dan McGee
245efca759 Remove unnecessary archive_entry_set_pathname() calls
I'm not sure why these were ever here, as by this point we have already
extracted the file meaning a call to this function is basically a no-op.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-27 17:27:05 -05:00
Daenyth Blank
27943a04d6 makepkg: fix strip section to allow spaces in paths
Inside tidy_install, change the section which strips libraries to use find |
while read rather than for foo in `find`. This should allow whitespaces in
filenames to still be processed correctly.

This fixes FS#10294.

Signed-off-by: Daenyth Blank <Daenyth+git@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-27 14:18:43 -05:00
Dan McGee
6d79ba2db0 Fix some fallout from the delta/download changes
We removed one too many FREELIST() calls when trying to fix some memleaks,
and add a safety/sanity check to ensure filename is set, as packages in old
DBs are likely to not have this field.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-26 13:03:53 -05:00
Chantry Xavier
481c3edc89 get_filename : use the FILENAME db field only.
Reference : FS#9547.

The get_filename function first tries to get the filename field from the
database, and if it doesn't find it, it tries to guess it based on the name,
version and arch.

This field was introduced in 3.0, but there are still many old entries in
the official databases without it. So the databases need to be regenerated
first before this patch can be applied.
There is a second problem with the delta code, which needs the filename for
locally installed packages too, but this field is not present in the local
db. So the delta code needs to be fixed first.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-26 11:54:47 -05:00
Chantry Xavier
8fdf08ef78 libalpm/sync.c : memleak fixes.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-04-26 11:54:46 -05:00
Chantry Xavier
670fadf041 Get rid of the delta patches list
As Nathan noticed, the new informations in the delta struct allows us to
get rid of this list :
http://www.archlinux.org/pipermail/pacman-dev/2008-February/011163.html

So I rewrote apply_deltas for that. The previous apply_deltas also had a
limitation: it assumed that the initial package and the deltas were in the
first cache dir, which is not necessarily the case. That situation is
supported now.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-26 11:54:38 -05:00
Chantry Xavier
701a03dcdb Completely rework delta algorithm
Using the graph structures that Nagy set up for dependency sorting, we now
do a similar process for deltas. Load up all of the deltas into a graph
object on which we can then apply Dijkstra's algorithm, using the new weight
field of graph struct.
We initialize the nodes weight using the base files that we can use in our
filecache (both filename and md5sum must match). The algorithm then picks
the best path among those that can be resolved.

Note that this algorithm has a few advantages over the old one:
1. It is completely file agnostic. These delta chains do not have to consist
   of package files- this could be adopted to do delta-fied DBs.
2. It does not use the local_db anymore, or even care if a package or file
   is currently installed. Instead, it only looks in the filecache for files
   and packages that match delta chain entries.

Original-work-by: Dan McGee <dan@archlinux.org>
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-04-26 11:36:01 -05:00
Dan McGee
30bdf94c2b Rework delta struct and modify code accordingly
Start to move the delta struct away from an assumed package name scheme and
towards something that is package (or even filename) agnostic. This will
allow us much greater flexibility in the usage of deltas (maybe even sync
DBs some day) as well as allowing code outside of delta.h/delta.c to be much
cleaner with less of a need for snprintf() calls.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-26 11:30:12 -05:00
Chantry Xavier
ff9744aa1f Refactor the trans init and release code.
The calls to alpm_trans_init and alpm_trans_release (+ error checking) were
duplicated between remove.c, sync.c and upgrade.c
This patch introduces trans_init and trans_release functions in util.c to
have this code just once.

So instead of having to do the same change 3 times for fixing FS#10273, I
just had to do it once (so I did it too :))

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-26 11:15:09 -05:00
Nagy Gabor
1b5a851851 Kill compute_requiredby usage in can_remove_package()
In the can_remove_package function, we don't need to compute the whole
requiredby list, we just need to find one member of it that doesn't belong
to the targets list.
That way we get a small speedup and remove the only usage of
alpm_pkg_compute_requiredby in the backend, so that it can be tweaked for
frontend usage.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-25 18:51:47 -05:00
Dan McGee
423820b34c Merge branch 'maint'
Conflicts:

	pactest/pmtest.py
2008-04-19 16:18:40 -05:00
Dan McGee
7a873a8f12 Give libalpm native support for both libdownload and libfetch
This should remove the need for any additional patching to run on platforms
that have libfetch available but not libdownload. It isn't the prettiest,
but we have kept our libdownload impact down to just a few files, so it can
be easily done.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-19 16:18:17 -05:00
Dan McGee
64e1dd64a4 Remove unnecessary NULL check in FREE() macro
free() is designed to do nothing if it is passed a NULL pointer, so there is
no need to check for it on our end. Change/fix the macro.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-19 15:59:40 -05:00
Chantry Xavier
c465d9e848 pactest : Use tarfile module.
Previously, tar was called manually with os.system. This caused one fork per
package/db creation, which is costly, especially on cygwin. Besides, it also
caused some problems with directory with whitespaces (that could also be
fixed with quotes, but well..)
Using tarfile module is cleaner and more efficient, and still easy enough.

Benchmark (time make check) :
- windows / cygwin
prepatch:
real    6m36.360s
user    2m28.914s
sys     2m35.866s
postpatch:
real    5m25.428s
user    1m26.029s
sys     2m0.006s

- linux
prepatch:
real    1m22.629s
user    0m31.498s
sys     0m18.899s
postpatch:
real    1m11.465s
user    0m26.382s
sys     0m12.986s

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-04-17 14:29:08 -05:00
Chantry Xavier
5e375aa9d3 pactest: Add quotes for directory with whitespaces
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-17 14:28:08 -05:00
Dan McGee
bf84c23266 Merge branch 'maint' 2008-04-15 19:07:51 -05:00
Dan McGee
0d8affeac0 Slight changes to fix warnings from autoconf 2.62
Two variables needed the _cv_ or warnings were spit out saying they were not
cache vars.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-15 19:07:13 -05:00
Dan McGee
c7a81c0b54 More non-Linux build updates, mostly Darwin
Darwin's binary format does support symbols with differing visibilities, but
it does not support the protected or internal visibilities- only hidden. For
Darwin only, we should fall back to this visibility to prevent warnings from
the compiler and because it is close enough for our library purposes.

See http://gcc.gnu.org/viewcvs/*checkout*/trunk/gcc/config/darwin.c, search
for the "darwin_assemble_visibility" function for more details.

Also add pacman.static.exe to gitignore.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-15 15:57:36 -05:00
Dan McGee
d685d0220f Fix gettext on non-Linux platforms
Linux includes all the gettext stuff in glibc, so there is no need for the
libintl links which we failed to include in our linker variables. Update the
makefiles which should enable NLS support on all platforms, including OS X
and Cygwin.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-14 21:01:30 -05:00
Dan McGee
ba70c52945 Fix compilation errors on x86_64
Things must have gotten stricter with GCC 4.3 on the '%zd' printf string and
this is the first I've tried to compile there. Fix the problem by using
size_t instead of int.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-14 18:24:45 -05:00
K. Piche
2d991a25ae remove.c: refactor into functions
Pulled two loops out of _alpm_remove_prepare and gave them their own
functions.

Signed-off-by: K. Piche <kevin@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-14 17:36:33 -05:00
K. Piche
db4258c1fd Some comments for _alpm_unpack.
Signed-off-by: K. Piche <kevin@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-14 17:19:32 -05:00
K. Piche
9f56137034 add.c: added some tracing and improved some variable locality
Signed-off-by: K. Piche <kevin@archlinux.org>
[Dan: removed one logger]
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-14 17:17:22 -05:00
Dan McGee
ee2bbb39b5 Memory allocation and other small cleanups
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-10 20:54:48 -05:00
Dan McGee
4bd0a85095 Merge branch 'maint' 2008-04-10 20:54:34 -05:00
Dan McGee
e9a0d35d08 Remove unnecessary import in dload.h
We no longer expose any of libdownload in our public functions, so no need
to include this header anymore.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-10 20:53:28 -05:00
Dan McGee
4b7f7e2a59 Correctly use the fd returned my mkstemp()
There were a few issues with this code:
1. We already had an open fd to a file, but never used it to our benefit.
   Use the libarchive convienence method to write the current file contents
   straight to a file descriptor.
2. The real problem cropped up on Windows where the locking semantics caused
   the old way of extraction to fail because we had an open file descriptor.
   By using the file descriptor and closing it ASAP, we prevent these
   failures.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-08 18:55:22 -05:00
Dan McGee
57acfced0d Update configure.ac to current code
Remove a few functions and things that were unnecessary, update the help
line calls to the current function name, and make the small change to
pacman.c for the signal handler return type that is defined in config.h.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-07 19:27:35 -05:00
Dan McGee
83c4b2aebb Merge branch 'maint' 2008-04-07 19:19:34 -05:00
Dan McGee
bec2ba5b40 Add check for swprintf() and a workaround when it is missing
We use this function once in our codebase, but fortunately the workaround is
relatively easy. swprintf() is not available on Cygwin so the compile failed
there, but we can do a series of mbstowcs() calls that produce the same end
result as the swprintf() call.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-07 19:09:46 -05:00
Dan McGee
9441fba124 Add *.exe ignores for certain other platforms
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-07 19:09:20 -05:00
Dan McGee
a708c6eadc Allow disabling of internal (libdownload) code
Add a new --disable-internal-download flag to configure allowing the
internal download code to be skipped. This will be helpful on platforms that
currently don't support either libdownload or libfetch (such as Cygwin) and
for just compiling a lighter weight pacman binary.

This was made really easy by our recent refactoring of the download code
into separate internal and external functions, as well as some error code
cleanup.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-06 21:00:11 -05:00
Dan McGee
9c7ebe6872 Remove a bit more download.h pollution
Kill it where it isn't absolutely necessary.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-06 20:28:43 -05:00
Dan McGee
4c872594da Remove unnecessary header file, move one macro to util.c
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-06 20:20:20 -05:00
Dan McGee
e4a4cf7ce5 libalpm error cleanup, step 1
Remove unused error codes, begin refactoring some of the others.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-06 20:16:57 -05:00
Dan McGee
4004bf9caf Remove libdownload reference from pacman frontend
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-06 20:02:39 -05:00
Dan McGee
404e0a0e10 Add quiet printout to --owns functionality
If we specify -q/--quiet on an --owns operation, only print a matching
package name rather than the verbose human-readable message.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-06 19:49:41 -05:00
Allan McRae
b3f4bd9750 Quote filenames in find expression in pacdiff
From 41cc28f560bf9843d81ce5fb62b884b6325d06a0 Mon Sep 17 00:00:00 2001
From: Allan McRae <mcrae_allan@hotmail.com>
Date: Sun, 6 Apr 2008 22:18:06 +1000
Subject: [PATCH] Quote filenames in find expression in pacdiff

Small patch to allow pacdiff to run in /etc.  See FS#10090.

Signed-off-by: Allan McRae <mcrae_allan@hotmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-06 10:44:44 -05:00
Dan McGee
073bac794d Merge branch 'maint'
Conflicts:

	configure.ac
	contrib/Makefile.am
2008-04-01 22:14:58 -05:00
Dan McGee
0b8abf376f Update NEWS and configure.ac for 3.1.4 release
Also fix a broken contrib/ Makefile, found with make distcheck. I also let
the little translation linebreak update slip in here as it was small enough
not to be a big deal, and this should just prevent it from happening again
later anyway.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-01 22:04:56 -05:00
Dan McGee
ab9187d07d Set handle->logstream to null after fclose()
We correctly closed the logfile stream when recalling set_logfile, but did
not NULL out the dead pointer once we did this. Fix the problem which was
the cause of FS#10056.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-04-01 18:08:58 -05:00
Dan McGee
0bd6fb3bc2 Update -Ss and -Qs pactests to include groups
This update causes query003 to fail before commit
4b8ada818e. Hopefully the issue doesn't crop
up again but we might as well test for it.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-30 16:47:27 -05:00
Dan McGee
5f17ac8150 Enable display of multiple groups in -Ss and -Qs output
Not too complicated of a fix, but just adds some code to loop over the
entire group list and space it out.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-30 16:41:13 -05:00
Dan McGee
4b8ada818e Fix segfault on -Qs usage
This segfault creeped in as a result of commit bf867003. We were incorrectly
assuming the group member of our package was a pmgrp_t list when in fact it
is just a string list, which caused a segfault on any -Qs operation.

Also slightly cleanup the -Ss code (which was originally correct unlike the
-Qs code).

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-30 16:36:55 -05:00
Dan McGee
0d1263af26 Merge branch 'maint' 2008-03-30 13:42:24 -05:00
Dan McGee
41c1295559 doc/pacman.8: fix manpage typo
Fix a misspelling and make a clarification while we are at it.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-30 13:41:19 -05:00
Dan McGee
d9b9e60d7d Fix manpage typo
Noticed in FS#10025.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-30 11:00:53 -05:00
Chantry Xavier
3fe43ffa04 Duplicate the result of archive_entry_pathname.
After the libarchive upgrade from 2.4.12 to 2.4.14, our usage of
archive_entry_pathname became dangerous. We were using the result of that
function even after calls to archive_entry_set_pathname.
With 2.4.14, the entryname becomes wrong after these calls, and so all the
future use of entryname are bogus. entryname is used quite a lot for
logging, so that's not so bad. But it's also used for the backup handling,
so that's not very cool. For example, reinstalling a package with backup
entries will erase all the md5 entries from the DB, because they won't be
found back.

entryname is now a static string so that we can easily keep the result of
archive_entry_pathname.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
[Dan: fixed version numbers in commit message]
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-28 18:32:04 -05:00
Nagy Gabor
562442633a Use pkgcache instead of db_scan in remove.c
This should be a notable speed-up (apart from kernel cache).

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-28 17:53:04 -05:00
Dan McGee
d140b440a8 Read .PKGINFO directly from package file
With the addition of the archive_fgets() function, we can now skip the temp
file usage in pkg_load/parse_descfile that was not needed. This has a nice
benefit of probably being both faster, reducing code, and getting rid of
"expensive" file operations.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-27 12:07:32 -05:00
Dan McGee
f8c737d3b6 Add an archive_fgets() function
This crude function allows reading from an archive on a line-by-line basis
similar to the familiar fgets() call on a FILE stream. This is the first
step in being able to read DB entries straight from an archive.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-27 12:07:26 -05:00
Dan McGee
1dfd841e40 Make db->treename a pointer
I really don't think we need statically allocated strings here.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-26 20:19:44 -05:00
Dan McGee
5f1ccdbc27 Merge branch 'maint' 2008-03-23 16:58:53 -05:00
Nagy Gabor
d1ea16dfd0 Avoid duplicated target names.
This patch should avoid duplicated target names in the backend.
1. sync_loadtarget will return with PM_ERR_TRANS_DUP_TARGET when trying to
add a duplicated target
2. sysupgrade never pulls duplicated targets
3. resolvedeps won't pull duplicated targets anymore

A pulled list was introduced in sync_prepare to improve the
pmsyncpkg_t<->pmpkg_t list conversion by making it more direct.

Also replace sync1005 and sync1006 by the sync1008 pactest, which is
similar but more interesting (the provisions are dependencies instead of
explicit targets).
sync1005 didn't work as expected anyway. It was expecting that pacman
failed, and pacman indeed failed, but not for the good reason. It didn't
fail during the preparation step because of conflicting targets, but during
the commit step, because of a md5 error...
And sync1006 didn't pass and was not really worth fixing. We have already
enough failing pactests more important than these two.
sync1008 pass with this patch.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-03-23 16:57:14 -05:00
Dan McGee
6104f2e1fb memleak fix: ensure we free result of get_destfile()
In the file:// download case, we didn't free the return from get_destfile()
after we were done with it. Fix it. (Found with xfercommand001.py)

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-23 16:57:14 -05:00
Dan McGee
1086950c82 memleak fix: ensure backup fname isn't lost if unused
The _alpm_backup_split function always alloced memory for the fname, and we
let it disappear in a specific case (upgrade026.py). Fix the issue.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-23 16:55:52 -05:00
Dan McGee
7995a25d0e strsplit(): memleak fix
We dup-ed the string but then duped it again. Fix it.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-23 16:55:03 -05:00
Dan McGee
bf86700369 Switch pmgrp_t to dynamic allocation, general group cleanup
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-23 14:51:51 -05:00
Dan McGee
90a48c771d Add -q (quiet) option to valgrind call in pactest
This gets rid of a lot of the unnecessary verbosity in the --valgrind output
when running all the tests. It should also make diff-ing output between test
runs a lot easier.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-23 14:25:38 -05:00
Dan McGee
f7f43dbb48 Update database mtime after it has been extracted
This will reduce the need for running an -Syy if the DB was only
half-extracted, as the mtime won't get updated until the new database is
completely in place.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-23 14:08:31 -05:00
Chantry Xavier
3d10d460df Add new CleanMethod option.
As it was already mentioned several times, the new -Sc behavior in 3.1 is
great, but only when the package cache is not shared.

This option has two possible values : KeepInstalled and KeepCurrent
With KeepCurrent, -Sc will clean packages that are no longer available in
any sync db, rather than packages that are no longer in the local db. The
resulting behavior should be better for shared cache.

Ref :
http://www.archlinux.org/pipermail/pacman-dev/2008-February/011140.html

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-23 13:38:23 -05:00
Chantry Xavier
5af076f09f Kill the dependsonly option.
From the man page :
"This is pretty useless and we're not sure why it even exists."

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-03-22 18:39:15 +01:00
Dan McGee
2f8fb80ee6 Merge branch 'maint' 2008-03-22 11:11:22 -05:00
Chantry Xavier
7d451b6e6b PKGBUILD.vim: add keepend keyword for sha1/md5 fields
in PKGBUILD.proto, we have the following line
md5sums=() #generate with 'makepkg -g'

if we add a md5sum inside quotes, or even just the quotes :
md5sums=('') #generate with 'makepkg -g'
the highlighting will be totally messed up.

Adding the keepend keyword fixes this.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-22 11:08:23 -05:00
甘露(Lu.Gan)
d07001f3ab Updates to Simplified Chinese translation
A little fine tuning, delete some unnecessary space before or after
English word.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-22 11:07:14 -05:00
Chantry Xavier
e7a2232934 Kill PM_TRANS_TYPE_ADD.
This was totally useless.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-17 21:01:22 -05:00
Chantry Xavier
73ab153c44 Kill some obsolete references to -A option.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-03-17 21:00:09 -05:00
Chantry Xavier
b3e6cf652c Drop case insensitive comparisons in the config parsing.
These case insensitive comparisons didn't work in some locales, like tr_TR
where upper(i) != I. So a second case sensitive comparison had to be made
for each directive.
Only keeping case sensitive comparisons make the code cleaner and treat all
locales equally.

Ref: http://www.archlinux.org/pipermail/pacman-dev/2008-March/011445.html

Also fix pactests to use the correct case.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-17 20:58:28 -05:00
Chantry Xavier
dae3f9deef Add zipman makepkg option.
All other steps in tidy_install function were already controlled by an
option in makepkg.conf, so this patch adds an option for the man page
compression step too.
This will allow to keep man pages uncompressed, which is required for some
special meta man page, like the zshall one (see FS#4580).

Ref: http://www.archlinux.org/pipermail/pacman-dev/2008-March/011472.html

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-03-16 23:22:17 +01:00
Nagy Gabor
1f30845e41 Show options in pacman.conf (commented out)
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
2008-03-10 19:39:48 -05:00
Nagy Gabor
35135c0a0c Add -Rss option
* -Rss removes all dependencies (including explicitly installed ones).
* updated documentation
* two pactest files added to test the difference between -Rs and -Rss

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
2008-03-10 19:16:01 -05:00
甘露(Lu.Gan)
6e4b020654 po/zh_CN.po: Chinese Simplified translation update
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-10 19:13:13 -05:00
Chantry Xavier
6820be9ba1 PKGBUILD.vim: improve invalid arch/license detection.
If we had :
arch=(fake)
The fake string would be highlighted because it's invalid.
But if we had :
arch=('fake')
it didn't work.

Fix this for both arch and license arrays.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-03-10 19:12:20 -05:00
Chantry Xavier
804ab37ea6 Clarify the NoUpgrade and NoExtract behavior.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-03-10 19:11:38 -05:00
Nagy Gabor
d060e31be3 Remove trans->targets
Its implementation was quite broken:
* add_loadtarget() might have silently filtered out some targets when
  replacing an older version.
* This was used in sync.c to determine whether a target is implicit or not,
  which is incorrect behavior. Before this patch we silently removed user
  confirmed replacements; now we always warn on a replacement.
* remove001.py behavior was quite odd in adding same target 5 times to the
  target list, we can change this behavior to be a failure.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
[Xav: changed remove001 pactest accordingly]
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
[Dan: rewrote commit message]
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-10 18:57:36 -05:00
Roman Kyrylych
f56f7ff391 makepkg: Support for resuming source downloads
Download to *.part and remove the suffix if successful, thus md5sums will be
checked only for complete files, and next time makepkg will resume
downloading of partial file instead of complaining about invalid md5sums.

Old DLAGENTS format is still supported.

Late fix: Do not try to download %u first

The output of grep was not suppressed, thus the output of get_downloadcmd
was wrong because of extra line at the beginning that contained an
unsubstituted (with %o and %u) entry from DLAGENTS.

Signed-off-by: Roman Kyrylych <roman@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-10 18:45:58 -05:00
Dan McGee
91b7f288fe Merge branch 'maint'
Conflicts:

	configure.ac
2008-03-09 12:03:54 -05:00
Chantry Xavier
fc48dc3118 Refactoring of the download code.
This should be the main step in the download refactoring initiated by commit
81a2a06818.
The stub functions introduced by that commit were implemented.

The big download code was mostly composed of two steps, and so it has been
naturally splitted in two functions :  download_external and download_internal

file:/// urls are now handled manually, instead of forcing the use of the
internal downloader.

Thanks to Dan for fixing the remaining issues and cleaning up the patch :)

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-03-09 12:03:22 -05:00
Chantry Xavier
51e0303e84 Use sigaction instead of signal.
From signal man page :
"The behavior of signal() varies across Unix versions, and has also varied
historically across different versions of Linux. Avoid its use: use
sigaction(2) instead. See Portability below."

The code was taken from there :
http://www.gnu.org/software/libtool/manual/libc/Sigaction-Function-Example.html

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-09 11:35:01 -05:00
Chantry Xavier
2f9f48eddd src/pacman/pacman.c : split cleanup function.
This function was used in two different ways :
- as a signal handler : the argument was the signal number
- called manually for freeing the resources : the argument was the return
  value
So the first part is now handler(int), and the second cleanup(int).
Ref: http://www.archlinux.org/pipermail/pacman-dev/2008-March/011388.html

Remaining problems :
- the return values are messy. for example, 2 can mean both that it was
  interrupted (SIGINT == 2), or that --help or -V was used (returned by
  parseargs).
- apparently signal is not portable and sigaction should be used instead

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-03-09 11:30:59 -05:00
Nagy Gabor
1dfcf1495b Remove a bogus comment from libalpm/remove.c
We do the opposite.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
2008-03-09 11:30:01 -05:00
Chantry Xavier
724ed34ac5 rename vimproject to vimprojects and update it.
There is no need to put the list of files in there, which will get outdated
sooner or later. It's possible to generate the filelist in the plugin itself
using \r.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
[Dan: add scripts/ directory]
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-08 21:00:56 -06:00
Dan McGee
74c5bd70cf Remove useless TESTS file
This hasn't been updated in forever, and a simple python program could
regenerate it anyway. Or even grep.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-08 14:37:19 -06:00
Dan McGee
797c190f93 Remove frontend add code that is no longer necessary
Change the pacman_upgrade stub function to do what pacman_add used to do so
we can eliminate pacman_add. Move the code to the more-descriptive name of
upgrade.c.

Note that we have made no changes to the backend libalpm, where an ADD type
transaction could still be supported.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-08 14:13:34 -06:00
Dan McGee
3ec45486ff Remove the Add option from the command line
There is still a lot of code that could be cleaned up internally.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-08 14:13:34 -06:00
Dan McGee
266f06866b Move -A pactests that are relevant to -U, clean the rest out
This is in anticipation of removing the -A/--add option from the pacman
frontend. I've went through each of the pacman pactests that used the -A
operation and decided whether they were worth keeping, whether there was
already an upgrade test doing the same thing, or whether it should be moved
over.

The GIT rename log should make several of the moves obvious, but for those
that were deleted:
add001: handled by upgrade004
add002: worthless
add004: worthless
add010: handled by upgrade011
add050: handled by upgrade010

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-08 14:13:22 -06:00
Sergey Tereschenko
69eb0c8014 Updates to Russian translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-08 10:40:04 -06:00
Dan McGee
5a48771126 Updates before 3.1.3 release
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-06 20:47:00 -06:00
Nagy Gabor
54af52f87d New alpm_version function
Now pacman frontend uses this function instead of the compile-time libalpm
version number.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
[Dan: fix one more spot where LIB_VERSION was used]
Signed-off-by: Dan McGee <dan@archlinux.org>
(cherry picked from commit 49197b7492)
2008-03-06 19:05:14 -06:00
Vojtěch Gondžala
7c3f6feb41 Update Czech translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-04 23:05:43 -06:00
Chantry Xavier
6ad4ba272d Update TRANSLATORS file.
* Vojtěch has a new email address
* New pt_BR translator needed :
http://www.archlinux.org/pipermail/pacman-dev/2008-March/011313.html

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-03-04 23:02:27 -06:00
Nagy Gabor
4a0498bd29 Remove a bogus comment
This comment was created for the old provision version format and needless.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-04 06:40:32 -06:00
Dan McGee
190d17c0e8 Kill all of the line numbers from the translations
Hopefully the last of the huge commits ever. This also adds the c-format tag
to all of the translated messages.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-03 20:14:37 -06:00
Chantry Xavier
8725dce294 Disable the line number in .po files.
Add the --no-location xgettext option to disable the line numbers. They are
not very useful, and generate a huge number of pointless line changes on
every update.

Ref: http://www.archlinux.org/pipermail/pacman-dev/2008-March/011332.html

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-03-03 19:59:36 -06:00
Chantry Xavier
1bbc00cd9d Update manually the only newline change for 3.1.3.
We only had one string change, and just a newline, so we can actually make
this update in its own commit rather than updating pacman.pot and making a
huge number of line changes, and then letting every translator do this
newline fix separately.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-03 19:59:35 -06:00
Dan McGee
8a24ad3754 Convert Hungarian translation translation to UTF-8
The issue was discussed in this thread on the mailing list:
http://archlinux.org/pipermail/pacman-dev/2008-March/011324.html

In addition, the GNU gettext manual states that translation encoding is
completely separate from the encoding used by the users of the translation.
It makes sense for our project to use UTF-8 for all translations, regardless
of the preferred encoding used by users of a certain language. This allows
all contributors to more easily edit a translation file if necessary and not
have to worry about codepage issues.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-03 19:59:25 -06:00
Matthias Gorissen
816b080579 Small update to German translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-03 19:41:18 -06:00
Chantry Xavier
4c465ef0ad contrib/PKGBUILD.vim: add optdepends + other fixes
* Add optdepends keyword

* license, backup and arch keywords should be arrays

* Remove the little hack to color conflicts/provides/replaces keyword even
  without =(). These should be arrays too.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-03-02 11:40:07 +01:00
Nagy Gabor
49197b7492 New alpm_version function
Now pacman frontend uses this function instead of the compile-time libalpm
version number.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
[Dan: fix one more spot where LIB_VERSION was used]
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-01 17:02:05 -06:00
Dan McGee
11bdab171e NEWS updates for 3.1.3
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-01 16:41:31 -06:00
Nagy Gabor
17eca54b32 testpkg rework
* mainly code cosmetics (indent fixes)
* remove debug message "spam"
* print also user friendly result

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
[Dan: a few more whitespace/linebreak cleanups added]
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-01 16:32:06 -06:00
Dan McGee
73ac9f7b27 Merge branch 'maint' 2008-03-01 16:24:42 -06:00
Nagy Gabor
aecc2fd190 Set a missing pm_errno in _alpm_pkg_load()
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-03-01 15:57:59 -06:00
Dan McGee
7613f2e21a contrib: add 'groups' keyword to PKGBUILD.vim
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-28 22:10:28 -06:00
Chantry Xavier
d734ebdde2 libalpm: clean up of md5sum functions.
test_delta_md5sum and test_pkg_md5sum were simple wrappers to test_md5sum,
and only used once, so not very useful. I removed them.
Also, test_md5sum and alpm_pkg_checkmd5sum functions were a bit duplicated,
so I refactored them with a new _alpm_test_md5sum function in libalpm/util.c

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-27 19:02:17 -06:00
Dan McGee
c2dbbd60bc Start removing some junk from the function template
I screwed up originally when I accepted the TotalDownload patch,
8ec27835f4. I didn't realize how deeply it
modified libalpm and I probably shouldn't have let it do what it did. This
commit reverts much of what that patch added in order to clean up our
internal function calls. We can find another way to do it right down the
road here but for now it has to go.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-27 18:58:24 -06:00
Chantry Xavier
4fe7eb66eb libalpm/dload.c : memleak fixes.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-27 18:55:26 -06:00
Chantry Xavier
79945ef7ff clean up dltotal leftover from 81a2a06818.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-27 18:53:18 -06:00
Dan McGee
d49f42ba75 Remove small remnant of old force=y option
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-27 13:14:05 -06:00
Dan McGee
d75f693155 Merge branch 'maint'
Also bump the devel version on the master branch to 3.2.0devel.
2008-02-25 20:49:59 -06:00
Dan McGee
8efe0ecb25 Bump pacman version to a devel release and next version number
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-25 20:35:25 -06:00
甘露(Lu.Gan)
7a9d444de8 Update simplified chinese (zh_CN) translation.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-25 20:31:23 -06:00
Chantry Xavier
66591e8284 fix two broken translated strings.
Using c-format on every strings allowed me two found two broken ones.
One was harmless, but the other caused a segfault, as reported in FS#9658.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-25 20:26:04 -06:00
Chantry Xavier
7eaad2f2a9 xgettext : change pass-c-format flag to c-format.
Currently xgettext apparently attempts to autodetect c format strings (eg a
string with a %s) to decide whether to use c-format flag or not.

If we use --flag=_:1:c-format instead of --flag=_:1:pass-c-format, the
c-format will be applied everywhere.
I couldn't find this documented anywhere though. But the pass prefix is
mentioned here :
http://www.gnu.org/software/gettext/manual/html_node/xgettext-Invocation.html#xgettext-Invocation
"Specifies additional flags for strings occurring as part of the argth
argument of the function word. The possible flags are the possible format
string indicators, such as ‘c-format’, and their negations, such as
‘no-c-format’, possibly prefixed with ‘pass-’."

And c-format is documented there :
http://www.gnu.org/software/gettext/manual/html_node/c_002dformat-Flag.html#c_002dformat-Flag
"This situation happens quite often. The printf function is often called
with strings which do not contain a format specifier. Of course one would
normally use fputs but it does happen. In this case xgettext does not
recognize this as a format string but what happens if the translation
introduces a valid format specifier? The printf function will try to access
one of the parameters but none exists because the original code does not
pass any parameters."

And that's exactly what happened with FS#9658.
So using c-format for every string will prevent this issue from happening
again.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-25 20:25:57 -06:00
Chantry Xavier
c23ecc6160 Remove done and failed msg when loading targets.
This change is similar to the one made in
3017b71cb5.

We had a "loading package data..." message, followed by either "failed" or
"done", but it didn't take into account that other warnings / questions
could be displayed between.

Ref: http://archlinux.org/pipermail/pacman-dev/2008-January/010971.html

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-25 12:10:34 +01:00
Dan McGee
f159203f6f Remove pmserver_t abstraction
Remove what was a pretty weird abstraction in the libalpm backend. Instead
of parsing server URLs as we get them (of which we don't usually use more
than a handful anyway), wait until they are actually used, which allows us
to store them as a simple string list instead. This allows us to remove a
lot of code, and will greatly simplify the continuing refactoring of the
download code.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-24 20:21:58 -06:00
Dan McGee
81a2a06818 Add new stub download functions for use throughout the code
Add new stub functions that work by calling the existing (terrible) download
forreal function, which needs a serious overhaul. Hide the existing
functions and switch all former users to the new functions.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-24 20:21:58 -06:00
Dan McGee
3e8ae774bd Move download code out of server.c
This is the first in what will be a series of patches to clean up the
current download code in libalpm. Start by moving download code out of
server.c and into download.c.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-24 20:21:58 -06:00
Chantry Xavier
143135e666 Improve yesno function.
Add a preset paramater to yesno function saying which answer should be the
default. Ref:
http://www.archlinux.org/pipermail/pacman-dev/2007-June/008470.html

This allows us to answer no by default to some questions, like the -Scc one
mentioned in the above thread, and implemented by this patch.

Another advantage is that we don't have to repeat the [Y/n] in every
questions. It's only put once in yesno function. This highly reduces the
chances that YES and NO strings are translated, but not some questions,
which lead to obvious confusions.

Finally, the noconfirm variable only needs to be used in that yesno
function. So all other usages of it were removed.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-24 18:17:49 -06:00
Dan McGee
ca1a187131 More cleanup to alpm_list
* Remove some #include statements that are not strictly necessary
* Remove node_new function that is really just a one-liner

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-24 18:07:44 -06:00
Nagy Gabor
8cfccf68c1 alpm_list.c clean-up
* Introduces 'list == NULL' convention for empty list. That means
alpm_list_new isn't needed anymore, so kill it

* Small straightforward fixes in alpm_list.c

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-25 00:52:58 +01:00
Chantry Xavier
d5857ee15b libalpm/sync.c : fix poorly worded debug message.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-25 00:30:21 +01:00
Chantry Xavier
271ecb8bfc Update TRANSLATORS file.
The header of that file already stated that only current translators were
listed in that file. So there is no need to mark the current translators
with a star, I just removed the old ones instead (all history of that file
is kept in git anyway).

Current translators = all translators who contributed to 3.1.x translations.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-25 00:24:01 +01:00
Dan McGee
3ad3077d8d Merge branch 'maint'
Conflicts:

	src/pacman/callback.c
2008-02-24 01:22:07 -06:00
Dan McGee
96f7613d15 Add some NULL checks into recently modified output functions
After a merge with master where some strings we print (such as descriptions)
could be NULL, a few segfaults popped up due to strlen() calls on null
pointers. Fix this by doing some preemptive checks and returning from
functions early if the string was null.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-24 01:17:17 -06:00
Dan McGee
3a6f62d4c7 Remove all unnecessary snprintf usage
Both alpm_logaction() and yesno() are vararg functions, so we might as well
use this functionality and take advantage of it. Remove all of the
snprintf() calls and the LOG_STR_LEN constant that never seemed quite right.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-24 00:54:11 -06:00
Sergey Tereschenko
105e01c8ef Update Russian translation
Some corrections from the previous translation.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-24 00:44:35 -06:00
Dan McGee
4c14dcc580 A few more wide character output fixes
Fix up the indentprint and list printing functions so they work properly.
This output can be seen in places such as -Ss, -Si, -Qs, and -Qi.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-22 23:47:03 -06:00
Dan McGee
a6470956bc Fix wide character output for add/remove/upgrade/conflict progress
Due to the addition of the Chinese translation, our column widths were all
messed up as mentioned in the download progress commit fixing this same
problem there. This is a port of the code and ideas from that fix to the
installation progress bars. Once again, a handful of examples were tested to
ensure we work in all locales and with varying byte and char widths.

English (before & after):
(1/1) checking for file conflicts                   [-----------------] 100%
(1/1) upgrading man-pages                           [-----------------] 100%

German (before & after):
(1/1) Prüfe auf Dateikonflikte                      [-----------------] 100%
(1/1) Aktualisiere man-pages                        [-----------------] 100%

Chinese (before):
(1/1) 正在检查文件冲突                                      [-----------------] 100%
(1/1) 生在升级 man-pages                                [c  o  o  o  o  o ] (1/1) 生在升级 man-pages                                [----------C o  o ] (1/1) 生在升级 man-pages                                [-----------------] 100%

Chinese (after):
(1/1) 正在检查文件冲突                              [-----------------] 100%
(1/1) 生在升级 man-pages                            [-----------------] 100%

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-22 22:00:15 -06:00
Dan McGee
29f55fb7c9 Fix wide character output for download progress
Now that we have a Chinese translation, all of the problems with new
character sets crop up. Assumptions were made in the past that all
characters occupied one column, which is not true with a Chinese character
set. In addition, the download code even failed on such things as 'ö', which
is two bytes wide but only 1 column.

This code will need to also be ported to the add/remove/upgrade/conflicts
progress printouts.

Note that the tests below try to incorporate a number of things:
1. download filenames too long to fit
2. download filenames cut off in the middle of a multibyte sequence
3. download filenames incorporating multicolumn chars
4. download filenames incorporating multibyte, single-column chars
5. 'plain' download filenames that have always worked

Before:
:: 正在同步软件包数据库……
 正在解决倚赖��...    0.0K  199.8K/s 00:00:00 [-----------------] 100%
错误:无法升级正在解决倚赖关系junköëjunköëjunköëäää (未预计的系统错误)
 正在解决倚赖��...    0.0K  308.4K/s 00:00:00 [-----------------] 100%
错误:无法升级正在解决倚赖关系 (未预计的系统错误)
 junköëä                 0.0K  390.6K/s 00:00:00 [-----------------] 100%
错误:无法升级junköëä (未预计的系统错误)
 pacman-git                 0.5K    4.3M/s 00:00:00 [-----------------] 100%
本地数据库已是最新的

After:
:: 正在同步软件包数据库……
 正在解决倚赖关系jun...     0.0K   89.7K/s 00:00:00 [-----------------] 100%
错误:无法升级正在解决倚赖关系junköëjunköëjunköëäää (未预计的系统错误)
 正在解决倚赖关系           0.0K  147.7K/s 00:00:00 [-----------------] 100%
错误:无法升级正在解决倚赖关系 (未预计的系统错误)
 junköëä                    0.0K  156.9K/s 00:00:00 [-----------------] 100%
错误:无法升级junköëä (未预计的系统错误)
 pacman-git                 0.5K 1515.9K/s 00:00:00 [-----------------] 100%
本地数据库已是最新的

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-22 21:59:11 -06:00
甘露(Lu.Gan)
731a774319 Add new Simplified Chinese translation
Thanks a lot! Now we get to fix the breakage this causes in output messages.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-22 08:24:08 -06:00
Dan McGee
8ded60326a Updates before 3.1.2 release
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-20 19:02:51 -06:00
Chantry Xavier
a3e6a6b822 Move -Sy operation into its own transaction
This allows us to remove the sync_only flag, and also do the following
steps in the future :
1) refresh the database (if asked)
2) do other stuff (eg checking if a newer pacman version is available)
3) start the actual transaction

Currently when we detect a newer pacman version, we have to release the
current transaction and start a new one.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-20 18:58:43 -06:00
Dan McGee
4bd52f3fe4 Merge branch 'maint'
Remove gettext() function addition from gensync and updatesync in master as
gettext is no longer used in them anyway.
2008-02-20 18:58:04 -06:00
Mark Constable
420c8846b9 Fix two missing BUILDSCRIPT variables in makepkg.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-20 18:50:56 -06:00
Chantry Xavier
7879e4bef7 Lock the database on -Sc operation.
This partly fixes FS#9609.

Weird things could happen when running -Sc while another instance was
already running. The cleancache function could delete packages that were
just being downloaded.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-19 22:08:06 -06:00
Chantry Xavier
6f3949e3da Add new sync_trans_init and sync_trans_release.
Factorize these two functions to avoid code duplication, especially since
they could be used for locking the database during -Sc and -Sy operation
too.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-19 22:07:44 -06:00
Fernando Lagos
2b3a85dc4a More small updates to Spanish translation
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
2008-02-19 22:05:37 -06:00
Dan McGee
fc9d12bef0 When cleaning DBs, only look at directories
FS#9609 brought up an interesting issue where a user was prompted to remove
db.lck when running a -Sc operation concurrently with an -Syu operation
during a long download. Although there are other problems here, this fixes
the issue where files other than directories could be considered to be
databases. Fix this.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-19 08:47:05 -06:00
Mateusz Herych
5676dbae4d Final updates to Polish translation
Good job on the group effort guys, thanks for getting this one complete.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-19 08:41:05 -06:00
Vitaly Dolgov
81db1847c9 Update pacman Russian translation.
Cleaned up by Oleg Finkelshteyn.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-18 13:15:35 -06:00
Sergey Tereschenko
848edb2f38 Update libalpm russian translation.
Cleaned up by Oleg Finkelshteyn.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-18 12:53:30 -06:00
Allan McRae
b091ccc400 Do not warn about up to date package when downloading only
Stops the "<pkg> is up to date -- reinstalling" message when using the
download only flag.
Ref: http://archlinux.org/pipermail/pacman-dev/2008-January/010952.html

Signed-off-by: Allan McRae <mcrae_allan@hotmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-18 00:18:43 -06:00
Владимир Байраковский
4ac9b2eb06 Updates to Russian translation
Note that it still is not complete.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-17 23:58:22 -06:00
Dan McGee
3559306546 scripts: allow usage when gettext is not installed
Address the issue of our scripts not working so great when gettext is not
available. This has come up in multiple bug reports, and is relatively easy
to address by adding a simple check and a stub function if gettext was not
found that simply echos the original message.

Addresses concerns from FS#9214 and FS#9607.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-17 21:25:41 -06:00
Chantry Xavier
2374c81e55 Fix conflict progress bar with UTF-8 chars
This fixes FS#6437. Dan already explained the problem in that bug report.

Instead of letting printf deal with the length of utf8 strings, we can
handle it more explicitly in the case of conflict progress bar, just like we
do for add/remove progress bars. We compute the remaining space left for
displaying the pkgname in case of add/remove, and an empty string in case of
conflict.

Before :
(1/1) Prüfe auf Dateikonflikte                 [###################] 100%
(1/1) Aktualisiere rxvt-unicode                 [###################] 100%
After :
(1/1) Prüfe auf Dateikonflikte                  [###################] 100%
(1/1) Aktualisiere rxvt-unicode                 [###################] 100%

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-17 20:41:23 -06:00
Dan McGee
42f5579fd7 Remove reference to gnome in DOC_DIRS
Arch no longer installs Gnome here, and we should be stripping any doc dirs
in /opt anyway, so generalize it. Fixes FS#9597.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-17 20:40:47 -06:00
Juan Pablo Gonzalez
3078494767 Updated Spanish translation for 3.1.2 release
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
2008-02-17 13:59:50 -06:00
Dan McGee
273950473e Add gettext call to 2 'failed' messages
Noticed-by: Vojtěch Gondžala <vogo@seznam.cz>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-16 17:44:21 -06:00
Dan McGee
92ab7c33fb Move pmgraph_t struct and functions to their own header file
This will allow us to utilize this helpful type and functions in places
besides dependency calculations. In addition, remove the public declaration
of pmgraph_t in alpm.h- there is zero need to expose this internal type.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-16 11:58:49 -06:00
Dan McGee
6b07b5d345 Merge branch 'maint'
Conflicts:

	lib/libalpm/be_files.c
	lib/libalpm/package.c
2008-02-15 19:40:22 -06:00
Dan McGee
a16608c610 Update Doxyfile with some new options in new version
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-15 19:29:17 -06:00
Matthias Gorissen
be95e4d8a0 More small updates to German translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-15 16:07:28 -06:00
Jaroslaw Swierczynski
fe4e07bd2f Update Polish translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-15 15:58:26 -06:00
Dan McGee
59a6b519da Merge branch 'translations' into maint 2008-02-14 21:22:27 -06:00
Benjamin Andresen
2b0c89b06a Update German translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-14 21:19:37 -06:00
João Felipe Santos
0f74ae0885 Updated Brazilian Portuguese translation for 3.1.2 release
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
2008-02-15 01:27:15 +01:00
Dan McGee
b206aaee88 Ensure DESC infolevel is loaded before checking pkg->filename
This is the first step of fixing FS#9547. This should not break any existing
code that may rely on this function behaving the way it did, and should be
good for inclusion in a maint release.

In addition, update pactest so it fills the FILENAME field in the DB entries
it creates so we can move forward with a real fix to this issue.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-13 22:52:53 -06:00
Nagy Gabor
141e569840 Updated Hungarian translation for 3.1.2 release
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
2008-02-12 23:26:43 +01:00
Vojtěch Gondžala
706c690b64 Updated Czech translation for 3.1.2 release
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
2008-02-12 23:05:33 +01:00
Jeff Bailes
ccc57de6b6 Updated English translation for 3.1.2 release
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
2008-02-12 12:18:46 +01:00
Chantry Xavier
279fbc44b1 Update french translation.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
2008-02-12 12:17:20 +01:00
Giovanni Scafora
69188d75fb Updated Italian translation for 3.1.2 release
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
2008-02-12 12:15:36 +01:00
Dan McGee
e8d665fbf7 Update translation files in prep for 3.1.2 release
For 7 message changes, this commit is far too large...

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-11 20:52:50 -06:00
Dan McGee
f4ac63ab43 Update NEWS in prep for 3.1.2 release
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-11 20:44:16 -06:00
Dan McGee
8068a14c52 setlibpaths(): remove a stray set_option line
For some reason, we set our dbpath to the logfile path, which was completely
broken, and we didn't even check the return value coming back (which of
course was -1 meaning the set failed). Add some comments so people can
understand what is going on here now too.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-11 20:40:44 -06:00
Dan McGee
9bf487b2ff Move some translations to their generic language code
For our Czech, Polish, and Russian translations, they do not need to be at
the more specific 'lang_COUNTRY' code, but can live at just plain 'lang'.
This follows the pattern of most other translated programs out there as
Roman pointed out on IRC.

ru_RU: 2 (pacman and libalpm)
ru: 128 for him, 131 for me (everything else)

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-11 20:40:44 -06:00
Dan McGee
fbf3beb8d2 ensure chk_fileconflicts reads entire file list
If the end of the pB list was reached before the end of pA, we failed to
read any remaining files from the pA list. Add an additional loop to ensure
all entries of pA are added to the return list regardless of whether we have
reached the end of pB.

This new loop also eliminates the now-unnecessary check for a null pB, as we
need to ensure we are excluding directories in the resulting output anyway.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-11 20:40:43 -06:00
Nagy Gabor
7586072beb Fixes file relocation pactests
This patch fixes upgrade040.py and upgrade041.py (041 now fails!):
* the old pactests didn't check the existence of the relocated file
* upgrade041.py was broken due to a typo (missing comma)

New upgrade046.py pactest was added (derived from the fixed upgrade041.py).
This fails because the file relocation check is _hacked_ to conflict.c, and
_alpm_db_find_fileconflicts is not called in case of --force.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-11 20:40:43 -06:00
Chantry Xavier
17180890a5 makepkg : set sane umask before source extraction.
This fixes FS#9242 and FS#9362.

Set umask before the sources are extracted, and after the /etc/profile.d/*
files are sourced in handledeps.
This sourcing of profile.d files is why umask was moved to the build
function in the first place, as can be seen in commit ac965ed401.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-11 20:40:43 -06:00
Dan McGee
bfc024eab3 Merge branch 'maint' 2008-02-07 20:16:16 -06:00
Nagy Gabor
77c3cf9790 Remove alpm_sync_get_newversion function
sync->newversion shouldn't be public at all, and internally we access it directly.
(Before pmsyncpkg_t clean-up the analogue of this field [type] was needed in replaces computation.)

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-07 20:15:30 -06:00
Nagy Gabor
7dc37109b0 alpm_sync_sysupgrade split
This patch indroduces a new public alpm_sync_newversion, which scans for new
version of a package in sync repos.
Hopefully this will reduce code duplication in the future:
* check-for-pacman-new-version from front-end can be easier
* -Qu refactoring

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-07 20:15:23 -06:00
Dan McGee
14ee1be1ef makepkg: do a quick check for the VCS binaries
Fixes FS#9230. Ensure we have the VCS binaries available when doing the
development version number checking.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-07 20:09:59 -06:00
Dan McGee
11fe18479e pactest: make more resiliant to missing files
Add a bunch of guards around function calls like open() and stat() to ensure
we are not going to get ourselves a python error. This made implementing and
testing the new upgrade045 pactest much easier, as its whole purpose was to
create a dead symlink and debug a segfault of pacman (which caused no DB
entries to be written) to support the previously checked in fix for FS#9235
(commit 0c2206f542). Both of these cases are
now non-fatal in pactest.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-07 19:36:17 -06:00
Chantry Xavier
0c2206f542 libalpm/add.c : safety check for fixing FS#9235.
Fixes FS#9235.

We already had the following case in extract_single_file :
/* cases 1,2,3: couldn't stat an existing file, skip all backup checks */

But we actually only did a lstat here. And if lstat worked, we did a stat
without checking.
When lstat works and stat fails, it means we have a broken symlink, like in
FS#9235. We can actually treat this case like a non-existing file.
The broken symlink will then be simply overwritten.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-07 14:58:23 +01:00
Nagy Gabor
05d5634958 libalpm/package.c : add _alpm_pkgname_pkg_cmp function.
_alpm_pkgname_pkg_cmp(pkgname, pkg) returns true iff pkg's name is pkgname.
This is useful if you want to remove a package from pmpkg_t* list, and you
want to search for package name.

This allows cleaning the -Ru code a bit, by removing the need of a dummy
pkg.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-06 08:46:15 +01:00
Nagy Gabor
e63366ae5e New remove option : -u / --unneeded (FS#6505).
With --unneeded option 'pacman -R' doesn't stop in case of dependency error;
it removes the needed-dependency targets from the target-list instead.  See
also: http://archlinux.org/pipermail/pacman-dev/2007-October/009653.html .

The patch also adds a new causingpkg field to pmdepmissing_t which indicates
the to-be-removed package which would cause a dependency break. This is
needed, because miss->depend.name may be a provision. miss->causingpkg will
be useful in -R dependency error messages too.

[Xavier: renamed inducer to causingpkg, removed the _alpm_pkgname_pkg_cmp
helper function as requested by Aaron. This might be added by a further
commit.  Other small cleanups, updated manpage and bash completion.]

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-06 08:46:15 +01:00
Chantry Xavier
e81dec9b8c remove --force option from repo-add.
The force option should only be specified in the PKGBUILD with
options=(force).  This information should be handled like any other meta
info, and there is no need to have a special repo-add option for it.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
[Dan: fix up a few more references in contrib/ scripts, etc]
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-05 19:35:41 -06:00
Dan McGee
eca30ed66a Merge branch 'maint'
Conflicts:

	contrib/gensync
	contrib/updatesync
2008-02-05 19:31:23 -06:00
Chantry Xavier
b29838c825 Don't follow symlinks with -Qo.
Fixes FS#9473 and the issue reported there :
http://www.archlinux.org/pipermail/pacman-dev/2008-February/011061.html

Only the dirname should be resolved, not the basename.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-05 19:19:17 -06:00
Dan McGee
7d7a337912 pacman/util.c: add mdirname function
This function mirrors mbasename and will be used by the 'owns' machinery.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-05 19:18:44 -06:00
Dan McGee
93a3050ed9 Remove "Installed Size" hackeration
Keeping this hack around where installed size is only shown if it is
greater than total download size encourages broken repository databases.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-05 18:34:03 -06:00
Dan McGee
a7a9f37561 doc/makepkg: document --log, address locale issues
Looks like no one ever documented -L/--log, so do that now. In addition,
address some of the issues brought up in FS#9156 and add a note about build
output and logs being in the current locale.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-05 18:23:18 -06:00
Chantry Xavier
7069b96173 Add new ChangeLog.proto file.
Fixes FS#7231.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-02-05 18:01:02 -06:00
Chantry Xavier
69bc5ea5e2 add 'force' to PKGINFO, have repo-add respect it.
Ref: http://www.archlinux.org/pipermail/pacman-dev/2008-January/011023.html
Also see FS#9347 and FS#9349.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-02 18:55:40 -06:00
Chantry Xavier
96ee1bca24 Clarify the "failed to add target" errors.
Make the error message printed when addtarget fails consistent between
add.c, remove.c and sync.c.

The main problem was that the "failed to add target" in case of a removal
operation could sound confusing.  There was also a little output problem
with -U ("failed" was missing).

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-02 18:55:24 -06:00
Chantry Xavier
37bb99abfa repo-remove: print an error in case of an empty db
When removing the last packages from a database, repo-remove silently
failed. Now an error is printed.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-02 18:52:37 -06:00
Dan McGee
5d03a6fd94 Remove gettext calls from gensync/updatesync
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-02 14:16:47 -06:00
Dan McGee
4fad7855fa Remove gensync and updatesync from normal distribution
Move these two scripts into contrib/, and start the process of de-automaking
them by removing the @sysconfdir@ references and the gettext initialization.
The removal of all gettext will soon follow.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-02 14:12:34 -06:00
Dan McGee
7786bf6024 Add deprecation warnings to gensync and updatesync
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-02 13:57:15 -06:00
Dan McGee
c492ca840c Merge branch 'maint' 2008-02-02 13:39:50 -06:00
Roman Kyrylych
7cfb343b0f Remove /bin/true from install.proto
Signed-off-by: Roman Kyrylych <roman@archlinux.org>
[Dan: update indentation inside functions]
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-02 13:33:50 -06:00
Alex Merry
b1103a3eaf updatesync: incorrect package deletion logic
Fixes FS#9279.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-02 10:09:06 -06:00
Dan McGee
5647f7f512 Update libtool version (1.5.24 -> 1.5.26)
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-02 09:53:18 -06:00
Dan McGee
c028014f96 makepkg: ensure binaries in /opt/* are stripped
The path selection for stripping binaries was slightly off, so any binaries
in subdirectories of opt/ were missed. Fixes FS#9342.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-27 21:07:44 -06:00
Nagy Gabor
1fc83f4af6 pmsyncpkg_t cleanup
Fix for sync044.py and reason001.py.
Rename sync->data to sync->removes (alpm_list_t *)
Replace pmsynctype_t sync->type by pmpkgreason_t sync->newreason

The type field was set to UPGRADE or DEPEND or REPLACE.
Instead of using type = UPGRADE or DEPEND, we now rather use a
"pmpkgreason_t newreason" field directly (= explicit or depend) which allows
a better handling of the install reason.
And the REPLACE type is now deduced implicitly when the sync->removes list
is not empty.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-27 12:05:33 -06:00
Dan McGee
9fbb77c91b Merge branch 'maint' 2008-01-27 11:54:52 -06:00
Nagy Gabor
9bfbd73917 Fix PM_ERR_CONFLICTING_DEPS handling in sync.c
* eliminate asymmetry (innerconflict vs. outerconflict)
* fix a memleak (in case of PM_ERR_MEMORY deps wasn't freed)
* fix wrong pmconflict_t duplication (*retconflict = *conflict)

Note: the new code introduces some code duplication which shall disappear by
fixing FS#7524.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-27 11:54:35 -06:00
Nagy Gabor
ea828b5693 New _alpm_conflict_dup function
Added function to cleanly duplicate a conflict.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-01-27 11:54:25 -06:00
Nagy Gabor
f432ce41e0 small sync.c code clean-up
Remove unnecessary synclist_free function, and use our standard way
(alpm_list_free_inner + alpm_list_free) instead.
This slightly reduces code duplication.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-27 11:52:46 -06:00
Chantry Xavier
0775c38e72 Clarify the "cancel current operation" message.
Fixes FS#9295.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
[Dan: 'new pacman' -> 'new pacman version']
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-27 11:50:30 -06:00
Chantry Xavier
f950c26307 makepkg : improve determination of svn revision.
The previous sed command matched every line starting with r.
For example, with mpd-svn package in aur, the svn log output was rather big,
and there were several lines starting with r (the actual revision : r7155,
but also other lines starting with reverting and run), so this broke makepkg:

> makepkg
==> Determining latest svn revision...
  -> Version found: 7155
everting
un
sed: -e expression #1, char 27: unterminated `s' command

To make the sed command more bullet proof, I added the -q option of svn log,
which produces a quieter output, without the log.
And I changed the sed command to only match numbers for the revision.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-27 11:49:24 -06:00
Dan McGee
11692e0eef doc/makepkg.8: add missing '-' to manpage option
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-24 22:26:58 -06:00
Chantry Xavier
88cbee3c24 libalpm/sync.c : conflicts resolving cleanup.
The original patch from Nagy tried to resolve target vs target conflicts,
and so broke the following pactests : sync040, sync041 and sync990

Nagy's proposal to solve this situation was to choose the interactive way,
ask the user how to deal with it: either remove pkg1 or remove pkg2 or stop
here.  So he left this as a TODO.

But instead of trying to resolve these conflicts or asking the user, I
tried to find a more conservative way, looking at what the current pactests
expected:
If between the two conflicting packages, one provides the other, pacman
will keep that one and remove the other from the target list.  That breaks
sync893 and sync897. But Dan agreed these two looked weird and should be
changed.

This commit should close FS#8897, FS#8899 and FS#9024.

Reference:
http://www.archlinux.org/pipermail/pacman-dev/2007-October/009745.html
http://www.archlinux.org/pipermail/pacman-dev/2007-December/010393.html

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-23 20:13:01 -06:00
Dan McGee
69c6d59bb6 Fix flip-flopped parameters to CALLOC macro
The mixup causes a fail in the build using --enable-debug on x86_64 but not
i686, so none of us caught this right away. Fix it. FS#9297.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-23 20:13:01 -06:00
Chantry Xavier
8240da6cb3 libalpm/cache.c : don't duplicate packages in pkgcache.
Edit _alpm_db_add_pkgincache to not duplicate packages, because this is not
needed, is slower, and uses more memory. This made the max memory usage
during base reinstall go from 10.4MB to 9.7MB.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-23 20:13:01 -06:00
Chantry Xavier
bd43a7f155 testdb : add conflicts checking.
Testdb will now scan the local database to check there are no conflicts.
I'm not sure how it's possible to get this situation. At least pacman
doesn't allow installing a package that conflicts with a local one, without
removing the local one. But maybe in a very weird situation, or because of
a bug, it could be possible.  But anyway, this only requires 5 lines of
code.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-23 20:12:50 -06:00
Chantry Xavier
22c900e7d5 Add new public alpm_checkdbconflicts function.
This function has a limited purpose, but might be interesting to do a
sanity check from a frontend (eg testdb).

Also removed the private _alpm_checkconflicts function to avoid confusion.
This function was used only once in libalpm, in sync.c, and was just a
single line anyway. Having to do it manually makes it explicit that we are
looking for two kind of conflicts (targ vs targ and db vs targ).

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-23 20:12:41 -06:00
Chantry Xavier
6b8f404a33 small memleak fix in sync.c.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-01-23 19:52:16 -06:00
Dan McGee
8ca6501ee1 pactest: remove check for root permissions message
Pacman isn't designed to fail when under fakeroot anymore, so kill this
check off which fails anyway if the logfile is missing (such as when the
--valgrind flag is used).

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-21 19:47:03 -06:00
Dan McGee
9247ddbe8a conflict.c: move debug message out of inner loop
We have a debug message in the target vs. target file conflict check, and
this is a bit rediculous when it comes to watching output from something
like smoke001.py. Instead, put the output outside this inner loop so we only
see it at most once per target, which is much more reasonable.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-21 19:44:10 -06:00
Dan McGee
36264a3ab9 Fix memleak found by add004.py
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-21 19:44:02 -06:00
Dan McGee
cbcf542ad2 Merge branch 'maint' 2008-01-21 19:42:08 -06:00
Nagy Gabor
2a7101c049 New --asexplicit option
This is the symmetric of --asdeps, install packages explicitly.
Documentation and completion files were updated accordingly.
Added sync301.py and upgrade032.py pactest files to test this.

I also made a little modification in ALLDEPS handling too.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-01-21 19:39:26 -06:00
Chantry Xavier
b2914bf0af Move the deptest code from frontend to backend.
The deptest code (pacman -T) used by makepkg was mostly in the frontend.
There were 2 drawbacks:
1) the public splitdep function returns a pmdepend_t struct, but the
_alpm_dep_free function for freeing it is private. So there was a memleak.
2) there is a helper in the backend (satisfycmp in deps.c) which makes this
function much easier.

So this adds a new public alpm_deptest in libalpm/deps.c, which cleans
pacman_deptest in pacman/deptest.c a lot.
Besides, alpm_splitdep was made private, because the frontend no longer
requires it, and _alpm_dep_free is also private.
Finally the deptest001 pactest was extended.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-21 19:35:43 -06:00
Dan McGee
927af790ee Convert deltas to dynamic allocation
Another elimination of a static length structure in libalpm. Should result
in a little more memory saved during execution of packages with lots of
deltas attached.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-21 19:33:32 -06:00
Chantry Xavier
bba62655fe two string fixes.
* added a newline to a conflict message in add.c
* removed the trailing dot in a replace message in callback.c.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-01-20 14:30:33 -06:00
Chantry Xavier
73ee64d49f workaround for a gettext string starting with --.
Workaround found in Advanced Bash-Scripting Guide, localization section.
"added a \0 (NULL) at the beginning of the sentence."

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-01-20 14:30:26 -06:00
Dan McGee
ba7687f58e Remove frontend translation of "debug:" message
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-20 12:32:44 -06:00
Dan McGee
003adb7646 makepkg: add check to ensure we have non-URL files in build dir
Pacman 3.0 printed the following message if a file could not be found:
  ERROR: xxx was not found in the build directory and is not a proper URL.

We lost this logic in 3.1 when moving to the DLAGENT type stuff, so a
not-found file got passed all the way to the download logic where it failed
with a odd error message. Bring back some logic to ensure only files with
URLs get past a certain point, and fail if the file is not available.

Fixes FS#9208.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-20 12:32:37 -06:00
Dan McGee
f6785dcb89 Merge branch 'maint' 2008-01-18 19:33:25 -06:00
Dan McGee
38e981fab3 Merge branch 'maint' 2008-01-14 22:58:44 -06:00
Dan McGee
521de7ceed Merge branch 'maint' 2008-01-13 12:27:17 -06:00
Dan McGee
4f26701793 memleak fix with new dynamic depend structure
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-12 20:18:20 -06:00
Chantry Xavier
435ec29bc7 libalpm/sync.c: don't duplicate packages for the sync->data field.
Packages put in the sync->data field were always duplicated with pkg_dup,
and then freed, This is not needed.
Killing this duplication of packages made the memory usage during base
reinstall go from 10.4 MB to 8.1 MB.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-01-12 17:51:29 -06:00
Aaron Griffin
26f4993e1d Store replaces in the local DB too
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
[Dan: might as well store 'force' too]
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-12 01:33:57 -06:00
Dan McGee
2630556bde Merge branch 'maint' 2008-01-11 23:19:52 -06:00
Nagy Gabor
112caad838 New reason001.py pactest
This pactest demonstrates that we should copy the reason between the
to-be-replaced and replaced packages

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-11 23:19:08 -06:00
Dan McGee
3e133524a5 Add functions to manipulate pmdepend_t objects
We didn't have a free function before, causing some memory leaks. We also
need a dup function now that strings are not in the structure but are
dynamically allocated.

Also adapt pmdepmissing_t to use a pointer to a depend struct instead of an
inclusive one so we can use the functions we created here.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-11 22:58:05 -06:00
Dan McGee
ccc1c73152 Use dynamic string allocation in package structures
This also affects all structures with static strings, such as depmiss,
conflict, etc. This should help a lot with memory usage, and hopefully make
things a bit more "idiot proof".

Currently our pactest pass/fail rate is identical before and after this
patch. This is not to say it is a perfect patch- I have yet to pull valgrind
out. However, this should be quite safe to use in all situations from here
on out, and we can start plugging the memleaks.

Original-work-by: Aaron Griffin <aaronmgriffin@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-11 00:01:58 -06:00
301 changed files with 38875 additions and 29692 deletions

1
.gitattributes vendored Normal file
View File

@@ -0,0 +1 @@
*.py diff=python

View File

@@ -11,6 +11,6 @@ James Rosten <seinfeld90@gmail.com>
Roman Kyrylych <Roman.Kyrylych@gmail.com>
Andrew Fyfe <andrew@neptune-one.net>
Chantry Xavier <shiningxc@gmail.com>
Nagy Gabor <ngaba@petra.hos.u-szeged.hu>
Nagy Gabor <ngaba@bibl.u-szeged.hu>
Nathan Jones <nathanj@insightbb.com>
Allan McRae <mcrae_allan@hotmail.com>

16
ChangeLog.proto Normal file
View File

@@ -0,0 +1,16 @@
2007-12-01 Your Name <youremail@domain.com>
* pkgver-pkgrel :
new upstream release.
Reason we changed stuff.
Another reason we changed stuff.
* gcc-4.1.patch :
Removed, no longer needed.
2007-11-01 Your Name <youremail@domain.com>
* 1.0-5 :
added ChangeLog.
the last line should end with just one newline.
you can cat the file to check it displays fine.

36
HACKING
View File

@@ -12,10 +12,10 @@ Coding style
1. All code should be indented with tabs. (Ignore the use of only spaces in
this file) By default, source files contain the following VIM modeline:
+
[C]
code~~~~~~~~~~
[code,C]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/* vim: set ts=2 sw=2 noet: */
code~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2. When opening new blocks such as 'while', 'if', or 'for', leave the opening
brace on the same line as the beginning of the codeblock. The closing brace
@@ -24,8 +24,8 @@ code~~~~~~~~~~
braces, even if it's just a one-line block. This reduces future error when
blocks are expanded beyond one line.
+
[C]
code~~~~~~~~~~
[code,C]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
for(lp = list; lp; lp = lp->next) {
newlist = _alpm_list_add(newlist, strdup(lp->data));
}
@@ -40,14 +40,14 @@ while(it) {
free(it);
it = ptr;
}
code~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3. When declaring a new function, put the opening and closing braces on their
own line. Also, when declaring a pointer, do not put a space between the
asterisk and the variable name.
+
[C]
code~~~~~~~~~~
[code,C]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alpm_list_t *alpm_list_add(alpm_list_t *list, void *data)
{
alpm_list_t *ptr, *lp;
@@ -58,7 +58,7 @@ alpm_list_t *alpm_list_add(alpm_list_t *list, void *data)
}
...
}
code~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4. Comments should be ANSI-C89 compliant. That means no `// Comment` style;
use only `/* Comment */` style.
@@ -101,37 +101,37 @@ Currently our #include usage is in messy shape, but this is no reason to
continue down this messy path. When adding an include to a file, follow this
general pattern, including blank lines:
[C]
code~~~~~~~~~~
[code,C]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include "config.h"
#include <standardheader.h>
#include <another.h>
#include <...>
code~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Follow this with some more headers, depending on whether the file is in libalpm
or pacman proper. For libalpm:
[C]
code~~~~~~~~~~
[code,C]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/* libalpm */
#include "yourfile.h"
#include "alpm_list.h"
#include "anythingelse.h"
code~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
For pacman:
[C]
code~~~~~~~~~~
[code,C]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include <alpm.h>
#include <alpm_list.h>
/* pacman */
#include "yourfile.h"
#include "anythingelse.h"
code~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/////
vim: set ts=2 sw=2 syntax=asciidoc et:

13
INSTALL
View File

@@ -10,10 +10,19 @@ unlimited permission to copy, distribute and modify it.
Basic Installation
==================
You will need to build and install two libraries before you can
properly build pacman.
libarchive
http://code.google.com/p/libarchive/
libfetch
ftp://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/net/libfetch/README.html
Briefly, the shell commands `./configure; make; make install' should
configure, build, and install this package. The following
more-detailed instructions are generic; see the `README' file for
instructions specific to this package.
instructions are generic. Run `./configure --help` for specific
options.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses

View File

@@ -3,20 +3,25 @@ if WANT_DOC
SUBDIRS += doc
endif
# Make sure we test and build manpages when doing distcheck
DISTCHECK_CONFIGURE_FLAGS = --enable-doc --disable-git-version
# Some files automatically included, so they aren't specified below:
# AUTHORS, COPYING, NEWS, README
EXTRA_DIST = HACKING
# Sample makepkg prototype files
pkgdatadir = ${datadir}/${PACKAGE}
dist_pkgdata_DATA = PKGBUILD.proto proto.install
dist_pkgdata_DATA = PKGBUILD.proto PKGBUILD-split.proto proto.install ChangeLog.proto
# run the pactest test suite
check-local: src/pacman
# run the pactest test suite and vercmp tests
check-local: pactest src/pacman src/util
$(PYTHON) $(top_srcdir)/pactest/pactest.py --debug=1 \
--test $(top_srcdir)/pactest/tests/*.py \
-p $(top_builddir)/src/pacman/pacman
rm -rf $(top_builddir)/root
$(SH) $(top_srcdir)/pactest/vercmptest.sh \
$(top_builddir)/src/util/vercmp
# create the pacman DB and cache directories upon install
install-data-local:

175
NEWS
View File

@@ -1,5 +1,176 @@
VERSION DESCRIPTION
-----------------------------------------------------------------------------
3.3.0 - xdelta: many fixes and improvements
- new pkgdelta script to create deltas
- repo-add can add both deltas and packages to a database
- xz archive format supported for packages and databases
- in case of unresolvable packages, pacman now asks
if they should be skipped instead of aborting
- -Suu synchronizes all packages with the version from the
repository (including upgrade and downgrade)
- replace libdownload dependency by the original libfetch
- better support of -q/--quiet flag with -Qo and -Ql
- -Sp works without root (FS#8905)
- fix a bug where the replacement of a package failed because
of a file conflict, and the package was lost (FS#9088)
- improved behavior of HoldPkg option (FS#9173)
- allow to ignore a package from a group (FS#12059)
- search package groups when searching a db (FS#13099)
- asciidoc fixes
- documentation updates
- repo-add: cleanups, improvements and speedup
- makepkg:
- package splitting support! - see PKGBUILD-split.proto
- limit fakeroot usage with addition of package() function
- info is handled like man pages and not other documentation
- configuration option for man/info page directories
- added ability to automatically remove files from package
- configuration option for default LDFLAGS
- specify alternative configuration file with --config flag
- check all integrity checksums provided in PKGBUILD
- fix pkgver/pkgrel updating in SCM packages
- BUILDSCRIPT option removed from makepkg.conf. Now specified
during configure
- enforce no ">" or "<" in provides array
- package compression autodetection
- check PKGBUILD for CRLF line endings
- fix reading PKGBUILD from pipe
- increase compatibility with BSDs & Mac OSX
- contrib
- pacdiff - improvements and new -l flag for using locate
- pacscripts - print install scripts for a package
3.2.2 - log pacsave warnings to pacman.log (FS#12531)
- separate local DB creation and writing (FS#12263)
- pacman-optimize: rewrite and refresh (FS#11767)
- repo-add: use openssl instead of md5sum
- simplify doc building process for ease of development
- ensure correct handling of syscall interruptions
- readd missing newline on -Qi/-Si output (FS#11331)
- fix TotalDownload regression (FS#11339)
- makepkg:
- replace getopt with an internal function
- detect incorrect usage of provides (FS#12540)
- fix bash substitution to work in older versions
- fix updating PKGBUILD and simplify logic for SCM packages
- save/restore shell options before/after build() (FS#12344)
- documentation updates and asciidoc build fix
- existing translation updates
3.2.1 - drop special handling of file:// URLs
- display optdepends on install and upgrade
- fix segfault on x86_64 when using UseSyslog (FS#11096)
- fix detection of TotalDownload (FS#11180)
- fix "No such file" error during --force installs (FS#11218)
- better handling of progressbar when behind a proxy (FS#8725)
- repo-add: fix whitespace handling (FS#9171, FS#10630)
- repo-add: add optdepends to the sync DB (FS#10630)
- makepkg:
- allow specifying a download filename (related to FS#11292)
- fix download functions with weird URLs (FS#11076)
- fix creation of source package with local files (FS#11149)
- fix error when sourcing profile scripts (FS#11179)
- perform case-insensitive checksum comparison (FS#11283)
- documentation and help updates (including fix for FS#11203)
- new Ukrainian translation
- existing translation updates
3.2.0 - removed -A/--add option from pacman frontend
- added --asexplicit option
- new remove option --unneeded
- add -Rss option to remove all dependencies
- removed useless -e/--dependsonly option
- config options are now case sensitive
- added CleanMethod option for variety in cache cleaning
- new Turkish translation, all others updated and revised
- handle multiple groups in -Ss and -Qs operations
- allow -q/--quiet option with -o/--own and -g/--groups options
- removed hack for packages with unknown installed size
- add SyncFirst option to pacman.conf
- support installation of versioned deps : pacman -S "dep>=2.0"
- add --enable-git-version configure flag to identify
developmental build version
- do not duplicate packages in required by list
- pacman.static is no longer built
- all error messages use pm_fprintf
- disable geteuid in cygwin
- use off_t type for large file support
- add vercmp test script
- moved gensync and updatesync to contrib/
- rewrote pacsearch script in perl
- paclist script to list installed packages from a repo
- bacman script to make backup of package from filesystem
- combined repo-add and repo-remove into one script
- removed --force option from repo-add
- add --quiet option to repo-add/repo-remove
- update libtool version to 1.5.26
- allow disabling of internal download with new configure
flag --disable-internal-download
- pactest can now check file permissions
- add the possibility to mark the pactests known to fail,
which allows more informative results of make check
- libalpm-specific changes:
- use dynamic string allocation in package structure
- new functions for manipulating pmdepend_t objects
- store replaces and force in local database
- moved deptest functionality to backend
- add alpm_checkdbconflicts function
- fix PM_ERR_CONFLICTING_DEPS handling
- cleanup of pmsyncpkg_t
- add alpm_sync_newversion function
- cleanup of alpm_list code
- refactor of download code
- download callback API changes
- removed test_delta_md5sum and test_pkg_md5sum functions
- add _alpm_archive_fgets function to read line-by-line from
an archive
- read .PKGINFO directly from package file with no temp file
- native support for both libdownload and libfetch
- rework delta algorithm (we still need script updates)
- swap parameters of alpm_pkg_find for consistency with
other find functions
- swap parameters of PM_TRANS_CONV_INSTALL_IGNOREPKG to make
more sense
- fix -Rs when removing multiple items in dependency chain
- makepkg-specific changes:
- support for resuming source downloads
- added zipman option
- removed -b/--builddeps
- various portability fixes for BSD and Mac OS X
- check for valid options in PKGBUILD
- add --allsource option
- remove deprecated --usesudo option
- handle spaces in build directory
- made keeping docs the default option
- use pacman version dep resolving
- fix regression in library stripping
- make strip paths configurable
- MANY other bug fixes and small improvements
3.1.4 - various small code cleanups and fixes
- small documentation updates
- improvements to PKGBUILD.vim
- translation updates - ru, zh_CN
3.1.3 - major updates to i18n output in frontend (all UTF-8 characters
should now work with varying byte and char widths)
- new Simplified Chinese translation
- updates to testpkg utility
- updates to PKGBUILD.vim
- internal updates for translations - use c-format on all
strings, get rid of needless line numbers
3.1.2 - updates to proto.install, add ChangeLog.proto (FS#7231)
- add 'force' option to packages, and have repo-add respect it
- mark gensync and updatesync as deprecated
- fix pacman -Qo behavior on symlinks (FS#9473)
- fix segfault on a broken symlinks in backup code (FS#9235)
- ensure filename is determined correctly for a pkg (FS#9547)
- fix conflict progress bar with UTF-8 chars (FS#6437)
- fix chk_fileconflicts brokenness, ensure it reads entire list
- ensure -Sc operation locks DB, only checks DBs (FS#9609)
- minor documentation and message updates
- moved some translations to their more generic lang codes
- allow scripts to be run without gettext installed
- makepkg:
- check to ensure we have non-URL sources (FS#9208)
- ensure we strip binaries in /opt/ dirs (FS#9342)
- check for VCS executable before using (FS#9230)
- set sane umask before source extraction (FS#9242, FS#9362)
3.1.1 - fix versioned provisions handling- use '=' instead of ' ' which
differs from original spec but better in long run (FS#9171)
- rename query --orphans to --unrequired (FS#9144)
@@ -451,7 +622,7 @@ VERSION DESCRIPTION
2.2 - More bugfixes
- Added --downloadonly switch to --sync
2.1 - Lots of bugfixes
- Added support for multiple respositories
- Added support for multiple repositories
- Improved the config file layout
- Improved dependency resolution and sorting
2.0 - Added dependency functionality
@@ -479,4 +650,4 @@ VERSION DESCRIPTION
- Changed db_find_conflicts() to ignore directories
1.0 - Initial Release
vim: set et:
vim: set et spell spelllang=en_us:

58
PKGBUILD-split.proto Normal file
View File

@@ -0,0 +1,58 @@
# This is an example of a PKGBUILD for splitting packages. Use this as a
# start to creating your own, and remove these comments. For more information,
# see 'man PKGBUILD'. NOTE: Please fill out the license field for your package!
# If it is unknown, then please put 'unknown'.
# Contributor: Your Name <youremail@domain.com>
pkgname=('pkg1' 'pkg2')
pkgbase=""
pkgver=VERSION
pkgrel=1
pkgdesc=""
arch=()
url=""
license=('GPL')
groups=()
depends=()
makedepends=()
provides=()
conflicts=()
replaces=()
backup=()
options=()
install=
source=($pkgbase-$pkgver.tar.gz)
noextract=()
md5sums=() #generate with 'makepkg -g'
build() {
cd "$srcdir/$pkgbase-$pkgver"
./configure --prefix=/usr
make || return 1
}
package_pkg1() {
# options and directives that can be overridden
pkgdesc=""
license=()
groups=()
depends=()
optdepends=()
provides=()
conflicts=()
replaces=()
backup=()
options=()
install=
cd "$srcdir/$pkgbase-$pkgver"
make DESTDIR="$pkgdir/" install-pkg1
}
package_pkg2() {
# options and directives overrides
pkgdesc=""
cd "$srcdir/$pkgbase-$pkgver"
make DESTDIR="$pkgdir/" install-pkg2
}

View File

@@ -14,6 +14,7 @@ license=('GPL')
groups=()
depends=()
makedepends=()
optdepends=()
provides=()
conflicts=()
replaces=()
@@ -29,7 +30,7 @@ build() {
./configure --prefix=/usr
make || return 1
make DESTDIR="$pkgdir" install
make DESTDIR="$pkgdir/" install
}
# vim:set ts=2 sw=2 et:

217
README
View File

@@ -2,7 +2,7 @@ ALPM library overview & internals
=================================
Here is a list of the main objects and files from the ALPM (i.e. Arch Linux
Package Management) library. This document, whilst not exhaustive, also
Package Management) library. This document, while not exhaustive, also
indicates some limitations (on purpose, or sometimes due to its poor design) of
the library at the present time.
@@ -13,9 +13,8 @@ the frontend. Lots of structures are of an opaque type and their fields are
only accessible in read-only mode, through some clearly defined functions.
In addition to "alpm.h", the interfaces of "alpm_list.h" have also been made
available to the frontend. It is not a requirement for the frontend to use
these list functions; however, it prevents frontends from having to reimplement
a list data structure.
available to the frontend, for allowing it to manipulate the lists returned by
the backend.
Several structures and functions have been renamed compared to pacman 2.9 code.
This was done at first for the sake of naming scheme consistency, and then
@@ -25,7 +24,7 @@ same name declared in both spaces. To avoid such conflicts, internal function
names have been prepended with "_alpm_".
In a general manner, public library functions are named "alpm_<type>_<action>"
(examples: alpm_trans_commit(), alpm_release(), alpm_pkg_getinfo(), ...).
(examples: alpm_trans_commit(), alpm_release(), alpm_pkg_get_name(), ...).
Internal (and thus private) functions should be named "_alpm_XXX" for instance
(examples: _alpm_needbackup(), _alpm_runscriplet(), ...). Functions defined and
used inside a single file should be defined as "static".
@@ -33,59 +32,61 @@ used inside a single file should be defined as "static".
[Initialization]
alpm_init() is used to initialize library internals and to create
alpm_initialize() is used to initialize library internals and to create
a transparent handle object. Before its call, the library can't be used.
alpm_lib_release() just does the opposite (memory used by the library, and the
handle is freed). After its call, the library is no longer available.
alpm_release() just does the opposite (memory used by the library, and the
handle is freed). After its call, the library is no longer available.
[Options]
In the future, the library will not use any configuration file. It will be up
to the front end to The handle holds a
number of configuration options instead (IGNOREPKG, SYSLOG usage,
log file name, registered databases, ...).
The library does not use any configuration file. It is up to the front end to
configure the library as needed; the handle holds a number of configuration
options instead.
All of the following options have a alpm_option_get_* and alpm_option_set_*
function for getting and setting the value. The cannot be set before the
function for getting and setting the value. They cannot be set before the
library is initialized.
* logcb: The callback function for "log" operations.
* dlcb: The callback function for download progress.
* logmask: The logging mask for which level of output is sent to the logcb.
* root: The root directory on which pacman operates (Default: /)
* dbpath: The base path to pacman's databases (Default: var/lib/pacman)
* cachedir: The base path to pacman's download cache (Default: var/cache/pacman)
* logfile: The base path to pacman's log file (Default: var/log/pacman.log)
* dlcb: The callback function for download progress of each package.
* fetchcb: Callback for custom download function.
* totaldlcb: The callback function for overall download progress.
* root: The root directory for pacman to install to (Default: /)
* dbpath: The toplevel database directory (Default: /var/lib/pacman)
* logfile: The base path to pacman's log file (Default: /var/log/pacman.log)
* usesyslog: Log to syslog instead of `logfile` for file-base logging.
* xfercommand: The command to use for downloading instead of pacman's internal
downloading functionality.
* nopassiveftp: Do not use passive FTP commands for ftp connections.
* chomp: No way, easter eggs are secret!
* usecolor: Unimplemented, but for the future. You can assume what it means.
The following options also have a `alpm_option_add_*` function, as the values
are list structures (NOTE: The add functions are NOT plural, as they're in
english: alpm_option_get_noupgrades -> alpm_option_add_noupgrade).
The following options also have `alpm_option_{add,remove}_*` functions, as the
values are list structures.
NOTE: The add and remove functions are NOT plural, as they are in English:
alpm_option_{get,set}_noupgrades -> alpm_option_{add,remove}_noupgrade.
* cachedirs: Paths to pacman's download caches (Default: /var/cache/pacman/pkg)
* noupgrades: Files which will never be touched by pacman (extracted as .pacnew)
* noextracts: Files which will never be extracted at all (no .pacnew file)
* ignorepkgs: Packages to ignore when upgrading.
* holdpkgs: Packages which must be upgraded before continuing.
* ignoregrps: Groups to ignore when upgrading.
The following options are read-only, having ONLY alpm_option_get_* functions:
* lockfile: The file used for locking the database
(Default: <dbpath>/db.lck)
* localdb: A pmdb_t structure for the local (installed) database
* syncdbs: A list of pmdb_t structures to which pacman can sync from.
The following options are write-only, having ONLY alpm_option_set_* functions:
* usedelta: Download delta files instead of complete packages if possible.
[Transactions]
The transaction sturcture permits easy manipulations of several packages
The transaction structure permits easy manipulations of several packages
at a time (i.e. adding, upgrade and removal operations).
A transaction can be initiated with a type (ADD, UPGRADE or REMOVE),
A transaction can be initiated with a type (SYNC, UPGRADE or REMOVE),
and some flags (NODEPS, FORCE, CASCADE, ...).
Note: there can only be one type at a time: a transaction is either
@@ -105,7 +106,7 @@ These targets represent the list of packages to be handled.
Then, a transaction needs to be prepared (alpm_trans_prepare()). It
means that the various targets added, will be inspected and challenged
against the set of already installed packages (dependency checkings,
against the set of already installed packages (dependency checking, etc...)
Last, a callback is associated with each transaction. During the
transaction resolution, each time a new step is started or done (i.e
@@ -116,27 +117,27 @@ the resolution. Can be useful to implement a progress bar.
[Package Cache]
libalpm maintains two caches for each DB. One is a general package cache, the
other is a group cache (for package groups). These caches are loaded on demand,
and freed when the libary is.
It is important to note tha, as a general rule, package structures should NOT be
freed manually, as they SHOULD be part of the cache.
The cache of a database is always updated by the library after
an operation changing the database content (adding and/or removal of
packages). Beware frontends ;)
libalpm maintains two caches for each DB. One is a general package cache, the
other is a group cache (for package groups). These caches are loaded on demand,
and freed when the library is.
It is important to note that, as a general rule, package structures should NOT
be freed manually, as they SHOULD be part of the cache. The cache of a
database is always updated by the library after an operation changing the
database content (adding and/or removal of packages). Beware frontends ;)
[Package]
The package structure maintains all information for a package. In general,
packages should never be freed from front-ends, as they should always be part of
the package cache.
The package structure maintains all information for a package. In general,
packages should never be freed from front-ends, as they should always be part
of the package cache.
The 'origin' data member indicates whether the package is from a file
(i.e. -U operations) or from the package cache. In the case of a file, all data
members available are present in the structure. Packages indicated as being
from the cache have data members filled on demand. For this reason, the
alpm_pkg_get_* functions will load the data from the DB as needed.
The 'origin' data member indicates whether the package is from a file (i.e. -U
operations) or from the package cache. In the case of a file, all data members
available are present in the structure. Packages indicated as being from the
cache have data members filled on demand. For this reason, the alpm_pkg_get_*
functions will load the data from the DB as needed.
[Errors]
@@ -149,13 +150,15 @@ indicating success, -1 indicating a failure.
If -1 is returned, the variable pm_errno is set to a meaningful value
Wise frontends should always care for these returned values.
Note: the helper function alpm_strerror() can also be used to translate
the error code into a more friendly sentence.
Note: the helper function alpm_strerror() can also be used to translate one
specified error code into a more friendly sentence, and alpm_strerrorlast()
does the same for the last error encountered (represented by pm_errno).
[List - alpm_list_t]
The alpm_list_t structure is a doubly-linked list for use with the libalpm
routines. This type is provided publicly so that frontends are free to use it
routines. This type is provided publicly so that frontends are free to use it
if they have no native list type (C++, glib, python, etc all have list types).
See the proper man pages for alpm_list_t references.
@@ -179,41 +182,117 @@ perform a special action.
[MAIN] (see pacman.c)
Calls for alpm_lib_init(), and alpm_lib_release().
Calls for alpm_initialize(), and alpm_release().
Read the configuration file, and parse command line arguments.
Based on the action requested, it initiates the appropriate transactions
(see pacman_add(), pacman_remove(), pacman_sync() in files add.c,
(see pacman_upgrade(), pacman_remove(), pacman_sync() in files upgrade.c,
remove.c and sync.c).
[CONFIGURATION] (see conf.c)
[CONFIGURATION] (see conf.h)
The frontend is using a configuration file, usually "/etc/pacman.conf".
Part of these options are only useful for the frontend only (mainly,
the download stuffs, and some options like HOLDPKG).
The rest is used to configure the library.
The frontend is using a configuration file, usually "/etc/pacman.conf". Some
of these options are only useful for the frontend only (mainly the ones used to
control the output like showsize or totaldownload, or the behavior with
cleanmethod and syncfirst). The rest is used to configure the library.
[ADD/UPGRADE/REMOVE/SYNC]
Nothing new here, excepted some reorganization.
[UPGRADE/REMOVE/SYNC]
The file pacman.c has been divided into several smaller files, namely
add.c, remove.c, sync.c and query.c, to hold the big parts: pacman_add,
upgrade.c, remove.c, sync.c and query.c, to hold the big parts: pacman_upgrade,
pacman_remove, pacman_sync.
These 3 functions have been split to ease the code reading.
LIMITATIONS/BEHAVIOR CHANGES COMPARED TO PACMAN 2.9
===================================================
Excepted missing features still needing to be implemented, one can
notice the following limitations:
API CHANGES BETWEEN 3.1 AND 3.2
===============================
- If pacman is out of date, the frontend displays a warning and recommends
to give up the on-going transanction. The frontend does not allow to
upgrade pacman itself on-the-fly, and thus it should be restarted with
only "pacman" as a target.
[REMOVED]
- alpm_db_whatprovides()
- alpm_splitdep (no longer public)
- trans->targets was removed, so alpm_trans_get_targets() as well
- error codes:
PM_ERR_OPT_*, PM_ERR_PKG_INSTALLED, PM_ERR_DLT_CORRUPTED,
PM_ERR_LIBARCHIVE_ERROR
- event: PM_TRANS_EVT_EXTRACT_DONE
- PM_TRANS_TYPE_ADD pmtranstype_t (add transaction)
- PM_TRANS_FLAG_DEPENDSONLY pmtransflag_t
- ...
[CHANGED]
- alpm_grp_get_pkgs returns with pmpkg_t list, not package-name list
- Swap parameters on PM_TRANS_CONV_INSTALL_IGNOREPKG callback function
- download callback API changed: alpm_cb_download, alpm_cb_totaldl split
(+ new alpm_option_get_totaldlcb(), alpm_option_set_totaldlcb() functions)
- unsigned long->off_t changes where size is used
- pmsyncpkg_t struct changes:
- pmsynctype_t and alpm_sync_get_type() were removed
- alpm_sync_get_data() was removed
- alpm_sync_get_removes() was added
[ADDED]
- alpm_delta_get_from_md5sum(), alpm_delta_get_to_md5sum()
- alpm_miss_get_causingpkg() (new causingpkg field in pmdepmissing_t)
- alpm_checkdbconflicts()
- alpm_sync_newversion()
- alpm_deptest()
- error codes :
PM_ERR_DLT_INVALID, PM_ERR_LIBARCHIVE, PM_ERR_LIBDOWNLOAD and
PM_ERR_EXTERNAL_DOWNLOAD
- flags:
PM_TRANS_FLAG_ALLEXPLICIT, PM_TRANS_FLAG_UNNEEDED and
PM_TRANS_FLAG_RECURSEALL
API CHANGES BETWEEN 3.2 AND 3.3
===============================
[REMOVED]
- pmsyncpkg_t struct (pmpkg_t is used for all types of transaction targets):
- alpm_sync_get_pkg()
- alpm_sync_get_removes() (use alpm_pkg_get_removes() instead)
- HoldPkg handling (it is the front-end's task):
- alpm_option_get_holdpkgs()
- alpm_option_add_holdpkg()
- alpm_option_set_holdpkgs()
- alpm_option_remove_holdpkg()
- PM_TRANS_CONV_REMOVE_HOLDPKG conversation
- Print URIs feature (it is the front-end's task):
- flag: PM_TRANS_FLAG_PRINTURIS
- event: PM_TRANS_EVT_PRINTURI
- alpm_delta_get_from_md5sum() and alpm_delta_get_to_md5sum()
- alpm_sync_sysupgrade()
- error codes:
PM_ERR_TRANS_COMMITING, PM_ERR_TRANS_DOWNLOADING, PM_ERR_PKG_LOAD,
PM_ERR_PKG_CANT_FRESH, PM_ERR_GRP_NOT_FOUND, PM_ERR_USER_ABORT,
PM_ERR_INTERNAL_ERROR, PM_ERR_DB_SYNC, PM_ERR_PKG_HOLD and
PM_ERR_LIBDOWNLOAD
[CHANGED]
- XferCommand support was removed, any fetch callback function can be defined:
- alpm_option_get_xfercommand() and alpm_option_set_xfercommand() were removed
- alpm_option_get_fetchcb() and alpm_option_set_fetchcb() were added
- function renames:
- alpm_db_getpkgcache() -> alpm_db_get_pkgcache()
- alpm_db_getgrpcache() -> alpm_db_get_grpcache()
- alpm_dep_get_string() -> alpm_dep_compute_string()
- alpm_get_md5sum() -> alpm_compute_md5sum()
- alpm_checkdbconflicts() -> alpm_checkconflicts()
- alpm_trans_sysupgrade() has a new enable_downgrade parameter
- alpm_checkdeps() and alpm_checkconflicts() require local package list instead
of local database
- the to-be-upgraded package is passed to the callback function with
PM_TRANS_EVT_UPGRADE_START (as the second parameter)
- the "requiredby" package is never passed to the callback function with
PM_TRANS_CONV_INSTALL_IGNOREPKG (the second parameter is always NULL)
[ADDED]
- alpm_pkg_get_db()
- alpm_pkg_get_removes()
- conversation: PM_TRANS_CONV_REMOVE_PKGS (remove unresolvable targets)
- flag: PM_TRANS_FLAG_NOLOCK (do not lock database)
- error codes:
PM_ERR_SERVER_NONE, PM_ERR_TRANS_NOT_LOCKED, PM_ERR_PKG_IGNORED and
PM_ERR_LIBFETCH

View File

@@ -10,34 +10,44 @@ If your language is not listed here and you wish it was, let the pacman mailing
list know you are interested in making a translation. We will be happy to add
your language to the mix.
* indicates the last active translator.
Czech (cs_CZ):
* Vojtěch Gondžala <vogo@seznam.cz>
Czech (cs):
Vojtěch Gondžala <vojtech.gondzala@gmail.com>
German (de):
* Matthias Gorissen <matthias@archlinux.de>
Pierre Schmitz <pierre@archlinux.de>
Matthias Gorissen <matthias@archlinux.de>
British English (en_GB):
* Jeff Bailes <thepizzaking@gmail.com>
Jeff Bailes <thepizzaking@gmail.com>
Spanish (es):
* Juan Pablo González Tognarelli <lord_jotape@yahoo.com.ar>
Juan Pablo González Tognarelli <lord_jotape@yahoo.com.ar>
Fernando Lagos <fernando@zerial.org>
French (fr):
* Chantry Xavier <shiningxc@gmail.com>
solsTiCe d'Hiver <solstice.dhiver@laposte.net>
Chantry Xavier <shiningxc@gmail.com>
Hungarian (hu):
* Nagy Gabor <ngaba@bibl.u-szeged.hu>
Nagy Gabor <ngaba@bibl.u-szeged.hu>
Avramucz Péter <muczyjoe@gmail.com>
Italian (it):
* Giovanni 'voidnull' Scafora <linuxmania@gmail.com>
Alessio 'mOLOk' Bolognino <themolok@gmail.com>
Lorenzo '^zanDarK' Masini <lorenxo86@gmail.com>
Polish (pl_PL):
* Mateusz Jędrasik <m.jedrasik@gmail.com>
Giovanni Scafora <giovanni@archlinux.org>
Kazakh (kk):
Baurzhan Muftakhidinov <baurthefirst@gmail.com>
Polish (pl):
Mateusz Herych <heniekk@gmail.com>
Jaroslaw Swierczynski <swiergot@gmail.com>
Mateusz Jędrasik <m.jedrasik@gmail.com>
Brazilian Portuguese (pt_BR):
* João Felipe Santos <joao.eel@gmail.com>
Douglas Soares de Andrade <douglas@archlinux-br.org>
Hugo Doria <hugodoria@archlinux-br.org>
Lincoln de Sousa <lincoln@archlinux-br.org>
Leandro Inácio <leandro@archlinux-br.org>
Russian (ru_RU):
Armando M. Baratti <ambaratti@archlinux-br.org>
Rodrigo Flores <flores@archlinux-br.org>
Marcelo Cavalcante <kalibslack@gmail.com>
Romanian (ro):
Volodia Macovei <blog@volodia.ro>
Russian (ru):
Sergey Tereschenko <serg.partizan@gmail.com>
Vitaly Dolgov <ferhiord@gmail.com>
Oleg Finkelshteyn <olegfink@gmail.com>
Vladimir Bayrakovskiy <4rayven@gmail.com>
Turkish (tr):
Samed Beyribey <ras0ir@eventualis.org>
Alper KANAT <alperkanat@gmail.com>
Ukrainian (uk):
Roman Kyrylych (Роман Кирилич) <roman.kyrylych@gmail.com>
Ivan Kovnatsky (Іван Ковнацький) <sevenfourk@gmail.com>
Simplified Chinese (zh_CN):
甘露(Lu.Gan) <rhythm.gan@gmail.com>

View File

@@ -3770,7 +3770,7 @@ AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
#
if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
_LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1),
_LT_AC_TAGVAR(lt_cv_prog_compiler_pic_works, $1),
[$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC])], [],
[case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
"" | " "*) ;;
@@ -3794,7 +3794,7 @@ esac
#
wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\"
AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
_LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),
_LT_AC_TAGVAR(lt_cv_prog_compiler_static_works, $1),
$lt_tmp_static_flag,
[],
[_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])

View File

@@ -2,33 +2,36 @@
[ -f Makefile ] && make distclean
rm -rf autom4te.cache
rm -rf {Makefile.in,Makefile}
rm -rf {config.h.in,config.h}
rm -rf config.status
rm -rf configure
rm -rf stamp*
rm -rf aclocal.m4
rm -rf compile
rm -rf libtool
rm -f {Makefile.in,Makefile}
rm -f {config.h.in,config.h}
rm -f config.status
rm -f configure
rm -f stamp*
rm -f aclocal.m4
rm -f compile
rm -f libtool
rm -rf lib/libalpm/{Makefile.in,Makefile}
rm -rf src/util/{Makefile.in,Makefile}
rm -rf src/pacman/{Makefile.in,Makefile}
rm -rf scripts/{Makefile.in,Makefile}
rm -rf etc/{Makefile.in,Makefile}
rm -rf etc/pacman.d/{Makefile.in,Makefile}
rm -rf etc/abs/{Makefile.in,Makefile}
rm -rf pactest/{Makefile.in,Makefile}
rm -rf doc/{Makefile.in,Makefile}
rm -rf doc/html/*.html
rm -rf doc/man3/*.3
rm -f lib/libalpm/{Makefile.in,Makefile}
rm -f src/util/{Makefile.in,Makefile}
rm -f src/pacman/{Makefile.in,Makefile}
rm -f scripts/{Makefile.in,Makefile}
rm -f etc/{Makefile.in,Makefile}
rm -f etc/pacman.d/{Makefile.in,Makefile}
rm -f etc/abs/{Makefile.in,Makefile}
rm -f pactest{,/tests}/{Makefile.in,Makefile}
rm -f contrib/{Makefile.in,Makefile}
rm -f doc/{Makefile.in,Makefile}
rm -rf src/pacman/po/{Makefile.in,Makefile}
rm -rf src/pacman/po/POTFILES
rm -rf src/pacman/po/stamp-po
rm -rf src/pacman/po/*.gmo
rm -f pactest/*.pyc
rm -f doc/html/*.html
rm -f doc/man3/*.3
rm -rf lib/libalpm/po/{Makefile.in,Makefile}
rm -rf lib/libalpm/po/POTFILES
rm -rf lib/libalpm/po/stamp-po
rm -rf lib/libalpm/po/*.gmo
rm -f po/{Makefile.in,Makefile}
rm -f po/POTFILES
rm -f po/stamp-po
rm -f po/*.gmo
rm -f lib/libalpm/po/{Makefile.in,Makefile}
rm -f lib/libalpm/po/POTFILES
rm -f lib/libalpm/po/stamp-po
rm -f lib/libalpm/po/*.gmo

36
config.guess vendored
View File

@@ -1,10 +1,10 @@
#! /bin/sh
# Attempt to guess a canonical system name.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
# Inc.
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
# Free Software Foundation, Inc.
timestamp='2007-05-17'
timestamp='2008-01-23'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -56,8 +56,8 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc.
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -330,7 +330,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit ;;
i86pc:SunOS:5.*:* | ix86xen:SunOS:5.*:*)
i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit ;;
sun4*:SunOS:6*:*)
@@ -532,7 +532,7 @@ EOF
echo rs6000-ibm-aix3.2
fi
exit ;;
*:AIX:*:[45])
*:AIX:*:[456])
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
IBM_ARCH=rs6000
@@ -793,12 +793,15 @@ EOF
exit ;;
*:Interix*:[3456]*)
case ${UNAME_MACHINE} in
x86)
x86)
echo i586-pc-interix${UNAME_RELEASE}
exit ;;
EM64T | authenticamd)
echo x86_64-unknown-interix${UNAME_RELEASE}
exit ;;
IA64)
echo ia64-unknown-interix${UNAME_RELEASE}
exit ;;
esac ;;
[345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
echo i${UNAME_MACHINE}-pc-mks
@@ -833,7 +836,14 @@ EOF
echo ${UNAME_MACHINE}-pc-minix
exit ;;
arm*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
eval $set_cc_for_build
if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_EABI__
then
echo ${UNAME_MACHINE}-unknown-linux-gnu
else
echo ${UNAME_MACHINE}-unknown-linux-gnueabi
fi
exit ;;
avr32*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
@@ -954,8 +964,8 @@ EOF
x86_64:Linux:*:*)
echo x86_64-unknown-linux-gnu
exit ;;
xtensa:Linux:*:*)
echo xtensa-unknown-linux-gnu
xtensa*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
i*86:Linux:*:*)
# The BFD linker knows what the default object file format is, so
@@ -1474,9 +1484,9 @@ This script, last modified $timestamp, has failed to recognize
the operating system you are using. It is advised that you
download the most up to date version of the config scripts from
http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
and
http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
If the version you run ($0) is already up to date, please
send the following data and any information you think might be

48
config.sub vendored
View File

@@ -1,10 +1,10 @@
#! /bin/sh
# Configuration validation subroutine script.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
# Inc.
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
# Free Software Foundation, Inc.
timestamp='2007-04-29'
timestamp='2008-01-16'
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
@@ -72,8 +72,8 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.sub ($timestamp)
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc.
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -369,10 +369,14 @@ case $basic_machine in
| v850-* | v850e-* | vax-* \
| we32k-* \
| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
| xstormy16-* | xtensa-* \
| xstormy16-* | xtensa*-* \
| ymp-* \
| z8k-*)
;;
# Recognize the basic CPU types without company name, with glob match.
xtensa*)
basic_machine=$basic_machine-unknown
;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
386bsd)
@@ -443,6 +447,14 @@ case $basic_machine in
basic_machine=ns32k-sequent
os=-dynix
;;
blackfin)
basic_machine=bfin-unknown
os=-linux
;;
blackfin-*)
basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
os=-linux
;;
c90)
basic_machine=c90-cray
os=-unicos
@@ -475,8 +487,8 @@ case $basic_machine in
basic_machine=craynv-cray
os=-unicosmp
;;
cr16c)
basic_machine=cr16c-unknown
cr16)
basic_machine=cr16-unknown
os=-elf
;;
crds | unos)
@@ -668,6 +680,14 @@ case $basic_machine in
basic_machine=m68k-isi
os=-sysv
;;
m68knommu)
basic_machine=m68k-unknown
os=-linux
;;
m68knommu-*)
basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
os=-linux
;;
m88k-omron*)
basic_machine=m88k-omron
;;
@@ -813,6 +833,14 @@ case $basic_machine in
basic_machine=i860-intel
os=-osf
;;
parisc)
basic_machine=hppa-unknown
os=-linux
;;
parisc-*)
basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
os=-linux
;;
pbd)
basic_machine=sparc-tti
;;
@@ -1021,6 +1049,10 @@ case $basic_machine in
basic_machine=tic6x-unknown
os=-coff
;;
tile*)
basic_machine=tile-unknown
os=-linux-gnu
;;
tx39)
basic_machine=mipstx39-unknown
;;

View File

@@ -40,29 +40,19 @@ AC_PREREQ(2.60)
#
# Bugfix releases:
# pacman_version_micro += 1
#
# pacman_version_suffix should be similar to one of the following:
# For beta releases: [beta2]
# For code under development: [devel]
# For production releases: []
m4_define([lib_current], [3])
m4_define([lib_current], [4])
m4_define([lib_revision], [0])
m4_define([lib_age], [1])
m4_define([lib_age], [0])
m4_define([pacman_version_major], [3])
m4_define([pacman_version_minor], [1])
m4_define([pacman_version_micro], [1])
m4_define([pacman_version_suffix], [])
m4_define([pacman_version_minor], [3])
m4_define([pacman_version_micro], [0])
m4_define([pacman_version],
[pacman_version_major.pacman_version_minor.pacman_version_micro])
m4_define([pacman_display_version],
pacman_version[]m4_ifdef([pacman_version_suffix],[pacman_version_suffix]))
# Autoconf initialization
# AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
AC_INIT([Pacman Package Manager], [pacman_display_version],
[pacman-dev@archlinux.org], [pacman])
AC_INIT([pacman], [pacman_version], [pacman-dev@archlinux.org])
AC_CONFIG_SRCDIR([config.h.in])
AC_CONFIG_HEADERS([config.h])
@@ -80,48 +70,54 @@ AC_DEFINE_UNQUOTED([LIB_VERSION], ["$LIB_VERSION"], [libalpm version number])
# Help line for root directory
AC_ARG_WITH(root-dir,
AC_HELP_STRING([--with-root-dir=path], [set the location of pacman's root operating directory]),
AS_HELP_STRING([--with-root-dir=path], [set the location of pacman's root operating directory]),
[ROOTDIR=$withval], [ROOTDIR=/])
# Help line for package extension
AC_ARG_WITH(pkg-ext,
AC_HELP_STRING([--with-pkg-ext=ext], [set the file extension used by packages]),
AS_HELP_STRING([--with-pkg-ext=ext], [set the file extension used by packages]),
[PKGEXT=$withval], [PKGEXT=.pkg.tar.gz])
# Help line for source package directory
AC_ARG_WITH(src-ext,
AC_HELP_STRING([--with-src-ext=ext], [set the file extension used by source packages]),
AS_HELP_STRING([--with-src-ext=ext], [set the file extension used by source packages]),
[SRCEXT=$withval], [SRCEXT=.src.tar.gz])
# Help line for database extension
AC_ARG_WITH(db-ext,
AC_HELP_STRING([--with-db-ext=ext], [set the file extension used by the database]),
AS_HELP_STRING([--with-db-ext=ext], [set the file extension used by the database]),
[DBEXT=$withval], [DBEXT=.db.tar.gz])
# Help line for buildscript filename
AC_ARG_WITH(buildscript,
AS_HELP_STRING([--with-buildscript=name], [set the build script name used by makepkg]),
[BUILDSCRIPT=$withval], [BUILDSCRIPT=PKGBUILD])
# Help line for libfetch
AC_ARG_ENABLE(internal-download,
AS_HELP_STRING([--disable-internal-download], [do not build with libfetch support]),
[internaldownload=$enableval], [internaldownload=yes])
# Help line for documentation
AC_ARG_ENABLE(doc,
AC_HELP_STRING([--disable-doc], [prevent make from looking at doc/ dir]),
AS_HELP_STRING([--disable-doc], [prevent make from looking at doc/ dir]),
[wantdoc=$enableval], [wantdoc=yes])
# Help line for doxygen
AC_ARG_ENABLE(doxygen,
AC_HELP_STRING([--enable-doxygen], [build your own API docs via Doxygen]),
AS_HELP_STRING([--enable-doxygen], [build your own API docs via Doxygen]),
[wantdoxygen=$enableval], [wantdoxygen=no])
# Help line for asciidoc
AC_ARG_ENABLE(asciidoc,
AC_HELP_STRING([--enable-asciidoc], [build your own manpages with Asciidoc]),
[wantasciidoc=$enableval], [wantasciidoc=no])
# Help line for debug
AC_ARG_ENABLE(debug,
AC_HELP_STRING([--enable-debug], [enable debugging support]),
AS_HELP_STRING([--enable-debug], [enable debugging support]),
[debug=$enableval], [debug=no])
# Help line for pacman.static
AC_ARG_ENABLE(pacman-static,
AC_HELP_STRING([--disable-pacman-static], [do not build static version of pacman]),
[pacmanstatic=$enableval], [pacmanstatic=yes])
# Help line for using git version in pacman version string
AC_ARG_ENABLE(git-version,
AS_HELP_STRING([--enable-git-version],
[enable use of git version in version string if available]),
[wantgitver=$enableval], [wantgitver=no])
# Checks for programs.
AC_PROG_AWK
@@ -129,22 +125,32 @@ AC_PROG_CC_C99
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PROG_RANLIB
AC_PROG_LIBTOOL
AC_CHECK_PROGS([PYTHON], [python2.5 python2.4 python], [false])
AC_CHECK_PROGS([PYTHON], [python2.6 python2.5 python], [false])
# find installed gettext
AM_GNU_GETTEXT([external])
AM_GNU_GETTEXT_VERSION(0.13.1)
# Check for libarchive
AC_CHECK_LIB([archive], [archive_read_data], , AC_MSG_ERROR([libarchive is needed to compile pacman!]))
AC_CHECK_LIB([archive], [archive_read_data], ,
AC_MSG_ERROR([libarchive is needed to compile pacman!]))
# Check for libdownload
AC_CHECK_LIB([download], [downloadParseURL], , AC_MSG_ERROR([libdownload is needed to compile pacman!]))
# Enable or disable usage of libfetch
AC_MSG_CHECKING(whether to link with libfetch)
if test "x$internaldownload" = "xyes" ; then
AC_MSG_RESULT(yes)
AC_DEFINE([INTERNAL_DOWNLOAD], , [Use internal download library])
# Check for a download library if it was actually requested
AC_CHECK_LIB([fetch], [fetchParseURL], ,
AC_MSG_ERROR([libfetch is needed to compile with internal download support]) )
else
AC_MSG_RESULT(no)
fi
AM_CONDITIONAL(INTERNAL_DOWNLOAD, test "x$internaldownload" = "xyes")
# Checks for header files.
AC_CHECK_HEADERS([fcntl.h libintl.h limits.h locale.h string.h strings.h sys/ioctl.h sys/statvfs.h sys/time.h syslog.h wchar.h])
AC_CHECK_HEADERS([fcntl.h libintl.h limits.h locale.h string.h strings.h sys/ioctl.h sys/param.h sys/statvfs.h sys/syslimits.h sys/time.h syslog.h wchar.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_C_INLINE
@@ -156,13 +162,13 @@ AC_STRUCT_TM
AC_TYPE_UID_T
# Checks for library functions.
AC_FUNC_CLOSEDIR_VOID
AC_FUNC_FORK
AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
AC_FUNC_MKTIME
AC_TYPE_SIGNAL
AC_CHECK_FUNCS([realpath regcomp strcasecmp strdup strerror strnlen \
strndup strrchr strsep strstr strverscmp uname geteuid])
AC_CHECK_FUNCS([geteuid realpath regcomp strcasecmp \
strndup strrchr strsep swprintf \
wcwidth uname])
# Enable large file support if available
AC_SYS_LARGEFILE
@@ -172,13 +178,30 @@ GCC_VISIBILITY_CC
# Check if we have -fgnu89-inline flag
GCC_GNU89_INLINE_CC
# Host-dependant flags
case "${host}" in
*-*-cygwin*)
# Host-dependant definitions
SIZECMD="stat -c %s"
SEDINPLACE="sed -i"
case "${host_os}" in
*bsd*)
SIZECMD="stat -f %z"
SEDINPLACE="sed -i ''"
;;
cygwin*)
host_os_cygwin=yes
CFLAGS="$CFLAGS -DCYGWIN"
;;
darwin*)
host_os_darwin=yes
SIZECMD="/usr/bin/stat -f %z"
SEDINPLACE="/usr/bin/sed -i ''"
;;
esac
AM_CONDITIONAL([CYGWIN], test "x$host_os_cygwin" = "xyes")
AM_CONDITIONAL([DARWIN], test "x$host_os_darwin" = "xyes")
AC_SUBST(SIZECMD)
AC_SUBST(SEDINPLACE)
# Check for architecture, used in default makepkg.conf
# (Note single space left after CARCHFLAGS)
case "${host}" in
@@ -235,9 +258,9 @@ fi
AM_CONDITIONAL(WANT_DOC, test "x$wantdoc" = "xyes")
# Check for doxygen support and status
AC_CHECK_PROGS([DOXYGEN], [doxygen])
AC_MSG_CHECKING([for doxygen])
if test "x$wantdoxygen" = "xyes" ; then
AC_CHECK_PROGS([DOXYGEN], [doxygen])
if test $DOXYGEN ; then
AC_MSG_RESULT([yes])
usedoxygen=yes
@@ -251,23 +274,6 @@ else
fi
AM_CONDITIONAL(USE_DOXYGEN, test "x$usedoxygen" = "xyes")
# Check for asciidoc support and status
AC_MSG_CHECKING([for asciidoc])
if test "x$wantasciidoc" = "xyes" ; then
AC_CHECK_PROGS([ASCIIDOC], [asciidoc])
if test $ASCIIDOC ; then
AC_MSG_RESULT([yes])
useasciidoc=yes
else
AC_MSG_RESULT([no, asciidoc missing])
useasciidoc=no
fi
else
AC_MSG_RESULT([no, disabled by configure])
useasciidoc=no
fi
AM_CONDITIONAL(USE_ASCIIDOC, test "x$useasciidoc" = "xyes")
# Enable or disable debug code
AC_MSG_CHECKING(for debug mode request)
if test "x$debug" = "xyes" ; then
@@ -284,15 +290,24 @@ else
CFLAGS="$CFLAGS -Wall"
fi
# Enable or disable inclusion of pacman.static
AC_MSG_CHECKING(whether to build pacman.static)
if test "x$pacmanstatic" = "xyes" ; then
AC_MSG_RESULT(yes)
AC_DEFINE([INCLUDE_PACMAN_STATIC], , [Build pacman.static])
# Enable or disable use of git version in pacman version string
AC_CHECK_PROGS([GIT], [git])
AC_CHECK_FILE([.git/], hasgitdir=yes)
AC_MSG_CHECKING(whether to use git version if available)
if test "x$wantgitver" = "xyes" ; then
if test $GIT -a "x$hasgitdir" = "xyes"; then
AC_MSG_RESULT([yes])
usegitver=yes
AC_DEFINE([USE_GIT_VERSION], , [Use GIT version in version string])
else
AC_MSG_RESULT([no, git or .git dir missing])
usegitver=no
fi
else
AC_MSG_RESULT(no)
AC_MSG_RESULT([no, disabled by configure])
usegitver=no
fi
AM_CONDITIONAL(INCLUDE_PACMAN_STATIC, test "x$pacmanstatic" = "xyes")
AM_CONDITIONAL(USE_GIT_VERSION, test "x$usegitver" = "xyes")
# Set root directory
AC_SUBST(ROOTDIR)
@@ -305,6 +320,9 @@ AC_DEFINE_UNQUOTED([SRCEXT], "$SRCEXT", [The file extension used by pacman sourc
# Set database file extension
AC_SUBST(DBEXT)
AC_DEFINE_UNQUOTED([DBEXT], "$DBEXT", [The file extension used by pacman databases])
# Set makepkg build script name
AC_SUBST(BUILDSCRIPT)
AC_DEFINE_UNQUOTED([BUILDSCRIPT], "$BUILDSCRIPT", [The build script name used by makepkg])
# Configuration files
AC_CONFIG_FILES([
@@ -317,13 +335,14 @@ doc/Makefile
etc/Makefile
po/Makefile.in
pactest/Makefile
pactest/tests/Makefile
contrib/Makefile
Makefile
])
AC_OUTPUT
echo "
pacman_display_version:
${PACKAGE_NAME}:
Build information:
source code location : ${srcdir}
@@ -340,23 +359,26 @@ pacman_display_version:
Architecture : ${CARCH}
Architecture flags : ${CARCHFLAGS}
Host Type : ${CHOST}
Filesize command : ${SIZECMD}
In-place sed command : ${SEDINPLACE}
libalpm version : ${LIB_VERSION}
libalpm version info : ${LIB_VERSION_INFO}
pacman version : ${PACKAGE_VERSION}
using git version : ${usegitver}
Directory and file information:
root working directory : ${ROOTDIR}
package extension : ${PKGEXT}
source pkg extension : ${SRCEXT}
database extension : ${DBEXT}
build script name : ${BUILDSCRIPT}
Compilation options:
Run make in doc/ dir : ${wantdoc}
Use download library : ${internaldownload}
Doxygen support : ${usedoxygen}
Asciidoc support : ${useasciidoc}
debug support : ${debug}
build pacman.static : ${pacmanstatic}
"
# vim:set ts=2 sw=2 noet:

0
contrib/.gitignore vendored
View File

View File

@@ -1,10 +1,15 @@
EXTRA_DIST = \
PKGBUILD.vim \
bacman \
bash_completion \
gensync \
pacdiff \
paclist \
pacscripts \
pacsearch \
re-pacman \
vimproject \
pactree \
updatesync \
vimprojects \
wget-xdelta.sh \
zsh_completion \
README

View File

@@ -9,7 +9,7 @@
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
finish
endif
let b:main_syntax = "sh"
@@ -57,32 +57,38 @@ syn keyword pb_k_license license contained
syn keyword pbLicense APACHE CDDL EPL FDL GPL LGPL MPL PHP RUBY ZLIB ISC MIT BSD contained
syn match pbLicenseCustom /custom\(:[[:alnum:]]*\)*/ contained
syn match pbIllegalLicense /[^='"() ]/ contained contains=pbLicenseCustom,pbLicense
syn match pbLicenseGroup /^license=.*/ contains=pb_k_license,pbLicenseCustom,pbLicense,pbIllegalLicense,shDoubleQuote,shSingleQuote
syn region pbLicenseGroup start=/^license=(/ end=/)/ contains=pb_k_license,pbLicenseCustom,pbLicense,pbIllegalLicense
" backup
syn keyword pb_k_backup backup contained
syn match pbValidBackup /\.\?[[:alpha:]]*\/[[:alnum:]\{\}+._$-]*]*/ contained
syn match pbBackupGroup /^backup=.*/ contains=pb_k_backup,pbValidBackup,shDoubleQuote,shSingleQuote
syn region pbBackupGroup start=/^backup=(/ end=/)/ contains=pb_k_backup,pbValidBackup,shDoubleQuote,shSingleQuote
" arch
syn keyword pb_k_arch arch contained
syn keyword pbArch i686 x86_64 ppc contained
syn match pbIllegalArch /[^='() ]/ contained contains=pbArch
syn match pbArchGroup /^arch=.*/ contains=pb_k_arch,pbArch,pbIllegalArch,shDoubleQuote,shSingleQuote
syn match pbIllegalArch /[^='"() ]/ contained contains=pbArch
syn region pbArchGroup start=/^arch=(/ end=/)/ contains=pb_k_arch,pbArch,pbIllegalArch
" makedepends
syn keyword pb_k_makedepends makedepends contained
syn match pbValidMakedepends /\([[:alnum:]]\|+\|-\|_\)*/ contained
syn region pbMakedependsGroup start=/^makedepends=(/ end=/)/ contains=pb_k_makedepends,pbValidMakedepends,shDoubleQuote,shSingleQuote
" groups
syn keyword pb_k_groups groups contained
syn match pbValidGroups /\([[:alnum:]]\|+\|-\|_\)*/ contained
syn region pbGroupsGroup start=/^groups=(/ end=/)/ contains=pb_k_groups,pbValidGroups,shDoubleQuote,shSingleQuote
" depends
syn keyword pb_k_depends depends contained
syn match pbValidDepends /\([[:alnum:]]\|+\|-\|_\)*/ contained
syn region pbDependsGroup start=/^depends=(/ end=/)/ contains=pb_k_depends,pbValidDepends,shDoubleQuote,shSingleQuote
" XXX little hack to color conflicts/provides/replaces keyword even without =()
syn match pbkw /^\(conflicts\|provides\|replaces\)/ contains=pb_k_conflicts,pb_k_provides,pb_k_replaces
hi def link pbkw keyword
" makedepends
syn keyword pb_k_makedepends makedepends contained
syn match pbValidMakedepends /\([[:alnum:]]\|+\|-\|_\)*/ contained
syn region pbMakedependsGroup start=/^makedepends=(/ end=/)/ contains=pb_k_makedepends,pbValidMakedepends,shDoubleQuote,shSingleQuote
" optdepends
syn keyword pb_k_optdepends optdepends contained
syn match pbValidOptdepends /\([[:alnum:]]\|+\|-\|_\)*/ contained
syn region pbOptdependsGroup start=/^optdepends=(/ end=/)/ contains=pb_k_optdepends,pbValidOptdepends,shDoubleQuote,shSingleQuote
" conflicts
syn keyword pb_k_conflicts conflicts contained
@@ -100,7 +106,7 @@ syn match pbValidReplaces /\([[:alnum:]]\|+\|-\|_\)*/ contained
syn region pbReplacesGroup start=/^replaces=(/ end=/)/ contains=pb_k_replaces,pbValidReplaces,shDoubleQuote,shSingleQuote
" install
" XXX remove install from bashStatement, fix strage bug
" XXX remove install from bashStatement, fix strange bug
syn clear bashStatement
syn keyword bashStatement chmod clear complete du egrep expr fgrep find gnufind gnugrep grep less ls mkdir mv rm rmdir rpm sed sleep sort strip tail touch
@@ -110,7 +116,7 @@ syn match pbIllegalInstall /[^=]/ contained contains=pbValidInstall
syn match pbInstallGroup /^install=.*/ contains=pb_k_install,pbValidInstall,pbIllegalInstall,shDeref,shDoubleQuote,shSingleQuote
" source:
" XXX remove source from shStatement, fixstrange bug
" XXX remove source from shStatement, fix strange bug
syn clear shStatement
syn keyword shStatement xxx wait getopts return autoload whence printf true popd nohup enable r trap readonly fc fg kill ulimit umask disown stop pushd read history logout times local exit test pwd time eval integer suspend dirs shopt hash false newgrp bg print jobs continue functions exec help cd break unalias chdir type shift builtin let bind
@@ -125,7 +131,7 @@ hi def link pbDerefEmulation PreProc
syn keyword pb_k_md5sums md5sums contained
syn match pbIllegalMd5sums /[^='"()\/ ]/ contained contains=pbValidMd5sums
syn match pbValidMd5sums /[[:alnum:]]\{32\}/ contained
syn region pbMd5sumsGroup start=/^md5sums/ end=/)/ contains=pb_k_md5sums,pbMd5Quotes,pbMd5Hash,pbIllegalMd5sums
syn region pbMd5sumsGroup start=/^md5sums/ end=/)/ contains=pb_k_md5sums,pbMd5Quotes,pbMd5Hash,pbIllegalMd5sums keepend
syn match pbMd5Quotes /'.*'\|".*"/ contained contains=pbMd5Hash,pbIllegalMd5sums
syn match pbMd5Hash /[[:alnum:]]\+/ contained contains=pbValidMd5sums
hi def link pbMd5Quotes Keyword
@@ -136,7 +142,7 @@ hi def link pbValidMd5sums Number
syn keyword pb_k_sha1sums sha1sums contained
syn match pbIllegalSha1sums /[^='"()\/ ]/ contained contains=pbValidSha1sums
syn match pbValidSha1sums /[[:alnum:]]\{40\}/ contained
syn region pbSha1sumsGroup start=/^sha1sums/ end=/)/ contains=pb_k_sha1sums,pbSha1Quotes,pbSha1Hash,pbIllegalSha1sums
syn region pbSha1sumsGroup start=/^sha1sums/ end=/)/ contains=pb_k_sha1sums,pbSha1Quotes,pbSha1Hash,pbIllegalSha1sums keepend
syn match pbSha1Quotes /'.*'\|".*"/ contained contains=pbSha1Hash,pbIllegalSha1sums
syn match pbSha1Hash /[[:alnum:]]\+/ contained contains=pbValidSha1sums
hi def link pbSha1Quotes Keyword
@@ -145,7 +151,7 @@ hi def link pbValidSha1sums Number
" options
syn keyword pb_k_options options contained
syn match pbOptions /\(no\)\?\(strip\|docs\|libtool\|emptydirs\|ccache\|distcc\|makeflags\|force\)/ contained
syn match pbOptions /\(no\)\?\(strip\|docs\|libtool\|emptydirs\|zipman\|ccache\|distcc\|makeflags\|force\)/ contained
syn match pbOptionsNeg /\!/ contained
syn match pbOptionsDeprec /no/ contained
syn region pbOptionsGroup start=/^options=(/ end=/)/ contains=pb_k_options,pbOptions,pbOptionsNeg,pbOptionsDeprec,pbIllegalOption,shDoubleQuote,shSingleQuote
@@ -195,7 +201,9 @@ hi def link pb_k_backup pbKeywords
hi def link pb_k_arch pbKeywords
hi def link pbIllegalArch Error
hi def link pb_k_groups pbKeywords
hi def link pb_k_makedepends pbKeywords
hi def link pb_k_optdepends pbKeywords
hi def link pb_k_depends pbKeywords
hi def link pb_k_replaces pbKeywords
hi def link pb_k_conflicts pbKeywords

View File

@@ -12,16 +12,29 @@ zsh_completion - a zsh completion script, install (with a rename) to
pacdiff - a simple pacnew/pacorig/pacsave updater for /etc/.
paclist - list all packages installed from a given repository. Useful for
seeing which packages you may have installed from the testing repository,
for instance.
pacscripts - tries to print out the {pre,post}_{install,remove,upgrade}
scripts of a given package.
pacsearch - a colorized search combining both -Ss and -Qs output. Installed
packages are easily identified with a *** and local-only packages are also
listed.
re-pacman - regenerate a pacman package based on installed files and the pacman
pactree - generate a dependency tree of an installed package in textual or
graphical form (using graphviz).
bacman - regenerate a pacman package based on installed files and the pacman
database entries. Useful for reuse, or possible config file extension.
vimproject - a project file for the vim project plugin (some files listed
may need to be updated).
vimprojects - a project file for the vim project plugin.
wget-xdelta.sh - A download script for pacman which allows binary deltas
generated with makepkg to be used instead of downloading full binary packages.
This should cut download sizes for some package upgrades significantly.
gensync, updatesync - The former repository management scripts that have since
been superseded by repo-add and repo-remove. They are here for posterity's
sake, and to show how repo-add and repo-remove can be wrapped in other scripts.

284
contrib/bacman Executable file
View File

@@ -0,0 +1,284 @@
#!/bin/bash
#
# bacman: recreate a package from a running system
# This script rebuilds an already installed package using metadata
# stored into the pacman database and system files
#
# (c) 2008 - locci <carlocci_at_gmail_dot_com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
readonly progname="bacman"
readonly progver="0.2.0"
#
# User Friendliness
#
function usage(){
echo "This program recreates a package using pacman's db and system files"
echo "Usage: $progname <installed package name>"
echo "Example: $progname kernel26"
}
if [ $# -ne 1 ] ; then
usage
exit 1
fi
if [ "$1" = "--help" -o "$1" = "-h" ] ; then
usage
exit 0
fi
if [ "$1" = "--version" -o "$1" = "-v" ]; then
echo "$progname version $progver"
echo "Copyright (C) 2008 locci"
exit 0
fi
#
# Fakeroot support
#
if [ $EUID -gt 0 ]; then
if [ -f /usr/bin/fakeroot ]; then
echo "Entering fakeroot environment"
export INFAKEROOT="1"
/usr/bin/fakeroot -u -- $0 $1
exit $?
else
echo "WARNING: installing fakeroot or running ${progname} as root is required to"
echo " preserve the ownership permissions of files in some packages"
echo ""
fi
fi
#
# Setting environmental variables
#
if [ ! -r /etc/pacman.conf ]; then
echo "ERROR: unable to read /etc/pacman.conf"
exit 1
fi
eval $(awk '/DBPath/ {print $1$2$3}' /etc/pacman.conf)
pac_db="${DBPath:-/var/lib/pacman/}/local"
if [ ! -r /etc/makepkg.conf ]; then
echo "ERROR: unable to read /etc/makepkg.conf"
exit 1
fi
source "/etc/makepkg.conf"
if [ -r ~/.makepkg.conf ]; then
source ~/.makepkg.conf
fi
pkg_arch=${CARCH:-'unknown'}
pkg_dest="${PKGDEST:-$PWD}"
pkg_ext=${PKGEXT:-'.pkg.tar.gz'}
pkg_pkger=${PACKAGER:-'Unknown Packager'}
pkg_name="$1"
pkg_dir="$(echo $pac_db/$pkg_name-[0-9]*)"
pkg_namver="${pkg_dir##*/}"
#
# Checks everything is in place
#
if [ ! -d "$pac_db" ] ; then
echo "ERROR: pacman database directory ${pac_db} not found"
exit 1
fi
if [ ! -d "$pkg_dir" ] ; then
echo "ERROR: package ${pkg_name} not found in pacman database"
exit 1
fi
#
# Begin
#
echo Package: ${pkg_namver}
work_dir=$(mktemp -d -p /tmp)
cd "$work_dir" || exit 1
#
# File copying
#
echo "Copying package files..."
cat "$pkg_dir"/files |
while read i; do
if [ -z "$i" ] ; then
continue
fi
if [[ "$i" =~ %[A-Z]*% ]] ; then
current=$i
continue
fi
case $current in
%FILES%)
ret=0
if [ -e "/$i" ]; then
bsdtar -cnf - "/$i" 2> /dev/null | bsdtar -xpf -
# Workaround to bsdtar not reporting a missing file as an error
if [ ! -e "$work_dir/$i" ] && [ -L "$work_dir/$i"]; then
echo ""
echo "ERROR: unable to add /$i to the package"
echo " If your user does not have permssion to read this file then"
echo " you will need to run $progname as root"
rm -rf "$work_dir"
exit 1
fi
else
echo ""
echo "WARNING: package file /$i is missing"
echo ""
fi
;;
esac
done
ret=$?
if [ $ret -ne 0 ]; then
rm -rf "$work_dir"
exit 1
fi
pkg_size=$(du -sk | awk '{print $1 * 1024}')
if [ -f "$pkg_dir/install" ] ; then
cp "$pkg_dir/install" "$work_dir/.INSTALL"
fi
if [ -f $pkg_dir/changelog ] ; then
cp "$pkg_dir/changelog" "$work_dir/.CHANGELOG"
fi
#
# .PKGINFO stuff
#
echo Generating .PKGINFO metadata...
echo "# Generated by $progname $progver" > .PKGINFO
if [ "$INFAKEROOT" = "1" ]; then
echo "# Using $(fakeroot -v)" >> .PKGINFO
fi
echo "# $(LC_ALL=C date)" >> .PKGINFO
echo "#" >> .PKGINFO
cat "$pkg_dir"/{desc,files,depends} |
while read i; do
if [[ -z "$i" ]]; then
continue;
fi
if [[ "$i" =~ %[A-Z]*% ]] ; then
current=$i
continue
fi
case "$current" in
# desc
%NAME%)
echo "pkgname = $i" >> .PKGINFO
;;
%VERSION%)
echo "pkgver = $i" >> .PKGINFO
;;
%DESC%)
echo "pkgdesc = $i" >> .PKGINFO
;;
%URL%)
echo "url = $i" >> .PKGINFO
;;
%LICENSE%)
echo "license = $i" >> .PKGINFO
;;
%ARCH%)
echo "arch = $i" >> .PKGINFO
;;
%BUILDDATE%)
echo "builddate = $(date -u "+%s")" >> .PKGINFO
;;
%PACKAGER%)
echo "packager = $pkg_pkger" >> .PKGINFO
;;
%SIZE%)
echo "size = $pkg_size" >> .PKGINFO
;;
%GROUPS%)
echo "group = $i" >> .PKGINFO
;;
%REPLACES%)
echo "replaces = $i" >> .PKGINFO
;;
%FORCE%)
echo "force = true" >> .PKGINFO
;;
# files
%BACKUP%)
# strip the md5sum after the tab
echo "backup = ${i%%$'\t'*}" >> .PKGINFO
;;
# depends
%DEPENDS%)
echo "depend = $i" >> .PKGINFO
;;
%OPTDEPENDS%)
echo "optdepend = $i" >> .PKGINFO
;;
%CONFLICTS%)
echo "conflict = $i" >> .PKGINFO
;;
%PROVIDES%)
echo "provides = $i" >> .PKGINFO
;;
esac
done
#
# Fixes owner:group and permissions for .PKGINFO, .CHANGELOG, .INSTALL
#
chown root:root "$work_dir"/{.PKGINFO,.CHANGELOG,.INSTALL} 2> /dev/null
chmod 644 "$work_dir"/{.PKGINFO,.CHANGELOG,.INSTALL} 2> /dev/null
#
# Generate the package
#
echo "Generating the package..."
ret=0
bsdtar -czf "$pkg_dest/$pkg_namver-$pkg_arch$pkg_ext" $(ls -A) || ret=$?
if [ $ret -ne 0 ]; then
echo "ERROR: unable to write package to $pkg_dest"
echo " Maybe the disk is full or you do not have write access"
rm -rf "$work_dir"
exit 1
fi
rm -rf "$work_dir"
echo Done
exit 0
# vim: set ts=2 sw=2 noet:

View File

@@ -146,14 +146,13 @@ _pacman ()
toparse="${a:2}"
case "${arg}" in
-@(A|U|R|S|Q|h|V))
-@(U|R|S|Q|h|V))
op="${arg/-}"
mod="${mod}${a:2}"
;;
--)
arg="${a:2}"
case "${arg}" in
add) op="A" ;;
remove) op="R" ;;
upgrade) op="U" ;;
query) op="Q" ;;
@@ -184,9 +183,11 @@ _pacman ()
search) mod="${mod}s" ;;
upgrades) mod="${mod}u" ;;
cascade) mod="${mod}c" ;;
check) mod="${mod}k" ;;
dbonly) mod="${mod}k" ;;
nosave) mod="${mod}n" ;;
recursive) mod="${mod}s" ;;
unneeded) mod="${mod}u" ;;
esac ;;
*) toparse="${a}" ;;
esac
@@ -202,7 +203,6 @@ _pacman ()
if [ $COMP_CWORD -eq 1 ] && [[ "$cur" == -* ]]; then
COMPREPLY=( $( compgen -W '\
-A --add \
-h --help \
-Q --query \
-R --remove \
@@ -216,9 +216,10 @@ _pacman ()
if [[ "$cur" == -* ]]; then
case "${op}" in
A|U)
U)
COMPREPLY=( $( compgen -W '\
--asdeps \
--asexplicit \
-d --nodeps \
-f --force \
-h --help \
@@ -242,6 +243,7 @@ _pacman ()
-k --dbonly \
-n --nosave \
-s --recursive \
-u --unneeded \
--config \
--logfile \
--noconfirm \
@@ -257,9 +259,9 @@ _pacman ()
S)
COMPREPLY=( $( compgen -W '\
--asdeps \
--asexplicit \
-c --clean \
-d --nodeps \
-e --dependsonly \
-f --force \
-g --groups \
-h --help \
@@ -293,6 +295,7 @@ _pacman ()
-g --groups \
-h --help \
-i --info \
-k --check \
-l --list \
-m --foreign \
-o --owns \
@@ -316,7 +319,7 @@ _pacman ()
rem_selected
else
case "${op}" in
A|U)
U)
COMPREPLY=( $( compgen -d -- "$cur" ) \
$( compgen -f -X '!*.pkg.tar.gz' -- "$cur" ) )
return 0

67
scripts/gensync.sh.in → contrib/gensync Normal file → Executable file
View File

@@ -1,9 +1,8 @@
#!/bin/bash
#
# gensync
# @configure_input@
#
# Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
# Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -19,39 +18,35 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# gettext initialization
export TEXTDOMAIN='pacman'
export TEXTDOMAINDIR='@localedir@'
myver='@PACKAGE_VERSION@'
myver='3.1.1'
# functions
usage() {
printf "gensync (pacman) %s\n\n" "$myver"
printf "$(gettext "Usage: %s <root> <destfile> [package_directory]")\n\n" "$0"
printf "$(gettext "\
printf "Usage: %s <root> <destfile> [package_directory]\n\n" "$0"
printf "\
gensync will generate a sync database by reading all PKGBUILD files\n\
from <root>. gensync builds the database in a temporary directory\n\
and then compresses it to <destfile>.\n\n")"
printf "$(gettext "\
and then compresses it to <destfile>.\n\n"
printf "\
gensync will calculate md5sums of packages in the same directory as\n\
<destfile>, unless an alternate [package_directory] is specified.\n\n")"
printf "$(gettext "\
<destfile>, unless an alternate [package_directory] is specified.\n\n"
printf "\
note: The <destfile> name is important. It must be of the form\n\
{treename}.db.tar.gz where {treename} is the name of the custom\n\
package repository you configured in /etc/pacman.conf. The\n\
generated database must reside in the same directory as your\n\
custom packages (also configured in /etc/pacman.conf)\n\n")"
echo "$(gettext "Example: gensync /var/abs/local /home/mypkgs/custom.db.tar.gz")"
custom packages (also configured in /etc/pacman.conf)\n\n"
echo "Example: gensync /var/abs/local /home/mypkgs/custom.db.tar.gz"
}
version() {
printf "gensync (pacman) %s\n" "$myver"
printf "$(gettext "\
Copyright (C) 2002-2007 Judd Vinet <jvinet@zeroflux.org>.\n\n\
printf "\
Copyright (C) 2002-2006 Judd Vinet <jvinet@zeroflux.org>.\n\n\
This is free software; see the source for copying conditions.\n\
There is NO WARRANTY, to the extent permitted by law.\n")"
There is NO WARRANTY, to the extent permitted by law.\n"
}
error () {
@@ -64,17 +59,6 @@ die () {
exit 1
}
check_force () {
local i
for i in ${options[@]}; do
local lc=$(echo $i | tr [:upper:] [:lower:])
if [ "$lc" = "force" ]; then
true
fi
done
false
}
# PROGRAM START
if [ "$1" = "-h" -o "$1" = "--help" ]; then
@@ -93,10 +77,10 @@ if [ $# -lt 2 ]; then
fi
# source system and user makepkg.conf
if [ -r @sysconfdir@/makepkg.conf ]; then
source @sysconfdir@/makepkg.conf
if [ -r /etc/makepkg.conf ]; then
source /etc/makepkg.conf
else
die "$(gettext "%s not found. Can not continue.")" "@sysconfdir@/makepkg.conf"
die "/etc/makepkg.conf not found. Cannot continue."
fi
if [ -r ~/.makepkg.conf ]; then
@@ -114,18 +98,17 @@ if [ "$3" != "" ]; then
pkgdir="$3"
fi
[ ! -d "$rootdir" ] && die "$(gettext "invalid root dir: %s")" $rootdir
[ ! -d "$rootdir" ] && die "invalid root dir: $rootdir"
echo "$(gettext "gensync: building database entries, generating md5sums...")" >&2
echo "gensync: building database entries, generating md5sums..." >&2
cd "$destdir"
pkgs=""
forcepkgs=""
for file in $(find "$rootdir"/* -name "$BUILDSCRIPT"); do
unset pkgname pkgver pkgrel options
source $file || die "$(gettext "failed to parse %s")" $file
source $file || die "failed to parse $file"
if [ "$arch" = 'any' ]; then
CARCH='any'
fi
@@ -136,20 +119,16 @@ for file in $(find "$rootdir"/* -name "$BUILDSCRIPT"); do
fi
if [ ! -f "$pkgfile" ]; then
error "$(gettext "could not find %s-%s-%s-%s%s - skipping")" $pkgname $pkgver $pkgrel $CARCH $PKGEXT
error "could not find %s-%s-%s-%s%s - skipping" $pkgname $pkgver $pkgrel $CARCH $PKGEXT
else
if check_force; then
forcepkgs="$forcepkgs $pkgfile"
else
pkgs="$pkgs $pkgfile"
fi
pkgs="$pkgs $pkgfile"
fi
done
echo "$(gettext "creating repo DB...")"
echo "creating repo DB..."
# we'll trim the output just a tad, as gensync may be used on large repos
repo-add $destfile $pkgs --force $force_pkgs \
repo-add $destfile $pkgs \
| grep -e "package" -e "database"
# vim: set ts=2 sw=2 noet:

View File

@@ -1,5 +1,5 @@
#!/bin/sh
# pacdiff : a simple pacnew/pacorig/pacsave updater for /etc/
#!/bin/bash
# pacdiff : a simple pacnew/pacorig/pacsave updater
#
# Copyright (c) 2007 Aaron Griffin <aaronmgriffin@gmail.com>
#
@@ -17,29 +17,60 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Original http://phraktured.net/config/bin/pacdiff
diffprog=${DIFFPROG:-vimdiff}
for x in $(find /etc/ -name *.pacnew -o -name *.pacorig -o -name *.pacsave)
do
echo "File: ${x%.pac*}"
chk="$(cmp $x ${x%.pac*})"
if [ -z "${chk}" ]; then
echo " Files are identical, removing..."
rm $x
else
echo -n " File differences found. (V)iew, (S)kip, (R)emove: [v/s/r] "
read c
c="$(echo $c| tr A-Z a-z)" #tolower
if [ "$c" = "r" ]; then
rm $x
elif [ "$c" = "s" ]; then
continue
else
[ "$c" = "n" -o "$c" = "N" ] || $diffprog $x ${x%.pac*}
echo -n " Remove file? [Y/n] "
read c
[ "$c" = "n" -o "$c" = "N" ] || rm $x
fi
fi
done
locate=0
usage() {
echo "pacdiff : a simple pacnew/pacorig/pacsave updater"
echo "Usage : pacdiff [-l]"
echo "The -l/--locate flag makes pacdiff use locate rather than find"
}
cmd() {
if [ $locate -eq 1 ]; then
locate -0 -e -b \*.pacnew \*.pacorig \*.pacsave
else
find /etc/ \( -name \*.pacnew -o -name \*.pacorig -o -name \*.pacsave \) -print0
fi
}
if [ $# -gt 0 ]; then
case $1 in
-l|--locate)
locate=1;;
*)
usage; exit 0;;
esac
fi
# see http://mywiki.wooledge.org/BashFAQ/020
while IFS= read -u 3 -r -d '' pacfile; do
file="${pacfile%.pac*}"
echo "File: $file"
if [ ! -f "$file" ]; then
echo " $file does not exist"
rm -i "$pacfile"
continue
fi
check="$(cmp "$pacfile" "$file")"
if [ -z "${check}" ]; then
echo " Files are identical, removing..."
rm "$pacfile"
else
echo -n " File differences found. (V)iew, (S)kip, (R)emove: [v/s/r] "
while read c; do
case $c in
r|R) rm "$pacfile"; break ;;
v|V)
$diffprog "$pacfile" "$file"
rm -i "$pacfile"; break ;;
s|S) break ;;
*) echo -n " Invalid answer. Try again: [v/s/r] "; continue ;;
esac
done
fi
done 3< <(cmd)
exit 0
# vim: set ts=2 sw=2 noet:

88
contrib/paclist Executable file
View File

@@ -0,0 +1,88 @@
#!/usr/bin/perl
# paclist - List all packages installed from a given repo
#
# Copyright (C) 2008 Dan McGee <dpmcgee@gmail.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
use strict;
use warnings;
my $progname = "paclist";
my $version = "1.0";
if ($#ARGV != 0 || $ARGV[0] eq "--help" || $ARGV[0] eq "-h") {
print "$progname - List all packages installed from a given repo\n";
print "Usage: $progname <repo>\n";
print "Example: $progname testing\n";
if ($#ARGV != 0) {
exit 1;
}
exit 0;
}
if ( $ARGV[0] eq "--version" || $ARGV[0] eq "-v") {
print "$progname version $version\n";
print "Copyright (C) 2008 Dan McGee\n";
exit 0;
}
# This hash table will be used to store pairs of ('name version', count) from
# the return of both pacman -Sl <repo> and pacman -Q output. We then check to
# see if a value was added twice (count = 2)- if so, we will print that package
# as it is both in the repo we queried and installed on our local system.
my %packages = ();
my $output;
$output = `pacman -Sl $ARGV[0]`;
if ($? != 0) {
exit 1;
}
my @sync = split(/\n/, $output);
# sample output from pacman -Sl:
# testing foobar 1.0-1
foreach $_ (@sync) {
my @info = split(/ /);
# we only want to store 'foobar 1.0-1' in our hash table
my $pkg = $info[1] . " " . $info[2];
$packages{$pkg}++;
}
$output = `pacman -Q`;
if ($? != 0) {
exit 1;
}
# sample output from pacman -Q:
# foobar 1.0-1
my @local = split(/\n/, $output);
foreach $_ (@local) {
# store 'foobar 1.0-1' in our hash table
$packages{$_}++;
}
# run comparison check- if value was added twice, it was in the intersection
my @intersection;
foreach $_ (keys %packages) {
if ($packages{$_} == 2) {
push @{ \@intersection }, $_;
}
}
# print our intersection, and bask in the glory and speed of perl
@intersection = sort @intersection;
foreach $_ (@intersection) {
print $_ . "\n";
}
#vim: set noet:

132
contrib/pacscripts Executable file
View File

@@ -0,0 +1,132 @@
#!/bin/bash
#
# pacscripts : tries to print out the {pre,post}_{install,remove,upgrade}
# scripts of a given package
#
# Copyright (c) 2009 Giulio "giulivo" Fidente <giulivo.navigante@gmail.com>
# Copyright (c) 2009 Xavier Chantry <shiningxc@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# bash options
set -o nounset
set -o errexit
progname=$(basename $0)
progver="0.4"
conf="/etc/pacman.conf"
if [ ! -r "$conf" ]; then
echo "ERROR: unable to read $conf"
exit 1
fi
eval $(awk '/DBPath/ {print $1$2$3}' "$conf")
eval $(awk '/CacheDir/ {print $1$2$3}' "$conf")
pac_db="${DBPath:-/var/lib/pacman}/local"
pac_cache="${CacheDir:-/var/cache/pacman/pkg}"
error() {
local mesg=$1; shift
printf "==> $(gettext "ERROR:") ${mesg}\n" "$@" >&2
}
usage() {
echo "This program prints out the {pre,post}_{install,remove,upgrade} scripts"
echo "of a given package."
echo "Usage: $progname pkgname|pkgfile"
echo
echo " OPTIONS:"
echo " -h, --help Print this help message"
echo " -v, --version Print program name and version"
echo
echo "Example: $progname gconf-editor"
echo "Example: $progname gconf-editor-2.24.1-1-x86_64.pkg.tar.gz"
}
spacman() {
if [ $EUID -eq 0 ]; then
pacman "$@"
else
if [ ! "$(type -p sudo)" ]; then
error "Cannot find the sudo binary! Is sudo installed?"
error "Otherwise try to run the program as root"
exit 1
else
sudo pacman "$@"
fi
fi
}
print_db() {
pkg=$(pacman -Q "$1")
pkg=${pkg/ /-}
if [ -f $pac_db/$pkg*/install ]; then
cat $pac_db/$pkg*/install
echo
return 0
else
error "Package $1 does not include any .INSTALL script"
return 1
fi
}
print_pkg() {
if ! bsdtar -xOf "$1" .INSTALL 2>/dev/null; then
error "Package $1 does not include any .INSTALL script"
return 1
fi
echo
}
print_scriptlet() {
if [ -f "$1" ]; then
if bsdtar tf "$1" .PKGINFO &>/dev/null; then
print_pkg "$1"
return
fi
fi
if pacman -Q "$1" &>/dev/null; then
print_db "$1"
return
fi
if ! pacman -Si $1 &>/dev/null; then
error "Package $1 not found"
return 1
fi
url=$(spacman -Sdp $1 | tail -n1)
filename=$(basename $url)
if [ ! -f "$pac_cache/$filename" ]; then
if ! spacman -Sdw --noconfirm $1 >&2; then
error "Failed to download $1"
return 1
fi
echo >&2
fi
print_pkg "$pac_cache/$filename"
return
}
if [ $# -ne 1 ] ; then
usage
exit 1
fi
case "$1" in
--help|-h) usage; exit 0 ;;
--version|-v) echo "$progname version $progver"; exit 0 ;;
*) print_scriptlet $1 ;;
esac

View File

@@ -1,6 +1,9 @@
#!/bin/bash
#!/usr/bin/perl
# pacsearch - Adds color and install information to a 'pacman -Ss' search
#
# Copyright (C) 2008 Dan McGee <dpmcgee@gmail.com>
#
# Based off original shell script version:
# Copyright (C) 2006-2007 Dan McGee <dpmcgee@gmail.com>
#
# This program is free software; you can redistribute it and/or
@@ -18,72 +21,112 @@
#TODO: colors flag on commandline
readonly progname="pacsearch"
readonly version="1.0"
use strict;
use warnings;
readonly CLR1='\\\e[0;34m'
readonly CLR2='\\\e[0;32m'
readonly CLR3='\\\e[0;35m'
readonly CLR4='\\\e[0;36m'
readonly CLR5='\\\e[0;31m'
readonly CLR6='\\\e[0;33m'
readonly CLR7='\\\e[1;36m'
readonly INST='\\\e[1;31m'
readonly BASE='\\\e[0m'
my $progname = "pacsearch";
my $version = "2.0";
if [ "$1" = "--help" -o "$1" = "-h" ]; then
echo "Usage: $progname <pattern>"
echo "Ex: $progname ^gnome"
exit 0
fi
if ($#ARGV lt 0 || $ARGV[0] eq "--help" || $ARGV[0] eq "-h") {
print "$progname - Add color and install information to a pacman -Ss search\n";
print "Usage: $progname <pattern>\n";
print "Example: $progname ^gnome\n";
if ($#ARGV lt 0) {
exit 1;
}
exit 0;
}
if [ "$1" = "--version" -o "$1" = "-v" ]; then
echo "$progname version $version"
echo "Copyright (C) 2006-2007 Dan McGee"
exit 0
fi
if ($ARGV[0] eq "--version" || $ARGV[0] eq "-v") {
print "$progname version $version\n";
print "Copyright (C) 2006-2008 Dan McGee\n";
exit 0;
}
if [ -z "$1" -o "${1:0:1}" = "-" ]; then
echo "Usage: $progname <pattern>"
echo "Ex: $progname ^gnome"
exit 1
fi
# define our colors to use when printing
my $CLR1 = "\e[0;34m";
my $CLR2 = "\e[0;32m";
my $CLR3 = "\e[0;35m";
my $CLR4 = "\e[0;36m";
my $CLR5 = "\e[0;31m";
my $CLR6 = "\e[0;33m";
my $CLR7 = "\e[1;36m";
my $INST = "\e[1;31m";
my $BASE = "\e[0m";
my $INSTMARK = $INST."***";
# Make two temp files and send output of commands to these files
querydump=$(mktemp)
pacman -Qs $1 > $querydump
syncdump=$(mktemp)
pacman -Ss $1 > $syncdump
# color a "repo/pkgname pkgver" line based on the respository name
sub to_color {
my $line = shift;
$line =~ s/(^core\/.*)/$CLR1$1$BASE/;
$line =~ s/(^extra\/.*)/$CLR2$1$BASE/;
$line =~ s/(^community\/.*)/$CLR3$1$BASE/;
$line =~ s/(^testing\/.*)/$CLR4$1$BASE/;
$line =~ s/(^unstable\/.*)/$CLR5$1$BASE/;
$line =~ s/(^custom\/.*)/$CLR6$1$BASE/;
$line =~ s/(^local\/.*)/$CLR7$1$BASE/;
# any other unknown repository
$line =~ s/(^[\w-]*\/.*)/$CLR6$1$BASE/;
return $line;
}
# Strip descriptions and 'local/' from -Qs query
instpkg=$(mktemp)
egrep '^[^ ]' $querydump | sed -e 's@^local/@@' > $instpkg
my %allpkgs = ();
# Add pkgs not in sync db, mark pkgs that are installed
cat $instpkg | while read -r pkg; do
if [ -z "$(grep "$pkg" $syncdump)" ]; then
# grep package name; pipe to another grep that prints at most one
# line starting with 'local/', allows for comments >1 line
grep -A10 "$pkg" $querydump | grep -A10 -m1 "local/" >> $syncdump
fi
sed -i "s@^\(.\+/$pkg\)@\***\1@" $syncdump
done
my $syncout = `pacman -Ss '@ARGV'`;
# split each sync search entry into its own array entry
my @syncpkgs = split(/\n^(?=\w)/m, $syncout);
# remove the extra \n from the last desc entry
if ($#syncpkgs >= 0) {
chomp($syncpkgs[$#syncpkgs]);
}
# Print colorized package list and descriptions to screen
echo -e "$(sed -r \
-e "s@core/.*@$CLR1&$BASE@" \
-e "s@extra/.*@$CLR2&$BASE@" \
-e "s@community/.*@$CLR3&$BASE@" \
-e "s@testing/.*@$CLR4&$BASE@" \
-e "s@unstable/.*@$CLR5&$BASE@" \
-e "s@custom/.*@$CLR6&$BASE@" \
-e "s@local/.*@$CLR7&$BASE@" \
-e "s@(^|\*\*\*)([[:alnum:]]*/.* .*)@\1$CLR6\2$BASE@" \
-e "s@\*\*\*@$INST&@" \
< $syncdump )"
echo -en "\e[0m"
# counter var for packages, used here and in the query loop too
my $cnt = 0;
foreach $_ (@syncpkgs) {
# we grab 3 fields here: repo, name/ver, and desc
my @pkgfields = /^(.*?)\/(.*?)\n(.*)$/s;
# add a fourth field that will indicate install status
push (@pkgfields, "");
# add a fifth field that indicates original order
push (@pkgfields, $cnt++);
# add each sync pkg by name/ver to a hash table for quick lookup
$allpkgs{$pkgfields[1]} = [ @pkgfields ];
}
rm $querydump
rm $syncdump
rm $instpkg
my $queryout = `pacman -Qs '@ARGV'`;
# split each querysearch entry into its own array entry
my @querypkgs = split(/\n^(?=\w)/m, $queryout);
# remove the extra \n from the last desc entry
if ($#querypkgs >= 0) {
chomp ($querypkgs[$#querypkgs]);
}
foreach $_ (@querypkgs) {
# we grab 3 fields here: repo, name/ver, and desc
my @pkgfields = /^(.*?)\/(.*?)\n(.*)$/s;
# check if the package was listed in the sync out
# if it is we want to mark it with a *** marker
if (exists $allpkgs{$pkgfields[1]}) {
# mark it in our fourth field as installed
@{ $allpkgs{$pkgfields[1]} }[3] = $INSTMARK;
} else {
# add a fourth field that will indicate install status
push (@pkgfields, $INSTMARK);
# add a fifth field that indicates original order (after sync)
push (@pkgfields, $cnt++);
# add our local-only package to the hash
$allpkgs{$pkgfields[1]} = [ @pkgfields ];
}
}
# sort by original order (the fifth field) and print
foreach $_ ( sort{ @{$allpkgs{$a}}[4] <=> @{$allpkgs{$b}}[4] } keys %allpkgs) {
my @v = @{$allpkgs{$_}};
my $line = "$v[0]/$v[1]";
$line = to_color($line);
# print install marker + colorized "repo/pkgname pkgver" string
print "$v[3]$line\n";
print "$v[2]\n";
}
#vim: set noet:

300
contrib/pactree Executable file
View File

@@ -0,0 +1,300 @@
#!/bin/bash
# pactree : a simple dependency tree viewer
#
# Copyright (C) 2008 Carlo "carlocci" Bersani <carlocci@gmail.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Original http://carlocci.ngi.it/arch/pactree
# Credit to scj for the graphviz idea
# set the colors
branch1_color="\033[0;33m" #Brown
branch2_color="\033[0;37m" #Gray
leaf_color="\033[1;32m" #Light green
leaf2_color="\033[0;32m" #Green
# set the separators
separator=" "
branch_tip1="|--"
branch_tip2="+--"
provides="provides "
# set the graphviz options
# http://www.graphviz.org/doc/info/output.html for available output formats
# http://www.graphviz.org/doc/info/colors.html for available colors
gformat="png" #output format
start_color="red" #START color
nodes_color="green" #color of the nodes
arrow1_color="chocolate4" #color of the normal arrow
arrow2_color="grey" #color of the "provided by" headless arrow
readonly prog_name="pactree"
readonly prog_ver="0.2"
_usage(){
echo "This program generates the dependency tree of an installed package"
echo "Usage: $prog_name [OPTIONS] <installed packages>"
echo
echo " OPTIONS:"
echo " -c, --color Enable color output"
echo " -d, --depth INT Limit the shown dependencies depth"
echo " -g, --graph Use graphviz to make an image of the tree"
echo " -l, --linear Enable linear output"
echo " -s, --silent Shh, let me hear those errors!"
echo " -u, --unique Print the dependency list with no duplicates"
echo
echo " -h, --help Print this help message"
echo " -v, --version Print the program name and version"
echo
echo "Example: $prog_name -c -d 2 readline"
}
_version(){
echo "$prog_name version $prog_ver"
echo "Copyright (C) 2008 Carlo \"carlocci\" Bersani <carlocci@gmail.com>"
}
# end of the friendliness
# grab a field from the database: $1=path/to/file, $2=field to grab
_grabfield(){
for line in $(cat "$1" 2>/dev/null ); do
if [ -z "$line" ]; then
continue;
fi;
if [[ "$line" =~ %[A-Z]*% ]]; then
current="$line"
continue;
fi;
if [ "$current" = "$2" ]; then
echo "$line"
fi;
done
}
# find a dep in the db: $1=dep, $2=field, $3=dbfile, ret=file list
_finddep(){
for line in $(awk 'BEGIN{RS=""}
{
if ($1=="'"$2"'"){
for (i=2 ; i<=NF ; ++i){
if ($i ~ /^'"$1"'([<>=]+.*|)$/ ){
print FILENAME}
}
}
}' $(find $pac_db -name $3)); do
echo "${line%/*}"
done
}
# Recursive function: does all of the work, pays all of the taxes #
_tree(){
pkg_name="$1"
pkg_dirs="$(echo $pac_db/$pkg_name-[0-9]*)"
# Is $pkg_name real or provided?
[ ! -d "$pkg_dirs" ] && pkg_dirs="$(_finddep $pkg_name %PROVIDES% depends)"
for pkg_dir in $pkg_dirs ; do
spaces="$2"
unset provided
branch_tip="$branch_tip1"
branch_color="$branch1_color"
pkg_name="$(_grabfield "$pkg_dir/desc" %NAME%)"
if [ ! "$pkg_name" = "$1" ]; then
provided="$leaf2_color $provides$leaf_color$1"
branch_tip="$branch_tip2"
branch_color="$branch2_color"
if [ $graphviz -eq 1 ] && [[ ! "${dep_list[@]}" =~ _$1_ ]] && [ $spaces -ne $((max_depth+1)) ]; then
echo "\"$1\" -> \"$pkg_name\" [arrowhead=none, color=$arrow2_color];"
dep_list=( "${dep_list[@]}" "_$1_" )
_tree "$pkg_name" $((spaces+1))
continue
fi
fi
# Generate the spacer
spacer=""
for each in $(seq 1 $spaces); do
spacer="$spacer$separator"
done
spacer="$spacer$branch_tip"
[ $silent -ne 1 ] && echo -e "$branch_color$spacer$leaf_color$pkg_name$provided"
[ ! -d "$pkg_dir" ] && echo "No $pkg_name in the database (inconsistent database?)" >&2
if [[ ! " ${dep_list[@]} " =~ " $pkg_name " ]] && [ $spaces -ne $max_depth ]; then
dep_list=( "${dep_list[@]}" "$pkg_name" )
for dep_pkg in $(_grabfield "$pkg_dir/depends" %DEPENDS%); do
spaces=$2 #Bash scoping ;_;
if [ $graphviz -eq 1 ]; then
echo "\"$1\" -> \"${dep_pkg%%[<>=]*}\" [color=$arrow1_color];"
fi
_tree "${dep_pkg%%[<>=]*}" $((spaces+1))
done
fi
done
}
# Main program: gets all of the money, pays none of the taxes
# Command line parameters parser
if [ $# -eq 0 ]; then
_usage
exit 1
fi
options=( "$@" )
len_options=${#options[@]}
for (( n=0 ; n < $len_options ; n++ )); do
if [ "${options[$n]}" = "--" ]; then
unset options[$n]
break
fi
if [ "${options[$n]}" = "-h" -o "${options[$n]}" = "--help" ]; then
_usage
exit 0
fi
if [ "${options[$n]}" = "-v" -o "${options[$n]}" = "--version" ]; then
_version
exit 0
fi
if [ "${options[$n]}" = "-l" -o "${options[$n]}" = "--linear" ]; then
unset options[$n]
linear=1
continue
fi
if [ "${options[$n]}" = "-s" -o "${options[$n]}" = "--silent" ]; then
unset options[$n]
silent=1
continue
fi
if [ "${options[$n]}" = "-u" -o "${options[$n]}" = "--unique" ]; then
unset options[$n]
silent=1
nodup=1
continue
fi
if [ "${options[$n]}" = "-g" -o "${options[$n]}" = "--graph" ]; then
unset options[$n]
graphviz=1
continue
fi
if [ "${options[$n]}" = "-c" -o "${options[$n]}" = "--color" ]; then
unset options[$n]
colored=1
continue
fi
if [[ "${options[$n]}" =~ -d[[:digit:]]+ || "${options[$n]}" == "--depth" ]]; then
if [[ "${options[$n]#-d}" =~ [[:digit:]]+ ]]; then
max_depth="${options[$n]#-d}"
elif [[ ${options[$((n+1))]} =~ [[:digit:]]+ ]]; then
max_depth="${options[$((n+1))]}"
unset options[$((n+1))]
((++n))
fi
unset options[$n]
continue
fi
done
# End of the dumb command line parser
# Env
colored=${colored:-0}
max_depth=${max_depth:--10}
linear=${linear:-0}
silent=${silent:-0}
nodup=${nodup:-0}
graphviz=${graphviz:-0}
if [ $colored -ne 1 ]; then
unset branch1_color
unset leaf_color
unset leaf2_color
unset branch2_color
fi
if [ $linear -eq 1 ]; then
unset separator
unset branch_tip1
unset branch_tip2
unset provides
fi
if [ $graphviz -eq 1 ]; then
silent=1
nodup=0
if [ ! -f /usr/bin/dot ]; then
echo "ERROR: package graphviz is not installed"
echo " Run pacman -S graphviz to install it"
exit 1
fi
fi
if [ ! -r /etc/pacman.conf ]; then
echo "ERROR: unable to read /etc/pacman.conf"
exit 1
else
eval $(awk '/DBPath/ {print $1$2$3}' /etc/pacman.conf)
fi
pac_db="${DBPath:-/var/lib/pacman}/local"
if [ ! -d "$pac_db" ] ; then
echo "ERROR: pacman database directory ${pac_db} not found"
exit 1
fi
# Env End
# Program starts
_main(){
for pkg_name in ${options[@]} ; do
[ $graphviz -eq 1 ] && echo -e "\"START\" -> \"$pkg_name\" ;"
_tree "$pkg_name" 0
if [ $nodup -eq 1 ]; then
for pkg_tree in ${dep_list[@]} ; do
echo "$pkg_tree"
done
fi
done
if [ $silent -eq 0 ]; then
echo -ne '\033[0m' # return colors to normal?
echo -ne '\033[?25h' #return cursor to normal?
fi
}
if [ $graphviz -eq 1 ]; then
root_pkgs="${options[@]}"
# Uncomment for the "generated by pactree" node in graphviz
#advert="xyz [height=0.07, fontsize=8.0, label=\"GENERATED WITH PACTREE\",shape=box,color="black",style=filled,fontcolor="white"];\n"
echo -e "digraph G { START [color=$start_color, style=filled];\n node [style=filled, color=$nodes_color];\n$(_main)\n$advert}" | dot -T$gformat -o "${root_pkgs// /_}.deps.$gformat"
else _main
fi
# vim: set ts=2 sw=2 noet:

View File

@@ -1,77 +0,0 @@
#!/bin/sh
#
# re-pacman: regenerate a pacman package based on installed files and the
# pacman database entries. Useful for reuse, or possible config file
# extension
#
# Copyright (c) 2006 Aaron Griffin <aaron@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
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#TODO
# * Check for md5 changes in backup lines and change pkgrel
pacinfo () {
[ $# -ne 2 ] && return 1
#use echo to strip spaces
echo $(pacman -Qi ${1} | grep "${2}" | cut -d: -f2-)
}
make_pkginfo () {
echo "# Generated by re-pacman 1.0.0"
echo "# On $(date)"
echo "pkgname =$(pacinfo ${1} Name)"
echo "pkgver =$(pacinfo ${1} Version)"
echo "pkgdesc =$(pacinfo ${1} Description)"
echo "url =$(pacinfo ${1} URL)"
echo "builddate =$(pacinfo ${1} 'Build Date')"
echo "packager =$(pacinfo ${1} Packager)"
echo "size =$(pacinfo ${1} Size)"
echo "arch =$(pacinfo ${1} Architecture)"
deps=$(pacinfo ${1} 'Depends On')
for d in ${deps}; do
echo "depend = ${d}"
done
}
LANG="POSIX"
if [ $# -ne 1 ]; then
echo "usage: re-pacman <installed package name>"
exit 1
fi
ver=$(pacinfo ${1} Version)
if [ "x${ver}" = "x" ]; then
echo "Package '${1}' not found, aborting."
exit 1
fi
echo ":: Cleaning up old files"
rm -f .PKGINFO "${1}-${ver}.pkg.tar.gz"
echo ":: Building PKGINFO"
make_pkginfo ${1} > .PKGINFO
flist=".PKGINFO"
flist="${flist} $(pacman -Ql ${1} | sed 's|\w* \(.*\)|/\1|g' | grep -v '/$')"
echo ":: Building final package tarball"
echo ${flist} | tr ' ' '\n' | tar czf "${1}-${ver}.pkg.tar.gz" -T - 2>/dev/null
rm -f .PKGINFO
echo ":: Package '${1}-${ver}.pkg.tar.gz' is now ready for installation"
# vim: set ts=2 sw=2 noet:

71
scripts/updatesync.sh.in → contrib/updatesync Normal file → Executable file
View File

@@ -1,7 +1,6 @@
#!/bin/bash
#
# updatesync
# @configure_input@
#
# Copyright (c) 2004 by Jason Chu <jason@archlinux.org>
# Derived from gensync (c) 2002-2006 Judd Vinet <jvinet@zeroflux.org>
@@ -20,37 +19,33 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# gettext initialization
export TEXTDOMAIN='pacman'
export TEXTDOMAINDIR='@localedir@'
myver='@PACKAGE_VERSION@'
myver='3.1.1'
# functions
usage() {
printf "updatesync (pacman) %s\n\n" "$myver"
printf "$(gettext "Usage: %s <action> <destfile> <option> [package_directory]")\n\n" "$0"
printf "$(gettext "\
printf "Usage: %s <action> <destfile> <option> [package_directory]\n\n" "$0"
printf "\
updatesync will update a sync database by reading a PKGBUILD and\n\
modifying the destfile. updatesync updates the database in a temporary\n\
directory and then compresses it to <destfile>.\n\n")"
printf "$(gettext "There are two types of actions:\n\n")"
printf "$(gettext "upd - Will update a package's entry or create it if it doesn't exist.\n It takes the package's PKGBUILD as an option.\n")"
printf "$(gettext "del - Will remove a package's entry from the db. It takes the package's\n name as an option.\n")"
directory and then compresses it to <destfile>.\n\n"
printf "There are two types of actions:\n\n"
printf "upd - Will update a package's entry or create it if it doesn't exist.\n It takes the package's PKGBUILD as an option.\n"
printf "del - Will remove a package's entry from the db. It takes the package's\n name as an option.\n"
echo
printf "$(gettext "\
printf "\
updatesync will calculate md5sums of packages in the same directory as\n\
<destfile>, unless an alternate [package_directory] is specified.\n\n")"
echo "$(gettext "Example: updatesync upd /home/mypkgs/custom.db.tar.gz PKGBUILD")"
<destfile>, unless an alternate [package_directory] is specified.\n\n"
echo "Example: updatesync upd /home/mypkgs/custom.db.tar.gz PKGBUILD"
}
version() {
printf "updatesync (pacman) %s\n" "$myver"
printf "$(gettext "\
printf "\
Copyright (C) 2004 Jason Chu <jason@archlinux.org>.\n\n\
This is free software; see the source for copying conditions.\n\
There is NO WARRANTY, to the extent permitted by law.\n")"
There is NO WARRANTY, to the extent permitted by law.\n"
}
error () {
@@ -63,17 +58,6 @@ die () {
exit 1
}
check_force () {
local i
for i in ${options[@]}; do
local lc=$(echo $i | tr [:upper:] [:lower:])
if [ "$lc" = "force" ]; then
true
fi
done
false
}
# PROGRAM START
if [ "$1" = "-h" -o "$1" = "--help" ]; then
@@ -92,10 +76,10 @@ if [ $# -lt 3 ]; then
fi
# source system and user makepkg.conf
if [ -r @sysconfdir@/makepkg.conf ]; then
source @sysconfdir@/makepkg.conf
if [ -r /etc/makepkg.conf ]; then
source /etc/makepkg.conf
else
die "$(gettext "%s not found. Can not continue.")" "@sysconfdir@/makepkg.conf"
die "/etc/makepkg.conf not found. Cannot continue."
fi
if [ -r ~/.makepkg.conf ]; then
@@ -114,37 +98,36 @@ pkgdir="$(pwd)"
if [ "$4" != "" ]; then
pkgdir="$4"
fi
opt_force=""
if [ ! -f "$option" ]; then
die "$(gettext "%s not found")" $option
fi
if [ "$action" = "upd" ]; then # INSERT / UPDATE
if [ ! -f "$option" ]; then
die "$option not found"
fi
unset pkgname pkgver pkgrel options
source $option || die "$(gettext "failed to parse %s")" $option
source $option || die "failed to parse $option"
if [ "$arch" = 'any' ]; then
CARCH='any'
fi
pkgfile="$pkgdir/$pkgname-$pkgver-$pkgrel-${CARCH}${PKGEXT}"
if [ ! -f "$pkgfile" ]; then
die "$(gettext "could not find %s-%s-%s-%s%s - aborting")" $pkgname $pkgver $pkgrel $CARCH $PKGEXT
die "could not find %s-%s-%s-%s%s - aborting" $pkgname $pkgver $pkgrel $CARCH $PKGEXT
fi
if check_force; then
opt_force="--force"
fi
repo-add "$pkgdb" $opt_force "$pkgfile"
repo-add "$pkgdb" "$pkgfile"
else # DELETE
fname="$(basename $option)"
if [ "$fname" = "PKGBUILD" ]; then
if [ ! -f "$option" ]; then
die "%s not found" $option
fi
unset pkgname pkgver pkgrel options
source $option
else
pkgname=$1
pkgname=$option
fi
repo-remove "$pkgdb" "$pkgname"

View File

@@ -1,96 +0,0 @@
This is a project file for the vim-project
plugin. I like it, so decided to contribute
this to the main repo.
$ pacman -S vim-project
change the pacman= path below
$ vim
:Project vimproject
pacman=~/devel/pacman-lib CD=. flags=S {
Makefile.am
configure.ac
libalpm=lib/libalpm/ filter="*.c *.h *.am"{
add.c
alpm.c
alpm_list.c
backup.c
be_files.c
cache.c
conflict.c
db.c
deps.c
error.c
group.c
handle.c
log.c
md5.c
package.c
provide.c
remove.c
server.c
sync.c
trans.c
util.c
add.h
alpm.h
alpm_list.h
backup.h
cache.h
conflict.h
db.h
deps.h
error.h
group.h
handle.h
log.h
md5.h
package.h
provide.h
remove.h
server.h
sync.h
trans.h
util.h
Makefile.am
Makefile.in
}
pacman=src/pacman/ filter="*.c *.h *.am" {
add.c
conf.c
deptest.c
downloadprog.c
log.c
package.c
pacman.c
query.c
remove.c
sync.c
trans.c
upgrade.c
util.c
add.h
conf.h
deptest.h
downloadprog.h
log.h
package.h
query.h
remove.h
sync.h
trans.h
upgrade.h
util.h
Makefile.am
}
utils=src/util filter="*.c *.h *.am" {
testpkg.c
vercmp.c
Makefile.am
}
contrib=contrib CD=. {
bash_completion
pacsearch
vimproject
zsh_completion
}
}

25
contrib/vimprojects Normal file
View File

@@ -0,0 +1,25 @@
This is a project file
for the vim-project plugin.
Save it as ~/.vimprojects
$ pacman -S vim-project
change the pacman path below
$ vim
:Project
Press \r in the project view
on a project name to generate
the list of files
pacman=~/devel/pacman/ CD=. filter="*.ac *.am" flags=S {
libalpm=lib/libalpm/ filter="*.c *.h *.am" {
}
pacman=src/pacman/ filter="*.c *.h *.am" {
}
scripts=scripts/ filter="*.sh.in *.py.in *.am" {
}
utils=src/util filter="*.c *.h *.am" {
}
contrib=contrib CD=. {
}
}

View File

@@ -6,7 +6,6 @@ typeset -A opt_args
# options for passing to _arguments: main pacman commands
_pacman_opts_commands=(
'-A[Add a package to the system]'
'-Q[Query the package database]'
'-R[Remove a package from the system]'
'-S[Synchronize packages]'
@@ -29,7 +28,7 @@ _pacman_opts_common=(
'--noscriptlet[Do not execute the install scriptlet if one exists]'
)
# options for passing to _arguments: options for --add and --update commands
# options for passing to _arguments: options for --upgrade commands
_pacman_opts_pkgfile=(
'-d[Skip dependency checks]'
'-f[Overwrite conflicting files]'
@@ -51,6 +50,7 @@ _pacman_opts_query_modifiers=(
'-e[List packages explicitly installed]'
'-i[View package information]'
'-ii[View package information including backup files]'
'-k[Check package files]'
'-l[List package contents]'
'-m[List installed packages not found in sync db(s)]'
'-t[List packages not required by any package]'
@@ -78,7 +78,6 @@ _pacman_opts_sync_actions=(
# options for passing to _arguments: options for --sync command
_pacman_opts_sync_modifiers=(
'-d[Skip dependency checks]'
'-e[Install dependencies only]'
'-f[Overwrite conflicting files]'
'-i[View package information]'
'-l[List all packages in a repository]'
@@ -91,15 +90,9 @@ _pacman_opts_sync_modifiers=(
'*--ignoregroup[Ignore a group upgrade]:package group:
_pacman_completions_all_groups'
'--asdeps[Install packages as non-explicitly installed]'
'--asexplicit[Install packages as explicitly installed]'
)
# handles --action subcommand
_pacman_action_add() {
_arguments -s : \
"$_pacman_opts_common[@]" \
"$_pacman_opts_pkgfile[@]"
}
# handles --help subcommand
_pacman_action_help() {
_arguments -s : \
@@ -290,7 +283,6 @@ _pacman_get_command() {
# main dispatcher
_pacman() {
case $words[2] in
-A*) _pacman_action_add ;;
-Q*g*) # ipkg groups
_arguments -s : \
"$_pacman_opts_common[@]" \

2
doc/.gitignore vendored
View File

@@ -6,5 +6,7 @@ pacman.8
pacman.conf.5
repo-add.8
repo-remove.8
*.css
*.html
*.xml
man3

View File

@@ -1,4 +1,4 @@
# Doxyfile 1.5.2
# Doxyfile 1.5.5
#---------------------------------------------------------------------------
# Project related configuration options
@@ -28,7 +28,8 @@ FULL_PATH_NAMES = NO
STRIP_FROM_PATH =
STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = NO
JAVADOC_AUTOBRIEF = YES
QT_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
DETAILS_AT_TOP = NO
INHERIT_DOCS = YES
@@ -37,10 +38,14 @@ TAB_SIZE = 4
ALIASES =
OPTIMIZE_OUTPUT_FOR_C = YES
OPTIMIZE_OUTPUT_JAVA = NO
OPTIMIZE_FOR_FORTRAN = NO
OPTIMIZE_OUTPUT_VHDL = NO
BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
SIP_SUPPORT = NO
DISTRIBUTE_GROUP_DOC = NO
SUBGROUPING = YES
TYPEDEF_HIDES_STRUCT = NO
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
@@ -49,6 +54,7 @@ EXTRACT_PRIVATE = NO
EXTRACT_STATIC = NO
EXTRACT_LOCAL_CLASSES = YES
EXTRACT_LOCAL_METHODS = NO
EXTRACT_ANON_NSPACES = NO
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO
HIDE_FRIEND_COMPOUNDS = NO
@@ -60,6 +66,7 @@ SHOW_INCLUDE_FILES = YES
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
SORT_BRIEF_DOCS = NO
SORT_GROUP_NAMES = NO
SORT_BY_SCOPE_NAME = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
@@ -126,6 +133,10 @@ HTML_FOOTER =
HTML_STYLESHEET =
HTML_ALIGN_MEMBERS = YES
GENERATE_HTMLHELP = NO
GENERATE_DOCSET = NO
DOCSET_FEEDNAME = "Doxygen generated docs"
DOCSET_BUNDLE_ID = org.doxygen.Project
HTML_DYNAMIC_SECTIONS = NO
CHM_FILE =
HHC_LOCATION =
GENERATE_CHI = NO
@@ -194,7 +205,9 @@ EXPAND_ONLY_PREDEF = YES
SEARCH_INCLUDES = YES
INCLUDE_PATH = ../..
INCLUDE_FILE_PATTERNS = *.h
PREDEFINED = HAVE_CONFIG_H= SYMHIDDEN= SYMEXPORT=
PREDEFINED = HAVE_CONFIG_H= \
SYMHIDDEN= \
SYMEXPORT=
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
@@ -227,6 +240,7 @@ DOT_IMAGE_FORMAT = png
DOT_PATH =
DOTFILE_DIRS =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 3
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES

View File

@@ -14,7 +14,26 @@ ASCIIDOC_MANS = \
DOXYGEN_MANS = $(wildcard man3/*.3)
HTML_MANPAGES = \
pacman.8.html \
makepkg.8.html \
repo-add.8.html \
PKGBUILD.5.html \
makepkg.conf.5.html \
pacman.conf.5.html \
libalpm.3.html
HTML_OTHER = \
index.html \
submitting-patches.html \
translation-help.html
HTML_DOCS = \
$(HTML_MANPAGES) \
$(HTML_OTHER)
EXTRA_DIST = \
asciidoc.conf \
pacman.8.txt \
makepkg.8.txt \
repo-add.8.txt \
@@ -24,13 +43,27 @@ EXTRA_DIST = \
pacman.conf.5.txt \
libalpm.3.txt \
footer.txt \
index.txt \
submitting-patches.txt \
translation-help.txt \
Doxyfile \
$(ASCIIDOC_MANS) \
$(DOXYGEN_MANS)
# Files that should be removed, but which Automake does not know.
MOSTLYCLEANFILES = *.xml
MAINTAINERCLEANFILES = $(ASCIIDOC_MANS)
MOSTLYCLEANFILES = *.xml $(ASCIIDOC_MANS) $(HTML_DOCS) repo-remove.8
# Ensure manpages are fresh when building a dist tarball
dist-hook:
$(MAKE) $(AM_MAKEFLAGS) clean
$(MAKE) $(AM_MAKEFLAGS) all
if USE_GIT_VERSION
GIT_VERSION := $(shell sh -c 'git describe --abbrev=4 | sed s/^v//')-dirty
REAL_PACKAGE_VERSION = $(GIT_VERSION)
else
REAL_PACKAGE_VERSION = $(PACKAGE_VERSION)
endif
man_MANS =
dist_man_MANS = $(ASCIIDOC_MANS) repo-remove.8
@@ -38,39 +71,52 @@ dist_man_MANS = $(ASCIIDOC_MANS) repo-remove.8
if USE_DOXYGEN
man_MANS += $(DOXYGEN_MANS)
all: doxygen.in
all-local: doxygen.in
doxygen.in:
$(DOXYGEN) $(srcdir)/Doxyfile
endif
if USE_ASCIIDOC
html: $(HTML_DOCS)
ASCIIDOC_OPTS = \
-f asciidoc.conf \
-a pacman_version="$(PACKAGE_VERSION)" \
-a pacman_version="$(REAL_PACKAGE_VERSION)" \
-a pacman_date="`date +%Y-%m-%d`" \
-a sysconfdir=$(sysconfdir)
A2X_OPTS = \
--no-xmllint \
-d manpage \
-f manpage \
--xsltproc-opts='-param man.endnotes.list.enabled 0' \
--xsltproc-opts='-param man.endnotes.are.numbered 0'
$(ASCIIDOC_MANS):
a2x $(A2X_OPTS) --asciidoc-opts="$(ASCIIDOC_OPTS)" $@.txt
# These rules are due to the includes and files of the asciidoc text
$(ASCIIDOC_MANS): asciidoc.conf footer.txt
pacman.8: pacman.8.txt
makepkg.8: makepkg.8.txt
repo-add.8: repo-add.8.txt
PKGBUILD.5: PKGBUILD.5.txt PKGBUILD-example.txt
makepkg.conf.5: makepkg.conf.5.txt
pacman.conf.5: pacman.conf.5.txt
libalpm.3: libalpm.3.txt
a2x $(A2X_OPTS) --asciidoc-opts="$(ASCIIDOC_OPTS)" $@.txt
%.html: %.txt
asciidoc $(ASCIIDOC_OPTS) -a linkcss $*.txt
dos2unix $@
# Customizations for certain HTML docs
$(HTML_MANPAGES): asciidoc.conf footer.txt
$(HTML_OTHER): asciidoc.conf
%.8.html: ASCIIDOC_OPTS += -d manpage
%.5.html: ASCIIDOC_OPTS += -d manpage
%.3.html: ASCIIDOC_OPTS += -d manpage
# Dependency rules
pacman.8 pacman.8.html: pacman.8.txt
makepkg.8 makepkg.8.html: makepkg.8.txt
repo-add.8 repo-add.8.html: repo-add.8.txt
PKGBUILD.5 PKGBUILD.5.html: PKGBUILD.5.txt PKGBUILD-example.txt
makepkg.conf.5 makepkg.conf.5.html: makepkg.conf.5.txt
pacman.conf.5 pacman.conf.5.html: pacman.conf.5.txt
libalpm.3 libalpm.3.html: libalpm.3.txt
# this one is just a symlink
repo-remove.8: repo-add.8
ln -s repo-add.8 repo-remove.8
endif
rm -f repo-remove.8
$(LN_S) repo-add.8 repo-remove.8
# vim:set ts=2 sw=2 noet:

View File

@@ -1,10 +1,10 @@
# Maintainer: judd <jvinet@zeroflux.org>
# Maintainer: Joe User <joe.user@example.com>
pkgname=patch
pkgver=2.5.4
pkgrel=3
pkgdesc="A utility to apply patch files to original sources"
arch=(i686 x86_64)
arch=('i686' 'x86_64')
url="http://www.gnu.org/software/patch/patch.html"
license=('GPL')
groups=('base-devel')
@@ -13,8 +13,8 @@ source=(ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz)
md5sums=('ee5ae84d115f051d87fcaaef3b4ae782')
build() {
cd $startdir/src/$pkgname-$pkgver
cd $srcdir/$pkgname-$pkgver
./configure --prefix=/usr
make || return 1
make prefix=$startdir/pkg/usr install
make prefix=$pkgdir/usr install
}

View File

@@ -30,12 +30,22 @@ distribution of this package.
Options and Directives
----------------------
The following is a list of standard options and directives available for use
in a PKGBUILD. These are all understood and interpreted by makepkg, and most
will be directly transferred to the built package.
If you need to create any custom variables for use in your build process, it is
recommended to name your custom variables with an '_' (underscore) prefix.
This will prevent any possible name clashes with internal makepkg variables.
For example, to store the base kernel version in a variable, use something
similar to `$_basekernver`.
*pkgname*::
The name of the package. This has be a unix-friendly name as it will be
used in the package filename.
*pkgver*::
The version of the software as released from the author (e.g. \'2.7.1').
The version of the software as released from the author (e.g. '2.7.1').
*pkgrel*::
This is the release number specific to the Arch Linux release. This
@@ -55,19 +65,19 @@ Options and Directives
This field specifies the license(s) that apply to the package.
Commonly-used licenses are 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
field (e.g. `license=('GPL')`). If the package provides a license not
found in '/usr/share/licenses/common', then you should include the license
in the package itself and set `$$license=('custom')$$` or
`$$license=('custom:LicenseName')$$`. The license should be placed in
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 for a package, list all of them:
`$$license=('GPL' 'FDL')$$`.
`license=('GPL' 'FDL')`.
*install*::
Specifies a special install script that is to be included in the package.
This file should reside in the same directory as the PKGBUILD, and will
be copied into the package by makepkg. It does not need to be included
in the source array (e.g. `$$install=pkgname.install$$`).
in the source array (e.g. `install=pkgname.install`).
*source (array)*::
An array of source files required to build the package. Source files
@@ -77,6 +87,10 @@ Options and Directives
variables if possible when specifying the download location. Any files
that are compressed will automatically be extracted, unless found in
the noextract array listed below.
+
It is also possible to specify an optional filename, which is helpful
with weird URLs and for handling multiple source files with the same
name. The syntax is: `source=('filename::url')`.
*noextract (array)*::
An array of filenames corresponding to those from the source array. Files
@@ -89,14 +103,13 @@ Options and Directives
source array (in the same order). makepkg will use this to verify source
file integrity during subsequent builds. To easily generate md5sums, run
``makepkg -g >> PKGBUILD''. If desired, move the md5sums line to an
appropriate location. *NOTE:* makepkg supports multiple integrity
algorithms and their corresponding arrays (i.e. sha1sums for the SHA1
algorithm); however, official packages use only md5sums for the time
being.
appropriate location.
*sha1sums, etc.*::
Alternative integrity checks that makepkg supports, as noted in md5sums
above.
*sha1sums, sha256sums, sha384sums, sha512sums (arrays)*::
Alternative integrity checks that makepkg supports; these all behave
similar to the md5sums option described above. To enable use and generation
of these checksums, be sure to set up the `INTEGRITY_CHECK` option in
linkman:makepkg.conf[5].
*groups (array)*::
An array of symbolic names that represent groups of packages, allowing
@@ -105,7 +118,7 @@ Options and Directives
*arch (array)*::
Defines on which architectures the given package is available (e.g.
`$$arch=('i686' 'x86_64')$$`).
`arch=('i686' 'x86_64')`).
*backup (array)*::
A space-delimited array of filenames, without preceding slashes, that
@@ -127,11 +140,11 @@ Options and Directives
depends.
*optdepends (array)*::
An array of optional packages (and accompanying reasons) that are not
essential to the package, but would offer increased functionality or other
features when installed. optdepends are currently for informational
purposes only and are not utilized by pacman during dependency resolution.
The format should be similar to the following:
An array of packages (and accompanying reasons) that are not essential for
base functionality, but may be necessary to make full use of the contents
of this package. optdepends are currently for informational purposes only
and are not utilized by pacman during dependency resolution. The format
should be similar to the following:
optdepends=('fakeroot: for makepkg usage as normal user')
@@ -147,7 +160,9 @@ Options and Directives
depend on 'cron' rather than 'dcron OR fcron'.
Versioned provisions are also possible, in the 'name=version' format.
For example, dcron can provide 'cron=2.0' to satisfy the 'cron>=2.0'
dependency of other packages.
dependency of other packages. Provisions involving the '>' and '<'
operators are invalid as only specific versions of a package may be
provided.
*replaces (array)*::
An array of packages that this package should replace, and can be used
@@ -172,8 +187,8 @@ Options and Directives
disable this option.
*docs*;;
Save doc and info directories. If you wish to delete doc and
info directories, specify `!docs` in the array.
Save doc directories. If you wish to delete doc directories,
specify `!docs` in the array.
*libtool*;;
Leave libtool (.la) files in packages. Specify `!libtool` to
@@ -182,6 +197,9 @@ Options and Directives
*emptydirs*;;
Leave empty directories in packages.
*zipman*;;
Compress man and info pages with gzip.
*ccache*;;
Allow the use of ccache during build. More useful in its negative
form `!ccache` with select packages that have problems building
@@ -202,9 +220,65 @@ Options and Directives
Force the package to be upgraded by a pacman system upgrade
operation, even if the version number would normally not trigger
such an upgrade. This is useful when the version numbering scheme
of a package changes (or is alphanumeric).
of a package changes (or is alphanumeric). See linkman:pacman[8] for
more information on version comparisons.
build() Function
----------------
In addition to the above directives, the build() bash function comprises the
remainder of the PKGBUILD. This is directly sourced and executed by makepkg, so
anything that bash or the system has available is available for use here. Be
sure any exotic commands used are covered by `makedepends`.
All of the above variables such as `pkgname` and `pkgver` are available for use
in the build function. In addition, makepkg defines three variables for your
use during the build and install process. These three variables are as follows:
*startdir*::
This contains the absolute path to the directory where the PKGBUILD was
located, which is usually the output of `$(pwd)` when makepkg is started.
*srcdir*::
This points to the directory where makepkg extracts or copies all source
files.
*pkgdir*::
This points to the directory where makepkg bundles the installed package
(this directory will become the root directory of your built package).
If you create any variables of your own in the build function, it is
recommended to use the bash `local` keyword to scope the variable to inside
the build function.
package() Function
------------------
An optional package() function can be specified in addition to the build() function.
This function is run immediately after the build() function. When specified in
combination with the fakeroot BUILDENV option in linkman:makepkg.conf[5], fakeroot
usage will be limited to running the packaging stage. The build() function will be
run as the user calling makepkg.
Package Splitting
-----------------
makepkg supports building multiple packages from a single PKGBUILD. This is achieved
by assigning an array of package names to the `pkgname` directive. Each split package
uses a corresponding packaging function with name `package_foo()`, where `foo` is the
name of the split package.
All options and directives for the split packages default to the global values given
within the PKGBUILD. However, some of these can be overridden within each split
package's packaging function. The following variables can be overridden: `pkgdesc`,
`license`, `groups`, `depends`, `optdepends`, `provides`, `conflicts`, `replaces`,
`backup`, `options` and `install`.
An optional global directive is available when building a split package:
*pkgbase*::
The name used to refer to the group of packages in the output of makepkg
and in the naming of source-only tarballs. If not specified, the first
element in the `pkgname` array is used.
Install/Upgrade/Remove Scripting
--------------------------------
Pacman has the ability to store and execute a package-specific script when it
@@ -318,11 +392,10 @@ The following is an example PKGBUILD for the 'patch' package. For more
examples, look through the build files of your distribution's packages. For
those using Arch Linux, consult the ABS tree.
[sh]
source~~~~~
[source,sh]
-------------------------------
include::PKGBUILD-example.txt[]
source~~~~~
-------------------------------
See Also
--------

View File

@@ -8,7 +8,11 @@
# Show man link as: <command>(<section>); if section is defined, else just show
# the command.
[macros]
(?su)[\\]?(?P<name>linkman):(?P<target>\S*?)\[(?P<attrlist>.*?)\]=
[attributes]
asterisk=&#42;
plus=&#43;
caret=&#94;
startsb=&#91;
@@ -30,13 +34,7 @@ ifndef::docbook-xsl-172[]
[listingblock]
<example><title>{title}</title>
<literallayout>
ifdef::doctype-manpage[]
&#10;.ft C&#10;
endif::doctype-manpage[]
|
ifdef::doctype-manpage[]
&#10;.ft&#10;
endif::doctype-manpage[]
</literallayout>
{title#}</example>
endif::docbook-xsl-172[]

View File

@@ -15,9 +15,16 @@ mailto:pacman-dev@archlinux.org[].
Authors
-------
Current maintainers:
* Dan McGee <dan@archlinux.org>
* Xavier Chantry <shiningxc@gmail.com>
* Aaron Griffin <aaron@archlinux.org>
Past contributors:
* Judd Vinet <jvinet@zeroflux.org>
* Aurelien Foret <aurelien@archlinux.org>
* Aaron Griffin <aaron@archlinux.org>
* Dan McGee <dan@archlinux.org>
See the 'AUTHORS' file for additional contributors.

195
doc/index.txt Normal file
View File

@@ -0,0 +1,195 @@
Pacman Home Page
================
A simple library-based package manager.
Introduction
------------
pacman is a utility which manages software packages in Linux. It uses simple
compressed files as a package format, and maintains a text-based package
database (more of a hierarchy), just in case some hand tweaking is necessary.
pacman does not strive to "do everything." It will add, remove and upgrade
packages in the system, and it will allow you to query the package database for
installed packages, files and owners. It also attempts to handle dependencies
automatically and can download packages from a remote server.
History
~~~~~~~
Version 2.0 of pacman introduced the ability to sync packages (the `--sync`
option) with a master server through the use of package databases. Prior to
this, packages would have to be installed manually using the `--add` and
`--upgrade` operations.
Version 3.0 was the switch to a two-part pacman- a backend named libalpm
(library for Arch Linux Package Management), and the familiar pacman frontend.
Speed in many cases was improved, along with dependency and conflict resolution
being able to handle a much wider variety of cases. The switch to a
library-based program should also make it easier in the future to develop
alternative front ends.
Documentation
-------------
Manpages
~~~~~~~~
There are several manpages available for the programs, utilities, and
configuration files dealing with pacman.
* linkman:PKGBUILD[5]
* linkman:libalpm[3]
* linkman:makepkg[8]
* linkman:makepkg.conf[5]
* linkman:pacman[8]
* linkman:pacman.conf[5]
* linkman:repo-add[8]
Changelog
~~~~~~~~~
For a good idea of what is going on in pacman development, take a look at the
link:http://projects.archlinux.org/?p=pacman.git[Gitweb] summary
page for the project.
See the most recent
link:http://projects.archlinux.org/?p=pacman.git;a=blob_plain;f=NEWS;hb=HEAD[NEWS]
file for a not-as-frequently-updated list of changes. However, this should
contain the biggest changes in a format more concise than the commit log.
Releases
--------
`------------`-------
Date Version
---------------------
2009-01-05 v3.2.2
2008-08-26 v3.2.1
2008-07-30 v3.2.0
2008-04-01 v3.1.4
2008-03-06 v3.1.3
2008-02-20 v3.1.2
2008-01-20 v3.1.1
2008-01-09 v3.1.0
2007-09-16 v3.0.6
2007-06-17 v3.0.5
2007-05-08 v3.0.4
2007-04-28 v3.0.3
2007-04-23 v3.0.2
2007-04-04 v3.0.1
2007-03-25 v3.0.0
2006-02-02 v2.9.8
2005-09-16 v2.9.7
2005-06-10 v2.9.6
2005-01-11 v2.9.5
2004-12-19 v2.9.4
2004-12-18 v2.9.3
2004-09-25 v2.9.2
2004-09-24 v2.9.1
2004-09-18 v2.9
---------------------
Source code for all releases is available at
link:ftp://ftp.archlinux.org/other/pacman/[]. To install, download the newest
available source tarball, unpack it in a directory, and run the three magic
commands:
$ ./configure
$ make
# make install
You may wish to read the options presented by `./configure --help` in order to
set appropriate paths and build options that are correct for your system.
Development
-----------
Mailing List
~~~~~~~~~~~~
There is a mailing list devoted to pacman development, hosted by Arch Linux.
link:http://www.archlinux.org/mailman/listinfo/pacman-dev/[Subscribe] or
link:http://www.archlinux.org/pipermail/pacman-dev/[view the archives].
Source Code
~~~~~~~~~~~
Development of pacman is currently done in GIT. The central repository is
hosted by Arch Linux, although some of the developers have their own trees (ask
on the above mailing lists if you are interested in finding the locations of
these trees).
The current development tree can be fetched with the following command:
git clone git://projects.archlinux.org/pacman.git pacman
which will fetch the full development history into a directory named pacman.
You can browse the source as well using
link:http://projects.archlinux.org/?p=pacman.git[Gitweb].
If you are interested in hacking on pacman, it is highly recommended you join
the mailing list mentioned above, as well as take a quick glance at our
link:HACKING.html[HACKING] document.
link:submitting-patches.html[submitting-patches] is also a recommended read.
Not as familiar with code as you'd like to be, but still want to help out? If
you speak a foreign language, you can help by either creating or updating a
translation file for your native language. Instructions can be found in
link:translation-help.html[translation-help].
Other Utilities
~~~~~~~~~~~~~~~
Although the package manager itself is quite simple, many scripts have been
developed that help automate building and installing packages. These are used
extensively in link:http://archlinux.org[Arch Linux]. Most of these utilities
are available in the Arch Linux projects
link:http://projects.archlinux.org/[Gitweb browser].
Utilities available:
* link:http://projects.archlinux.org/?p=abs.git[abs] - ABS (Arch Build System), scripts to download & use the Arch Linux PKGBUILD tree
* link:http://projects.archlinux.org/?p=devtools.git[devtools] - tools to assist in packaging and dependency checking
* link:http://projects.archlinux.org/?p=namcap.git[namcap] - a package analysis utility written in python
* link:http://projects.archlinux.org/?p=pacbuild.git[pacbuild] - a package building system utilizing a daemon
* link:http://projects.archlinux.org/?p=srcpac.git[srcpac] - a bash build-from-source pacman wrapper
Bugs
----
If you find bugs (which is quite likely), please email them to the pacman-dev
mailing last at mailto:pacman-dev@archlinux.org[] with specific information
such as your commandline, the nature of the bug, and even the package database
if it helps.
You can also post a bug to the Archlinux bug tracker
link:http://bugs.archlinux.org/index.php?project=3[Flyspray]. Be sure to file
bugs under the Pacman project.
Pacman/libalpm in the Wild
--------------------------
Although Arch Linux is the primary user of pacman and libalpm, other
distributions and projects also use pacman as a package management tool. In
addition, there have been several projects started to provide a frontend GUI to
pacman and/or libalpm.
Arch derivatives:
* link:http://archie.dotsrc.org/[Archie] - Arch Live on steroids
* link:http://www.faunos.com/[FaunOS] - A portable, fully integrated operating system based on Arch Linux
* link:http://larch.berlios.de/[larch] - A live CD/DVD/USB-stick construction kit for Arch Linux
Other distributions:
* link:http://www.delilinux.org/[DeLi Linux] - "Desktop Light" Linux, a Linux distribution for old computers
* link:http://www.frugalware.org/[Frugalware Linux] - A general purpose Linux distribution for intermediate users (pacman is forked and maintained separately)
Pacman/libalpm frontends:
* link:http://shaman.iskrembilen.com/[Shaman] - A GUI frontend using Qt and libalpm
Copyright
---------
pacman is Copyright (C) 2006-2009 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.
/////
vim: set ts=2 sw=2 syntax=asciidoc et:
/////

View File

@@ -28,6 +28,11 @@ build the package, install the package into a temporary root, make
customizations, generate meta-info, and package the whole thing up for pacman
to use.
NOTE: makepkg uses your current locale by default and does not unset it when
building packages. If you wish to share your build output with others when
seeking help or for other purposes, you may wish to run "`LC_ALL=C makepkg`" so
your logs and output are not localized.
Options
-------
*\--asroot*::
@@ -38,14 +43,7 @@ Options
*-A, \--ignorearch*::
Ignore a missing or incomplete arch field in the build script. This is
for rebuilding packages from source when the PKGBUILD may be slightly
outdated and not updated with an `$$arch=('yourarch')$$` field.
*-b, \--builddeps*::
Build missing dependencies from source. When makepkg finds missing
build-time or run-time dependencies, it will look for the dependencies'
PKGBUILD files under `SRCROOT` (set in linkman:makepkg.conf[5]). If it
finds them it will call makepkg to build and install the missing
dependencies. The child calls will be made with the `-b` and `-i` options.
outdated and not updated with an `arch=('yourarch')` field.
*-c, \--clean*::
Clean up leftover work files and directories after a successful build.
@@ -54,6 +52,9 @@ Options
Removes all cached source files from the directory specified in `SRCDEST`
in linkman:makepkg.conf[5].
*--config* <`/path/to/config`>::
Use an alternate config file instead of the `/etc/makepkg.conf` default;
*-d, \--nodeps*::
Do not perform any dependency checks. This will let you override and
ignore any dependencies required. There is a good chance this option
@@ -73,7 +74,7 @@ Options
default to the current directory. This allows the built package to be
overwritten.
*-forcever*::
*--forcever*::
This is a hidden option that should *not* be used unless you really know
what you are doing. makepkg uses this internally when calling itself to
set the new development pkgver of the package.
@@ -83,7 +84,7 @@ Options
if required and generate integrity checks. The integrity checks
generated are determined by the value of the INTEGRITY_CHECK array in
linkman:makepkg.conf[5]. This output can be redirected into your
PKGBUILD for source validation (`makepkg -g >> PKGBUILD`).
PKGBUILD for source validation using "`makepkg -g >> PKGBUILD`".
*-h, \--help*::
Output syntax and command line options.
@@ -97,6 +98,13 @@ Options
Install or upgrade the package after a successful build using
linkman:pacman[8].
*-L, \--log*::
Enable makepkg build logging. This will use the *tee* program to send
output of the `build()` function to both the console and to a text file in
the build directory named `pkgname-pkgver-pkgrel-arch.log`. As mentioned
above, the build log will be localized so you may want to set your locale
accordingly if sharing the log output with others.
*-m, \--nocolor*::
Disable color in output messages.
@@ -111,22 +119,30 @@ Options
*-r, \--rmdeps*::
Upon successful build, remove any dependencies installed by makepkg
during dependency auto-resolution (using `-b` or `-s`).
during dependency auto-resolution and installation when using `-s`.
*-R, \--repackage*::
Repackage contents of pkg/ without rebuilding the package. This is
useful if you forgot a depend or install file in your PKGBUILD and the
build itself will not change.
Repackage contents of the package without rebuilding the package. This
is useful if you forgot a depend or install file in your PKGBUILD and
the build itself will not change.
*-s, \--syncdeps*::
Install missing dependencies using pacman. When build-time or run-time
dependencies are not found, pacman will try to resolve them. If
successful, the missing packages will be downloaded and installed.
*\--allsource*::
Do not actually build the package, but build a source-only tarball that
includes all sources, including those that are normally download via
makepkg. This is useful for passing a single tarball to another program
such as a chroot or remote builder. It will also satisfy requirements of
the GPL when distributing binary packages.
*\--source*::
Do not actually build the package, but build a source-only tarball. This
is useful for passing a single tarball to another program such as a
chroot, remote builder, or an AUR upload.
Do not actually build the package, but build a source-only tarball that
does not include sources that can be fetched via a download URL. This is
useful for passing a single tarball to another program such as a chroot,
remote builder, or a tarball upload.
*\--noconfirm*::
(Passed to pacman) Prevent pacman from waiting for user input before

View File

@@ -34,9 +34,13 @@ Options
**DLAGENTS=(**\'protocol::/path/to/command [options]' ...**)**::
Sets the download agents used to fetch source files specified with a URL in
the linkman:PKGBUILD[5] file. Options can be specified for each command as
well; the download URL is placed on the end of the command. This is more
flexible than the former `FTPAGENT` variable, as any protocol can have a
download agent. Several examples are provided in the default makepkg.conf.
well, and any protocol can have a download agent. Several examples are provided
in the default makepkg.conf.
+
If present, `%u` will be replaced with the download URL. Otherwise, the
download URL will be placed on the end of the command. If present, `%o` will
be replaced with the local filename, plus a ``.part'' extension, which allows
makepkg to handle resuming file downloads.
**CARCH=**"carch"::
Specifies your computer architecture; possible values include such things
@@ -57,11 +61,16 @@ Options
**CXXFLAGS=**"cxxflags"::
Flags used for the C++ compiler; see CFLAGS for more info.
**LDFLAGS=**"ldflags"::
Flags used for the linker. Several options may be specified with common
usage resembling ``-Wl,--hash-style=gnu''. Read ld(1) for more details on
available linker flags.
**MAKEFLAGS=**"makeflags"::
This is often used to set the number of jobs used, for example, `-j2`.
Other flags that make accepts can also be passed.
**BUILDENV=(**fakeroot !distcc color !ccache !xdelta**)**::
**BUILDENV=(**fakeroot !distcc color !ccache**)**::
This array contains options that affect the build environment, the defaults
are shown here. All options should always be left in the array; to enable
or disable an option simply remove or place an ``!'' at the front of the
@@ -84,18 +93,13 @@ Options
be disabled for individual packages by placing `!ccache` in the
PKGBUILD options array.
*xdelta*;;
Generate an xdelta binary patch from previous to current package. The
previous package must be available in the makepkg cache directory for
this to occur.
**DISTCC_HOSTS=**"host1 ..."::
If using DistCC, this is used to specify a space-delimited list of hosts
running in the DistCC cluster. In addition, you will want to modify your
`MAKEFLAGS`.
**OPTIONS=(**strip !docs libtool emptydirs**)**::
This array contains options that affect the default packaging. All four are
**OPTIONS=(**strip !docs libtool emptydirs zipman**)**::
This array contains options that affect the default packaging. They are
equivalent to options that can be placed in the PKGBUILD; the defaults are
shown here. All options should always be left in the array; to enable or
disable an option simply remove or place an ``!'' at the front of the
@@ -107,27 +111,55 @@ Options
option.
*docs*;;
Save doc and info directories. If you wish to delete doc and info
directories, specify `!docs' in the array.
Save doc directories. If you wish to delete doc directories, specify
`!docs` in the array. The directories affected are specified by the
`DOC_DIRS` variable.
*libtool*;;
Leave libtool (.la) files in packages. Specify `!libtool' to remove
Leave libtool (.la) files in packages. Specify `!libtool` to remove
them.
*emptydirs*;;
Leave empty directories in packages.
*zipman*;;
Compress manual (man and info) pages with gzip. The directories
affected are specified by the `MAN_DIRS` variable.
*purge*;;
Remove files specified by the `PURGE_TARGETS` variable from the
package.
**INTEGRITY_CHECK=(**check1 ...**)**::
File integrity checks to use. Multiple checks may be specified; this
affects both generation and checking. The current valid options are:
`md5`, `sha1`, `sha256`, `sha384`, and `sha512`.
**DOC_DIRS=(**usr/{,share/}{info,doc} ...**)**::
If "!docs" is specified in the OPTIONS array, this variable will
**MAN_DIRS=(**{usr{,/local}{,/share},opt/*}/{man,info} ...**)**::
If `zipman` is specified in the OPTIONS array, this variable will
instruct makepkg where to look to compress manual (man and info)
pages. If you build packages 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.
**DOC_DIRS=(**usr/{,share/}{doc,gtk-doc} ...**)**::
If `!docs` is specified in the OPTIONS array, this variable will
instruct makepkg where to look to remove docs. If you build packages
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.
**STRIP_DIRS=(**bin lib sbin usr/{bin,lib} ...**)**::
If `strip` is specified in the OPTIONS array, this variable will
instruct makepkg where to look to for files to strip. If you build
packages 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.
**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
useful for index files that are added by multiple packages.
**PKGDEST=**"/path/to/folder"::
If this value is not set, packages will by default be placed in the
current directory (location of the linkman:PKGBUILD[5]). Many people
@@ -139,11 +171,11 @@ Options
in the current directory. Many people like to keep all source files in
a central location for easy cleanup, so this path can be set here.
**PACKAGER=**"John Doe <john@doe.com>"::
**PACKAGER=**"John Doe <john@example.com>"::
This value is used when querying a package to see who was the builder.
It is recommended you change this to your name and email address.
*BUILDSCRIPT*, *PKGEXT*, *SRCEXT*, *DB_COMPRESSION*, *DB_CHECKSUMS*::
*PKGEXT*, *SRCEXT*::
Do not touch these unless you know what you are doing.

View File

@@ -22,28 +22,24 @@ hooks, and the ability to sync your local machine with a remote ftp server to
automatically upgrade packages. Pacman packages are a zipped tar format.
Since version 3.0.0, pacman has been the frontend to linkman:libalpm[3], the
"Arch Linux Package Management" library. This library allows alternative front
ends to be written (for instance, a GUI front end).
``Arch Linux Package Management'' library. This library allows alternative
front ends to be written (for instance, a GUI front end).
Operations
----------
*-A, \--add* (deprecated)::
Add a package to the system. Either a URL or file path can be specified.
The package will be uncompressed into the installation root and the
database will be updated. The package will not be installed if another
version is already installed. *NOTE*: please use '\--upgrade' in place of
this option.
*-Q, \--query*::
Query the package database. This operation allows you to view installed
packages and their files, as well as meta-information about individual
packages (dependencies, conflicts, install date, build date, size). This
can be run against the local package database or can be used on
individual '.tar.gz' packages. See <<QO,Query Options>> below.
individual '.tar.gz' packages. In the first case, if no package names
are provided in the command line, all installed packages will be
queried. Additionally, various filters can be applied on the package
list. See <<QO,Query Options>> below.
*-R, \--remove*::
Remove a package from the system. Groups can also be specified to be
Remove package(s) from the system. Groups can also be specified to be
removed, in which case every package in that group will be removed.
Files belonging to the specified package will be deleted, and the
database will be updated. Most configuration files will be saved
@@ -56,7 +52,9 @@ Operations
example, `pacman -S qt` will download and install qt and all the
packages it depends on. If a package name exists in more than one repo, the
repo can be explicitly specified to clarify the package to install:
`pacman -S testing/qt`.
`pacman -S testing/qt`. You can also specify version requirements:
`pacman -S "bash>=3.2"`. (Quotes are needed, otherwise your shell
interprets ">" as redirection to file.)
+
In addition to packages, groups can be specified as well. For example, if
gnome is a defined package group, then `pacman -S gnome` will install every
@@ -68,11 +66,24 @@ provide the same functionality as foo will be searched for. If any package is
found, it will be installed.
+
You can also use `pacman -Su` to upgrade all packages that are out of date. See
<<SO,Sync Options>> below.
<<SO,Sync Options>> below. When upgrading, pacman performs version comparison
to determine which packages need upgrading. This behavior operates as follows:
Alphanumeric:
1.0a < 1.0alpha < 1.0b < 1.0beta < 1.0p < 1.0pre < 1.0rc < 1.0
Numeric:
1 < 1.0 < 1.1 < 1.1.1 < 1.2 < 2.0 < 3.0.0
*-T, \--deptest*::
Check dependencies; this is useful in scripts such as makepkg to check
installed packages. This operation will check each dependency specified and
return a list of those which are not currently satisfied on the system.
This operation accepts no other options. Example usage: `pacman -T qt
"bash>=3.2"`.
*-U, \--upgrade*::
Upgrade or add a package to the system. Either a URL or file path can be
specified. This is a "remove-then-add" process. See <<HCF,Handling Config
Upgrade or add package(s) to the system. Either a URL or file path can be
specified. This is a ``remove-then-add'' process. See <<HCF,Handling Config
Files>> for an explanation on how pacman takes care of config files.
*-V, \--version*::
@@ -86,16 +97,22 @@ You can also use `pacman -Su` to upgrade all packages that are out of date. See
Options
-------
*\--asdeps*::
Install packages non-explicitly; in other works, fake their install reason
Install packages non-explicitly; in other words, fake their install reason
to be installed as a dependency. This is useful for makepkg and other
build from source tools that need to install dependencies before building
the package.
*\--asexplicit*::
Install packages explicitly; in other words, fake their install reason to
be explicitly installed. This is useful if you want to mark a dependency
as explicitly installed so it will not be removed by the '\--recursive'
remove operation.
*-b, \--dbpath* <'path'>::
Specify an alternative database location (a typical default is
``/var/lib/pacman''). This should not be used unless you know what you are
doing. *NOTE*: if specified, this is an absolute path and the root path is
not automatically prepended. This behavior changed in pacman 3.1.0.
not automatically prepended.
*-d, \--nodeps*::
Skips all dependency checks. Normally, pacman will always check a
@@ -113,19 +130,22 @@ Options
not be used as a way to install software into ``/usr/local'' instead of
``/usr''. This option is used if you want to install a package on a
temporary mounted partition which is "owned" by another system.
*NOTE*: If database path or logfile are not specified on either the
*NOTE*: if database path or logfile are not specified on either the
command line or in linkman:pacman.conf[5], their default location will
be inside this root path.
*-v, --verbose*::
*-v, \--verbose*::
Output paths such as as the Root, Conf File, DB Path, Cache Dirs, etc.
*\--debug*::
Display debug messages. When reporting bugs, this option is recommended
to be used.
*\--cachedir* <'dir'>::
Specify an alternative package cache location (a typical default is
``/var/cache/pacman/pkg''). Multiple cache directories can be specified,
and they are tried in the order they are passed to pacman. *NOTE*: this
is an absolute path, the root path is not automatically prepended. This
behavior changed in pacman 3.1.0.
is an absolute path, the root path is not automatically prepended.
*\--config* <'file'>::
Specify an alternate configuration file.
@@ -135,7 +155,7 @@ Options
the installation root setting.
*\--noconfirm*::
Bypass any and all "Are you sure?" messages. It's not a good idea to do
Bypass any and all ``Are you sure?'' messages. It's not a good idea to do
this unless you want to run pacman from a script.
*\--noprogressbar*::
@@ -154,16 +174,17 @@ Query Options[[QO]]
it will be shown if available.
*-d, \--deps*::
List all packages installed as dependencies. This option can be combined
with '-t' for listing real orphans- packages that were installed as
dependencies but are no longer required by any installed package. ('-Qdt'
is equivalent to the pacman 3.0.X '-Qe' option.)
Restrict or filter output to packages installed as dependencies. This
option can be combined with '-t' for listing real orphans- packages that
were installed as dependencies but are no longer required by any
installed package. ('-Qdt' is equivalent to the pacman 3.0.X '-Qe'
option.)
*-e, \--explicit*::
List all packages explicitly installed. This option can be combined with
'-t' to list top-level packages- those packages that were explicitly
installed but are not required by any other package. ('-Qet' is equivalent
to the pacman 2.9.X '-Qe' option.)
Restrict or filter output to packages explicitly installed. This option
can be combined with '-t' to list top-level packages- those packages
that were explicitly installed but are not required by any other
package. ('-Qet' is equivalent to the pacman 2.9.X '-Qe' option.)
*-g, \--groups*::
Display all packages that are members of a named group. If a name is not
@@ -175,6 +196,11 @@ Query Options[[QO]]
'\--info' or '-i' flags will also display the list of backup files and
their modification states.
*-k \--check*::
Check that all files owned by the given package(s) are present on the
system. If packages are not specified or filter flags are not provided,
check all installed packages.
*-l, \--list*::
List all files owned by a given package. Multiple packages can be
specified on the command line.
@@ -193,17 +219,31 @@ Query Options[[QO]]
not an entry in the database. The file will be decompressed and queried.
This is useful in combination with '\--info' and '\--list'.
*-q, \--quiet*::
Show less information for certain query operations. (This is useful when
pacman's output is processed in a script.) Search will only show package
names and not version, group, and description information; owns will
only show package names instead of "file is owned by pkg" messages; group
will only show package names and omit group names; list will only show
files and omit package names; check will only show pairs of package names
and missing files; a bare query will only show package names
rather than names and versions.
*-s, \--search* <'regexp'>::
This will search each locally-installed package for names or
descriptions that match `regexp`.
descriptions that match `regexp`. When you include multiple search
terms, only packages with descriptions matching ALL of those terms will
be returned.
*-t, \--unrequired*::
Restrict or filter output to packages not required by any currently
installed package.
*-u, \--upgrades*::
Lists all packages that are out of date on the local system. This option
works best if the sync database is refreshed using '-Sy'.
Restrict or filter output to packages that are out of date on the local
system. (Only package versions are used to find outdated packages,
replacements are not checked here.) This option works best if the sync
database is refreshed using '-Sy'.
Remove Options[[RO]]
@@ -226,7 +266,12 @@ Remove Options[[RO]]
that (A) they are not required by other packages; and (B) they were not
explicitly installed by the user. This operation is recursive and analogous
to a backwards '\--sync' operation, and helps keep a clean system without
orphans.
orphans. If you want to omit condition (B), pass this option twice.
*-u, \--unneeded*::
Removes the targets that are not required by any other packages.
This is mostly useful when removing a group without using the '-c' option,
to avoid breaking any dependencies.
Sync Options[[SO]]
@@ -241,10 +286,9 @@ Sync Options[[SO]]
packages that are no longer installed; use two to remove all packages
from the cache. In both cases, you will have a yes or no option to
remove packages and/or unused downloaded databases.
*-e, \--dependsonly*::
Install all dependencies of a package, but not the specified package
itself. This is pretty useless and we're not sure why it even exists.
+
If you use a network shared cache, see the 'CleanMethod' option in
linkman:pacman.conf[5].
*-g, \--groups*::
Display all the members for each package group specified. If no group
@@ -264,9 +308,18 @@ Sync Options[[SO]]
dependencies yet to be installed. These can be piped to a file and
downloaded at a later time, using a program like wget.
*-q, \--quiet*::
Show less information for certain sync operations. (This is useful when
pacman's output is processed in a script.) Search will only show package
names and not repo, version, group, and description information; list
will only show package names and omit databases and versions; group will
only show package names and omit group names.
*-s, \--search* <'regexp'>::
This will search each package in the sync databases for names or
descriptions that match `regexp`.
descriptions that match `regexp`. When you include multiple search
terms, only packages with descriptions matching ALL of those terms will
be returned.
*-u, \--sysupgrade*::
Upgrades all packages that are out of date. Each currently-installed
@@ -274,7 +327,10 @@ Sync Options[[SO]]
report of all packages to upgrade will be presented and the operation
will not proceed without user confirmation. Dependencies are
automatically resolved at this level and will be installed/upgraded if
necessary.
necessary. Pass this option twice to enable package downgrade; in this
case pacman will select sync packages whose version does not match with
the local version. This can be useful when the user switches from a testing
repo to a stable one.
*-w, \--downloadonly*::
Retrieve all packages from the server, but do not install/upgrade
@@ -288,7 +344,7 @@ Sync Options[[SO]]
to date.
*\--needed*::
Only install the targets that are not already installed and up-to-date.
Don't reinstall the targets that are already up-to-date.
*\--ignore* <'package'>::
Directs pacman to ignore upgrades of package even if there is one

View File

@@ -25,6 +25,7 @@ which defines global options.
Example
-------
--------
#
# pacman.conf
@@ -40,6 +41,9 @@ Include = /etc/pacman.d/core
Server = file:///home/pkgs
--------
NOTE: Each directive must be in CamelCase. If the case isn't respected, the
directive won't be recognized. For example. noupgrade or NOUPGRADE will not
work.
Options
-------
@@ -55,7 +59,7 @@ Options
Overrides the default location of the toplevel database directory. A
typical default is ``/var/lib/pacman/''. Most users will not need to set
this option. *NOTE*: if specified, this is an absolute path and the root
path is not automatically prepended. This behavior changed in pacman 3.1.0.
path is not automatically prepended.
*CacheDir =* path/to/cache/dir::
Overrides the default location of the package cache directory. A typical
@@ -63,14 +67,13 @@ Options
specified, and they are tried in the order they are listed in the config
file. If a file is not found in any cache directory, it will be downloaded
to the first cache directory with write access. *NOTE*: this is an absolute
path, the root path is not automatically prepended. This behavior changed
in pacman 3.1.0.
path, the root path is not automatically prepended.
*LogFile =* '/path/to/file'::
Log actions directly to a file. A typical default is
``/var/log/pacman.log''. As of pacman 3.1.0, this does not need to be
specified by default. This is an absolute path and root is not prepended.
Overrides the default location of the pacman log file. A typical default
is ``/var/log/pacman.log''. This is an absolute path and the root directory
is not prepended.
*HoldPkg =* package ...::
If a user tries to '\--remove' a package that's listed in `HoldPkg`,
@@ -80,6 +83,12 @@ Options
Instructs pacman to ignore any upgrades for this package when performing
a '\--sysupgrade'.
*SyncFirst =* package ...::
Instructs pacman to check for newer version of these packages before any
sync operation. The user will have the choice to either cancel the current
operation and upgrade these packages first or go on with the current operation.
This option is typically used with the 'pacman' package.
*IgnoreGroup =* group ...::
Instructs pacman to ignore any upgrades for all packages in this
group when performing a '\--sysupgrade'.
@@ -104,8 +113,10 @@ Options
*NoUpgrade =* file ...::
All files listed with a `NoUpgrade` directive will never be touched during
a package install/upgrade. Do not include the leading slash when specifying
files.
a package install/upgrade, and the new files will be installed with a
'.pacnew' extension.
These files refer to files in the package archive, so do not include the
leading slash (the RootDir) when specifying them.
*NoExtract =* file ...::
All files listed with a `NoExtract` directive will never be extracted from
@@ -113,6 +124,17 @@ Options
of a package to be installed. For example, if your httpd root uses an
'index.php', then you would not want the 'index.html' file to be extracted
from the 'apache' package.
These files refer to files in the package archive, so do not include the
leading slash (the RootDir) when specifying them.
*CleanMethod =* KeepInstalled | KeepCurrent::
If set to `KeepInstalled` (the default), the '-Sc' operation will clean
packages that are no longer installed (not present in the local database).
If set to `KeepCurrent`, '-Sc' will clean outdated packages (not present in
any sync database).
The second behavior is useful when the package cache is shared among
multiple machines, where the local databases are usually different, but the
sync databases in use could be the same.
*UseSyslog*::
Log action messages through syslog(). This will insert log entries into
@@ -123,11 +145,11 @@ Options
*UseDelta*::
Download delta files instead of complete packages if possible. Requires
the xdelta program to be installed.
the xdelta3 program to be installed.
*TotalDownload*::
When downloading, display the amount downloaded, download rate, ETA,
and completed percentage of the entire download list list rather
and completed percentage of the entire download list rather
than the percent of each individual download target. The progress
bar is still based solely on the current file download.

View File

@@ -6,19 +6,13 @@ repo-add(8)
Name
----
////
* If we use this below line, the manpage name comes out all weird. We also
* can't use two separate lines, which is quite annoying. *
repo-add, repo-remove - package database maintenance utilities
////
repo-add - package database maintenance utility
Synopsis
--------
repo-add <path-to-db> [--force] <package> ...
repo-add [-q] <path-to-db> <package1> [<package2> ...]
repo-remove <path-to-db> <packagename> ...
repo-remove [-q] <path-to-db> <packagename> [<packagename2> ...]
Description
@@ -36,12 +30,9 @@ on the command line.
Options
-------
*--force* (repo-add only)::
Add a force entry to the sync database, which tells pacman to skip version
number comparison and update the package regardless. This flag can be
specified in the middle of the command line, with any packages listed
before the flag being added as normal entries, and any specified after
being marked as force upgrades.
*-q, \--quiet*::
Force this program to keep quiet and run silent except for warning and
error messages.
See Also

View File

@@ -0,0 +1,98 @@
Pacman - Submitting Patches
===========================
This document is here mainly to make the job of those who review patches
easier and is more of a guideline and not a strict set of rules. However,
please try to follow as much as you can.
NOTE: Some of this is paraphrased from the kernel documentation's
"SubmittingPatches" file.
Getting the most recent source
------------------------------
Patches need to be submitted in GIT format and are best if they are against the
latest version of the code. There are several helpful tutorials for getting
started with GIT if you have not worked with it before.
* http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html
* http://wiki.archlinux.org/index.php/Super_Quick_Git_Guide
The pacman code can be fetched using the following command:
git clone git://projects.archlinux.org/pacman.git
Creating your patch
-------------------
--
* use `git commit -s` for creating a commit of your changes.
The -s allows you to credit yourself by adding a "Signed Off By" line to
indicate who has "signed" the patch - who has approved it.
Signed-off-by: Aaron Griffin <aaron@archlinux.org>
Please use your real name and email address. Feel free to "scramble" the
address if you're afraid of spam.
* Describe your patch.
It helps if you describe the overview and goals of the patch in the git commit
log. This allows others to see what you intended so as to compare it to what
was actually done, and allows better feedback.
* Use `git format-patch` to create patches.
Your commit message will be shown above the patch by default when you will use
`git-format-patch`, including the signoff line.
--
Submitting your patch
---------------------
--
* Send the patch to the pacman-dev mailing list
The mailing list is the primary queue for review and acceptance. Here you
will get feedback, and let me know the details of your patch.
* No MIME, no links, no compression, no attachments. Just plain text.
Patches should be contained in the actual body of the email. There are many
reasons for this. First, it makes them easier to read with any mail reader,
it allows easier review "at a glance", and most importantly, it allows people
to comment on exact lines of the patch in reply emails.
`git send-email` allows you to send git formatted patches in plain text easily
and is the preferred method for submission to the mailing list.
--
After you submit
----------------
--
* Don't get discouraged
Any feedback you get, positive or negative, has nothing to do with you. If a
patch is rejected, try taking the suggestions into account and re-submitting.
We welcome most submissions here, and some may take a bit longer to get
looked over than others. If you think your patch got lost in the shuffle,
send another email to the list in reply to the original asking if anyone has
looked at it yet.
* Respond to feedback
When you do get feedback, it usually merits a response, whether this be a
resubmit of the patch with corrections or a follow-up email asking for
clarifications. When neither of these occurs, don't expect your patch to see
further review. The all-volunteer staff don't have time to fix up patches that
aren't their own.
--
/////
vim: set ts=2 sw=2 syntax=asciidoc et:
/////

View File

@@ -20,9 +20,10 @@ edit = sed \
-e 's|@ROOTDIR[@]|$(ROOTDIR)|g'
$(dist_sysconf_DATA): Makefile
rm -f $@ $@.tmp
$(edit) `test -f ./$@.in || echo $(srcdir)/`$@.in >$@.tmp
mv $@.tmp $@
@echo ' ' GEN $@;
@rm -f $@ $@.tmp
@$(edit) `test -f ./$@.in || echo $(srcdir)/`$@.in >$@.tmp
@mv $@.tmp $@
makepkg.conf: $(srcdir)/makepkg.conf.in
pacman.conf: $(srcdir)/pacman.conf.in

View File

@@ -8,11 +8,11 @@
#
#-- The download utilities that makepkg should use to acquire sources
# Format: 'protocol::agent'
DLAGENTS=('ftp::/usr/bin/wget -c --passive-ftp -t 3 --waitretry=3'
'http::/usr/bin/wget -c -t 3 --waitretry=3'
'https::/usr/bin/wget -c -t 3 --waitretry=3 --no-check-certificate'
'rsync::/usr/bin/rsync -z'
'scp::/usr/bin/scp -C')
DLAGENTS=('ftp::/usr/bin/wget -c --passive-ftp -t 3 --waitretry=3 -O %o %u'
'http::/usr/bin/wget -c -t 3 --waitretry=3 -O %o %u'
'https::/usr/bin/wget -c -t 3 --waitretry=3 --no-check-certificate -O %o %u'
'rsync::/usr/bin/rsync -z %u %o'
'scp::/usr/bin/scp -C %u %o')
# Other common tools:
# /usr/bin/snarf
@@ -31,6 +31,7 @@ CHOST="@CHOST@"
# -mtune optimizes for an architecture, but builds for whole processor family
CFLAGS="@CARCHFLAGS@-mtune=generic -O2 -pipe"
CXXFLAGS="@CARCHFLAGS@-mtune=generic -O2 -pipe"
#LDFLAGS=""
#-- Make Flags: change this for DistCC/SMP systems
#MAKEFLAGS="-j2"
@@ -38,16 +39,15 @@ CXXFLAGS="@CARCHFLAGS@-mtune=generic -O2 -pipe"
# BUILD ENVIRONMENT
#########################################################################
#
# Defaults: BUILDENV=(fakeroot !distcc color !ccache !xdelta)
# Defaults: BUILDENV=(fakeroot !distcc color !ccache)
# A negated environment option will do the opposite of the comments below.
#
#-- fakeroot: Allow building packages as a non-root user
#-- distcc: Use the Distributed C/C++/ObjC compiler
#-- color: Colorize output messages
#-- ccache: Use ccache to cache compilation
#-- xdelta: Generate delta patch from previous to current package
#
BUILDENV=(fakeroot !distcc color !ccache !xdelta)
BUILDENV=(fakeroot !distcc color !ccache)
#
#-- If using DistCC, your MAKEFLAGS will also need modification. In addition,
#-- specify a space-delimited list of hosts running in the DistCC cluster.
@@ -58,20 +58,28 @@ BUILDENV=(fakeroot !distcc color !ccache !xdelta)
# These are default values for the options=() settings
#########################################################################
#
# Default: OPTIONS=(strip !docs libtool emptydirs)
# Default: OPTIONS=(strip docs libtool emptydirs zipman purge)
# A negated option will do the opposite of the comments below.
#
#-- strip: Strip symbols from binaries/libraries
#-- docs: Save doc and info directories
#-- strip: Strip symbols from binaries/libraries in STRIP_DIRS
#-- docs: Save doc directories specified by DOC_DIRS
#-- libtool: Leave libtool (.la) files in packages
#-- emptydirs: Leave empty directories in packages
#-- zipman: Compress manual (man and info) pages in MAN_DIRS with gzip
#-- purge: Remove files specified by PURGE_TARGETS
#
OPTIONS=(strip !docs libtool emptydirs)
OPTIONS=(strip docs libtool emptydirs zipman purge)
#-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512
INTEGRITY_CHECK=(md5)
#-- Info and doc directories to remove (if option set correctly above)
DOC_DIRS=(usr/{,share/}{info,doc,gtk-doc} opt/gnome/{,share/}{info,doc,gtk-doc})
#-- Manual (man and info) directories to compress (if zipman is specified)
MAN_DIRS=({usr{,/local}{,/share},opt/*}/{man,info})
#-- Doc directories to remove (if !docs is specified)
DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
#-- Directories to be searched for the strip option (if strip is specified)
STRIP_DIRS=(bin lib sbin usr/{bin,lib,sbin,local/{bin,lib,sbin}} opt/*/{bin,lib,sbin})
#-- Files to be removed from all packages (if purge is specified)
PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)
#########################################################################
# PACKAGE OUTPUT
@@ -83,22 +91,17 @@ DOC_DIRS=(usr/{,share/}{info,doc,gtk-doc} opt/gnome/{,share/}{info,doc,gtk-doc})
#PKGDEST=/home/packages
#-- Source cache: specify a fixed directory where source files will be cached
#SRCDEST=/home/sources
#-- Source root: specify location where PKGBUILDs are located for '--builddeps'
#SRCROOT=/home/pkgbuilds
#-- Packager: name/email of the person or organization building packages
#PACKAGER="John Doe <john@doe.com>"
#########################################################################
# BUILDSCRIPT/EXTENSION DEFAULTS
# EXTENSION DEFAULTS
#########################################################################
#
# WARNING: Do NOT modify these variables unless you know what you are
# doing.
#
BUILDSCRIPT='PKGBUILD'
PKGEXT='@PKGEXT@'
SRCEXT='@SRCEXT@'
DB_COMPRESSION='gz'
DB_CHECKSUMS=(md5)
# vim: set ft=sh ts=2 sw=2 et:

View File

@@ -14,7 +14,25 @@
#CacheDir = @localstatedir@/cache/pacman/pkg/
#LogFile = @localstatedir@/log/pacman.log
HoldPkg = pacman glibc
# If upgrades are available for these packages they will be asked for first
SyncFirst = pacman
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#XferCommand = /usr/bin/curl %u > %o
#CleanMethod = KeepInstalled
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
#IgnorePkg =
#IgnoreGroup =
#NoUpgrade =
#NoExtract =
# Misc options (all disabled by default)
#NoPassiveFtp
#UseSyslog
#ShowSize
#UseDelta
#TotalDownload
#
# REPOSITORIES

View File

@@ -10,8 +10,12 @@ DEFS = -DLOCALEDIR=\"@localedir@\" @DEFS@
AM_CFLAGS = -pedantic -D_GNU_SOURCE
if ENABLE_VISIBILITY_CC
if DARWIN
AM_CFLAGS += -fvisibility=hidden
else
AM_CFLAGS += -fvisibility=internal
endif
endif
if ENABLE_GNU89_INLINE_CC
AM_CFLAGS += -fgnu89-inline
endif
@@ -22,23 +26,26 @@ libalpm_la_SOURCES = \
alpm_list.h alpm_list.c \
backup.h backup.c \
be_files.c \
be_package.c \
cache.h cache.c \
conflict.h conflict.c \
db.h db.c \
delta.h delta.c \
deps.h deps.c \
error.h error.c \
dload.h dload.c \
error.c \
graph.h \
group.h group.c \
handle.h handle.c \
log.h log.c \
md5.h md5.c \
package.h package.c \
remove.h remove.c \
server.h server.c \
sync.h sync.c \
trans.h trans.c \
util.h util.c
libalpm_la_LDFLAGS = -no-undefined -version-info $(LIB_VERSION_INFO)
libalpm_la_LIBADD = $(LTLIBINTL)
# vim:set ts=2 sw=2 noet:

View File

@@ -1,7 +1,8 @@
/*
* add.c
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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
* it under the terms of the GNU General Public License as published by
@@ -27,6 +28,8 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <inttypes.h> /* int64_t */
#include <stdint.h> /* intmax_t */
/* libarchive */
#include <archive.h>
@@ -37,7 +40,6 @@
#include "alpm_list.h"
#include "trans.h"
#include "util.h"
#include "error.h"
#include "cache.h"
#include "log.h"
#include "backup.h"
@@ -68,41 +70,25 @@ int _alpm_add_loadtarget(pmtrans_t *trans, pmdb_t *db, char *name)
pkgname = alpm_pkg_get_name(pkg);
pkgver = alpm_pkg_get_version(pkg);
if(trans->type != PM_TRANS_TYPE_UPGRADE) {
/* only install this package if it is not already installed */
if(_alpm_db_get_pkgfromcache(db, pkgname)) {
pm_errno = PM_ERR_PKG_INSTALLED;
goto error;
}
}
/* check if an older version of said package is already in transaction
* packages. if so, replace it in the list */
for(i = trans->packages; i; i = i->next) {
pmpkg_t *pkg = i->data;
if(strcmp(pkg->name, pkgname) == 0) {
if(_alpm_versioncmp(pkg->version, pkgver) < 0) {
pmpkg_t *newpkg;
pmpkg_t *transpkg = i->data;
if(strcmp(transpkg->name, pkgname) == 0) {
if(alpm_pkg_vercmp(transpkg->version, pkgver) < 0) {
_alpm_log(PM_LOG_WARNING, _("replacing older version %s-%s by %s in target list\n"),
pkg->name, pkg->version, pkgver);
if((newpkg = _alpm_pkg_load(name, 1)) == NULL) {
/* pm_errno is already set by pkg_load() */
goto error;
}
transpkg->name, transpkg->version, pkgver);
_alpm_pkg_free(i->data);
i->data = newpkg;
i->data = pkg;
} else {
_alpm_log(PM_LOG_WARNING, _("newer version %s-%s is in the target list -- skipping\n"),
pkg->name, pkg->version);
_alpm_log(PM_LOG_WARNING, _("skipping %s-%s because newer version %s is in the target list\n"),
pkgname, pkgver, transpkg->version);
_alpm_pkg_free(pkg);
}
return(0);
}
}
if(trans->flags & PM_TRANS_FLAG_ALLDEPS) {
pkg->reason = PM_PKG_REASON_DEPEND;
}
/* add the package to the transaction */
trans->packages = alpm_list_add(trans->packages, pkg);
@@ -113,15 +99,6 @@ error:
return(-1);
}
/* This is still messy. We have a lot of compare functions, and we should
* try to consolidate them as much as we can (between add and sync) */
/*static int deppkg_cmp(const void *p1, const void *p2)
{
return(strcmp(((pmdepmissing_t *)p1)->target,
((pmdepmissing_t *)p2)->target));
}*/
int _alpm_add_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)
{
alpm_list_t *lp = NULL;
@@ -138,12 +115,13 @@ int _alpm_add_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)
/* look for unsatisfied dependencies */
_alpm_log(PM_LOG_DEBUG, "looking for unsatisfied dependencies\n");
lp = alpm_checkdeps(db, trans->type == PM_TRANS_TYPE_UPGRADE, NULL, trans->packages);
lp = alpm_checkdeps(_alpm_db_get_pkgcache(db), 1, NULL, trans->packages);
if(lp != NULL) {
if(data) {
*data = lp;
} else {
FREELIST(lp);
alpm_list_free_inner(lp, (alpm_list_fn_free)_alpm_depmiss_free);
alpm_list_free(lp);
}
RET_ERR(PM_ERR_UNSATISFIED_DEPS, -1);
}
@@ -160,14 +138,15 @@ int _alpm_add_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)
if(data) {
*data = lp;
} else {
FREELIST(lp);
alpm_list_free_inner(lp, (alpm_list_fn_free)_alpm_conflict_free);
alpm_list_free(lp);
}
if(inner) {
_alpm_log(PM_LOG_ERROR, _("conflicting packages were found in the target list\n"));
_alpm_log(PM_LOG_ERROR, _("you cannot install two conflicting packages at the same time\n"));
}
if(outer) {
_alpm_log(PM_LOG_ERROR, _("replacing packages with -A and -U is not supported yet\n"));
_alpm_log(PM_LOG_ERROR, _("replacing packages with -U is not supported yet\n"));
_alpm_log(PM_LOG_ERROR, _("you can replace packages manually using -Rd and -U\n"));
}
RET_ERR(PM_ERR_CONFLICTING_DEPS, -1);
@@ -175,7 +154,7 @@ int _alpm_add_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)
/* re-order w.r.t. dependencies */
_alpm_log(PM_LOG_DEBUG, "sorting by dependencies\n");
lp = _alpm_sortbydeps(trans->packages, PM_TRANS_TYPE_ADD);
lp = _alpm_sortbydeps(trans->packages, 0);
/* free the old alltargs */
alpm_list_free(trans->packages);
trans->packages = lp;
@@ -188,12 +167,13 @@ int _alpm_add_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)
EVENT(trans, PM_TRANS_EVT_FILECONFLICTS_START, NULL, NULL);
_alpm_log(PM_LOG_DEBUG, "looking for file conflicts\n");
lp = _alpm_db_find_fileconflicts(db, trans, handle->root);
lp = _alpm_db_find_fileconflicts(db, trans, trans->packages, NULL);
if(lp != NULL) {
if(data) {
*data = lp;
} else {
FREELIST(lp);
alpm_list_free_inner(lp, (alpm_list_fn_free)_alpm_fileconflict_free);
alpm_list_free(lp);
}
RET_ERR(PM_ERR_FILE_CONFLICTS, -1);
}
@@ -210,6 +190,9 @@ static int upgrade_remove(pmpkg_t *oldpkg, pmpkg_t *newpkg, pmtrans_t *trans, pm
* with the type PM_TRANS_TYPE_REMOVEUPGRADE. TODO: kill this weird
* behavior. */
pmtrans_t *tr = _alpm_trans_new();
ALPM_LOG_FUNC;
_alpm_log(PM_LOG_DEBUG, "removing old package first (%s-%s)\n",
oldpkg->name, oldpkg->version);
@@ -243,6 +226,7 @@ static int upgrade_remove(pmpkg_t *oldpkg, pmpkg_t *newpkg, pmtrans_t *trans, pm
char *backup = _alpm_backup_file(b->data);
/* safety check (fix the upgrade026 pactest) */
if(!alpm_list_find_str(filelist, backup)) {
FREE(backup);
continue;
}
_alpm_log(PM_LOG_DEBUG, "adding %s to the NoUpgrade array temporarily\n",
@@ -289,11 +273,12 @@ static int extract_single_file(struct archive *archive,
struct archive_entry *entry, pmpkg_t *newpkg, pmpkg_t *oldpkg,
pmtrans_t *trans, pmdb_t *db)
{
const char *entryname; /* the name of the file in the archive */
const char *entryname;
mode_t entrymode;
char filename[PATH_MAX]; /* the actual file we're extracting */
int needbackup = 0, notouch = 0;
char *hash_orig = NULL;
char *entryname_orig = NULL;
const int archive_flags = ARCHIVE_EXTRACT_OWNER |
ARCHIVE_EXTRACT_PERM |
ARCHIVE_EXTRACT_TIME;
@@ -306,14 +291,14 @@ static int extract_single_file(struct archive *archive,
if(strcmp(entryname, ".INSTALL") == 0) {
/* the install script goes inside the db */
snprintf(filename, PATH_MAX, "%s/%s-%s/install", db->path,
snprintf(filename, PATH_MAX, "%s%s-%s/install", db->path,
newpkg->name, newpkg->version);
archive_entry_set_mode(entry, 0644);
archive_entry_set_perm(entry, 0644);
} else if(strcmp(entryname, ".CHANGELOG") == 0) {
/* the changelog goes inside the db */
snprintf(filename, PATH_MAX, "%s/%s-%s/changelog", db->path,
snprintf(filename, PATH_MAX, "%s%s-%s/changelog", db->path,
newpkg->name, newpkg->version);
archive_entry_set_mode(entry, 0644);
archive_entry_set_perm(entry, 0644);
} else if(*entryname == '.') {
/* for now, ignore all files starting with '.' that haven't
* already been handled (for future possibilities) */
@@ -337,7 +322,8 @@ static int extract_single_file(struct archive *archive,
/* if a file is in the add skiplist we never extract it */
if(alpm_list_find_str(trans->skip_add, filename)) {
_alpm_log(PM_LOG_DEBUG, "%s is in trans->skip_add, skipping extraction\n", entryname);
_alpm_log(PM_LOG_DEBUG, "%s is in trans->skip_add, skipping extraction\n",
entryname);
archive_read_data_skip(archive);
return(0);
}
@@ -361,36 +347,36 @@ static int extract_single_file(struct archive *archive,
* links, etc.
* 12- skip extraction, dir already exists.
*/
struct stat lsbuf;
if(_alpm_lstat(filename, &lsbuf) != 0) {
/* do both a lstat and a stat, so we can see what symlinks point to */
struct stat lsbuf, sbuf;
if(_alpm_lstat(filename, &lsbuf) != 0 || stat(filename, &sbuf) != 0) {
/* cases 1,2,3: couldn't stat an existing file, skip all backup checks */
} else {
/* do a stat as well, so we can see what symlinks point to */
struct stat sbuf;
stat(filename, &sbuf);
if(S_ISDIR(lsbuf.st_mode) && S_ISDIR(entrymode)) {
/* case 12: existing dir, ignore it */
if(lsbuf.st_mode != entrymode) {
/* if filesystem perms are different than pkg perms, warn user */
int mask = 07777;
_alpm_log(PM_LOG_WARNING, _("directory permissions differ on %s\n"
"filesystem: %o package: %o\n"), entryname, lsbuf.st_mode & mask,
entrymode & mask);
alpm_logaction("warning: directory permissions differ on %s\n"
if(S_ISDIR(lsbuf.st_mode)) {
if(S_ISDIR(entrymode)) {
/* case 12: existing dir, ignore it */
if(lsbuf.st_mode != entrymode) {
/* if filesystem perms are different than pkg perms, warn user */
int mask = 07777;
_alpm_log(PM_LOG_WARNING, _("directory permissions differ on %s\n"
"filesystem: %o package: %o\n"), entryname, lsbuf.st_mode & mask,
entrymode & mask);
alpm_logaction("warning: directory permissions differ on %s\n"
"filesystem: %o package: %o\n", entryname, lsbuf.st_mode & mask,
entrymode & mask);
entrymode & mask);
}
_alpm_log(PM_LOG_DEBUG, "extract: skipping dir extraction of %s\n",
entryname);
archive_read_data_skip(archive);
return(0);
} else {
/* case 10/11: trying to overwrite dir with file/symlink, don't allow it */
_alpm_log(PM_LOG_ERROR, _("extract: not overwriting dir with file %s\n"),
entryname);
archive_read_data_skip(archive);
return(1);
}
_alpm_log(PM_LOG_DEBUG, "extract: skipping dir extraction of %s\n",
entryname);
archive_read_data_skip(archive);
return(0);
} else if(S_ISDIR(lsbuf.st_mode) && S_ISLNK(entrymode)) {
/* case 11: existing dir, symlink in package, ignore it */
_alpm_log(PM_LOG_DEBUG, "extract: skipping symlink extraction of %s\n",
entryname);
archive_read_data_skip(archive);
return(0);
} else if(S_ISLNK(lsbuf.st_mode) && S_ISDIR(entrymode)) {
/* case 9: existing symlink, dir in package */
if(S_ISDIR(sbuf.st_mode)) {
@@ -406,12 +392,6 @@ static int extract_single_file(struct archive *archive,
archive_read_data_skip(archive);
return(1);
}
} else if(S_ISDIR(lsbuf.st_mode) && S_ISREG(entrymode)) {
/* case 10: trying to overwrite dir tree with file, don't allow it */
_alpm_log(PM_LOG_ERROR, _("extract: not overwriting dir with file %s\n"),
entryname);
archive_read_data_skip(archive);
return(1);
} else if(S_ISREG(lsbuf.st_mode) && S_ISDIR(entrymode)) {
/* case 6: trying to overwrite file with dir */
_alpm_log(PM_LOG_DEBUG, "extract: overwriting file with dir %s\n",
@@ -438,7 +418,7 @@ static int extract_single_file(struct archive *archive,
/* if we force hash_orig to be non-NULL retroactive backup works */
if(needbackup && !hash_orig) {
hash_orig = strdup("");
STRDUP(hash_orig, "", RET_ERR(PM_ERR_MEMORY, -1));
}
}
}
@@ -446,35 +426,35 @@ static int extract_single_file(struct archive *archive,
/* case 5,8: don't need to do anything special */
}
/* we need access to the original entryname later after calls to
* archive_entry_set_pathname(), so we need to dupe it and free() later */
STRDUP(entryname_orig, entryname, RET_ERR(PM_ERR_MEMORY, -1));
if(needbackup) {
char *tempfile = NULL;
char checkfile[PATH_MAX];
char *hash_local = NULL, *hash_pkg = NULL;
int fd;
int ret;
/* extract the package's version to a temporary file and checksum it */
tempfile = strdup("/tmp/alpm_XXXXXX");
fd = mkstemp(tempfile);
snprintf(checkfile, PATH_MAX, "%s.paccheck", filename);
archive_entry_set_pathname(entry, checkfile);
archive_entry_set_pathname(entry, tempfile);
int ret = archive_read_extract(archive, entry, archive_flags);
ret = archive_read_extract(archive, entry, archive_flags);
if(ret == ARCHIVE_WARN) {
/* operation succeeded but a non-critical error was encountered */
_alpm_log(PM_LOG_DEBUG, "warning extracting %s (%s)\n",
entryname, archive_error_string(archive));
entryname_orig, archive_error_string(archive));
} else if(ret != ARCHIVE_OK) {
_alpm_log(PM_LOG_ERROR, _("could not extract %s (%s)\n"),
entryname, archive_error_string(archive));
entryname_orig, archive_error_string(archive));
alpm_logaction("error: could not extract %s (%s)\n",
entryname, archive_error_string(archive));
unlink(tempfile);
entryname_orig, archive_error_string(archive));
FREE(hash_orig);
close(fd);
FREE(entryname_orig);
return(1);
}
hash_local = alpm_get_md5sum(filename);
hash_pkg = alpm_get_md5sum(tempfile);
hash_local = alpm_compute_md5sum(filename);
hash_pkg = alpm_compute_md5sum(checkfile);
/* append the new md5 hash to it's respective entry
* in newpkg's backup (it will be the new orginal) */
@@ -482,16 +462,13 @@ static int extract_single_file(struct archive *archive,
for(backups = alpm_pkg_get_backup(newpkg); backups;
backups = alpm_list_next(backups)) {
char *oldbackup = alpm_list_getdata(backups);
if(!oldbackup || strcmp(oldbackup, entryname) != 0) {
if(!oldbackup || strcmp(oldbackup, entryname_orig) != 0) {
continue;
}
char *backup = NULL;
/* length is tab char, null byte and MD5 (32 char) */
int backup_len = strlen(oldbackup) + 34;
backup = malloc(backup_len);
if(!backup) {
RET_ERR(PM_ERR_MEMORY, -1);
}
size_t backup_len = strlen(oldbackup) + 34;
MALLOC(backup, backup_len, RET_ERR(PM_ERR_MEMORY, -1));
sprintf(backup, "%s\t%s", oldbackup, hash_pkg);
backup[backup_len-1] = '\0';
@@ -499,37 +476,41 @@ static int extract_single_file(struct archive *archive,
backups->data = backup;
}
_alpm_log(PM_LOG_DEBUG, "checking hashes for %s\n", entryname);
_alpm_log(PM_LOG_DEBUG, "checking hashes for %s\n", entryname_orig);
_alpm_log(PM_LOG_DEBUG, "current: %s\n", hash_local);
_alpm_log(PM_LOG_DEBUG, "new: %s\n", hash_pkg);
_alpm_log(PM_LOG_DEBUG, "original: %s\n", hash_orig);
if(!oldpkg) {
/* looks like we have a local file that has a different hash as the
* file in the package, move it to a .pacorig */
if(strcmp(hash_local, hash_pkg) != 0) {
/* looks like we have a local file that has a different hash as the
* file in the package, move it to a .pacorig */
char newpath[PATH_MAX];
snprintf(newpath, PATH_MAX, "%s.pacorig", filename);
/* move the existing file to the "pacorig" */
if(rename(filename, newpath)) {
archive_entry_set_pathname(entry, filename);
_alpm_log(PM_LOG_ERROR, _("could not rename %s (%s)\n"), filename, strerror(errno));
alpm_logaction("error: could not rename %s (%s)\n", filename, strerror(errno));
_alpm_log(PM_LOG_ERROR, _("could not rename %s to %s (%s)\n"),
filename, newpath, strerror(errno));
alpm_logaction("error: could not rename %s to %s (%s)\n",
filename, newpath, strerror(errno));
errors++;
} else {
/* copy the tempfile we extracted to the real path */
if(_alpm_copyfile(tempfile, filename)) {
archive_entry_set_pathname(entry, filename);
_alpm_log(PM_LOG_ERROR, _("could not copy tempfile to %s (%s)\n"), filename, strerror(errno));
alpm_logaction("error: could not copy tempfile to %s (%s)\n", filename, strerror(errno));
/* rename the file we extracted to the real name */
if(rename(checkfile, filename)) {
_alpm_log(PM_LOG_ERROR, _("could not rename %s to %s (%s)\n"),
checkfile, filename, strerror(errno));
alpm_logaction("error: could not rename %s to %s (%s)\n",
checkfile, filename, strerror(errno));
errors++;
} else {
archive_entry_set_pathname(entry, filename);
_alpm_log(PM_LOG_WARNING, _("%s saved as %s\n"), filename, newpath);
alpm_logaction("warning: %s saved as %s\n", filename, newpath);
}
}
} else {
/* local file is identical to pkg one, so just remove pkg one */
unlink(checkfile);
}
} else if(hash_orig) {
/* the fun part */
@@ -538,38 +519,48 @@ static int extract_single_file(struct archive *archive,
/* installed file has NOT been changed by user */
if(strcmp(hash_orig, hash_pkg) != 0) {
_alpm_log(PM_LOG_DEBUG, "action: installing new file: %s\n",
entryname);
entryname_orig);
if(_alpm_copyfile(tempfile, filename)) {
_alpm_log(PM_LOG_ERROR, _("could not copy tempfile to %s (%s)\n"), filename, strerror(errno));
if(rename(checkfile, filename)) {
_alpm_log(PM_LOG_ERROR, _("could not rename %s to %s (%s)\n"),
checkfile, filename, strerror(errno));
alpm_logaction("error: could not rename %s to %s (%s)\n",
checkfile, filename, strerror(errno));
errors++;
}
archive_entry_set_pathname(entry, filename);
} else {
/* there's no sense in installing the same file twice, install
* ONLY is the original and package hashes differ */
_alpm_log(PM_LOG_DEBUG, "action: leaving existing file in place\n");
unlink(checkfile);
}
} else if(strcmp(hash_orig, hash_pkg) == 0) {
/* originally installed file and new file are the same - this
* implies the case above failed - i.e. the file was changed by a
* user */
_alpm_log(PM_LOG_DEBUG, "action: leaving existing file in place\n");
unlink(checkfile);
} else if(strcmp(hash_local, hash_pkg) == 0) {
/* this would be magical. The above two cases failed, but the
* user changes just so happened to make the new file exactly the
* same as the one in the package... skip it */
_alpm_log(PM_LOG_DEBUG, "action: leaving existing file in place\n");
unlink(checkfile);
} else {
char newpath[PATH_MAX];
_alpm_log(PM_LOG_DEBUG, "action: keeping current file and installing new one with .pacnew ending\n");
_alpm_log(PM_LOG_DEBUG, "action: keeping current file and installing"
" new one with .pacnew ending\n");
snprintf(newpath, PATH_MAX, "%s.pacnew", filename);
if(_alpm_copyfile(tempfile, newpath)) {
_alpm_log(PM_LOG_ERROR, _("could not install %s as %s: %s\n"), filename, newpath, strerror(errno));
alpm_logaction("error: could not install %s as %s: %s\n", filename, newpath, strerror(errno));
if(rename(checkfile, newpath)) {
_alpm_log(PM_LOG_ERROR, _("could not install %s as %s (%s)\n"),
filename, newpath, strerror(errno));
alpm_logaction("error: could not install %s as %s (%s)\n",
filename, newpath, strerror(errno));
} else {
_alpm_log(PM_LOG_WARNING, _("%s installed as %s\n"), filename, newpath);
alpm_logaction("warning: %s installed as %s\n", filename, newpath);
_alpm_log(PM_LOG_WARNING, _("%s installed as %s\n"),
filename, newpath);
alpm_logaction("warning: %s installed as %s\n",
filename, newpath);
}
}
}
@@ -577,10 +568,9 @@ static int extract_single_file(struct archive *archive,
FREE(hash_local);
FREE(hash_pkg);
FREE(hash_orig);
unlink(tempfile);
FREE(tempfile);
close(fd);
} else {
int ret;
/* we didn't need a backup */
if(notouch) {
/* change the path to a .pacnew extension */
@@ -601,16 +591,17 @@ static int extract_single_file(struct archive *archive,
archive_entry_set_pathname(entry, filename);
int ret = archive_read_extract(archive, entry, archive_flags);
ret = archive_read_extract(archive, entry, archive_flags);
if(ret == ARCHIVE_WARN) {
/* operation succeeded but a non-critical error was encountered */
_alpm_log(PM_LOG_DEBUG, "warning extracting %s (%s)\n",
entryname, archive_error_string(archive));
entryname_orig, archive_error_string(archive));
} else if(ret != ARCHIVE_OK) {
_alpm_log(PM_LOG_ERROR, _("could not extract %s (%s)\n"),
entryname, archive_error_string(archive));
entryname_orig, archive_error_string(archive));
alpm_logaction("error: could not extract %s (%s)\n",
entryname, archive_error_string(archive));
entryname_orig, archive_error_string(archive));
FREE(entryname_orig);
return(1);
}
@@ -620,18 +611,15 @@ static int extract_single_file(struct archive *archive,
char *backup = NULL, *hash = NULL;
char *oldbackup = alpm_list_getdata(b);
/* length is tab char, null byte and MD5 (32 char) */
int backup_len = strlen(oldbackup) + 34;
size_t backup_len = strlen(oldbackup) + 34;
if(!oldbackup || strcmp(oldbackup, entryname) != 0) {
if(!oldbackup || strcmp(oldbackup, entryname_orig) != 0) {
continue;
}
_alpm_log(PM_LOG_DEBUG, "appending backup entry for %s\n", filename);
hash = alpm_get_md5sum(filename);
backup = malloc(backup_len);
if(!backup) {
RET_ERR(PM_ERR_MEMORY, -1);
}
hash = alpm_compute_md5sum(filename);
MALLOC(backup, backup_len, RET_ERR(PM_ERR_MEMORY, -1));
sprintf(backup, "%s\t%s", oldbackup, hash);
backup[backup_len-1] = '\0';
@@ -640,6 +628,7 @@ static int extract_single_file(struct archive *archive,
b->data = backup;
}
}
FREE(entryname_orig);
return(errors);
}
@@ -647,14 +636,12 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
pmtrans_t *trans, pmdb_t *db)
{
int i, ret = 0, errors = 0;
struct archive *archive;
struct archive_entry *entry;
char cwd[PATH_MAX] = "";
char scriptlet[PATH_MAX+1];
int is_upgrade = 0;
double percent = 0.0;
pmpkg_t *oldpkg = NULL;
ALPM_LOG_FUNC;
snprintf(scriptlet, PATH_MAX, "%s%s-%s/install", db->path,
alpm_pkg_get_name(newpkg), alpm_pkg_get_version(newpkg));
@@ -663,18 +650,18 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
if(local) {
is_upgrade = 1;
EVENT(trans, PM_TRANS_EVT_UPGRADE_START, newpkg, NULL);
/* we'll need to save some record for backup checks later */
oldpkg = _alpm_pkg_dup(local);
/* make sure all infos are loaded because the database entry
* will be removed soon */
_alpm_db_read(oldpkg->origin_data.db, oldpkg, INFRQ_ALL);
EVENT(trans, PM_TRANS_EVT_UPGRADE_START, newpkg, oldpkg);
_alpm_log(PM_LOG_DEBUG, "upgrading package %s-%s\n",
newpkg->name, newpkg->version);
/* we'll need to save some record for backup checks later */
oldpkg = _alpm_pkg_dup(local);
/* copy over the install reason (unless alldeps is set) */
if(trans->flags & PM_TRANS_FLAG_ALLDEPS) {
newpkg->reason = PM_PKG_REASON_DEPEND;
} else {
newpkg->reason = alpm_pkg_get_reason(local);
}
/* copy over the install reason */
newpkg->reason = alpm_pkg_get_reason(oldpkg);
/* pre_upgrade scriptlet */
if(alpm_pkg_has_scriptlet(newpkg) && !(trans->flags & PM_TRANS_FLAG_NOSCRIPTLET)) {
@@ -695,27 +682,53 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
}
}
/* we override any pre-set reason if we have alldeps or allexplicit set */
if(trans->flags & PM_TRANS_FLAG_ALLDEPS) {
newpkg->reason = PM_PKG_REASON_DEPEND;
} else if(trans->flags & PM_TRANS_FLAG_ALLEXPLICIT) {
newpkg->reason = PM_PKG_REASON_EXPLICIT;
}
if(oldpkg) {
/* set up fake remove transaction */
int ret = upgrade_remove(oldpkg, newpkg, trans, db);
if(ret != 0) {
return(ret);
goto cleanup;
}
}
/* prepare directory for database entries so permission are correct after
changelog/install script installation (FS#12263) */
if(_alpm_db_prepare(db, newpkg)) {
alpm_logaction("error: could not create database entry %s-%s\n",
alpm_pkg_get_name(newpkg), alpm_pkg_get_version(newpkg));
pm_errno = PM_ERR_DB_WRITE;
ret = -1;
goto cleanup;
}
if(!(trans->flags & PM_TRANS_FLAG_DBONLY)) {
struct archive *archive;
struct archive_entry *entry;
char cwd[PATH_MAX] = "";
_alpm_log(PM_LOG_DEBUG, "extracting files\n");
if ((archive = archive_read_new()) == NULL) {
RET_ERR(PM_ERR_LIBARCHIVE_ERROR, -1);
pm_errno = PM_ERR_LIBARCHIVE;
ret = -1;
goto cleanup;
}
archive_read_support_compression_all(archive);
archive_read_support_format_all(archive);
_alpm_log(PM_LOG_DEBUG, "archive: %s\n", newpkg->origin_data.file);
if(archive_read_open_filename(archive, newpkg->origin_data.file,
ARCHIVE_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) {
RET_ERR(PM_ERR_PKG_OPEN, -1);
pm_errno = PM_ERR_PKG_OPEN;
ret = -1;
goto cleanup;
}
/* save the cwd so we can restore it later */
@@ -737,17 +750,22 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
}
for(i = 0; archive_read_next_header(archive, &entry) == ARCHIVE_OK; i++) {
double percent;
if(newpkg->size != 0) {
/* Using compressed size for calculations here, as newpkg->isize is not
* exact when it comes to comparing to the ACTUAL uncompressed size
* (missing metadata sizes) */
unsigned long pos = archive_position_compressed(archive);
int64_t pos = archive_position_compressed(archive);
percent = (double)pos / (double)newpkg->size;
_alpm_log(PM_LOG_DEBUG, "decompression progress: %f%% (%ld / %ld)\n",
percent*100.0, pos, newpkg->size);
_alpm_log(PM_LOG_DEBUG, "decompression progress: "
"%f%% (%"PRId64" / %jd)\n",
percent*100.0, pos, (intmax_t)newpkg->size);
if(percent >= 1.0) {
percent = 1.0;
}
} else {
percent = 0.0;
}
if(is_upgrade) {
@@ -772,7 +790,7 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
}
if(errors) {
ret = 1;
ret = -1;
if(is_upgrade) {
_alpm_log(PM_LOG_ERROR, _("problem occurred while upgrading %s\n"),
newpkg->name);
@@ -798,7 +816,9 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
alpm_pkg_get_name(newpkg), alpm_pkg_get_version(newpkg));
alpm_logaction("error: could not update database entry %s-%s\n",
alpm_pkg_get_name(newpkg), alpm_pkg_get_version(newpkg));
RET_ERR(PM_ERR_DB_WRITE, -1);
pm_errno = PM_ERR_DB_WRITE;
ret = -1;
goto cleanup;
}
if(_alpm_db_add_pkgincache(db, newpkg) == -1) {
@@ -813,7 +833,6 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
PROGRESS(trans, PM_TRANS_PROGRESS_ADD_START,
alpm_pkg_get_name(newpkg), 100, pkg_count, pkg_current);
}
EVENT(trans, PM_TRANS_EVT_EXTRACT_DONE, NULL, NULL);
/* run the post-install script if it exists */
if(alpm_pkg_has_scriptlet(newpkg)
@@ -834,9 +853,9 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
EVENT(trans, PM_TRANS_EVT_ADD_DONE, newpkg, oldpkg);
}
cleanup:
_alpm_pkg_free(oldpkg);
return(0);
return(ret);
}
int _alpm_add_commit(pmtrans_t *trans, pmdb_t *db)
@@ -853,7 +872,7 @@ int _alpm_add_commit(pmtrans_t *trans, pmdb_t *db)
return(0);
}
pkg_count = alpm_list_count(trans->targets);
pkg_count = alpm_list_count(trans->packages);
pkg_current = 1;
/* loop through our package list adding/upgrading one at a time */
@@ -868,7 +887,6 @@ int _alpm_add_commit(pmtrans_t *trans, pmdb_t *db)
}
/* run ldconfig if it exists */
_alpm_log(PM_LOG_DEBUG, "running \"ldconfig -r %s\"\n", handle->root);
_alpm_ldconfig(handle->root);
return(0);

View File

@@ -1,7 +1,8 @@
/*
* add.h
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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
* it under the terms of the GNU General Public License as published by

View File

@@ -1,7 +1,8 @@
/*
* alpm.c
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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>
* Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org>
@@ -25,7 +26,6 @@
/* libalpm */
#include "alpm.h"
#include "alpm_list.h"
#include "error.h"
#include "handle.h"
#include "util.h"
@@ -81,4 +81,9 @@ int SYMEXPORT alpm_release(void)
* @brief Various libalpm functions
*/
/* Get the version of library */
const char SYMEXPORT *alpm_version(void) {
return(LIB_VERSION);
}
/* vim: set ts=2 sw=2 noet: */

View File

@@ -1,7 +1,8 @@
/*
* alpm.h
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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>
* Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org>
@@ -26,6 +27,7 @@
extern "C" {
#endif
#include <sys/types.h> /* for off_t */
#include <time.h> /* for time_t */
#include <stdarg.h> /* for va_list */
@@ -45,14 +47,11 @@ typedef struct __pmdb_t pmdb_t;
typedef struct __pmpkg_t pmpkg_t;
typedef struct __pmdelta_t pmdelta_t;
typedef struct __pmgrp_t pmgrp_t;
typedef struct __pmserver_t pmserver_t;
typedef struct __pmtrans_t pmtrans_t;
typedef struct __pmsyncpkg_t pmsyncpkg_t;
typedef struct __pmdepend_t pmdepend_t;
typedef struct __pmdepmissing_t pmdepmissing_t;
typedef struct __pmconflict_t pmconflict_t;
typedef struct __pmfileconflict_t pmfileconflict_t;
typedef struct __pmgraph_t pmgraph_t;
/*
* Library
@@ -60,6 +59,7 @@ typedef struct __pmgraph_t pmgraph_t;
int alpm_initialize(void);
int alpm_release(void);
const char *alpm_version(void);
/*
* Logging facilities
@@ -80,21 +80,37 @@ int alpm_logaction(char *fmt, ...);
* Downloading
*/
typedef void (*alpm_cb_download)(const char *filename, int file_xfered,
int file_total, int list_xfered, int list_total);
typedef void (*alpm_cb_download)(const char *filename,
off_t xfered, off_t total);
typedef void (*alpm_cb_totaldl)(off_t total);
/** A callback for downloading files
* @param url the URL of the file to be downloaded
* @param localpath the directory to which the file should be downloaded
* @param mtimeold the modification time of the file previously downloaded
* @param mtimenew the modification time of the newly downloaded file.
* This should be set by the callback.
* @return 0 on success, 1 if the modification times are identical, -1 on
* error.
*/
typedef int (*alpm_cb_fetch)(const char *url, const char *localpath,
time_t mtimeold, time_t *mtimenew);
/*
* Options
*/
#define PM_DLFNM_LEN 22
alpm_cb_log alpm_option_get_logcb();
void alpm_option_set_logcb(alpm_cb_log cb);
alpm_cb_download alpm_option_get_dlcb();
void alpm_option_set_dlcb(alpm_cb_download cb);
alpm_cb_fetch alpm_option_get_fetchcb();
void alpm_option_set_fetchcb(alpm_cb_fetch cb);
alpm_cb_totaldl alpm_option_get_totaldlcb();
void alpm_option_set_totaldlcb(alpm_cb_totaldl cb);
const char *alpm_option_get_root();
int alpm_option_set_root(const char *root);
@@ -130,19 +146,11 @@ void alpm_option_add_ignorepkg(const char *pkg);
void alpm_option_set_ignorepkgs(alpm_list_t *ignorepkgs);
int alpm_option_remove_ignorepkg(const char *pkg);
alpm_list_t *alpm_option_get_holdpkgs();
void alpm_option_add_holdpkg(const char *pkg);
void alpm_option_set_holdpkgs(alpm_list_t *holdpkgs);
int alpm_option_remove_holdpkg(const char *pkg);
alpm_list_t *alpm_option_get_ignoregrps();
void alpm_option_add_ignoregrp(const char *grp);
void alpm_option_set_ignoregrps(alpm_list_t *ignoregrps);
int alpm_option_remove_ignoregrp(const char *grp);
const char *alpm_option_get_xfercommand();
void alpm_option_set_xfercommand(const char *cmd);
unsigned short alpm_option_get_nopassiveftp();
void alpm_option_set_nopassiveftp(unsigned short nopasv);
void alpm_option_set_usedelta(unsigned short usedelta);
@@ -168,11 +176,10 @@ int alpm_db_setserver(pmdb_t *db, const char *url);
int alpm_db_update(int level, pmdb_t *db);
pmpkg_t *alpm_db_get_pkg(pmdb_t *db, const char *name);
alpm_list_t *alpm_db_getpkgcache(pmdb_t *db);
alpm_list_t *alpm_db_whatprovides(pmdb_t *db, const char *name);
alpm_list_t *alpm_db_get_pkgcache(pmdb_t *db);
pmgrp_t *alpm_db_readgrp(pmdb_t *db, const char *name);
alpm_list_t *alpm_db_getgrpcache(pmdb_t *db);
alpm_list_t *alpm_db_get_grpcache(pmdb_t *db);
alpm_list_t *alpm_db_search(pmdb_t *db, const alpm_list_t* needles);
/*
@@ -191,7 +198,7 @@ int alpm_pkg_load(const char *filename, unsigned short full, pmpkg_t **pkg);
int alpm_pkg_free(pmpkg_t *pkg);
int alpm_pkg_checkmd5sum(pmpkg_t *pkg);
char *alpm_fetch_pkgurl(const char *url);
int alpm_pkg_vercmp(const char *ver1, const char *ver2);
int alpm_pkg_vercmp(const char *a, const char *b);
alpm_list_t *alpm_pkg_compute_requiredby(pmpkg_t *pkg);
const char *alpm_pkg_get_filename(pmpkg_t *pkg);
@@ -204,8 +211,8 @@ time_t alpm_pkg_get_installdate(pmpkg_t *pkg);
const char *alpm_pkg_get_packager(pmpkg_t *pkg);
const char *alpm_pkg_get_md5sum(pmpkg_t *pkg);
const char *alpm_pkg_get_arch(pmpkg_t *pkg);
unsigned long alpm_pkg_get_size(pmpkg_t *pkg);
unsigned long alpm_pkg_get_isize(pmpkg_t *pkg);
off_t alpm_pkg_get_size(pmpkg_t *pkg);
off_t alpm_pkg_get_isize(pmpkg_t *pkg);
pmpkgreason_t alpm_pkg_get_reason(pmpkg_t *pkg);
alpm_list_t *alpm_pkg_get_licenses(pmpkg_t *pkg);
alpm_list_t *alpm_pkg_get_groups(pmpkg_t *pkg);
@@ -217,14 +224,17 @@ alpm_list_t *alpm_pkg_get_deltas(pmpkg_t *pkg);
alpm_list_t *alpm_pkg_get_replaces(pmpkg_t *pkg);
alpm_list_t *alpm_pkg_get_files(pmpkg_t *pkg);
alpm_list_t *alpm_pkg_get_backup(pmpkg_t *pkg);
alpm_list_t *alpm_pkg_get_removes(pmpkg_t *pkg);
pmdb_t *alpm_pkg_get_db(pmpkg_t *pkg);
void *alpm_pkg_changelog_open(pmpkg_t *pkg);
size_t alpm_pkg_changelog_read(void *ptr, size_t size,
const pmpkg_t *pkg, const void *fp);
/*int alpm_pkg_changelog_feof(const pmpkg_t *pkg, void *fp);*/
int alpm_pkg_changelog_close(const pmpkg_t *pkg, void *fp);
unsigned short alpm_pkg_has_scriptlet(pmpkg_t *pkg);
unsigned short alpm_pkg_has_force(pmpkg_t *pkg);
unsigned long alpm_pkg_download_size(pmpkg_t *newpkg, pmdb_t *db_local);
off_t alpm_pkg_download_size(pmpkg_t *newpkg);
/*
* Deltas
@@ -232,32 +242,21 @@ unsigned long alpm_pkg_download_size(pmpkg_t *newpkg, pmdb_t *db_local);
const char *alpm_delta_get_from(pmdelta_t *delta);
const char *alpm_delta_get_to(pmdelta_t *delta);
unsigned long alpm_delta_get_size(pmdelta_t *delta);
const char *alpm_delta_get_filename(pmdelta_t *delta);
const char *alpm_delta_get_md5sum(pmdelta_t *delta);
off_t alpm_delta_get_size(pmdelta_t *delta);
/*
* Groups
*/
const char *alpm_grp_get_name(const pmgrp_t *grp);
const alpm_list_t *alpm_grp_get_pkgs(const pmgrp_t *grp);
alpm_list_t *alpm_grp_get_pkgs(const pmgrp_t *grp);
/*
* Sync
*/
/* Types */
typedef enum _pmsynctype_t {
PM_SYNC_TYPE_REPLACE = 1,
PM_SYNC_TYPE_UPGRADE,
PM_SYNC_TYPE_DEPEND
} pmsynctype_t;
pmsynctype_t alpm_sync_get_type(const pmsyncpkg_t *sync);
pmpkg_t *alpm_sync_get_pkg(const pmsyncpkg_t *sync);
void *alpm_sync_get_data(const pmsyncpkg_t *sync);
int alpm_sync_sysupgrade(pmdb_t *db_local,
alpm_list_t *dbs_sync, alpm_list_t **syncpkgs);
pmpkg_t *alpm_sync_newversion(pmpkg_t *pkg, alpm_list_t *dbs_sync);
/*
* Transactions
@@ -265,10 +264,9 @@ int alpm_sync_sysupgrade(pmdb_t *db_local,
/* Types */
typedef enum _pmtranstype_t {
PM_TRANS_TYPE_ADD = 1,
PM_TRANS_TYPE_UPGRADE = 1,
PM_TRANS_TYPE_REMOVE,
PM_TRANS_TYPE_REMOVEUPGRADE,
PM_TRANS_TYPE_UPGRADE,
PM_TRANS_TYPE_SYNC
} pmtranstype_t;
@@ -281,45 +279,100 @@ typedef enum _pmtransflag_t {
PM_TRANS_FLAG_CASCADE = 0x10,
PM_TRANS_FLAG_RECURSE = 0x20,
PM_TRANS_FLAG_DBONLY = 0x40,
PM_TRANS_FLAG_DEPENDSONLY = 0x80,
/* 0x80 flag can go here */
PM_TRANS_FLAG_ALLDEPS = 0x100,
PM_TRANS_FLAG_DOWNLOADONLY = 0x200,
PM_TRANS_FLAG_NOSCRIPTLET = 0x400,
PM_TRANS_FLAG_NOCONFLICTS = 0x800,
PM_TRANS_FLAG_PRINTURIS = 0x1000,
PM_TRANS_FLAG_NEEDED = 0x2000
/* 0x1000 flag can go here */
PM_TRANS_FLAG_NEEDED = 0x2000,
PM_TRANS_FLAG_ALLEXPLICIT = 0x4000,
PM_TRANS_FLAG_UNNEEDED = 0x8000,
PM_TRANS_FLAG_RECURSEALL = 0x10000,
PM_TRANS_FLAG_NOLOCK = 0x20000
} pmtransflag_t;
/* Transaction Events */
/**
* @addtogroup alpm_trans
* @{
*/
/**
* @brief Transaction events.
* NULL parameters are passed to in all events unless specified otherwise.
*/
typedef enum _pmtransevt_t {
/** Dependencies will be computed for a package. */
PM_TRANS_EVT_CHECKDEPS_START = 1,
/** Dependencies were computed for a package. */
PM_TRANS_EVT_CHECKDEPS_DONE,
/** File conflicts will be computed for a package. */
PM_TRANS_EVT_FILECONFLICTS_START,
/** File conflicts were computed for a package. */
PM_TRANS_EVT_FILECONFLICTS_DONE,
/** Dependencies will be resolved for target package. */
PM_TRANS_EVT_RESOLVEDEPS_START,
/** Dependencies were resolved for target package. */
PM_TRANS_EVT_RESOLVEDEPS_DONE,
/** Inter-conflicts will be checked for target package. */
PM_TRANS_EVT_INTERCONFLICTS_START,
/** Inter-conflicts were checked for target package. */
PM_TRANS_EVT_INTERCONFLICTS_DONE,
/** Package will be installed.
* A pointer to the target package is passed to the callback.
*/
PM_TRANS_EVT_ADD_START,
/** Package was installed.
* A pointer to the new package is passed to the callback.
*/
PM_TRANS_EVT_ADD_DONE,
/** Package will be removed.
* A pointer to the target package is passed to the callback.
*/
PM_TRANS_EVT_REMOVE_START,
/** Package was removed.
* A pointer to the removed package is passed to the callback.
*/
PM_TRANS_EVT_REMOVE_DONE,
/** Package will be upgraded.
* A pointer to the upgraded package is passed to the callback.
*/
PM_TRANS_EVT_UPGRADE_START,
/** Package was upgraded.
* A pointer to the new package, and a pointer to the old package is passed
* to the callback, respectively.
*/
PM_TRANS_EVT_UPGRADE_DONE,
PM_TRANS_EVT_EXTRACT_DONE,
/** Target package's integrity will be checked. */
PM_TRANS_EVT_INTEGRITY_START,
/** Target package's integrity was checked. */
PM_TRANS_EVT_INTEGRITY_DONE,
/** Target deltas's integrity will be checked. */
PM_TRANS_EVT_DELTA_INTEGRITY_START,
/** Target delta's integrity was checked. */
PM_TRANS_EVT_DELTA_INTEGRITY_DONE,
/** Deltas will be applied to packages. */
PM_TRANS_EVT_DELTA_PATCHES_START,
/** Deltas were applied to packages. */
PM_TRANS_EVT_DELTA_PATCHES_DONE,
/** Delta patch will be applied to target package.
* The filename of the package and the filename of the patch is passed to the
* callback.
*/
PM_TRANS_EVT_DELTA_PATCH_START,
/** Delta patch was applied to target package. */
PM_TRANS_EVT_DELTA_PATCH_DONE,
/** Delta patch failed to apply to target package. */
PM_TRANS_EVT_DELTA_PATCH_FAILED,
/** Scriptlet has printed information.
* A line of text is passed to the callback.
*/
PM_TRANS_EVT_SCRIPTLET_INFO,
PM_TRANS_EVT_PRINTURI,
/** Files will be downloaded from a repository.
* The repository's tree name is passed to the callback.
*/
PM_TRANS_EVT_RETRIEVE_START,
} pmtransevt_t;
/*@}*/
/* Transaction Conversations (ie, questions) */
typedef enum _pmtransconv_t {
@@ -328,8 +381,7 @@ typedef enum _pmtransconv_t {
PM_TRANS_CONV_CONFLICT_PKG = 0x04,
PM_TRANS_CONV_CORRUPTED_PKG = 0x08,
PM_TRANS_CONV_LOCAL_NEWER = 0x10,
/* 0x20 flag can go here */
PM_TRANS_CONV_REMOVE_HOLDPKG = 0x40
PM_TRANS_CONV_REMOVE_PKGS = 0x20,
} pmtransconv_t;
/* Transaction Progress */
@@ -352,12 +404,11 @@ typedef void (*alpm_trans_cb_progress)(pmtransprog_t, const char *, int, int, in
pmtranstype_t alpm_trans_get_type();
unsigned int alpm_trans_get_flags();
alpm_list_t * alpm_trans_get_targets();
alpm_list_t * alpm_trans_get_pkgs();
int alpm_trans_init(pmtranstype_t type, pmtransflag_t flags,
alpm_trans_cb_event cb_event, alpm_trans_cb_conv conv,
alpm_trans_cb_progress cb_progress);
int alpm_trans_sysupgrade(void);
int alpm_trans_sysupgrade(int enable_downgrade);
int alpm_trans_addtarget(char *target);
int alpm_trans_prepare(alpm_list_t **data);
int alpm_trans_commit(alpm_list_t **data);
@@ -377,13 +428,16 @@ typedef enum _pmdepmod_t {
PM_DEP_MOD_LT
} pmdepmod_t;
pmdepend_t *alpm_splitdep(const char *depstring);
int alpm_depcmp(pmpkg_t *pkg, pmdepend_t *dep);
alpm_list_t *alpm_checkdeps(pmdb_t *db, int reversedeps,
alpm_list_t *alpm_checkdeps(alpm_list_t *pkglist, int reversedeps,
alpm_list_t *remove, alpm_list_t *upgrade);
alpm_list_t *alpm_deptest(pmdb_t *db, alpm_list_t *targets);
const char *alpm_miss_get_target(const pmdepmissing_t *miss);
pmdepend_t *alpm_miss_get_dep(pmdepmissing_t *miss);
const char *alpm_miss_get_causingpkg(const pmdepmissing_t *miss);
alpm_list_t *alpm_checkconflicts(alpm_list_t *pkglist);
const char *alpm_conflict_get_package1(pmconflict_t *conflict);
const char *alpm_conflict_get_package2(pmconflict_t *conflict);
@@ -391,7 +445,7 @@ const char *alpm_conflict_get_package2(pmconflict_t *conflict);
pmdepmod_t alpm_dep_get_mod(const pmdepend_t *dep);
const char *alpm_dep_get_name(const pmdepend_t *dep);
const char *alpm_dep_get_version(const pmdepend_t *dep);
char *alpm_dep_get_string(const pmdepend_t *dep);
char *alpm_dep_compute_string(const pmdepend_t *dep);
/*
* File conflicts
@@ -412,7 +466,7 @@ const char *alpm_fileconflict_get_ctarget(pmfileconflict_t *conflict);
*/
/* checksums */
char *alpm_get_md5sum(const char *name);
char *alpm_compute_md5sum(const char *name);
/*
* Errors
@@ -438,12 +492,7 @@ enum _pmerrno_t {
PM_ERR_DB_REMOVE,
/* Servers */
PM_ERR_SERVER_BAD_URL,
/* Configuration */
PM_ERR_OPT_LOGFILE,
PM_ERR_OPT_DBPATH,
PM_ERR_OPT_LOCALDB,
PM_ERR_OPT_SYNCDB,
PM_ERR_OPT_USESYSLOG,
PM_ERR_SERVER_NONE,
/* Transactions */
PM_ERR_TRANS_NOT_NULL,
PM_ERR_TRANS_NULL,
@@ -452,39 +501,29 @@ enum _pmerrno_t {
PM_ERR_TRANS_NOT_PREPARED,
PM_ERR_TRANS_ABORT,
PM_ERR_TRANS_TYPE,
PM_ERR_TRANS_COMMITING,
PM_ERR_TRANS_DOWNLOADING,
PM_ERR_TRANS_NOT_LOCKED,
/* Packages */
PM_ERR_PKG_NOT_FOUND,
PM_ERR_PKG_IGNORED,
PM_ERR_PKG_INVALID,
PM_ERR_PKG_OPEN,
PM_ERR_PKG_LOAD,
PM_ERR_PKG_INSTALLED,
PM_ERR_PKG_CANT_FRESH,
PM_ERR_PKG_CANT_REMOVE,
PM_ERR_PKG_INVALID_NAME,
PM_ERR_PKG_CORRUPTED,
PM_ERR_PKG_REPO_NOT_FOUND,
/* Deltas */
PM_ERR_DLT_CORRUPTED,
PM_ERR_DLT_INVALID,
PM_ERR_DLT_PATCHFAILED,
/* Groups */
PM_ERR_GRP_NOT_FOUND,
/* Dependencies */
PM_ERR_UNSATISFIED_DEPS,
PM_ERR_CONFLICTING_DEPS,
PM_ERR_FILE_CONFLICTS,
/* Misc */
PM_ERR_USER_ABORT,
PM_ERR_INTERNAL_ERROR,
PM_ERR_LIBARCHIVE_ERROR,
PM_ERR_DB_SYNC,
PM_ERR_RETRIEVE,
PM_ERR_PKG_HOLD,
PM_ERR_INVALID_REGEX,
/* Downloading */
PM_ERR_CONNECT_FAILED,
PM_ERR_FORK_FAILED
/* External library errors */
PM_ERR_LIBARCHIVE,
PM_ERR_LIBFETCH,
PM_ERR_EXTERNAL_DOWNLOAD
};
extern enum _pmerrno_t pm_errno;

View File

@@ -1,7 +1,8 @@
/*
* alpm_list.c
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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
* it under the terms of the GNU General Public License as published by
@@ -17,15 +18,16 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
/* libalpm */
#include "alpm_list.h"
#include "util.h"
/* check exported library symbols with: nm -C -D <lib> */
#define SYMEXPORT __attribute__((visibility("default")))
#define SYMHIDDEN __attribute__((visibility("internal")))
/**
* @addtogroup alpm_list List Functions
@@ -39,25 +41,6 @@
/* Allocation */
/**
* @brief Allocate a new alpm_list_t.
*
* @return a new alpm_list_t item, or NULL on failure
*/
alpm_list_t SYMEXPORT *alpm_list_new()
{
alpm_list_t *list = NULL;
list = malloc(sizeof(alpm_list_t));
if(list) {
list->data = NULL;
list->prev = list; /* maintain a back reference to the tail pointer */
list->next = NULL;
}
return(list);
}
/**
* @brief Free a list, but not the contained data.
*
@@ -107,30 +90,26 @@ alpm_list_t SYMEXPORT *alpm_list_add(alpm_list_t *list, void *data)
{
alpm_list_t *ptr, *lp;
ptr = list;
ptr = calloc(1, sizeof(alpm_list_t));
if(ptr == NULL) {
ptr = alpm_list_new();
if(ptr == NULL) {
return(NULL);
}
return(list);
}
lp = alpm_list_last(ptr);
if(lp == ptr && lp->data == NULL) {
/* nada */
} else {
lp->next = alpm_list_new();
if(lp->next == NULL) {
return(NULL);
}
lp->next->prev = lp;
lp = lp->next;
list->prev = lp;
ptr->data = data;
ptr->next = NULL;
/* Special case: the input list is empty */
if(list == NULL) {
ptr->prev = ptr;
return(ptr);
}
lp->data = data;
lp = alpm_list_last(list);
lp->next = ptr;
ptr->prev = lp;
list->prev = ptr;
return(ptr);
return(list);
}
/**
@@ -144,12 +123,15 @@ alpm_list_t SYMEXPORT *alpm_list_add(alpm_list_t *list, void *data)
*/
alpm_list_t SYMEXPORT *alpm_list_add_sorted(alpm_list_t *list, void *data, alpm_list_fn_cmp fn)
{
if(!fn) {
return alpm_list_add(list, data);
if(!fn || !list) {
return(alpm_list_add(list, data));
} else {
alpm_list_t *add = NULL, *prev = NULL, *next = list;
add = alpm_list_new();
add = calloc(1, sizeof(alpm_list_t));
if(add == NULL) {
return(list);
}
add->data = data;
/* Find insertion point. */
@@ -159,26 +141,25 @@ alpm_list_t SYMEXPORT *alpm_list_add_sorted(alpm_list_t *list, void *data, alpm_
next = next->next;
}
/* Insert node before insertion point. */
add->prev = prev;
add->next = next;
if(next != NULL) {
next->prev = add; /* Not at end. */
}
if(prev != NULL) {
prev->next = add; /* In middle. */
} else {
list = add; /* At beginning, or new list */
}
if(next == NULL) {
/* At end, adjust tail pointer on head node */
/* Insert the add node to the list */
if(prev == NULL) { /* special case: we insert add as the first element */
add->prev = list->prev; /* list != NULL */
add->next = list;
list->prev = add;
return(add);
} else if(next == NULL) { /* another special case: add last element */
add->prev = prev;
add->next = NULL;
prev->next = add;
list->prev = add;
return(list);
} else {
add->prev = prev;
add->next = next;
next->prev = add;
prev->next = add;
return(list);
}
return(list);
}
}
@@ -198,10 +179,10 @@ alpm_list_t SYMEXPORT *alpm_list_join(alpm_list_t *first, alpm_list_t *second)
alpm_list_t *tmp;
if (first == NULL) {
return second;
return(second);
}
if (second == NULL) {
return first;
return(first);
}
/* tmp is the last element of the first list */
tmp = first->prev;
@@ -322,12 +303,16 @@ alpm_list_t SYMEXPORT *alpm_list_remove(alpm_list_t *haystack, const void *needl
*data = NULL;
}
if(needle == NULL) {
return(haystack);
}
while(i) {
if(i->data == NULL) {
continue;
}
tmp = i->next;
if(fn(needle, i->data) == 0) {
if(fn(i->data, needle) == 0) {
/* we found a matching item */
if(i == haystack) {
/* Special case: removing the head node which has a back reference to
@@ -370,6 +355,22 @@ alpm_list_t SYMEXPORT *alpm_list_remove(alpm_list_t *haystack, const void *needl
return(haystack);
}
/**
* @brief Remove a string from a list.
*
* @param haystack the list to remove the item from
* @param needle the data member of the item we're removing
* @param data output parameter containing data of the removed item
*
* @return the resultant list
*/
alpm_list_t SYMEXPORT *alpm_list_remove_str(alpm_list_t *haystack,
const char *needle, char **data)
{
return(alpm_list_remove(haystack, (const void *)needle,
(alpm_list_fn_cmp)strcmp, (void **)data));
}
/**
* @brief Create a new list without any duplicates.
*
@@ -464,18 +465,22 @@ alpm_list_t SYMEXPORT *alpm_list_copy_data(const alpm_list_t *list,
alpm_list_t SYMEXPORT *alpm_list_reverse(alpm_list_t *list)
{
const alpm_list_t *lp;
alpm_list_t *newlist = NULL;
alpm_list_t *newlist = NULL, *backup;
if(list == NULL) {
return(NULL);
}
lp = alpm_list_last(list);
if(list) {
/* break our reverse circular list */
list->prev = NULL;
}
/* break our reverse circular list */
backup = list->prev;
list->prev = NULL;
while(lp) {
newlist = alpm_list_add(newlist, lp->data);
lp = lp->prev;
}
list->prev = backup; /* restore tail pointer */
return(newlist);
}
@@ -490,14 +495,18 @@ alpm_list_t SYMEXPORT *alpm_list_reverse(alpm_list_t *list)
*/
inline alpm_list_t SYMEXPORT *alpm_list_first(const alpm_list_t *list)
{
return((alpm_list_t*)list);
if(list) {
return((alpm_list_t*)list);
} else {
return(NULL);
}
}
/**
* @brief Return nth element from list (starting from 0).
*
* @param list the list
* @param n the index of the item to find
* @param n the index of the item to find (n < alpm_list_count(list) IS needed)
*
* @return an alpm_list_t node for index `n`
*/
@@ -519,7 +528,11 @@ alpm_list_t SYMEXPORT *alpm_list_nth(const alpm_list_t *list, int n)
*/
inline alpm_list_t SYMEXPORT *alpm_list_next(const alpm_list_t *node)
{
return(node->next);
if(node) {
return(node->next);
} else {
return(NULL);
}
}
/**
@@ -594,7 +607,7 @@ void SYMEXPORT *alpm_list_find(const alpm_list_t *haystack, const void *needle,
}
/* trivial helper function for alpm_list_find_ptr */
static int ptrcmp(const void *p, const void *q)
static int ptr_cmp(const void *p, const void *q)
{
return(p != q);
}
@@ -611,7 +624,7 @@ static int ptrcmp(const void *p, const void *q)
*/
void SYMEXPORT *alpm_list_find_ptr(const alpm_list_t *haystack, const void *needle)
{
return(alpm_list_find(haystack, needle, ptrcmp));
return(alpm_list_find(haystack, needle, ptr_cmp));
}
/**
@@ -622,9 +635,11 @@ void SYMEXPORT *alpm_list_find_ptr(const alpm_list_t *haystack, const void *need
*
* @return `needle` if found, NULL otherwise
*/
char SYMEXPORT *alpm_list_find_str(const alpm_list_t *haystack, const char *needle)
char SYMEXPORT *alpm_list_find_str(const alpm_list_t *haystack,
const char *needle)
{
return((char *)alpm_list_find(haystack, (const void*)needle, (alpm_list_fn_cmp)strcmp));
return((char *)alpm_list_find(haystack, (const void*)needle,
(alpm_list_fn_cmp)strcmp));
}
/**

View File

@@ -1,7 +1,8 @@
/*
* alpm_list.h
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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
* it under the terms of the GNU General Public License as published by
@@ -19,6 +20,8 @@
#ifndef _ALPM_LIST_H
#define _ALPM_LIST_H
#include <stdlib.h> /* size_t */
#ifdef __cplusplus
extern "C" {
#endif
@@ -45,7 +48,6 @@ typedef void (*alpm_list_fn_free)(void *); /* item deallocation callback */
typedef int (*alpm_list_fn_cmp)(const void *, const void *); /* item comparison callback */
/* allocation */
alpm_list_t *alpm_list_new(void);
void alpm_list_free(alpm_list_t *list);
void alpm_list_free_inner(alpm_list_t *list, alpm_list_fn_free fn);
@@ -56,6 +58,7 @@ alpm_list_t *alpm_list_join(alpm_list_t *first, alpm_list_t *second);
alpm_list_t *alpm_list_mmerge(alpm_list_t *left, alpm_list_t *right, alpm_list_fn_cmp fn);
alpm_list_t *alpm_list_msort(alpm_list_t *list, int n, alpm_list_fn_cmp fn);
alpm_list_t *alpm_list_remove(alpm_list_t *haystack, const void *needle, alpm_list_fn_cmp fn, void **data);
alpm_list_t *alpm_list_remove_str(alpm_list_t *haystack, const char *needle, char **data);
alpm_list_t *alpm_list_remove_dupes(const alpm_list_t *list);
alpm_list_t *alpm_list_strdup(const alpm_list_t *list);
alpm_list_t *alpm_list_copy(const alpm_list_t *list);

View File

@@ -1,6 +1,7 @@
/*
* backup.c
*
* Copyright (c) 2006-2009 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>
@@ -42,6 +43,9 @@ int _alpm_backup_split(const char *string, char **file, char **hash)
if(ptr == NULL) {
if(file) {
*file = str;
} else {
/* don't need our dup as the fname wasn't requested, so free it */
FREE(str);
}
return(0);
}

View File

@@ -1,7 +1,8 @@
/*
* backup.h
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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
* it under the terms of the GNU General Public License as published by

File diff suppressed because it is too large Load Diff

289
lib/libalpm/be_package.c Normal file
View File

@@ -0,0 +1,289 @@
/*
* be_package.c
*
* Copyright (c) 2006-2009 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
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <ctype.h>
#include <locale.h> /* setlocale */
/* libarchive */
#include <archive.h>
#include <archive_entry.h>
/* libalpm */
#include "alpm_list.h"
#include "util.h"
#include "log.h"
#include "package.h"
#include "deps.h" /* _alpm_splitdep */
/**
* Parses the package description file for a package into a pmpkg_t struct.
* @param archive the archive to read from, pointed at the .PKGINFO entry
* @param newpkg an empty pmpkg_t struct to fill with package info
*
* @return 0 on success, 1 on error
*/
static int parse_descfile(struct archive *a, pmpkg_t *newpkg)
{
char line[PATH_MAX];
char *ptr = NULL;
char *key = NULL;
int linenum = 0;
ALPM_LOG_FUNC;
/* loop until we reach EOF (where archive_fgets will return NULL) */
while(_alpm_archive_fgets(line, PATH_MAX, a) != NULL) {
linenum++;
_alpm_strtrim(line);
if(strlen(line) == 0 || line[0] == '#') {
continue;
}
ptr = line;
key = strsep(&ptr, "=");
if(key == NULL || ptr == NULL) {
_alpm_log(PM_LOG_DEBUG, "%s: syntax error in description file line %d\n",
newpkg->name ? newpkg->name : "error", linenum);
} else {
key = _alpm_strtrim(key);
ptr = _alpm_strtrim(ptr);
if(!strcmp(key, "pkgname")) {
STRDUP(newpkg->name, ptr, RET_ERR(PM_ERR_MEMORY, -1));
} else if(!strcmp(key, "pkgver")) {
STRDUP(newpkg->version, ptr, RET_ERR(PM_ERR_MEMORY, -1));
} else if(!strcmp(key, "pkgdesc")) {
STRDUP(newpkg->desc, ptr, RET_ERR(PM_ERR_MEMORY, -1));
} else if(!strcmp(key, "group")) {
newpkg->groups = alpm_list_add(newpkg->groups, strdup(ptr));
} else if(!strcmp(key, "url")) {
STRDUP(newpkg->url, ptr, RET_ERR(PM_ERR_MEMORY, -1));
} else if(!strcmp(key, "license")) {
newpkg->licenses = alpm_list_add(newpkg->licenses, strdup(ptr));
} else if(!strcmp(key, "builddate")) {
char first = tolower(ptr[0]);
if(first > 'a' && first < 'z') {
struct tm tmp_tm = {0}; /* initialize to null in case of failure */
setlocale(LC_TIME, "C");
strptime(ptr, "%a %b %e %H:%M:%S %Y", &tmp_tm);
newpkg->builddate = mktime(&tmp_tm);
setlocale(LC_TIME, "");
} else {
newpkg->builddate = atol(ptr);
}
} else if(!strcmp(key, "packager")) {
STRDUP(newpkg->packager, ptr, RET_ERR(PM_ERR_MEMORY, -1));
} else if(!strcmp(key, "arch")) {
STRDUP(newpkg->arch, ptr, RET_ERR(PM_ERR_MEMORY, -1));
} else if(!strcmp(key, "size")) {
/* size in the raw package is uncompressed (installed) size */
newpkg->isize = atol(ptr);
} else if(!strcmp(key, "depend")) {
pmdepend_t *dep = _alpm_splitdep(ptr);
newpkg->depends = alpm_list_add(newpkg->depends, dep);
} else if(!strcmp(key, "optdepend")) {
newpkg->optdepends = alpm_list_add(newpkg->optdepends, strdup(ptr));
} else if(!strcmp(key, "conflict")) {
newpkg->conflicts = alpm_list_add(newpkg->conflicts, strdup(ptr));
} else if(!strcmp(key, "replaces")) {
newpkg->replaces = alpm_list_add(newpkg->replaces, strdup(ptr));
} else if(!strcmp(key, "provides")) {
newpkg->provides = alpm_list_add(newpkg->provides, strdup(ptr));
} else if(!strcmp(key, "backup")) {
newpkg->backup = alpm_list_add(newpkg->backup, strdup(ptr));
} else {
_alpm_log(PM_LOG_DEBUG, "%s: syntax error in description file line %d\n",
newpkg->name ? newpkg->name : "error", linenum);
}
}
line[0] = '\0';
}
return(0);
}
/**
* Load a package and create the corresponding pmpkg_t struct.
* @param pkgfile path to the package file
* @param full whether to stop the load after metadata is read or continue
* through the full archive
* @return An information filled pmpkg_t struct
*/
static pmpkg_t *pkg_load(const char *pkgfile, unsigned short full)
{
int ret = ARCHIVE_OK;
int config = 0;
struct archive *archive;
struct archive_entry *entry;
pmpkg_t *newpkg = NULL;
struct stat st;
ALPM_LOG_FUNC;
if(pkgfile == NULL || strlen(pkgfile) == 0) {
RET_ERR(PM_ERR_WRONG_ARGS, NULL);
}
if(stat(pkgfile, &st) != 0) {
RET_ERR(PM_ERR_PKG_OPEN, NULL);
}
if((archive = archive_read_new()) == NULL) {
RET_ERR(PM_ERR_LIBARCHIVE, NULL);
}
archive_read_support_compression_all(archive);
archive_read_support_format_all(archive);
if (archive_read_open_filename(archive, pkgfile,
ARCHIVE_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) {
RET_ERR(PM_ERR_PKG_OPEN, NULL);
}
newpkg = _alpm_pkg_new();
if(newpkg == NULL) {
archive_read_finish(archive);
RET_ERR(PM_ERR_MEMORY, NULL);
}
newpkg->filename = strdup(pkgfile);
newpkg->size = st.st_size;
/* If full is false, only read through the archive until we find our needed
* metadata. If it is true, read through the entire archive, which serves
* as a verfication of integrity and allows us to create the filelist. */
while((ret = archive_read_next_header(archive, &entry)) == ARCHIVE_OK) {
const char *entry_name = archive_entry_pathname(entry);
if(strcmp(entry_name, ".PKGINFO") == 0) {
/* parse the info file */
if(parse_descfile(archive, newpkg) != 0) {
_alpm_log(PM_LOG_ERROR, _("could not parse package description file in %s\n"),
pkgfile);
goto pkg_invalid;
}
if(newpkg->name == NULL || strlen(newpkg->name) == 0) {
_alpm_log(PM_LOG_ERROR, _("missing package name in %s\n"), pkgfile);
goto pkg_invalid;
}
if(newpkg->version == NULL || strlen(newpkg->version) == 0) {
_alpm_log(PM_LOG_ERROR, _("missing package version in %s\n"), pkgfile);
goto pkg_invalid;
}
config = 1;
continue;
} else if(strcmp(entry_name, ".INSTALL") == 0) {
newpkg->scriptlet = 1;
} else if(*entry_name == '.') {
/* for now, ignore all files starting with '.' that haven't
* already been handled (for future possibilities) */
} else {
/* Keep track of all files for filelist generation */
newpkg->files = alpm_list_add(newpkg->files, strdup(entry_name));
}
if(archive_read_data_skip(archive)) {
_alpm_log(PM_LOG_ERROR, _("error while reading package %s: %s\n"),
pkgfile, archive_error_string(archive));
pm_errno = PM_ERR_LIBARCHIVE;
goto error;
}
/* if we are not doing a full read, see if we have all we need */
if(!full && config) {
break;
}
}
if(ret != ARCHIVE_EOF && ret != ARCHIVE_OK) { /* An error occured */
_alpm_log(PM_LOG_ERROR, _("error while reading package %s: %s\n"),
pkgfile, archive_error_string(archive));
pm_errno = PM_ERR_LIBARCHIVE;
goto error;
}
if(!config) {
_alpm_log(PM_LOG_ERROR, _("missing package metadata in %s\n"), pkgfile);
goto pkg_invalid;
}
archive_read_finish(archive);
/* internal fields for package struct */
newpkg->origin = PKG_FROM_FILE;
newpkg->origin_data.file = strdup(pkgfile);
if(full) {
/* "checking for conflicts" requires a sorted list, ensure that here */
_alpm_log(PM_LOG_DEBUG, "sorting package filelist for %s\n", pkgfile);
newpkg->files = alpm_list_msort(newpkg->files, alpm_list_count(newpkg->files),
_alpm_str_cmp);
newpkg->infolevel = INFRQ_ALL;
} else {
/* get rid of any partial filelist we may have collected, it is invalid */
FREELIST(newpkg->files);
newpkg->infolevel = INFRQ_BASE | INFRQ_DESC | INFRQ_DEPENDS;
}
return(newpkg);
pkg_invalid:
pm_errno = PM_ERR_PKG_INVALID;
error:
_alpm_pkg_free(newpkg);
archive_read_finish(archive);
return(NULL);
}
/** Create a package from a file.
* If full is false, the archive is read only until all necessary
* metadata is found. If it is true, the entire archive is read, which
* serves as a verfication of integrity and the filelist can be created.
* @param filename location of the package tarball
* @param full whether to stop the load after metadata is read or continue
* through the full archive
* @param pkg address of the package pointer
* @return 0 on success, -1 on error (pm_errno is set accordingly)
*/
int SYMEXPORT alpm_pkg_load(const char *filename, unsigned short full,
pmpkg_t **pkg)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(filename != NULL && strlen(filename) != 0,
RET_ERR(PM_ERR_WRONG_ARGS, -1));
ASSERT(pkg != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1));
*pkg = pkg_load(filename, full);
if(*pkg == NULL) {
/* pm_errno is set by pkg_load */
return(-1);
}
return(0);
}
/* vim: set ts=2 sw=2 noet: */

View File

@@ -1,7 +1,8 @@
/*
* cache.c
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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
* it under the terms of the GNU General Public License as published by
@@ -19,7 +20,6 @@
#include "config.h"
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
@@ -31,7 +31,6 @@
#include "log.h"
#include "alpm.h"
#include "util.h"
#include "error.h"
#include "package.h"
#include "group.h"
#include "db.h"
@@ -41,32 +40,22 @@
*/
int _alpm_db_load_pkgcache(pmdb_t *db)
{
pmpkg_t *info;
int count = 0;
ALPM_LOG_FUNC;
if(db == NULL) {
return(-1);
}
_alpm_db_free_pkgcache(db);
_alpm_log(PM_LOG_DEBUG, "loading package cache for repository '%s'\n",
db->treename);
_alpm_db_rewind(db);
while((info = _alpm_db_scan(db, NULL)) != NULL) {
_alpm_log(PM_LOG_FUNCTION, "adding '%s' to package cache for db '%s'\n",
alpm_pkg_get_name(info), db->treename);
info->origin = PKG_FROM_CACHE;
info->origin_data.db = db;
/* add to the collection */
db->pkgcache = alpm_list_add(db->pkgcache, info);
count++;
db->treename);
if(_alpm_db_populate(db) == -1) {
_alpm_log(PM_LOG_DEBUG,
"failed to load package cache for repository '%s'\n", db->treename);
return(-1);
}
db->pkgcache = alpm_list_msort(db->pkgcache, count, _alpm_pkg_cmp);
db->pkgcache_loaded = 1;
return(0);
}
@@ -74,23 +63,19 @@ void _alpm_db_free_pkgcache(pmdb_t *db)
{
ALPM_LOG_FUNC;
if(db == NULL || db->pkgcache == NULL) {
if(db == NULL || !db->pkgcache_loaded) {
return;
}
_alpm_log(PM_LOG_DEBUG, "freeing package cache for repository '%s'\n",
db->treename);
alpm_list_t *tmp;
for(tmp = db->pkgcache; tmp; tmp = alpm_list_next(tmp)) {
_alpm_pkg_free(tmp->data);
}
alpm_list_free_inner(db->pkgcache, (alpm_list_fn_free)_alpm_pkg_free);
alpm_list_free(db->pkgcache);
db->pkgcache = NULL;
db->pkgcache_loaded = 0;
if(db->grpcache) {
_alpm_db_free_grpcache(db);
}
_alpm_db_free_grpcache(db);
}
alpm_list_t *_alpm_db_get_pkgcache(pmdb_t *db)
@@ -101,32 +86,44 @@ alpm_list_t *_alpm_db_get_pkgcache(pmdb_t *db)
return(NULL);
}
if(!db->pkgcache) {
if(!db->pkgcache_loaded) {
_alpm_db_load_pkgcache(db);
}
/* hmmm, still NULL ?*/
if(!db->pkgcache) {
_alpm_log(PM_LOG_DEBUG, "error: pkgcache is NULL for db '%s'\n", db->treename);
_alpm_log(PM_LOG_DEBUG, "warning: pkgcache is NULL for db '%s'\n", db->treename);
}
return(db->pkgcache);
}
/* "duplicate" pkg with BASE info (to spare some memory) then add it to pkgcache */
int _alpm_db_add_pkgincache(pmdb_t *db, pmpkg_t *pkg)
{
pmpkg_t *newpkg;
ALPM_LOG_FUNC;
if(db == NULL || pkg == NULL) {
if(db == NULL || !db->pkgcache_loaded || pkg == NULL) {
return(-1);
}
newpkg = _alpm_pkg_dup(pkg);
newpkg = _alpm_pkg_new();
if(newpkg == NULL) {
return(-1);
}
newpkg->name = strdup(pkg->name);
newpkg->version = strdup(pkg->version);
if(newpkg->name == NULL || newpkg->version == NULL) {
pm_errno = PM_ERR_MEMORY;
_alpm_pkg_free(newpkg);
return(-1);
}
newpkg->origin = PKG_FROM_CACHE;
newpkg->origin_data.db = db;
newpkg->infolevel = INFRQ_BASE;
_alpm_log(PM_LOG_DEBUG, "adding entry '%s' in '%s' cache\n",
alpm_pkg_get_name(newpkg), db->treename);
db->pkgcache = alpm_list_add_sorted(db->pkgcache, newpkg, _alpm_pkg_cmp);
@@ -143,7 +140,7 @@ int _alpm_db_remove_pkgfromcache(pmdb_t *db, pmpkg_t *pkg)
ALPM_LOG_FUNC;
if(db == NULL || pkg == NULL) {
if(db == NULL || !db->pkgcache_loaded || pkg == NULL) {
return(-1);
}
@@ -176,12 +173,12 @@ pmpkg_t *_alpm_db_get_pkgfromcache(pmdb_t *db, const char *target)
alpm_list_t *pkgcache = _alpm_db_get_pkgcache(db);
if(!pkgcache) {
_alpm_log(PM_LOG_DEBUG, "error: failed to get '%s' from NULL pkgcache\n",
_alpm_log(PM_LOG_DEBUG, "warning: failed to get '%s' from NULL pkgcache\n",
target);
return(NULL);
}
return(_alpm_pkg_find(target, pkgcache));
return(_alpm_pkg_find(pkgcache, target));
}
/* Returns a new group cache from db.
@@ -196,10 +193,6 @@ int _alpm_db_load_grpcache(pmdb_t *db)
return(-1);
}
if(db->pkgcache == NULL) {
_alpm_db_load_pkgcache(db);
}
_alpm_log(PM_LOG_DEBUG, "loading group cache for repository '%s'\n",
db->treename);
@@ -208,36 +201,33 @@ int _alpm_db_load_grpcache(pmdb_t *db)
pmpkg_t *pkg = lp->data;
for(i = alpm_pkg_get_groups(pkg); i; i = i->next) {
if(!alpm_list_find_str(db->grpcache, i->data)) {
pmgrp_t *grp = _alpm_grp_new();
const char *grpname = i->data;
alpm_list_t *j;
pmgrp_t *grp = NULL;
int found = 0;
strncpy(grp->name, i->data, GRP_NAME_LEN);
grp->name[GRP_NAME_LEN-1] = '\0';
grp->packages = alpm_list_add_sorted(grp->packages,
/* gross signature forces us to
* discard const */
(void*)alpm_pkg_get_name(pkg),
_alpm_str_cmp);
db->grpcache = alpm_list_add_sorted(db->grpcache, grp, _alpm_grp_cmp);
} else {
alpm_list_t *j;
/* first look through the group cache for a group with this name */
for(j = db->grpcache; j; j = j->next) {
grp = j->data;
for(j = db->grpcache; j; j = j->next) {
pmgrp_t *grp = j->data;
if(strcmp(grp->name, i->data) == 0) {
const char *pkgname = alpm_pkg_get_name(pkg);
if(!alpm_list_find_str(grp->packages, pkgname)) {
grp->packages = alpm_list_add_sorted(grp->packages,
(void*)pkgname,
_alpm_str_cmp);
}
}
if(strcmp(grp->name, grpname) == 0
&& !alpm_list_find_ptr(grp->packages, pkg)) {
grp->packages = alpm_list_add(grp->packages, pkg);
found = 1;
break;
}
}
if(found) {
continue;
}
/* we didn't find the group, so create a new one with this name */
grp = _alpm_grp_new(grpname);
grp->packages = alpm_list_add(grp->packages, pkg);
db->grpcache = alpm_list_add(db->grpcache, grp);
}
}
db->grpcache_loaded = 1;
return(0);
}
@@ -247,19 +237,19 @@ void _alpm_db_free_grpcache(pmdb_t *db)
ALPM_LOG_FUNC;
if(db == NULL || db->grpcache == NULL) {
if(db == NULL || !db->grpcache_loaded) {
return;
}
for(lg = db->grpcache; lg; lg = lg->next) {
pmgrp_t *grp = lg->data;
_alpm_log(PM_LOG_DEBUG, "freeing group cache for repository '%s'\n",
db->treename);
alpm_list_free(grp->packages);
grp->packages = NULL;
for(lg = db->grpcache; lg; lg = lg->next) {
_alpm_grp_free(lg->data);
lg->data = NULL;
}
FREELIST(db->grpcache);
db->grpcache_loaded = 0;
}
alpm_list_t *_alpm_db_get_grpcache(pmdb_t *db)
@@ -270,7 +260,7 @@ alpm_list_t *_alpm_db_get_grpcache(pmdb_t *db)
return(NULL);
}
if(db->grpcache == NULL) {
if(!db->grpcache_loaded) {
_alpm_db_load_grpcache(db);
}

View File

@@ -1,7 +1,8 @@
/*
* cache.h
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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
* it under the terms of the GNU General Public License as published by

View File

@@ -1,7 +1,8 @@
/*
* conflict.c
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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>
* Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org>
@@ -25,10 +26,10 @@
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <limits.h>
#include <sys/stat.h>
#include <dirent.h>
/* libalpm */
#include "conflict.h"
@@ -36,7 +37,6 @@
#include "handle.h"
#include "trans.h"
#include "util.h"
#include "error.h"
#include "log.h"
#include "cache.h"
#include "deps.h"
@@ -49,12 +49,30 @@ pmconflict_t *_alpm_conflict_new(const char *package1, const char *package2)
MALLOC(conflict, sizeof(pmconflict_t), RET_ERR(PM_ERR_MEMORY, NULL));
strncpy(conflict->package1, package1, PKG_NAME_LEN);
strncpy(conflict->package2, package2, PKG_NAME_LEN);
STRDUP(conflict->package1, package1, RET_ERR(PM_ERR_MEMORY, NULL));
STRDUP(conflict->package2, package2, RET_ERR(PM_ERR_MEMORY, NULL));
return(conflict);
}
void _alpm_conflict_free(pmconflict_t *conflict)
{
FREE(conflict->package2);
FREE(conflict->package1);
FREE(conflict);
}
pmconflict_t *_alpm_conflict_dup(const pmconflict_t *conflict)
{
pmconflict_t *newconflict;
CALLOC(newconflict, 1, sizeof(pmconflict_t), RET_ERR(PM_ERR_MEMORY, NULL));
STRDUP(newconflict->package1, conflict->package1, RET_ERR(PM_ERR_MEMORY, NULL));
STRDUP(newconflict->package2, conflict->package2, RET_ERR(PM_ERR_MEMORY, NULL));
return(newconflict);
}
int _alpm_conflict_isin(pmconflict_t *needle, alpm_list_t *haystack)
{
alpm_list_t *i;
@@ -86,7 +104,7 @@ static int does_conflict(pmpkg_t *pkg1, const char *conflict, pmpkg_t *pkg2)
{
const char *pkg1name = alpm_pkg_get_name(pkg1);
const char *pkg2name = alpm_pkg_get_name(pkg2);
pmdepend_t *conf = alpm_splitdep(conflict);
pmdepend_t *conf = _alpm_splitdep(conflict);
int match = 0;
match = alpm_depcmp(pkg2, conf);
@@ -94,7 +112,7 @@ static int does_conflict(pmpkg_t *pkg1, const char *conflict, pmpkg_t *pkg2)
_alpm_log(PM_LOG_DEBUG, "package %s conflicts with %s (by %s)\n",
pkg1name, pkg2name, conflict);
}
FREE(conf);
_alpm_dep_free(conf);
return(match);
}
@@ -110,7 +128,7 @@ static void add_conflict(alpm_list_t **baddeps, const char *pkg1,
if(conflict && !_alpm_conflict_isin(conflict, *baddeps)) {
*baddeps = alpm_list_add(*baddeps, conflict);
} else {
FREE(conflict);
_alpm_conflict_free(conflict);
}
}
@@ -200,9 +218,13 @@ alpm_list_t *_alpm_outerconflicts(pmdb_t *db, alpm_list_t *packages)
return(baddeps);
}
/* Check for transaction conflicts */
alpm_list_t *_alpm_checkconflicts(pmdb_t *db, alpm_list_t *packages) {
return(alpm_list_join(_alpm_innerconflicts(packages), _alpm_outerconflicts(db, packages)));
/** Check the package conflicts in a database
*
* @param pkglist the list of packages to check
* @return an alpm_list_t of pmconflict_t
*/
alpm_list_t SYMEXPORT *alpm_checkconflicts(alpm_list_t *pkglist) {
return(_alpm_innerconflicts(pkglist));
}
/* Returns a alpm_list_t* of file conflicts.
@@ -251,10 +273,7 @@ static alpm_list_t *chk_filedifference(alpm_list_t *filesA, alpm_list_t *filesB)
alpm_list_t *ret = NULL;
alpm_list_t *pA = filesA, *pB = filesB;
if(pB == NULL) {
return(alpm_list_strdup(pA));
}
/* if both filesA and filesB have entries, do this loop */
while(pA && pB) {
const char *strA = pA->data;
const char *strB = pB->data;
@@ -279,6 +298,15 @@ static alpm_list_t *chk_filedifference(alpm_list_t *filesA, alpm_list_t *filesB)
}
}
}
/* ensure we have completely emptied pA */
while(pA) {
const char *strA = pA->data;
/* skip directories */
if(strA[strlen(strA)-1] != '/') {
ret = alpm_list_add(ret, strdup(strA));
}
pA = pA->next;
}
return(ret);
}
@@ -293,15 +321,15 @@ static alpm_list_t *add_fileconflict(alpm_list_t *conflicts,
const char* name1, const char* name2)
{
pmfileconflict_t *conflict;
MALLOC(conflict, sizeof(pmfileconflict_t), return(conflicts));
MALLOC(conflict, sizeof(pmfileconflict_t), RET_ERR(PM_ERR_MEMORY, NULL));
conflict->type = type;
strncpy(conflict->target, name1, PKG_NAME_LEN);
strncpy(conflict->file, filestr, CONFLICT_FILE_LEN);
STRDUP(conflict->target, name1, RET_ERR(PM_ERR_MEMORY, NULL));
STRDUP(conflict->file, filestr, RET_ERR(PM_ERR_MEMORY, NULL));
if(name2) {
strncpy(conflict->ctarget, name2, PKG_NAME_LEN);
STRDUP(conflict->ctarget, name2, RET_ERR(PM_ERR_MEMORY, NULL));
} else {
conflict->ctarget[0] = '\0';
conflict->ctarget = "";
}
conflicts = alpm_list_add(conflicts, conflict);
@@ -311,19 +339,73 @@ static alpm_list_t *add_fileconflict(alpm_list_t *conflicts,
return(conflicts);
}
void _alpm_fileconflict_free(pmfileconflict_t *conflict)
{
if(strlen(conflict->ctarget) > 0) {
FREE(conflict->ctarget);
}
FREE(conflict->file);;
FREE(conflict->target);
FREE(conflict);
}
static int dir_belongsto_pkg(char *dirpath, pmpkg_t *pkg)
{
struct dirent *ent = NULL;
struct stat sbuf;
char path[PATH_MAX];
char abspath[PATH_MAX];
DIR *dir;
snprintf(abspath, PATH_MAX, "%s%s", handle->root, dirpath);
dir = opendir(abspath);
if(dir == NULL) {
return(1);
}
while((ent = readdir(dir)) != NULL) {
const char *name = ent->d_name;
if(strcmp(name, ".") == 0 || strcmp(name, "..") == 0) {
continue;
}
snprintf(path, PATH_MAX, "%s/%s", dirpath, name);
snprintf(abspath, PATH_MAX, "%s%s", handle->root, path);
if(stat(abspath, &sbuf) != 0) {
continue;
}
if(S_ISDIR(sbuf.st_mode)) {
if(dir_belongsto_pkg(path, pkg)) {
continue;
} else {
closedir(dir);
return(0);
}
} else {
if(alpm_list_find_str(alpm_pkg_get_files(pkg),path)) {
continue;
} else {
closedir(dir);
return(0);
}
}
}
closedir(dir);
return(1);
}
/* Find file conflicts that may occur during the transaction with two checks:
* 1: check every target against every target
* 2: check every target against the filesystem */
alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *root)
alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans,
alpm_list_t *upgrade, alpm_list_t *remove)
{
alpm_list_t *i, *conflicts = NULL;
alpm_list_t *targets = trans->packages;
int numtargs = alpm_list_count(targets);
alpm_list_t *i, *j, *conflicts = NULL;
int numtargs = alpm_list_count(upgrade);
int current;
ALPM_LOG_FUNC;
if(db == NULL || targets == NULL || root == NULL) {
if(db == NULL || upgrade == NULL) {
return(NULL);
}
@@ -331,8 +413,8 @@ alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *roo
* be possible with real transactions. Right now we only do half as much
* here as we do when we actually extract files in add.c with our 12
* different cases. */
for(current = 1, i = targets; i; i = i->next, current++) {
alpm_list_t *j, *k, *tmpfiles = NULL;
for(current = 1, i = upgrade; i; i = i->next, current++) {
alpm_list_t *k, *tmpfiles = NULL;
pmpkg_t *p1, *p2, *dbpkg;
char path[PATH_MAX+1];
@@ -345,18 +427,18 @@ alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *roo
PROGRESS(trans, PM_TRANS_PROGRESS_CONFLICTS_START, "", (percent * 100),
numtargs, current);
/* CHECK 1: check every target against every target */
_alpm_log(PM_LOG_DEBUG, "searching for file conflicts: %s\n",
alpm_pkg_get_name(p1));
for(j = i->next; j; j = j->next) {
p2 = j->data;
if(!p2) {
continue;
}
_alpm_log(PM_LOG_DEBUG, "searching for file conflicts: %s and %s\n",
alpm_pkg_get_name(p1), alpm_pkg_get_name(p2));
tmpfiles = chk_fileconflicts(alpm_pkg_get_files(p1), alpm_pkg_get_files(p2));
if(tmpfiles) {
for(k = tmpfiles; k; k = k->next) {
snprintf(path, PATH_MAX, "%s%s", root, (char *)k->data);
snprintf(path, PATH_MAX, "%s%s", handle->root, (char *)k->data);
conflicts = add_fileconflict(conflicts, PM_FILECONFLICT_TARGET, path,
alpm_pkg_get_name(p1), alpm_pkg_get_name(p2));
}
@@ -372,7 +454,7 @@ alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *roo
_alpm_log(PM_LOG_DEBUG, "searching for filesystem conflicts: %s\n", p1->name);
dbpkg = _alpm_db_get_pkgfromcache(db, p1->name);
/* Do two different checks here. f the package is currently installed,
/* Do two different checks here. If the package is currently installed,
* then only check files that are new in the new package. If the package
* is not currently installed, then simply stat the whole filelist */
if(dbpkg) {
@@ -384,12 +466,10 @@ alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *roo
tmpfiles = alpm_list_strdup(alpm_pkg_get_files(p1));
}
/* loop over each file to be installed */
for(j = tmpfiles; j; j = j->next) {
int skip_conflict = 0;
filestr = j->data;
snprintf(path, PATH_MAX, "%s%s", root, filestr);
snprintf(path, PATH_MAX, "%s%s", handle->root, filestr);
/* stat the file - if it exists, do some checks */
if(_alpm_lstat(path, &lsbuf) != 0) {
@@ -400,68 +480,75 @@ alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *roo
if(path[strlen(path)-1] == '/') {
if(S_ISDIR(lsbuf.st_mode)) {
_alpm_log(PM_LOG_DEBUG, "%s is a directory, not a conflict\n", path);
skip_conflict = 1;
continue;
} else if(S_ISLNK(lsbuf.st_mode) && S_ISDIR(sbuf.st_mode)) {
_alpm_log(PM_LOG_DEBUG,
"%s is a symlink to a dir, hopefully not a conflict\n", path);
skip_conflict = 1;
continue;
}
}
if(!skip_conflict) {
_alpm_log(PM_LOG_DEBUG, "checking possible conflict: %s\n", path);
_alpm_log(PM_LOG_DEBUG, "checking possible conflict: %s\n", path);
/* Make sure the possible conflict is not a symlink that points to a
* path in the old package. This is kind of dirty with inode usage */
/* TODO this seems ripe for a cleanup */
if(dbpkg) {
struct stat pkgbuf;
char str[PATH_MAX+1];
unsigned ok = 0;
for(k = dbpkg->files; k; k = k->next) {
snprintf(str, PATH_MAX, "%s%s", root, (char*)k->data);
if(!_alpm_lstat(str, &pkgbuf) && lsbuf.st_ino == pkgbuf.st_ino) {
ok = 1;
_alpm_log(PM_LOG_DEBUG, "conflict was a symlink: %s\n", path);
break;
}
}
if(ok == 1) {
continue;
}
int resolved_conflict = 0; /* have we acted on this conflict? */
/* Check remove list (will we remove the conflicting local file?) */
for(k = remove; k && !resolved_conflict; k = k->next) {
pmpkg_t *rempkg = k->data;
if(rempkg && alpm_list_find_str(alpm_pkg_get_files(rempkg), filestr)) {
_alpm_log(PM_LOG_DEBUG, "local file will be removed, not a conflict: %s\n", filestr);
resolved_conflict = 1;
}
}
/* Look at all the targets to see if file has changed hands */
int resolved_conflict = 0; /* have we acted on this conflict? */
for(k = targets; k; k = k->next) {
p2 = k->data;
if(!p2 || strcmp(p1->name, p2->name) == 0) {
continue;
}
pmpkg_t *localp2 = _alpm_db_get_pkgfromcache(db, p2->name);
/* Check if it used to exist in a package, but doesn't anymore */
alpm_list_t *pkgfiles, *localfiles; /* added for readability */
pkgfiles = alpm_pkg_get_files(p2);
localfiles = alpm_pkg_get_files(localp2);
if(localp2 && !alpm_list_find_str(pkgfiles, filestr)
&& alpm_list_find_str(localfiles, filestr)) {
/* skip removal of file, but not add. this will prevent a second
* package from removing the file when it was already installed
* by its new owner (whether the file is in backup array or not */
trans->skip_remove = alpm_list_add(trans->skip_remove, strdup(path));
_alpm_log(PM_LOG_DEBUG, "file changed packages, adding to remove skiplist: %s\n", filestr);
resolved_conflict = 1;
break;
}
/* Look at all the targets to see if file has changed hands */
for(k = upgrade; k && !resolved_conflict; k = k->next) {
p2 = k->data;
if(!p2 || strcmp(p1->name, p2->name) == 0) {
continue;
}
if(!resolved_conflict) {
_alpm_log(PM_LOG_DEBUG, "file found in conflict: %s\n", path);
conflicts = add_fileconflict(conflicts, PM_FILECONFLICT_FILESYSTEM,
path, p1->name, NULL);
pmpkg_t *localp2 = _alpm_db_get_pkgfromcache(db, p2->name);
/* localp2->files will be removed (target conflicts are handled by CHECK 1) */
if(localp2 && alpm_list_find_str(alpm_pkg_get_files(localp2), filestr)) {
/* skip removal of file, but not add. this will prevent a second
* package from removing the file when it was already installed
* by its new owner (whether the file is in backup array or not */
trans->skip_remove = alpm_list_add(trans->skip_remove, strdup(path));
_alpm_log(PM_LOG_DEBUG, "file changed packages, adding to remove skiplist: %s\n", filestr);
resolved_conflict = 1;
}
}
/* check if all files of the dir belong to the installed pkg */
if(!resolved_conflict && S_ISDIR(lsbuf.st_mode) && dbpkg) {
char *dir = malloc(strlen(filestr) + 2);
sprintf(dir, "%s/", filestr);
if(alpm_list_find_str(alpm_pkg_get_files(dbpkg),dir)) {
_alpm_log(PM_LOG_DEBUG, "check if all files in %s belongs to %s\n",
dir, dbpkg->name);
resolved_conflict = dir_belongsto_pkg(filestr, dbpkg);
}
free(dir);
}
if(!resolved_conflict && dbpkg) {
char *rpath = calloc(PATH_MAX+1, sizeof(char));
if(!realpath(path, rpath)) {
FREE(rpath);
continue;
}
char *filestr = rpath + strlen(handle->root);
if(alpm_list_find_str(alpm_pkg_get_files(dbpkg),filestr)) {
resolved_conflict = 1;
}
free(rpath);
}
if(!resolved_conflict) {
_alpm_log(PM_LOG_DEBUG, "file found in conflict: %s\n", path);
conflicts = add_fileconflict(conflicts, PM_FILECONFLICT_FILESYSTEM,
path, p1->name, NULL);
}
}
FREELIST(tmpfiles);
}

View File

@@ -1,7 +1,8 @@
/*
* conflict.h
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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
* it under the terms of the GNU General Public License as published by
@@ -23,26 +24,28 @@
#include "db.h"
#include "package.h"
#define CONFLICT_FILE_LEN 512
struct __pmconflict_t {
char package1[PKG_NAME_LEN];
char package2[PKG_NAME_LEN];
char *package1;
char *package2;
};
struct __pmfileconflict_t {
char target[PKG_NAME_LEN];
char *target;
pmfileconflicttype_t type;
char file[CONFLICT_FILE_LEN];
char ctarget[PKG_NAME_LEN];
char *file;
char *ctarget;
};
pmconflict_t *_alpm_conflict_new(const char *package1, const char *package2);
pmconflict_t *_alpm_conflict_dup(const pmconflict_t *conflict);
void _alpm_conflict_free(pmconflict_t *conflict);
int _alpm_conflict_isin(pmconflict_t *needle, alpm_list_t *haystack);
alpm_list_t *_alpm_innerconflicts(alpm_list_t *packages);
alpm_list_t *_alpm_outerconflicts(pmdb_t *db, alpm_list_t *packages);
alpm_list_t *_alpm_checkconflicts(pmdb_t *db, alpm_list_t *packages);
alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *root);
alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans,
alpm_list_t *upgrade, alpm_list_t *remove);
void _alpm_fileconflict_free(pmfileconflict_t *conflict);
#endif /* _ALPM_CONFLICT_H */

View File

@@ -1,7 +1,8 @@
/*
* db.c
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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>
* Copyright (c) 2006 by David Kimpe <dnaku@frugalware.org>
@@ -23,12 +24,10 @@
#include "config.h"
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <stdint.h> /* uintmax_t */
#include <sys/stat.h>
#include <dirent.h>
#include <regex.h>
@@ -39,8 +38,6 @@
#include "alpm_list.h"
#include "log.h"
#include "util.h"
#include "error.h"
#include "server.h"
#include "handle.h"
#include "cache.h"
#include "alpm.h"
@@ -89,9 +86,6 @@ static void _alpm_db_unregister(pmdb_t *db)
return;
}
_alpm_log(PM_LOG_DEBUG, "closing database '%s'\n", db->treename);
_alpm_db_close(db);
_alpm_log(PM_LOG_DEBUG, "unregistering database '%s'\n", db->treename);
_alpm_db_free(db);
}
@@ -173,6 +167,8 @@ int SYMEXPORT alpm_db_setserver(pmdb_t *db, const char *url)
{
alpm_list_t *i;
int found = 0;
char *newurl;
int len = 0;
ALPM_LOG_FUNC;
@@ -189,15 +185,18 @@ int SYMEXPORT alpm_db_setserver(pmdb_t *db, const char *url)
RET_ERR(PM_ERR_DB_NOT_FOUND, -1);
}
if(url && strlen(url)) {
pmserver_t *server;
if((server = _alpm_server_new(url)) == NULL) {
/* pm_errno is set by _alpm_server_new */
return(-1);
if(url) {
len = strlen(url);
}
if(len) {
newurl = strdup(url);
/* strip the trailing slash if one exists */
if(newurl[len - 1] == '/') {
newurl[len - 1] = '\0';
}
db->servers = alpm_list_add(db->servers, server);
_alpm_log(PM_LOG_DEBUG, "adding new server to database '%s': protocol '%s', server '%s', path '%s'\n",
db->treename, server->s_url->scheme, server->s_url->host, server->s_url->doc);
db->servers = alpm_list_add(db->servers, newurl);
_alpm_log(PM_LOG_DEBUG, "adding new server URL to database '%s': %s\n",
db->treename, newurl);
} else {
FREELIST(db->servers);
_alpm_log(PM_LOG_DEBUG, "serverlist flushed for '%s'\n", db->treename);
@@ -206,98 +205,6 @@ int SYMEXPORT alpm_db_setserver(pmdb_t *db, const char *url)
return(0);
}
/** Update a package database
* @param force if true, then forces the update, otherwise update only in case
* the database isn't up to date
* @param db pointer to the package database to update
* @return 0 on success, > 0 on error (pm_errno is set accordingly), < 0 if up
* to date
*/
int SYMEXPORT alpm_db_update(int force, pmdb_t *db)
{
alpm_list_t *lp;
char path[PATH_MAX];
alpm_list_t *files = NULL;
time_t newmtime = 0, lastupdate = 0;
const char *dbpath;
int ret;
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1));
ASSERT(db != NULL && db != handle->db_local, RET_ERR(PM_ERR_WRONG_ARGS, -1));
/* Verify we are in a transaction. This is done _mainly_ because we need a DB
* lock - if we update without a db lock, we may kludge some other pacman
* process that _has_ a lock.
*/
ASSERT(handle->trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1));
ASSERT(handle->trans->state == STATE_INITIALIZED, RET_ERR(PM_ERR_TRANS_NOT_INITIALIZED, -1));
ASSERT(handle->trans->type == PM_TRANS_TYPE_SYNC, RET_ERR(PM_ERR_TRANS_TYPE, -1));
if(!alpm_list_find_ptr(handle->dbs_sync, db)) {
RET_ERR(PM_ERR_DB_NOT_FOUND, -1);
}
if(!force) {
/* get the lastupdate time */
lastupdate = _alpm_db_getlastupdate(db);
if(lastupdate == 0) {
_alpm_log(PM_LOG_DEBUG, "failed to get lastupdate time for %s\n",
db->treename);
}
}
/* build a one-element list */
snprintf(path, PATH_MAX, "%s" DBEXT, db->treename);
files = alpm_list_add(files, strdup(path));
dbpath = alpm_option_get_dbpath();
ret = _alpm_downloadfiles_forreal(db->servers, dbpath, files, lastupdate,
&newmtime, NULL, 0);
FREELIST(files);
if(ret == 1) {
/* mtimes match, do nothing */
pm_errno = 0;
return(1);
} else if(ret == -1) {
/* we use downloadLastErrString and downloadLastErrCode here, error returns from
* libdownload */
_alpm_log(PM_LOG_DEBUG, "failed to sync db: %s [%d]\n",
downloadLastErrString, downloadLastErrCode);
RET_ERR(PM_ERR_DB_SYNC, -1);
} else {
if(newmtime != 0) {
_alpm_log(PM_LOG_DEBUG, "sync: new mtime for %s: %ju\n",
db->treename, (uintmax_t)newmtime);
_alpm_db_setlastupdate(db, newmtime);
}
snprintf(path, PATH_MAX, "%s%s" DBEXT, dbpath, db->treename);
/* remove the old dir */
_alpm_log(PM_LOG_DEBUG, "flushing database %s\n", db->path);
for(lp = _alpm_db_get_pkgcache(db); lp; lp = lp->next) {
pmpkg_t *pkg = lp->data;
if(pkg && _alpm_db_remove(db, pkg) == -1) {
_alpm_log(PM_LOG_ERROR, _("could not remove database entry %s%s\n"), db->treename,
alpm_pkg_get_name(pkg));
RET_ERR(PM_ERR_DB_REMOVE, -1);
}
}
/* Cache needs to be rebuild */
_alpm_db_free_pkgcache(db);
/* uncompress the sync database */
if(_alpm_db_install(db, path) == -1) {
return -1;
}
}
return(0);
}
/** Get the name of a package database
* @param db pointer to the package database
* @return the name of the package database, NULL on error
@@ -319,19 +226,18 @@ const char SYMEXPORT *alpm_db_get_name(const pmdb_t *db)
*/
const char SYMEXPORT *alpm_db_get_url(const pmdb_t *db)
{
char path[PATH_MAX];
pmserver_t *s;
char *url;
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(db != NULL, return(NULL));
ASSERT(db->servers != NULL, return(NULL));
s = (pmserver_t*)db->servers->data;
url = (char*)db->servers->data;
snprintf(path, PATH_MAX, "%s://%s%s", s->s_url->scheme, s->s_url->host, s->s_url->doc);
return strdup(path);
return(url);
}
@@ -356,7 +262,7 @@ pmpkg_t SYMEXPORT *alpm_db_get_pkg(pmdb_t *db, const char *name)
* @param db pointer to the package database to get the package from
* @return the list of packages on success, NULL on error
*/
alpm_list_t SYMEXPORT *alpm_db_getpkgcache(pmdb_t *db)
alpm_list_t SYMEXPORT *alpm_db_get_pkgcache(pmdb_t *db)
{
ALPM_LOG_FUNC;
@@ -367,23 +273,6 @@ alpm_list_t SYMEXPORT *alpm_db_getpkgcache(pmdb_t *db)
return(_alpm_db_get_pkgcache(db));
}
/** Get the list of packages that a package provides
* @param db pointer to the package database to get the package from
* @param name name of the package
* @return the list of packages on success, NULL on error
*/
alpm_list_t SYMEXPORT *alpm_db_whatprovides(pmdb_t *db, const char *name)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(db != NULL, return(NULL));
ASSERT(name != NULL && strlen(name) != 0, return(NULL));
return(_alpm_db_whatprovides(db, name));
}
/** Get a group entry from a package database
* @param db pointer to the package database to get the group from
* @param name of the group
@@ -405,7 +294,7 @@ pmgrp_t SYMEXPORT *alpm_db_readgrp(pmdb_t *db, const char *name)
* @param db pointer to the package database to get the group from
* @return the list of groups on success, NULL on error
*/
alpm_list_t SYMEXPORT *alpm_db_getgrpcache(pmdb_t *db)
alpm_list_t SYMEXPORT *alpm_db_get_grpcache(pmdb_t *db)
{
ALPM_LOG_FUNC;
@@ -445,41 +334,39 @@ pmdb_t *_alpm_db_new(const char *dbpath, const char *treename)
CALLOC(db->path, 1, pathsize, RET_ERR(PM_ERR_MEMORY, NULL));
sprintf(db->path, "%s%s/", dbpath, treename);
strncpy(db->treename, treename, PATH_MAX);
STRDUP(db->treename, treename, RET_ERR(PM_ERR_MEMORY, NULL));
return(db);
}
void _alpm_db_free(pmdb_t *db)
{
alpm_list_t *tmp;
ALPM_LOG_FUNC;
/* cleanup pkgcache */
_alpm_db_free_pkgcache(db);
/* cleanup server list */
for(tmp = db->servers; tmp; tmp = alpm_list_next(tmp)) {
_alpm_server_free(tmp->data);
}
alpm_list_free(db->servers);
FREELIST(db->servers);
FREE(db->path);
FREE(db->treename);
FREE(db);
return;
}
int _alpm_db_cmp(const void *db1, const void *db2)
int _alpm_db_cmp(const void *d1, const void *d2)
{
ALPM_LOG_FUNC;
return(strcmp(((pmdb_t *)db1)->treename, ((pmdb_t *)db2)->treename));
pmdb_t *db1 = (pmdb_t *)d1;
pmdb_t *db2 = (pmdb_t *)d2;
return(strcmp(db1->treename, db2->treename));
}
alpm_list_t *_alpm_db_search(pmdb_t *db, const alpm_list_t *needles)
{
const alpm_list_t *i, *j, *k;
alpm_list_t *ret = NULL;
/* copy the pkgcache- we will free the list var after each needle */
alpm_list_t *list = alpm_list_copy(_alpm_db_get_pkgcache(db));
ALPM_LOG_FUNC;
@@ -490,6 +377,7 @@ alpm_list_t *_alpm_db_search(pmdb_t *db, const alpm_list_t *needles)
if(i->data == NULL) {
continue;
}
ret = NULL;
targ = i->data;
_alpm_log(PM_LOG_DEBUG, "searching for target '%s'\n", targ);
@@ -497,26 +385,24 @@ alpm_list_t *_alpm_db_search(pmdb_t *db, const alpm_list_t *needles)
RET_ERR(PM_ERR_INVALID_REGEX, NULL);
}
for(j = _alpm_db_get_pkgcache(db); j; j = j->next) {
for(j = list; j; j = j->next) {
pmpkg_t *pkg = j->data;
const char *matched = NULL;
const char *name = alpm_pkg_get_name(pkg);
const char *desc = alpm_pkg_get_desc(pkg);
/* check name */
if (regexec(&reg, alpm_pkg_get_name(pkg), 0, 0, 0) == 0) {
matched = alpm_pkg_get_name(pkg);
}
/* check plain text name */
else if (strstr(alpm_pkg_get_name(pkg), targ)) {
matched = alpm_pkg_get_name(pkg);
/* check name as regex AND as plain text */
if(name && (regexec(&reg, name, 0, 0, 0) == 0 || strstr(name, targ))) {
matched = name;
}
/* check desc */
else if (regexec(&reg, alpm_pkg_get_desc(pkg), 0, 0, 0) == 0) {
matched = alpm_pkg_get_desc(pkg);
else if (desc && regexec(&reg, desc, 0, 0, 0) == 0) {
matched = desc;
}
/* check provides */
/* TODO: should we be doing this, and should we print something
* differently when we do match it since it isn't currently printed? */
else {
if(!matched) {
/* check provides */
for(k = alpm_pkg_get_provides(pkg); k; k = k->next) {
if (regexec(&reg, k->data, 0, 0, 0) == 0) {
matched = k->data;
@@ -524,6 +410,15 @@ alpm_list_t *_alpm_db_search(pmdb_t *db, const alpm_list_t *needles)
}
}
}
if(!matched) {
/* check groups */
for(k = alpm_pkg_get_groups(pkg); k; k = k->next) {
if (regexec(&reg, k->data, 0, 0, 0) == 0) {
matched = k->data;
break;
}
}
}
if(matched != NULL) {
_alpm_log(PM_LOG_DEBUG, " search target '%s' matched '%s'\n",
@@ -532,6 +427,10 @@ alpm_list_t *_alpm_db_search(pmdb_t *db, const alpm_list_t *needles)
}
}
/* Free the existing search list, and use the returned list for the
* next needle. This allows for AND-based package searching. */
alpm_list_free(list);
list = ret;
regfree(&reg);
}
@@ -540,10 +439,8 @@ alpm_list_t *_alpm_db_search(pmdb_t *db, const alpm_list_t *needles)
pmdb_t *_alpm_db_register_local(void)
{
struct stat buf;
pmdb_t *db;
const char *dbpath;
char path[PATH_MAX];
ALPM_LOG_FUNC;
@@ -554,40 +451,23 @@ pmdb_t *_alpm_db_register_local(void)
_alpm_log(PM_LOG_DEBUG, "registering local database\n");
/* make sure the database directory exists */
dbpath = alpm_option_get_dbpath();
if(!dbpath) {
_alpm_log(PM_LOG_ERROR, _("database path is undefined\n"));
RET_ERR(PM_ERR_DB_OPEN, NULL);
}
snprintf(path, PATH_MAX, "%slocal", dbpath);
/* TODO this is rediculous, we try to do this even if we can't */
if(stat(path, &buf) != 0 || !S_ISDIR(buf.st_mode)) {
_alpm_log(PM_LOG_DEBUG, "database dir '%s' does not exist, creating it\n",
path);
if(_alpm_makepath(path) != 0) {
RET_ERR(PM_ERR_SYSTEM, NULL);
}
}
db = _alpm_db_new(dbpath, "local");
if(db == NULL) {
RET_ERR(PM_ERR_DB_CREATE, NULL);
}
_alpm_log(PM_LOG_DEBUG, "opening database '%s'\n", db->treename);
if(_alpm_db_open(db) == -1) {
_alpm_db_free(db);
RET_ERR(PM_ERR_DB_OPEN, NULL);
}
handle->db_local = db;
return(db);
}
pmdb_t *_alpm_db_register_sync(const char *treename)
{
struct stat buf;
pmdb_t *db;
const char *dbpath;
char path[PATH_MAX];
@@ -605,25 +485,12 @@ pmdb_t *_alpm_db_register_sync(const char *treename)
_alpm_log(PM_LOG_DEBUG, "registering sync database '%s'\n", treename);
/* make sure the database directory exists */
dbpath = alpm_option_get_dbpath();
if(!dbpath) {
_alpm_log(PM_LOG_ERROR, _("database path is undefined\n"));
RET_ERR(PM_ERR_DB_OPEN, NULL);
}
/* all sync DBs now reside in the sync/ subdir of the dbpath */
snprintf(path, PATH_MAX, "%ssync/%s", dbpath, treename);
/* TODO this is rediculous, we try to do this even if we can't */
if(stat(path, &buf) != 0 || !S_ISDIR(buf.st_mode)) {
_alpm_log(PM_LOG_DEBUG, "database dir '%s' does not exist, creating it\n",
path);
if(_alpm_makepath(path) != 0) {
RET_ERR(PM_ERR_SYSTEM, NULL);
}
}
/* Ensure the db gets the real path. */
path[0] = '\0';
snprintf(path, PATH_MAX, "%ssync/", dbpath);
db = _alpm_db_new(path, treename);
@@ -631,57 +498,8 @@ pmdb_t *_alpm_db_register_sync(const char *treename)
RET_ERR(PM_ERR_DB_CREATE, NULL);
}
_alpm_log(PM_LOG_DEBUG, "opening database '%s'\n", db->treename);
if(_alpm_db_open(db) == -1) {
_alpm_db_free(db);
RET_ERR(PM_ERR_DB_OPEN, NULL);
}
handle->dbs_sync = alpm_list_add(handle->dbs_sync, db);
return(db);
}
/* helper function for alpm_list_find and _alpm_db_whatprovides
*
* @return "provision.name" == needle (as string)
*/
int _alpm_prov_cmp(const void *provision, const void *needle)
{
char *tmpptr;
char *provname = strdup(provision);
int retval = 0;
tmpptr = strchr(provname, '=');
if(tmpptr != NULL) { /* provision-version */
*tmpptr='\0';
}
retval = strcmp(provname, needle);
free(provname);
return(retval);
}
/* return a alpm_list_t of packages in "db" that provide "package"
*/
alpm_list_t *_alpm_db_whatprovides(pmdb_t *db, const char *package)
{
alpm_list_t *pkgs = NULL;
alpm_list_t *lp;
ALPM_LOG_FUNC;
if(db == NULL || package == NULL || strlen(package) == 0) {
return(NULL);
}
for(lp = _alpm_db_get_pkgcache(db); lp; lp = lp->next) {
pmpkg_t *info = lp->data;
if(alpm_list_find(alpm_pkg_get_provides(info), (const void *)package, _alpm_prov_cmp)) {
pkgs = alpm_list_add(pkgs, info);
}
}
return(pkgs);
}
/* vim: set ts=2 sw=2 noet: */

View File

@@ -1,7 +1,8 @@
/*
* db.h
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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>
*
@@ -40,9 +41,10 @@ typedef enum _pmdbinfrq_t {
/* Database */
struct __pmdb_t {
char *path;
char treename[PATH_MAX];
void *handle;
char *treename;
unsigned short pkgcache_loaded;
alpm_list_t *pkgcache;
unsigned short grpcache_loaded;
alpm_list_t *grpcache;
alpm_list_t *servers;
};
@@ -50,26 +52,17 @@ struct __pmdb_t {
/* db.c, database general calls */
pmdb_t *_alpm_db_new(const char *dbpath, const char *treename);
void _alpm_db_free(pmdb_t *db);
int _alpm_db_cmp(const void *db1, const void *db2);
int _alpm_db_cmp(const void *d1, const void *d2);
alpm_list_t *_alpm_db_search(pmdb_t *db, const alpm_list_t *needles);
pmdb_t *_alpm_db_register_local(void);
pmdb_t *_alpm_db_register_sync(const char *treename);
/* Provision */
int _alpm_prov_cmp(const void *provision, const void *needle);
alpm_list_t *_alpm_db_whatprovides(pmdb_t *db, const char *package);
/* be.c, backend specific calls */
int _alpm_db_install(pmdb_t *db, const char *dbfile);
int _alpm_db_open(pmdb_t *db);
void _alpm_db_close(pmdb_t *db);
void _alpm_db_rewind(pmdb_t *db);
pmpkg_t *_alpm_db_scan(pmdb_t *db, const char *target);
int _alpm_db_populate(pmdb_t *db);
int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq);
int _alpm_db_prepare(pmdb_t *db, pmpkg_t *info);
int _alpm_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq);
int _alpm_db_remove(pmdb_t *db, pmpkg_t *info);
time_t _alpm_db_getlastupdate(const pmdb_t *db);
int _alpm_db_setlastupdate(const pmdb_t *db, time_t time);
#endif /* _ALPM_DB_H */

View File

@@ -1,7 +1,8 @@
/*
* delta.c
*
* Copyright (c) 2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2007-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,14 +22,17 @@
#include <stdlib.h>
#include <string.h>
#include <stdint.h> /* intmax_t */
#include <limits.h>
#include <sys/types.h>
#include <regex.h>
/* libalpm */
#include "delta.h"
#include "error.h"
#include "alpm_list.h"
#include "util.h"
#include "log.h"
#include "alpm_list.h"
#include "alpm.h"
#include "graph.h"
/** \addtogroup alpm_deltas Delta Functions
* @brief Functions to manipulate libalpm deltas
@@ -37,230 +41,259 @@
const char SYMEXPORT *alpm_delta_get_from(pmdelta_t *delta)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(delta != NULL, return(NULL));
return(delta->from);
}
const char SYMEXPORT *alpm_delta_get_to(pmdelta_t *delta)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(delta != NULL, return(NULL));
return(delta->to);
}
unsigned long SYMEXPORT alpm_delta_get_size(pmdelta_t *delta)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(delta != NULL, return(-1));
return(delta->size);
}
const char SYMEXPORT *alpm_delta_get_filename(pmdelta_t *delta)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(delta != NULL, return(NULL));
return(delta->filename);
return(delta->delta);
}
const char SYMEXPORT *alpm_delta_get_md5sum(pmdelta_t *delta)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(delta != NULL, return(NULL));
return(delta->delta_md5);
}
return(delta->md5sum);
off_t SYMEXPORT alpm_delta_get_size(pmdelta_t *delta)
{
ASSERT(delta != NULL, return(-1));
return(delta->delta_size);
}
/** @} */
/** Calculates the combined size of a list of delta files.
*
* @param deltas the list of pmdelta_t * objects
*
* @return the combined size
*/
unsigned long _alpm_delta_path_size(alpm_list_t *deltas)
static alpm_list_t *delta_graph_init(alpm_list_t *deltas)
{
unsigned long sum = 0;
alpm_list_t *dlts = deltas;
alpm_list_t *i, *j;
alpm_list_t *vertices = NULL;
/* create the vertices */
for(i = deltas; i; i = i->next) {
char *fpath, *md5sum;
pmgraph_t *v = _alpm_graph_new();
pmdelta_t *vdelta = i->data;
vdelta->download_size = vdelta->delta_size;
v->weight = LONG_MAX;
while(dlts) {
pmdelta_t *d = (pmdelta_t *)alpm_list_getdata(dlts);
sum += d->size;
/* determine whether the delta file already exists */
fpath = _alpm_filecache_find(vdelta->delta);
md5sum = alpm_compute_md5sum(fpath);
if(fpath && md5sum && strcmp(md5sum, vdelta->delta_md5) == 0) {
vdelta->download_size = 0;
}
FREE(fpath);
FREE(md5sum);
dlts = alpm_list_next(dlts);
/* determine whether a base 'from' file exists */
fpath = _alpm_filecache_find(vdelta->from);
if(fpath) {
v->weight = vdelta->download_size;
}
FREE(fpath);
v->data = vdelta;
vertices = alpm_list_add(vertices, v);
}
return(sum);
/* compute the edges */
for(i = vertices; i; i = i->next) {
pmgraph_t *v_i = i->data;
pmdelta_t *d_i = v_i->data;
/* loop a second time so we make all possible comparisons */
for(j = vertices; j; j = j->next) {
pmgraph_t *v_j = j->data;
pmdelta_t *d_j = v_j->data;
/* We want to create a delta tree like the following:
* 1_to_2
* |
* 1_to_3 2_to_3
* \ /
* 3_to_4
* If J 'from' is equal to I 'to', then J is a child of I.
* */
if(strcmp(d_j->from, d_i->to) == 0) {
v_i->children = alpm_list_add(v_i->children, v_j);
}
}
v_i->childptr = v_i->children;
}
return(vertices);
}
/** Calculates the combined size of a list of delta files that are not
* in the cache.
*
* @param deltas the list of pmdelta_t * objects
*
* @return the combined size
*/
unsigned long _alpm_delta_path_size_uncached(alpm_list_t *deltas)
{
unsigned long sum = 0;
alpm_list_t *dlts = deltas;
static off_t delta_vert(alpm_list_t *vertices,
const char *to, alpm_list_t **path) {
alpm_list_t *i;
pmgraph_t *v;
while(1) {
v = NULL;
/* find the smallest vertice not visited yet */
for(i = vertices; i; i = i->next) {
pmgraph_t *v_i = i->data;
while(dlts) {
pmdelta_t *d = (pmdelta_t *)alpm_list_getdata(dlts);
char *fname = _alpm_filecache_find(d->filename);
if(v_i->state == -1) {
continue;
}
if(!fname) {
sum += d->size;
if(v == NULL || v_i->weight < v->weight) {
v = v_i;
}
}
if(v == NULL || v->weight == LONG_MAX) {
break;
}
FREE(fname);
v->state = -1;
dlts = alpm_list_next(dlts);
}
v->childptr = v->children;
while(v->childptr) {
pmgraph_t *v_c = v->childptr->data;
pmdelta_t *d_c = v_c->data;
if(v_c->weight > v->weight + d_c->download_size) {
v_c->weight = v->weight + d_c->download_size;
v_c->parent = v;
}
return(sum);
}
v->childptr = (v->childptr)->next;
/** Calculates the shortest path from one version to another.
*
* The shortest path is defined as the path with the smallest combined
* size, not the length of the path.
*
* The algorithm is based on Dijkstra's shortest path algorithm.
*
* @param deltas the list of pmdelta_t * objects that a package has
* @param from the version to start from
* @param to the version to end at
* @param path the current path
*
* @return the list of pmdelta_t * objects that has the smallest size.
* NULL (the empty list) is returned if there is no path between the
* versions.
*/
static alpm_list_t *shortest_delta_path(alpm_list_t *deltas,
const char *from, const char *to, alpm_list_t *path)
{
alpm_list_t *d;
alpm_list_t *shortest = NULL;
/* Found the 'to' version, this is a good path so return it. */
if(strcmp(from, to) == 0) {
return(path);
}
for(d = deltas; d; d = alpm_list_next(d)) {
pmdelta_t *v = alpm_list_getdata(d);
/* If this vertex has already been visited in the path, go to the
* next vertex. */
if(alpm_list_find_ptr(path, v)) {
continue;
}
}
/* Once we find a vertex that starts at the 'from' version,
* recursively find the shortest path using the 'to' version of this
* current vertex as the 'from' version in the function call. */
if(strcmp(v->from, from) == 0) {
alpm_list_t *newpath = alpm_list_copy(path);
newpath = alpm_list_add(newpath, v);
newpath = shortest_delta_path(deltas, v->to, to, newpath);
v = NULL;
off_t bestsize = 0;
if(newpath != NULL) {
/* The path returned works, now use it unless there is already a
* shorter path found. */
if(shortest == NULL) {
shortest = newpath;
} else if(_alpm_delta_path_size(shortest) > _alpm_delta_path_size(newpath)) {
alpm_list_free(shortest);
shortest = newpath;
} else {
alpm_list_free(newpath);
}
for(i = vertices; i; i = i->next) {
pmgraph_t *v_i = i->data;
pmdelta_t *d_i = v_i->data;
if(strcmp(d_i->to, to) == 0) {
if(v == NULL || v_i->weight < v->weight) {
v = v_i;
bestsize = v->weight;
}
}
}
alpm_list_free(path);
alpm_list_t *rpath = NULL;
while(v != NULL) {
pmdelta_t *vdelta = v->data;
rpath = alpm_list_add(rpath, vdelta);
v = v->parent;
}
*path = alpm_list_reverse(rpath);
alpm_list_free(rpath);
return(shortest);
return(bestsize);
}
/** Calculates the shortest path from one version to another.
*
* The shortest path is defined as the path with the smallest combined
* size, not the length of the path.
*
* @param deltas the list of pmdelta_t * objects that a package has
* @param from the version to start from
* @param to the version to end at
*
* @return the list of pmdelta_t * objects that has the smallest size.
* NULL (the empty list) is returned if there is no path between the
* versions.
* @param deltas the list of pmdelta_t * objects that a file has
* @param to the file to start the search at
* @param path the pointer to a list location where pmdelta_t * objects that
* have the smallest size are placed. NULL is set if there is no path
* possible with the files available.
* @return the size of the path stored, or LONG_MAX if path is unfindable
*/
alpm_list_t *_alpm_shortest_delta_path(alpm_list_t *deltas, const char *from,
const char *to)
off_t _alpm_shortest_delta_path(alpm_list_t *deltas,
const char *to, alpm_list_t **path)
{
alpm_list_t *path = NULL;
alpm_list_t *bestpath = NULL;
alpm_list_t *vertices;
off_t bestsize = LONG_MAX;
path = shortest_delta_path(deltas, from, to, path);
ALPM_LOG_FUNC;
return(path);
if(deltas == NULL) {
*path = NULL;
return(bestsize);
}
_alpm_log(PM_LOG_DEBUG, "started delta shortest-path search for '%s'\n", to);
vertices = delta_graph_init(deltas);
bestsize = delta_vert(vertices, to, &bestpath);
_alpm_log(PM_LOG_DEBUG, "delta shortest-path search complete : '%jd'\n", (intmax_t)bestsize);
alpm_list_free_inner(vertices, _alpm_graph_free);
alpm_list_free(vertices);
*path = bestpath;
return(bestsize);
}
/** Parses the string representation of a pmdelta_t object.
*
* This function assumes that the string is in the correct format.
*
* This format is as follows:
* $deltafile $deltamd5 $deltasize $oldfile $newfile
* @param line the string to parse
*
* @return A pointer to the new pmdelta_t object
*/
/* TODO this does not really belong here, but in a parsing lib */
pmdelta_t *_alpm_delta_parse(char *line)
{
pmdelta_t *delta;
char *tmp = line, *tmp2;
regex_t reg;
regcomp(&reg,
"^[^[:space:]]* [[:xdigit:]]{32} [[:digit:]]*"
" [^[:space:]]* [^[:space:]]*$",
REG_EXTENDED | REG_NOSUB | REG_NEWLINE);
if(regexec(&reg, line, 0, 0, 0) != 0) {
/* delta line is invalid, return NULL */
regfree(&reg);
return(NULL);
}
regfree(&reg);
CALLOC(delta, 1, sizeof(pmdelta_t), RET_ERR(PM_ERR_MEMORY, NULL));
tmp2 = tmp;
tmp = strchr(tmp, ' ');
*(tmp++) = '\0';
strncpy(delta->from, tmp2, DLT_VERSION_LEN);
STRDUP(delta->delta, tmp2, RET_ERR(PM_ERR_MEMORY, NULL));
tmp2 = tmp;
tmp = strchr(tmp, ' ');
*(tmp++) = '\0';
strncpy(delta->to, tmp2, DLT_VERSION_LEN);
STRDUP(delta->delta_md5, tmp2, RET_ERR(PM_ERR_MEMORY, NULL));
tmp2 = tmp;
tmp = strchr(tmp, ' ');
*(tmp++) = '\0';
delta->size = atol(tmp2);
delta->delta_size = atol(tmp2);
tmp2 = tmp;
tmp = strchr(tmp, ' ');
*(tmp++) = '\0';
strncpy(delta->filename, tmp2, DLT_FILENAME_LEN);
STRDUP(delta->from, tmp2, RET_ERR(PM_ERR_MEMORY, NULL));
strncpy(delta->md5sum, tmp, DLT_MD5SUM_LEN);
tmp2 = tmp;
STRDUP(delta->to, tmp2, RET_ERR(PM_ERR_MEMORY, NULL));
_alpm_log(PM_LOG_DEBUG, "delta : %s %s '%lld'\n", delta->from, delta->to, (long long)delta->delta_size);
return(delta);
}
void _alpm_delta_free(pmdelta_t *delta)
{
FREE(delta->from);
FREE(delta->to);
FREE(delta->delta);
FREE(delta->delta_md5);
FREE(delta);
}
/* vim: set ts=2 sw=2 noet: */

View File

@@ -1,7 +1,8 @@
/*
* delta.h
*
* Copyright (c) 2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2007-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -19,24 +20,29 @@
#ifndef _ALPM_DELTA_H
#define _ALPM_DELTA_H
#include <sys/types.h> /* off_t */
#include "alpm.h"
#define DLT_FILENAME_LEN 512
#define DLT_VERSION_LEN 64
#define DLT_MD5SUM_LEN 33
struct __pmdelta_t {
char from[DLT_VERSION_LEN];
char to[DLT_VERSION_LEN];
unsigned long size;
char filename[DLT_FILENAME_LEN];
char md5sum[DLT_MD5SUM_LEN];
/** filename of the delta patch */
char *delta;
/** md5sum of the delta file */
char *delta_md5;
/** filesize of the delta file */
off_t delta_size;
/** filename of the 'before' file */
char *from;
/** filename of the 'after' file */
char *to;
/** download filesize of the delta file */
off_t download_size;
};
unsigned long _alpm_delta_path_size(alpm_list_t *deltas);
unsigned long _alpm_delta_path_size_uncached(alpm_list_t *deltas);
pmdelta_t *_alpm_delta_parse(char *line);
alpm_list_t *_alpm_shortest_delta_path(alpm_list_t *deltas, const char *from, const char *to);
void _alpm_delta_free(pmdelta_t *delta);
off_t _alpm_shortest_delta_path(alpm_list_t *deltas,
const char *to, alpm_list_t **path);
#endif /* _ALPM_DELTA_H */

View File

@@ -1,7 +1,8 @@
/*
* deps.c
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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>
*
@@ -30,37 +31,21 @@
#include "alpm_list.h"
#include "util.h"
#include "log.h"
#include "error.h"
#include "graph.h"
#include "package.h"
#include "db.h"
#include "cache.h"
#include "handle.h"
static pmgraph_t *_alpm_graph_new(void)
void _alpm_dep_free(pmdepend_t *dep)
{
pmgraph_t *graph = NULL;
MALLOC(graph, sizeof(pmgraph_t), RET_ERR(PM_ERR_MEMORY, NULL));
if(graph) {
graph->state = 0;
graph->data = NULL;
graph->parent = NULL;
graph->children = NULL;
graph->childptr = NULL;
}
return(graph);
FREE(dep->name);
FREE(dep->version);
FREE(dep);
}
static void _alpm_graph_free(void *data)
{
pmgraph_t *graph = data;
alpm_list_free(graph->children);
free(graph);
}
pmdepmissing_t *_alpm_depmiss_new(const char *target, pmdepmod_t depmod,
const char *depname, const char *depversion)
pmdepmissing_t *_alpm_depmiss_new(const char *target, pmdepend_t *dep,
const char *causingpkg)
{
pmdepmissing_t *miss;
@@ -68,26 +53,29 @@ pmdepmissing_t *_alpm_depmiss_new(const char *target, pmdepmod_t depmod,
MALLOC(miss, sizeof(pmdepmissing_t), RET_ERR(PM_ERR_MEMORY, NULL));
strncpy(miss->target, target, PKG_NAME_LEN);
miss->depend.mod = depmod;
strncpy(miss->depend.name, depname, PKG_NAME_LEN);
if(depversion) {
strncpy(miss->depend.version, depversion, PKG_VERSION_LEN);
} else {
miss->depend.version[0] = 0;
}
STRDUP(miss->target, target, RET_ERR(PM_ERR_MEMORY, NULL));
miss->depend = _alpm_dep_dup(dep);
STRDUP(miss->causingpkg, causingpkg, RET_ERR(PM_ERR_MEMORY, NULL));
return(miss);
}
void _alpm_depmiss_free(pmdepmissing_t *miss)
{
_alpm_dep_free(miss->depend);
FREE(miss->target);
FREE(miss->causingpkg);
FREE(miss);
}
/* Convert a list of pmpkg_t * to a graph structure,
* with a edge for each dependency.
* Returns a list of vertices (one vertex = one package)
* (used by alpm_sortbydeps)
*/
static alpm_list_t *_alpm_graph_init(alpm_list_t *targets)
static alpm_list_t *dep_graph_init(alpm_list_t *targets)
{
alpm_list_t *i, *j, *k;
alpm_list_t *i, *j;
alpm_list_t *vertices = NULL;
/* We create the vertices */
for(i = targets; i; i = i->next) {
@@ -104,12 +92,7 @@ static alpm_list_t *_alpm_graph_init(alpm_list_t *targets)
for(j = vertices; j; j = j->next) {
pmgraph_t *vertex_j = j->data;
pmpkg_t *p_j = vertex_j->data;
int child = 0;
for(k = alpm_pkg_get_depends(p_i); k && !child; k = k->next) {
pmdepend_t *depend = k->data;
child = alpm_depcmp(p_j, depend);
}
if(child) {
if(_alpm_dep_edge(p_i, p_j)) {
vertex_i->children =
alpm_list_add(vertex_i->children, vertex_j);
}
@@ -121,20 +104,19 @@ static alpm_list_t *_alpm_graph_init(alpm_list_t *targets)
/* Re-order a list of target packages with respect to their dependencies.
*
* Example (PM_TRANS_TYPE_ADD):
* Example (reverse == 0):
* A depends on C
* B depends on A
* Target order is A,B,C,D
*
* Should be re-ordered to C,A,B,D
*
* mode should be either PM_TRANS_TYPE_ADD or PM_TRANS_TYPE_REMOVE. This
* affects the dependency order sortbydeps() will use.
* if reverse is > 0, the dependency order will be reversed.
*
* This function returns the new alpm_list_t* target list.
*
*/
alpm_list_t *_alpm_sortbydeps(alpm_list_t *targets, pmtranstype_t mode)
alpm_list_t *_alpm_sortbydeps(alpm_list_t *targets, int reverse)
{
alpm_list_t *newtargs = NULL;
alpm_list_t *vertices = NULL;
@@ -149,7 +131,7 @@ alpm_list_t *_alpm_sortbydeps(alpm_list_t *targets, pmtranstype_t mode)
_alpm_log(PM_LOG_DEBUG, "started sorting dependencies\n");
vertices = _alpm_graph_init(targets);
vertices = dep_graph_init(targets);
vptr = vertices;
vertex = vertices->data;
@@ -169,7 +151,7 @@ alpm_list_t *_alpm_sortbydeps(alpm_list_t *targets, pmtranstype_t mode)
pmpkg_t *vertexpkg = vertex->data;
pmpkg_t *childpkg = nextchild->data;
_alpm_log(PM_LOG_WARNING, _("dependency cycle detected:\n"));
if(mode == PM_TRANS_TYPE_REMOVE) {
if(reverse) {
_alpm_log(PM_LOG_WARNING, _("%s will be removed after its %s dependency\n"), vertexpkg->name, childpkg->name);
} else {
_alpm_log(PM_LOG_WARNING, _("%s will be installed before its %s dependency\n"), vertexpkg->name, childpkg->name);
@@ -194,8 +176,8 @@ alpm_list_t *_alpm_sortbydeps(alpm_list_t *targets, pmtranstype_t mode)
_alpm_log(PM_LOG_DEBUG, "sorting dependencies finished\n");
if(mode == PM_TRANS_TYPE_REMOVE) {
/* we're removing packages, so reverse the order */
if(reverse) {
/* reverse the order */
alpm_list_t *tmptargs = alpm_list_reverse(newtargs);
/* free the old one */
alpm_list_free(newtargs);
@@ -208,21 +190,53 @@ alpm_list_t *_alpm_sortbydeps(alpm_list_t *targets, pmtranstype_t mode)
return(newtargs);
}
/* Little helper function for alpm_list_find */
static int satisfycmp(const void *pkg, const void *depend)
pmpkg_t *_alpm_find_dep_satisfier(alpm_list_t *pkgs, pmdepend_t *dep)
{
return(!alpm_depcmp((pmpkg_t*) pkg, (pmdepend_t*) depend));
alpm_list_t *i;
for(i = pkgs; i; i = alpm_list_next(i)) {
pmpkg_t *pkg = i->data;
if(alpm_depcmp(pkg, dep)) {
return(pkg);
}
}
return(NULL);
}
/** Checks dependencies and returns missing ones in a list.
* Dependencies can include versions with depmod operators.
* @param db pointer to the local package database
* @param targets an alpm_list_t* of dependencies strings to satisfy
* @return an alpm_list_t* of missing dependencies strings
*/
alpm_list_t SYMEXPORT *alpm_deptest(pmdb_t *db, alpm_list_t *targets)
{
alpm_list_t *i, *ret = NULL;
for(i = targets; i; i = alpm_list_next(i)) {
pmdepend_t *dep;
char *target;
target = alpm_list_getdata(i);
dep = _alpm_splitdep(target);
if(!_alpm_find_dep_satisfier(_alpm_db_get_pkgcache(db), dep)) {
ret = alpm_list_add(ret, target);
}
_alpm_dep_free(dep);
}
return(ret);
}
/** Checks dependencies and returns missing ones in a list.
* Dependencies can include versions with depmod operators.
* @param pkglist the list of local packages
* @param reversedeps handles the backward dependencies
* @param remove an alpm_list_t* of packages to be removed
* @param upgrade an alpm_list_t* of packages to be upgraded (remove-then-upgrade)
* @return an alpm_list_t* of pmpkg_t* of missing_t pointers.
*/
alpm_list_t SYMEXPORT *alpm_checkdeps(pmdb_t *db, int reversedeps,
alpm_list_t SYMEXPORT *alpm_checkdeps(alpm_list_t *pkglist, int reversedeps,
alpm_list_t *remove, alpm_list_t *upgrade)
{
alpm_list_t *i, *j;
@@ -232,12 +246,8 @@ alpm_list_t SYMEXPORT *alpm_checkdeps(pmdb_t *db, int reversedeps,
ALPM_LOG_FUNC;
if(db == NULL) {
return(NULL);
}
targets = alpm_list_join(alpm_list_copy(remove), alpm_list_copy(upgrade));
for(i = _alpm_db_get_pkgcache(db); i; i = i->next) {
for(i = pkglist; i; i = i->next) {
void *pkg = i->data;
if(alpm_list_find(targets, pkg, _alpm_pkg_cmp)) {
modified = alpm_list_add(modified, pkg);
@@ -257,15 +267,14 @@ alpm_list_t SYMEXPORT *alpm_checkdeps(pmdb_t *db, int reversedeps,
pmdepend_t *depend = j->data;
/* 1. we check the upgrade list */
/* 2. we check database for untouched satisfying packages */
if(!alpm_list_find(upgrade, depend, satisfycmp) &&
!alpm_list_find(dblist, depend, satisfycmp)) {
if(!_alpm_find_dep_satisfier(upgrade, depend) &&
!_alpm_find_dep_satisfier(dblist, depend)) {
/* Unsatisfied dependency in the upgrade list */
char *missdepstring = alpm_dep_get_string(depend);
char *missdepstring = alpm_dep_compute_string(depend);
_alpm_log(PM_LOG_DEBUG, "checkdeps: missing dependency '%s' for package '%s'\n",
missdepstring, alpm_pkg_get_name(tp));
free(missdepstring);
miss = _alpm_depmiss_new(alpm_pkg_get_name(tp), depend->mod,
depend->name, depend->version);
miss = _alpm_depmiss_new(alpm_pkg_get_name(tp), depend, NULL);
baddeps = alpm_list_add(baddeps, miss);
}
}
@@ -278,18 +287,18 @@ alpm_list_t SYMEXPORT *alpm_checkdeps(pmdb_t *db, int reversedeps,
pmpkg_t *lp = i->data;
for(j = alpm_pkg_get_depends(lp); j; j = j->next) {
pmdepend_t *depend = j->data;
pmpkg_t *causingpkg = _alpm_find_dep_satisfier(modified, depend);
/* we won't break this depend, if it is already broken, we ignore it */
/* 1. check upgrade list for satisfiers */
/* 2. check dblist for satisfiers */
if(alpm_list_find(modified, depend, satisfycmp) &&
!alpm_list_find(upgrade, depend, satisfycmp) &&
!alpm_list_find(dblist, depend, satisfycmp)) {
char *missdepstring = alpm_dep_get_string(depend);
if(causingpkg &&
!_alpm_find_dep_satisfier(upgrade, depend) &&
!_alpm_find_dep_satisfier(dblist, depend)) {
char *missdepstring = alpm_dep_compute_string(depend);
_alpm_log(PM_LOG_DEBUG, "checkdeps: transaction would break '%s' dependency of '%s'\n",
missdepstring, alpm_pkg_get_name(lp));
free(missdepstring);
miss = _alpm_depmiss_new(lp->name, depend->mod,
depend->name, depend->version);
miss = _alpm_depmiss_new(lp->name, depend, alpm_pkg_get_name(causingpkg));
baddeps = alpm_list_add(baddeps, miss);
}
}
@@ -309,7 +318,7 @@ static int dep_vercmp(const char *version1, pmdepmod_t mod,
if(mod == PM_DEP_MOD_ANY) {
equal = 1;
} else {
int cmp = _alpm_versioncmp(version1, version2);
int cmp = alpm_pkg_vercmp(version1, version2);
switch(mod) {
case PM_DEP_MOD_EQ: equal = (cmp == 0); break;
case PM_DEP_MOD_GE: equal = (cmp >= 0); break;
@@ -345,7 +354,6 @@ int SYMEXPORT alpm_depcmp(pmpkg_t *pkg, pmdepend_t *dep)
satisfy = (dep->mod == PM_DEP_MOD_ANY
&& strcmp(provname, dep->name) == 0);
} else {
/* replace the space with a NULL byte, and advance ptr the version */
*provver = '\0';
provver += 1;
satisfy = (strcmp(provname, dep->name) == 0
@@ -357,7 +365,7 @@ int SYMEXPORT alpm_depcmp(pmpkg_t *pkg, pmdepend_t *dep)
return(satisfy);
}
pmdepend_t SYMEXPORT *alpm_splitdep(const char *depstring)
pmdepend_t *_alpm_splitdep(const char *depstring)
{
pmdepend_t *depend;
char *ptr = NULL;
@@ -366,9 +374,9 @@ pmdepend_t SYMEXPORT *alpm_splitdep(const char *depstring)
if(depstring == NULL) {
return(NULL);
}
newstr = strdup(depstring);
STRDUP(newstr, depstring, RET_ERR(PM_ERR_MEMORY, NULL));
MALLOC(depend, sizeof(pmdepend_t), return(NULL));
CALLOC(depend, 1, sizeof(pmdepend_t), RET_ERR(PM_ERR_MEMORY, NULL));
/* Find a version comparator if one exists. If it does, set the type and
* increment the ptr accordingly so we can copy the right strings. */
@@ -392,25 +400,36 @@ pmdepend_t SYMEXPORT *alpm_splitdep(const char *depstring)
depend->mod = PM_DEP_MOD_GT;
*ptr = '\0';
ptr += 1;
} else {
/* no version specified - copy in the name and return it */
/* no version specified - copy the name and return it */
depend->mod = PM_DEP_MOD_ANY;
strncpy(depend->name, newstr, PKG_NAME_LEN);
depend->version[0] = '\0';
STRDUP(depend->name, newstr, RET_ERR(PM_ERR_MEMORY, NULL));
depend->version = NULL;
free(newstr);
return(depend);
}
/* if we get here, we have a version comparator, copy the right parts
* to the right places */
strncpy(depend->name, newstr, PKG_NAME_LEN);
strncpy(depend->version, ptr, PKG_VERSION_LEN);
STRDUP(depend->name, newstr, RET_ERR(PM_ERR_MEMORY, NULL));
STRDUP(depend->version, ptr, RET_ERR(PM_ERR_MEMORY, NULL));
free(newstr);
return(depend);
}
pmdepend_t *_alpm_dep_dup(const pmdepend_t *dep)
{
pmdepend_t *newdep;
CALLOC(newdep, 1, sizeof(pmdepend_t), RET_ERR(PM_ERR_MEMORY, NULL));
STRDUP(newdep->name, dep->name, RET_ERR(PM_ERR_MEMORY, NULL));
STRDUP(newdep->version, dep->version, RET_ERR(PM_ERR_MEMORY, NULL));
newdep->mod = dep->mod;
return(newdep);
}
/* These parameters are messy. We check if this package, given a list of
* targets and a db is safe to remove. We do NOT remove it if it is in the
* target list, or if if the package was explictly installed and
@@ -418,9 +437,9 @@ pmdepend_t SYMEXPORT *alpm_splitdep(const char *depstring)
static int can_remove_package(pmdb_t *db, pmpkg_t *pkg, alpm_list_t *targets,
int include_explicit)
{
alpm_list_t *i, *requiredby;
alpm_list_t *i;
if(_alpm_pkg_find(alpm_pkg_get_name(pkg), targets)) {
if(_alpm_pkg_find(targets, alpm_pkg_get_name(pkg))) {
return(0);
}
@@ -440,15 +459,12 @@ static int can_remove_package(pmdb_t *db, pmpkg_t *pkg, alpm_list_t *targets,
* if checkdeps detected it would break something */
/* see if other packages need it */
requiredby = alpm_pkg_compute_requiredby(pkg);
for(i = requiredby; i; i = i->next) {
pmpkg_t *reqpkg = _alpm_db_get_pkgfromcache(db, i->data);
if(reqpkg && !_alpm_pkg_find(alpm_pkg_get_name(reqpkg), targets)) {
FREELIST(requiredby);
for(i = _alpm_db_get_pkgcache(db); i; i = i->next) {
pmpkg_t *lpkg = i->data;
if(_alpm_dep_edge(lpkg, pkg) && !_alpm_pkg_find(targets, lpkg->name)) {
return(0);
}
}
FREELIST(requiredby);
/* it's ok to remove */
return(1);
@@ -466,7 +482,7 @@ static int can_remove_package(pmdb_t *db, pmpkg_t *pkg, alpm_list_t *targets,
*/
void _alpm_recursedeps(pmdb_t *db, alpm_list_t *targs, int include_explicit)
{
alpm_list_t *i, *j, *k;
alpm_list_t *i, *j;
ALPM_LOG_FUNC;
@@ -476,149 +492,195 @@ void _alpm_recursedeps(pmdb_t *db, alpm_list_t *targs, int include_explicit)
for(i = targs; i; i = i->next) {
pmpkg_t *pkg = i->data;
for(j = alpm_pkg_get_depends(pkg); j; j = j->next) {
pmdepend_t *depend = j->data;
for(k = _alpm_db_get_pkgcache(db); k; k = k->next) {
pmpkg_t *deppkg = k->data;
if(alpm_depcmp(deppkg,depend)
&& can_remove_package(db, deppkg, targs, include_explicit)) {
_alpm_log(PM_LOG_DEBUG, "adding '%s' to the targets\n",
alpm_pkg_get_name(deppkg));
/* add it to the target list */
targs = alpm_list_add(targs, _alpm_pkg_dup(deppkg));
}
for(j = _alpm_db_get_pkgcache(db); j; j = j->next) {
pmpkg_t *deppkg = j->data;
if(_alpm_dep_edge(pkg, deppkg)
&& can_remove_package(db, deppkg, targs, include_explicit)) {
_alpm_log(PM_LOG_DEBUG, "adding '%s' to the targets\n",
alpm_pkg_get_name(deppkg));
/* add it to the target list */
targs = alpm_list_add(targs, _alpm_pkg_dup(deppkg));
}
}
}
}
/* populates *list with packages that need to be installed to satisfy all
* dependencies (recursive) for syncpkg
/**
* helper function for resolvedeps: search for dep satisfier in dbs
*
* @param remove contains packages elected for removal
* make sure **list is already initialized
*/
int _alpm_resolvedeps(pmdb_t *local, alpm_list_t *dbs_sync, pmpkg_t *syncpkg,
alpm_list_t **list, alpm_list_t *remove, pmtrans_t *trans, alpm_list_t **data)
* @param dep is the dependency to search for
* @param dbs are the databases to search
* @param excluding are the packages to exclude from the search
* @param prompt if true, will cause an unresolvable dependency to issue an
* interactive prompt asking whether the package should be removed from
* the transaction or the transaction aborted; if false, simply returns
* an error code without prompting
* @return the resolved package
**/
pmpkg_t *_alpm_resolvedep(pmdepend_t *dep, alpm_list_t *dbs,
alpm_list_t *excluding, int prompt)
{
alpm_list_t *i, *j, *k;
alpm_list_t *i, *j;
int ignored = 0;
/* 1. literals */
for(i = dbs; i; i = i->next) {
pmpkg_t *pkg = _alpm_db_get_pkgfromcache(i->data, dep->name);
if(pkg && alpm_depcmp(pkg, dep) && !_alpm_pkg_find(excluding, pkg->name)) {
if(_alpm_pkg_should_ignore(pkg)) {
int install = 0;
if (prompt) {
QUESTION(handle->trans, PM_TRANS_CONV_INSTALL_IGNOREPKG, pkg,
NULL, NULL, &install);
} else {
_alpm_log(PM_LOG_WARNING, _("ignoring package %s-%s\n"), pkg->name, pkg->version);
}
if(!install) {
ignored = 1;
continue;
}
}
return(pkg);
}
}
/* 2. satisfiers (skip literals here) */
for(i = dbs; i; i = i->next) {
for(j = _alpm_db_get_pkgcache(i->data); j; j = j->next) {
pmpkg_t *pkg = j->data;
if(alpm_depcmp(pkg, dep) && strcmp(pkg->name, dep->name) &&
!_alpm_pkg_find(excluding, pkg->name)) {
if(_alpm_pkg_should_ignore(pkg)) {
int install = 0;
if (prompt) {
QUESTION(handle->trans, PM_TRANS_CONV_INSTALL_IGNOREPKG,
pkg, NULL, NULL, &install);
} else {
_alpm_log(PM_LOG_WARNING, _("ignoring package %s-%s\n"), pkg->name, pkg->version);
}
if(!install) {
ignored = 1;
continue;
}
}
_alpm_log(PM_LOG_WARNING, _("provider package was selected (%s provides %s)\n"),
pkg->name, dep->name);
return(pkg);
}
}
}
if(ignored) { /* resolvedeps will override these */
pm_errno = PM_ERR_PKG_IGNORED;
} else {
pm_errno = PM_ERR_PKG_NOT_FOUND;
}
return(NULL);
}
/* Computes resolvable dependencies for a given package and adds that package
* and those resolvable dependencies to a list.
*
* @param local is the local database
* @param dbs_sync are the sync databases
* @param pkg is the package to resolve
* @param packages is a pointer to a list of packages which will be
* searched first for any dependency packages needed to complete the
* resolve, and to which will be added any [pkg] and all of its
* dependencies not already on the list
* @param remove is the set of packages which will be removed in this
* transaction
* @param data returns the dependency which could not be satisfied in the
* event of an error
* @return 0 on success, with [pkg] and all of its dependencies not already on
* the [*packages] list added to that list, or -1 on failure due to an
* unresolvable dependency, in which case the [*packages] list will be
* unmodified by this function
*/
int _alpm_resolvedeps(pmdb_t *local, alpm_list_t *dbs_sync, pmpkg_t *pkg,
alpm_list_t *preferred, alpm_list_t **packages,
alpm_list_t *remove, alpm_list_t **data)
{
alpm_list_t *i, *j;
alpm_list_t *targ;
alpm_list_t *deps = NULL;
alpm_list_t *packages_copy;
ALPM_LOG_FUNC;
if(local == NULL || dbs_sync == NULL || syncpkg == NULL || list == NULL) {
if(local == NULL || dbs_sync == NULL) {
return(-1);
}
_alpm_log(PM_LOG_DEBUG, "started resolving dependencies\n");
targ = alpm_list_add(NULL, syncpkg);
deps = alpm_checkdeps(local, 0, remove, targ);
alpm_list_free(targ);
if(deps == NULL) {
if(_alpm_pkg_find(*packages, pkg->name) != NULL) {
return(0);
}
for(i = deps; i; i = i->next) {
int found = 0;
pmdepmissing_t *miss = i->data;
pmdepend_t *missdep = &(miss->depend);
pmpkg_t *sync = NULL;
/* Create a copy of the packages list, so that it can be restored
on error */
packages_copy = alpm_list_copy(*packages);
/* [pkg] has not already been resolved into the packages list, so put it
on that list */
*packages = alpm_list_add(*packages, pkg);
/* check if one of the packages in *list already satisfies this dependency */
for(j = *list; j && !found; j = j->next) {
pmpkg_t *sp = j->data;
if(alpm_depcmp(sp, missdep)) {
char *missdepstring = alpm_dep_get_string(missdep);
_alpm_log(PM_LOG_DEBUG, "%s satisfies dependency %s -- skipping\n",
alpm_pkg_get_name(sp), missdepstring);
_alpm_log(PM_LOG_DEBUG, "started resolving dependencies\n");
for(i = alpm_list_last(*packages); i; i = i->next) {
pmpkg_t *tpkg = i->data;
targ = alpm_list_add(NULL, tpkg);
deps = alpm_checkdeps(_alpm_db_get_pkgcache(local), 0, remove, targ);
alpm_list_free(targ);
for(j = deps; j; j = j->next) {
pmdepmissing_t *miss = j->data;
pmdepend_t *missdep = alpm_miss_get_dep(miss);
/* check if one of the packages in the [*packages] list already satisfies this dependency */
if(_alpm_find_dep_satisfier(*packages, missdep)) {
continue;
}
/* check if one of the packages in the [preferred] list already satisfies this dependency */
pmpkg_t *spkg = _alpm_find_dep_satisfier(preferred, missdep);
if(!spkg) {
/* find a satisfier package in the given repositories */
spkg = _alpm_resolvedep(missdep, dbs_sync, *packages, 0);
}
if(!spkg) {
pm_errno = PM_ERR_UNSATISFIED_DEPS;
char *missdepstring = alpm_dep_compute_string(missdep);
_alpm_log(PM_LOG_WARNING, _("cannot resolve \"%s\", a dependency of \"%s\"\n"),
missdepstring, tpkg->name);
free(missdepstring);
found = 1;
if(data) {
pmdepmissing_t *missd = _alpm_depmiss_new(miss->target,
miss->depend, miss->causingpkg);
if(missd) {
*data = alpm_list_add(*data, missd);
}
}
alpm_list_free(*packages);
*packages = packages_copy;
alpm_list_free_inner(deps, (alpm_list_fn_free)_alpm_depmiss_free);
alpm_list_free(deps);
return(-1);
} else {
_alpm_log(PM_LOG_DEBUG, "pulling dependency %s (needed by %s)\n",
alpm_pkg_get_name(spkg), alpm_pkg_get_name(tpkg));
*packages = alpm_list_add(*packages, spkg);
}
}
if(found) {
continue;
}
alpm_list_free_inner(deps, (alpm_list_fn_free)_alpm_depmiss_free);
alpm_list_free(deps);
}
alpm_list_free(packages_copy);
_alpm_log(PM_LOG_DEBUG, "finished resolving dependencies\n");
return(0);
}
/* find the package in one of the repositories */
/* check literals */
for(j = dbs_sync; j && !found; j = j->next) {
sync = _alpm_db_get_pkgfromcache(j->data, missdep->name);
if(!sync) {
continue;
}
found = alpm_depcmp(sync, missdep) && !_alpm_pkg_find(alpm_pkg_get_name(sync), remove);
if(!found) {
continue;
}
/* If package is in the ignorepkg list, ask before we pull it */
if(_alpm_pkg_should_ignore(sync)) {
pmpkg_t *dummypkg = _alpm_pkg_new(miss->target, NULL);
QUESTION(trans, PM_TRANS_CONV_INSTALL_IGNOREPKG, dummypkg, sync, NULL, &found);
_alpm_pkg_free(dummypkg);
}
}
/*TODO this autoresolves the first 'satisfier' package... we should fix this
* somehow */
/* check provides */
/* we don't check literals again to avoid duplicated PM_TRANS_CONV_INSTALL_IGNOREPKG messages */
for(j = dbs_sync; j && !found; j = j->next) {
for(k = _alpm_db_get_pkgcache(j->data); k && !found; k = k->next) {
sync = k->data;
if(!sync) {
continue;
}
found = alpm_depcmp(sync, missdep) && strcmp(sync->name, missdep->name)
&& !_alpm_pkg_find(alpm_pkg_get_name(sync), remove);
if(!found) {
continue;
}
if(_alpm_pkg_should_ignore(sync)) {
pmpkg_t *dummypkg = _alpm_pkg_new(miss->target, NULL);
QUESTION(trans, PM_TRANS_CONV_INSTALL_IGNOREPKG, dummypkg, sync, NULL, &found);
_alpm_pkg_free(dummypkg);
}
}
}
if(!found) {
char *missdepstring = alpm_dep_get_string(missdep);
_alpm_log(PM_LOG_ERROR, _("cannot resolve \"%s\", a dependency of \"%s\"\n"),
missdepstring, miss->target);
free(missdepstring);
if(data) {
MALLOC(miss, sizeof(pmdepmissing_t),/*nothing*/);
if(!miss) {
pm_errno = PM_ERR_MEMORY;
FREELIST(*data);
goto error;
}
*miss = *(pmdepmissing_t *)i->data;
*data = alpm_list_add(*data, miss);
}
pm_errno = PM_ERR_UNSATISFIED_DEPS;
goto error;
} else {
_alpm_log(PM_LOG_DEBUG, "pulling dependency %s (needed by %s)\n",
alpm_pkg_get_name(sync), alpm_pkg_get_name(syncpkg));
*list = alpm_list_add(*list, sync);
if(_alpm_resolvedeps(local, dbs_sync, sync, list, remove, trans, data)) {
goto error;
}
/* Does pkg1 depend on pkg2, ie. does pkg2 satisfy a dependency of pkg1? */
int _alpm_dep_edge(pmpkg_t *pkg1, pmpkg_t *pkg2)
{
alpm_list_t *i;
for(i = alpm_pkg_get_depends(pkg1); i; i = i->next) {
if(alpm_depcmp(pkg2, i->data)) {
return(1);
}
}
_alpm_log(PM_LOG_DEBUG, "finished resolving dependencies\n");
FREELIST(deps);
return(0);
error:
FREELIST(deps);
return(-1);
}
const char SYMEXPORT *alpm_miss_get_target(const pmdepmissing_t *miss)
@@ -628,7 +690,17 @@ const char SYMEXPORT *alpm_miss_get_target(const pmdepmissing_t *miss)
/* Sanity checks */
ASSERT(miss != NULL, return(NULL));
return miss->target;
return(miss->target);
}
const char SYMEXPORT *alpm_miss_get_causingpkg(const pmdepmissing_t *miss)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(miss != NULL, return(NULL));
return miss->causingpkg;
}
pmdepend_t SYMEXPORT *alpm_miss_get_dep(pmdepmissing_t *miss)
@@ -638,7 +710,7 @@ pmdepend_t SYMEXPORT *alpm_miss_get_dep(pmdepmissing_t *miss)
/* Sanity checks */
ASSERT(miss != NULL, return(NULL));
return &(miss->depend);
return(miss->depend);
}
pmdepmod_t SYMEXPORT alpm_dep_get_mod(const pmdepend_t *dep)
@@ -648,7 +720,7 @@ pmdepmod_t SYMEXPORT alpm_dep_get_mod(const pmdepend_t *dep)
/* Sanity checks */
ASSERT(dep != NULL, return(-1));
return dep->mod;
return(dep->mod);
}
const char SYMEXPORT *alpm_dep_get_name(const pmdepend_t *dep)
@@ -658,7 +730,7 @@ const char SYMEXPORT *alpm_dep_get_name(const pmdepend_t *dep)
/* Sanity checks */
ASSERT(dep != NULL, return(NULL));
return dep->name;
return(dep->name);
}
const char SYMEXPORT *alpm_dep_get_version(const pmdepend_t *dep)
@@ -668,7 +740,7 @@ const char SYMEXPORT *alpm_dep_get_version(const pmdepend_t *dep)
/* Sanity checks */
ASSERT(dep != NULL, return(NULL));
return dep->version;
return(dep->version);
}
/** Reverse of splitdep; make a dep string from a pmdepend_t struct.
@@ -676,9 +748,9 @@ const char SYMEXPORT *alpm_dep_get_version(const pmdepend_t *dep)
* @param dep the depend to turn into a string
* @return a string-formatted dependency with operator if necessary
*/
char SYMEXPORT *alpm_dep_get_string(const pmdepend_t *dep)
char SYMEXPORT *alpm_dep_compute_string(const pmdepend_t *dep)
{
char *opr, *str = NULL;
char *name, *opr, *ver, *str = NULL;
size_t len;
ALPM_LOG_FUNC;
@@ -686,6 +758,12 @@ char SYMEXPORT *alpm_dep_get_string(const pmdepend_t *dep)
/* Sanity checks */
ASSERT(dep != NULL, return(NULL));
if(dep->name) {
name = dep->name;
} else {
name = "";
}
switch(dep->mod) {
case PM_DEP_MOD_ANY:
opr = "";
@@ -710,11 +788,18 @@ char SYMEXPORT *alpm_dep_get_string(const pmdepend_t *dep)
break;
}
if(dep->version) {
ver = dep->version;
} else {
ver = "";
}
/* we can always compute len and print the string like this because opr
* and ver will be empty when PM_DEP_MOD_ANY is the depend type */
len = strlen(dep->name) + strlen(opr) + strlen(dep->version) + 1;
* and ver will be empty when PM_DEP_MOD_ANY is the depend type. the
* reassignments above also ensure we do not do a strlen(NULL). */
len = strlen(name) + strlen(opr) + strlen(ver) + 1;
MALLOC(str, len, RET_ERR(PM_ERR_MEMORY, NULL));
snprintf(str, len, "%s%s%s", dep->name, opr, dep->version);
snprintf(str, len, "%s%s%s", name, opr, ver);
return(str);
}

View File

@@ -1,7 +1,8 @@
/*
* deps.h
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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>
*
@@ -29,31 +30,31 @@
/* Dependency */
struct __pmdepend_t {
pmdepmod_t mod;
char name[PKG_NAME_LEN];
char version[PKG_VERSION_LEN];
char *name;
char *version;
};
/* Missing dependency */
struct __pmdepmissing_t {
char target[PKG_NAME_LEN];
pmdepend_t depend;
char *target;
pmdepend_t *depend;
char *causingpkg; /* this is used in case of remove dependency error only */
};
/* Graphs */
struct __pmgraph_t {
int state; /* 0: untouched, -1: entered, other: leaving time */
void *data;
struct __pmgraph_t *parent; /* where did we come from? */
alpm_list_t *children;
alpm_list_t *childptr; /* points to a child in children list */
};
pmdepmissing_t *_alpm_depmiss_new(const char *target, pmdepmod_t depmod,
const char *depname, const char *depversion);
alpm_list_t *_alpm_sortbydeps(alpm_list_t *targets, pmtranstype_t mode);
void _alpm_dep_free(pmdepend_t *dep);
pmdepend_t *_alpm_dep_dup(const pmdepend_t *dep);
pmdepmissing_t *_alpm_depmiss_new(const char *target, pmdepend_t *dep,
const char *causinpkg);
void _alpm_depmiss_free(pmdepmissing_t *miss);
alpm_list_t *_alpm_sortbydeps(alpm_list_t *targets, int reverse);
void _alpm_recursedeps(pmdb_t *db, alpm_list_t *targs, int include_explicit);
int _alpm_resolvedeps(pmdb_t *local, alpm_list_t *dbs_sync, pmpkg_t *syncpkg,
alpm_list_t **list, alpm_list_t *remove, pmtrans_t *trans, alpm_list_t **data);
pmpkg_t *_alpm_resolvedep(pmdepend_t *dep, alpm_list_t *dbs, alpm_list_t *excluding, int prompt);
int _alpm_resolvedeps(pmdb_t *local, alpm_list_t *dbs_sync, pmpkg_t *pkg,
alpm_list_t *preferred, alpm_list_t **packages, alpm_list_t *remove,
alpm_list_t **data);
int _alpm_dep_edge(pmpkg_t *pkg1, pmpkg_t *pkg2);
pmdepend_t *_alpm_splitdep(const char *depstring);
pmpkg_t *_alpm_find_dep_satisfier(alpm_list_t *pkgs, pmdepend_t *dep);
#endif /* _ALPM_DEPS_H */

372
lib/libalpm/dload.c Normal file
View File

@@ -0,0 +1,372 @@
/*
* download.c
*
* Copyright (c) 2006-2009 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
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <limits.h>
/* the following two are needed on BSD for libfetch */
#if defined(HAVE_SYS_SYSLIMITS_H)
#include <sys/syslimits.h> /* PATH_MAX */
#endif
#if defined(HAVE_SYS_PARAM_H)
#include <sys/param.h> /* MAXHOSTNAMELEN */
#endif
#if defined(INTERNAL_DOWNLOAD)
#include <fetch.h>
#endif
/* libalpm */
#include "dload.h"
#include "alpm_list.h"
#include "alpm.h"
#include "log.h"
#include "util.h"
#include "handle.h"
static char *get_filename(const char *url) {
char *filename = strrchr(url, '/');
if(filename != NULL) {
filename++;
}
return(filename);
}
#if defined(INTERNAL_DOWNLOAD)
static char *get_destfile(const char *path, const char *filename) {
char *destfile;
/* len = localpath len + filename len + null */
int len = strlen(path) + strlen(filename) + 1;
CALLOC(destfile, len, sizeof(char), RET_ERR(PM_ERR_MEMORY, NULL));
snprintf(destfile, len, "%s%s", path, filename);
return(destfile);
}
static char *get_tempfile(const char *path, const char *filename) {
char *tempfile;
/* len = localpath len + filename len + '.part' len + null */
int len = strlen(path) + strlen(filename) + 6;
CALLOC(tempfile, len, sizeof(char), RET_ERR(PM_ERR_MEMORY, NULL));
snprintf(tempfile, len, "%s%s.part", path, filename);
return(tempfile);
}
/* Build a 'struct url' from an url. */
static struct url *url_for_string(const char *url)
{
struct url *ret = NULL;
ret = fetchParseURL(url);
if(!ret) {
_alpm_log(PM_LOG_ERROR, _("url '%s' is invalid\n"), url);
RET_ERR(PM_ERR_SERVER_BAD_URL, NULL);
}
/* if no URL scheme specified, assume HTTP */
if(strlen(ret->scheme) == 0) {
_alpm_log(PM_LOG_WARNING, _("url scheme not specified, assuming HTTP\n"));
strcpy(ret->scheme, SCHEME_HTTP);
}
/* add a user & password for anonymous FTP */
if(strcmp(ret->scheme,SCHEME_FTP) == 0 && strlen(ret->user) == 0) {
strcpy(ret->user, "anonymous");
strcpy(ret->pwd, "libalpm@guest");
}
return(ret);
}
static int download_internal(const char *url, const char *localpath,
time_t mtimeold, time_t *mtimenew) {
fetchIO *dlf = NULL;
FILE *localf = NULL;
struct url_stat ust;
struct stat st;
int chk_resume = 0, ret = 0;
size_t dl_thisfile = 0, nread = 0;
char *tempfile, *destfile, *filename;
struct sigaction new_action, old_action;
struct url *fileurl = url_for_string(url);
char buffer[PM_DLBUF_LEN];
if(!fileurl) {
return(-1);
}
filename = get_filename(url);
if(!filename) {
return(-1);
}
destfile = get_destfile(localpath, filename);
tempfile = get_tempfile(localpath, filename);
/* pass the raw filename for passing to the callback function */
_alpm_log(PM_LOG_DEBUG, "using '%s' for download progress\n", filename);
if(stat(tempfile, &st) == 0 && st.st_size > 0) {
_alpm_log(PM_LOG_DEBUG, "existing file found, using it\n");
fileurl->offset = (off_t)st.st_size;
dl_thisfile = st.st_size;
localf = fopen(tempfile, "ab");
chk_resume = 1;
} else {
fileurl->offset = (off_t)0;
dl_thisfile = 0;
}
/* print proxy info for debug purposes */
_alpm_log(PM_LOG_DEBUG, "HTTP_PROXY: %s\n", getenv("HTTP_PROXY"));
_alpm_log(PM_LOG_DEBUG, "http_proxy: %s\n", getenv("http_proxy"));
_alpm_log(PM_LOG_DEBUG, "FTP_PROXY: %s\n", getenv("FTP_PROXY"));
_alpm_log(PM_LOG_DEBUG, "ftp_proxy: %s\n", getenv("ftp_proxy"));
/* libfetch does not reset the error code */
fetchLastErrCode = 0;
/* 10s timeout - TODO make a config option */
fetchTimeout = 10000;
/* ignore any SIGPIPE signals- these may occur if our FTP socket dies or
* something along those lines. Store the old signal handler first. */
new_action.sa_handler = SIG_IGN;
sigemptyset(&new_action.sa_mask);
sigaction(SIGPIPE, NULL, &old_action);
sigaction(SIGPIPE, &new_action, NULL);
dlf = fetchXGet(fileurl, &ust, (handle->nopassiveftp ? "" : "p"));
if(fetchLastErrCode != 0 || dlf == NULL) {
const char *host = _("disk");
if(strcmp(SCHEME_FILE, fileurl->scheme) != 0) {
host = fileurl->host;
}
pm_errno = PM_ERR_LIBFETCH;
_alpm_log(PM_LOG_ERROR, _("failed retrieving file '%s' from %s : %s\n"),
filename, host, fetchLastErrString);
ret = -1;
goto cleanup;
} else {
_alpm_log(PM_LOG_DEBUG, "connected to %s successfully\n", fileurl->host);
}
if(ust.mtime && mtimeold && ust.mtime == mtimeold) {
_alpm_log(PM_LOG_DEBUG, "mtimes are identical, skipping %s\n", filename);
ret = 1;
goto cleanup;
}
if(ust.mtime && mtimenew) {
*mtimenew = ust.mtime;
}
if(chk_resume && fileurl->offset == 0) {
_alpm_log(PM_LOG_WARNING, _("cannot resume download, starting over\n"));
if(localf != NULL) {
fclose(localf);
localf = NULL;
}
}
if(localf == NULL) {
_alpm_rmrf(tempfile);
fileurl->offset = (off_t)0;
dl_thisfile = 0;
localf = fopen(tempfile, "wb");
if(localf == NULL) { /* still null? */
_alpm_log(PM_LOG_ERROR, _("cannot write to file '%s'\n"), tempfile);
ret = -1;
goto cleanup;
}
}
/* Progress 0 - initialize */
if(handle->dlcb) {
handle->dlcb(filename, 0, ust.size);
}
while((nread = fetchIO_read(dlf, buffer, PM_DLBUF_LEN)) > 0) {
size_t nwritten = 0;
while(nwritten < nread) {
nwritten += fwrite(buffer, 1, (nread - nwritten), localf);
if(ferror(localf)) {
_alpm_log(PM_LOG_ERROR, _("error writing to file '%s': %s\n"),
destfile, strerror(errno));
ret = -1;
goto cleanup;
}
}
dl_thisfile += nread;
if(handle->dlcb) {
handle->dlcb(filename, dl_thisfile, ust.size);
}
}
/* did the transfer complete normally? */
if (ust.size != -1 && dl_thisfile < ust.size) {
pm_errno = PM_ERR_LIBFETCH;
_alpm_log(PM_LOG_ERROR, _("%s appears to be truncated: %jd/%jd bytes\n"),
filename, (intmax_t)dl_thisfile, (intmax_t)ust.size);
ret = -1;
goto cleanup;
}
/* probably safer to close the file descriptors now before renaming the file,
* for example to make sure the buffers are flushed.
*/
fclose(localf);
localf = NULL;
fetchIO_close(dlf);
dlf = NULL;
rename(tempfile, destfile);
ret = 0;
cleanup:
/* restore any existing SIGPIPE signal handler */
sigaction(SIGPIPE, &old_action, NULL);
FREE(tempfile);
FREE(destfile);
if(localf != NULL) {
fclose(localf);
}
if(dlf != NULL) {
fetchIO_close(dlf);
}
fetchFreeURL(fileurl);
return(ret);
}
#endif
static int download(const char *url, const char *localpath,
time_t mtimeold, time_t *mtimenew) {
if(handle->fetchcb == NULL) {
#if defined(INTERNAL_DOWNLOAD)
return(download_internal(url, localpath, mtimeold, mtimenew));
#else
RET_ERR(PM_ERR_EXTERNAL_DOWNLOAD, -1);
#endif
} else {
int ret = handle->fetchcb(url, localpath, mtimeold, mtimenew);
if(ret == -1) {
RET_ERR(PM_ERR_EXTERNAL_DOWNLOAD, -1);
}
return(ret);
}
}
/*
* Download a single file
* - if mtimeold is non-NULL, then only download the file if it's different
* than mtimeold.
* - if *mtimenew is non-NULL, it will be filled with the mtime of the remote
* file.
* - servers must be a list of urls WITHOUT trailing slashes.
*
* RETURN: 0 for successful download
* 1 if the mtimes are identical
* -1 on error
*/
int _alpm_download_single_file(const char *filename,
alpm_list_t *servers, const char *localpath,
time_t mtimeold, time_t *mtimenew)
{
alpm_list_t *i;
int ret = -1;
ASSERT(servers != NULL, RET_ERR(PM_ERR_SERVER_NONE, -1));
for(i = servers; i; i = i->next) {
const char *server = i->data;
char *fileurl = NULL;
int len;
/* print server + filename into a buffer */
len = strlen(server) + strlen(filename) + 2;
CALLOC(fileurl, len, sizeof(char), RET_ERR(PM_ERR_MEMORY, -1));
snprintf(fileurl, len, "%s/%s", server, filename);
ret = download(fileurl, localpath, mtimeold, mtimenew);
FREE(fileurl);
if(ret != -1) {
break;
}
}
return(ret);
}
int _alpm_download_files(alpm_list_t *files,
alpm_list_t *servers, const char *localpath)
{
int ret = 0;
alpm_list_t *lp;
for(lp = files; lp; lp = lp->next) {
char *filename = lp->data;
if(_alpm_download_single_file(filename, servers,
localpath, 0, NULL) == -1) {
ret++;
}
}
return(ret);
}
/** Fetch a remote pkg.
* @param url URL of the package to download
* @return the downloaded filepath on success, NULL on error
* @addtogroup alpm_misc
*/
char SYMEXPORT *alpm_fetch_pkgurl(const char *url)
{
char *filename, *filepath;
const char *cachedir;
int ret;
ALPM_LOG_FUNC;
filename = get_filename(url);
/* find a valid cache dir to download to */
cachedir = _alpm_filecache_setup();
/* download the file */
ret = download(url, cachedir, 0, NULL);
if(ret == -1) {
_alpm_log(PM_LOG_WARNING, _("failed to download %s\n"), url);
return(NULL);
}
_alpm_log(PM_LOG_DEBUG, "successfully downloaded %s\n", url);
/* we should be able to find the file the second time around */
filepath = _alpm_filecache_find(filename);
return(filepath);
}
/* vim: set ts=2 sw=2 noet: */

View File

@@ -1,7 +1,8 @@
/*
* error.h
* dload.h
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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
* it under the terms of the GNU General Public License as published by
@@ -16,13 +17,23 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _ALPM_ERROR_H
#define _ALPM_ERROR_H
#ifndef _ALPM_DLOAD_H
#define _ALPM_DLOAD_H
#define RET_ERR(err, ret) do { pm_errno = (err); \
_alpm_log(PM_LOG_DEBUG, "returning error %d from %s : %s\n", err, __func__, alpm_strerrorlast()); \
return(ret); } while(0)
#include "alpm_list.h"
#include "alpm.h"
#endif /* _ALPM_ERROR_H */
#include <time.h>
#define PM_DLBUF_LEN (1024 * 10)
int _alpm_download_single_file(const char *filename,
alpm_list_t *servers, const char *localpath,
time_t mtimeold, time_t *mtimenew);
int _alpm_download_files(alpm_list_t *files,
alpm_list_t *servers, const char *localpath);
#endif /* _ALPM_DLOAD_H */
/* vim: set ts=2 sw=2 noet: */

View File

@@ -1,10 +1,8 @@
/*
* error.c
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>
* Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org>
* Copyright (c) 2006-2009 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
* it under the terms of the GNU General Public License as published by
@@ -22,12 +20,25 @@
#include "config.h"
/* TODO: needed for the libfetch stuff, unfortunately- we should kill it */
#include <stdio.h>
#include <limits.h>
/* the following two are needed on BSD for libfetch */
#if defined(HAVE_SYS_SYSLIMITS_H)
#include <sys/syslimits.h> /* PATH_MAX */
#endif
#if defined(HAVE_SYS_PARAM_H)
#include <sys/param.h> /* MAXHOSTNAMELEN */
#endif
#if defined(INTERNAL_DOWNLOAD)
#include <fetch.h> /* fetchLastErrString */
#endif
/* libalpm */
#include "error.h"
#include "util.h"
#include "alpm.h"
/* TODO does this really need a file all on its own? */
const char SYMEXPORT *alpm_strerrorlast(void)
{
return alpm_strerror(pm_errno);
@@ -74,13 +85,8 @@ const char SYMEXPORT *alpm_strerror(int err)
/* Servers */
case PM_ERR_SERVER_BAD_URL:
return _("invalid url for server");
/* Configuration */
case PM_ERR_OPT_LOGFILE:
case PM_ERR_OPT_DBPATH:
case PM_ERR_OPT_LOCALDB:
case PM_ERR_OPT_SYNCDB:
case PM_ERR_OPT_USESYSLOG:
return _("could not set parameter");
case PM_ERR_SERVER_NONE:
return _("no servers configured for repository");
/* Transactions */
case PM_ERR_TRANS_NOT_NULL:
return _("transaction already initialized");
@@ -96,39 +102,28 @@ const char SYMEXPORT *alpm_strerror(int err)
return _("transaction aborted");
case PM_ERR_TRANS_TYPE:
return _("operation not compatible with the transaction type");
case PM_ERR_TRANS_COMMITING:
return _("could not commit transaction");
case PM_ERR_TRANS_DOWNLOADING:
return _("could not download all files");
case PM_ERR_TRANS_NOT_LOCKED:
return _("transaction commit attempt when database is not locked");
/* Packages */
case PM_ERR_PKG_NOT_FOUND:
return _("could not find or read package");
case PM_ERR_PKG_IGNORED:
return _("operation cancelled due to ignorepkg");
case PM_ERR_PKG_INVALID:
return _("invalid or corrupted package");
case PM_ERR_PKG_OPEN:
return _("cannot open package file");
case PM_ERR_PKG_LOAD:
return _("cannot load package data");
case PM_ERR_PKG_INSTALLED:
return _("package already installed");
case PM_ERR_PKG_CANT_FRESH:
return _("package not installed or lesser version");
case PM_ERR_PKG_CANT_REMOVE:
return _("cannot remove all files for package");
case PM_ERR_PKG_INVALID_NAME:
return _("package name is not valid");
case PM_ERR_PKG_CORRUPTED:
return _("corrupted package");
return _("package filename is not valid");
case PM_ERR_PKG_REPO_NOT_FOUND:
return _("no such repository");
/* Deltas */
case PM_ERR_DLT_CORRUPTED:
return _("corrupted delta");
case PM_ERR_DLT_INVALID:
return _("invalid or corrupted delta");
case PM_ERR_DLT_PATCHFAILED:
return _("delta patch failed");
/* Groups */
case PM_ERR_GRP_NOT_FOUND:
return _("group not found");
/* Dependencies */
case PM_ERR_UNSATISFIED_DEPS:
return _("could not satisfy dependencies");
@@ -137,20 +132,25 @@ const char SYMEXPORT *alpm_strerror(int err)
case PM_ERR_FILE_CONFLICTS:
return _("conflicting files");
/* Miscellaenous */
case PM_ERR_USER_ABORT:
return _("user aborted the operation");
case PM_ERR_INTERNAL_ERROR:
return _("internal error");
case PM_ERR_LIBARCHIVE_ERROR:
return _("libarchive error");
case PM_ERR_PKG_HOLD:
/* TODO wow this is not descriptive at all... what does this mean? */
return _("not confirmed");
case PM_ERR_RETRIEVE:
return _("failed to retrieve some files");
case PM_ERR_INVALID_REGEX:
return _("invalid regular expression");
/* Downloading */
case PM_ERR_CONNECT_FAILED:
return _("connection to remote host failed");
/* Errors from external libraries- our own wrapper error */
case PM_ERR_LIBARCHIVE:
/* it would be nice to use archive_error_string() here, but that
* requires the archive struct, so we can't. Just use a generic
* error string instead. */
return _("libarchive error");
case PM_ERR_LIBFETCH:
#if defined(INTERNAL_DOWNLOAD)
return fetchLastErrString;
#else
/* obviously shouldn't get here... */
return _("download library error");
#endif
case PM_ERR_EXTERNAL_DOWNLOAD:
return _("error invoking external downloader");
/* Unknown error! */
default:
return _("unexpected error");

59
lib/libalpm/graph.h Normal file
View File

@@ -0,0 +1,59 @@
/*
* graph.h - helpful graph structure and setup/teardown methods
*
* Copyright (c) 2006-2009 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
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <sys/types.h> /* off_t */
#include "alpm_list.h"
#include "util.h" /* MALLOC() */
#include "alpm.h"
struct __pmgraph_t {
char state; /* 0: untouched, -1: entered, other: leaving time */
void *data;
off_t weight; /* weight of the node */
struct __pmgraph_t *parent; /* where did we come from? */
alpm_list_t *children;
alpm_list_t *childptr; /* points to a child in children list */
};
typedef struct __pmgraph_t pmgraph_t;
static pmgraph_t *_alpm_graph_new(void)
{
pmgraph_t *graph = NULL;
MALLOC(graph, sizeof(pmgraph_t), RET_ERR(PM_ERR_MEMORY, NULL));
if(graph) {
graph->state = 0;
graph->data = NULL;
graph->parent = NULL;
graph->children = NULL;
graph->childptr = NULL;
}
return(graph);
}
static void _alpm_graph_free(void *data)
{
pmgraph_t *graph = data;
alpm_list_free(graph->children);
free(graph);
}

View File

@@ -1,7 +1,8 @@
/*
* group.c
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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
* it under the terms of the GNU General Public License as published by
@@ -27,17 +28,17 @@
#include "group.h"
#include "alpm_list.h"
#include "util.h"
#include "error.h"
#include "log.h"
#include "alpm.h"
pmgrp_t *_alpm_grp_new()
pmgrp_t *_alpm_grp_new(const char *name)
{
pmgrp_t* grp;
ALPM_LOG_FUNC;
CALLOC(grp, 1, sizeof(pmgrp_t), RET_ERR(PM_ERR_MEMORY, NULL));
STRDUP(grp->name, name, RET_ERR(PM_ERR_MEMORY, NULL));
return(grp);
}
@@ -50,20 +51,12 @@ void _alpm_grp_free(pmgrp_t *grp)
return;
}
FREELIST(grp->packages);
FREE(grp->name);
/* do NOT free the contents of the list, just the nodes */
alpm_list_free(grp->packages);
FREE(grp);
}
/* Helper function for sorting groups
*/
int _alpm_grp_cmp(const void *g1, const void *g2)
{
pmgrp_t *grp1 = (pmgrp_t *)g1;
pmgrp_t *grp2 = (pmgrp_t *)g2;
return(strcmp(grp1->name, grp2->name));
}
const char SYMEXPORT *alpm_grp_get_name(const pmgrp_t *grp)
{
ALPM_LOG_FUNC;
@@ -74,7 +67,7 @@ const char SYMEXPORT *alpm_grp_get_name(const pmgrp_t *grp)
return grp->name;
}
const alpm_list_t SYMEXPORT *alpm_grp_get_pkgs(const pmgrp_t *grp)
alpm_list_t SYMEXPORT *alpm_grp_get_pkgs(const pmgrp_t *grp)
{
ALPM_LOG_FUNC;

View File

@@ -1,7 +1,8 @@
/*
* group.h
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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
* it under the terms of the GNU General Public License as published by
@@ -19,19 +20,17 @@
#ifndef _ALPM_GROUP_H
#define _ALPM_GROUP_H
/* Groups */
#define GRP_NAME_LEN 256
#include "alpm.h"
struct __pmgrp_t {
char name[GRP_NAME_LEN];
alpm_list_t *packages; /* List of strings */
/** group name */
char *name;
/** list of pmpkg_t packages */
alpm_list_t *packages;
};
pmgrp_t *_alpm_grp_new(void);
pmgrp_t *_alpm_grp_new(const char *name);
void _alpm_grp_free(pmgrp_t *grp);
int _alpm_grp_cmp(const void *g1, const void *g2);
#endif /* _ALPM_GROUP_H */

View File

@@ -1,7 +1,8 @@
/*
* handle.c
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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>
*
@@ -23,7 +24,6 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <limits.h>
#include <sys/types.h>
#include <syslog.h>
@@ -36,10 +36,8 @@
#include "alpm_list.h"
#include "util.h"
#include "log.h"
#include "error.h"
#include "trans.h"
#include "alpm.h"
#include "server.h"
/* global var for handle (private to libalpm) */
pmhandle_t *handle = NULL;
@@ -51,18 +49,7 @@ pmhandle_t *_alpm_handle_new()
ALPM_LOG_FUNC;
CALLOC(handle, 1, sizeof(pmhandle_t), RET_ERR(PM_ERR_MEMORY, NULL));
handle->lckfd = -1;
handle->logstream = NULL;
/* see if we're root or not */
handle->uid = geteuid();
handle->root = NULL;
handle->dbpath = NULL;
handle->cachedirs = NULL;
handle->lockfile = NULL;
handle->logfile = NULL;
handle->usedelta = 0;
return(handle);
}
@@ -92,12 +79,10 @@ void _alpm_handle_free(pmhandle_t *handle)
FREELIST(handle->cachedirs);
FREE(handle->logfile);
FREE(handle->lockfile);
FREE(handle->xfercommand);
FREELIST(handle->dbs_sync);
FREELIST(handle->noupgrade);
FREELIST(handle->noextract);
FREELIST(handle->ignorepkg);
FREELIST(handle->holdpkg);
FREELIST(handle->ignoregrp);
FREE(handle);
}
@@ -120,6 +105,24 @@ alpm_cb_download SYMEXPORT alpm_option_get_dlcb()
return handle->dlcb;
}
alpm_cb_fetch SYMEXPORT alpm_option_get_fetchcb()
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return NULL;
}
return handle->fetchcb;
}
alpm_cb_totaldl SYMEXPORT alpm_option_get_totaldlcb()
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return NULL;
}
return handle->totaldlcb;
}
const char SYMEXPORT *alpm_option_get_root()
{
if (handle == NULL) {
@@ -201,15 +204,6 @@ alpm_list_t SYMEXPORT *alpm_option_get_ignorepkgs()
return handle->ignorepkg;
}
alpm_list_t SYMEXPORT *alpm_option_get_holdpkgs()
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return NULL;
}
return handle->holdpkg;
}
alpm_list_t SYMEXPORT *alpm_option_get_ignoregrps()
{
if (handle == NULL) {
@@ -219,15 +213,6 @@ alpm_list_t SYMEXPORT *alpm_option_get_ignoregrps()
return handle->ignoregrp;
}
const char SYMEXPORT *alpm_option_get_xfercommand()
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return NULL;
}
return handle->xfercommand;
}
unsigned short SYMEXPORT alpm_option_get_nopassiveftp()
{
if (handle == NULL) {
@@ -273,6 +258,24 @@ void SYMEXPORT alpm_option_set_dlcb(alpm_cb_download cb)
handle->dlcb = cb;
}
void SYMEXPORT alpm_option_set_fetchcb(alpm_cb_fetch cb)
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return;
}
handle->fetchcb = cb;
}
void SYMEXPORT alpm_option_set_totaldlcb(alpm_cb_totaldl cb)
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return;
}
handle->totaldlcb = cb;
}
int SYMEXPORT alpm_option_set_root(const char *root)
{
struct stat st;
@@ -292,6 +295,7 @@ int SYMEXPORT alpm_option_set_root(const char *root)
realroot = calloc(PATH_MAX+1, sizeof(char));
if(!realpath(root, realroot)) {
FREE(realroot);
pm_errno = PM_ERR_NOT_A_DIR;
return(-1);
}
@@ -386,7 +390,7 @@ void SYMEXPORT alpm_option_set_cachedirs(alpm_list_t *cachedirs)
int SYMEXPORT alpm_option_remove_cachedir(const char *cachedir)
{
void *vdata = NULL;
char *vdata = NULL;
char *newcachedir;
size_t cachedirlen;
/* verify cachedir ends in a '/' */
@@ -397,8 +401,7 @@ int SYMEXPORT alpm_option_remove_cachedir(const char *cachedir)
newcachedir = calloc(cachedirlen + 1, sizeof(char));
strncpy(newcachedir, cachedir, cachedirlen);
newcachedir[cachedirlen-1] = '/';
handle->cachedirs = alpm_list_remove(handle->cachedirs, newcachedir,
_alpm_str_cmp, &vdata);
handle->cachedirs = alpm_list_remove_str(handle->cachedirs, newcachedir, &vdata);
FREE(newcachedir);
if(vdata != NULL) {
FREE(vdata);
@@ -427,6 +430,7 @@ int SYMEXPORT alpm_option_set_logfile(const char *logfile)
}
if(handle->logstream) {
fclose(handle->logstream);
handle->logstream = NULL;
}
_alpm_log(PM_LOG_DEBUG, "option 'logfile' = %s\n", handle->logfile);
return(0);
@@ -450,9 +454,8 @@ void SYMEXPORT alpm_option_set_noupgrades(alpm_list_t *noupgrade)
int SYMEXPORT alpm_option_remove_noupgrade(const char *pkg)
{
void *vdata = NULL;
handle->noupgrade = alpm_list_remove(handle->noupgrade, pkg,
_alpm_str_cmp, &vdata);
char *vdata = NULL;
handle->noupgrade = alpm_list_remove_str(handle->noupgrade, pkg, &vdata);
if(vdata != NULL) {
FREE(vdata);
return(1);
@@ -473,9 +476,8 @@ void SYMEXPORT alpm_option_set_noextracts(alpm_list_t *noextract)
int SYMEXPORT alpm_option_remove_noextract(const char *pkg)
{
void *vdata = NULL;
handle->noextract = alpm_list_remove(handle->noextract, pkg,
_alpm_str_cmp, &vdata);
char *vdata = NULL;
handle->noextract = alpm_list_remove_str(handle->noextract, pkg, &vdata);
if(vdata != NULL) {
FREE(vdata);
return(1);
@@ -496,32 +498,8 @@ void SYMEXPORT alpm_option_set_ignorepkgs(alpm_list_t *ignorepkgs)
int SYMEXPORT alpm_option_remove_ignorepkg(const char *pkg)
{
void *vdata = NULL;
handle->ignorepkg = alpm_list_remove(handle->ignorepkg, pkg,
_alpm_str_cmp, &vdata);
if(vdata != NULL) {
FREE(vdata);
return(1);
}
return(0);
}
void SYMEXPORT alpm_option_add_holdpkg(const char *pkg)
{
handle->holdpkg = alpm_list_add(handle->holdpkg, strdup(pkg));
}
void SYMEXPORT alpm_option_set_holdpkgs(alpm_list_t *holdpkgs)
{
if(handle->holdpkg) FREELIST(handle->holdpkg);
if(holdpkgs) handle->holdpkg = holdpkgs;
}
int SYMEXPORT alpm_option_remove_holdpkg(const char *pkg)
{
void *vdata = NULL;
handle->holdpkg = alpm_list_remove(handle->holdpkg, pkg,
_alpm_str_cmp, &vdata);
char *vdata = NULL;
handle->ignorepkg = alpm_list_remove_str(handle->ignorepkg, pkg, &vdata);
if(vdata != NULL) {
FREE(vdata);
return(1);
@@ -542,9 +520,8 @@ void SYMEXPORT alpm_option_set_ignoregrps(alpm_list_t *ignoregrps)
int SYMEXPORT alpm_option_remove_ignoregrp(const char *grp)
{
void *vdata = NULL;
handle->ignoregrp = alpm_list_remove(handle->ignoregrp, grp,
_alpm_str_cmp, &vdata);
char *vdata = NULL;
handle->ignoregrp = alpm_list_remove_str(handle->ignoregrp, grp, &vdata);
if(vdata != NULL) {
FREE(vdata);
return(1);
@@ -552,12 +529,6 @@ int SYMEXPORT alpm_option_remove_ignoregrp(const char *grp)
return(0);
}
void SYMEXPORT alpm_option_set_xfercommand(const char *cmd)
{
if(handle->xfercommand) FREE(handle->xfercommand);
if(cmd) handle->xfercommand = strdup(cmd);
}
void SYMEXPORT alpm_option_set_nopassiveftp(unsigned short nopasv)
{
handle->nopassiveftp = nopasv;

View File

@@ -1,7 +1,8 @@
/*
* handle.h
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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
* it under the terms of the GNU General Public License as published by
@@ -30,7 +31,6 @@
typedef struct _pmhandle_t {
/* internal usage */
uid_t uid; /* current UID */ /* TODO is this used? */
pmdb_t *db_local; /* local db pointer */
alpm_list_t *dbs_sync; /* List of (pmdb_t *) */
FILE *logstream; /* log file stream pointer */
@@ -40,6 +40,8 @@ typedef struct _pmhandle_t {
/* callback functions */
alpm_cb_log logcb; /* Log callback function */
alpm_cb_download dlcb; /* Download callback function */
alpm_cb_totaldl totaldlcb; /* Total download callback function */
alpm_cb_fetch fetchcb; /* Download file callback function */
/* filesystem paths */
char *root; /* Root path, default '/' */
@@ -50,15 +52,13 @@ typedef struct _pmhandle_t {
/* package lists */
alpm_list_t *noupgrade; /* List of packages NOT to be upgraded */
alpm_list_t *noextract; /* List of packages NOT to extract */ /*TODO is this used?*/
alpm_list_t *noextract; /* List of files NOT to extract */
alpm_list_t *ignorepkg; /* List of packages to ignore */
alpm_list_t *holdpkg; /* List of packages which 'hold' pacman */
alpm_list_t *ignoregrp; /* List of groups to ignore */
/* options */
unsigned short usesyslog; /* Use syslog instead of logfile? */ /* TODO move to frontend */
unsigned short nopassiveftp; /* Don't use PASV ftp connections */
char *xfercommand; /* External download command */
unsigned short usedelta; /* Download deltas if possible */
} pmhandle_t;

View File

@@ -1,7 +1,8 @@
/*
* log.c
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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
* it under the terms of the GNU General Public License as published by
@@ -30,7 +31,6 @@
#include "log.h"
#include "handle.h"
#include "util.h"
#include "error.h"
#include "alpm.h"
/** \addtogroup alpm_log Logging Functions

View File

@@ -1,7 +1,8 @@
/*
* log.h
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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
* it under the terms of the GNU General Public License as published by

View File

@@ -3,18 +3,18 @@
*
* Copyright (C) 2006-2007 Christophe Devine
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License, version 2.1 as published by the Free Software Foundation.
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* <http://www.gnu.org/licenses/>.
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* The MD5 algorithm was designed by Ron Rivest in 1991.
@@ -25,8 +25,9 @@
* Pacman Notes:
*
* Taken from the XySSL project at www.xyssl.org under terms of the
* LGPL. This is from version 0.7 of the library, and has been modified
* GPL. This is from version 0.9 of the library, and has been modified
* as following, which may be helpful for future updates:
* * remove "xyssl/config.h" include
* * change include from "xyssl/md5.h" to "md5.h"
* * removal of HMAC code
* * removal of SELF_TEST code
@@ -35,12 +36,9 @@
* int md5_file( char *path, unsigned char *output )
* to
* int md5_file( const char *path, unsigned char *output )
* * various static/inline changes
*/
#ifndef _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_DEPRECATE 1
#endif
#include <string.h>
#include <stdio.h>
@@ -49,8 +47,8 @@
/*
* 32-bit integer manipulation macros (little endian)
*/
#ifndef GET_UINT32_LE
#define GET_UINT32_LE(n,b,i) \
#ifndef GET_ULONG_LE
#define GET_ULONG_LE(n,b,i) \
{ \
(n) = ( (unsigned long) (b)[(i) ] ) \
| ( (unsigned long) (b)[(i) + 1] << 8 ) \
@@ -59,8 +57,8 @@
}
#endif
#ifndef PUT_UINT32_LE
#define PUT_UINT32_LE(n,b,i) \
#ifndef PUT_ULONG_LE
#define PUT_ULONG_LE(n,b,i) \
{ \
(b)[(i) ] = (unsigned char) ( (n) ); \
(b)[(i) + 1] = (unsigned char) ( (n) >> 8 ); \
@@ -87,22 +85,22 @@ static inline void md5_process( md5_context *ctx, unsigned char data[64] )
{
unsigned long X[16], A, B, C, D;
GET_UINT32_LE( X[ 0], data, 0 );
GET_UINT32_LE( X[ 1], data, 4 );
GET_UINT32_LE( X[ 2], data, 8 );
GET_UINT32_LE( X[ 3], data, 12 );
GET_UINT32_LE( X[ 4], data, 16 );
GET_UINT32_LE( X[ 5], data, 20 );
GET_UINT32_LE( X[ 6], data, 24 );
GET_UINT32_LE( X[ 7], data, 28 );
GET_UINT32_LE( X[ 8], data, 32 );
GET_UINT32_LE( X[ 9], data, 36 );
GET_UINT32_LE( X[10], data, 40 );
GET_UINT32_LE( X[11], data, 44 );
GET_UINT32_LE( X[12], data, 48 );
GET_UINT32_LE( X[13], data, 52 );
GET_UINT32_LE( X[14], data, 56 );
GET_UINT32_LE( X[15], data, 60 );
GET_ULONG_LE( X[ 0], data, 0 );
GET_ULONG_LE( X[ 1], data, 4 );
GET_ULONG_LE( X[ 2], data, 8 );
GET_ULONG_LE( X[ 3], data, 12 );
GET_ULONG_LE( X[ 4], data, 16 );
GET_ULONG_LE( X[ 5], data, 20 );
GET_ULONG_LE( X[ 6], data, 24 );
GET_ULONG_LE( X[ 7], data, 28 );
GET_ULONG_LE( X[ 8], data, 32 );
GET_ULONG_LE( X[ 9], data, 36 );
GET_ULONG_LE( X[10], data, 40 );
GET_ULONG_LE( X[11], data, 44 );
GET_ULONG_LE( X[12], data, 48 );
GET_ULONG_LE( X[13], data, 52 );
GET_ULONG_LE( X[14], data, 56 );
GET_ULONG_LE( X[15], data, 60 );
#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))
@@ -261,7 +259,7 @@ static unsigned char md5_padding[64] =
/*
* MD5 final digest
*/
static inline void md5_finish( md5_context *ctx, unsigned char *output )
static inline void md5_finish( md5_context *ctx, unsigned char output[16] )
{
unsigned long last, padn;
unsigned long high, low;
@@ -271,8 +269,8 @@ static inline void md5_finish( md5_context *ctx, unsigned char *output )
| ( ctx->total[1] << 3 );
low = ( ctx->total[0] << 3 );
PUT_UINT32_LE( low, msglen, 0 );
PUT_UINT32_LE( high, msglen, 4 );
PUT_ULONG_LE( low, msglen, 0 );
PUT_ULONG_LE( high, msglen, 4 );
last = ctx->total[0] & 0x3F;
padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last );
@@ -280,17 +278,16 @@ static inline void md5_finish( md5_context *ctx, unsigned char *output )
md5_update( ctx, (unsigned char *) md5_padding, padn );
md5_update( ctx, msglen, 8 );
PUT_UINT32_LE( ctx->state[0], output, 0 );
PUT_UINT32_LE( ctx->state[1], output, 4 );
PUT_UINT32_LE( ctx->state[2], output, 8 );
PUT_UINT32_LE( ctx->state[3], output, 12 );
PUT_ULONG_LE( ctx->state[0], output, 0 );
PUT_ULONG_LE( ctx->state[1], output, 4 );
PUT_ULONG_LE( ctx->state[2], output, 8 );
PUT_ULONG_LE( ctx->state[3], output, 12 );
}
/*
* Output = MD5( input buffer )
* output = MD5( input buffer )
*/
void md5( unsigned char *input, int ilen,
unsigned char *output )
void md5( unsigned char *input, int ilen, unsigned char output[16] )
{
md5_context ctx;
@@ -302,9 +299,9 @@ void md5( unsigned char *input, int ilen,
}
/*
* Output = MD5( file contents )
* output = MD5( file contents )
*/
int md5_file( const char *path, unsigned char *output )
int md5_file( const char *path, unsigned char output[16] )
{
FILE *f;
size_t n;

View File

@@ -3,29 +3,24 @@
*
* Copyright (C) 2006-2007 Christophe Devine
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License, version 2.1 as published by the Free Software Foundation.
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* <http://www.gnu.org/licenses/>.
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _MD5_H
#define _MD5_H
#ifdef __cplusplus
extern "C" {
#endif
/**
* \internal
* \brief MD5 context structure
*/
typedef struct
@@ -37,18 +32,15 @@ typedef struct
md5_context;
/**
* \internal
* \brief Output = MD5( input buffer )
*
* \param input buffer holding the data
* \param ilen length of the input data
* \param output MD5 checksum result
*/
void md5( unsigned char *input, int ilen,
unsigned char *output );
void md5( unsigned char *input, int ilen, unsigned char output[16] );
/**
* \internal
* \brief Output = MD5( file contents )
*
* \param path input file name
@@ -57,10 +49,6 @@ void md5( unsigned char *input, int ilen,
* \return 0 if successful, 1 if fopen failed,
* or 2 if fread failed
*/
int md5_file( const char *path, unsigned char *output );
#ifdef __cplusplus
}
#endif
int md5_file( const char *path, unsigned char output[16] );
#endif /* md5.h */

View File

@@ -1,7 +1,8 @@
/*
* package.c
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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>
* Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org>
@@ -30,8 +31,6 @@
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <locale.h> /* setlocale */
/* libarchive */
#include <archive.h>
@@ -42,7 +41,6 @@
#include "alpm_list.h"
#include "log.h"
#include "util.h"
#include "error.h"
#include "db.h"
#include "cache.h"
#include "delta.h"
@@ -54,39 +52,13 @@
* @{
*/
/** Create a package from a file.
* @param filename location of the package tarball
* @param full whether to stop the load after metadata is read or continue
* through the full archive
* @param pkg address of the package pointer
* @return 0 on success, -1 on error (pm_errno is set accordingly)
*/
int SYMEXPORT alpm_pkg_load(const char *filename, unsigned short full,
pmpkg_t **pkg)
{
_alpm_log(PM_LOG_FUNCTION, "enter alpm_pkg_load\n");
/* Sanity checks */
ASSERT(filename != NULL && strlen(filename) != 0,
RET_ERR(PM_ERR_WRONG_ARGS, -1));
ASSERT(pkg != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1));
*pkg = _alpm_pkg_load(filename, full);
if(*pkg == NULL) {
/* pm_errno is set by pkg_load */
return(-1);
}
return(0);
}
/** Free a package.
* @param pkg package pointer to free
* @return 0 on success, -1 on error (pm_errno is set accordingly)
*/
int SYMEXPORT alpm_pkg_free(pmpkg_t *pkg)
{
_alpm_log(PM_LOG_FUNCTION, "enter alpm_pkg_free\n");
ALPM_LOG_FUNC;
ASSERT(pkg != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1));
@@ -105,8 +77,7 @@ int SYMEXPORT alpm_pkg_free(pmpkg_t *pkg)
int SYMEXPORT alpm_pkg_checkmd5sum(pmpkg_t *pkg)
{
char *fpath;
char *md5sum = NULL;
int retval = 0;
int retval;
ALPM_LOG_FUNC;
@@ -116,44 +87,19 @@ int SYMEXPORT alpm_pkg_checkmd5sum(pmpkg_t *pkg)
ASSERT(pkg->origin_data.db != handle->db_local, RET_ERR(PM_ERR_PKG_INVALID, -1));
fpath = _alpm_filecache_find(alpm_pkg_get_filename(pkg));
md5sum = alpm_get_md5sum(fpath);
if(md5sum == NULL) {
_alpm_log(PM_LOG_ERROR, _("could not get md5sum for package %s-%s\n"),
alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg));
pm_errno = PM_ERR_NOT_A_FILE;
retval = _alpm_test_md5sum(fpath, alpm_pkg_get_md5sum(pkg));
if(retval == 0) {
return(0);
} else if (retval == 1) {
pm_errno = PM_ERR_PKG_INVALID;
retval = -1;
} else {
if(strcmp(md5sum, alpm_pkg_get_md5sum(pkg)) == 0) {
_alpm_log(PM_LOG_DEBUG, "md5sums for package %s-%s match\n",
alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg));
} else {
_alpm_log(PM_LOG_ERROR, _("md5sums do not match for package %s-%s\n"),
alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg));
pm_errno = PM_ERR_PKG_INVALID;
retval = -1;
}
}
FREE(fpath);
FREE(md5sum);
return(retval);
}
/** Compare versions.
* @param ver1 first version
* @param ver2 secont version
* @return postive, 0 or negative if ver1 is less, equal or more
* than ver2, respectively.
*/
int SYMEXPORT alpm_pkg_vercmp(const char *ver1, const char *ver2)
{
ALPM_LOG_FUNC;
return(_alpm_versioncmp(ver1, ver2));
}
const char SYMEXPORT *alpm_pkg_get_filename(pmpkg_t *pkg)
{
ALPM_LOG_FUNC;
@@ -162,18 +108,8 @@ const char SYMEXPORT *alpm_pkg_get_filename(pmpkg_t *pkg)
ASSERT(handle != NULL, return(NULL));
ASSERT(pkg != NULL, return(NULL));
if(!strlen(pkg->filename)) {
/* construct the file name, it's not in the desc file */
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
}
if(pkg->arch && strlen(pkg->arch) > 0) {
snprintf(pkg->filename, PKG_FILENAME_LEN, "%s-%s-%s" PKGEXT,
pkg->name, pkg->version, pkg->arch);
} else {
snprintf(pkg->filename, PKG_FILENAME_LEN, "%s-%s" PKGEXT,
pkg->name, pkg->version);
}
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
}
return pkg->filename;
@@ -181,29 +117,13 @@ const char SYMEXPORT *alpm_pkg_get_filename(pmpkg_t *pkg)
const char SYMEXPORT *alpm_pkg_get_name(pmpkg_t *pkg)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(pkg != NULL, return(NULL));
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_BASE)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_BASE);
}
return pkg->name;
}
const char SYMEXPORT *alpm_pkg_get_version(pmpkg_t *pkg)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(pkg != NULL, return(NULL));
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_BASE)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_BASE);
}
return pkg->version;
}
@@ -305,7 +225,7 @@ const char SYMEXPORT *alpm_pkg_get_arch(pmpkg_t *pkg)
return pkg->arch;
}
unsigned long SYMEXPORT alpm_pkg_get_size(pmpkg_t *pkg)
off_t SYMEXPORT alpm_pkg_get_size(pmpkg_t *pkg)
{
ALPM_LOG_FUNC;
@@ -319,7 +239,7 @@ unsigned long SYMEXPORT alpm_pkg_get_size(pmpkg_t *pkg)
return pkg->size;
}
unsigned long SYMEXPORT alpm_pkg_get_isize(pmpkg_t *pkg)
off_t SYMEXPORT alpm_pkg_get_isize(pmpkg_t *pkg)
{
ALPM_LOG_FUNC;
@@ -375,6 +295,20 @@ alpm_list_t SYMEXPORT *alpm_pkg_get_groups(pmpkg_t *pkg)
return pkg->groups;
}
unsigned short SYMEXPORT alpm_pkg_has_force(pmpkg_t *pkg)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(handle != NULL, return(-1));
ASSERT(pkg != NULL, return(-1));
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
}
return pkg->force;
}
alpm_list_t SYMEXPORT *alpm_pkg_get_depends(pmpkg_t *pkg)
{
ALPM_LOG_FUNC;
@@ -489,6 +423,22 @@ alpm_list_t SYMEXPORT *alpm_pkg_get_backup(pmpkg_t *pkg)
return pkg->backup;
}
alpm_list_t SYMEXPORT *alpm_pkg_get_removes(pmpkg_t *pkg)
{
ASSERT(pkg != NULL, return(NULL));
return(pkg->removes);
}
pmdb_t SYMEXPORT *alpm_pkg_get_db(pmpkg_t *pkg)
{
/* Sanity checks */
ASSERT(pkg != NULL, return(NULL));
ASSERT(pkg->origin == PKG_FROM_CACHE, return(NULL));
return(pkg->origin_data.db);
}
/**
* Open a package changelog for reading. Similar to fopen in functionality,
* except that the returned 'file stream' could really be from an archive
@@ -519,7 +469,7 @@ void SYMEXPORT *alpm_pkg_changelog_open(pmpkg_t *pkg)
int ret = ARCHIVE_OK;
if((archive = archive_read_new()) == NULL) {
RET_ERR(PM_ERR_LIBARCHIVE_ERROR, NULL);
RET_ERR(PM_ERR_LIBARCHIVE, NULL);
}
archive_read_support_compression_all(archive);
@@ -617,12 +567,10 @@ unsigned short SYMEXPORT alpm_pkg_has_scriptlet(pmpkg_t *pkg)
* @brief Compute the packages requiring a given package.
* @param pkg a package
* @return the list of packages requiring pkg
*
* A depends on B through n depends <=> A listed in B's requiredby n times
* n == 0 or 1 in almost all cases */
*/
alpm_list_t SYMEXPORT *alpm_pkg_compute_requiredby(pmpkg_t *pkg)
{
const alpm_list_t *i, *j;
const alpm_list_t *i;
alpm_list_t *reqs = NULL;
pmdb_t *localdb = alpm_option_get_localdb();
@@ -631,123 +579,188 @@ alpm_list_t SYMEXPORT *alpm_pkg_compute_requiredby(pmpkg_t *pkg)
continue;
}
pmpkg_t *cachepkg = i->data;
const char *cachepkgname = alpm_pkg_get_name(cachepkg);
for(j = alpm_pkg_get_depends(cachepkg); j; j = j->next) {
pmdepend_t *dep = j->data;
if(alpm_depcmp(pkg, dep)) {
_alpm_log(PM_LOG_DEBUG, "adding '%s' in requiredby field for '%s'\n",
cachepkgname, pkg->name);
reqs = alpm_list_add(reqs, strdup(cachepkgname));
}
if(_alpm_dep_edge(cachepkg, pkg)) {
const char *cachepkgname = alpm_pkg_get_name(cachepkg);
reqs = alpm_list_add(reqs, strdup(cachepkgname));
}
}
return(reqs);
}
/** @} */
/* this function was taken from rpm 4.0.4 and rewritten */
int _alpm_versioncmp(const char *a, const char *b)
/** Compare two version strings and determine which one is 'newer'.
* Returns a value comparable to the way strcmp works. Returns 1
* if a is newer than b, 0 if a and b are the same version, or -1
* if b is newer than a.
*
* This function has been adopted from the rpmvercmp function located
* at lib/rpmvercmp.c, and was most recently updated against rpm
* version 4.4.2.3. Small modifications have been made to make it more
* consistent with the libalpm coding style.
*
* Keep in mind that the pkgrel is only compared if it is available
* on both versions handed to this function. For example, comparing
* 1.5-1 and 1.5 will yield 0; comparing 1.5-1 and 1.5-2 will yield
* -1 as expected. This is mainly for supporting versioned dependencies
* that do not include the pkgrel.
*/
int SYMEXPORT alpm_pkg_vercmp(const char *a, const char *b)
{
char str1[64], str2[64];
char oldch1, oldch2;
char *str1, *str2;
char *ptr1, *ptr2;
char *one, *two;
char *rel1 = NULL, *rel2 = NULL;
char oldch1, oldch2;
int is1num, is2num;
int rc;
int isnum;
int ret = 0;
ALPM_LOG_FUNC;
if(!strcmp(a,b)) {
return(0);
/* libalpm added code. ensure our strings are not null */
if(!a) {
if(!b) return(0);
return(-1);
}
if(!b) return(1);
strncpy(str1, a, 64);
str1[63] = 0;
strncpy(str2, b, 64);
str2[63] = 0;
/* easy comparison to see if versions are identical */
if(strcmp(a, b) == 0) return(0);
/* lose the release number */
for(one = str1; *one && *one != '-'; one++);
if(one) {
*one = '\0';
rel1 = ++one;
}
for(two = str2; *two && *two != '-'; two++);
if(two) {
*two = '\0';
rel2 = ++two;
}
str1 = strdup(a);
str2 = strdup(b);
one = str1;
two = str2;
while(*one || *two) {
/* loop through each version segment of str1 and str2 and compare them */
while(*one && *two) {
while(*one && !isalnum((int)*one)) one++;
while(*two && !isalnum((int)*two)) two++;
/* If we ran to the end of either, we are finished with the loop */
if(!(*one && *two)) break;
ptr1 = one;
ptr2 = two;
/* find the next segment for each string */
/* grab first completely alpha or completely numeric segment */
/* leave one and two pointing to the start of the alpha or numeric */
/* segment and walk ptr1 and ptr2 to end of segment */
if(isdigit((int)*ptr1)) {
is1num = 1;
while(*ptr1 && isdigit((int)*ptr1)) ptr1++;
} else {
is1num = 0;
while(*ptr1 && isalpha((int)*ptr1)) ptr1++;
}
if(isdigit((int)*ptr2)) {
is2num = 1;
while(*ptr2 && isdigit((int)*ptr2)) ptr2++;
isnum = 1;
} else {
is2num = 0;
while(*ptr1 && isalpha((int)*ptr1)) ptr1++;
while(*ptr2 && isalpha((int)*ptr2)) ptr2++;
isnum = 0;
}
/* save character at the end of the alpha or numeric segment */
/* so that they can be restored after the comparison */
oldch1 = *ptr1;
*ptr1 = '\0';
oldch2 = *ptr2;
*ptr2 = '\0';
/* see if we ran out of segments on one string */
if(one == ptr1 && two != ptr2) {
return(is2num ? -1 : 1);
}
if(one != ptr1 && two == ptr2) {
return(is1num ? 1 : -1);
/* this cannot happen, as we previously tested to make sure that */
/* the first string has a non-null segment */
if (one == ptr1) {
ret = -1; /* arbitrary */
goto cleanup;
}
/* see if we have a type mismatch (ie, one is alpha and one is digits) */
if(is1num && !is2num) return(1);
if(!is1num && is2num) return(-1);
/* take care of the case where the two version segments are */
/* different types: one numeric, the other alpha (i.e. empty) */
/* numeric segments are always newer than alpha segments */
/* XXX See patch #60884 (and details) from bugzilla #50977. */
if (two == ptr2) {
ret = isnum ? 1 : -1;
goto cleanup;
}
if(is1num) while(*one == '0') one++;
if(is2num) while(*two == '0') two++;
if (isnum) {
/* this used to be done by converting the digit segments */
/* to ints using atoi() - it's changed because long */
/* digit segments can overflow an int - this should fix that. */
rc = strverscmp(one, two);
if(rc) return(rc);
/* throw away any leading zeros - it's a number, right? */
while (*one == '0') one++;
while (*two == '0') two++;
/* whichever number has more digits wins */
if (strlen(one) > strlen(two)) {
ret = 1;
goto cleanup;
}
if (strlen(two) > strlen(one)) {
ret = -1;
goto cleanup;
}
}
/* strcmp will return which one is greater - even if the two */
/* segments are alpha or if they are numeric. don't return */
/* if they are equal because there might be more segments to */
/* compare */
rc = strcmp(one, two);
if (rc) {
ret = rc < 1 ? -1 : 1;
goto cleanup;
}
/* restore character that was replaced by null above */
*ptr1 = oldch1;
*ptr2 = oldch2;
one = ptr1;
*ptr2 = oldch2;
two = ptr2;
/* libalpm added code. check if version strings have hit the pkgrel
* portion. depending on which strings have hit, take correct action.
* this is all based on the premise that we only have one dash in
* the version string, and it separates pkgver from pkgrel. */
if(*ptr1 == '-' && *ptr2 == '-') {
/* no-op, continue comparing since we are equivalent throughout */
} else if(*ptr1 == '-') {
/* ptr1 has hit the pkgrel and ptr2 has not. continue version
* comparison after stripping the pkgrel from ptr1. */
*ptr1 = '\0';
} else if(*ptr2 == '-') {
/* ptr2 has hit the pkgrel and ptr1 has not. continue version
* comparison after stripping the pkgrel from ptr2. */
*ptr2 = '\0';
}
}
if((!*one) && (!*two)) {
/* compare release numbers */
if(rel1 && rel2 && strlen(rel1) && strlen(rel2)) return(_alpm_versioncmp(rel1, rel2));
return(0);
/* this catches the case where all numeric and alpha segments have */
/* compared identically but the segment separating characters were */
/* different */
if ((!*one) && (!*two)) {
ret = 0;
goto cleanup;
}
return(*one ? 1 : -1);
/* the final showdown. we never want a remaining alpha string to
* beat an empty string. the logic is a bit weird, but:
* - if one is empty and two is not an alpha, two is newer.
* - if one is an alpha, two is newer.
* - otherwise one is newer.
* */
if ( ( !*one && !isalpha((int)*two) )
|| isalpha((int)*one) ) {
ret = -1;
} else {
ret = 1;
}
cleanup:
free(str1);
free(str2);
return(ret);
}
/** @} */
pmpkg_t *_alpm_pkg_new(const char *name, const char *version)
pmpkg_t *_alpm_pkg_new(void)
{
pmpkg_t* pkg;
@@ -755,47 +768,55 @@ pmpkg_t *_alpm_pkg_new(const char *name, const char *version)
CALLOC(pkg, 1, sizeof(pmpkg_t), RET_ERR(PM_ERR_MEMORY, NULL));
if(name && name[0] != 0) {
strncpy(pkg->name, name, PKG_NAME_LEN);
} else {
pkg->name[0] = '\0';
}
if(version && version[0] != 0) {
strncpy(pkg->version, version, PKG_VERSION_LEN);
} else {
pkg->version[0] = '\0';
}
return(pkg);
}
pmpkg_t *_alpm_pkg_dup(pmpkg_t *pkg)
{
pmpkg_t* newpkg;
pmpkg_t *newpkg;
alpm_list_t *i;
ALPM_LOG_FUNC;
CALLOC(newpkg, 1, sizeof(pmpkg_t), RET_ERR(PM_ERR_MEMORY, NULL));
memcpy(newpkg, pkg, sizeof(pmpkg_t));
newpkg->licenses = alpm_list_strdup(alpm_pkg_get_licenses(pkg));
newpkg->conflicts = alpm_list_strdup(alpm_pkg_get_conflicts(pkg));
newpkg->files = alpm_list_strdup(alpm_pkg_get_files(pkg));
newpkg->backup = alpm_list_strdup(alpm_pkg_get_backup(pkg));
newpkg->depends = alpm_list_copy_data(alpm_pkg_get_depends(pkg),
sizeof(pmdepend_t));
newpkg->optdepends = alpm_list_strdup(alpm_pkg_get_optdepends(pkg));
newpkg->groups = alpm_list_strdup(alpm_pkg_get_groups(pkg));
newpkg->provides = alpm_list_strdup(alpm_pkg_get_provides(pkg));
newpkg->replaces = alpm_list_strdup(alpm_pkg_get_replaces(pkg));
newpkg->deltas = alpm_list_copy_data(alpm_pkg_get_deltas(pkg),
sizeof(pmdelta_t));
STRDUP(newpkg->filename, pkg->filename, RET_ERR(PM_ERR_MEMORY, newpkg));
STRDUP(newpkg->name, pkg->name, RET_ERR(PM_ERR_MEMORY, newpkg));
STRDUP(newpkg->version, pkg->version, RET_ERR(PM_ERR_MEMORY, newpkg));
STRDUP(newpkg->desc, pkg->desc, RET_ERR(PM_ERR_MEMORY, newpkg));
STRDUP(newpkg->url, pkg->url, RET_ERR(PM_ERR_MEMORY, newpkg));
newpkg->builddate = pkg->builddate;
newpkg->installdate = pkg->installdate;
STRDUP(newpkg->packager, pkg->packager, RET_ERR(PM_ERR_MEMORY, newpkg));
STRDUP(newpkg->md5sum, pkg->md5sum, RET_ERR(PM_ERR_MEMORY, newpkg));
STRDUP(newpkg->arch, pkg->arch, RET_ERR(PM_ERR_MEMORY, newpkg));
newpkg->size = pkg->size;
newpkg->isize = pkg->isize;
newpkg->scriptlet = pkg->scriptlet;
newpkg->force = pkg->force;
newpkg->reason = pkg->reason;
newpkg->licenses = alpm_list_strdup(pkg->licenses);
newpkg->replaces = alpm_list_strdup(pkg->replaces);
newpkg->groups = alpm_list_strdup(pkg->groups);
newpkg->files = alpm_list_strdup(pkg->files);
newpkg->backup = alpm_list_strdup(pkg->backup);
for(i = pkg->depends; i; i = alpm_list_next(i)) {
newpkg->depends = alpm_list_add(newpkg->depends, _alpm_dep_dup(i->data));
}
newpkg->optdepends = alpm_list_strdup(pkg->optdepends);
newpkg->conflicts = alpm_list_strdup(pkg->conflicts);
newpkg->provides = alpm_list_strdup(pkg->provides);
newpkg->deltas = alpm_list_copy_data(pkg->deltas, sizeof(pmdelta_t));
/* internal */
newpkg->origin = pkg->origin;
if(newpkg->origin == PKG_FROM_FILE) {
newpkg->origin_data.file = strdup(pkg->origin_data.file);
} else {
newpkg->origin_data.db = pkg->origin_data.db;
}
newpkg->infolevel = pkg->infolevel;
return(newpkg);
}
@@ -808,48 +829,60 @@ void _alpm_pkg_free(pmpkg_t *pkg)
return;
}
FREE(pkg->filename);
FREE(pkg->name);
FREE(pkg->version);
FREE(pkg->desc);
FREE(pkg->url);
FREE(pkg->packager);
FREE(pkg->md5sum);
FREE(pkg->arch);
FREELIST(pkg->licenses);
FREELIST(pkg->replaces);
FREELIST(pkg->groups);
FREELIST(pkg->files);
FREELIST(pkg->backup);
FREELIST(pkg->depends);
alpm_list_free_inner(pkg->depends, (alpm_list_fn_free)_alpm_dep_free);
alpm_list_free(pkg->depends);
FREELIST(pkg->optdepends);
FREELIST(pkg->conflicts);
FREELIST(pkg->groups);
FREELIST(pkg->provides);
FREELIST(pkg->replaces);
FREELIST(pkg->deltas);
alpm_list_free_inner(pkg->deltas, (alpm_list_fn_free)_alpm_delta_free);
alpm_list_free(pkg->deltas);
alpm_list_free(pkg->delta_path);
alpm_list_free(pkg->removes);
if(pkg->origin == PKG_FROM_FILE) {
FREE(pkg->origin_data.file);
}
FREE(pkg);
}
/* Is pkgB an upgrade for pkgA ? */
int _alpm_pkg_compare_versions(pmpkg_t *local_pkg, pmpkg_t *pkg)
/* Free transaction specific fields */
void _alpm_pkg_free_trans(pmpkg_t *pkg)
{
ALPM_LOG_FUNC;
if(pkg == NULL) {
return;
}
alpm_list_free(pkg->removes);
pkg->removes = NULL;
}
/* Is spkg an upgrade for locapkg? */
int _alpm_pkg_compare_versions(pmpkg_t *spkg, pmpkg_t *localpkg)
{
int cmp = 0;
ALPM_LOG_FUNC;
if(pkg->origin == PKG_FROM_CACHE) {
/* ensure we have the /desc file, which contains the 'force' option */
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
}
cmp = alpm_pkg_vercmp(alpm_pkg_get_version(spkg),
alpm_pkg_get_version(localpkg));
/* compare versions and see if we need to upgrade */
cmp = _alpm_versioncmp(alpm_pkg_get_version(pkg), alpm_pkg_get_version(local_pkg));
if(cmp != 0 && pkg->force) {
if(cmp < 0 && alpm_pkg_has_force(spkg)) {
cmp = 1;
_alpm_log(PM_LOG_WARNING, _("%s: forcing upgrade to version %s\n"),
alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg));
} else if(cmp < 0) {
/* local version is newer */
pmdb_t *db = pkg->origin_data.db;
_alpm_log(PM_LOG_WARNING, _("%s: local (%s) is newer than %s (%s)\n"),
alpm_pkg_get_name(local_pkg), alpm_pkg_get_version(local_pkg),
alpm_db_get_name(db), alpm_pkg_get_version(pkg));
cmp = 0;
}
return(cmp);
@@ -859,269 +892,15 @@ int _alpm_pkg_compare_versions(pmpkg_t *local_pkg, pmpkg_t *pkg)
*/
int _alpm_pkg_cmp(const void *p1, const void *p2)
{
pmpkg_t *pk1 = (pmpkg_t *)p1;
pmpkg_t *pk2 = (pmpkg_t *)p2;
return(strcmp(alpm_pkg_get_name(pk1), alpm_pkg_get_name(pk2)));
}
/* Parses the package description file for the current package
* TODO: this should ALL be in a backend interface (be_files), we should
* be dealing with the abstracted concepts only in this file
* Returns: 0 on success, 1 on error
*
*/
static int parse_descfile(const char *descfile, pmpkg_t *info)
{
FILE* fp = NULL;
char line[PATH_MAX];
char *ptr = NULL;
char *key = NULL;
int linenum = 0;
ALPM_LOG_FUNC;
if((fp = fopen(descfile, "r")) == NULL) {
_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s\n"), descfile, strerror(errno));
return(-1);
}
while(!feof(fp)) {
fgets(line, PATH_MAX, fp);
linenum++;
_alpm_strtrim(line);
if(strlen(line) == 0 || line[0] == '#') {
continue;
}
ptr = line;
key = strsep(&ptr, "=");
if(key == NULL || ptr == NULL) {
_alpm_log(PM_LOG_DEBUG, "%s: syntax error in description file line %d\n",
info->name[0] != '\0' ? info->name : "error", linenum);
} else {
_alpm_strtrim(key);
_alpm_strtrim(ptr);
if(!strcmp(key, "pkgname")) {
strncpy(info->name, ptr, sizeof(info->name));
} else if(!strcmp(key, "pkgver")) {
strncpy(info->version, ptr, sizeof(info->version));
} else if(!strcmp(key, "pkgdesc")) {
strncpy(info->desc, ptr, sizeof(info->desc));
} else if(!strcmp(key, "group")) {
info->groups = alpm_list_add(info->groups, strdup(ptr));
} else if(!strcmp(key, "url")) {
strncpy(info->url, ptr, sizeof(info->url));
} else if(!strcmp(key, "license")) {
info->licenses = alpm_list_add(info->licenses, strdup(ptr));
} else if(!strcmp(key, "builddate")) {
char first = tolower(ptr[0]);
if(first > 'a' && first < 'z') {
struct tm tmp_tm = {0}; //initialize to null incase of failure
setlocale(LC_TIME, "C");
strptime(ptr, "%a %b %e %H:%M:%S %Y", &tmp_tm);
info->builddate = mktime(&tmp_tm);
setlocale(LC_TIME, "");
} else {
info->builddate = atol(ptr);
}
} else if(!strcmp(key, "packager")) {
strncpy(info->packager, ptr, sizeof(info->packager));
} else if(!strcmp(key, "arch")) {
strncpy(info->arch, ptr, sizeof(info->arch));
} else if(!strcmp(key, "size")) {
/* size in the raw package is uncompressed (installed) size */
info->isize = atol(ptr);
} else if(!strcmp(key, "depend")) {
pmdepend_t *dep = alpm_splitdep(ptr);
info->depends = alpm_list_add(info->depends, dep);
} else if(!strcmp(key, "optdepend")) {
info->optdepends = alpm_list_add(info->optdepends, strdup(ptr));
} else if(!strcmp(key, "conflict")) {
info->conflicts = alpm_list_add(info->conflicts, strdup(ptr));
} else if(!strcmp(key, "replaces")) {
info->replaces = alpm_list_add(info->replaces, strdup(ptr));
} else if(!strcmp(key, "provides")) {
info->provides = alpm_list_add(info->provides, strdup(ptr));
} else if(!strcmp(key, "backup")) {
info->backup = alpm_list_add(info->backup, strdup(ptr));
} else {
_alpm_log(PM_LOG_DEBUG, "%s: syntax error in description file line %d\n",
info->name[0] != '\0' ? info->name : "error", linenum);
}
}
line[0] = '\0';
}
fclose(fp);
unlink(descfile);
return(0);
}
/**
* Load a package and create the corresponding pmpkg_t struct.
* @param pkgfile path to the package file
* @param full whether to stop the load after metadata is read or continue
* through the full archive
* @return An information filled pmpkg_t struct
*/
pmpkg_t *_alpm_pkg_load(const char *pkgfile, unsigned short full)
{
int ret = ARCHIVE_OK;
int config = 0;
struct archive *archive;
struct archive_entry *entry;
pmpkg_t *info = NULL;
char *descfile = NULL;
int fd = -1;
struct stat st;
ALPM_LOG_FUNC;
if(pkgfile == NULL || strlen(pkgfile) == 0) {
RET_ERR(PM_ERR_WRONG_ARGS, NULL);
}
if((archive = archive_read_new()) == NULL) {
RET_ERR(PM_ERR_LIBARCHIVE_ERROR, NULL);
}
archive_read_support_compression_all(archive);
archive_read_support_format_all(archive);
if (archive_read_open_filename(archive, pkgfile,
ARCHIVE_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) {
RET_ERR(PM_ERR_PKG_OPEN, NULL);
}
info = _alpm_pkg_new(NULL, NULL);
if(info == NULL) {
archive_read_finish(archive);
RET_ERR(PM_ERR_MEMORY, NULL);
}
if(stat(pkgfile, &st) == 0) {
info->size = st.st_size;
}
/* TODO there is no reason to make temp files to read
* from a libarchive archive, it can be done by reading
* directly from the archive
* See: archive_read_data_into_buffer
* requires changes 'parse_descfile' as well
* */
/* If full is false, only read through the archive until we find our needed
* metadata. If it is true, read through the entire archive, which serves
* as a verfication of integrity and allows us to create the filelist. */
while((ret = archive_read_next_header(archive, &entry)) == ARCHIVE_OK) {
const char *entry_name = archive_entry_pathname(entry);
/* NOTE: we used to look for .FILELIST, but it is easier (and safer) for
* us to just generate this on our own. */
if(strcmp(entry_name, ".PKGINFO") == 0) {
/* extract this file into /tmp. it has info for us */
descfile = strdup("/tmp/alpm_XXXXXX");
fd = mkstemp(descfile);
if(archive_read_data_into_fd(archive, fd) != ARCHIVE_OK) {
_alpm_log(PM_LOG_ERROR, _("error extracting package description file to %s\n"),
descfile);
goto pkg_invalid;
}
/* parse the info file */
if(parse_descfile(descfile, info) == -1) {
_alpm_log(PM_LOG_ERROR, _("could not parse package description file in %s\n"),
pkgfile);
goto pkg_invalid;
}
if(!strlen(info->name)) {
_alpm_log(PM_LOG_ERROR, _("missing package name in %s\n"), pkgfile);
goto pkg_invalid;
}
if(!strlen(info->version)) {
_alpm_log(PM_LOG_ERROR, _("missing package version in %s\n"), pkgfile);
goto pkg_invalid;
}
config = 1;
unlink(descfile);
FREE(descfile);
close(fd);
continue;
} else if(strcmp(entry_name, ".INSTALL") == 0) {
info->scriptlet = 1;
} else if(*entry_name == '.') {
/* for now, ignore all files starting with '.' that haven't
* already been handled (for future possibilities) */
} else {
/* Keep track of all files for filelist generation */
info->files = alpm_list_add(info->files, strdup(entry_name));
}
if(archive_read_data_skip(archive)) {
_alpm_log(PM_LOG_ERROR, _("error while reading package %s: %s\n"),
pkgfile, archive_error_string(archive));
pm_errno = PM_ERR_LIBARCHIVE_ERROR;
goto error;
}
/* if we are not doing a full read, see if we have all we need */
if(!full && config) {
break;
}
}
if(ret != ARCHIVE_EOF && ret != ARCHIVE_OK) { /* An error occured */
_alpm_log(PM_LOG_ERROR, _("error while reading package %s: %s\n"),
pkgfile, archive_error_string(archive));
pm_errno = PM_ERR_LIBARCHIVE_ERROR;
goto error;
}
if(!config) {
_alpm_log(PM_LOG_ERROR, _("missing package metadata in %s\n"), pkgfile);
goto error;
}
archive_read_finish(archive);
/* internal fields for package struct */
info->origin = PKG_FROM_FILE;
info->origin_data.file = strdup(pkgfile);
if(full) {
/* "checking for conflicts" requires a sorted list, so we ensure that here */
_alpm_log(PM_LOG_DEBUG, "sorting package filelist for %s\n", pkgfile);
info->files = alpm_list_msort(info->files, alpm_list_count(info->files),
_alpm_str_cmp);
info->infolevel = INFRQ_ALL;
} else {
/* get rid of any partial filelist we may have collected, as it is invalid */
FREELIST(info->files);
info->infolevel = INFRQ_BASE | INFRQ_DESC | INFRQ_DEPENDS;
}
return(info);
pkg_invalid:
pm_errno = PM_ERR_PKG_INVALID;
if(descfile) {
unlink(descfile);
FREE(descfile);
}
if(fd != -1) {
close(fd);
}
error:
_alpm_pkg_free(info);
archive_read_finish(archive);
return(NULL);
pmpkg_t *pkg1 = (pmpkg_t *)p1;
pmpkg_t *pkg2 = (pmpkg_t *)p2;
return(strcmp(alpm_pkg_get_name(pkg1), alpm_pkg_get_name(pkg2)));
}
/* Test for existence of a package in a alpm_list_t*
* of pmpkg_t*
*/
pmpkg_t *_alpm_pkg_find(const char *needle, alpm_list_t *haystack)
pmpkg_t *_alpm_pkg_find(alpm_list_t *haystack, const char *needle)
{
alpm_list_t *lp;

View File

@@ -1,7 +1,8 @@
/*
* package.h
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2006-2009 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>
* Copyright (c) 2005, 2006 by Christian Hamar <krics@linuxforum.hu>
@@ -23,7 +24,8 @@
#ifndef _ALPM_PACKAGE_H
#define _ALPM_PACKAGE_H
#include <time.h>
#include <sys/types.h> /* off_t */
#include <time.h> /* time_t */
#include "alpm.h"
#include "db.h"
@@ -33,32 +35,20 @@ typedef enum _pmpkgfrom_t {
PKG_FROM_FILE
} pmpkgfrom_t;
/* Packages */
#define PKG_FILENAME_LEN 512
#define PKG_NAME_LEN 256
#define PKG_VERSION_LEN 64
#define PKG_FULLNAME_LEN (PKG_NAME_LEN + PKG_VERSION_LEN)
#define PKG_DESC_LEN 512
#define PKG_URL_LEN 256
#define PKG_DATE_LEN 32
#define PKG_TYPE_LEN 32
#define PKG_PACKAGER_LEN 64
#define PKG_MD5SUM_LEN 33
#define PKG_ARCH_LEN 32
struct __pmpkg_t {
char filename[PKG_FILENAME_LEN];
char name[PKG_NAME_LEN];
char version[PKG_VERSION_LEN];
char desc[PKG_DESC_LEN];
char url[PKG_URL_LEN];
char *filename;
char *name;
char *version;
char *desc;
char *url;
time_t builddate;
time_t installdate;
char packager[PKG_PACKAGER_LEN];
char md5sum[PKG_MD5SUM_LEN];
char arch[PKG_ARCH_LEN];
unsigned long size;
unsigned long isize;
char *packager;
char *md5sum;
char *arch;
off_t size;
off_t isize;
off_t download_size;
unsigned short scriptlet;
unsigned short force;
pmpkgreason_t reason;
@@ -72,6 +62,8 @@ struct __pmpkg_t {
alpm_list_t *conflicts;
alpm_list_t *provides;
alpm_list_t *deltas;
alpm_list_t *delta_path;
alpm_list_t *removes; /* in transaction targets only */
/* internal */
pmpkgfrom_t origin;
/* Replaced 'void *data' with this union as follows:
@@ -85,14 +77,13 @@ struct __pmpkg_t {
pmdbinfrq_t infolevel;
};
int _alpm_versioncmp(const char *a, const char *b);
pmpkg_t* _alpm_pkg_new(const char *name, const char *version);
pmpkg_t* _alpm_pkg_new(void);
pmpkg_t *_alpm_pkg_dup(pmpkg_t *pkg);
void _alpm_pkg_free(pmpkg_t *pkg);
void _alpm_pkg_free_trans(pmpkg_t *pkg);
int _alpm_pkg_cmp(const void *p1, const void *p2);
int _alpm_pkg_compare_versions(pmpkg_t *local_pkg, pmpkg_t *pkg);
pmpkg_t *_alpm_pkg_load(const char *pkgfile, unsigned short full);
pmpkg_t *_alpm_pkg_find(const char *needle, alpm_list_t *haystack);
pmpkg_t *_alpm_pkg_find(alpm_list_t *haystack, const char *needle);
int _alpm_pkg_should_ignore(pmpkg_t *pkg);
#endif /* _ALPM_PACKAGE_H */

View File

@@ -1,11 +1,16 @@
# Set of available languages.
cs_CZ
cs
de
en_GB
es
fr
hu
it
pl_PL
kk
pl
pt_BR
ru_RU
ro
ru
tr
uk
zh_CN

View File

@@ -8,14 +8,14 @@ subdir = po
top_builddir = ../../../
# These options get passed to xgettext.
XGETTEXT_OPTIONS = \
--keyword=_ --flag=_:1:pass-c-format \
--keyword=N_ --flag=N_:1:pass-c-format
XGETTEXT_OPTIONS = --no-location \
--keyword=_ --flag=_:1:c-format \
--keyword=N_ --flag=N_:1:c-format
# 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 = Judd Vinet <jvinet@zeroflux.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.

View File

@@ -1,23 +1,26 @@
# List of source files with translatable strings
# If a file is commented out, it is because it shouldn't have any
# translatable strings
lib/libalpm/add.c
lib/libalpm/alpm.c
lib/libalpm/alpm_list.c
#lib/libalpm/alpm_list.c
lib/libalpm/backup.c
lib/libalpm/be_files.c
lib/libalpm/be_package.c
lib/libalpm/cache.c
lib/libalpm/conflict.c
lib/libalpm/db.c
lib/libalpm/delta.c
lib/libalpm/deps.c
lib/libalpm/dload.c
lib/libalpm/error.c
lib/libalpm/group.c
lib/libalpm/handle.c
lib/libalpm/log.c
lib/libalpm/md5.c
#lib/libalpm/md5.c
lib/libalpm/package.c
lib/libalpm/remove.c
lib/libalpm/server.c
lib/libalpm/sync.c
lib/libalpm/trans.c
lib/libalpm/util.c

587
lib/libalpm/po/cs.po Normal file
View File

@@ -0,0 +1,587 @@
# translation of cs.po to Čeština
# Copyright (C) YEAR Judd Vinet <jvinet@zeroflux.org>
# This file is distributed under the same license as the PACKAGE package.
#
# Vojtěch Gondžala <vojtech.gondzala@gmail.com>, 2007, 2008, 2009.
msgid ""
msgstr ""
"Project-Id-Version: cs\n"
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
"POT-Creation-Date: 2009-07-27 21:15-0500\n"
"PO-Revision-Date: 2009-07-29 14:14+0200\n"
"Last-Translator: Vojtěch Gondžala <vojtech.gondzala@gmail.com>\n"
"Language-Team: Czech <kde-i18n-doc@kde.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Lokalize 1.0\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
#, c-format
msgid "replacing older version %s-%s by %s in target list\n"
msgstr "v seznamu cílů nahrazena starší verze %s-%s za %s\n"
#, c-format
msgid "skipping %s-%s because newer version %s is in the target list\n"
msgstr "vynechává se %s-%s, protože v seznamu cílů je novější veze %s\n"
#, c-format
msgid "conflicting packages were found in the target list\n"
msgstr "v seznamu cílů byly nalezeny konfliktní balíčky\n"
#, c-format
msgid "you cannot install two conflicting packages at the same time\n"
msgstr "nelze instalovat dva konfliktní balíčky současně\n"
#, c-format
msgid "replacing packages with -U is not supported yet\n"
msgstr "nahrazování balíčků pomocí -U není nyní podporováno\n"
#, c-format
msgid "you can replace packages manually using -Rd and -U\n"
msgstr "balíčky lze nahradit ručně použitím -Rd a -U\n"
#, c-format
msgid ""
"directory permissions differ on %s\n"
"filesystem: %o package: %o\n"
msgstr ""
"přístupová práva adresáře %s se neshodují\n"
"souborový systém: %o balíček: %o\n"
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr "rozbalení: adresář nebyl přepsán souborem %s\n"
#, c-format
msgid "extract: symlink %s does not point to dir\n"
msgstr "rozbalení: symbolický odkaz %s neodkazuje na adresář\n"
#, c-format
msgid "could not extract %s (%s)\n"
msgstr "nelze rozbalit %s (%s)\n"
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "nelze přejmenovat %s na %s (%s)\n"
#, c-format
msgid "%s saved as %s\n"
msgstr "%s byl uložen jako %s\n"
#, c-format
msgid "could not install %s as %s (%s)\n"
msgstr "%s nelze nainstalovat jako %s (%s)\n"
#, c-format
msgid "%s installed as %s\n"
msgstr "%s byl nainstalován jako %s\n"
#, c-format
msgid "extracting %s as %s.pacnew\n"
msgstr "%s byl rozbalen jako %s.pacnew\n"
#, c-format
msgid "could not get current working directory\n"
msgstr "nelze určit aktuální pracovní adresář\n"
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "nastal problém při aktualizaci %s\n"
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "nastal problém při instalaci %s\n"
#, c-format
msgid "could not update database entry %s-%s\n"
msgstr "nelze aktualizovat záznam databáze %s-%s\n"
#, c-format
msgid "could not add entry '%s' in cache\n"
msgstr "nelze přidat položku '%s' do cache\n"
#, c-format
msgid "could not remove database %s\n"
msgstr "nelze odstranit záznam v databázi %s\n"
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "chybný název záznamu v databázi '%s'\n"
#, c-format
msgid "corrupted database entry '%s'\n"
msgstr "poškozený záznam v databázi '%s'\n"
#, c-format
msgid "could not open file %s: %s\n"
msgstr "nelze otevřít soubor %s: %s\n"
#, c-format
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr "databáze %s je nekonzistentní: nesouhlasí jméno balíčku %s\n"
#, c-format
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr "databáze %s je nekonzistentní: nesouhlasí verze balíčku %s\n"
#, c-format
msgid "could not create directory %s: %s\n"
msgstr "nelze změnit adresář %s: %s\n"
#, c-format
msgid "could not parse package description file in %s\n"
msgstr "nelze zpracovat soubor s popisem balíčku v %s\n"
#, c-format
msgid "missing package name in %s\n"
msgstr "chybí jméno balíčku v %s\n"
#, c-format
msgid "missing package version in %s\n"
msgstr "chybí veze balíčku v %s\n"
#, c-format
msgid "error while reading package %s: %s\n"
msgstr "chyba při čtení balíčku %s: %s\n"
#, c-format
msgid "missing package metadata in %s\n"
msgstr "chybí metadata balíčku v %s\n"
#, c-format
msgid "attempt to re-register the 'local' DB\n"
msgstr "pokus o opětovné zaregistrování databáze 'local'\n"
#, c-format
msgid "database path is undefined\n"
msgstr "cesta k databázi není definována\n"
#, c-format
msgid "dependency cycle detected:\n"
msgstr "zjištěna cyklická závislost:\n"
#, c-format
msgid "%s will be removed after its %s dependency\n"
msgstr "%s bude odstraněn po %s, na kterém závisí\n"
#, c-format
msgid "%s will be installed before its %s dependency\n"
msgstr "%s bude nainstalován před %s, na kterém závisí\n"
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "ignoruje se balíček %s-%s\n"
#, c-format
msgid "provider package was selected (%s provides %s)\n"
msgstr "byl vybrán nahrazující balíček (%s poskytuje %s)\n"
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "nelze vyřešit \"%s\", závislost \"%s\"\n"
#, c-format
msgid "url '%s' is invalid\n"
msgstr "URL '%s' je chybná\n"
#, c-format
msgid "url scheme not specified, assuming HTTP\n"
msgstr "schéma URL nedefinováno, předpokládá se HTTP\n"
#, c-format
msgid "disk"
msgstr "disk"
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "selhalo získání souboru '%s' z %s: %s\n"
#, c-format
msgid "cannot resume download, starting over\n"
msgstr "nelze navázat stahování, začíná se znovu\n"
#, c-format
msgid "cannot write to file '%s'\n"
msgstr "nelze zapisovat do souboru '%s'\n"
#, c-format
msgid "error writing to file '%s': %s\n"
msgstr "chyba při zápisu do souboru '%s': %s\n"
#, c-format
msgid "%s appears to be truncated: %jd/%jd bytes\n"
msgstr "%s se zdá být zkrácen: %jd/%jd bytů\n"
#, c-format
msgid "failed to download %s\n"
msgstr "selhalo stahování %s\n"
#, c-format
msgid "out of memory!"
msgstr "nedostatek paměti!"
#, c-format
msgid "unexpected system error"
msgstr "neočekávaná systémová chyba"
#, c-format
msgid "insufficient privileges"
msgstr "nedostatečná oprávnění"
#, c-format
msgid "could not find or read file"
msgstr "nelze nalézt nebo číst soubor"
#, c-format
msgid "could not find or read directory"
msgstr "nelze nalézt nebo číst adresář"
#, c-format
msgid "wrong or NULL argument passed"
msgstr "předán chybný nebo NULL argument"
#, c-format
msgid "library not initialized"
msgstr "knihovna nebyla inicializována"
#, c-format
msgid "library already initialized"
msgstr "knihovna inicializována"
#, c-format
msgid "unable to lock database"
msgstr "nelze zamknout databázi"
#, c-format
msgid "could not open database"
msgstr "nelze otevřít databázi"
#, c-format
msgid "could not create database"
msgstr "nelze vytvořit databázi"
#, c-format
msgid "database not initialized"
msgstr "databáze nebyla inicializována"
#, c-format
msgid "database already registered"
msgstr "databáze zaregistrována"
#, c-format
msgid "could not find database"
msgstr "nelze nalézt databázi"
#, c-format
msgid "could not update database"
msgstr "nelze aktualizovat databázi"
#, c-format
msgid "could not remove database entry"
msgstr "nelze odstranit záznam v databázi"
#, c-format
msgid "invalid url for server"
msgstr "nesprávná URL pro server"
#, c-format
msgid "no servers configured for repository"
msgstr "pro repositář nejsou nastaveny žádné servery"
#, c-format
msgid "transaction already initialized"
msgstr "transakce inicializována"
#, c-format
msgid "transaction not initialized"
msgstr "transakce neinicializována"
#, c-format
msgid "duplicate target"
msgstr "duplicitní cíl"
#, c-format
msgid "transaction not prepared"
msgstr "transakce není připravena"
#, c-format
msgid "transaction aborted"
msgstr "transakce byla zrušena"
#, c-format
msgid "operation not compatible with the transaction type"
msgstr "operace není kompatibilní s typem transakce"
#, c-format
msgid "transaction commit attempt when database is not locked"
msgstr "pokus o uskutečnění transakce v době, kdy není uzamčena databáze"
#, c-format
msgid "could not find or read package"
msgstr "nelze nalézt nebo přečíst balíček"
#, c-format
msgid "operation cancelled due to ignorepkg"
msgstr "operace byla zrušena kvůli ignorovanému balíčku"
#, c-format
msgid "invalid or corrupted package"
msgstr "neplatný nebo poškozený balíček"
#, c-format
msgid "cannot open package file"
msgstr "nelze otevřít soubor balíčku"
#, c-format
msgid "cannot remove all files for package"
msgstr "nelze odstranit všechny soubory balíčku"
#, c-format
msgid "package filename is not valid"
msgstr "jméno souboru balíčku není platné"
#, c-format
msgid "no such repository"
msgstr "takový repositář není nastaven"
#, c-format
msgid "invalid or corrupted delta"
msgstr "neplatný nebo poškozený delta rozdíl"
#, c-format
msgid "delta patch failed"
msgstr "aplikace delta rozdílu selhala"
#, c-format
msgid "could not satisfy dependencies"
msgstr "nelze vyřešit závislosti"
#, c-format
msgid "conflicting dependencies"
msgstr "konfliktní závislosti"
#, c-format
msgid "conflicting files"
msgstr "konfliktní soubory"
#, c-format
msgid "failed to retrieve some files"
msgstr "selhalo získání některých souborů"
#, c-format
msgid "invalid regular expression"
msgstr "nesprávný regulární výraz"
#, c-format
msgid "libarchive error"
msgstr "chyba knihovny libarchive"
#, c-format
msgid "download library error"
msgstr "chyba knihovny pro stahování souborů"
#, c-format
msgid "error invoking external downloader"
msgstr "chyba volání externího programu pro stahování souborů"
#, c-format
msgid "unexpected error"
msgstr "neočekávaná chyba"
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "nelze nalézt %s v databázi -- vynechat\n"
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "nelze odstranit soubor '%s': %s\n"
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "nelze odstranit záznam databáze %s-%s\n"
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "nelze odstranit položku '%s' z cache\n"
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: ignoruje se aktualizace balíčku (%s => %s)\n"
#, c-format
msgid "%s: ignoring package downgrade (%s => %s)\n"
msgstr "%s: ignoruje se ponížení verze balíčku (%s => %s)\n"
#, c-format
msgid "%s: downgrading from version %s to version %s\n"
msgstr "%s: ponížení z verze %s na verzi %s\n"
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr "%s: lokální verze (%s) je novější než v %s (%s)\n"
#, c-format
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
msgstr "ignoruje se náhrada balíčku (%s-%s => %s-%s)\n"
#, c-format
msgid "cannot replace %s by %s\n"
msgstr "nelze nahradit soubor %s souborem %s\n"
#, c-format
msgid "repository '%s' not found\n"
msgstr "repositář '%s' nebyl nalezen\n"
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s je aktuální -- vynechat\n"
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s je aktuální -- přeinstalovat\n"
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "ponížení verze balíčku %s (%s => %s)\n"
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr "zjištěn konflikt nerozlišitelných balíčků\n"
#, c-format
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgstr "'%s' odstraněn ze seznamu cílů, protože je konfliktní s '%s'\n"
#, c-format
msgid "failed to retrieve some files from %s\n"
msgstr "selhalo získání některých souborů z %s\n"
#, c-format
msgid "could not create removal transaction\n"
msgstr "nelze vytvořit transakci pro odstranění\n"
#, c-format
msgid "could not create transaction\n"
msgstr "nelze vytvořit transakci\n"
#, c-format
msgid "could not initialize the removal transaction\n"
msgstr "nelze inicializovat transakci pro odstranění\n"
#, c-format
msgid "could not initialize transaction\n"
msgstr "nelze inicializovat transakci\n"
#, c-format
msgid "could not prepare removal transaction\n"
msgstr "nelze připravit transakci pro odstranění\n"
#, c-format
msgid "could not commit removal transaction\n"
msgstr "nelze provést transakci pro odstranění\n"
#, c-format
msgid "could not commit transaction\n"
msgstr "nelze provést transakci\n"
#, c-format
msgid "could not remove lock file %s\n"
msgstr "nelze odstranit zamykací soubor %s\n"
#, c-format
msgid "could not create temp directory\n"
msgstr "nelze vytvořit dočasný adresář\n"
#, c-format
msgid "could not copy tempfile to %s (%s)\n"
msgstr "nelze zkopírovat dočasný soubor do %s (%s)\n"
#, c-format
msgid "could not remove tmpdir %s\n"
msgstr "nelze odstranit dočasný adresář %s\n"
#, c-format
msgid "could not open %s: %s\n"
msgstr "nelze otevřít %s: %s\n"
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "nelze změnit adresář na %s (%s)\n"
#, c-format
msgid "could not fork a new process (%s)\n"
msgstr "nelze spustit nový proces (%s)\n"
#, c-format
msgid "could not change the root directory (%s)\n"
msgstr "nelze změnit kořenový adresář (%s)\n"
#, c-format
msgid "could not change directory to / (%s)\n"
msgstr "nelze změnit adresář na / (%s)\n"
#, c-format
msgid "call to popen failed (%s)"
msgstr "volání popen selhalo (%s)"
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr "volání waitpid selhalo (%s)\n"
#, c-format
msgid "command failed to execute correctly\n"
msgstr "příkaz se nepodařilo spustit správně\n"
#, c-format
msgid "no %s cache exists, creating...\n"
msgstr "neexistuje cache %s, vytváří se...\n"
#, c-format
msgid "couldn't create package cache, using /tmp instead\n"
msgstr "nelze vytvořit cache balíčků, používá se /tmp\n"
#~ msgid "error downloading '%s': %s\n"
#~ msgstr "chyba při stahování '%s': %s\n"
#~ msgid "could not chdir to %s\n"
#~ msgstr "nelze změnit adresář na %s\n"
#~ msgid "running XferCommand: fork failed!\n"
#~ msgstr "spouští se XferCommand: větvení selhalo!\n"
#~ msgid "could not commit transaction"
#~ msgstr "nelze provést transakci"
#~ msgid "could not download all files"
#~ msgstr "nelze stáhnout všechny soubory"
#~ msgid "cannot load package data"
#~ msgstr "nelze načíst data z balíčku"
#~ msgid "package not installed or lesser version"
#~ msgstr "balíček není nainstalovaný nebo má nižší verzi"
#~ msgid "group not found"
#~ msgstr "skupina nebyla nalezena"
#~ msgid "user aborted the operation"
#~ msgstr "uživatel zrušil operaci"
#~ msgid "internal error"
#~ msgstr "interní chyba"
#~ msgid "not confirmed"
#~ msgstr "nepotvrzeno"
#~ msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
#~ msgstr "%s-%s: ignoruje se aktualizace balíčku (měl být nahrazen %s-%s)\n"
#~ msgid "command: %s\n"
#~ msgstr "příkaz: %s\n"
#~ msgid "could not prepare transaction\n"
#~ msgstr "nelze připravit transakci\n"
#~ msgid "No /bin/sh in parent environment, aborting scriptlet\n"
#~ msgstr "V rodičovském prostředí chybí /bin/sh, ruší se provádění skriptů\n"

View File

@@ -1,655 +0,0 @@
# translation of cs_CZ.po to Čeština
# Copyright (C) YEAR Judd Vinet <jvinet@zeroflux.org>
# This file is distributed under the same license as the PACKAGE package.
#
# Vojtěch Gondžala <vogo@seznam.cz>, 2007, 2008.
msgid ""
msgstr ""
"Project-Id-Version: cs_CZ\n"
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
"POT-Creation-Date: 2008-01-14 23:08-0600\n"
"PO-Revision-Date: 2008-01-15 21:56+0100\n"
"Last-Translator: Vojtěch Gondžala <vogo@seznam.cz>\n"
"Language-Team: Čeština\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
#: lib/libalpm/add.c:86
#, c-format
msgid "replacing older version %s-%s by %s in target list\n"
msgstr "v seznamu cílů nahrazuji starší verzi %s-%s za %s\n"
#: lib/libalpm/add.c:95
#, c-format
msgid "newer version %s-%s is in the target list -- skipping\n"
msgstr "v seznamu cílů je novější veze %s-%s -- přeskakuji\n"
#: lib/libalpm/add.c:166
msgid "conflicting packages were found in the target list\n"
msgstr "v seznamu cílů byly nalezeny konfliktní balíčky\n"
#: lib/libalpm/add.c:167
msgid "you cannot install two conflicting packages at the same time\n"
msgstr "nemůžete instalovat dva konfliktní balíčky současně\n"
#: lib/libalpm/add.c:170
msgid "replacing packages with -A and -U is not supported yet\n"
msgstr "nahrazování balíčků pomocí -A a -U není nyní podporováno\n"
#: lib/libalpm/add.c:171
msgid "you can replace packages manually using -Rd and -U\n"
msgstr "balíčky můžete nahradit ručně použitím -Rd a -U\n"
#: lib/libalpm/add.c:377
#, c-format
msgid ""
"directory permissions differ on %s\n"
"filesystem: %o package: %o\n"
msgstr ""
"přístupová práva adresáře v %s se liší\n"
"souborový systém: %o balíček: %o\n"
#: lib/libalpm/add.c:404
#, c-format
msgid "extract: symlink %s does not point to dir\n"
msgstr "rozbalení: symbolický odkaz %s neodkazuje na adresář\n"
#: lib/libalpm/add.c:411
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr "rozbalení: nepřepisuji adresář souborem %s\n"
#: lib/libalpm/add.c:466 lib/libalpm/add.c:610 lib/libalpm/util.c:428
#, c-format
msgid "could not extract %s (%s)\n"
msgstr "%s nelze rozbalit (%s)\n"
#: lib/libalpm/add.c:517
#, c-format
msgid "could not rename %s (%s)\n"
msgstr "%s nelze přejmenovat (%s)\n"
#: lib/libalpm/add.c:524 lib/libalpm/add.c:544 lib/libalpm/trans.c:508
#, c-format
msgid "could not copy tempfile to %s (%s)\n"
msgstr "nelze zkopírovat dočasný soubor do %s (%s)\n"
#: lib/libalpm/add.c:529 lib/libalpm/remove.c:238
#, c-format
msgid "%s saved as %s\n"
msgstr "%s uložen jako %s\n"
#: lib/libalpm/add.c:568
#, c-format
msgid "could not install %s as %s: %s\n"
msgstr "%s nelze nainstalovat jako %s: %s\n"
#: lib/libalpm/add.c:571
#, c-format
msgid "%s installed as %s\n"
msgstr "%s nainstalován jako %s\n"
#: lib/libalpm/add.c:588
#, c-format
msgid "extracting %s as %s.pacnew\n"
msgstr "%s rozbaluji jako %s.pacnew\n"
#: lib/libalpm/add.c:723 lib/libalpm/trans.c:526
msgid "could not get current working directory\n"
msgstr "nelze určit aktuální pracovní adresář\n"
#: lib/libalpm/add.c:777
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "při aktualizaci %s nastal problém\n"
#: lib/libalpm/add.c:782
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "při instalaci %s nastal problém\n"
#: lib/libalpm/add.c:797
#, c-format
msgid "could not update database entry %s-%s\n"
msgstr "nelze aktualizovat záznam databáze %s-%s\n"
#: lib/libalpm/add.c:805
#, c-format
msgid "could not add entry '%s' in cache\n"
msgstr "nelze přidat položku '%s' do keše\n"
#: lib/libalpm/be_files.c:221
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "chybný název záznamu v databázi '%s'\n"
#: lib/libalpm/be_files.c:291 lib/libalpm/be_files.c:428
#: lib/libalpm/be_files.c:451 lib/libalpm/be_files.c:562
#: lib/libalpm/be_files.c:640 lib/libalpm/be_files.c:668
#: lib/libalpm/package.c:885
#, c-format
msgid "could not open file %s: %s\n"
msgstr "nelze otevřít soubor %s: %s\n"
#: lib/libalpm/db.c:283
#, c-format
msgid "could not remove database entry %s%s\n"
msgstr "nelze odstranit záznam v databázi %s%s\n"
#: lib/libalpm/db.c:551
msgid "attempt to re-register the 'local' DB\n"
msgstr "pokus o opětovné zaregistrování databáze 'local'\n"
#: lib/libalpm/db.c:560 lib/libalpm/db.c:611
msgid "database path is undefined\n"
msgstr "cesta k databázi nebyla určena\n"
#: lib/libalpm/deps.c:171
msgid "dependency cycle detected:\n"
msgstr "zjištěna cyklická závislost:\n"
#: lib/libalpm/deps.c:173
#, c-format
msgid "%s will be removed after its %s dependency\n"
msgstr "%s bude odstraněn po %s, na kterém závisí\n"
#: lib/libalpm/deps.c:175
#, c-format
msgid "%s will be installed before its %s dependency\n"
msgstr "%s bude nainstalován před %s, na kterém závisí\n"
#: lib/libalpm/deps.c:588
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "nemohu získat \"%s\", závislost \"%s\"\n"
#: lib/libalpm/error.c:41
msgid "out of memory!"
msgstr "nedostatek paměti!"
#: lib/libalpm/error.c:43
msgid "unexpected system error"
msgstr "neočekávaná systémová chyba"
#: lib/libalpm/error.c:45
msgid "insufficient privileges"
msgstr "nedostatečná oprávnění"
#: lib/libalpm/error.c:47
msgid "could not find or read file"
msgstr "nelze najít nebo číst soubor"
#: lib/libalpm/error.c:49
msgid "could not find or read directory"
msgstr "nelze najít nebo číst adresář"
#: lib/libalpm/error.c:51
msgid "wrong or NULL argument passed"
msgstr "předán chybný nebo NULL argument"
#: lib/libalpm/error.c:54
msgid "library not initialized"
msgstr "knihovna nebyla inicializována"
#: lib/libalpm/error.c:56
msgid "library already initialized"
msgstr "knihovna inicializována"
#: lib/libalpm/error.c:58
msgid "unable to lock database"
msgstr "nelze zamknout databázi"
#: lib/libalpm/error.c:61
msgid "could not open database"
msgstr "nelze otevřít databázi"
#: lib/libalpm/error.c:63
msgid "could not create database"
msgstr "nelze vytvořit databázi"
#: lib/libalpm/error.c:65
msgid "database not initialized"
msgstr "databáze nebyla inicializována"
#: lib/libalpm/error.c:67
msgid "database already registered"
msgstr "databáze zaregistrována"
#: lib/libalpm/error.c:69
msgid "could not find database"
msgstr "nelze nalézt databázi"
#: lib/libalpm/error.c:71
msgid "could not update database"
msgstr "nelze aktualizovat databázi"
#: lib/libalpm/error.c:73
msgid "could not remove database entry"
msgstr "nelze odstranit položku databáze"
#: lib/libalpm/error.c:76
msgid "invalid url for server"
msgstr "nesprávná URL pro server"
#: lib/libalpm/error.c:83
msgid "could not set parameter"
msgstr "nelze nastavit parametr"
#: lib/libalpm/error.c:86
msgid "transaction already initialized"
msgstr "transakce inicializována"
#: lib/libalpm/error.c:88 lib/libalpm/error.c:92
msgid "transaction not initialized"
msgstr "transakce neinicializována"
#: lib/libalpm/error.c:90
msgid "duplicate target"
msgstr "duplicitní cíl"
#: lib/libalpm/error.c:94
msgid "transaction not prepared"
msgstr "transakce nepřipravena"
#: lib/libalpm/error.c:96
msgid "transaction aborted"
msgstr "transakce zrušena"
#: lib/libalpm/error.c:98
msgid "operation not compatible with the transaction type"
msgstr "operace není kompatibilní s typem transakce"
#: lib/libalpm/error.c:100
msgid "could not commit transaction"
msgstr "nelze provést transakci"
#: lib/libalpm/error.c:102
msgid "could not download all files"
msgstr "nelze stáhnout všechny soubory"
#: lib/libalpm/error.c:105
msgid "could not find or read package"
msgstr "nelze nalézt nebo přečíst balíček"
#: lib/libalpm/error.c:107
msgid "invalid or corrupted package"
msgstr "neplatný nebo poškozený balíček"
#: lib/libalpm/error.c:109
msgid "cannot open package file"
msgstr "nelze otevřít soubor balíčku"
#: lib/libalpm/error.c:111
msgid "cannot load package data"
msgstr "nelze načíst data z balíčku"
#: lib/libalpm/error.c:113
msgid "package already installed"
msgstr "balíček je již nainstalován"
#: lib/libalpm/error.c:115
msgid "package not installed or lesser version"
msgstr "balíček není nainstalovaný nebo má nižší verzi"
#: lib/libalpm/error.c:117
msgid "cannot remove all files for package"
msgstr "nelze odstranit všechny soubory balíčku"
#: lib/libalpm/error.c:119
msgid "package name is not valid"
msgstr "jméno balíčku není platné"
#: lib/libalpm/error.c:121
msgid "corrupted package"
msgstr "poškozený balíček"
#: lib/libalpm/error.c:123
msgid "no such repository"
msgstr "není žádný takový repositář"
#: lib/libalpm/error.c:126
msgid "corrupted delta"
msgstr "poškozený rozdíl"
#: lib/libalpm/error.c:128
msgid "delta patch failed"
msgstr "rozdílový patch selhal"
#: lib/libalpm/error.c:131
msgid "group not found"
msgstr "skupina nenalezena"
#: lib/libalpm/error.c:134
msgid "could not satisfy dependencies"
msgstr "nelze vyřešit závislosti"
#: lib/libalpm/error.c:136
msgid "conflicting dependencies"
msgstr "konfliktní závislosti"
#: lib/libalpm/error.c:138
msgid "conflicting files"
msgstr "konfliktní soubory"
#: lib/libalpm/error.c:141
msgid "user aborted the operation"
msgstr "uživatel zrušil operaci"
#: lib/libalpm/error.c:143
msgid "internal error"
msgstr "interní chyba"
#: lib/libalpm/error.c:145
msgid "libarchive error"
msgstr "chyba knihovny libarchive"
#: lib/libalpm/error.c:148
msgid "not confirmed"
msgstr "nepotvrzeno"
#: lib/libalpm/error.c:150
msgid "invalid regular expression"
msgstr "nesprávný regulární výraz"
#: lib/libalpm/error.c:153
msgid "connection to remote host failed"
msgstr "spojení ke vzdálenému hostiteli selhalo"
#: lib/libalpm/error.c:156
msgid "unexpected error"
msgstr "neočekávaná chyba"
#: lib/libalpm/package.c:122
#, c-format
msgid "could not get md5sum for package %s-%s\n"
msgstr "nelze zjistit MD5 kontrolní součet balíčku %s-%s\n"
#: lib/libalpm/package.c:131
#, c-format
msgid "md5sums do not match for package %s-%s\n"
msgstr "MD5 kontrolní součet balíčku %s-%s nesouhlasí\n"
#: lib/libalpm/package.c:844
#, c-format
msgid "%s: forcing upgrade to version %s\n"
msgstr "%s: vynucená aktualizace na verzi %s\n"
#: lib/libalpm/package.c:849
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr "%s: lokální (%s) je novější než %s (%s)\n"
#: lib/libalpm/package.c:1027
#, c-format
msgid "error extracting package description file to %s\n"
msgstr "nelze získat soubor s popisem balíčku k %s\n"
#: lib/libalpm/package.c:1033
#, c-format
msgid "could not parse package description file in %s\n"
msgstr "nelze získat soubor s popisem balíčku z %s\n"
#: lib/libalpm/package.c:1038
#, c-format
msgid "missing package name in %s\n"
msgstr "chybí jméno balíčku v %s\n"
#: lib/libalpm/package.c:1042
#, c-format
msgid "missing package version in %s\n"
msgstr "chybí veze balíčku v %s\n"
#: lib/libalpm/package.c:1061 lib/libalpm/package.c:1074
#, c-format
msgid "error while reading package %s: %s\n"
msgstr "chyba při čtení balíčku %s: %s\n"
#: lib/libalpm/package.c:1081
#, c-format
msgid "missing package metadata in %s\n"
msgstr "chybí metadata balíčku v %s\n"
#: lib/libalpm/remove.c:119
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "nelze nalézt %s v databázi -- přeskakuji\n"
#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:247
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "nelze odstranit soubor '%s': %s\n"
#: lib/libalpm/remove.c:341
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "nelze odstranit záznam databáze %s-%s\n"
#: lib/libalpm/remove.c:346
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "nelze odstranit položku '%s' z keše\n"
#: lib/libalpm/server.c:54
#, c-format
msgid "url '%s' is invalid, ignoring\n"
msgstr "URL '%s' je chybná, ignoruji\n"
#: lib/libalpm/server.c:58
msgid "url scheme not specified, assuming http\n"
msgstr "schéma URL nedefinováno, předpokládám http\n"
#: lib/libalpm/server.c:239
msgid "disk"
msgstr "disk"
#: lib/libalpm/server.c:243
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "selhalo získávání souboru '%s' z %s: %s\n"
#: lib/libalpm/server.c:273
msgid "cannot resume download, starting over\n"
msgstr "nelze navázat stahování, začínám znovu\n"
#: lib/libalpm/server.c:286
#, c-format
msgid "cannot write to file '%s'\n"
msgstr "nelze zapisovat do souboru '%s'\n"
#: lib/libalpm/server.c:305
#, c-format
msgid "error downloading '%s': %s\n"
msgstr "chyba při stahování '%s': %s\n"
#: lib/libalpm/server.c:317
#, c-format
msgid "error writing to file '%s': %s\n"
msgstr "chyba při zápisu do souboru '%s': %s\n"
#: lib/libalpm/server.c:385
#, c-format
msgid "could not chdir to %s\n"
msgstr "nelze změnit adresář na %s\n"
#: lib/libalpm/server.c:392
msgid "running XferCommand: fork failed!\n"
msgstr "spouštím XferCommand: větvení selhalo!\n"
#: lib/libalpm/server.c:443
msgid "URL does not contain a file for download\n"
msgstr "URL neobsahuje stahovaný soubor\n"
#: lib/libalpm/server.c:456
#, c-format
msgid "failed to download %s\n"
msgstr "selhalo stahování %s\n"
#: lib/libalpm/sync.c:133
#, c-format
msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
msgstr "%s-%s: ignoruji aktualizaci balíčku (bude nahrazen %s-%s)\n"
#: lib/libalpm/sync.c:248
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: ignoruji aktualizaci balíčku (%s => %s)\n"
#: lib/libalpm/sync.c:309
#, c-format
msgid "repository '%s' not found\n"
msgstr "repositář '%s' nenalezen\n"
#: lib/libalpm/sync.c:336
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s je aktuální -- přeskakuji\n"
#: lib/libalpm/sync.c:340
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s je aktuální -- přeinstalovávám\n"
#: lib/libalpm/sync.c:596 lib/libalpm/sync.c:601
msgid "unresolvable package conflicts detected\n"
msgstr "zjištěn nerozlišitelný konflikt balíčků\n"
#: lib/libalpm/sync.c:611
#, c-format
msgid "malloc failure: could not allocate %zd bytes\n"
msgstr "selhala alokace paměti: nelze alokovat %zd bytů\n"
#: lib/libalpm/sync.c:812
#, c-format
msgid "command: %s\n"
msgstr "příkaz: %s\n"
#: lib/libalpm/sync.c:876 lib/libalpm/sync.c:886
#, c-format
msgid "can't get md5 checksum for file %s\n"
msgstr "nelze zjistit MD5 kontrolní součet pro soubor %s\n"
#: lib/libalpm/sync.c:902
#, c-format
msgid "file %s was corrupted (bad MD5 checksum)\n"
msgstr "soubor %s byl poškozen (nesouhlasí MD5 kontrolní součet)\n"
#: lib/libalpm/sync.c:1049
#, c-format
msgid "failed to retrieve some files from %s\n"
msgstr "selhalo stažení některých souborů z %s\n"
#: lib/libalpm/sync.c:1130
msgid "could not create removal transaction\n"
msgstr "nelze vytvořit transakci pro odstranění\n"
#: lib/libalpm/sync.c:1136
msgid "could not initialize the removal transaction\n"
msgstr "nelze inicializovat transakci pro odstranění\n"
#: lib/libalpm/sync.c:1158
msgid "could not prepare removal transaction\n"
msgstr "nelze připravit transakci pro odstranění\n"
#: lib/libalpm/sync.c:1164
msgid "could not commit removal transaction\n"
msgstr "nelze provést transakci pro odstranění\n"
#: lib/libalpm/sync.c:1175
msgid "could not create transaction\n"
msgstr "nelze vytvořit transakci\n"
#: lib/libalpm/sync.c:1180
msgid "could not initialize transaction\n"
msgstr "nelze inicializovat transakci\n"
#: lib/libalpm/sync.c:1207
msgid "could not prepare transaction\n"
msgstr "nelze připravit transakci\n"
#: lib/libalpm/sync.c:1212
msgid "could not commit transaction\n"
msgstr "nelze provést transakci\n"
#: lib/libalpm/trans.c:212
#, c-format
msgid "could not remove lock file %s\n"
msgstr "nelze odstranit zamykací soubor %s\n"
#: lib/libalpm/trans.c:483
msgid "No /bin/sh in parent environment, aborting scriptlet\n"
msgstr "Nenalezen /bin/sh v rodičovském prostředí, ruším provádění skriptů\n"
#: lib/libalpm/trans.c:494
msgid "could not create temp directory\n"
msgstr "nelze vytvořit dočasný adresář\n"
#: lib/libalpm/trans.c:533
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "nelze změnit adresář na %s (%s)\n"
#: lib/libalpm/trans.c:551
#, c-format
msgid "could not fork a new process (%s)\n"
msgstr "nelze spustit nový proces (%s)\n"
#: lib/libalpm/trans.c:561
#, c-format
msgid "could not change the root directory (%s)\n"
msgstr "nelze změnit kořenový adresář (%s)\n"
#: lib/libalpm/trans.c:566
#, c-format
msgid "could not change directory to / (%s)\n"
msgstr "nelze změnit adresář na / (%s)\n"
#: lib/libalpm/trans.c:575
#, c-format
msgid "call to popen failed (%s)"
msgstr "volání popen selhalo (%s)"
#: lib/libalpm/trans.c:594
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr "volání waitpid selhalo (%s)\n"
#: lib/libalpm/trans.c:603
msgid "scriptlet failed to execute correctly\n"
msgstr "správné spouštění skriptu selhalo\n"
#: lib/libalpm/trans.c:612
#, c-format
msgid "could not remove tmpdir %s\n"
msgstr "nelze odstranit dočasný adresář %s\n"
#: lib/libalpm/util.c:207
#, c-format
msgid "failed to make path '%s' : %s\n"
msgstr "selhalo vytvoření cesty '%s': %s\n"
#: lib/libalpm/util.c:392
#, c-format
msgid "could not open %s: %s\n"
msgstr "nelze otevřít %s: %s\n"
#: lib/libalpm/util.c:579
#, c-format
msgid "no %s cache exists, creating...\n"
msgstr "neexistuje keš %s, vytvářím...\n"
#: lib/libalpm/util.c:595
msgid "couldn't create package cache, using /tmp instead\n"
msgstr "nelze vytvořit keš balíčků, používám /tmp\n"
#: lib/libalpm/util.c:644
#, c-format
msgid "md5: %s can't be opened\n"
msgstr "MD5: %s nemohl být otevřen\n"
#: lib/libalpm/util.c:646
#, c-format
msgid "md5: %s can't be read\n"
msgstr "MD5: %s nemohl být přečten\n"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -5,8 +5,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Pacman package manager 3.0.1\n"
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
"POT-Creation-Date: 2008-01-14 23:08-0600\n"
"PO-Revision-Date: 2007-12-22 22:29+0100\n"
"POT-Creation-Date: 2009-07-27 21:15-0500\n"
"PO-Revision-Date: 2009-07-28 14:01+0200\n"
"Last-Translator: Xavier <shiningxc@gmail.com>\n"
"Language-Team: solsTiCe d'Hiver <solstice.dhiver@laposte.net>\n"
"MIME-Version: 1.0\n"
@@ -15,37 +15,34 @@ msgstr ""
"X-Poedit-Language: French\n"
"X-Poedit-Country: FRANCE\n"
#: lib/libalpm/add.c:86
#, c-format
msgid "replacing older version %s-%s by %s in target list\n"
msgstr ""
"remplacement de l'ancienne version %s-%s par %s dans la liste des cibles\n"
#: lib/libalpm/add.c:95
#, c-format
msgid "newer version %s-%s is in the target list -- skipping\n"
msgid "skipping %s-%s because newer version %s is in the target list\n"
msgstr ""
"une version plus récente %s-%s est dans la liste des cibles -- paquet "
"ignoré\n"
"ignore le paquet %s-%s car une version plus récente %s est dans la liste des "
"cibles\n"
#: lib/libalpm/add.c:166
#, c-format
msgid "conflicting packages were found in the target list\n"
msgstr "Des paquets en conflit ont été trouvés dans la liste des cibles\n"
msgstr "des paquets en conflit ont été trouvés dans la liste des cibles\n"
#: lib/libalpm/add.c:167
#, c-format
msgid "you cannot install two conflicting packages at the same time\n"
msgstr "vous ne pouvez pas installer deux paquets en conflit en même temps\n"
#: lib/libalpm/add.c:170
msgid "replacing packages with -A and -U is not supported yet\n"
msgstr "remplacer un paquet avec -A ou -U n'est pas encore possible\n"
#, c-format
msgid "replacing packages with -U is not supported yet\n"
msgstr "remplacer un paquet avec -U n'est pas encore possible\n"
#: lib/libalpm/add.c:171
#, c-format
msgid "you can replace packages manually using -Rd and -U\n"
msgstr ""
"vous pouvez remplacer les paquets manuellement en utilisant -Rd et -U\n"
#: lib/libalpm/add.c:377
#, c-format
msgid ""
"directory permissions differ on %s\n"
@@ -54,615 +51,497 @@ msgstr ""
"Les permissions pour le répertoire %s sont différentes\n"
"système de fichier: %o paquet : %o\n"
#: lib/libalpm/add.c:404
#, c-format
msgid "extract: symlink %s does not point to dir\n"
msgstr "extraction: le lien %s ne pointe pas vers un répertoire\n"
#: lib/libalpm/add.c:411
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr "extraction: n'écrase pas le répertoire par le fichier %s\n"
#: lib/libalpm/add.c:466 lib/libalpm/add.c:610 lib/libalpm/util.c:428
#, c-format
msgid "extract: symlink %s does not point to dir\n"
msgstr "extraction: le lien %s ne pointe pas vers un répertoire\n"
#, c-format
msgid "could not extract %s (%s)\n"
msgstr "l'extraction de %s a échoué (%s)\n"
#: lib/libalpm/add.c:517
#, c-format
msgid "could not rename %s (%s)\n"
msgstr "renommer %s a échoué (%s)\n"
msgid "could not rename %s to %s (%s)\n"
msgstr "impossible de renommer %s en %s (%s)\n"
#: lib/libalpm/add.c:524 lib/libalpm/add.c:544 lib/libalpm/trans.c:508
#, c-format
msgid "could not copy tempfile to %s (%s)\n"
msgstr "la copie du fichier temporaire vers %s a échoué (%s)\n"
#: lib/libalpm/add.c:529 lib/libalpm/remove.c:238
#, c-format
msgid "%s saved as %s\n"
msgstr "%s enregistré en tant que %s\n"
#: lib/libalpm/add.c:568
#, c-format
msgid "could not install %s as %s: %s\n"
msgstr "l'installation de %s en tant que %s a échoué: (%s)\n"
msgid "could not install %s as %s (%s)\n"
msgstr "l'installation de %s en tant que %s a échoué (%s)\n"
#: lib/libalpm/add.c:571
#, c-format
msgid "%s installed as %s\n"
msgstr "%s installé en tant que %s\n"
#: lib/libalpm/add.c:588
#, c-format
msgid "extracting %s as %s.pacnew\n"
msgstr "extraction de %s comme %s.pacnew\n"
# j'ai traduit chaque fois "could not" par "a échoué"
#: lib/libalpm/add.c:723 lib/libalpm/trans.c:526
#, c-format
msgid "could not get current working directory\n"
msgstr "déterminer le répertoire courant a échoué\n"
#: lib/libalpm/add.c:777
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "des erreurs sont survenues pendant la mise à jour de %s\n"
#: lib/libalpm/add.c:782
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "des erreurs sont survenues pendant l'installation de %s\n"
#: lib/libalpm/add.c:797
#, c-format
msgid "could not update database entry %s-%s\n"
msgstr "la mise à jour l'entrée de base de données %s-%s a échoué\n"
#: lib/libalpm/add.c:805
#, c-format
msgid "could not add entry '%s' in cache\n"
msgstr "l'ajout au cache de l'entrée '%s' a échoué\n"
#: lib/libalpm/be_files.c:221
#, c-format
msgid "could not remove database %s\n"
msgstr "la suppression de la base de données %s a échoué\n"
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "nom invalide pour l'entrée de base de données '%s'\n"
#: lib/libalpm/be_files.c:291 lib/libalpm/be_files.c:428
#: lib/libalpm/be_files.c:451 lib/libalpm/be_files.c:562
#: lib/libalpm/be_files.c:640 lib/libalpm/be_files.c:668
#: lib/libalpm/package.c:885
#, c-format
msgid "corrupted database entry '%s'\n"
msgstr "l'entrée '%s' de la base de données est corrompue\n"
#, c-format
msgid "could not open file %s: %s\n"
msgstr "l'ouverture du fichier %s a échoué: %s\n"
#: lib/libalpm/db.c:283
#, c-format
msgid "could not remove database entry %s%s\n"
msgstr "la suppression de l'entrée de base de données %s%s a échoué\n"
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr "Le dépôt %s est inconsistant: noms différents pour le paquet %s\n"
#: lib/libalpm/db.c:551
msgid "attempt to re-register the 'local' DB\n"
msgstr "tentative de ré-enregistrer la base de données locale\n"
#: lib/libalpm/db.c:560 lib/libalpm/db.c:611
msgid "database path is undefined\n"
msgstr "base de données non initialisée\n"
#: lib/libalpm/deps.c:171
msgid "dependency cycle detected:\n"
msgstr "cycle de dépendances détecté:\n"
#: lib/libalpm/deps.c:173
#, c-format
msgid "%s will be removed after its %s dependency\n"
msgstr "%s sera supprimé après sa dépendance %s\n"
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr "Le dépôt %s est inconsistant: versions différentes pour le paquet %s\n"
#: lib/libalpm/deps.c:175
#, c-format
msgid "%s will be installed before its %s dependency\n"
msgstr "%s sera installé avant sa dépendance %s\n"
msgid "could not create directory %s: %s\n"
msgstr "la création du répertoire %s a échoué: %s\n"
#: lib/libalpm/deps.c:588
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "impossible de résoudre \"%s\", une dépendance de \"%s\"\n"
#: lib/libalpm/error.c:41
msgid "out of memory!"
msgstr "dépassement de mémoire!"
#: lib/libalpm/error.c:43
msgid "unexpected system error"
msgstr "erreur système non prévue"
#: lib/libalpm/error.c:45
msgid "insufficient privileges"
msgstr "autorisation insuffisante"
#: lib/libalpm/error.c:47
msgid "could not find or read file"
msgstr "trouver ou lire le fichier a échoué"
#: lib/libalpm/error.c:49
msgid "could not find or read directory"
msgstr "trouver ou lire le répertoire a échoué"
#: lib/libalpm/error.c:51
msgid "wrong or NULL argument passed"
msgstr "un argument erroné ou nul a été fourni"
#: lib/libalpm/error.c:54
msgid "library not initialized"
msgstr "librairie non initialisée"
#: lib/libalpm/error.c:56
msgid "library already initialized"
msgstr "librairie déjà initialisée"
#: lib/libalpm/error.c:58
msgid "unable to lock database"
msgstr "verrouillage de la base de données impossible"
#: lib/libalpm/error.c:61
msgid "could not open database"
msgstr "l'ouverture de la base de données a échoué"
#: lib/libalpm/error.c:63
msgid "could not create database"
msgstr "la création de la base de données a échoué"
#: lib/libalpm/error.c:65
msgid "database not initialized"
msgstr "base de données non initialisée"
#: lib/libalpm/error.c:67
msgid "database already registered"
msgstr "base de données déjà enregistrée"
#: lib/libalpm/error.c:69
msgid "could not find database"
msgstr "trouver la base de données a échoué"
#: lib/libalpm/error.c:71
msgid "could not update database"
msgstr "la mise à jour de la base de données a échoué"
#: lib/libalpm/error.c:73
msgid "could not remove database entry"
msgstr "la suppression de l'entrée de base de données a échoué"
#: lib/libalpm/error.c:76
msgid "invalid url for server"
msgstr "URL invalide pour le serveur"
#: lib/libalpm/error.c:83
msgid "could not set parameter"
msgstr "définir le paramètre a échoué"
#: lib/libalpm/error.c:86
msgid "transaction already initialized"
msgstr "transaction déjà initialisée"
#: lib/libalpm/error.c:88 lib/libalpm/error.c:92
msgid "transaction not initialized"
msgstr "transaction non initialisée"
#: lib/libalpm/error.c:90
msgid "duplicate target"
msgstr "cible répétée"
#: lib/libalpm/error.c:94
msgid "transaction not prepared"
msgstr "transaction non préparée"
#: lib/libalpm/error.c:96
msgid "transaction aborted"
msgstr "transaction annulée"
#: lib/libalpm/error.c:98
msgid "operation not compatible with the transaction type"
msgstr "opération incompatible avec le type de transaction"
#: lib/libalpm/error.c:100
msgid "could not commit transaction"
msgstr "appliquer la transaction a échoué"
#: lib/libalpm/error.c:102
msgid "could not download all files"
msgstr "tous les fichiers n'ont pas pu être téléchargés"
#: lib/libalpm/error.c:105
msgid "could not find or read package"
msgstr "trouver ou de lire le paquet a échoué"
#: lib/libalpm/error.c:107
msgid "invalid or corrupted package"
msgstr "paquet invalide ou corrompu"
#: lib/libalpm/error.c:109
msgid "cannot open package file"
msgstr "ouverture du fichier paquet impossible"
#: lib/libalpm/error.c:111
msgid "cannot load package data"
msgstr "chargement des données du paquet impossible"
#: lib/libalpm/error.c:113
msgid "package already installed"
msgstr "paquet déjà installé"
#: lib/libalpm/error.c:115
msgid "package not installed or lesser version"
msgstr "paquet non installé ou version plus ancienne"
#: lib/libalpm/error.c:117
msgid "cannot remove all files for package"
msgstr "suppression de certains fichiers du paquet impossible"
#: lib/libalpm/error.c:119
msgid "package name is not valid"
msgstr "nom de paquet invalide"
#: lib/libalpm/error.c:121
msgid "corrupted package"
msgstr "paquet corrompu"
#: lib/libalpm/error.c:123
msgid "no such repository"
msgstr "ce dépôt n'existe pas"
#: lib/libalpm/error.c:126
msgid "corrupted delta"
msgstr "delta corrompu"
#: lib/libalpm/error.c:128
msgid "delta patch failed"
msgstr "l'application du delta a échoué"
#: lib/libalpm/error.c:131
msgid "group not found"
msgstr "groupe non trouvé"
#: lib/libalpm/error.c:134
msgid "could not satisfy dependencies"
msgstr "la satisfaction des dépendances a échoué"
#: lib/libalpm/error.c:136
msgid "conflicting dependencies"
msgstr "conflit de dépendances"
#: lib/libalpm/error.c:138
msgid "conflicting files"
msgstr "conflit de fichiers"
#: lib/libalpm/error.c:141
msgid "user aborted the operation"
msgstr "opération annulée par l'utilisateur"
#: lib/libalpm/error.c:143
msgid "internal error"
msgstr "erreur interne"
#: lib/libalpm/error.c:145
msgid "libarchive error"
msgstr "erreur de libarchive"
#: lib/libalpm/error.c:148
msgid "not confirmed"
msgstr "non confirmé"
#: lib/libalpm/error.c:150
msgid "invalid regular expression"
msgstr "expression régulière incorrecte"
#: lib/libalpm/error.c:153
msgid "connection to remote host failed"
msgstr "échec de connexion à l'hôte distant "
#: lib/libalpm/error.c:156
msgid "unexpected error"
msgstr "erreur non prévue"
#: lib/libalpm/package.c:122
#, c-format
msgid "could not get md5sum for package %s-%s\n"
msgstr "l'obtention du hache md5 pour le paquet %s-%s a échoué\n"
#: lib/libalpm/package.c:131
#, c-format
msgid "md5sums do not match for package %s-%s\n"
msgstr "les 'haches' md5 ne correspondent pas pour le paquet %s-%s\n"
#: lib/libalpm/package.c:844
#, c-format
msgid "%s: forcing upgrade to version %s\n"
msgstr "%s: force la mise à jour à la version %s\n"
#: lib/libalpm/package.c:849
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr "%s: la version locale (%s) est plus récente que %s (%s)\n"
#: lib/libalpm/package.c:1027
#, c-format
msgid "error extracting package description file to %s\n"
msgstr "l'extraction du fichier de description vers %s a échoué\n"
#: lib/libalpm/package.c:1033
#, c-format
msgid "could not parse package description file in %s\n"
msgstr "l'analyse du fichier de description a échoué dans %s\n"
#: lib/libalpm/package.c:1038
#, c-format
msgid "missing package name in %s\n"
msgstr "nom de paquet manquant dans %s\n"
#: lib/libalpm/package.c:1042
#, c-format
msgid "missing package version in %s\n"
msgstr "version de paquet manquante dans %s\n"
#: lib/libalpm/package.c:1061 lib/libalpm/package.c:1074
#, c-format
msgid "error while reading package %s: %s\n"
msgstr "erreur lors de la lecture du paquet %s: %s\n"
#: lib/libalpm/package.c:1081
#, c-format
msgid "missing package metadata in %s\n"
msgstr "méta-données du paquet manquantes dans %s\n"
#: lib/libalpm/remove.c:119
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "trouver %s dans la base de données a échoué -- ignoré\n"
msgid "attempt to re-register the 'local' DB\n"
msgstr "tentative de ré-enregistrer la base de données locale\n"
#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:247
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "suppression du fichier '%s' impossible: %s\n"
msgid "database path is undefined\n"
msgstr "base de données non initialisée\n"
#: lib/libalpm/remove.c:341
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "la suppression de l'entrée de base de données %s-%s a échoué\n"
msgid "dependency cycle detected:\n"
msgstr "cycle de dépendances détecté:\n"
#: lib/libalpm/remove.c:346
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "la suppression du cache de l'entrée '%s' a échoué\n"
msgid "%s will be removed after its %s dependency\n"
msgstr "%s sera supprimé après sa dépendance %s\n"
#: lib/libalpm/server.c:54
#, c-format
msgid "url '%s' is invalid, ignoring\n"
msgstr "l'url '%s' est invalide, ignorée\n"
msgid "%s will be installed before its %s dependency\n"
msgstr "%s sera installé avant sa dépendance %s\n"
#: lib/libalpm/server.c:58
msgid "url scheme not specified, assuming http\n"
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "ignore le paquet %s-%s\n"
#, c-format
msgid "provider package was selected (%s provides %s)\n"
msgstr "Une provision a été sélectionnée (%s fournit %s)\n"
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "impossible de résoudre \"%s\", une dépendance de \"%s\"\n"
#, c-format
msgid "url '%s' is invalid\n"
msgstr "l'url '%s' est invalide\n"
#, c-format
msgid "url scheme not specified, assuming HTTP\n"
msgstr "Le protocole n'a pas été spécifié dans l'url, assume http\n"
#: lib/libalpm/server.c:239
#, c-format
msgid "disk"
msgstr "disque"
#: lib/libalpm/server.c:243
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "échec de récupération du fichier '%s' depuis %s : %s\n"
#: lib/libalpm/server.c:273
#, c-format
msgid "cannot resume download, starting over\n"
msgstr "le téléchargement ne peut pas être repris, relance\n"
#: lib/libalpm/server.c:286
#, c-format
msgid "cannot write to file '%s'\n"
msgstr "écriture dans le fichier '%s' impossible\n"
#: lib/libalpm/server.c:305
#, c-format
msgid "error downloading '%s': %s\n"
msgstr "erreur lors du téléchargement de '%s': %s\n"
#: lib/libalpm/server.c:317
#, c-format
msgid "error writing to file '%s': %s\n"
msgstr "écriture dans le fichier '%s' impossible: %s\n"
#: lib/libalpm/server.c:385
#, c-format
msgid "could not chdir to %s\n"
msgstr "changer de répertoire vers %s a échoué\n"
msgid "%s appears to be truncated: %jd/%jd bytes\n"
msgstr "%s est apparemment tronqué: %jd/%jd bytes\n"
#: lib/libalpm/server.c:392
msgid "running XferCommand: fork failed!\n"
msgstr "lancement de XferCommand: le fork a échoué!\n"
#: lib/libalpm/server.c:443
msgid "URL does not contain a file for download\n"
msgstr "l'URL ne contient pas un fichier à télécharger\n"
#: lib/libalpm/server.c:456
#, c-format
msgid "failed to download %s\n"
msgstr "le fichier %s n'a pas pu être téléchargé\n"
#: lib/libalpm/sync.c:133
#, c-format
msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
msgstr "%s-%s: ignore la mise à jour du paquet (à remplacer par %s-%s)\n"
msgid "out of memory!"
msgstr "dépassement de mémoire!"
#, c-format
msgid "unexpected system error"
msgstr "erreur système non prévue"
#, c-format
msgid "insufficient privileges"
msgstr "autorisation insuffisante"
#, c-format
msgid "could not find or read file"
msgstr "trouver ou lire le fichier a échoué"
#, c-format
msgid "could not find or read directory"
msgstr "trouver ou lire le répertoire a échoué"
#, c-format
msgid "wrong or NULL argument passed"
msgstr "un argument erroné ou nul a été fourni"
#, c-format
msgid "library not initialized"
msgstr "librairie non initialisée"
#, c-format
msgid "library already initialized"
msgstr "librairie déjà initialisée"
#, c-format
msgid "unable to lock database"
msgstr "verrouillage de la base de données impossible"
#, c-format
msgid "could not open database"
msgstr "l'ouverture de la base de données a échoué"
#, c-format
msgid "could not create database"
msgstr "la création de la base de données a échoué"
#, c-format
msgid "database not initialized"
msgstr "base de données non initialisée"
#, c-format
msgid "database already registered"
msgstr "base de données déjà enregistrée"
#, c-format
msgid "could not find database"
msgstr "trouver la base de données a échoué"
#, c-format
msgid "could not update database"
msgstr "la mise à jour de la base de données a échoué"
#, c-format
msgid "could not remove database entry"
msgstr "la suppression de l'entrée de base de données a échoué"
#, c-format
msgid "invalid url for server"
msgstr "URL invalide pour le serveur"
#, c-format
msgid "no servers configured for repository"
msgstr "aucun serveur configuré pour le dépôt"
#, c-format
msgid "transaction already initialized"
msgstr "transaction déjà initialisée"
#, c-format
msgid "transaction not initialized"
msgstr "transaction non initialisée"
#, c-format
msgid "duplicate target"
msgstr "cible répétée"
#, c-format
msgid "transaction not prepared"
msgstr "transaction non préparée"
#, c-format
msgid "transaction aborted"
msgstr "transaction annulée"
#, c-format
msgid "operation not compatible with the transaction type"
msgstr "opération incompatible avec le type de transaction"
#, c-format
msgid "transaction commit attempt when database is not locked"
msgstr ""
"tentative de réalisation d'une transaction alors que le dépôt n'est pas "
"verrouillé"
#, c-format
msgid "could not find or read package"
msgstr "trouver ou de lire le paquet a échoué"
#, c-format
msgid "operation cancelled due to ignorepkg"
msgstr "opération annulée à cause d'un paquet à ignorer (IgnorePkg)"
#, c-format
msgid "invalid or corrupted package"
msgstr "paquet invalide ou corrompu"
#, c-format
msgid "cannot open package file"
msgstr "ouverture du fichier paquet impossible"
#, c-format
msgid "cannot remove all files for package"
msgstr "suppression de certains fichiers du paquet impossible"
#, c-format
msgid "package filename is not valid"
msgstr "nom de paquet invalide"
#, c-format
msgid "no such repository"
msgstr "ce dépôt n'existe pas"
#, c-format
msgid "invalid or corrupted delta"
msgstr "delta invalide ou corrompu"
#, c-format
msgid "delta patch failed"
msgstr "l'application du delta a échoué"
#, c-format
msgid "could not satisfy dependencies"
msgstr "la satisfaction des dépendances a échoué"
#, c-format
msgid "conflicting dependencies"
msgstr "conflit de dépendances"
#, c-format
msgid "conflicting files"
msgstr "conflit de fichiers"
#, c-format
msgid "failed to retrieve some files"
msgstr "échec de récupération de certains fichiers"
#, c-format
msgid "invalid regular expression"
msgstr "expression régulière incorrecte"
#, c-format
msgid "libarchive error"
msgstr "erreur de libarchive"
#, c-format
msgid "download library error"
msgstr "erreur de la bibliothèque de téléchargement"
#, c-format
msgid "error invoking external downloader"
msgstr "erreur en invoquant le client externe de téléchargement"
#, c-format
msgid "unexpected error"
msgstr "erreur non prévue"
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "trouver %s dans la base de données a échoué -- ignoré\n"
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "suppression du fichier '%s' impossible: %s\n"
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "la suppression de l'entrée de base de données %s-%s a échoué\n"
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "la suppression du cache de l'entrée '%s' a échoué\n"
#: lib/libalpm/sync.c:248
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: ignore la mise à jour du paquet (%s => %s)\n"
#: lib/libalpm/sync.c:309
#, c-format
msgid "%s: ignoring package downgrade (%s => %s)\n"
msgstr "%s: ignore le retour à la version antérieure (%s => %s)\n"
#, c-format
msgid "%s: downgrading from version %s to version %s\n"
msgstr "%s: retourne à la version antérieure (%s => %s)\n"
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr "%s: la version locale (%s) est plus récente que %s (%s)\n"
#, c-format
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
msgstr "ignore le remplacement du paquet (%s-%s => %s-%s)\n"
#, c-format
msgid "cannot replace %s by %s\n"
msgstr "le remplacement de %s par %s est impossible\n"
#, c-format
msgid "repository '%s' not found\n"
msgstr "dépôt '%s' non trouvé\n"
#: lib/libalpm/sync.c:336
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s est à jour -- ignoré\n"
#: lib/libalpm/sync.c:340
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s est à jour -- réinstalle\n"
#: lib/libalpm/sync.c:596 lib/libalpm/sync.c:601
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "retourne à la version antérieure du paquet %s (%s => %s)\n"
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr "un conflit de paquets impossible à résoudre a été détecté\n"
#: lib/libalpm/sync.c:611
#, c-format
msgid "malloc failure: could not allocate %zd bytes\n"
msgstr "erreur malloc: n'a pas pu allouer %zd bytes\n"
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgstr "supprime '%s' de la liste de cible car il est en conflit avec '%s'\n"
#: lib/libalpm/sync.c:812
#, c-format
msgid "command: %s\n"
msgstr "commande: %s\n"
#: lib/libalpm/sync.c:876 lib/libalpm/sync.c:886
#, c-format
msgid "can't get md5 checksum for file %s\n"
msgstr "ne peut obtenir le 'hach' md5 pour le paquet %s\n"
#: lib/libalpm/sync.c:902
#, c-format
msgid "file %s was corrupted (bad MD5 checksum)\n"
msgstr "l'archive %s était corrompue (mauvaise somme MD5)\n"
#: lib/libalpm/sync.c:1049
#, c-format
msgid "failed to retrieve some files from %s\n"
msgstr "échec de récupération de certains fichiers depuis %s\n"
#: lib/libalpm/sync.c:1130
#, c-format
msgid "could not create removal transaction\n"
msgstr "la création de la transaction de suppression a échoué\n"
#: lib/libalpm/sync.c:1136
msgid "could not initialize the removal transaction\n"
msgstr "l'initialisation de la transaction de suppression a échoué\n"
#: lib/libalpm/sync.c:1158
msgid "could not prepare removal transaction\n"
msgstr "la préparation de la transaction de suppression a échoué\n"
#: lib/libalpm/sync.c:1164
msgid "could not commit removal transaction\n"
msgstr "appliquer la transaction de suppression a échoué\n"
#: lib/libalpm/sync.c:1175
#, c-format
msgid "could not create transaction\n"
msgstr "la création de la transaction a échoué\n"
#: lib/libalpm/sync.c:1180
#, c-format
msgid "could not initialize the removal transaction\n"
msgstr "l'initialisation de la transaction de suppression a échoué\n"
#, c-format
msgid "could not initialize transaction\n"
msgstr "l'initialisation de la transaction a échoué\n"
#: lib/libalpm/sync.c:1207
msgid "could not prepare transaction\n"
msgstr "la préparation de la transaction a échoué\n"
#, c-format
msgid "could not prepare removal transaction\n"
msgstr "la préparation de la transaction de suppression a échoué\n"
#: lib/libalpm/sync.c:1212
#, c-format
msgid "could not commit removal transaction\n"
msgstr "appliquer la transaction de suppression a échoué\n"
#, c-format
msgid "could not commit transaction\n"
msgstr "appliquer la transaction a échoué\n"
#: lib/libalpm/trans.c:212
#, c-format
msgid "could not remove lock file %s\n"
msgstr "la suppression du fichier de verrouillage %s a échoué\n"
#: lib/libalpm/trans.c:483
msgid "No /bin/sh in parent environment, aborting scriptlet\n"
msgstr ""
"Pas de /bin/sh dans l'environnement parent, interruption du scriptlet\n"
#: lib/libalpm/trans.c:494
#, c-format
msgid "could not create temp directory\n"
msgstr "la création du répertoire temporaire a échoué\n"
#: lib/libalpm/trans.c:533
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "changer de répertoire vers %s a échoué (%s)\n"
msgid "could not copy tempfile to %s (%s)\n"
msgstr "la copie du fichier temporaire vers %s a échoué (%s)\n"
#: lib/libalpm/trans.c:551
#, c-format
msgid "could not fork a new process (%s)\n"
msgstr "la génération d'un nouveau processus a échoué (%s)\n"
#: lib/libalpm/trans.c:561
#, c-format
msgid "could not change the root directory (%s)\n"
msgstr "changer le répertoire racine a échoué (%s)\n"
#: lib/libalpm/trans.c:566
#, c-format
msgid "could not change directory to / (%s)\n"
msgstr "changer de répertoire vers / a échoué (%s)\n"
#: lib/libalpm/trans.c:575
#, c-format
msgid "call to popen failed (%s)"
msgstr "call to popen failed (%s)"
#: lib/libalpm/trans.c:594
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr "call to waitpid failed (%s)\n"
#: lib/libalpm/trans.c:603
msgid "scriptlet failed to execute correctly\n"
msgstr "le scriptlet n'a pas pu être exécuté correctement\n"
#: lib/libalpm/trans.c:612
#, c-format
msgid "could not remove tmpdir %s\n"
msgstr "la suppression du répertoire temporaire %s a échoué\n"
#: lib/libalpm/util.c:207
#, c-format
msgid "failed to make path '%s' : %s\n"
msgstr "échec de la création du chemin '%s' : %s\n"
#: lib/libalpm/util.c:392
#, c-format
msgid "could not open %s: %s\n"
msgstr "l'ouverture de %s: %s a échoué\n"
#: lib/libalpm/util.c:579
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "changer de répertoire vers %s a échoué (%s)\n"
#, c-format
msgid "could not fork a new process (%s)\n"
msgstr "la génération d'un nouveau processus a échoué (%s)\n"
#, c-format
msgid "could not change the root directory (%s)\n"
msgstr "changer le répertoire racine a échoué (%s)\n"
#, c-format
msgid "could not change directory to / (%s)\n"
msgstr "changer de répertoire vers / a échoué (%s)\n"
#, c-format
msgid "call to popen failed (%s)"
msgstr "l'appel de popen a échoué (%s)"
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr "l'appel de waitpid a échoué (%s)\n"
#, c-format
msgid "command failed to execute correctly\n"
msgstr "la commande n'a pas pu être exécutée correctement\n"
#, c-format
msgid "no %s cache exists, creating...\n"
msgstr "le cache %s n'existe pas, création...\n"
#: lib/libalpm/util.c:595
#, c-format
msgid "couldn't create package cache, using /tmp instead\n"
msgstr "n'a pas pu créer le cache de paquets, /tmp sera utilisé à la place\n"
#: lib/libalpm/util.c:644
#, c-format
msgid "md5: %s can't be opened\n"
msgstr "md5: l'ouverture de %s a échoué\n"
#: lib/libalpm/util.c:646
#, c-format
msgid "md5: %s can't be read\n"
msgstr "md5: la lecture de %s a échoué\n"
#~ msgid "loading package data for %s : level=%d\n"
#~ msgstr "chargement des données du paquet %s : niveau=%d\n"
#~ msgid "adding '%s' to package cache for db '%s'\n"
#~ msgstr "ajout de '%s' au cache de paquets pour la base de données '%s'\n"
#~ msgid "could not remove tempfile %s\n"
#~ msgstr "la suppression du fichier temporaire %s a échoué\n"

File diff suppressed because it is too large Load Diff

View File

@@ -1,50 +1,49 @@
# Italian translation of libalpm.
# Copyright (C) 2007 THE libalpm'S COPYRIGHT HOLDER
# This file is distributed under the same license as the libalpm package.
# Giovanni 'voidnull' Scafora <linuxmania@gmail.com>, 2007.
# Alessio 'mOLOk' Bolognino <themolok@gmail.com>, 2007.
# Lorenzo '^zanDarK' Masini <lorenxo86@gmail.com>, 2007.
# Giovanni 'voidnull' Scafora <giovanni@archlinux.org>, 2007, 2008, 2009
# Andrea 'bash' Scarpino <bash.lnx@gmail.com>, 2008
# Alessio 'mOLOk' Bolognino <themolok@gmail.com>, 2007
# Lorenzo '^zanDarK' Masini <lorenxo86@gmail.com>, 2007
#
msgid ""
msgstr ""
"Project-Id-Version: libalpm VERSION\n"
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
"POT-Creation-Date: 2008-01-14 23:08-0600\n"
"PO-Revision-Date: 2007-12-18 23:30+0100\n"
"Last-Translator: Giovanni Scafora <linuxmania@gmail.com>\n"
"Language-Team: Arch Linux Italian Team <linuxmania@gmail.com>\n"
"POT-Creation-Date: 2009-07-27 21:15-0500\n"
"PO-Revision-Date: 2009-07-28 15:00+0200\n"
"Last-Translator: Giovanni Scafora <giovanni@archlinux.org>\n"
"Language-Team: Arch Linux Italian Team <giovanni@archlinux.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bitPlural-Forms: nplurals=2; plural=(n != 1);\n"
"Content-Transfer-Encoding: 8bit\n"
#: lib/libalpm/add.c:86
#, c-format
msgid "replacing older version %s-%s by %s in target list\n"
msgstr "sostituzione in corso della vecchia versione di %s-%s con %s\n"
#: lib/libalpm/add.c:95
#, c-format
msgid "newer version %s-%s is in the target list -- skipping\n"
msgstr "la versione di %s-%s è più recente e sarà ignorata\n"
msgid "skipping %s-%s because newer version %s is in the target list\n"
msgstr ""
"ignoro %s-%s perché la nuova versione %s è già presente nella lista dei "
"pacchetti\n"
#: lib/libalpm/add.c:166
#, c-format
msgid "conflicting packages were found in the target list\n"
msgstr "sono stati individuati dei pacchetti che vanno in conflitto\n"
#: lib/libalpm/add.c:167
#, c-format
msgid "you cannot install two conflicting packages at the same time\n"
msgstr "impossibile installare due pacchetti che vanno in conflitto\n"
#: lib/libalpm/add.c:170
msgid "replacing packages with -A and -U is not supported yet\n"
msgstr "la sostituzione dei pacchetti con -A e -U non è ancora supportata\n"
#, c-format
msgid "replacing packages with -U is not supported yet\n"
msgstr "la sostituzione dei pacchetti con -U non è ancora supportata\n"
#: lib/libalpm/add.c:171
#, c-format
msgid "you can replace packages manually using -Rd and -U\n"
msgstr ""
"è possibile sostituire manualmente i pacchetti, usando le opzioni -Rd e -U\n"
msgstr "puoi sostituire manualmente i pacchetti, usando le opzioni -Rd e -U\n"
#: lib/libalpm/add.c:377
#, c-format
msgid ""
"directory permissions differ on %s\n"
@@ -53,626 +52,502 @@ msgstr ""
"i permessi delle directory differiscono su %s\n"
"filesystem: %o pacchetto: %o\n"
#: lib/libalpm/add.c:404
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr "estrazione: non posso sovrascrivere la directory con il file %s\n"
#, c-format
msgid "extract: symlink %s does not point to dir\n"
msgstr "estrazione: il link simbolico %s non punta alla directory\n"
#: lib/libalpm/add.c:411
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr "estrazione: non sovrascrivere la directory con il file %s\n"
#: lib/libalpm/add.c:466 lib/libalpm/add.c:610 lib/libalpm/util.c:428
#, c-format
msgid "could not extract %s (%s)\n"
msgstr "impossibile estrarre %s (%s)\n"
#: lib/libalpm/add.c:517
#, c-format
msgid "could not rename %s (%s)\n"
msgstr "impossibile rinominare %s (%s)\n"
msgid "could not rename %s to %s (%s)\n"
msgstr "impossibile rinominare %s in %s (%s)\n"
#: lib/libalpm/add.c:524 lib/libalpm/add.c:544 lib/libalpm/trans.c:508
#, c-format
msgid "could not copy tempfile to %s (%s)\n"
msgstr "impossibile copiare il file temporaneo in %s (%s)\n"
#: lib/libalpm/add.c:529 lib/libalpm/remove.c:238
#, c-format
msgid "%s saved as %s\n"
msgstr "%s salvato come %s\n"
msgstr "%s è stato salvato come %s\n"
#: lib/libalpm/add.c:568
#, c-format
msgid "could not install %s as %s: %s\n"
msgstr "impossibile installare %s come %s: %s\n"
msgid "could not install %s as %s (%s)\n"
msgstr "impossibile installare %s come %s (%s)\n"
#: lib/libalpm/add.c:571
#, c-format
msgid "%s installed as %s\n"
msgstr "%s installato come %s\n"
#: lib/libalpm/add.c:588
#, c-format
msgid "extracting %s as %s.pacnew\n"
msgstr "estrazione di %s come %s.pacnew\n"
#: lib/libalpm/add.c:723 lib/libalpm/trans.c:526
#, c-format
msgid "could not get current working directory\n"
msgstr "impossibile ottenere la directory corrente\n"
msgstr "impossibile determinare la directory corrente\n"
#: lib/libalpm/add.c:777
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "si sono verificati degli errori durante l'aggiornamento di %s\n"
#: lib/libalpm/add.c:782
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "si sono verificati degli errori durante l'installazione di %s\n"
#: lib/libalpm/add.c:797
#, c-format
msgid "could not update database entry %s-%s\n"
msgstr "impossibile aggiornare la voce %s-%s nel database\n"
#: lib/libalpm/add.c:805
#, c-format
msgid "could not add entry '%s' in cache\n"
msgstr "impossible includere la voce '%s' nella cache\n"
#: lib/libalpm/be_files.c:221
#, c-format
msgid "could not remove database %s\n"
msgstr "impossibile rimuovere il database %s\n"
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "nome non valido per la voce del database '%s'\n"
#: lib/libalpm/be_files.c:291 lib/libalpm/be_files.c:428
#: lib/libalpm/be_files.c:451 lib/libalpm/be_files.c:562
#: lib/libalpm/be_files.c:640 lib/libalpm/be_files.c:668
#: lib/libalpm/package.c:885
#, c-format
msgid "corrupted database entry '%s'\n"
msgstr "la voce nel database '%s' è corrotta\n"
#, c-format
msgid "could not open file %s: %s\n"
msgstr "impossibile aprire il file %s: %s\n"
#: lib/libalpm/db.c:283
#, c-format
msgid "could not remove database entry %s%s\n"
msgstr "impossibile rimuovere la voce %s%s dal database\n"
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr ""
"il database %s è inconsistente: il nome del pacchetto %s non corrisponde\n"
#: lib/libalpm/db.c:551
#, c-format
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr ""
"il database %s è inconsistente: la versione del pacchetto %s non "
"corrisponde\n"
#, c-format
msgid "could not create directory %s: %s\n"
msgstr "impossibile creare la directory %s: %s\n"
#, c-format
msgid "could not parse package description file in %s\n"
msgstr "impossibile analizzare il file di descrizione del pacchetto in %s\n"
#, c-format
msgid "missing package name in %s\n"
msgstr "manca il nome del pacchetto in %s\n"
#, c-format
msgid "missing package version in %s\n"
msgstr "manca la versione del pacchetto in %s\n"
#, c-format
msgid "error while reading package %s: %s\n"
msgstr "si è verificato un errore durante la lettura del pacchetto %s: %s\n"
#, c-format
msgid "missing package metadata in %s\n"
msgstr "manca il metadata del pacchetto in %s\n"
#, c-format
msgid "attempt to re-register the 'local' DB\n"
msgstr "tentativo in corso di registrare di nuovo il database 'locale'\n"
msgstr "tentativo in corso di registrare di nuovo il DB 'locale'\n"
#: lib/libalpm/db.c:560 lib/libalpm/db.c:611
#, c-format
msgid "database path is undefined\n"
msgstr "il percorso del database non è definito\n"
msgstr "il percorso del database non è stato definito\n"
#: lib/libalpm/deps.c:171
#, c-format
msgid "dependency cycle detected:\n"
msgstr "individuato un possibile ciclo di dipendenze:\n"
#: lib/libalpm/deps.c:173
#, c-format
msgid "%s will be removed after its %s dependency\n"
msgstr "%s sarà rimosso dopo la sua dipendenza %s\n"
#: lib/libalpm/deps.c:175
#, c-format
msgid "%s will be installed before its %s dependency\n"
msgstr "%s sarà installato prima della sua dipendenza %s\n"
#: lib/libalpm/deps.c:588
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "sto ignorando il pacchetto %s-%s\n"
#, c-format
msgid "provider package was selected (%s provides %s)\n"
msgstr "il pacchetto è già stato selezionato (%s dipende da %s)\n"
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "impossibile risolvere \"%s\", una dipendenza di \"%s\"\n"
#: lib/libalpm/error.c:41
#, c-format
msgid "url '%s' is invalid\n"
msgstr "l'url '%s' non è esatto\n"
#, c-format
msgid "url scheme not specified, assuming HTTP\n"
msgstr "non è stato specificato il protocollo dell'url, sarà usato HTTP\n"
#, c-format
msgid "disk"
msgstr "disco"
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "impossibile scaricare il pacchetto '%s' da %s : %s\n"
#, c-format
msgid "cannot resume download, starting over\n"
msgstr "impossibile riprendere il download\n"
#, c-format
msgid "cannot write to file '%s'\n"
msgstr "impossibile scrivere nel file '%s'\n"
#, c-format
msgid "error writing to file '%s': %s\n"
msgstr "si è verificato un errore durante la scrittura nel file '%s': %s\n"
#, c-format
msgid "%s appears to be truncated: %jd/%jd bytes\n"
msgstr "%s sembra essere incompleto: %jd/%jd byte\n"
#, c-format
msgid "failed to download %s\n"
msgstr "impossibile scaricare %s\n"
#, c-format
msgid "out of memory!"
msgstr "memoria insufficiente!"
#: lib/libalpm/error.c:43
#, c-format
msgid "unexpected system error"
msgstr "errore di sistema inaspettato"
#: lib/libalpm/error.c:45
#, c-format
msgid "insufficient privileges"
msgstr "privilegi insufficienti"
#: lib/libalpm/error.c:47
#, c-format
msgid "could not find or read file"
msgstr "impossibile trovare o leggere il file"
#: lib/libalpm/error.c:49
#, c-format
msgid "could not find or read directory"
msgstr "impossibile trovare o leggere la directory"
#: lib/libalpm/error.c:51
#, c-format
msgid "wrong or NULL argument passed"
msgstr "è stato passato un argomento sbagliato o NULL"
#: lib/libalpm/error.c:54
#, c-format
msgid "library not initialized"
msgstr "libreria non inizializzata"
msgstr "la libreria non è stata inizializzata"
#: lib/libalpm/error.c:56
#, c-format
msgid "library already initialized"
msgstr "libreria già inizializzata"
msgstr "la libreria è già stata inizializzata"
#: lib/libalpm/error.c:58
#, c-format
msgid "unable to lock database"
msgstr "impossibile bloccare il database"
#: lib/libalpm/error.c:61
#, c-format
msgid "could not open database"
msgstr "impossibile aprire il database"
#: lib/libalpm/error.c:63
#, c-format
msgid "could not create database"
msgstr "impossibile creare il database"
#: lib/libalpm/error.c:65
#, c-format
msgid "database not initialized"
msgstr "database non inizializzato"
msgstr "il database non è stato inizializzato"
#: lib/libalpm/error.c:67
#, c-format
msgid "database already registered"
msgstr "il database è già registrato"
msgstr "il database è già stato registrato"
#: lib/libalpm/error.c:69
#, c-format
msgid "could not find database"
msgstr "impossibile trovare il database"
#: lib/libalpm/error.c:71
#, c-format
msgid "could not update database"
msgstr "impossibile aggiornare il database"
#: lib/libalpm/error.c:73
#, c-format
msgid "could not remove database entry"
msgstr "impossibile rimuovere la voce dal database"
#: lib/libalpm/error.c:76
#, c-format
msgid "invalid url for server"
msgstr "url non valido per il server"
#: lib/libalpm/error.c:83
msgid "could not set parameter"
msgstr "impossibile impostare il parametro"
#, c-format
msgid "no servers configured for repository"
msgstr "nessun server è stato configurato per il repository"
#: lib/libalpm/error.c:86
#, c-format
msgid "transaction already initialized"
msgstr "operazione già inizializzata"
msgstr "l'operazione è già stata inizializzata"
#: lib/libalpm/error.c:88 lib/libalpm/error.c:92
#, c-format
msgid "transaction not initialized"
msgstr "operazione non inizializzata"
msgstr "l'operazione non è stata inizializzata"
#: lib/libalpm/error.c:90
#, c-format
msgid "duplicate target"
msgstr "pacchetto doppio"
msgstr "pacchetto duplicato"
#: lib/libalpm/error.c:94
#, c-format
msgid "transaction not prepared"
msgstr "operazione non preparata"
msgstr "l'operazione non è stata preparata"
#: lib/libalpm/error.c:96
#, c-format
msgid "transaction aborted"
msgstr "operazione annullata"
msgstr "l'operazione è stata annullata"
#: lib/libalpm/error.c:98
#, c-format
msgid "operation not compatible with the transaction type"
msgstr "operazione incompatibile con il tipo di transazione"
msgstr "l'operazione è incompatibile con il tipo di transazione"
#: lib/libalpm/error.c:100
msgid "could not commit transaction"
msgstr "impossibile eseguire l'operazione"
#, c-format
msgid "transaction commit attempt when database is not locked"
msgstr "prova il commit dell'operazione quando il database non è bloccato"
#: lib/libalpm/error.c:102
msgid "could not download all files"
msgstr "impossibile prelevare tutti i file"
#: lib/libalpm/error.c:105
#, c-format
msgid "could not find or read package"
msgstr "impossibile trovare o leggere il pacchetto"
#: lib/libalpm/error.c:107
msgid "invalid or corrupted package"
msgstr "pacchetto non valido o corrotto"
#, c-format
msgid "operation cancelled due to ignorepkg"
msgstr "l'operazione è stata ignorata a causa di ignorepkg"
#: lib/libalpm/error.c:109
#, c-format
msgid "invalid or corrupted package"
msgstr "il pacchetto non è valido oppure è corrotto"
#, c-format
msgid "cannot open package file"
msgstr "impossibile aprire il pacchetto"
#: lib/libalpm/error.c:111
msgid "cannot load package data"
msgstr "impossibile caricare i dati del pacchetto"
#: lib/libalpm/error.c:113
msgid "package already installed"
msgstr "pacchetto già installato"
#: lib/libalpm/error.c:115
msgid "package not installed or lesser version"
msgstr "pacchetto non installato o una versione precedente"
#: lib/libalpm/error.c:117
#, c-format
msgid "cannot remove all files for package"
msgstr "impossibile rimuovere tutti i file del pacchetto"
#: lib/libalpm/error.c:119
msgid "package name is not valid"
#, c-format
msgid "package filename is not valid"
msgstr "il nome del pacchetto non è valido"
#: lib/libalpm/error.c:121
msgid "corrupted package"
msgstr "pacchetto corrotto"
#: lib/libalpm/error.c:123
#, c-format
msgid "no such repository"
msgstr "nessun repository corrispondente"
#: lib/libalpm/error.c:126
msgid "corrupted delta"
msgstr "il delta è corrotto"
#, c-format
msgid "invalid or corrupted delta"
msgstr "il delta non è valido oppure è corrotto"
#: lib/libalpm/error.c:128
#, c-format
msgid "delta patch failed"
msgstr "si sono verificati degli errori con la patch di delta"
#: lib/libalpm/error.c:131
msgid "group not found"
msgstr "gruppo non trovato"
#: lib/libalpm/error.c:134
#, c-format
msgid "could not satisfy dependencies"
msgstr "impossibile soddisfare le dipendenze"
#: lib/libalpm/error.c:136
#, c-format
msgid "conflicting dependencies"
msgstr "dipendenze in conflitto"
#: lib/libalpm/error.c:138
#, c-format
msgid "conflicting files"
msgstr "file in conflitto"
#: lib/libalpm/error.c:141
msgid "user aborted the operation"
msgstr "operazione annullata"
#, c-format
msgid "failed to retrieve some files"
msgstr "impossibile scaricare alcuni file"
#: lib/libalpm/error.c:143
msgid "internal error"
msgstr "errore interno"
#, c-format
msgid "invalid regular expression"
msgstr "l'espressione regolare non è valida"
#: lib/libalpm/error.c:145
#, c-format
msgid "libarchive error"
msgstr "errore di libarchive"
#: lib/libalpm/error.c:148
msgid "not confirmed"
msgstr "non confermato"
#, c-format
msgid "download library error"
msgstr "si è verificato un errore della libreria di download"
#: lib/libalpm/error.c:150
msgid "invalid regular expression"
msgstr "espressione regolare non valida"
#, c-format
msgid "error invoking external downloader"
msgstr "si è verificato un errore lanciando il downloader esterno"
#: lib/libalpm/error.c:153
msgid "connection to remote host failed"
msgstr "impossibile stabilire una connessione con l'host remoto"
#: lib/libalpm/error.c:156
#, c-format
msgid "unexpected error"
msgstr "errore inaspettato"
#: lib/libalpm/package.c:122
#, c-format
msgid "could not get md5sum for package %s-%s\n"
msgstr "impossibile recuperare la somma md5 del pacchetto %s-%s\n"
msgid "could not find %s in database -- skipping\n"
msgstr "impossibile trovare %s nel database, sarà ignorato\n"
#: lib/libalpm/package.c:131
#, c-format
msgid "md5sums do not match for package %s-%s\n"
msgstr "la somma md5 del pacchetto %s-%s non corrisponde\n"
msgid "cannot remove file '%s': %s\n"
msgstr "impossibile rimuovere il file '%s': %s\n"
#: lib/libalpm/package.c:844
#, c-format
msgid "%s: forcing upgrade to version %s\n"
msgstr "%s: aggiornamento forzato alla versione %s\n"
msgid "could not remove database entry %s-%s\n"
msgstr "impossibile rimuovere la voce %s-%s dal database\n"
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "impossibile rimuovere la voce '%s' dalla cache\n"
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: l'aggiornamento del pacchetto è stato ignorato (%s => %s)\n"
#, c-format
msgid "%s: ignoring package downgrade (%s => %s)\n"
msgstr "%s: il downgrade del pacchetto è stato ignorato (%s => %s)\n"
#, c-format
msgid "%s: downgrading from version %s to version %s\n"
msgstr "%s: downgrade in corso dalla versione %s alla versione %s\n"
#: lib/libalpm/package.c:849
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr ""
"%s: la versione installata (%s) è più recente di quella presente in %s (%s)\n"
#: lib/libalpm/package.c:1027
#, c-format
msgid "error extracting package description file to %s\n"
msgstr "impossibile estrarre il file di descrizione del pacchetto in %s\n"
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
msgstr "sto ignorando la sostituzione del pacchetto (%s-%s => %s-%s)\n"
#: lib/libalpm/package.c:1033
#, c-format
msgid "could not parse package description file in %s\n"
msgstr "impossibile analizzare il file di descrizione del pacchetto in %s\n"
msgid "cannot replace %s by %s\n"
msgstr "impossibile sostituire %s con %s\n"
#: lib/libalpm/package.c:1038
#, c-format
msgid "missing package name in %s\n"
msgstr "manca il nome del pacchetto in %s\n"
#: lib/libalpm/package.c:1042
#, c-format
msgid "missing package version in %s\n"
msgstr "manca la versione del pacchetto in %s\n"
#: lib/libalpm/package.c:1061 lib/libalpm/package.c:1074
#, c-format
msgid "error while reading package %s: %s\n"
msgstr "si è verificato un errore durante la lettura del pacchetto %s: %s\n"
#: lib/libalpm/package.c:1081
#, c-format
msgid "missing package metadata in %s\n"
msgstr "manca il metadata del pacchetto in %s\n"
#: lib/libalpm/remove.c:119
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "impossibile trovare %s nel database, sarà ignorato\n"
#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:247
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "impossibile rimuovere il file '%s': %s\n"
#: lib/libalpm/remove.c:341
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "impossibile rimuovere la voce %s-%s dal database\n"
#: lib/libalpm/remove.c:346
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "impossibile rimuovere la voce '%s' dalla cache\n"
#: lib/libalpm/server.c:54
#, c-format
msgid "url '%s' is invalid, ignoring\n"
msgstr "l'url '%s' non è corretto, sarà ignorato\n"
#: lib/libalpm/server.c:58
msgid "url scheme not specified, assuming http\n"
msgstr "il protocollo dell'url non è specificato, sarà usato http\n"
#: lib/libalpm/server.c:239
msgid "disk"
msgstr "disco"
#: lib/libalpm/server.c:243
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "impossibile recuperare il file '%s' da %s : %s\n"
#: lib/libalpm/server.c:273
msgid "cannot resume download, starting over\n"
msgstr "impossibile riprendere il download\n"
#: lib/libalpm/server.c:286
#, c-format
msgid "cannot write to file '%s'\n"
msgstr "impossibile scrivere nel file '%s'\n"
#: lib/libalpm/server.c:305
#, c-format
msgid "error downloading '%s': %s\n"
msgstr "si è verificato un errore durante il download di '%s': %s\n"
#: lib/libalpm/server.c:317
#, c-format
msgid "error writing to file '%s': %s\n"
msgstr "si è verificato un errore durante la scrittura nel file '%s': %s\n"
#: lib/libalpm/server.c:385
#, c-format
msgid "could not chdir to %s\n"
msgstr "impossibile spostarsi nella directory %s\n"
#: lib/libalpm/server.c:392
msgid "running XferCommand: fork failed!\n"
msgstr "avvio di XferCommand: processo non riuscito!\n"
#: lib/libalpm/server.c:443
msgid "URL does not contain a file for download\n"
msgstr "URL non contiene nessun file da scaricare\n"
#: lib/libalpm/server.c:456
#, c-format
msgid "failed to download %s\n"
msgstr "impossibile scaricare %s\n"
#: lib/libalpm/sync.c:133
#, c-format
msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
msgstr ""
"%s-%s: aggiornamento del pacchetto ignorato (per essere sostituito con %s-%"
"s)\n"
#: lib/libalpm/sync.c:248
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: aggiornamento del pacchetto ignorato (%s => %s)\n"
#: lib/libalpm/sync.c:309
#, c-format
msgid "repository '%s' not found\n"
msgstr "impossibile trovare il repository '%s'\n"
#: lib/libalpm/sync.c:336
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s è aggiornato, sarà ignorato\n"
#: lib/libalpm/sync.c:340
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s è aggiornato, sarà reinstallato\n"
#: lib/libalpm/sync.c:596 lib/libalpm/sync.c:601
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr ""
"installazione in corso di una versione meno recente del pacchetto %s (%s => %"
"s)\n"
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr "sono stati rilevati dei conflitti irrisolvibili\n"
#: lib/libalpm/sync.c:611
#, c-format
msgid "malloc failure: could not allocate %zd bytes\n"
msgstr "malloc failure: impossibile allocare %zd byte\n"
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgstr ""
"rimozione di '%s' dalla lista dei pacchetti perché va in conflitto con '%s'\n"
#: lib/libalpm/sync.c:812
#, c-format
msgid "command: %s\n"
msgstr "comando: %s\n"
#: lib/libalpm/sync.c:876 lib/libalpm/sync.c:886
#, c-format
msgid "can't get md5 checksum for file %s\n"
msgstr "impossibile recuperare il checksum md5 del file %s\n"
#: lib/libalpm/sync.c:902
#, c-format
msgid "file %s was corrupted (bad MD5 checksum)\n"
msgstr "il file %s è corrotto (MD5 errato)\n"
#: lib/libalpm/sync.c:1049
#, c-format
msgid "failed to retrieve some files from %s\n"
msgstr "impossibile recuperare alcuni file da %s\n"
msgstr "impossibile scaricare alcuni file da %s\n"
#: lib/libalpm/sync.c:1130
#, c-format
msgid "could not create removal transaction\n"
msgstr "impossibile avviare l'operazione di rimozione\n"
#: lib/libalpm/sync.c:1136
msgid "could not initialize the removal transaction\n"
msgstr "impossibile inizializzare l'operazione di rimozione\n"
#: lib/libalpm/sync.c:1158
msgid "could not prepare removal transaction\n"
msgstr "impossibile preparare l'operazione di rimozione\n"
#: lib/libalpm/sync.c:1164
msgid "could not commit removal transaction\n"
msgstr "impossibile eseguire l'operazione di rimozione\n"
#: lib/libalpm/sync.c:1175
#, c-format
msgid "could not create transaction\n"
msgstr "impossibile avviare l'operazione\n"
#: lib/libalpm/sync.c:1180
#, c-format
msgid "could not initialize the removal transaction\n"
msgstr "impossibile inizializzare l'operazione di rimozione\n"
#, c-format
msgid "could not initialize transaction\n"
msgstr "impossibile inizializzare l'operazione\n"
#: lib/libalpm/sync.c:1207
msgid "could not prepare transaction\n"
msgstr "impossibile preparare l'operazione\n"
#, c-format
msgid "could not prepare removal transaction\n"
msgstr "impossibile preparare l'operazione di rimozione\n"
#: lib/libalpm/sync.c:1212
#, c-format
msgid "could not commit removal transaction\n"
msgstr "impossibile eseguire l'operazione di rimozione\n"
#, c-format
msgid "could not commit transaction\n"
msgstr "impossibile eseguire l'operazione\n"
#: lib/libalpm/trans.c:212
#, c-format
msgid "could not remove lock file %s\n"
msgstr "impossibile rimuovere il file di lock %s\n"
#: lib/libalpm/trans.c:483
msgid "No /bin/sh in parent environment, aborting scriptlet\n"
msgstr "/bin/sh non è presente nell'ambiente, lo scriptlet sarà interrotto\n"
#: lib/libalpm/trans.c:494
#, c-format
msgid "could not create temp directory\n"
msgstr "impossibile creare la directory temporanea\n"
#: lib/libalpm/trans.c:533
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "impossibile spostarsi nella directory %s (%s)\n"
msgid "could not copy tempfile to %s (%s)\n"
msgstr "impossibile copiare il file temporaneo in %s (%s)\n"
#: lib/libalpm/trans.c:551
#, c-format
msgid "could not fork a new process (%s)\n"
msgstr "impossibile effettuare il fork di un nuovo processo (%s)\n"
#: lib/libalpm/trans.c:561
#, c-format
msgid "could not change the root directory (%s)\n"
msgstr "impossibile cambiare la root directory (%s)\n"
#: lib/libalpm/trans.c:566
#, c-format
msgid "could not change directory to / (%s)\n"
msgstr "impossibile spostarsi nella directory / (%s)\n"
#: lib/libalpm/trans.c:575
#, c-format
msgid "call to popen failed (%s)"
msgstr "chiamata a popen non riuscita (%s)"
#: lib/libalpm/trans.c:594
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr "chiamata a waitpid non riuscita (%s)\n"
#: lib/libalpm/trans.c:603
msgid "scriptlet failed to execute correctly\n"
msgstr "L'esecuzione dello scriptlet non è riuscita correttamente\n"
#: lib/libalpm/trans.c:612
#, c-format
msgid "could not remove tmpdir %s\n"
msgstr "impossibile rimuovere la directory temporanea %s\n"
#: lib/libalpm/util.c:207
#, c-format
msgid "failed to make path '%s' : %s\n"
msgstr "impossibile seguire il percorso '%s' : %s\n"
#: lib/libalpm/util.c:392
#, c-format
msgid "could not open %s: %s\n"
msgstr "impossibile aprire %s: %s\n"
#: lib/libalpm/util.c:579
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "impossibile spostarsi nella directory %s (%s)\n"
#, c-format
msgid "could not fork a new process (%s)\n"
msgstr "impossibile effettuare il fork di un nuovo processo (%s)\n"
#, c-format
msgid "could not change the root directory (%s)\n"
msgstr "impossibile cambiare la root directory (%s)\n"
#, c-format
msgid "could not change directory to / (%s)\n"
msgstr "impossibile spostarsi nella directory / (%s)\n"
#, c-format
msgid "call to popen failed (%s)"
msgstr "chiamata a popen non riuscita (%s)"
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr "chiamata a waitpid non riuscita (%s)\n"
#, c-format
msgid "command failed to execute correctly\n"
msgstr "l'esecuzione del comando non è riuscita correttamente\n"
#, c-format
msgid "no %s cache exists, creating...\n"
msgstr "la cache di %s non esiste, creazione in corso...\n"
#: lib/libalpm/util.c:595
#, c-format
msgid "couldn't create package cache, using /tmp instead\n"
msgstr ""
"impossibile creare la cache del pacchetto, al suo posto sarà usata /tmp\n"
#: lib/libalpm/util.c:644
#, c-format
msgid "md5: %s can't be opened\n"
msgstr "md5: impossibile aprire %s\n"
#: lib/libalpm/util.c:646
#, c-format
msgid "md5: %s can't be read\n"
msgstr "md5: impossibile leggere %s\n"
#~ msgid "loading package data for %s : level=%d\n"
#~ msgstr "caricamento in corso dei dati del pacchetto %s : livello=%d\n"
#~ msgid "adding '%s' to package cache for db '%s'\n"
#~ msgstr "aggiunta di '%s' alla cache del pacchetto per il database '%s'\n"
#~ msgid "could not remove tempfile %s\n"
#~ msgstr "impossibile rimuovere il file temporaneo %s\n"
#~ msgid "please remove '%s' first, using -Rd\n"
#~ msgstr "Si consiglia di rimuovere prima '%s', usando l'opzione -Rd\n"
#~ msgid "cannot resolve dependencies for \"%s\"\n"
#~ msgstr "impossibile risolvere le dipendenze per \"%s\"\n"
#~ msgid "could not update new database entry %s-%s\n"
#~ msgstr "impossibile aggiornare la nuova voce del database %s-%s\n"

591
lib/libalpm/po/kk.po Normal file
View File

@@ -0,0 +1,591 @@
# Kazakh translations for Pacman package manager package.
# Copyright (C) 2007 Judd Vinet <jvinet@zeroflux.org>
# This file is distributed under the same license as the Pacman package manager package.
# Baurzhan Muftakhidinov <baurthefirst@gmail.com> 2009
#
msgid ""
msgstr ""
"Project-Id-Version: Pacman package manager 3.0.0\n"
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
"POT-Creation-Date: 2009-07-27 21:15-0500\n"
"PO-Revision-Date: 2009-07-28 19:05+0600\n"
"Last-Translator: Baurzhan Muftakhidinov <baurthefirst@gmail.com>\n"
"Language-Team: Kazakh\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#, c-format
msgid "replacing older version %s-%s by %s in target list\n"
msgstr ""
"мақсаттар тізімінде ескірген %s-%s нұсқасы жаңа %s нұсқасымен алмастырылады\n"
#, c-format
msgid "skipping %s-%s because newer version %s is in the target list\n"
msgstr ""
"%s-%s өткізіледі, өйткені оның жаңа %s нұсқасы мақсаттар тізімінде бар болып "
"тұр\n"
#, c-format
msgid "conflicting packages were found in the target list\n"
msgstr "мақсаттар тізімінде ерегісетін дестелер табылды\n"
#, c-format
msgid "you cannot install two conflicting packages at the same time\n"
msgstr "сіз екі екі ерегісетін дестені орната алмайсыз\n"
#, c-format
msgid "replacing packages with -U is not supported yet\n"
msgstr "дестелерді -A мен -U опцияларын қолданып алмастыру әлі жасалмаған\n"
#, c-format
msgid "you can replace packages manually using -Rd and -U\n"
msgstr ""
"сіз дестелерді қолмен алмастыра аласыз, ол үшін -Rd мен -U қолданыңыз\n"
#, c-format
msgid ""
"directory permissions differ on %s\n"
"filesystem: %o package: %o\n"
msgstr ""
"%s бумасының қатынау рұқсаттары әр түрлі\n"
"файлдық жүйе: %o десте: %o\n"
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr "тарқату: бума %s файлымен ауыстырылмайды\n"
#, c-format
msgid "extract: symlink %s does not point to dir\n"
msgstr "тарқату: %s символдық сілтемесі бумаға көрсетіп тұрған жоқ\n"
#, c-format
msgid "could not extract %s (%s)\n"
msgstr "%s тарқату қатесі (%s)\n"
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "%s атын жаңа %s атына ауыстыру мүмкін емес (%s)\n"
#, c-format
msgid "%s saved as %s\n"
msgstr "%s қазір %s деп сақталды\n"
#, c-format
msgid "could not install %s as %s (%s)\n"
msgstr "%s қазір %s ретінде орнату мүмкін емес: %s\n"
#, c-format
msgid "%s installed as %s\n"
msgstr "%s қазір %s ретінде орнатылды\n"
#, c-format
msgid "extracting %s as %s.pacnew\n"
msgstr "%s қазір %s.pacnew ретінде сақталды\n"
#, c-format
msgid "could not get current working directory\n"
msgstr "ағымдағы жұмыс бумасын анықтау мүмкін емес\n"
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "%s жаңарту кезінде қате кетті\n"
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "%s орнату кезінде қате кетті\n"
#, c-format
msgid "could not update database entry %s-%s\n"
msgstr "дерекқорда жазбаны жаңарту мүмкін емес %s-%s\n"
#, c-format
msgid "could not add entry '%s' in cache\n"
msgstr "кэш ішіне '%s' жазбасын қосу мүмкін емес\n"
#, c-format
msgid "could not remove database %s\n"
msgstr "%s дерекқорын өшіру мүмкін емес\n"
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "дерекқордағы '%s' жазбасының аты қате\n"
#, c-format
msgid "corrupted database entry '%s'\n"
msgstr "дерекқордағы '%s' жазбасы зақымдалған\n"
#, c-format
msgid "could not open file %s: %s\n"
msgstr "%s файлын ашу мүмкін емес: %s\n"
#, c-format
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr "дерекқордағы қате ақпарат %s: %s дестесінің аты сәйкес келмейді\n"
#, c-format
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr "дерекқордағы қате ақпарат %s: %s дестесінің нұсқасы сәйкес келмейді\n"
#, c-format
msgid "could not create directory %s: %s\n"
msgstr "%s бумасын жасау мүмкін емес: %s\n"
#, c-format
msgid "could not parse package description file in %s\n"
msgstr "%s ішіндегі анықтама файлын зерттеу мүмкін емес\n"
#, c-format
msgid "missing package name in %s\n"
msgstr "%s ішінде десте аты жоқ\n"
#, c-format
msgid "missing package version in %s\n"
msgstr "%s ішінде десте нұсқасы жоқ\n"
#, c-format
msgid "error while reading package %s: %s\n"
msgstr "%s дестесін оқу қатесі: %s\n"
#, c-format
msgid "missing package metadata in %s\n"
msgstr "%s ішінде дестенің мета мәліметтері жоқ\n"
#, c-format
msgid "attempt to re-register the 'local' DB\n"
msgstr "дерекқорды қайта тіркеу талабы\n"
#, c-format
msgid "database path is undefined\n"
msgstr "дерекқорға жол анықталмаған\n"
#, c-format
msgid "dependency cycle detected:\n"
msgstr "циклдік тәуелділік табылды:\n"
#, c-format
msgid "%s will be removed after its %s dependency\n"
msgstr "%s қазір тәуелділік ретінде %s кейін өшіріледі\n"
#, c-format
msgid "%s will be installed before its %s dependency\n"
msgstr "%s қазір тәуелділік ретінде %s алдынан орнатылады\n"
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "дестені елемеу %s-%s\n"
#, c-format
msgid "provider package was selected (%s provides %s)\n"
msgstr "тандалған %s дестесі %s ұсынады\n"
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "\"%s\" шешу мүмкін емес, ол \"%s\" тәуелділігі болып тұр\n"
#, c-format
msgid "url '%s' is invalid\n"
msgstr "'%s' сілтемесі қате\n"
#, c-format
msgid "url scheme not specified, assuming HTTP\n"
msgstr "сілтеменің түрі анықталмады, HTTP деп саналады\n"
#, c-format
msgid "disk"
msgstr "дискі"
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "'%s' файлын %s адресінен алу қатемен аяқталды : %s\n"
#, c-format
msgid "cannot resume download, starting over\n"
msgstr "жүктемені жалғастыру мүмкін емес, басынан басталады\n"
#, c-format
msgid "cannot write to file '%s'\n"
msgstr "'%s' файлына жазу мүмкін емес\n"
#, c-format
msgid "error writing to file '%s': %s\n"
msgstr "'%s' файлына жазу қатесі: %s\n"
#, c-format
msgid "%s appears to be truncated: %jd/%jd bytes\n"
msgstr "%s қысқартылады: %jd/%jd байт\n"
#, c-format
msgid "failed to download %s\n"
msgstr "%s жүктеп алу мүмкін емес\n"
#, c-format
msgid "out of memory!"
msgstr "жады жеткіліксіз!"
#, c-format
msgid "unexpected system error"
msgstr "күтпеген қате"
#, c-format
msgid "insufficient privileges"
msgstr "құқықтар жеткіліксіз"
#, c-format
msgid "could not find or read file"
msgstr "файлды табу не оқу мүмкін емес"
#, c-format
msgid "could not find or read directory"
msgstr "буманы табу не оқу мүмкін емес"
#, c-format
msgid "wrong or NULL argument passed"
msgstr "аргумент қате не нөлдік болып тұр"
#, c-format
msgid "library not initialized"
msgstr "library іске қосылмады"
#, c-format
msgid "library already initialized"
msgstr "library іске қосылған болып тұр"
#, c-format
msgid "unable to lock database"
msgstr "дерекқорды оқшаулау мүмкін емес"
#, c-format
msgid "could not open database"
msgstr "дерекқорды ашу мүмкін емес"
#, c-format
msgid "could not create database"
msgstr "дерекқорды құру мүмкін емес"
#, c-format
msgid "database not initialized"
msgstr "дерекқор іске қосылмады"
#, c-format
msgid "database already registered"
msgstr "дерекқор тіркелген болып тұр"
#, c-format
msgid "could not find database"
msgstr "дерекқорды табу мүмкін емес"
#, c-format
msgid "could not update database"
msgstr "дерекқорды жаңарту мүмкін емес"
#, c-format
msgid "could not remove database entry"
msgstr "дерекқордан жазбаны өшіру мүмкін емес"
#, c-format
msgid "invalid url for server"
msgstr "сервер адресі қате"
#, c-format
msgid "no servers configured for repository"
msgstr "репозиторий үшін серверлер бапталмаған"
#, c-format
msgid "transaction already initialized"
msgstr "сұраным іске қосылған болып тұр"
#, c-format
msgid "transaction not initialized"
msgstr "сұраным іске қосылмады"
#, c-format
msgid "duplicate target"
msgstr "мақсаттардың қайталануы"
#, c-format
msgid "transaction not prepared"
msgstr "сұраным дайындалмады"
#, c-format
msgid "transaction aborted"
msgstr "сұраным тоқтатылды"
#, c-format
msgid "operation not compatible with the transaction type"
msgstr "әрекет сұранымның түрімен үйлеспейді"
#, c-format
msgid "transaction commit attempt when database is not locked"
msgstr "оқшауланбаған дерекқорға жазу талабы"
#, c-format
msgid "could not find or read package"
msgstr "дестені табу не оқу мүмкін емес"
#, c-format
msgid "operation cancelled due to ignorepkg"
msgstr "әрекет ignorepkg салдарынан тоқтатылды"
#, c-format
msgid "invalid or corrupted package"
msgstr "десте қате не зақымдалған"
#, c-format
msgid "cannot open package file"
msgstr "десте файлын ашу мүмкін емес"
#, c-format
msgid "cannot remove all files for package"
msgstr "дестенің барлық файлдарын өшіру мүмкін емес"
#, c-format
msgid "package filename is not valid"
msgstr "десте файлдың аты қате"
#, c-format
msgid "no such repository"
msgstr "мұндай репозиторий жоқ"
#, c-format
msgid "invalid or corrupted delta"
msgstr "дельта файлы қате не зақымдалған"
#, c-format
msgid "delta patch failed"
msgstr "дельта патчті қолдану қатемен аяқталды"
#, c-format
msgid "could not satisfy dependencies"
msgstr "тәуелділіктерді шешу мүмкін емес"
#, c-format
msgid "conflicting dependencies"
msgstr "ерегісетін тәуелділіктер"
#, c-format
msgid "conflicting files"
msgstr "ерегісетін файлдар"
#, c-format
msgid "failed to retrieve some files"
msgstr "кейбір файлдарды алу сәтсіз аяқталды"
#, c-format
msgid "invalid regular expression"
msgstr "тұрақты өрнек дұрыс емес"
#, c-format
msgid "libarchive error"
msgstr "libarchive қатесі орын алды"
#, c-format
msgid "download library error"
msgstr "download library қатесі орын алды"
#, c-format
msgid "error invoking external downloader"
msgstr "сыртқы жүктемелер менеджерін шақыру қатемен аяқталды"
#, c-format
msgid "unexpected error"
msgstr "күтпеген қате кетті"
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "дерекқор ішінде %s табылмады -- өткізіп жібереміз\n"
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr " '%s' файлын өшіру мүмкін емес: %s\n"
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "дерекқордан %s-%s жазбасын өшіру мүмкін емес\n"
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "кэш ішінен '%s' жазбасын өшіру мүмкін емес\n"
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: дестені жаңартуды елемеу (%s => %s)\n"
#, c-format
msgid "%s: ignoring package downgrade (%s => %s)\n"
msgstr "%s: десте нұсқасын төмендетуді елемеу (%s => %s)\n"
#, c-format
msgid "%s: downgrading from version %s to version %s\n"
msgstr "%s: қазіргі %s нұсқасынан %s нұсқасына дейін төмендету\n"
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr "%s: орнатылған нұсқа (%s), %s (%s) ішіндегісінен жаңа болып тұр\n"
#, c-format
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
msgstr "дестені алмастыруды елемеу (%s-%s => %s-%s)\n"
#, c-format
msgid "cannot replace %s by %s\n"
msgstr "%s жаңа %s нұсқасымен алмастыру мүмкін емес\n"
#, c-format
msgid "repository '%s' not found\n"
msgstr "'%s' репозиторийі табылмады\n"
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s ескірмеді -- өткізіледі\n"
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s ескірмеді -- қайта орнатылады\n"
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "дестенің нұсқасын төмендету %s (%s => %s)\n"
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr "шешілмейтін дестелер ерегісі табылды\n"
#, c-format
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgstr ""
"мақсаттар тізімінен '%s' өшіріледі, өйткені ол '%s' дестесімен ерегіседі\n"
#, c-format
msgid "failed to retrieve some files from %s\n"
msgstr "%s адресінен кейбір файлдарды алу мүмкін емес\n"
#, c-format
msgid "could not create removal transaction\n"
msgstr "өшіруге сұранымды құру мүмкін емес\n"
#, c-format
msgid "could not create transaction\n"
msgstr "сұранымды жасау мүмкін емес\n"
#, c-format
msgid "could not initialize the removal transaction\n"
msgstr "өшіруге сұранымды іске қосу мүмкін емес\n"
#, c-format
msgid "could not initialize transaction\n"
msgstr "сұранымды іске қосу мүмкін емес\n"
#, c-format
msgid "could not prepare removal transaction\n"
msgstr "өшіруге сұранымды дайындау мүмкін емес\n"
#, c-format
msgid "could not commit removal transaction\n"
msgstr "өшіруге сұранымды орындау мүмкін емес\n"
#, c-format
msgid "could not commit transaction\n"
msgstr "сұранымды аяқтау мүмкін емес\n"
#, c-format
msgid "could not remove lock file %s\n"
msgstr "%s оқшау файлын өшіру мүмкін емес\n"
#, c-format
msgid "could not create temp directory\n"
msgstr "уақытша буманы құру мүмкін емес\n"
#, c-format
msgid "could not copy tempfile to %s (%s)\n"
msgstr "уақытша файлды %s ішіне көшіру мүмкін емес (%s)\n"
#, c-format
msgid "could not remove tmpdir %s\n"
msgstr "tmpdir %s өшіру мүмкін емес\n"
#, c-format
msgid "could not open %s: %s\n"
msgstr "%s ашу мүмкін емес: %s\n"
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "%s бумасына ауысу мүмкін емес (%s)\n"
#, c-format
msgid "could not fork a new process (%s)\n"
msgstr "жаңа үрдісті құру мүмкін емес (%s)\n"
#, c-format
msgid "could not change the root directory (%s)\n"
msgstr "түбірлік буманы ауыстыру мүмкін емес (%s)\n"
#, c-format
msgid "could not change directory to / (%s)\n"
msgstr "/ бумасына ауысу мүмкін емес (%s)\n"
#, c-format
msgid "call to popen failed (%s)"
msgstr "popen шақыру қатемен аяқталды (%s)"
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr "waitpid шақыру қатемен аяқталды(%s)\n"
#, c-format
msgid "command failed to execute correctly\n"
msgstr "команда дұрыс орындалмады\n"
#, c-format
msgid "no %s cache exists, creating...\n"
msgstr "%s кэші жоқ болып тұр, құрылады...\n"
#, c-format
msgid "couldn't create package cache, using /tmp instead\n"
msgstr "дестелер кэшін құру мүмкін емес, оның орнына /tmp қолданылады\n"
#~ msgid "error downloading '%s': %s\n"
#~ msgstr "'%s' жүктеп алу қатесі: %s\n"
#~ msgid "could not chdir to %s\n"
#~ msgstr "%s бумасына ауысу мүмкін емес\n"
#~ msgid "running XferCommand: fork failed!\n"
#~ msgstr "XferCommand қосу: сәтсіз аяқталды\n"
#~ msgid "could not commit transaction"
#~ msgstr "сұранымды аяқтау мүмкін емес"
#~ msgid "could not download all files"
#~ msgstr "барлық файлдарды жүктеп алу мүмкін емес"
#~ msgid "cannot load package data"
#~ msgstr "дестенің мәліметтерін жүктеу мүмкін емес"
#~ msgid "package not installed or lesser version"
#~ msgstr "десте орнатылмаған, не оның нұсқасы ескі"
#~ msgid "group not found"
#~ msgstr "топ табылмады"
#~ msgid "user aborted the operation"
#~ msgstr "әрекетті пайдаланушы тоқтатты"
#~ msgid "internal error"
#~ msgstr "ішкі қате орын алды"
#~ msgid "not confirmed"
#~ msgstr "расталмады"
#~ msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
#~ msgstr ""
#~ "%s-%s: дестені жаңартуды елемеу (ол %s-%s нұсқасымен ауыстырылады)\n"
#~ msgid "command: %s\n"
#~ msgstr "командасы: %s\n"
#~ msgid "could not prepare transaction\n"
#~ msgstr "сұранымды дайындау мүмкін емес\n"
#~ msgid "No /bin/sh in parent environment, aborting scriptlet\n"
#~ msgstr "Бастапқы ортада /bin/sh жоқ, скрипт орындалмайды\n"

View File

@@ -1,5 +1,5 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Judd Vinet <jvinet@zeroflux.org>
# Copyright (C) YEAR Pacman Development Team <pacman-dev@archlinux.org>
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
"POT-Creation-Date: 2008-01-14 23:08-0600\n"
"POT-Creation-Date: 2009-07-27 21:15-0500\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"
@@ -16,637 +16,524 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: lib/libalpm/add.c:86
#, c-format
msgid "replacing older version %s-%s by %s in target list\n"
msgstr ""
#: lib/libalpm/add.c:95
#, c-format
msgid "newer version %s-%s is in the target list -- skipping\n"
msgid "skipping %s-%s because newer version %s is in the target list\n"
msgstr ""
#: lib/libalpm/add.c:166
#, c-format
msgid "conflicting packages were found in the target list\n"
msgstr ""
#: lib/libalpm/add.c:167
#, c-format
msgid "you cannot install two conflicting packages at the same time\n"
msgstr ""
#: lib/libalpm/add.c:170
msgid "replacing packages with -A and -U is not supported yet\n"
#, c-format
msgid "replacing packages with -U is not supported yet\n"
msgstr ""
#: lib/libalpm/add.c:171
#, c-format
msgid "you can replace packages manually using -Rd and -U\n"
msgstr ""
#: lib/libalpm/add.c:377
#, c-format
msgid ""
"directory permissions differ on %s\n"
"filesystem: %o package: %o\n"
msgstr ""
#: lib/libalpm/add.c:404
#, c-format
msgid "extract: symlink %s does not point to dir\n"
msgstr ""
#: lib/libalpm/add.c:411
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr ""
#: lib/libalpm/add.c:466 lib/libalpm/add.c:610 lib/libalpm/util.c:428
#, c-format
msgid "extract: symlink %s does not point to dir\n"
msgstr ""
#, c-format
msgid "could not extract %s (%s)\n"
msgstr ""
#: lib/libalpm/add.c:517
#, c-format
msgid "could not rename %s (%s)\n"
msgid "could not rename %s to %s (%s)\n"
msgstr ""
#: lib/libalpm/add.c:524 lib/libalpm/add.c:544 lib/libalpm/trans.c:508
#, c-format
msgid "could not copy tempfile to %s (%s)\n"
msgstr ""
#: lib/libalpm/add.c:529 lib/libalpm/remove.c:238
#, c-format
msgid "%s saved as %s\n"
msgstr ""
#: lib/libalpm/add.c:568
#, c-format
msgid "could not install %s as %s: %s\n"
msgid "could not install %s as %s (%s)\n"
msgstr ""
#: lib/libalpm/add.c:571
#, c-format
msgid "%s installed as %s\n"
msgstr ""
#: lib/libalpm/add.c:588
#, c-format
msgid "extracting %s as %s.pacnew\n"
msgstr ""
#: lib/libalpm/add.c:723 lib/libalpm/trans.c:526
#, c-format
msgid "could not get current working directory\n"
msgstr ""
#: lib/libalpm/add.c:777
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr ""
#: lib/libalpm/add.c:782
#, c-format
msgid "problem occurred while installing %s\n"
msgstr ""
#: lib/libalpm/add.c:797
#, c-format
msgid "could not update database entry %s-%s\n"
msgstr ""
#: lib/libalpm/add.c:805
#, c-format
msgid "could not add entry '%s' in cache\n"
msgstr ""
#: lib/libalpm/be_files.c:221
#, c-format
msgid "could not remove database %s\n"
msgstr ""
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr ""
#: lib/libalpm/be_files.c:291 lib/libalpm/be_files.c:428
#: lib/libalpm/be_files.c:451 lib/libalpm/be_files.c:562
#: lib/libalpm/be_files.c:640 lib/libalpm/be_files.c:668
#: lib/libalpm/package.c:885
#, c-format
msgid "corrupted database entry '%s'\n"
msgstr ""
#, c-format
msgid "could not open file %s: %s\n"
msgstr ""
#: lib/libalpm/db.c:283
#, c-format
msgid "could not remove database entry %s%s\n"
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr ""
#: lib/libalpm/db.c:551
msgid "attempt to re-register the 'local' DB\n"
msgstr ""
#: lib/libalpm/db.c:560 lib/libalpm/db.c:611
msgid "database path is undefined\n"
msgstr ""
#: lib/libalpm/deps.c:171
msgid "dependency cycle detected:\n"
msgstr ""
#: lib/libalpm/deps.c:173
#, c-format
msgid "%s will be removed after its %s dependency\n"
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr ""
#: lib/libalpm/deps.c:175
#, c-format
msgid "%s will be installed before its %s dependency\n"
msgid "could not create directory %s: %s\n"
msgstr ""
#: lib/libalpm/deps.c:588
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr ""
#: lib/libalpm/error.c:41
msgid "out of memory!"
msgstr ""
#: lib/libalpm/error.c:43
msgid "unexpected system error"
msgstr ""
#: lib/libalpm/error.c:45
msgid "insufficient privileges"
msgstr ""
#: lib/libalpm/error.c:47
msgid "could not find or read file"
msgstr ""
#: lib/libalpm/error.c:49
msgid "could not find or read directory"
msgstr ""
#: lib/libalpm/error.c:51
msgid "wrong or NULL argument passed"
msgstr ""
#: lib/libalpm/error.c:54
msgid "library not initialized"
msgstr ""
#: lib/libalpm/error.c:56
msgid "library already initialized"
msgstr ""
#: lib/libalpm/error.c:58
msgid "unable to lock database"
msgstr ""
#: lib/libalpm/error.c:61
msgid "could not open database"
msgstr ""
#: lib/libalpm/error.c:63
msgid "could not create database"
msgstr ""
#: lib/libalpm/error.c:65
msgid "database not initialized"
msgstr ""
#: lib/libalpm/error.c:67
msgid "database already registered"
msgstr ""
#: lib/libalpm/error.c:69
msgid "could not find database"
msgstr ""
#: lib/libalpm/error.c:71
msgid "could not update database"
msgstr ""
#: lib/libalpm/error.c:73
msgid "could not remove database entry"
msgstr ""
#: lib/libalpm/error.c:76
msgid "invalid url for server"
msgstr ""
#: lib/libalpm/error.c:83
msgid "could not set parameter"
msgstr ""
#: lib/libalpm/error.c:86
msgid "transaction already initialized"
msgstr ""
#: lib/libalpm/error.c:88 lib/libalpm/error.c:92
msgid "transaction not initialized"
msgstr ""
#: lib/libalpm/error.c:90
msgid "duplicate target"
msgstr ""
#: lib/libalpm/error.c:94
msgid "transaction not prepared"
msgstr ""
#: lib/libalpm/error.c:96
msgid "transaction aborted"
msgstr ""
#: lib/libalpm/error.c:98
msgid "operation not compatible with the transaction type"
msgstr ""
#: lib/libalpm/error.c:100
msgid "could not commit transaction"
msgstr ""
#: lib/libalpm/error.c:102
msgid "could not download all files"
msgstr ""
#: lib/libalpm/error.c:105
msgid "could not find or read package"
msgstr ""
#: lib/libalpm/error.c:107
msgid "invalid or corrupted package"
msgstr ""
#: lib/libalpm/error.c:109
msgid "cannot open package file"
msgstr ""
#: lib/libalpm/error.c:111
msgid "cannot load package data"
msgstr ""
#: lib/libalpm/error.c:113
msgid "package already installed"
msgstr ""
#: lib/libalpm/error.c:115
msgid "package not installed or lesser version"
msgstr ""
#: lib/libalpm/error.c:117
msgid "cannot remove all files for package"
msgstr ""
#: lib/libalpm/error.c:119
msgid "package name is not valid"
msgstr ""
#: lib/libalpm/error.c:121
msgid "corrupted package"
msgstr ""
#: lib/libalpm/error.c:123
msgid "no such repository"
msgstr ""
#: lib/libalpm/error.c:126
msgid "corrupted delta"
msgstr ""
#: lib/libalpm/error.c:128
msgid "delta patch failed"
msgstr ""
#: lib/libalpm/error.c:131
msgid "group not found"
msgstr ""
#: lib/libalpm/error.c:134
msgid "could not satisfy dependencies"
msgstr ""
#: lib/libalpm/error.c:136
msgid "conflicting dependencies"
msgstr ""
#: lib/libalpm/error.c:138
msgid "conflicting files"
msgstr ""
#: lib/libalpm/error.c:141
msgid "user aborted the operation"
msgstr ""
#: lib/libalpm/error.c:143
msgid "internal error"
msgstr ""
#: lib/libalpm/error.c:145
msgid "libarchive error"
msgstr ""
#: lib/libalpm/error.c:148
msgid "not confirmed"
msgstr ""
#: lib/libalpm/error.c:150
msgid "invalid regular expression"
msgstr ""
#: lib/libalpm/error.c:153
msgid "connection to remote host failed"
msgstr ""
#: lib/libalpm/error.c:156
msgid "unexpected error"
msgstr ""
#: lib/libalpm/package.c:122
#, c-format
msgid "could not get md5sum for package %s-%s\n"
msgstr ""
#: lib/libalpm/package.c:131
#, c-format
msgid "md5sums do not match for package %s-%s\n"
msgstr ""
#: lib/libalpm/package.c:844
#, c-format
msgid "%s: forcing upgrade to version %s\n"
msgstr ""
#: lib/libalpm/package.c:849
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr ""
#: lib/libalpm/package.c:1027
#, c-format
msgid "error extracting package description file to %s\n"
msgstr ""
#: lib/libalpm/package.c:1033
#, c-format
msgid "could not parse package description file in %s\n"
msgstr ""
#: lib/libalpm/package.c:1038
#, c-format
msgid "missing package name in %s\n"
msgstr ""
#: lib/libalpm/package.c:1042
#, c-format
msgid "missing package version in %s\n"
msgstr ""
#: lib/libalpm/package.c:1061 lib/libalpm/package.c:1074
#, c-format
msgid "error while reading package %s: %s\n"
msgstr ""
#: lib/libalpm/package.c:1081
#, c-format
msgid "missing package metadata in %s\n"
msgstr ""
#: lib/libalpm/remove.c:119
#, c-format
msgid "could not find %s in database -- skipping\n"
msgid "attempt to re-register the 'local' DB\n"
msgstr ""
#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:247
#, c-format
msgid "cannot remove file '%s': %s\n"
msgid "database path is undefined\n"
msgstr ""
#: lib/libalpm/remove.c:341
#, c-format
msgid "could not remove database entry %s-%s\n"
msgid "dependency cycle detected:\n"
msgstr ""
#: lib/libalpm/remove.c:346
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgid "%s will be removed after its %s dependency\n"
msgstr ""
#: lib/libalpm/server.c:54
#, c-format
msgid "url '%s' is invalid, ignoring\n"
msgid "%s will be installed before its %s dependency\n"
msgstr ""
#: lib/libalpm/server.c:58
msgid "url scheme not specified, assuming http\n"
#, c-format
msgid "ignoring package %s-%s\n"
msgstr ""
#: lib/libalpm/server.c:239
#, c-format
msgid "provider package was selected (%s provides %s)\n"
msgstr ""
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr ""
#, c-format
msgid "url '%s' is invalid\n"
msgstr ""
#, c-format
msgid "url scheme not specified, assuming HTTP\n"
msgstr ""
#, c-format
msgid "disk"
msgstr ""
#: lib/libalpm/server.c:243
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr ""
#: lib/libalpm/server.c:273
#, c-format
msgid "cannot resume download, starting over\n"
msgstr ""
#: lib/libalpm/server.c:286
#, c-format
msgid "cannot write to file '%s'\n"
msgstr ""
#: lib/libalpm/server.c:305
#, c-format
msgid "error downloading '%s': %s\n"
msgstr ""
#: lib/libalpm/server.c:317
#, c-format
msgid "error writing to file '%s': %s\n"
msgstr ""
#: lib/libalpm/server.c:385
#, c-format
msgid "could not chdir to %s\n"
msgid "%s appears to be truncated: %jd/%jd bytes\n"
msgstr ""
#: lib/libalpm/server.c:392
msgid "running XferCommand: fork failed!\n"
msgstr ""
#: lib/libalpm/server.c:443
msgid "URL does not contain a file for download\n"
msgstr ""
#: lib/libalpm/server.c:456
#, c-format
msgid "failed to download %s\n"
msgstr ""
#: lib/libalpm/sync.c:133
#, c-format
msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
msgid "out of memory!"
msgstr ""
#, c-format
msgid "unexpected system error"
msgstr ""
#, c-format
msgid "insufficient privileges"
msgstr ""
#, c-format
msgid "could not find or read file"
msgstr ""
#, c-format
msgid "could not find or read directory"
msgstr ""
#, c-format
msgid "wrong or NULL argument passed"
msgstr ""
#, c-format
msgid "library not initialized"
msgstr ""
#, c-format
msgid "library already initialized"
msgstr ""
#, c-format
msgid "unable to lock database"
msgstr ""
#, c-format
msgid "could not open database"
msgstr ""
#, c-format
msgid "could not create database"
msgstr ""
#, c-format
msgid "database not initialized"
msgstr ""
#, c-format
msgid "database already registered"
msgstr ""
#, c-format
msgid "could not find database"
msgstr ""
#, c-format
msgid "could not update database"
msgstr ""
#, c-format
msgid "could not remove database entry"
msgstr ""
#, c-format
msgid "invalid url for server"
msgstr ""
#, c-format
msgid "no servers configured for repository"
msgstr ""
#, c-format
msgid "transaction already initialized"
msgstr ""
#, c-format
msgid "transaction not initialized"
msgstr ""
#, c-format
msgid "duplicate target"
msgstr ""
#, c-format
msgid "transaction not prepared"
msgstr ""
#, c-format
msgid "transaction aborted"
msgstr ""
#, c-format
msgid "operation not compatible with the transaction type"
msgstr ""
#, c-format
msgid "transaction commit attempt when database is not locked"
msgstr ""
#, c-format
msgid "could not find or read package"
msgstr ""
#, c-format
msgid "operation cancelled due to ignorepkg"
msgstr ""
#, c-format
msgid "invalid or corrupted package"
msgstr ""
#, c-format
msgid "cannot open package file"
msgstr ""
#, c-format
msgid "cannot remove all files for package"
msgstr ""
#, c-format
msgid "package filename is not valid"
msgstr ""
#, c-format
msgid "no such repository"
msgstr ""
#, c-format
msgid "invalid or corrupted delta"
msgstr ""
#, c-format
msgid "delta patch failed"
msgstr ""
#, c-format
msgid "could not satisfy dependencies"
msgstr ""
#, c-format
msgid "conflicting dependencies"
msgstr ""
#, c-format
msgid "conflicting files"
msgstr ""
#, c-format
msgid "failed to retrieve some files"
msgstr ""
#, c-format
msgid "invalid regular expression"
msgstr ""
#, c-format
msgid "libarchive error"
msgstr ""
#, c-format
msgid "download library error"
msgstr ""
#, c-format
msgid "error invoking external downloader"
msgstr ""
#, c-format
msgid "unexpected error"
msgstr ""
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr ""
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr ""
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr ""
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr ""
#: lib/libalpm/sync.c:248
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr ""
#: lib/libalpm/sync.c:309
#, c-format
msgid "%s: ignoring package downgrade (%s => %s)\n"
msgstr ""
#, c-format
msgid "%s: downgrading from version %s to version %s\n"
msgstr ""
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr ""
#, c-format
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
msgstr ""
#, c-format
msgid "cannot replace %s by %s\n"
msgstr ""
#, c-format
msgid "repository '%s' not found\n"
msgstr ""
#: lib/libalpm/sync.c:336
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr ""
#: lib/libalpm/sync.c:340
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr ""
#: lib/libalpm/sync.c:596 lib/libalpm/sync.c:601
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr ""
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr ""
#: lib/libalpm/sync.c:611
#, c-format
msgid "malloc failure: could not allocate %zd bytes\n"
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgstr ""
#: lib/libalpm/sync.c:812
#, c-format
msgid "command: %s\n"
msgstr ""
#: lib/libalpm/sync.c:876 lib/libalpm/sync.c:886
#, c-format
msgid "can't get md5 checksum for file %s\n"
msgstr ""
#: lib/libalpm/sync.c:902
#, c-format
msgid "file %s was corrupted (bad MD5 checksum)\n"
msgstr ""
#: lib/libalpm/sync.c:1049
#, c-format
msgid "failed to retrieve some files from %s\n"
msgstr ""
#: lib/libalpm/sync.c:1130
#, c-format
msgid "could not create removal transaction\n"
msgstr ""
#: lib/libalpm/sync.c:1136
msgid "could not initialize the removal transaction\n"
msgstr ""
#: lib/libalpm/sync.c:1158
msgid "could not prepare removal transaction\n"
msgstr ""
#: lib/libalpm/sync.c:1164
msgid "could not commit removal transaction\n"
msgstr ""
#: lib/libalpm/sync.c:1175
#, c-format
msgid "could not create transaction\n"
msgstr ""
#: lib/libalpm/sync.c:1180
#, c-format
msgid "could not initialize the removal transaction\n"
msgstr ""
#, c-format
msgid "could not initialize transaction\n"
msgstr ""
#: lib/libalpm/sync.c:1207
msgid "could not prepare transaction\n"
#, c-format
msgid "could not prepare removal transaction\n"
msgstr ""
#: lib/libalpm/sync.c:1212
#, c-format
msgid "could not commit removal transaction\n"
msgstr ""
#, c-format
msgid "could not commit transaction\n"
msgstr ""
#: lib/libalpm/trans.c:212
#, c-format
msgid "could not remove lock file %s\n"
msgstr ""
#: lib/libalpm/trans.c:483
msgid "No /bin/sh in parent environment, aborting scriptlet\n"
msgstr ""
#: lib/libalpm/trans.c:494
#, c-format
msgid "could not create temp directory\n"
msgstr ""
#: lib/libalpm/trans.c:533
#, c-format
msgid "could not change directory to %s (%s)\n"
msgid "could not copy tempfile to %s (%s)\n"
msgstr ""
#: lib/libalpm/trans.c:551
#, c-format
msgid "could not fork a new process (%s)\n"
msgstr ""
#: lib/libalpm/trans.c:561
#, c-format
msgid "could not change the root directory (%s)\n"
msgstr ""
#: lib/libalpm/trans.c:566
#, c-format
msgid "could not change directory to / (%s)\n"
msgstr ""
#: lib/libalpm/trans.c:575
#, c-format
msgid "call to popen failed (%s)"
msgstr ""
#: lib/libalpm/trans.c:594
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr ""
#: lib/libalpm/trans.c:603
msgid "scriptlet failed to execute correctly\n"
msgstr ""
#: lib/libalpm/trans.c:612
#, c-format
msgid "could not remove tmpdir %s\n"
msgstr ""
#: lib/libalpm/util.c:207
#, c-format
msgid "failed to make path '%s' : %s\n"
msgstr ""
#: lib/libalpm/util.c:392
#, c-format
msgid "could not open %s: %s\n"
msgstr ""
#: lib/libalpm/util.c:579
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr ""
#, c-format
msgid "could not fork a new process (%s)\n"
msgstr ""
#, c-format
msgid "could not change the root directory (%s)\n"
msgstr ""
#, c-format
msgid "could not change directory to / (%s)\n"
msgstr ""
#, c-format
msgid "call to popen failed (%s)"
msgstr ""
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr ""
#, c-format
msgid "command failed to execute correctly\n"
msgstr ""
#, c-format
msgid "no %s cache exists, creating...\n"
msgstr ""
#: lib/libalpm/util.c:595
#, c-format
msgid "couldn't create package cache, using /tmp instead\n"
msgstr ""
#: lib/libalpm/util.c:644
#, c-format
msgid "md5: %s can't be opened\n"
msgstr ""
#: lib/libalpm/util.c:646
#, c-format
msgid "md5: %s can't be read\n"
msgstr ""

596
lib/libalpm/po/pl.po Normal file
View File

@@ -0,0 +1,596 @@
# Polish translations for Pacman package manager package
# Polskie tłumaczenia dla pakietu Pacman package manager.
# Copyright (C) 2007 Judd Vinet <jvinet@zeroflux.org>
# This file is distributed under the same license as the Pacman package manager package.
# Mateusz Jędrasik <m.jedrasik@gmail.com>, 2007.
# Mateusz Herych <heniekk@gmail.com>, 2008-2009.
# #
msgid ""
msgstr ""
"Project-Id-Version: Pacman package manager 3.0.1\n"
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
"POT-Creation-Date: 2009-07-27 21:15-0500\n"
"PO-Revision-Date: 2009-07-29 10:39+0100\n"
"Last-Translator: Mateusz Herych <heniekk@gmail.com>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\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==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
#, c-format
msgid "replacing older version %s-%s by %s in target list\n"
msgstr "zastępowanie starszej wersji %s-%s na %s z listy celów\n"
#, c-format
msgid "skipping %s-%s because newer version %s is in the target list\n"
msgstr "pomijam %s-%s ponieważ na liście celów znajduje się nowsza wersja %s\n"
#, c-format
msgid "conflicting packages were found in the target list\n"
msgstr ""
"konfliktujące pakiety znalazły się na liście pakietów do zainstalowania\n"
#, c-format
msgid "you cannot install two conflicting packages at the same time\n"
msgstr ""
"nie możesz mieć zainstalowanych dwóch konfliktujących ze sobą pakietów w tym "
"samym czasie\n"
#, c-format
msgid "replacing packages with -U is not supported yet\n"
msgstr "zastępowanie pakietów za pomocą -U nie jest już wspierane\n"
# hmm
#, c-format
msgid "you can replace packages manually using -Rd and -U\n"
msgstr "możesz zastąpić pakiety ręcznie, używając opcji -Rd oraz -U\n"
#, c-format
msgid ""
"directory permissions differ on %s\n"
"filesystem: %o package: %o\n"
msgstr ""
"Różne prawa dla %s\n"
"system plików: %o pakiet: %o\n"
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr "rozpakowywanie: nie nadpisuję katalogu plikiem %s\n"
#, c-format
msgid "extract: symlink %s does not point to dir\n"
msgstr "rozpakowywanie: dowiązanie symboliczne %s nie kieruje do katalogu\n"
#, c-format
msgid "could not extract %s (%s)\n"
msgstr "nie udało się rozpakować %s (%s)\n"
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "nie udało się zmienić nazwy %s na %s (%s)\n"
#, c-format
msgid "%s saved as %s\n"
msgstr "%s zachowane jako %s\n"
#, c-format
msgid "could not install %s as %s (%s)\n"
msgstr "nie udało się zainstalować %s jako %s (%s)\n"
#, c-format
msgid "%s installed as %s\n"
msgstr "%s zainstalowano jako %s\n"
#, c-format
msgid "extracting %s as %s.pacnew\n"
msgstr "rozpakowywanie %s jako %s.pacnew\n"
#, c-format
msgid "could not get current working directory\n"
msgstr "nie można znaleźć obecnego katalogu\n"
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "wystąpiły błędy podczas aktualizacji %s\n"
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "wystąpiły błędy podczas instalacji %s\n"
#, c-format
msgid "could not update database entry %s-%s\n"
msgstr "nie udało się zaktualizować pozycji bazy danych %s-%s\n"
#, c-format
msgid "could not add entry '%s' in cache\n"
msgstr "nie udało się dodać pozycji '%s' w pliku podręcznym\n"
#, c-format
msgid "could not remove database %s\n"
msgstr "nie można usunąć bazy danych %s\n"
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "nieprawidłowa nazwa dla wpisu bazy danych '%s'\n"
#, c-format
msgid "corrupted database entry '%s'\n"
msgstr "zepsuty wpis w bazie danych '%s'\n"
#, c-format
msgid "could not open file %s: %s\n"
msgstr "nie udało się otworzyć pliku %s: %s\n"
#, c-format
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr "baza danych %s jest sprzeczna: niedopasowana nazwa w pakiecie %s\n"
#, c-format
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr "baza danych %s jest sprzeczna: niedopasowana wersja w pakiecie %s\n"
#, c-format
msgid "could not create directory %s: %s\n"
msgstr "nie można stworzyć katalogu %s: %s\n"
#, c-format
msgid "could not parse package description file in %s\n"
msgstr "nie udało się przeczytać opisu pliku w %s\n"
#, c-format
msgid "missing package name in %s\n"
msgstr "brak nazwy pakietu w %s\n"
#, c-format
msgid "missing package version in %s\n"
msgstr "brak wersji pakietu w %s\n"
#, c-format
msgid "error while reading package %s: %s\n"
msgstr "błąd odczytywania pakietu: %s: %s\n"
#, c-format
msgid "missing package metadata in %s\n"
msgstr "brak metadanych pakietu w %s\n"
#, c-format
msgid "attempt to re-register the 'local' DB\n"
msgstr "próba ponownej rejestracji 'lokalnej' BD\n"
#, c-format
msgid "database path is undefined\n"
msgstr "ścieżka bazy danych jest niezdefiniowana\n"
#, c-format
msgid "dependency cycle detected:\n"
msgstr "wykryto cykl zależności:\n"
#, c-format
msgid "%s will be removed after its %s dependency\n"
msgstr "%s zostanie usunięta po zależniościach %s\n"
#, c-format
msgid "%s will be installed before its %s dependency\n"
msgstr "%s zostanie zainstalowane przed zależnościami %s\n"
#, c-format
msgid "ignoring package %s-%s\n"
msgstr "ignorowanie pakietu %s-%s\n"
#, c-format
msgid "provider package was selected (%s provides %s)\n"
msgstr "dostawca pakietu został wybrany (%s dostarcza %s)\n"
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "nie można rozwiązać \"%s\", zależności od \"%s\"\n"
#, c-format
msgid "url '%s' is invalid\n"
msgstr "url '%s' jest błędny\n"
#, c-format
msgid "url scheme not specified, assuming HTTP\n"
msgstr "schemat url nie został sprecyzowany, wybieranie HTTP\n"
#, c-format
msgid "disk"
msgstr "dysk"
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "nie udało się pobrać pliku '%s' z %s : %s\n"
#, c-format
msgid "cannot resume download, starting over\n"
msgstr "nie można kontynuować pobieranie, zaczynanie od początku\n"
#, c-format
msgid "cannot write to file '%s'\n"
msgstr "nie można zapisywać do pliku '%s'\n"
#, c-format
msgid "error writing to file '%s': %s\n"
msgstr "Błąd podczas zapisywania do pliku '%s': %s\n"
#, c-format
msgid "%s appears to be truncated: %jd/%jd bytes\n"
msgstr "%s wygląda, jakby został obcięty %jd/%jd bajtów\n"
#, c-format
msgid "failed to download %s\n"
msgstr "nie udało się pobrać %s\n"
#, c-format
msgid "out of memory!"
msgstr "brak pamięci!"
#, c-format
msgid "unexpected system error"
msgstr "niespodziewany błąd systemu"
#, c-format
msgid "insufficient privileges"
msgstr "niewystarczające przywileje"
#, c-format
msgid "could not find or read file"
msgstr "nie udało się znaleźć bądź odczytać pliku"
#, c-format
msgid "could not find or read directory"
msgstr "nie udało się znaleźć bądź odczytać katalogu"
#, c-format
msgid "wrong or NULL argument passed"
msgstr "Dany został błędny bądź ZEROWY argument"
#, c-format
msgid "library not initialized"
msgstr "biblioteka nie została zainicjowana"
#, c-format
msgid "library already initialized"
msgstr "biblioteka już została zainicjowana"
#, c-format
msgid "unable to lock database"
msgstr "nie udało się zablokować bazy danych"
#, c-format
msgid "could not open database"
msgstr "nie udało się otworzyć bazy danych"
#, c-format
msgid "could not create database"
msgstr "nie udało się stworzyć bazy danych"
#, c-format
msgid "database not initialized"
msgstr "baza danych nie została zainicjowana"
#, c-format
msgid "database already registered"
msgstr "baza danych już zarejestrowana"
#, c-format
msgid "could not find database"
msgstr "nie udało się odnaleźć bazy danych"
#, c-format
msgid "could not update database"
msgstr "nie udało się zaktualizować bazy danych"
#, c-format
msgid "could not remove database entry"
msgstr "nie udało się usunąć wpisu do bazy danych"
#, c-format
msgid "invalid url for server"
msgstr "nieprawidłowy url dla serwera"
#, c-format
msgid "no servers configured for repository"
msgstr "brak serwerów skonfigurowanych dla repozytorium"
#, c-format
msgid "transaction already initialized"
msgstr "tranzakcja została już zainicjowana"
#, c-format
msgid "transaction not initialized"
msgstr "tranzakcja nie została zainicjowana"
#, c-format
msgid "duplicate target"
msgstr "duplikat celu"
#, c-format
msgid "transaction not prepared"
msgstr "tranzakcja nie została przygotowana"
#, c-format
msgid "transaction aborted"
msgstr "tranzakcja zaniechana"
#, c-format
msgid "operation not compatible with the transaction type"
msgstr "operacja niekompatybilna z typem tranzakcji"
#, c-format
msgid "transaction commit attempt when database is not locked"
msgstr "zmiana tranzakcji następuje, kiedy baza danych nie jest zablokowana"
#, c-format
msgid "could not find or read package"
msgstr "nie udało się znaleźć bądź odczytać pakietu"
#, c-format
msgid "operation cancelled due to ignorepkg"
msgstr "operacja anulowana przez ignorepkg"
#, c-format
msgid "invalid or corrupted package"
msgstr "nieprawidłowy bądź uszkodzony pakiet"
#, c-format
msgid "cannot open package file"
msgstr "nie udało się otworzyć pliku pakietu"
#, c-format
msgid "cannot remove all files for package"
msgstr "nie udało się usunąć wszystkich plików pakietu"
#, c-format
msgid "package filename is not valid"
msgstr "nazwa pakietu jest nieprawidłowa"
#, c-format
msgid "no such repository"
msgstr "nie ma takiego repozytorium"
#, c-format
msgid "invalid or corrupted delta"
msgstr "nieprawidłowy bądź uszkodzony pakiet przyrostowy"
#, c-format
msgid "delta patch failed"
msgstr "Łatanie pakietem przyrostowym nie powiodło się"
#, c-format
msgid "could not satisfy dependencies"
msgstr "nie udało się usatysfakcjonować zależności"
#, c-format
msgid "conflicting dependencies"
msgstr "konfliktujące zależności"
#, c-format
msgid "conflicting files"
msgstr "konfliktujące pliki"
#, c-format
msgid "failed to retrieve some files"
msgstr "nie udało się odzyskać niektórych plików"
#, c-format
msgid "invalid regular expression"
msgstr "nieprawidłowe wyrażenie regularne"
#, c-format
msgid "libarchive error"
msgstr "błąd libarchive"
#, c-format
msgid "download library error"
msgstr "błąd pobierania biblioteki"
#, c-format
msgid "error invoking external downloader"
msgstr ""
"wystąpił błąd podczas odwoływania się do zewnętrznego programu pobierającego"
#, c-format
msgid "unexpected error"
msgstr "niespodziewany błąd"
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "nie udało się odnaleźć %s w bazie danych -- pomijanie\n"
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "nie udało się usunąć pliku '%s': %s\n"
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "nie udało się usunąć wpisu %s-%s z bazy danych\n"
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "nie udało się usunąć wpisu '%s' z pamięci podręcznej\n"
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: ignorowanie aktualizacji pakietu (%s => %s)\n"
#, c-format
msgid "%s: ignoring package downgrade (%s => %s)\n"
msgstr "%s: ignorowanie dezaktualizacji pakietu (%s => %s)\n"
#, c-format
msgid "%s: downgrading from version %s to version %s\n"
msgstr "%s: dezaktualizowanie z wersji %s do wersji %s\n"
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr "%s: local (%s) jest nowsze niż %s (%s)\n"
#, c-format
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
msgstr "ignorowanie zastępowania pakietu (%s-%s => %s-%s)\n"
#, c-format
msgid "cannot replace %s by %s\n"
msgstr "nie udało się zastąpić %s przez %s\n"
#, c-format
msgid "repository '%s' not found\n"
msgstr "repozytorium '%s' nie zostało znalezione\n"
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s jest w najnowszej wersji -- pomijanie\n"
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s jest w najnowszej wersji -- ponowne instalowanie\n"
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "dezaktualizowanie pakietu %s (%s => %s)\n"
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr "odkryto nierozwiązywalne konflikty pakietów\n"
#, c-format
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgstr "usuwanie '%s' z listy celów ponieważ konfliktuje z '%s'\n"
#, c-format
msgid "failed to retrieve some files from %s\n"
msgstr "nie udało się pobrać niektórych plików z %s\n"
#, c-format
msgid "could not create removal transaction\n"
msgstr "nie udało się utworzyć tranzakcji usuwania\n"
#, c-format
msgid "could not create transaction\n"
msgstr "nie udało się stworzyć tranzakcji\n"
#, c-format
msgid "could not initialize the removal transaction\n"
msgstr "nie udało się zainicjować tranzakcji usuwania\n"
#, c-format
msgid "could not initialize transaction\n"
msgstr "nie udało się zainicjować tranzakcji\n"
#, c-format
msgid "could not prepare removal transaction\n"
msgstr "nie udało się przygotować tranzakcji usuwania\n"
#, c-format
msgid "could not commit removal transaction\n"
msgstr "nie udało się wykonać tranzakcji usuwania\n"
#, c-format
msgid "could not commit transaction\n"
msgstr "nie udało się wykonać tranzakcji\n"
#, c-format
msgid "could not remove lock file %s\n"
msgstr "nie udało się usunąć pliku blokującego %s\n"
#, c-format
msgid "could not create temp directory\n"
msgstr "nie udało się stworzyć katalogu tymczasowego\n"
#, c-format
msgid "could not copy tempfile to %s (%s)\n"
msgstr "nie udało się skopiować pliku tymczasowego do %s (%s)\n"
#, c-format
msgid "could not remove tmpdir %s\n"
msgstr "nie udało się usunąć katalogu tymczasowego %s\n"
#, c-format
msgid "could not open %s: %s\n"
msgstr "nie udało się otworzyć %s: %s\n"
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "nie udało się zmienić katalogu na %s (%s)\n"
#, c-format
msgid "could not fork a new process (%s)\n"
msgstr "nie udało się odwidlić nowego procesu (%s)\n"
#, c-format
msgid "could not change the root directory (%s)\n"
msgstr "nie udało się zmienić katalogu głównego (%s)\n"
#, c-format
msgid "could not change directory to / (%s)\n"
msgstr "nie udało się zmienić katalogu na / (%s)\n"
#, c-format
msgid "call to popen failed (%s)"
msgstr "zawołanie do popen nieudane (%s)"
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr "zawołanie do waitpid nieudane (%s)\n"
#, c-format
msgid "command failed to execute correctly\n"
msgstr "komenda nie wykonała się poprawnie\n"
#, c-format
msgid "no %s cache exists, creating...\n"
msgstr "brak pamięci podręcznej dla %s, tworzenie...\n"
#, c-format
msgid "couldn't create package cache, using /tmp instead\n"
msgstr ""
"nie udało się stworzyć pamięci podręcznej pakietu, używanie /tmp w zamian\n"
#~ msgid "error downloading '%s': %s\n"
#~ msgstr "błąd podczas pobierania '%s': %s\n"
#~ msgid "could not chdir to %s\n"
#~ msgstr "nie udało się zmienić katalogu na / %s\n"
#~ msgid "running XferCommand: fork failed!\n"
#~ msgstr "uruchamianie XferCommand: klonowanie nieudane!\n"
#~ msgid "could not commit transaction"
#~ msgstr "nie udało się wykonać tranzakcji"
#~ msgid "could not download all files"
#~ msgstr "nie udało się pobrać wszystkich plików"
#~ msgid "cannot load package data"
#~ msgstr "nie udało się załadować danych pakietu"
#~ msgid "package not installed or lesser version"
#~ msgstr "pakiet nie zainstalowany lub zainstalowany w niższej wersji"
#~ msgid "group not found"
#~ msgstr "grupa nie została odnaleziona"
#~ msgid "user aborted the operation"
#~ msgstr "użytkownik zaniechał operacji"
#~ msgid "internal error"
#~ msgstr "błąd wewnętrzny"
#~ msgid "not confirmed"
#~ msgstr "nie potwierdzono"
#~ msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
#~ msgstr ""
#~ "%s-%s: ignorowanie aktualizowania pakietu (do zastąpienia przez %s-%s)\n"
#~ msgid "command: %s\n"
#~ msgstr "komenda: %s\n"
#~ msgid "could not prepare transaction\n"
#~ msgstr "nie udało się przygotować tranzakcji\n"
#~ msgid "No /bin/sh in parent environment, aborting scriptlet\n"
#~ msgstr "Brak /bin/sh w środowisku, przerywanie wykonywania skryptu\n"

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