1
0
forked from mirrors/pacman

Compare commits

..

542 Commits

Author SHA1 Message Date
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
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
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
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
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
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
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
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
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
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
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
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
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
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
3b464dc897 Final changes before 3.1.1 release
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-19 14:50:15 -06:00
Chantry Xavier
cee314fc5e Update TRANSLATORS file.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-01-19 10:48:37 -06:00
Dan McGee
f6785dcb89 Merge branch 'maint' 2008-01-18 19:33:25 -06:00
Dan McGee
8ec9a67aee Merge branch 'translations' into maint
Thanks a ton to Giovanni Scafora for managing the translations branch
for this release!
2008-01-18 19:33:10 -06:00
Vojtěch Gondžala
57ec111a4e Little update Czech translation for pacman 3.1.1
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
2008-01-19 00:37:48 +01:00
João Felipe Santos
f374ead66a Portuguese Brazilian translation update for pacman 3.1.1
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
2008-01-19 00:00:50 +01:00
Mateusz Jędrasik
84084aa44c Polish translation update for pacman 3.1.1
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
2008-01-18 00:51:48 +01:00
Matthias Gorissen
8343121f87 Corrections of German translation
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
2008-01-18 00:16:09 +01:00
Juan Pablo Gonzalez
6f181c22d2 Spanish translation update for pacman 3.1.1
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
2008-01-16 23:54:34 +01:00
Vojtěch Gondžala
de5e49f4be Czech translation update for pacman 3.1.1
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
2008-01-16 17:19:50 +01:00
Jeff Bailes
601f6a8a29 English (British) translation update for pacman 3.1.1
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
2008-01-16 17:14:50 +01:00
Nagy Gabor
d9a9ffd77d Hungarian translation update for pacman 3.1.1
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
2008-01-16 17:11:44 +01:00
Chantry Xavier
06dd617b59 Update french translation.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
2008-01-16 17:07:31 +01:00
Giovanni Scafora
1379f4e9ac Italian translation update for pacman 3.1.1
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
2008-01-16 17:06:08 +01:00
Dan McGee
12417e91ad Updates to NEWS for 3.1.1
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-15 22:24:21 -06:00
Chantry Xavier
eb77f0dbd2 Another documentation update for FS#9204
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-15 22:04:28 -06:00
Chantry Xavier
6b242b3725 Clarify -Sc documentation.
s/old packages/packages that are no longer installed/g.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-15 21:59:40 -06:00
Chantry Xavier
eccda0dfad Fix some left over of a0ac72b42.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-15 21:57:23 -06:00
Dan McGee
db557e0563 Update message files for 3.1.1 release
We are in string freeze for the 3.1.1 release. This commit updates all the
message files to the latest code, and all translation updates should be
based off of these po-files. Please attempt to keep the line number changes
to a minimum- there should be no reason to update these po files with just
new line numbers. That way we can more easily see exactly which translations
were updated.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-14 23:16:16 -06:00
Dan McGee
38e981fab3 Merge branch 'maint' 2008-01-14 22:58:44 -06:00
Dan McGee
a0ac72b422 etc: remove Arch-specific mirrorlist from repo
We shouldn't have the stock config be Arch specific for a few reasons:

* Although it is our package, others should be able to use it
* Keeping the mirrorlist coupled to the pacman package makes it hard to push
  updates to users without releasing a new copy of the pacman source

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-14 22:22:30 -06:00
Travis Willard
9a18e0dbef Clean up pacman.conf.in
This patch cleans up the Arch-specific pacman.conf (to be provided in
the pacman Archlinux package) in an attempt to reduce the number of
PEBKAC errors seen enabling default-disabled repos.

Signed-off-by: Travis Willard <travis@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-14 22:12:01 -06:00
Chantry Xavier
0c5b68877b Change the versioned provision format.
Change the 'provname provver' format to 'provname=provver'.
In .PKGINFO, the provisions are copied from the PKGBUILD without quotes. So
the provision version was actually handled as a different provision...

See FS#9171.

Dan: Unfortunately we have to change our original specification for
versioned provisions with this patch, but it ends up being the simpler and
cleaner solution in the long run, and if there is any time to change it the
time is now before many packages have been built. Keeping the ' ' based
format would have required us to do special parsing in repo-add, as well as
being susceptible to users not using quotes in their provides array.

Hopefully this will resolve the issues we had with our initial plan. Sorry
for the confusion.

Acked-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-14 22:03:03 -06:00
Chantry Xavier
6eee9e987a Update cachedir documentation (FS#9204).
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-14 21:43:41 -06:00
Chantry Xavier
1dca8b6309 Rename provision related pactests to provision*.py.
Also add 3 new pactests to cover both the -U and -S operations for versioned
provisions.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-14 21:43:30 -06:00
Chantry Xavier
223a0ce89d New polish mirror. FS#9213.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-01-14 21:40:42 -06:00
Chantry Xavier
307f4d7301 Revert "Fix case where pacman asks for confirmation when it should not"
yesno function already handles noconfirm. No need to do it twice.

This reverts commit dffa0654f2.
2008-01-14 21:38:36 -06:00
Dan McGee
fd86c62db8 Fix typos in code comments
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-13 23:26:31 -06:00
Dan McGee
ffff094126 makepkg: Oops! Lost the colon after forcever in opts parsing
I screwed this up here:
916e226b78

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-13 19:16:58 -06:00
Chantry Xavier
6ee95afe7e doc: update documentation for --recursive and --cascade
This addresses some of the issues in FS#9192. Attempt to clarify the -Rc
and -Rs options in the man page.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-13 18:42:26 -06:00
Dan McGee
e93b0a2f37 doc: update makepkg options
Add documentation for --holdver (from Scott) and --forcever (saying this
is an internal option that should not be used by most end users), and
re-alphabetize the --asroot option.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-13 18:42:26 -06:00
Scott Horowitz
916e226b78 makepkg: Introduce --holdver option to prevent bumped pkgrel
This allows us to keep the --forcever option internal to makepkg.

Fixes FS#9194.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-13 18:42:26 -06:00
Jaroslaw Swierczynski
801a268056 FS#9183 : force correct permissions on tmp/.
[Xav: removed unneeded makepath_internal function, and fixed the permission
value : 1777 -> 01777]
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-13 18:42:26 -06:00
Dan McGee
549c2878f9 Disallow a NULL section in _parseconfig
If we allow _parseconfig to continue processing when section is not defined,
then we have the potential to segfault during strcmp calls. This is no good.
For some reason, we had existing logic that tested this case but only if it
was processing and 'Include' directive. Expand the check to check for a NULL
section in all cases, and print an error message if this is the case.

Reported here:
http://bbs.archlinux.org/viewtopic.php?id=42235

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-13 18:42:00 -06:00
Chantry Xavier
8186dc11a9 Ensure correct dir permissions in the database.
Fix for FS#9176.
A previous commit (6e8daa553b) already forced all database files to 644.
Now the directories are also forced to 755.

Additionally, repo-add now sets the umask to 022, just like makepkg does, to
fix the problem at its root.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-13 12:51:37 -06:00
Dan McGee
521de7ceed Merge branch 'maint' 2008-01-13 12:27:17 -06:00
Travis Willard
bbe02ec57f Update Gensync and Updatesync to use new PKGEXT variable
Previously, this caused both scripts to look for
pkgname-pkgver-pkgrel-arch..pkg.tar.gz - extra period has been removed.

Fixes FS#9190.

Signed-off-by: Travis Willard <travis@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-13 12:21:36 -06:00
Allan McRae
47e8dd0670 Notify of package replacements when using noconfirm
Fixes FS#5179.  Prints a notification of package replacements
when updating the packages using the --noconfirm flag.

Signed-off-by: Allan McRae <mcrae_allan@hotmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-13 12:21:36 -06:00
Chantry Xavier
78e7342c16 zsh_completion : minor fixes.
-Qg was handled twice.
--ignore completed on all installed packages instead of all
packages.
--ignoregroup had a special handling that seems unnecessary. It
wasn't done for --ignore, and it apparently works fine without anyway.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-01-13 12:21:36 -06:00
Chantry Xavier
ab506f77c0 util.c : fix segfault when the cachedir isn't usable.
For example, if the cachedir is a broken symlink or a non writable
directory, pacman fallbacks to /tmp/. Just before doing that, it freed the
handle->cachedirs list twice !
once in _alpm_filecache_setup, and once in alpm_option_set_cachedirs. So the
first one was removed.

Fixes FS#9186.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-01-13 12:21:21 -06:00
Chantry Xavier
3de2147376 Fix cvsmod typo in PKGBUILD man page.
Fixes FS#9175.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-01-13 12:19:10 -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
Nagy Gabor
633dbeac88 small checkdeps speed-up
In the old code 'alpm_list_diff(_alpm_db_get_pkgcache(db), dblist,
_alpm_pkg_cmp);' was slow.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>

[Xav: In my opinion, computing both dblist and modified in one for loop also makes
the code clearer, besides being more efficient.
Also renamed joined to targets since I also find that clearer.]

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-01-12 11:05:52 -06:00
Chantry Xavier
e654236db6 don't send CHECKDEPS_DONE event when NODEPS is set.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-12 10:45:45 -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
Chantry Xavier
8ffa6fa7ad extends valgrind.supp and adds quick instructions.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-01-11 19:30:13 -06:00
Allan McRae
8372a9e8c7 Only notify of dependency check in removal if performed
Moves "checking dependencies..." notification into code block where
dependency checking is performed to stop spurious notification.
Reference: http://archlinux.org/pipermail/pacman-dev/2008-January/010714.html

Signed-off-by: Allan McRae <mcrae_allan@hotmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-11 19:29:49 -06:00
Dan McGee
318d5c4ba8 Make the user-agent string a bit less verbose
We shouldn't pass things like the kernel version in the user agent string,
as it may be a bit too revealing and is not really necessary.

Reference: https://bugzilla.mozilla.org/show_bug.cgi?id=57555

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-11 19:29:44 -06:00
Dan McGee
f9a7d8cba4 Fix library interface
Two functions defined in alpm.h were not marked with SYMEXPORT, causing
linking errors if they were used.

In addition, remove the incorrect use of the 'alpm_' prefix from an internal
function and replace it with '_alpm_'.

Fixes FS#9155.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-11 08:43:10 -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
Dan McGee
0a65de10b1 Output a single newline on receipt of a SIGINT
Fixes FS#9147, where issuing a ctrl-C at a prompt puts the users prompt on
the same line as our question. This can also occur during download bars.
Although we might end up putting one too many newlines to the screen now, it
is better than not putting one at all.

Also update the copyright in pacman.c.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-10 23:07:52 -06:00
Dan McGee
887ad59eb6 doc: add note to pacman.conf manpage explaining $repo
Fixes FS#9142.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-10 22:58:48 -06:00
Dan McGee
71ca587f2a doc: add info about optdepends
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-10 22:58:20 -06:00
Chantry Xavier
aec7c13648 Rename -t --orphans to -t --unrequired (FS#9144).
It turns out the orphan name was misleading. Real orphans are packages
installed as dependency no longer required by any others (-Qtd).
The -t option only shows package not required by any others, so --unrequired
describes it better.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-10 22:58:19 -06:00
Dan McGee
abd14fdac0 Bump version to devel
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-10 22:58:19 -06:00
Dan McGee
b1a231427b makepkg: Ensure we include all manpage directories in compression line
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-09 18:33:12 -06:00
Chantry Xavier
47761d5aec Move the fallback on providers from backend to frontend.
This reverts commit e28973169d.
This code might fit better in the frontend than in the backend finally.
Ref: http://www.archlinux.org/pipermail/pacman-dev/2007-November/010150.html

I also changed it for fixing FS#8763 :
if there is exactly one provider, pacman will pull it and print a warning.
if there are several providers, pacman will list them and fail. It's up to
the user to pick one. Add sync501 pactest to reflect that.
2008-01-09 18:33:11 -06:00
Karolina Lindqvist
33f6fda8b6 makepkg: add package name to output when installing package
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-09 18:33:11 -06:00
269 changed files with 29226 additions and 28864 deletions

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:

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 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:

150
NEWS
View File

@@ -1,5 +1,151 @@
VERSION DESCRIPTION
-----------------------------------------------------------------------------
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)
- fix segfault when cachedir is unusable (FS#9186)
- missing SYMEXPORT on libalpm functions (FS#9155)
- notify of package replacements when using --noconfirm (FS#5179)
- fix usage of PKGEXT by gensync/updatesync (FS#9190)
- ensure correct dir permissions in database (FS#9176)
- ensure /tmp is created with correct permissions (FS#9183)
- disallow NULL section in parseconfig (reported on forums)
- remove Arch-specific pacman.conf and mirrorlist from source
- makepkg: --holdver option for devel PKGBUILDs (FS#9194)
- documentation updates (FS# 9142, 9146, 9175, 9192, 9204)
- many translation updates
3.1.0 - paths are now specified as absolute paths (or defaulting to
under the specified root directory)
- all paths can be specified in pacman.conf or on command line
@@ -437,7 +583,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
@@ -465,4 +611,4 @@ VERSION DESCRIPTION
- Changed db_find_conflicts() to ignore directories
1.0 - Initial Release
vim: set et:
vim: set et spell spelllang=en_us:

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:

165
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,63 @@ 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.
* 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.
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.
* holdpkgs: Important packages which need a confirmation before being removed.
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 +108,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 +119,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 +152,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 +184,65 @@ 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

View File

@@ -10,27 +10,40 @@ 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.
Czech (cs):
Vojtěch Gondžala <vojtech.gondzala@gmail.com>
German (de):
Pierre Schmitz <pierre@archlinux.de>
Matthias Gorissen <matthias@archlinux.de>
Benjamin Andresen <benny@in-ulm.de>
British English (en_GB):
Jeff Bailes <thepizzaking@gmail.com>
Spanish (es):
Juan Pablo González Tognarelli <jotapesan@gmail.com>
Fernando Lagos <fernando@zerial.org>
French (fr):
solsTiCe d'Hiver <solstice.dhiver@laposte.net>
Chantry Xavier <shiningxc@gmail.com>
Hungarian (hu):
Nagy Gabor <ngaba@petra.hos.u-szeged.hu>
Nagy Gabor <ngaba@bibl.u-szeged.hu>
Italian (it):
Giovanni 'voidnull' Scafora <linuxmania@gmail.com>
Alessio 'mOLOk' Bolognino <themolok@gmail.com>
Lorenzo '^zanDarK' Masini <lorenxo86@gmail.com>
Polish (pl_PL):
Polish (pl):
Mateusz Herych <heniekk@gmail.com>
Jaroslaw Swierczynski <swiergot@gmail.com>
Mateusz Jędrasik <m.jedrasik@gmail.com>
Brazilian Portuguese (pt_BR):
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):
Hugo Doria <hugo@archlinux.org>
Armando M. Baratti <ambaratti@archlinux-br.org>
Leandro Inacio <leandro@archlinux-br.org>
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

@@ -23,10 +23,10 @@ rm -rf doc/{Makefile.in,Makefile}
rm -rf doc/html/*.html
rm -rf doc/man3/*.3
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 -rf po/{Makefile.in,Makefile}
rm -rf po/POTFILES
rm -rf po/stamp-po
rm -rf po/*.gmo
rm -rf lib/libalpm/po/{Makefile.in,Makefile}
rm -rf lib/libalpm/po/POTFILES

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,36 +40,26 @@ 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], [2])
m4_define([lib_revision], [0])
m4_define([lib_age], [0])
m4_define([lib_current], [4])
m4_define([lib_revision], [1])
m4_define([lib_age], [1])
m4_define([pacman_version_major], [3])
m4_define([pacman_version_minor], [1])
m4_define([pacman_version_micro], [0])
m4_define([pacman_version_suffix], [])
m4_define([pacman_version_minor], [2])
m4_define([pacman_version_micro], [2])
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])
AC_CANONICAL_HOST
AM_INIT_AUTOMAKE
LIB_VERSION=`expr lib_current.lib_age`.lib_revision
LIB_VERSION=`expr lib_current - lib_age`.lib_age.lib_revision
LIB_VERSION_INFO="lib_current:lib_revision:lib_age"
# Set subsitution values for version stuff in Makefiles and anywhere else,
@@ -80,48 +70,49 @@ 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 libdownload/libfetch
AC_ARG_ENABLE(internal-download,
AS_HELP_STRING([--disable-internal-download], [do not build with libdownload/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,7 +120,6 @@ 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])
@@ -138,13 +128,27 @@ 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 libdownload/libfetch
# - this is a nested check- first see if we need a library, if we do then
# check for libdownload first, then fallback to libfetch, then die
AC_MSG_CHECKING(whether to link with download library)
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([download], [downloadParseURL], ,
AC_CHECK_LIB([fetch], [fetchParseURL], ,
AC_MSG_ERROR([libdownload or libfetch are 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 +160,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 +176,26 @@ 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"
case "${host_os}" in
*bsd*)
SIZECMD="stat -f %z"
;;
cygwin*)
host_os_cygwin=yes
CFLAGS="$CFLAGS -DCYGWIN"
;;
darwin*)
host_os_darwin=yes
SIZECMD="stat -f %z"
;;
esac
AM_CONDITIONAL([CYGWIN], test "x$host_os_cygwin" = "xyes")
AM_CONDITIONAL([DARWIN], test "x$host_os_darwin" = "xyes")
AC_SUBST(SIZECMD)
# Check for architecture, used in default makepkg.conf
# (Note single space left after CARCHFLAGS)
case "${host}" in
@@ -235,9 +252,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 +268,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 +284,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)
@@ -315,7 +324,6 @@ src/util/Makefile
scripts/Makefile
doc/Makefile
etc/Makefile
etc/pacman.d/Makefile
po/Makefile.in
pactest/Makefile
contrib/Makefile
@@ -324,7 +332,7 @@ Makefile
AC_OUTPUT
echo "
pacman_display_version:
${PACKAGE_NAME}:
Build information:
source code location : ${srcdir}
@@ -341,9 +349,12 @@ pacman_display_version:
Architecture : ${CARCH}
Architecture flags : ${CARCHFLAGS}
Host Type : ${CHOST}
Filesize command : ${SIZECMD}
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}
@@ -353,10 +364,9 @@ pacman_display_version:
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,14 @@
EXTRA_DIST = \
PKGBUILD.vim \
bacman \
bash_completion \
gensync \
pacdiff \
paclist \
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,26 @@ 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.
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" ;;
@@ -177,7 +176,7 @@ _pacman ()
changelog) mod="${mod}c" ;;
deps) mod="${mod}d" ;;
explicit) mod="${mod}e" ;;
orphans) mod="${mod}t" ;;
unrequired) mod="${mod}t" ;;
foreign) mod="${mod}m" ;;
owns) mod="${mod}o" ;;
file) mod="${mod}p" ;;
@@ -187,6 +186,7 @@ _pacman ()
dbonly) mod="${mod}k" ;;
nosave) mod="${mod}n" ;;
recursive) mod="${mod}s" ;;
unneeded) mod="${mod}u" ;;
esac ;;
*) toparse="${a}" ;;
esac
@@ -202,7 +202,6 @@ _pacman ()
if [ $COMP_CWORD -eq 1 ] && [[ "$cur" == -* ]]; then
COMPREPLY=( $( compgen -W '\
-A --add \
-h --help \
-Q --query \
-R --remove \
@@ -216,9 +215,10 @@ _pacman ()
if [[ "$cur" == -* ]]; then
case "${op}" in
A|U)
U)
COMPREPLY=( $( compgen -W '\
--asdeps \
--asexplicit \
-d --nodeps \
-f --force \
-h --help \
@@ -242,6 +242,7 @@ _pacman ()
-k --dbonly \
-n --nosave \
-s --recursive \
-u --unneeded \
--config \
--logfile \
--noconfirm \
@@ -257,9 +258,9 @@ _pacman ()
S)
COMPREPLY=( $( compgen -W '\
--asdeps \
--asexplicit \
-c --clean \
-d --nodeps \
-e --dependsonly \
-f --force \
-g --groups \
-h --help \
@@ -298,7 +299,7 @@ _pacman ()
-o --owns \
-p --file \
-s --search \
-t --orphans \
-t --unrequired \
-u --upgrades \
--config \
--logfile \
@@ -316,7 +317,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,7 +1,6 @@
#!/bin/bash
#
# gensync
# @configure_input@
#
# Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
#
@@ -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 "\
printf "\
Copyright (C) 2002-2007 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,42 +98,37 @@ 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
if [ "$pkgdir" != "" ]; then
pkgfile="$pkgdir/$pkgname-$pkgver-$pkgrel-$CARCH.$PKGEXT"
pkgfile="$pkgdir/$pkgname-$pkgver-$pkgrel-${CARCH}${PKGEXT}"
else
pkgfile="$destdir/$pkgname-$pkgver-$pkgrel-$CARCH.$PKGEXT"
pkgfile="$destdir/$pkgname-$pkgver-$pkgrel-${CARCH}${PKGEXT}"
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

@@ -20,7 +20,7 @@
# Original http://phraktured.net/config/bin/pacdiff
diffprog=${DIFFPROG:-vimdiff}
for x in $(find /etc/ -name *.pacnew -o -name *.pacorig -o -name *.pacsave)
for x in $(find /etc/ -name "*.pacnew" -o -name "*.pacorig" -o -name "*.pacsave")
do
echo "File: ${x%.pac*}"
chk="$(cmp $x ${x%.pac*})"

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:

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:

73
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"
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]'
@@ -38,7 +37,6 @@ _pacman_opts_pkgfile=(
# options for passing to _arguments: subactions for --query command
_pacman_opts_query_actions=(
'-e[List orphaned packages]:*:orphans:->query_orphans'
'-g[View all members of a package group]:*:package groups:->query_group'
'-o[Query the package that owns a file]:file:_files'
'-p[Package file to query]:*:package file:->query_file'
@@ -50,7 +48,6 @@ _pacman_opts_query_modifiers=(
'-c[List package changelog]'
'-d[List packages installed as dependencies]'
'-e[List packages explicitly installed]'
'-g[List all members of a package group]'
'-i[View package information]'
'-ii[View package information including backup files]'
'-l[List package contents]'
@@ -80,7 +77,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]'
@@ -88,18 +84,14 @@ _pacman_opts_sync_modifiers=(
'-u[Upgrade all out-of-date packages]'
'-w[Download packages only]'
'-y[Download fresh package databases]'
'*--ignore[Ignore a package upgrade]:package:_pacman_completions_installed_packages'
'*--ignoregroup[Ignore a group upgrade]:package group:_pacman_completions_all_groups'
'*--ignore[Ignore a package upgrade]:package:
_pacman_completions_all_packages'
'*--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 : \
@@ -135,11 +127,6 @@ _pacman_action_query() {
"$_pacman_opts_query_modifiers[@]" \
'*:groups:_pacman_completions_installed_groups'
;;
query_orphans)
_arguments -s : \
"$_pacman_opts_common[@]" \
"$_pacman_opts_query_modifiers[@]"
;;
query_owner)
_arguments -s : \
"$_pacman_opts_common[@]" \
@@ -294,26 +281,14 @@ _pacman_get_command() {
# main dispatcher
_pacman() {
# First check if --ignoregroup was the last command given. If so, complete
# all groups.
if [ "$words[-2]" = "--ignoregroup" ]; then
_arguments -s : \
"$_pacman_opts_common[@]" \
"$_pacman_opts_sync_modifiers[@]" \
'*:package group:_pacman_completions_all_groups'
return 0
fi
# Otherwise, complete on the given command.
case $words[2] in
-A*) _pacman_action_add ;;
-Q*g*) # ipkg groups
_arguments -s : \
"$_pacman_opts_common[@]" \
"$_pacman_opts_query_modifiers[@]" \
'*:groups:_pacman_completions_installed_groups'
;;
-Q*o*) # file *.pkg.tar.gz
-Q*o*) # file
_arguments -s : \
"$_pacman_opts_common[@]" \
"$_pacman_opts_query_modifiers[@]" \

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

@@ -15,6 +15,7 @@ ASCIIDOC_MANS = \
DOXYGEN_MANS = $(wildcard man3/*.3)
EXTRA_DIST = \
asciidoc.conf \
pacman.8.txt \
makepkg.8.txt \
repo-add.8.txt \
@@ -29,8 +30,19 @@ EXTRA_DIST = \
$(DOXYGEN_MANS)
# Files that should be removed, but which Automake does not know.
MOSTLYCLEANFILES = *.xml
MAINTAINERCLEANFILES = $(ASCIIDOC_MANS)
MOSTLYCLEANFILES = *.xml $(ASCIIDOC_MANS)
# 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,29 +50,28 @@ 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
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
a2x $(A2X_OPTS) --asciidoc-opts="$(ASCIIDOC_OPTS)" $@.txt
pacman.8: pacman.8.txt
makepkg.8: makepkg.8.txt
repo-add.8: repo-add.8.txt
@@ -70,7 +81,7 @@ pacman.conf.5: pacman.conf.5.txt
libalpm.3: 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,4 +1,4 @@
# Maintainer: judd <jvinet@zeroflux.org>
# Maintainer: Joe User <joe.user@example.com>
pkgname=patch
pkgver=2.5.4
@@ -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
@@ -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
@@ -126,6 +139,15 @@ Options and Directives
needed at runtime. Packages in this list follow the same format as
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:
optdepends=('fakeroot: for makepkg usage as normal user')
*conflicts (array)*::
An array of packages that will conflict with this package (i.e. they
cannot both be installed at the same time). This directive follows the
@@ -136,8 +158,11 @@ Options and Directives
a package to provide dependencies other than its own package name. For
example, the dcron package can provide 'cron', which allows packages to
depend on 'cron' rather than 'dcron OR fcron'.
Versioned provisions are also possible. For example, dcron can provide
'cron 2.0' to satisfy the 'cron>=2.0' dependency of other packages.
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. Provisions involving the '>' and '<'
operators are invalid as only specifc versions of a package may be
provided.
*replaces (array)*::
An array of packages that this package should replace, and can be used
@@ -172,6 +197,9 @@ Options and Directives
*emptydirs*;;
Leave empty directories in packages.
*zipman*;;
Compress man 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
@@ -192,9 +220,42 @@ 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 infomation 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.
$$startdir$$ was most often used in combination with `/src` or `/pkg`
postfixes, but use of the `srcdir` and `pkgdir` variables is preferred.
*srcdir*::
This points to the directory where makepkg extracts or copies all source
files. Although it currently is an alias for `$startdir/src`, this
assumption should not be assumed true for all future revisions of makepkg.
*pkgdir*::
This points to the directory where makepkg bundles the installed package
(this directory will become the root directory of your built package).
Although it currently is an alias for `$startdir/pkg`, this assumption
should not be assumed true for all future revisions of makepkg.
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.
Install/Upgrade/Remove Scripting
--------------------------------
Pacman has the ability to store and execute a package-specific script when it
@@ -261,7 +322,7 @@ from.
*_svntrunk*;;
The trunk of the SVN repository.
*_cvsmod*;;
*_svnmod*;;
The SVN module to fetch.
*Git*::
@@ -308,11 +369,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

@@ -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.

View File

@@ -28,20 +28,23 @@ 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*::
Allow makepkg to run as root. This is for security purposes as it is
normally dangerous to do so. This will also disable use of fakeroot and
sudo.
*-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.
*-c, \--clean*::
Clean up leftover work files and directories after a successful build.
@@ -68,20 +71,37 @@ Options
default to the current directory. This allows the built package to be
overwritten.
*--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.
*-g, \--geninteg*::
For each source file in the source array of PKGBUILD, download the file
if required and generate integrity checks. The integrity checks
generated are determined by the 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.
*\--holdver*::
Useful when building development versions of packages. Prevents makepkg
from automatically bumping the pkgver to the latest revision number in
the package's development tree.
*-i, \--install*::
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.
@@ -96,7 +116,7 @@ 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
@@ -108,15 +128,18 @@ Options
dependencies are not found, pacman will try to resolve them. If
successful, the missing packages will be downloaded and installed.
*\--asroot*::
Allow makepkg to run as root. This is for security purposes as it is
normally dangerous to do so. This will also disable use of fakeroot and
sudo.
*\--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
@@ -94,8 +98,8 @@ Options
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
@@ -117,6 +121,9 @@ Options
*emptydirs*;;
Leave empty directories in packages.
*zipman*;;
Compress man pages with gzip.
**INTEGRITY_CHECK=(**check1 ...**)**::
File integrity checks to use. Multiple checks may be specified; this
affects both generation and checking. The current valid options are:
@@ -128,6 +135,13 @@ Options
that are located in opt/, you may need to add the directory to this
array. *NOTE:* Do not add the leading slash to the directory name.
**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.
**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

View File

@@ -28,13 +28,6 @@ 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
@@ -56,7 +49,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,7 +63,13 @@ 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
*-U, \--upgrade*::
Upgrade or add a package to the system. Either a URL or file path can be
@@ -86,16 +87,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,6 +120,9 @@ 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
command line or in linkman:pacman.conf[5], their default location will
be inside this root path.
*-v, --verbose*::
Output paths such as as the Root, Conf File, DB Path, Cache Dirs, etc.
@@ -120,9 +130,8 @@ Options
*\--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*: if
specified, this is an absolute path and the root path is not automatically
prepended. This behavior changed in pacman 3.1.0.
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.
*\--config* <'file'>::
Specify an alternate configuration file.
@@ -190,11 +199,16 @@ 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. Search will only show
package names and not version, group, and description information; 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`.
*-t, \--orphans*::
*-t, \--unrequired*::
Restrict or filter output to packages not required by any currently
installed package.
@@ -207,7 +221,8 @@ Remove Options[[RO]]
--------------------
*-c, \--cascade*::
Remove all target packages, as well as all packages that depend on one
or more target packages. This operation is recursive.
or more target packages. This operation is recursive, and must be used
with care since it can remove many potentially needed packages.
*-k, \--keep*::
Removes the database entry only. Leaves all files in place.
@@ -218,27 +233,33 @@ Remove Options[[RO]]
file should be renamed with a ``.pacsave'' extension.
*-s, \--recursive*::
Remove each target specified including all dependencies, provided that
(A) they are not required by other packages; and (B) they were not
explicitly installed by the user. This option is analogous to a
backwards '\--sync' operation.
Remove each target specified including all of their dependencies, provided
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. 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]]
------------------
*-c, \--clean*::
Remove old packages from the cache as well as unused sync databases to
free up disk space. When pacman downloads packages, it saves them in a
cache directory. In addition, databases are saved for every sync DB you
download from, and are not deleted even if they are removed from the
configuration file linkman:pacman.conf[5]. Use one '\--clean' switch to
only remove old packages; 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.
Remove packages that are no longer installed from the cache as well as
currently unused sync databases to free up disk space. When pacman
downloads packages, it saves them in a cache directory. In addition,
databases are saved for every sync DB you download from, and are not
deleted even if they are removed from the configuration file
linkman:pacman.conf[5]. Use one '\--clean' switch to only remove
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.
+
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
@@ -258,6 +279,11 @@ 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. Search will only show
package names and not version, group, and description information; list
will only show package names and omit databases and versions.
*-s, \--search* <'regexp'>::
This will search each package in the sync databases for names or
descriptions that match `regexp`.
@@ -282,7 +308,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

@@ -33,13 +33,16 @@ Example
NoUpgrade = etc/passwd etc/group etc/shadow
NoUpgrade = etc/fstab
[current]
Include = /etc/pacman.d/current
[core]
Include = /etc/pacman.d/core
[custom]
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
-------
@@ -47,27 +50,29 @@ Options
Set the default root directory for pacman to install to. This option is
used if you want to install a package on a temporary mounted partition
which is "owned" by another system, or for a chroot install.
*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.
*DBPath =* path/to/db/dir::
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
default is ``/var/cache/pacman/pkg/''. Multiple cache directories can be
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*: if specified, this
is an absolute path and the root path is not automatically prepended. This
behavior changed in pacman 3.1.0.
to the first cache directory with write access. *NOTE*: this is an absolute
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`,
@@ -77,6 +82,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'.
@@ -101,8 +112,9 @@ 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.
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
@@ -110,6 +122,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
@@ -124,7 +147,7 @@ Options
*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.
@@ -137,9 +160,30 @@ defined with the 'Server' directive and follow a URL naming structure. If you
want to use a local directory, you can specify the full path with a ``file://''
prefix, as shown above.
The order of repositories in the file matters; repositories listed first will
take precedence over those listed later in the file when packages in two
repositories have identical names, regardless of version number.
A common way to define DB locations utilizes the 'Include' directive. For each
repository defined in the configuration file, a single 'Include' directive can
contain a file that lists the servers for that repository.
--------
[core]
# use this repository first
Server = ftp://ftp.archlinux.org/core/os/arch
# next use servers as defined in the mirrorlist below
Include = /etc/pacman.d/mirrorlist
--------
During parsing, pacman will define the `$repo` variable to the name of the
current section. This is often utilized in files specified using the 'Include'
directive so all repositories can use the same mirrorfile.
--------
Server = ftp://ftp.archlinux.org/$repo/os/arch
--------
The order of repositories in the configuration files matters; repositories
listed first will take precedence over those listed later in the file when
packages in two repositories have identical names, regardless of version
number.
Using Your Own Repository
-------------------------

View File

@@ -16,9 +16,9 @@ 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 +36,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

@@ -1,5 +1,3 @@
SUBDIRS = pacman.d
dist_sysconf_DATA = makepkg.conf pacman.conf
EXTRA_DIST = makepkg.conf.in 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
@@ -58,20 +58,23 @@ 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)
# A negated option will do the opposite of the comments below.
#
#-- strip: Strip symbols from binaries/libraries
#-- docs: Save doc and info directories
#-- libtool: Leave libtool (.la) files in packages
#-- emptydirs: Leave empty directories in packages
#-- zipman: Compress manpages with gzip
#
OPTIONS=(strip !docs libtool emptydirs)
OPTIONS=(strip docs libtool emptydirs zipman)
#-- 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})
DOC_DIRS=(usr/{,share/}{info,doc,gtk-doc} opt/*/{info,doc,gtk-doc})
#-- Directories to be searched for the strip option (if option set correctly above)
STRIP_DIRS=(bin lib sbin usr/{bin,lib,sbin,local/{bin,lib,sbin}} opt/*/{bin,lib,sbin})
#########################################################################
# PACKAGE OUTPUT
@@ -83,8 +86,6 @@ 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>"

View File

@@ -1,7 +1,7 @@
#
# @sysconfdir@/pacman.conf
#
# See the pacman manpage for option directives
# See the pacman.conf(5) manpage for option and repository directives
#
# GENERAL OPTIONS
@@ -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
@@ -23,24 +41,24 @@ HoldPkg = pacman glibc
# - local/custom mirrors can be added here or in separate files
# - repositories listed first will take precedence when packages
# have identical names, regardless of version number
# - URLs will have $repo replaced by the name of the current repo
#
# Repository entries are of the format:
# [repo-name]
# Server = ServerName
# Include = IncludePath
#
# The header [repo-name] is crucial - it must be present and
# uncommented to enable the repo.
#
#[testing]
#Include = @sysconfdir@/pacman.d/mirrorlist
[core]
# Add your preferred servers here, they will be used first
Include = @sysconfdir@/pacman.d/mirrorlist
[extra]
# Add your preferred servers here, they will be used first
Include = @sysconfdir@/pacman.d/mirrorlist
[community]
# Add your preferred servers here, they will be used first
Include = @sysconfdir@/pacman.d/mirrorlist
#[unstable]
# Add your preferred servers here, they will be used first
# An example of a disabled remote package repository with multiple servers
# available. To enable, uncomment the following lines. You can add preferred
# servers immediately after the header and they will be used before the
# default mirrors.
#[core]
#Server = ftp://ftp.example.com/foobar/$repo/os/i686/
# The file referenced here should contain a list of 'Server = ' lines.
#Include = @sysconfdir@/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for

View File

@@ -1 +0,0 @@
mirrorlist

View File

@@ -1,17 +0,0 @@
pkgsysconfdir = ${sysconfdir}/pacman.d
dist_pkgsysconf_DATA = mirrorlist
EXTRA_DIST = mirrorlist.in
#
# Files that should be removed, but which Automake does not know.
MOSTLYCLEANFILES = $(dist_pkgsysconf_DATA)
$(dist_pkgsysconf_DATA): Makefile
rm -f $@ $@.tmp
sed \
-e 's|@CARCH[@]|$(CARCH)|g' \
$(srcdir)/mirrorlist.in >$@.tmp
mv $@.tmp $@
mirrorlist: $(srcdir)/mirrorlist.in
# vim:set ts=2 sw=2 noet:

View File

@@ -1,84 +0,0 @@
#
# $repo: Arch Linux @REPO@ repository
#
# United States
Server = ftp://ftp.archlinux.org/$repo/os/@CARCH@
Server = ftp://ftp.nethat.com/pub/linux/archlinux/$repo/os/@CARCH@
Server = ftp://locke.suu.edu/linux/dist/archlinux/$repo/os/@CARCH@
Server = ftp://mirrors.unixheads.org/archlinux/$repo/os/@CARCH@
Server = ftp://ftp-linux.cc.gatech.edu/pub/linux/distributions/archlinux/$repo/os/@CARCH@
Server = ftp://mirror.cs.vt.edu/pub/ArchLinux/$repo/os/@CARCH@
Server = http://mirrors.easynews.com/linux/archlinux/$repo/os/@CARCH@
Server = ftp://ftp.ibiblio.org/pub/linux/distributions/archlinux/$repo/os/@CARCH@
Server = http://holmes.umflint.edu/archlinux/$repo/os/@CARCH@
# South America
# - Brazil
Server = http://archlinux.c3sl.ufpr.br/$repo/os/@CARCH@
Server = ftp://archlinux.c3sl.ufpr.br/archlinux/$repo/os/@CARCH@
# Europe
# - Austria
Server = ftp://gd.tuwien.ac.at/opsys/linux/archlinux/$repo/os/@CARCH@
# - Belgium
Server = ftp://ftp.belnet.be/mirror/archlinux.org/$repo/os/@CARCH@
# - Czech Republic
Server = ftp://ftp.sh.cvut.cz/MIRRORS/arch/$repo/os/@CARCH@
# - Estonia
Server = ftp://ftp.estpak.ee/pub/archlinux/$repo/os/@CARCH@
# - Finland
Server = ftp://ftp.sixnix.net/pub/archlinux/$repo/os/@CARCH@
# - France
Server = ftp://mir1.archlinuxfr.org/archlinux/$repo/os/@CARCH@
Server = ftp://mir2.archlinuxfr.org/archlinux/$repo/os/@CARCH@
Server = ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/archlinux/$repo/os/@CARCH@
Server = http://mir.archlinux.fr/$repo/os/@CARCH@
Server = ftp://ftp.free.fr/mirrors/ftp.archlinux.org/$repo/os/@CARCH@
# - Germany
Server = ftp://ftp.tu-chemnitz.de/pub/linux/sunsite.unc-mirror/distributions/archlinux/$repo/os/@CARCH@
Server = ftp://ftp.hosteurope.de/mirror/ftp.archlinux.org/$repo/os/@CARCH@
Server = ftp://ftp.archlinuxppc.org/i686/$repo/os/@CARCH@
# - Great Britain
Server = http://www.mirrorservice.org/sites/ftp.archlinux.org/$repo/os/@CARCH@
# - Greece
Server = ftp://ftp.ntua.gr/pub/linux/archlinux/$repo/os/@CARCH@
# - Hungary
Server = ftp://ftp.mfa.kfki.hu/pub/mirrors/ftp.archlinux.org/$repo/os/@CARCH@
# - Ireland
Server = ftp://ftp.heanet.ie/mirrors/ftp.archlinux.org/$repo/os/@CARCH@
# - Italy
Server = ftp://mi.mirror.garr.it/mirrors/archlinux/$repo/os/@CARCH@
# - Netherlands
Server = ftp://ftp.nluug.nl/pub/metalab/distributions/archlinux/$repo/os/@CARCH@
Server = ftp://ftp.surfnet.nl/pub/os/Linux/distr/archlinux/$repo/os/@CARCH@
# - Poland
Server = ftp://ftp.icm.edu.pl/pub/Linux/sunsite/distributions/archlinux/$repo/os/@CARCH@
Server = ftp://mirror.icis.pcz.pl/archlinux/$repo/os/@CARCH@
# - Portugal
Server = ftp://cesium.di.uminho.pt/pub/archlinux/$repo/os/@CARCH@
# - Romania
Server = ftp://ftp.iasi.roedu.net/mirrors/archlinux.org/$repo/os/@CARCH@
# - Russia
Server = ftp://archlinux.org.ru/pub/archlinux/$repo/os/@CARCH@
Server = ftp://mirror.yandex.ru/archlinux/$repo/os/@CARCH@
Server = http://archlinux.freeside.ru/$repo/os/@CARCH@
# - Sweden
Server = ftp://ftp.ds.hj.se/pub/os/linux/archlinux/$repo/os/@CARCH@
Server = ftp://ftp.gigabit.nu/$repo/os/@CARCH@
# - Switzerland
Server = ftp://archlinux.puzzle.ch/$repo/os/@CARCH@
# - Turkey
Server = http://server.elsistech.com/archlinux/$repo/os/@CARCH@
# - Ukraine
Server = ftp://hell.org.ua/archlinux/$repo/os/@CARCH@
Server = ftp://ftp.linux.kiev.ua/pub/Linux/ArchLinux/$repo/os/@CARCH@
# Asia
# - Israel
Server = http://mirror.isoc.org.il/pub/archlinux/$repo/os/@CARCH@
# Australia
Server = ftp://mirror.pacific.net.au/linux/archlinux/$repo/os/@CARCH@
Server = ftp://mirror.aarnet.edu.au/pub/archlinux/$repo/os/@CARCH@

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

@@ -27,6 +27,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 +39,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 +69,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 +98,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 +114,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(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 +137,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 +153,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;
@@ -193,7 +171,8 @@ 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_fileconflict_free);
alpm_list_free(lp);
}
RET_ERR(PM_ERR_FILE_CONFLICTS, -1);
}
@@ -210,6 +189,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 +225,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 +272,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,12 +290,12 @@ 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);
} 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);
} else if(*entryname == '.') {
@@ -337,7 +321,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,14 +346,12 @@ 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) {
@@ -438,7 +421,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 +429,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_pkg = alpm_get_md5sum(checkfile);
/* append the new md5 hash to it's respective entry
* in newpkg's backup (it will be the new orginal) */
@@ -482,16 +465,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,7 +479,7 @@ 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);
@@ -513,19 +493,20 @@ static int extract_single_file(struct archive *archive,
/* 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);
}
@@ -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);
}
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));
@@ -669,12 +656,11 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
/* 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 {
/* make sure all infos are loaded because the database entry
* will be removed soon */
_alpm_db_read(oldpkg->origin_data.db, oldpkg, INFRQ_ALL);
/* copy over the install reason */
newpkg->reason = alpm_pkg_get_reason(local);
}
/* pre_upgrade scriptlet */
if(alpm_pkg_has_scriptlet(newpkg) && !(trans->flags & PM_TRANS_FLAG_NOSCRIPTLET)) {
@@ -695,27 +681,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 +749,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 +789,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 +815,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 +832,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 +852,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 +871,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 */

View File

@@ -25,7 +25,6 @@
/* libalpm */
#include "alpm.h"
#include "alpm_list.h"
#include "error.h"
#include "handle.h"
#include "util.h"
@@ -81,4 +80,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,7 @@
/*
* alpm.h
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2002-2008 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 +26,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 +46,12 @@ 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,23 @@ 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);
/*
* 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_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);
@@ -169,7 +171,6 @@ 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);
pmgrp_t *alpm_db_readgrp(pmdb_t *db, const char *name);
alpm_list_t *alpm_db_getgrpcache(pmdb_t *db);
@@ -191,7 +192,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 +205,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);
@@ -223,39 +224,35 @@ size_t alpm_pkg_changelog_read(void *ptr, size_t size,
/*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
*/
const char *alpm_delta_get_from(pmdelta_t *delta);
const char *alpm_delta_get_from_md5sum(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_to_md5sum(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);
alpm_list_t *alpm_sync_get_removes(const pmsyncpkg_t *sync);
pmpkg_t *alpm_sync_newversion(pmpkg_t *pkg, alpm_list_t *dbs_sync);
int alpm_sync_sysupgrade(pmdb_t *db_local,
alpm_list_t *dbs_sync, alpm_list_t **syncpkgs);
@@ -265,10 +262,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 +277,103 @@ 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
PM_TRANS_FLAG_NEEDED = 0x2000,
PM_TRANS_FLAG_ALLEXPLICIT = 0x4000,
PM_TRANS_FLAG_UNNEEDED = 0x8000,
PM_TRANS_FLAG_RECURSEALL = 0x10000
} 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,
/** Print URI.
* The database's URI and the package's filename are passed to the callback.
*/
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 {
@@ -352,7 +406,6 @@ 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,
@@ -377,13 +430,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 *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_checkdbconflicts(pmdb_t *db_local);
const char *alpm_conflict_get_package1(pmconflict_t *conflict);
const char *alpm_conflict_get_package2(pmconflict_t *conflict);
@@ -438,12 +494,6 @@ 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,
/* Transactions */
PM_ERR_TRANS_NOT_NULL,
PM_ERR_TRANS_NULL,
@@ -459,14 +509,12 @@ enum _pmerrno_t {
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,
@@ -477,14 +525,14 @@ enum _pmerrno_t {
/* 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_LIBDOWNLOAD,
PM_ERR_EXTERNAL_DOWNLOAD
};
extern enum _pmerrno_t pm_errno;

View File

@@ -1,7 +1,7 @@
/*
* alpm_list.c
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2002-2008 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 +17,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 +40,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 +89,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 +122,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 +140,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 +178,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 +302,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 +354,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 +464,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 +494,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 +527,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 +606,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 +623,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 +634,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

@@ -19,6 +19,8 @@
#ifndef _ALPM_LIST_H
#define _ALPM_LIST_H
#include <stdlib.h> /* size_t */
#ifdef __cplusplus
extern "C" {
#endif
@@ -45,7 +47,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 +57,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

@@ -42,6 +42,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);
}

File diff suppressed because it is too large Load Diff

288
lib/libalpm/be_package.c Normal file
View File

@@ -0,0 +1,288 @@
/*
* be_package.c
*
* Copyright (c) 2002-2008 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

@@ -19,7 +19,6 @@
#include "config.h"
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
@@ -31,7 +30,6 @@
#include "log.h"
#include "alpm.h"
#include "util.h"
#include "error.h"
#include "package.h"
#include "group.h"
#include "db.h"
@@ -41,32 +39,21 @@
*/
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);
return(0);
}
@@ -81,10 +68,7 @@ void _alpm_db_free_pkgcache(pmdb_t *db)
_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;
@@ -113,6 +97,7 @@ alpm_list_t *_alpm_db_get_pkgcache(pmdb_t *db)
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;
@@ -123,10 +108,21 @@ int _alpm_db_add_pkgincache(pmdb_t *db, pmpkg_t *pkg)
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);
@@ -181,7 +177,7 @@ pmpkg_t *_alpm_db_get_pkgfromcache(pmdb_t *db, const char *target)
return(NULL);
}
return(_alpm_pkg_find(target, pkgcache));
return(_alpm_pkg_find(pkgcache, target));
}
/* Returns a new group cache from db.
@@ -208,33 +204,29 @@ 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);
}
}
@@ -252,10 +244,6 @@ void _alpm_db_free_grpcache(pmdb_t *db)
}
for(lg = db->grpcache; lg; lg = lg->next) {
pmgrp_t *grp = lg->data;
alpm_list_free(grp->packages);
grp->packages = NULL;
_alpm_grp_free(lg->data);
lg->data = NULL;
}

View File

@@ -25,7 +25,6 @@
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <limits.h>
#include <sys/stat.h>
@@ -36,7 +35,6 @@
#include "handle.h"
#include "trans.h"
#include "util.h"
#include "error.h"
#include "log.h"
#include "cache.h"
#include "deps.h"
@@ -49,12 +47,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 +102,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 +110,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 +126,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 +216,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 db_local the database to check
* @return an alpm_list_t of pmconflict_t
*/
alpm_list_t SYMEXPORT *alpm_checkdbconflicts(pmdb_t *db_local) {
return(_alpm_innerconflicts(_alpm_db_get_pkgcache(db_local)));
}
/* Returns a alpm_list_t* of file conflicts.
@@ -251,10 +271,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 +296,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 +319,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,6 +337,16 @@ 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);
}
/* 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 */
@@ -345,13 +381,13 @@ 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) {
@@ -410,26 +446,6 @@ alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *roo
if(!skip_conflict) {
_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;
}
}
/* 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) {

View File

@@ -23,27 +23,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);
void _alpm_fileconflict_free(pmfileconflict_t *conflict);
#endif /* _ALPM_CONFLICT_H */
/* vim: set ts=2 sw=2 noet: */

View File

@@ -23,12 +23,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 +37,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"
@@ -173,6 +169,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 +187,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 +207,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,8 +228,7 @@ 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;
@@ -328,10 +236,9 @@ const char SYMEXPORT *alpm_db_get_url(const pmdb_t *db)
ASSERT(handle != NULL, return(NULL));
ASSERT(db != 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);
}
@@ -367,23 +274,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
@@ -445,41 +335,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 +378,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,21 +386,19 @@ 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
@@ -532,6 +419,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);
}
@@ -641,47 +532,4 @@ pmdb_t *_alpm_db_register_sync(const char *treename)
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

@@ -40,7 +40,7 @@ typedef enum _pmdbinfrq_t {
/* Database */
struct __pmdb_t {
char *path;
char treename[PATH_MAX];
char *treename;
void *handle;
alpm_list_t *pkgcache;
alpm_list_t *grpcache;
@@ -50,26 +50,19 @@ 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,7 @@
/*
* delta.c
*
* Copyright (c) 2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2007-2008 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 +21,16 @@
#include <stdlib.h>
#include <string.h>
#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 +39,286 @@
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_from_md5sum(pmdelta_t *delta)
{
ASSERT(delta != NULL, return(NULL));
return(delta->from_md5);
}
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)
const char SYMEXPORT *alpm_delta_get_to_md5sum(pmdelta_t *delta)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(delta != NULL, return(-1));
return(delta->size);
ASSERT(delta != NULL, return(NULL));
return(delta->to_md5);
}
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_get_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);
md5sum = alpm_get_md5sum(fpath);
if(fpath && md5sum && strcmp(md5sum, vdelta->from_md5) == 0) {
v->weight = vdelta->download_size;
}
FREE(fpath);
FREE(md5sum);
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
&& strcmp(d_j->from_md5, d_i->to_md5) == 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, const char *to_md5, 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
|| strcmp(d_i->to_md5, to_md5) == 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 to_md5 the md5sum of the above named file
* @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, const char *to_md5, 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\n");
vertices = delta_graph_init(deltas);
bestsize = delta_vert(vertices, to, to_md5, &bestpath);
_alpm_log(PM_LOG_DEBUG, "delta shortest-path search complete\n");
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:
* $oldfile $oldmd5 $newfile $newmd5 $deltafile $deltamd5 $deltasize
* @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}"
" [^[:space:]]* [[:xdigit:]]{32}"
" [^[:space:]]* [[:xdigit:]]{32} [[:digit:]]*$",
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->from, tmp2, RET_ERR(PM_ERR_MEMORY, NULL));
tmp2 = tmp;
tmp = strchr(tmp, ' ');
*(tmp++) = '\0';
strncpy(delta->to, tmp2, DLT_VERSION_LEN);
STRDUP(delta->from_md5, tmp2, RET_ERR(PM_ERR_MEMORY, NULL));
tmp2 = tmp;
tmp = strchr(tmp, ' ');
*(tmp++) = '\0';
delta->size = atol(tmp2);
STRDUP(delta->to, tmp2, RET_ERR(PM_ERR_MEMORY, NULL));
tmp2 = tmp;
tmp = strchr(tmp, ' ');
*(tmp++) = '\0';
strncpy(delta->filename, tmp2, DLT_FILENAME_LEN);
STRDUP(delta->to_md5, tmp2, RET_ERR(PM_ERR_MEMORY, NULL));
strncpy(delta->md5sum, tmp, DLT_MD5SUM_LEN);
tmp2 = tmp;
tmp = strchr(tmp, ' ');
*(tmp++) = '\0';
STRDUP(delta->delta, tmp2, RET_ERR(PM_ERR_MEMORY, NULL));
tmp2 = tmp;
tmp = strchr(tmp, ' ');
*(tmp++) = '\0';
STRDUP(delta->delta_md5, tmp2, RET_ERR(PM_ERR_MEMORY, NULL));
delta->delta_size = atol(tmp);
return(delta);
}
void _alpm_delta_free(pmdelta_t *delta)
{
FREE(delta->from);
FREE(delta->from_md5);
FREE(delta->to);
FREE(delta->to_md5);
FREE(delta->delta);
FREE(delta->delta_md5);
FREE(delta);
}
/* vim: set ts=2 sw=2 noet: */

View File

@@ -1,7 +1,7 @@
/*
* delta.h
*
* Copyright (c) 2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2007-2008 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 +19,33 @@
#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 'before' file */
char *from;
/** md5sum of the 'before' file */
char *from_md5;
/** filename of the 'after' file */
char *to;
/** md5sum of the 'after' file */
char *to_md5;
/** filename of the delta patch */
char *delta;
/** md5sum of the delta file */
char *delta_md5;
/** filesize of the delta file */
off_t delta_size;
/** 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, const char *to_md5, alpm_list_t **path);
#endif /* _ALPM_DELTA_H */

View File

@@ -30,37 +30,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 +52,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 +91,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 +103,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 +130,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 +150,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 +175,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,10 +189,42 @@ 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.
@@ -226,7 +239,7 @@ alpm_list_t SYMEXPORT *alpm_checkdeps(pmdb_t *db, int reversedeps,
alpm_list_t *remove, alpm_list_t *upgrade)
{
alpm_list_t *i, *j;
alpm_list_t *joined, *dblist;
alpm_list_t *targets, *dblist = NULL, *modified = NULL;
alpm_list_t *baddeps = NULL;
pmdepmissing_t *miss = NULL;
@@ -236,9 +249,16 @@ alpm_list_t SYMEXPORT *alpm_checkdeps(pmdb_t *db, int reversedeps,
return(NULL);
}
joined = alpm_list_join(alpm_list_copy(remove), alpm_list_copy(upgrade));
dblist = alpm_list_diff(_alpm_db_get_pkgcache(db), joined, _alpm_pkg_cmp);
alpm_list_free(joined);
targets = alpm_list_join(alpm_list_copy(remove), alpm_list_copy(upgrade));
for(i = _alpm_db_get_pkgcache(db); i; i = i->next) {
void *pkg = i->data;
if(alpm_list_find(targets, pkg, _alpm_pkg_cmp)) {
modified = alpm_list_add(modified, pkg);
} else {
dblist = alpm_list_add(dblist, pkg);
}
}
alpm_list_free(targets);
/* look for unsatisfied dependencies of the upgrade list */
for(i = upgrade; i; i = i->next) {
@@ -250,15 +270,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);
_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);
}
}
@@ -267,31 +286,28 @@ alpm_list_t SYMEXPORT *alpm_checkdeps(pmdb_t *db, int reversedeps,
if(reversedeps) {
/* reversedeps handles the backwards dependencies, ie,
* the packages listed in the requiredby field. */
alpm_list_t *modified = alpm_list_diff(_alpm_db_get_pkgcache(db), dblist, _alpm_pkg_cmp);
for(i = dblist; i; i = i->next) {
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)) {
if(causingpkg &&
!_alpm_find_dep_satisfier(upgrade, depend) &&
!_alpm_find_dep_satisfier(dblist, depend)) {
char *missdepstring = alpm_dep_get_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);
}
}
}
alpm_list_free(modified);
}
alpm_list_free(modified);
alpm_list_free(dblist);
return(baddeps);
@@ -305,7 +321,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;
@@ -332,16 +348,15 @@ int SYMEXPORT alpm_depcmp(pmpkg_t *pkg, pmdepend_t *dep)
satisfy = (strcmp(pkgname, dep->name) == 0
&& dep_vercmp(pkgversion, dep->mod, dep->version));
/* check provisions, format : "name version" */
/* check provisions, format : "name=version" */
for(i = alpm_pkg_get_provides(pkg); i && !satisfy; i = i->next) {
char *provname = strdup(i->data);
char *provver = strchr(provname, ' ');
char *provver = strchr(provname, '=');
if(provver == NULL) { /* no provision version */
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
@@ -353,7 +368,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;
@@ -362,9 +377,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. */
@@ -388,25 +403,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
@@ -414,9 +440,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);
}
@@ -436,15 +462,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);
@@ -462,7 +485,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;
@@ -472,149 +495,133 @@ 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 */
pmpkg_t *_alpm_resolvedep(pmdepend_t *dep, alpm_list_t *dbs, alpm_list_t *excluding, pmpkg_t *tpkg)
{
alpm_list_t *i, *j;
/* 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;
QUESTION(handle->trans, PM_TRANS_CONV_INSTALL_IGNOREPKG, pkg,
tpkg, NULL, &install);
if(!install) {
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;
QUESTION(handle->trans, PM_TRANS_CONV_INSTALL_IGNOREPKG, pkg,
tpkg, NULL, &install);
if(!install) {
continue;
}
}
_alpm_log(PM_LOG_WARNING, _("provider package was selected (%s provides %s)\n"),
pkg->name, dep->name);
return(pkg);
}
}
}
return(NULL);
}
/* populates list with packages that need to be installed to satisfy all
* dependencies of packages in list
*
* @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)
int _alpm_resolvedeps(pmdb_t *local, alpm_list_t *dbs_sync, alpm_list_t *list,
alpm_list_t *remove, alpm_list_t **data)
{
alpm_list_t *i, *j, *k;
alpm_list_t *i, *j;
alpm_list_t *targ;
alpm_list_t *deps = NULL;
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) {
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;
/* 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)) {
for(i = list; i; i = i->next) {
pmpkg_t *tpkg = i->data;
targ = alpm_list_add(NULL, tpkg);
deps = alpm_checkdeps(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 list already satisfies this dependency */
if(_alpm_find_dep_satisfier(list, missdep)) {
continue;
}
/* find a satisfier package in the given repositories */
pmpkg_t *spkg = _alpm_resolvedep(missdep, dbs_sync, list, tpkg);
if(!spkg) {
pm_errno = PM_ERR_UNSATISFIED_DEPS;
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_ERROR, _("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_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));
list = alpm_list_add(list, spkg);
}
}
if(found) {
continue;
}
alpm_list_free_inner(deps, (alpm_list_fn_free)_alpm_depmiss_free);
alpm_list_free(deps);
}
_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)
@@ -624,7 +631,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)
@@ -634,7 +651,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)
@@ -644,7 +661,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)
@@ -654,7 +671,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)
@@ -664,7 +681,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.
@@ -674,7 +691,7 @@ const char SYMEXPORT *alpm_dep_get_version(const pmdepend_t *dep)
*/
char SYMEXPORT *alpm_dep_get_string(const pmdepend_t *dep)
{
char *opr, *str = NULL;
char *name, *opr, *ver, *str = NULL;
size_t len;
ALPM_LOG_FUNC;
@@ -682,6 +699,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 = "";
@@ -706,11 +729,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

@@ -29,31 +29,30 @@
/* 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, pmpkg_t *tpkg);
int _alpm_resolvedeps(pmdb_t *local, alpm_list_t *dbs_sync, alpm_list_t *list,
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 */

453
lib/libalpm/dload.c Normal file
View File

@@ -0,0 +1,453 @@
/*
* download.c
*
* Copyright (c) 2002-2008 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 <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(HAVE_LIBDOWNLOAD)
#include <download.h>
#elif defined(HAVE_LIBFETCH)
#include <fetch.h>
#define downloadFreeURL fetchFreeURL
#define downloadLastErrCode fetchLastErrCode
#define downloadLastErrString fetchLastErrString
#define downloadParseURL fetchParseURL
#define downloadTimeout fetchTimeout
#define downloadXGet fetchXGet
#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);
}
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);
}
#if defined(INTERNAL_DOWNLOAD)
/* Build a 'struct url' from an url. */
static struct url *url_for_string(const char *url)
{
struct url *ret = NULL;
ret = downloadParseURL(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) {
FILE *dlf, *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 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"));
/* libdownload does not reset the error code, reset it in
* the case of previous errors */
downloadLastErrCode = 0;
/* 10s timeout - TODO make a config option */
downloadTimeout = 10000;
dlf = downloadXGet(fileurl, &ust, (handle->nopassiveftp ? "" : "p"));
if(downloadLastErrCode != 0 || dlf == NULL) {
const char *host = _("disk");
if(strcmp(SCHEME_FILE, fileurl->scheme) != 0) {
host = fileurl->host;
}
pm_errno = PM_ERR_LIBDOWNLOAD;
_alpm_log(PM_LOG_ERROR, _("failed retrieving file '%s' from %s : %s\n"),
filename, host, downloadLastErrString);
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 = fread(buffer, 1, PM_DLBUF_LEN, dlf)) > 0) {
size_t nwritten = 0;
if(ferror(dlf)) {
pm_errno = PM_ERR_LIBDOWNLOAD;
_alpm_log(PM_LOG_ERROR, _("error downloading '%s': %s\n"),
filename, downloadLastErrString);
ret = -1;
goto cleanup;
}
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);
}
}
/* 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;
fclose(dlf);
dlf = NULL;
rename(tempfile, destfile);
ret = 0;
cleanup:
FREE(tempfile);
FREE(destfile);
if(localf != NULL) {
fclose(localf);
}
if(dlf != NULL) {
fclose(dlf);
}
downloadFreeURL(fileurl);
return(ret);
}
#endif
static int download_external(const char *url, const char *localpath,
time_t mtimeold, time_t *mtimenew) {
int ret = 0;
int retval;
int usepart = 0;
char *ptr1, *ptr2;
char origCmd[PATH_MAX];
char parsedCmd[PATH_MAX] = "";
char cwd[PATH_MAX];
char *destfile, *tempfile, *filename;
if(!handle->xfercommand) {
RET_ERR(PM_ERR_EXTERNAL_DOWNLOAD, -1);
}
filename = get_filename(url);
if(!filename) {
RET_ERR(PM_ERR_EXTERNAL_DOWNLOAD, -1);
}
destfile = get_destfile(localpath, filename);
tempfile = get_tempfile(localpath, filename);
/* replace all occurrences of %o with fn.part */
strncpy(origCmd, handle->xfercommand, sizeof(origCmd));
ptr1 = origCmd;
while((ptr2 = strstr(ptr1, "%o"))) {
usepart = 1;
ptr2[0] = '\0';
strcat(parsedCmd, ptr1);
strcat(parsedCmd, tempfile);
ptr1 = ptr2 + 2;
}
strcat(parsedCmd, ptr1);
/* replace all occurrences of %u with the download URL */
strncpy(origCmd, parsedCmd, sizeof(origCmd));
parsedCmd[0] = '\0';
ptr1 = origCmd;
while((ptr2 = strstr(ptr1, "%u"))) {
ptr2[0] = '\0';
strcat(parsedCmd, ptr1);
strcat(parsedCmd, url);
ptr1 = ptr2 + 2;
}
strcat(parsedCmd, ptr1);
/* cwd to the download directory */
getcwd(cwd, PATH_MAX);
if(chdir(localpath)) {
_alpm_log(PM_LOG_WARNING, _("could not chdir to %s\n"), localpath);
pm_errno = PM_ERR_EXTERNAL_DOWNLOAD;
ret = -1;
goto cleanup;
}
/* execute the parsed command via /bin/sh -c */
_alpm_log(PM_LOG_DEBUG, "running command: %s\n", parsedCmd);
retval = system(parsedCmd);
if(retval == -1) {
_alpm_log(PM_LOG_WARNING, _("running XferCommand: fork failed!\n"));
pm_errno = PM_ERR_EXTERNAL_DOWNLOAD;
ret = -1;
} else if(retval != 0) {
/* download failed */
_alpm_log(PM_LOG_DEBUG, "XferCommand command returned non-zero status "
"code (%d)\n", retval);
ret = -1;
} else {
/* download was successful */
if(usepart) {
rename(tempfile, destfile);
}
ret = 0;
}
cleanup:
chdir(cwd);
if(ret == -1) {
/* hack to let an user the time to cancel a download */
sleep(2);
}
FREE(destfile);
FREE(tempfile);
return(ret);
}
static int download(const char *url, const char *localpath,
time_t mtimeold, time_t *mtimenew) {
int ret;
/* We have a few things to take into account here.
* 1. If we have both internal/external available, choose based on
* whether xfercommand is populated.
* 2. If we only have external available, we should first check
* if a command was provided before we drop into download_external.
*/
if(handle->xfercommand == NULL) {
#if defined(INTERNAL_DOWNLOAD)
ret = download_internal(url, localpath, mtimeold, mtimenew);
#else
RET_ERR(PM_ERR_EXTERNAL_DOWNLOAD, -1);
#endif
} else {
ret = download_external(url, localpath, mtimeold, mtimenew);
}
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;
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,7 @@
/*
* error.h
* dload.h
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2002-2008 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 +16,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,7 @@
/*
* 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) 2002-2008 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 +19,28 @@
#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(HAVE_LIBDOWNLOAD)
#include <download.h> /* downloadLastErrString */
#elif defined(HAVE_LIBFETCH)
#include <fetch.h> /* fetchLastErrString */
#define downloadLastErrString 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 +87,6 @@ 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");
/* Transactions */
case PM_ERR_TRANS_NOT_NULL:
return _("transaction already initialized");
@@ -109,21 +115,17 @@ const char SYMEXPORT *alpm_strerror(int err)
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 */
@@ -141,16 +143,26 @@ const char SYMEXPORT *alpm_strerror(int err)
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_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_LIBDOWNLOAD:
#if defined(INTERNAL_DOWNLOAD)
return downloadLastErrString;
#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");

58
lib/libalpm/graph.h Normal file
View File

@@ -0,0 +1,58 @@
/*
* graph.h - helpful graph structure and setup/teardown methods
*
* Copyright (c) 2002-2008 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

@@ -27,17 +27,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 +50,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 +66,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

@@ -19,19 +19,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

@@ -23,7 +23,6 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <limits.h>
#include <sys/types.h>
#include <syslog.h>
@@ -36,10 +35,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;
@@ -55,8 +52,6 @@ pmhandle_t *_alpm_handle_new()
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;
@@ -120,6 +115,15 @@ alpm_cb_download SYMEXPORT alpm_option_get_dlcb()
return handle->dlcb;
}
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) {
@@ -273,6 +277,15 @@ void SYMEXPORT alpm_option_set_dlcb(alpm_cb_download cb)
handle->dlcb = 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;
@@ -386,7 +399,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 +410,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 +439,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 +463,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 +485,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);
@@ -488,7 +499,7 @@ void SYMEXPORT alpm_option_add_ignorepkg(const char *pkg)
handle->ignorepkg = alpm_list_add(handle->ignorepkg, strdup(pkg));
}
void alpm_option_set_ignorepkgs(alpm_list_t *ignorepkgs)
void SYMEXPORT alpm_option_set_ignorepkgs(alpm_list_t *ignorepkgs)
{
if(handle->ignorepkg) FREELIST(handle->ignorepkg);
if(ignorepkgs) handle->ignorepkg = ignorepkgs;
@@ -496,9 +507,8 @@ void 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);
char *vdata = NULL;
handle->ignorepkg = alpm_list_remove_str(handle->ignorepkg, pkg, &vdata);
if(vdata != NULL) {
FREE(vdata);
return(1);
@@ -519,9 +529,8 @@ void SYMEXPORT alpm_option_set_holdpkgs(alpm_list_t *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->holdpkg = alpm_list_remove_str(handle->holdpkg, pkg, &vdata);
if(vdata != NULL) {
FREE(vdata);
return(1);
@@ -534,7 +543,7 @@ void SYMEXPORT alpm_option_add_ignoregrp(const char *grp)
handle->ignoregrp = alpm_list_add(handle->ignoregrp, strdup(grp));
}
void alpm_option_set_ignoregrps(alpm_list_t *ignoregrps)
void SYMEXPORT alpm_option_set_ignoregrps(alpm_list_t *ignoregrps)
{
if(handle->ignoregrp) FREELIST(handle->ignoregrp);
if(ignoregrps) handle->ignoregrp = ignoregrps;
@@ -542,9 +551,8 @@ void 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);

View File

@@ -30,7 +30,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 +39,7 @@ 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 */
/* filesystem paths */
char *root; /* Root path, default '/' */
@@ -50,7 +50,7 @@ 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 */

View File

@@ -30,7 +30,6 @@
#include "log.h"
#include "handle.h"
#include "util.h"
#include "error.h"
#include "alpm.h"
/** \addtogroup alpm_log Logging Functions

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)))
@@ -250,7 +248,7 @@ static inline void md5_update( md5_context *ctx, unsigned char *input, int ilen
}
}
static unsigned char md5_padding[64] =
static const unsigned char md5_padding[64] =
{
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -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

@@ -30,8 +30,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 +40,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 +51,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 +76,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 +86,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 +107,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 +116,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 +224,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 +238,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 +294,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;
@@ -519,7 +452,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 +550,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 +562,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 +751,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 +812,46 @@ 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);
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)
/* 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 +861,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

@@ -23,7 +23,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 +34,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 +61,7 @@ struct __pmpkg_t {
alpm_list_t *conflicts;
alpm_list_t *provides;
alpm_list_t *deltas;
alpm_list_t *delta_path;
/* internal */
pmpkgfrom_t origin;
/* Replaced 'void *data' with this union as follows:
@@ -85,14 +75,12 @@ 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);
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);
int _alpm_pkg_compare_versions(pmpkg_t *local_pkg, pmpkg_t *pkg);
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,14 @@
# Set of available languages.
cs_CZ
cs
de
en_GB
es
fr
hu
it
pl_PL
pl
pt_BR
ru_RU
ru
tr
uk
zh_CN

View File

@@ -8,9 +8,9 @@ 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

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

View File

@@ -1,676 +1,558 @@
# translation of cs_CZ.po to Čeština
# 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 <vogo@seznam.cz>, 2007.
# Vojtěch Gondžala <vojtech.gondzala@gmail.com>, 2007, 2008, 2009.
msgid ""
msgstr ""
"Project-Id-Version: cs_CZ\n"
"Project-Id-Version: cs\n"
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
"POT-Creation-Date: 2007-12-02 21:40-0600\n"
"PO-Revision-Date: 2007-12-21 14:26+0100\n"
"Last-Translator: Vojtěch Gondžala <vogo@seznam.cz>\n"
"POT-Creation-Date: 2008-08-23 10:54-0500\n"
"PO-Revision-Date: 2009-01-04 21:59+0100\n"
"Last-Translator: Vojtěch Gondžala <vojtech.gondzala@gmail.com>\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"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
#: lib/libalpm/add.c:88
#, 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"
msgstr "v seznamu cílů nahrazena starší verze %s-%s za %s\n"
#: lib/libalpm/add.c:97
#, 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"
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"
#: lib/libalpm/add.c:168
#, c-format
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:169
#, c-format
msgid "you cannot install two conflicting packages at the same time\n"
msgstr "nemůžete instalovat dva konfliktní balíčky současně\n"
msgstr "nelze instalovat dva konfliktní balíčky současně\n"
#: lib/libalpm/add.c:172
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"
#, c-format
msgid "replacing packages with -U is not supported yet\n"
msgstr "nahrazování balíčků pomocí -U není nyní podporováno\n"
#: lib/libalpm/add.c:173
#, c-format
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"
msgstr "balíčky lze nahradit ručně použitím -Rd a -U\n"
#: lib/libalpm/add.c:365
#, c-format
msgid ""
"directory permissions differ on %s\n"
"filesystem: %o package: %o\n"
msgstr ""
"přístupová práva adresáře v %s se neshodují\n"
"přístupová práva adresáře %s se neshodují\n"
"souborový systém: %o balíček: %o\n"
#: lib/libalpm/add.c:392
#, 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:399
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr "rozbalení: nepřepisuji adreř souborem %s\n"
msgstr "rozbalení: adresář nebyl přepn souborem %s\n"
#: lib/libalpm/add.c:454 lib/libalpm/add.c:598 lib/libalpm/util.c:422
#, c-format
msgid "could not extract %s (%s)\n"
msgstr "nelze rozbalit %s (%s)\n"
#: lib/libalpm/add.c:505
#, c-format
msgid "could not rename %s (%s)\n"
msgstr "nelze přejmenovat %s (%s)\n"
msgid "could not rename %s to %s (%s)\n"
msgstr "nelze přejmenovat %s na %s (%s)\n"
#: lib/libalpm/add.c:512 lib/libalpm/add.c:532 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:517 lib/libalpm/remove.c:234
#, c-format
msgid "%s saved as %s\n"
msgstr "%s uložen jako %s\n"
msgstr "%s byl uložen jako %s\n"
#: lib/libalpm/add.c:556
#, c-format
msgid "could not install %s as %s: %s\n"
msgstr "nelze nainstalovat %s jako %s: %s\n"
msgid "could not install %s as %s (%s)\n"
msgstr "%s nelze nainstalovat jako %s (%s)\n"
#: lib/libalpm/add.c:559
#, c-format
msgid "%s installed as %s\n"
msgstr "%s nainstalován jako %s\n"
msgstr "%s byl nainstalován jako %s\n"
#: lib/libalpm/add.c:576
#, c-format
msgid "extracting %s as %s.pacnew\n"
msgstr "rozbaluji %s jako %s.pacnew\n"
msgstr "%s byl rozbalen jako %s.pacnew\n"
#: lib/libalpm/add.c:711 lib/libalpm/trans.c:529
#, c-format
msgid "could not get current working directory\n"
msgstr "nelze určit aktuální pracovní adresář\n"
#: lib/libalpm/add.c:765
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "nastal problém při aktualizaci %s\n"
#: lib/libalpm/add.c:770
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "nastal problém při instalaci %s\n"
#: lib/libalpm/add.c:785
#, 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:793
#, c-format
msgid "could not add entry '%s' in cache\n"
msgstr "nelze přidat položku '%s' do keše\n"
msgstr "nelze přidat položku '%s' do cache\n"
#: lib/libalpm/be_files.c:223
#, 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:275
#, c-format
msgid "loading package data for %s : level=%d\n"
msgstr "získávám informace o balíčku %s : úroveň=%d\n"
#: lib/libalpm/be_files.c:292 lib/libalpm/be_files.c:429
#: lib/libalpm/be_files.c:452 lib/libalpm/be_files.c:563
#: lib/libalpm/be_files.c:641 lib/libalpm/be_files.c:669
#: lib/libalpm/package.c:787
#, c-format
msgid "could not open file %s: %s\n"
msgstr "nelze otevřít soubor %s: %s\n"
#: lib/libalpm/cache.c:62
#, c-format
msgid "adding '%s' to package cache for db '%s'\n"
msgstr "přidávám '%s' do keše balíčků pro databázi '%s'\n"
#: lib/libalpm/db.c:285
#, 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:553
msgid "attempt to re-register the 'local' DB\n"
msgstr "pokus o opětovné zaregistrování databáze 'local'\n"
#: lib/libalpm/db.c:562 lib/libalpm/db.c:613
msgid "database path is undefined\n"
msgstr "cesta k databázi nebyla určena\n"
#: lib/libalpm/deps.c:173
msgid "dependency cycle detected:\n"
msgstr "zjištěna cyklická závislost:\n"
#: lib/libalpm/deps.c:175
#, 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"
msgid "invalid name for database entry '%s'\n"
msgstr "chybný název záznamu v databázi '%s'\n"
#: lib/libalpm/deps.c:177
#, 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"
msgid "corrupted database entry '%s'\n"
msgstr "poškozený záznam v databázi '%s'\n"
#: lib/libalpm/deps.c:573
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "nemohu získat \"%s\", závislost \"%s\"\n"
msgid "could not open file %s: %s\n"
msgstr "nelze otevřít soubor %s: %s\n"
#: lib/libalpm/error.c:43
msgid "out of memory!"
msgstr "nedostatek paměti!"
#: lib/libalpm/error.c:45
msgid "unexpected system error"
msgstr "neočekávaná systémová chyba"
#: lib/libalpm/error.c:47
msgid "insufficient privileges"
msgstr "nedostatečná oprávnění"
#: lib/libalpm/error.c:49
msgid "could not find or read file"
msgstr "nelze najít nebo číst soubor"
#: lib/libalpm/error.c:51
msgid "could not find or read directory"
msgstr "nelze najít nebo číst adresář"
#: lib/libalpm/error.c:53
msgid "wrong or NULL argument passed"
msgstr "předán chybný nebo NULL argument"
#: lib/libalpm/error.c:56
msgid "library not initialized"
msgstr "knihovna nebyla inicializována"
#: lib/libalpm/error.c:58
msgid "library already initialized"
msgstr "knihovna inicializována"
#: lib/libalpm/error.c:60
msgid "unable to lock database"
msgstr "nelze zamknout databázi"
#: lib/libalpm/error.c:63
msgid "could not open database"
msgstr "nelze otevřít databázi"
#: lib/libalpm/error.c:65
msgid "could not create database"
msgstr "nelze vytvořit databázi"
#: lib/libalpm/error.c:67
msgid "database not initialized"
msgstr "databáze nebyla inicializována"
#: lib/libalpm/error.c:69
msgid "database already registered"
msgstr "databáze zaregistrována"
#: lib/libalpm/error.c:71
msgid "could not find database"
msgstr "nelze nalézt databázi"
#: lib/libalpm/error.c:73
msgid "could not update database"
msgstr "nelze aktualizovat databázi"
#: lib/libalpm/error.c:75
msgid "could not remove database entry"
msgstr "nelze odstranit položku databáze"
#: lib/libalpm/error.c:78
msgid "invalid url for server"
msgstr "nesprávná url pro server"
#: lib/libalpm/error.c:85
msgid "could not set parameter"
msgstr "nelze nastavit parametr"
#: lib/libalpm/error.c:88
msgid "transaction already initialized"
msgstr "transakce inicializována"
#: lib/libalpm/error.c:90 lib/libalpm/error.c:94
msgid "transaction not initialized"
msgstr "transakce neinicializována"
#: lib/libalpm/error.c:92
msgid "duplicate target"
msgstr "duplicitní cíl"
#: lib/libalpm/error.c:96
msgid "transaction not prepared"
msgstr "transakce nepřipravena"
#: lib/libalpm/error.c:98
msgid "transaction aborted"
msgstr "transakce zrušena"
#: lib/libalpm/error.c:100
msgid "operation not compatible with the transaction type"
msgstr "operace není kompatibilní s typem transakce"
#: lib/libalpm/error.c:102
msgid "could not commit transaction"
msgstr "nelze provést transakci"
#: lib/libalpm/error.c:104
msgid "could not download all files"
msgstr "nelze stáhnout všechny soubory"
#: lib/libalpm/error.c:107
msgid "could not find or read package"
msgstr "nelze nalézt nebo přečíst balíček"
#: lib/libalpm/error.c:109
msgid "invalid or corrupted package"
msgstr "neplatný nebo poškozený balíček"
#: lib/libalpm/error.c:111
msgid "cannot open package file"
msgstr "nelze otevřít soubor balíčku"
#: lib/libalpm/error.c:113
msgid "cannot load package data"
msgstr "nelze načíst data z balíčku"
#: lib/libalpm/error.c:115
msgid "package already installed"
msgstr "balíček je již nainstalován"
#: lib/libalpm/error.c:117
msgid "package not installed or lesser version"
msgstr "balíček není nainstalovaný nebo má nižší verzi"
#: lib/libalpm/error.c:119
msgid "cannot remove all files for package"
msgstr "nelze odstranit všechny soubory balíčku"
#: lib/libalpm/error.c:121
msgid "package name is not valid"
msgstr "jméno balíčku není platné"
#: lib/libalpm/error.c:123
msgid "corrupted package"
msgstr "poškozený balíček"
#: lib/libalpm/error.c:125
msgid "no such repository"
msgstr "není žádný takový repositář"
#: lib/libalpm/error.c:128
msgid "corrupted delta"
msgstr "poškozený rozdíl"
#: lib/libalpm/error.c:130
msgid "delta patch failed"
msgstr "rozdílová záplata selhala"
#: lib/libalpm/error.c:133
msgid "group not found"
msgstr "skupina nenalezena"
#: lib/libalpm/error.c:136
msgid "could not satisfy dependencies"
msgstr "nelze vyřešit závislosti"
#: lib/libalpm/error.c:138
msgid "conflicting dependencies"
msgstr "konfliktní závislosti"
#: lib/libalpm/error.c:140
msgid "conflicting files"
msgstr "konfliktní soubory"
#: lib/libalpm/error.c:143
msgid "user aborted the operation"
msgstr "uživatel zrušil operaci"
#: lib/libalpm/error.c:145
msgid "internal error"
msgstr "interní chyba"
#: lib/libalpm/error.c:147
msgid "libarchive error"
msgstr "chyba knihovny libarchive"
#: lib/libalpm/error.c:150
msgid "not confirmed"
msgstr "nepotvrzeno"
#: lib/libalpm/error.c:152
msgid "invalid regular expression"
msgstr "nesprávný regulární výraz"
#: lib/libalpm/error.c:155
msgid "connection to remote host failed"
msgstr "spojení ke vzdálenému hostiteli selhalo"
#: lib/libalpm/error.c:158
msgid "unexpected error"
msgstr "neočekávaná chyba"
#: lib/libalpm/package.c:124
#, c-format
msgid "could not get md5sum for package %s-%s\n"
msgstr "nelze zjistit md5 kontrolní součet balíčku %s-%s\n"
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr "databáze %s je nekonzistentní: nesouhlasí jméno balíčku %s\n"
#: lib/libalpm/package.c:133
#, c-format
msgid "md5sums do not match for package %s-%s\n"
msgstr "md5 kontrolní součet balíčku %s-%s nesouhlasí\n"
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr "databáze %s je nekonzistentní: nesouhlasí verze balíčku %s\n"
#: lib/libalpm/package.c:737
#, c-format
msgid "%s: forcing upgrade to version %s\n"
msgstr "%s: vynucená aktualizace na verzi %s\n"
#: lib/libalpm/package.c:742
#, 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:750
#, c-format
msgid "%s-%s: delaying upgrade of package (%s)\n"
msgstr "%s-%s: rozdílová aktualizace balíčku (%s)\n"
#: lib/libalpm/package.c:931
#, c-format
msgid "could not parse package description file in %s\n"
msgstr "nelze získat soubor s popisem balíčku z %s\n"
msgstr "nelze zpracovat soubor s popisem balíčku v %s\n"
#: lib/libalpm/package.c:936
#, c-format
msgid "missing package name in %s\n"
msgstr "chybí jméno balíčku v %s\n"
#: lib/libalpm/package.c:940
#, c-format
msgid "missing package version in %s\n"
msgstr "chybí veze balíčku v %s\n"
#: lib/libalpm/package.c:970
#, c-format
msgid "could not remove tempfile %s\n"
msgstr "nelze odstranit dočasný soubor %s\n"
#: lib/libalpm/package.c:985 lib/libalpm/package.c:998
#, c-format
msgid "error while reading package %s: %s\n"
msgstr "chyba při čtení balíčku %s: %s\n"
#: lib/libalpm/package.c:1005
#, c-format
msgid "missing package metadata in %s\n"
msgstr "chybí metadata balíčku v %s\n"
#: lib/libalpm/package.c:1012
#, c-format
msgid "missing package filelist in %s, generating one\n"
msgstr "chybí seznam souborů balíčku v %s, generuji jej\n"
msgid "attempt to re-register the 'local' DB\n"
msgstr "pokus o opětovné zaregistrování databáze 'local'\n"
#: lib/libalpm/remove.c:121
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "nelze nalézt %s v databázi -- přeskakuji\n"
msgid "database path is undefined\n"
msgstr "cesta k databázi není definována\n"
#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:243
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "nelze odstranit soubor '%s': %s\n"
msgid "dependency cycle detected:\n"
msgstr "zjištěna cyklická závislost:\n"
#: lib/libalpm/remove.c:337
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "nelze odstranit záznam databáze %s-%s\n"
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/remove.c:342
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "nelze odstranit položku '%s' z keše\n"
msgid "%s will be installed before its %s dependency\n"
msgstr "%s bude nainstalován před %s, na kterém závisí\n"
#: lib/libalpm/server.c:56
#, c-format
msgid "url '%s' is invalid, ignoring\n"
msgstr "url '%s' je chybná, ignoruji\n"
msgid "provider package was selected (%s provides %s)\n"
msgstr "byl vybrán nahrazující balíček (%s poskytuje %s)\n"
#: lib/libalpm/server.c:60
msgid "url scheme not specified, assuming http\n"
msgstr "schéma url nedefinováno, předpokládám http\n"
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "nelze vyřešit \"%s\", závislost \"%s\"\n"
#: lib/libalpm/server.c:241
#, 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"
#: lib/libalpm/server.c:245
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "selhalo získání souboru '%s' z %s: %s\n"
msgstr "selhalo získání souboru '%s' z %s: %s\n"
#: lib/libalpm/server.c:275
#, c-format
msgid "cannot resume download, starting over\n"
msgstr "nelze navázat stahování, začínám znovu\n"
msgstr "nelze navázat stahování, začíná se znovu\n"
#: lib/libalpm/server.c:288
#, c-format
msgid "cannot write to file '%s'\n"
msgstr "nelze zapisovat do souboru '%s'\n"
#: lib/libalpm/server.c:307
#, c-format
msgid "error downloading '%s': %s\n"
msgstr "chyba při stahování '%s': %s\n"
#: lib/libalpm/server.c:319
#, 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:387
#, c-format
msgid "could not chdir to %s\n"
msgstr "nelze změnit adresář na %s\n"
#: lib/libalpm/server.c:394
#, c-format
msgid "running XferCommand: fork failed!\n"
msgstr "spouštím XferCommand: větvení selhalo!\n"
msgstr "spouští se XferCommand: větvení selhalo!\n"
#: lib/libalpm/server.c:445
msgid "URL does not contain a file for download\n"
msgstr "URL neobsahuje stahovaný soubor\n"
#: lib/libalpm/server.c:458
#, c-format
msgid "failed to download %s\n"
msgstr "selhalo stahování %s\n"
#: lib/libalpm/sync.c:135
#, 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 "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 "could not commit transaction"
msgstr "nelze provést transakci"
#, c-format
msgid "could not download all files"
msgstr "nelze stáhnout všechny soubory"
#, c-format
msgid "could not find or read package"
msgstr "nelze nalézt nebo přečíst balíček"
#, 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 load package data"
msgstr "nelze načíst data z balíčku"
#, c-format
msgid "package not installed or lesser version"
msgstr "balíček není nainstalovaný nebo má nižší verzi"
#, 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 "group not found"
msgstr "skupina nebyla nalezena"
#, 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 "user aborted the operation"
msgstr "uživatel zrušil operaci"
#, c-format
msgid "internal error"
msgstr "interní chyba"
#, c-format
msgid "not confirmed"
msgstr "nepotvrzeno"
#, 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-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
msgstr "%s-%s: ignoruji aktualizaci balíčku (bude nahrazen %s-%s)\n"
msgstr "%s-%s: ignoruje se aktualizace balíčku (měl být nahrazen %s-%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"
#: lib/libalpm/sync.c:250
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: ignoruji aktualizaci balíčku (%s => %s)\n"
msgstr "%s: ignoruje se aktualizace balíčku (%s => %s)\n"
#: lib/libalpm/sync.c:320
#, c-format
msgid "repository '%s' not found\n"
msgstr "repositář '%s' nenalezen\n"
msgstr "repositář '%s' nebyl nalezen\n"
#: lib/libalpm/sync.c:354
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s je aktuální -- přeskakuji\n"
msgstr "%s-%s je aktuální -- vynechat\n"
#: lib/libalpm/sync.c:358
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s je aktuální -- přeinstalovávám\n"
msgstr "%s-%s je aktuální -- přeinstalovat\n"
#: lib/libalpm/sync.c:613 lib/libalpm/sync.c:618
#, 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"
#: lib/libalpm/sync.c:628
#, c-format
msgid "malloc failure: could not allocate %zd bytes\n"
msgstr "selhala alokace paměti: nelze alokovat %zd bytů\n"
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgstr "'%s' odstraněn ze seznamu cílů, protože je konfliktní s '%s'\n"
#: lib/libalpm/sync.c:825
#, c-format
msgid "command: %s\n"
msgstr "příkaz: %s\n"
#: lib/libalpm/sync.c:888 lib/libalpm/sync.c:896
#, 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:910
#, 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:1056
#, c-format
msgid "failed to retrieve some files from %s\n"
msgstr "selhalo stažení některých souborů z %s\n"
msgstr "selhalo získání některých souborů z %s\n"
#: lib/libalpm/sync.c:1137
#, c-format
msgid "could not create removal transaction\n"
msgstr "nelze vytvořit transakci pro odstranění\n"
#: lib/libalpm/sync.c:1143
#, c-format
msgid "could not initialize the removal transaction\n"
msgstr "nelze inicializovat transakci pro odstranění\n"
#: lib/libalpm/sync.c:1165
#, c-format
msgid "could not prepare removal transaction\n"
msgstr "nelze připravit transakci pro odstranění\n"
#: lib/libalpm/sync.c:1171
#, c-format
msgid "could not commit removal transaction\n"
msgstr "nelze provést transakci pro odstranění\n"
#: lib/libalpm/sync.c:1182
#, c-format
msgid "could not create transaction\n"
msgstr "nelze vytvořit transakci\n"
#: lib/libalpm/sync.c:1187
#, c-format
msgid "could not initialize transaction\n"
msgstr "nelze inicializovat transakci\n"
#: lib/libalpm/sync.c:1214
#, c-format
msgid "could not prepare transaction\n"
msgstr "nelze připravit transakci\n"
#: lib/libalpm/sync.c:1219
#, c-format
msgid "could not commit transaction\n"
msgstr "nelze provést transakci\n"
#: lib/libalpm/trans.c:214
#, c-format
msgid "could not remove lock file %s\n"
msgstr "nelze odstranit zamykací soubor %s\n"
#: lib/libalpm/trans.c:483
#, c-format
msgid "No /bin/sh in root dir (%s), aborting scriptlet\n"
msgstr "V kořenovém adresáři není /bin/sh (%s), ruším provádění skriptů\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"
#: lib/libalpm/trans.c:494
#, c-format
msgid "could not create temp directory\n"
msgstr "nelze vytvořit dočasný adresář\n"
#: lib/libalpm/trans.c:536
#, 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 change directory to %s (%s)\n"
msgstr "nelze změnit adresář na %s (%s)\n"
#: lib/libalpm/trans.c:554
#, c-format
msgid "could not fork a new process (%s)\n"
msgstr "nelze spustit nový proces (%s)\n"
#: lib/libalpm/trans.c:564
#, c-format
msgid "could not change the root directory (%s)\n"
msgstr "nelze změnit kořenový adresář (%s)\n"
#: lib/libalpm/trans.c:569
#, c-format
msgid "could not change directory to / (%s)\n"
msgstr "nelze změnit adresář na / (%s)\n"
#: lib/libalpm/trans.c:578
#, c-format
msgid "call to popen failed (%s)"
msgstr "volání popen selhalo (%s)"
#: lib/libalpm/trans.c:597
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr "volání waitpid selhalo (%s)\n"
#: lib/libalpm/trans.c:606
#, c-format
msgid "scriptlet failed to execute correctly\n"
msgstr "správné spuštění skriptu selhalo\n"
msgstr "skript se nepodařilo spustit správně\n"
#: lib/libalpm/trans.c:615
#, c-format
msgid "could not remove tmpdir %s\n"
msgstr "nelze odstranit dočasný adresář %s\n"
#: lib/libalpm/util.c:204
#, c-format
msgid "failed to make path '%s' : %s\n"
msgstr "selhalo vytvoření cesty '%s': %s\n"
#: lib/libalpm/util.c:389
#, c-format
msgid "could not open %s: %s\n"
msgstr "nelze otevřít %s: %s\n"
#: lib/libalpm/util.c:573
#, c-format
msgid "no %s cache exists, creating...\n"
msgstr "neexistuje keš %s, vytvářím...\n"
msgstr "neexistuje cache %s, vytváří se...\n"
#: lib/libalpm/util.c:593
#, c-format
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:643
#, c-format
msgid "md5: %s can't be opened\n"
msgstr "md5: %s nemohl být otevřen\n"
#: lib/libalpm/util.c:645
#, c-format
msgid "md5: %s can't be read\n"
msgstr "md5: %s nemohl být přečten\n"
msgstr "nelze vytvořit cache balíčků, používá se /tmp\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: 2007-12-21 11:06+0100\n"
"PO-Revision-Date: 2007-12-22 22:29+0100\n"
"POT-Creation-Date: 2008-08-23 10:54-0500\n"
"PO-Revision-Date: 2008-08-23 22:51+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,33 +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"
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"
msgstr "une version plus récente %s-%s est dans la liste des cibles -- paquet ignoré\n"
msgid "skipping %s-%s because newer version %s is in the target list\n"
msgstr ""
"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"
msgstr ""
"vous pouvez remplacer les paquets manuellement en utilisant -Rd et -U\n"
#: lib/libalpm/add.c:363
#, c-format
msgid ""
"directory permissions differ on %s\n"
@@ -50,646 +51,513 @@ msgstr ""
"Les permissions pour le répertoire %s sont différentes\n"
"système de fichier: %o paquet : %o\n"
#: lib/libalpm/add.c:390
#, 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:397
#, 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:452
#: lib/libalpm/add.c:596
#: lib/libalpm/util.c:421
#, c-format
msgid "could not extract %s (%s)\n"
msgstr "l'extraction de %s a échoué (%s)\n"
#: lib/libalpm/add.c:503
#, 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:510
#: lib/libalpm/add.c:530
#: lib/libalpm/trans.c:506
#, 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:515
#: lib/libalpm/remove.c:232
#, c-format
msgid "%s saved as %s\n"
msgstr "%s enregistré en tant que %s\n"
#: lib/libalpm/add.c:554
#, 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:557
#, c-format
msgid "%s installed as %s\n"
msgstr "%s installé en tant que %s\n"
#: lib/libalpm/add.c:574
#, 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:709
#: lib/libalpm/trans.c:524
#, c-format
msgid "could not get current working directory\n"
msgstr "déterminer le répertoire courant a échoué\n"
#: lib/libalpm/add.c:763
#, 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:768
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "des erreurs sont survenues pendant l'installation de %s\n"
#: lib/libalpm/add.c:783
#, 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:791
#, 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 "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:273
#, c-format
msgid "loading package data for %s : level=%d\n"
msgstr "chargement des données du paquet %s : niveau=%d\n"
#: lib/libalpm/be_files.c:290
#: lib/libalpm/be_files.c:427
#: lib/libalpm/be_files.c:450
#: lib/libalpm/be_files.c:561
#: lib/libalpm/be_files.c:639
#: lib/libalpm/be_files.c:667
#: lib/libalpm/package.c:894
#, c-format
msgid "could not open file %s: %s\n"
msgstr "l'ouverture du fichier %s a échoué: %s\n"
#: lib/libalpm/cache.c:60
#, c-format
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"
#: 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"
#: 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 "invalid name for database entry '%s'\n"
msgstr "nom invalide pour l'entrée de base de données '%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 "corrupted database entry '%s'\n"
msgstr "l'entrée '%s' de la base de données est corrompue\n"
#: lib/libalpm/deps.c:584
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "impossible de résoudre \"%s\", une dépendance de \"%s\"\n"
msgid "could not open file %s: %s\n"
msgstr "l'ouverture du fichier %s a échoué: %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"
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/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"
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/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:857
#, c-format
msgid "%s-%s: delaying upgrade of package (%s)\n"
msgstr "%s-%s: retarde la mise à jour du paquet (%s)\n"
#: lib/libalpm/package.c:1036
#, 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:1042
#, 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:1047
#, c-format
msgid "missing package name in %s\n"
msgstr "nom de paquet manquant dans %s\n"
#: lib/libalpm/package.c:1051
#, c-format
msgid "missing package version in %s\n"
msgstr "version de paquet manquante dans %s\n"
#: lib/libalpm/package.c:1081
#, c-format
msgid "could not remove tempfile %s\n"
msgstr "la suppression du fichier temporaire %s a échoué\n"
#: lib/libalpm/package.c:1096
#: lib/libalpm/package.c:1109
#, 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:1116
#, c-format
msgid "missing package metadata in %s\n"
msgstr "méta-données du paquet manquantes dans %s\n"
#: lib/libalpm/package.c:1123
#, c-format
msgid "missing package filelist in %s, generating one\n"
msgstr "liste de fichiers absente du paquet %s, création\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: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 "database path is undefined\n"
msgstr "base de données non initialisée\n"
#: lib/libalpm/remove.c:170
#: lib/libalpm/remove.c:241
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "suppression du fichier '%s' impossible: %s\n"
msgid "dependency cycle detected:\n"
msgstr "cycle de dépendances détecté:\n"
#: lib/libalpm/remove.c:335
#, 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 will be removed after its %s dependency\n"
msgstr "%s sera supprimé après sa dépendance %s\n"
#: lib/libalpm/remove.c:340
#, 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 installed before its %s dependency\n"
msgstr "%s sera installé avant 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 "provider package was selected (%s provides %s)\n"
msgstr "Une provision a été sélectionnée (%s fournit %s)\n"
#: lib/libalpm/server.c:58
msgid "url scheme not specified, assuming http\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"
#: lib/libalpm/server.c:392
#, c-format
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 "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 "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 "could not commit transaction"
msgstr "appliquer la transaction a échoué"
#, c-format
msgid "could not download all files"
msgstr "tous les fichiers n'ont pas pu être téléchargés"
#, c-format
msgid "could not find or read package"
msgstr "trouver ou de lire le paquet a échoué"
#, 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 load package data"
msgstr "chargement des données du paquet impossible"
#, c-format
msgid "package not installed or lesser version"
msgstr "paquet non installé ou version plus ancienne"
#, 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 "group not found"
msgstr "groupe non trouvé"
#, 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 "user aborted the operation"
msgstr "opération annulée par l'utilisateur"
#, c-format
msgid "internal error"
msgstr "erreur interne"
#, c-format
msgid "not confirmed"
msgstr "non confirmé"
#, 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"
#, 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"
#: lib/libalpm/sync.c:248
#, 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 "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: ignore la mise à jour du paquet (%s => %s)\n"
#: lib/libalpm/sync.c:318
#, c-format
msgid "repository '%s' not found\n"
msgstr "dépôt '%s' non trouvé\n"
#: lib/libalpm/sync.c:352
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s est à jour -- ignoré\n"
#: lib/libalpm/sync.c:356
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s est à jour -- réinstalle\n"
#: lib/libalpm/sync.c:611
#: lib/libalpm/sync.c:616
#, 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:626
#, 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:823
#, c-format
msgid "command: %s\n"
msgstr "commande: %s\n"
#: lib/libalpm/sync.c:886
#: lib/libalpm/sync.c:894
#, 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:908
#, 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:1054
#, 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:1135
#, 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:1141
#, c-format
msgid "could not initialize the removal transaction\n"
msgstr "l'initialisation de la transaction de suppression a échoué\n"
#: lib/libalpm/sync.c:1163
#, 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:1169
#, c-format
msgid "could not commit removal transaction\n"
msgstr "appliquer la transaction de suppression a échoué\n"
#: lib/libalpm/sync.c:1180
#, c-format
msgid "could not create transaction\n"
msgstr "la création de la transaction a échoué\n"
#: lib/libalpm/sync.c:1185
#, c-format
msgid "could not initialize transaction\n"
msgstr "l'initialisation de la transaction a échoué\n"
#: lib/libalpm/sync.c:1212
#, c-format
msgid "could not prepare transaction\n"
msgstr "la préparation de la transaction a échoué\n"
#: lib/libalpm/sync.c:1217
#, 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:481
#, c-format
msgid "No /bin/sh in parent environment, aborting scriptlet\n"
msgstr "Pas de /bin/sh dans l'environnement parent, interruption du scriptlet\n"
msgstr ""
"Pas de /bin/sh dans l'environnement parent, interruption du scriptlet\n"
#: lib/libalpm/trans.c:492
#, c-format
msgid "could not create temp directory\n"
msgstr "la création du répertoire temporaire a échoué\n"
#: lib/libalpm/trans.c:531
#, c-format
msgid "could not copy tempfile to %s (%s)\n"
msgstr "la copie du fichier temporaire vers %s a échoué (%s)\n"
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "changer de répertoire vers %s a échoué (%s)\n"
#: lib/libalpm/trans.c:549
#, 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:559
#, 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:564
#, c-format
msgid "could not change directory to / (%s)\n"
msgstr "changer de répertoire vers / a échoué (%s)\n"
#: lib/libalpm/trans.c:573
#, c-format
msgid "call to popen failed (%s)"
msgstr "call to popen failed (%s)"
#: lib/libalpm/trans.c:592
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr "call to waitpid failed (%s)\n"
#: lib/libalpm/trans.c:601
#, c-format
msgid "scriptlet failed to execute correctly\n"
msgstr "le scriptlet n'a pas pu être exécuté correctement\n"
#: lib/libalpm/trans.c:610
#, c-format
msgid "could not remove tmpdir %s\n"
msgstr "la suppression du répertoire temporaire %s a échoué\n"
#: lib/libalpm/util.c:202
#, 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:387
#, c-format
msgid "could not open %s: %s\n"
msgstr "l'ouverture de %s: %s a échoué\n"
#: lib/libalpm/util.c:572
#, c-format
msgid "no %s cache exists, creating...\n"
msgstr "le cache %s n'existe pas, création...\n"
#: lib/libalpm/util.c:592
#, 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:642
#, c-format
msgid "md5: %s can't be opened\n"
msgstr "md5: l'ouverture de %s a échoué\n"
#: lib/libalpm/util.c:644
#, c-format
msgid "md5: %s can't be read\n"
msgstr "md5: la lecture de %s a échoué\n"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
"POT-Creation-Date: 2007-12-02 21:40-0600\n"
"POT-Creation-Date: 2008-08-23 10:54-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,658 +16,540 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: lib/libalpm/add.c:88
#, c-format
msgid "replacing older version %s-%s by %s in target list\n"
msgstr ""
#: lib/libalpm/add.c:97
#, 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:168
#, c-format
msgid "conflicting packages were found in the target list\n"
msgstr ""
#: lib/libalpm/add.c:169
#, c-format
msgid "you cannot install two conflicting packages at the same time\n"
msgstr ""
#: lib/libalpm/add.c:172
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:173
#, c-format
msgid "you can replace packages manually using -Rd and -U\n"
msgstr ""
#: lib/libalpm/add.c:365
#, c-format
msgid ""
"directory permissions differ on %s\n"
"filesystem: %o package: %o\n"
msgstr ""
#: lib/libalpm/add.c:392
#, c-format
msgid "extract: symlink %s does not point to dir\n"
msgstr ""
#: lib/libalpm/add.c:399
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr ""
#: lib/libalpm/add.c:454 lib/libalpm/add.c:598 lib/libalpm/util.c:422
#, c-format
msgid "could not extract %s (%s)\n"
msgstr ""
#: lib/libalpm/add.c:505
#, c-format
msgid "could not rename %s (%s)\n"
msgid "could not rename %s to %s (%s)\n"
msgstr ""
#: lib/libalpm/add.c:512 lib/libalpm/add.c:532 lib/libalpm/trans.c:508
#, c-format
msgid "could not copy tempfile to %s (%s)\n"
msgstr ""
#: lib/libalpm/add.c:517 lib/libalpm/remove.c:234
#, c-format
msgid "%s saved as %s\n"
msgstr ""
#: lib/libalpm/add.c:556
#, 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:559
#, c-format
msgid "%s installed as %s\n"
msgstr ""
#: lib/libalpm/add.c:576
#, c-format
msgid "extracting %s as %s.pacnew\n"
msgstr ""
#: lib/libalpm/add.c:711 lib/libalpm/trans.c:529
#, c-format
msgid "could not get current working directory\n"
msgstr ""
#: lib/libalpm/add.c:765
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr ""
#: lib/libalpm/add.c:770
#, c-format
msgid "problem occurred while installing %s\n"
msgstr ""
#: lib/libalpm/add.c:785
#, c-format
msgid "could not update database entry %s-%s\n"
msgstr ""
#: lib/libalpm/add.c:793
#, c-format
msgid "could not add entry '%s' in cache\n"
msgstr ""
#: lib/libalpm/be_files.c:223
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr ""
#: lib/libalpm/be_files.c:275
#, c-format
msgid "loading package data for %s : level=%d\n"
msgstr ""
#: lib/libalpm/be_files.c:292 lib/libalpm/be_files.c:429
#: lib/libalpm/be_files.c:452 lib/libalpm/be_files.c:563
#: lib/libalpm/be_files.c:641 lib/libalpm/be_files.c:669
#: lib/libalpm/package.c:787
#, c-format
msgid "could not open file %s: %s\n"
msgstr ""
#: lib/libalpm/cache.c:62
#, c-format
msgid "adding '%s' to package cache for db '%s'\n"
msgstr ""
#: lib/libalpm/db.c:285
#, c-format
msgid "could not remove database entry %s%s\n"
msgstr ""
#: lib/libalpm/db.c:553
msgid "attempt to re-register the 'local' DB\n"
msgstr ""
#: lib/libalpm/db.c:562 lib/libalpm/db.c:613
msgid "database path is undefined\n"
msgstr ""
#: lib/libalpm/deps.c:173
msgid "dependency cycle detected:\n"
msgstr ""
#: lib/libalpm/deps.c:175
#, c-format
msgid "%s will be removed after its %s dependency\n"
msgid "invalid name for database entry '%s'\n"
msgstr ""
#: lib/libalpm/deps.c:177
#, c-format
msgid "%s will be installed before its %s dependency\n"
msgid "corrupted database entry '%s'\n"
msgstr ""
#: lib/libalpm/deps.c:573
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgid "could not open file %s: %s\n"
msgstr ""
#: lib/libalpm/error.c:43
msgid "out of memory!"
msgstr ""
#: lib/libalpm/error.c:45
msgid "unexpected system error"
msgstr ""
#: lib/libalpm/error.c:47
msgid "insufficient privileges"
msgstr ""
#: lib/libalpm/error.c:49
msgid "could not find or read file"
msgstr ""
#: lib/libalpm/error.c:51
msgid "could not find or read directory"
msgstr ""
#: lib/libalpm/error.c:53
msgid "wrong or NULL argument passed"
msgstr ""
#: lib/libalpm/error.c:56
msgid "library not initialized"
msgstr ""
#: lib/libalpm/error.c:58
msgid "library already initialized"
msgstr ""
#: lib/libalpm/error.c:60
msgid "unable to lock database"
msgstr ""
#: lib/libalpm/error.c:63
msgid "could not open database"
msgstr ""
#: lib/libalpm/error.c:65
msgid "could not create database"
msgstr ""
#: lib/libalpm/error.c:67
msgid "database not initialized"
msgstr ""
#: lib/libalpm/error.c:69
msgid "database already registered"
msgstr ""
#: lib/libalpm/error.c:71
msgid "could not find database"
msgstr ""
#: lib/libalpm/error.c:73
msgid "could not update database"
msgstr ""
#: lib/libalpm/error.c:75
msgid "could not remove database entry"
msgstr ""
#: lib/libalpm/error.c:78
msgid "invalid url for server"
msgstr ""
#: lib/libalpm/error.c:85
msgid "could not set parameter"
msgstr ""
#: lib/libalpm/error.c:88
msgid "transaction already initialized"
msgstr ""
#: lib/libalpm/error.c:90 lib/libalpm/error.c:94
msgid "transaction not initialized"
msgstr ""
#: lib/libalpm/error.c:92
msgid "duplicate target"
msgstr ""
#: lib/libalpm/error.c:96
msgid "transaction not prepared"
msgstr ""
#: lib/libalpm/error.c:98
msgid "transaction aborted"
msgstr ""
#: lib/libalpm/error.c:100
msgid "operation not compatible with the transaction type"
msgstr ""
#: lib/libalpm/error.c:102
msgid "could not commit transaction"
msgstr ""
#: lib/libalpm/error.c:104
msgid "could not download all files"
msgstr ""
#: lib/libalpm/error.c:107
msgid "could not find or read package"
msgstr ""
#: lib/libalpm/error.c:109
msgid "invalid or corrupted package"
msgstr ""
#: lib/libalpm/error.c:111
msgid "cannot open package file"
msgstr ""
#: lib/libalpm/error.c:113
msgid "cannot load package data"
msgstr ""
#: lib/libalpm/error.c:115
msgid "package already installed"
msgstr ""
#: lib/libalpm/error.c:117
msgid "package not installed or lesser version"
msgstr ""
#: lib/libalpm/error.c:119
msgid "cannot remove all files for package"
msgstr ""
#: lib/libalpm/error.c:121
msgid "package name is not valid"
msgstr ""
#: lib/libalpm/error.c:123
msgid "corrupted package"
msgstr ""
#: lib/libalpm/error.c:125
msgid "no such repository"
msgstr ""
#: lib/libalpm/error.c:128
msgid "corrupted delta"
msgstr ""
#: lib/libalpm/error.c:130
msgid "delta patch failed"
msgstr ""
#: lib/libalpm/error.c:133
msgid "group not found"
msgstr ""
#: lib/libalpm/error.c:136
msgid "could not satisfy dependencies"
msgstr ""
#: lib/libalpm/error.c:138
msgid "conflicting dependencies"
msgstr ""
#: lib/libalpm/error.c:140
msgid "conflicting files"
msgstr ""
#: lib/libalpm/error.c:143
msgid "user aborted the operation"
msgstr ""
#: lib/libalpm/error.c:145
msgid "internal error"
msgstr ""
#: lib/libalpm/error.c:147
msgid "libarchive error"
msgstr ""
#: lib/libalpm/error.c:150
msgid "not confirmed"
msgstr ""
#: lib/libalpm/error.c:152
msgid "invalid regular expression"
msgstr ""
#: lib/libalpm/error.c:155
msgid "connection to remote host failed"
msgstr ""
#: lib/libalpm/error.c:158
msgid "unexpected error"
msgstr ""
#: lib/libalpm/package.c:124
#, c-format
msgid "could not get md5sum for package %s-%s\n"
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr ""
#: lib/libalpm/package.c:133
#, c-format
msgid "md5sums do not match for package %s-%s\n"
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr ""
#: lib/libalpm/package.c:737
#, c-format
msgid "%s: forcing upgrade to version %s\n"
msgstr ""
#: lib/libalpm/package.c:742
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr ""
#: lib/libalpm/package.c:750
#, c-format
msgid "%s-%s: delaying upgrade of package (%s)\n"
msgstr ""
#: lib/libalpm/package.c:931
#, c-format
msgid "could not parse package description file in %s\n"
msgstr ""
#: lib/libalpm/package.c:936
#, c-format
msgid "missing package name in %s\n"
msgstr ""
#: lib/libalpm/package.c:940
#, c-format
msgid "missing package version in %s\n"
msgstr ""
#: lib/libalpm/package.c:970
#, c-format
msgid "could not remove tempfile %s\n"
msgstr ""
#: lib/libalpm/package.c:985 lib/libalpm/package.c:998
#, c-format
msgid "error while reading package %s: %s\n"
msgstr ""
#: lib/libalpm/package.c:1005
#, c-format
msgid "missing package metadata in %s\n"
msgstr ""
#: lib/libalpm/package.c:1012
#, c-format
msgid "missing package filelist in %s, generating one\n"
msgid "attempt to re-register the 'local' DB\n"
msgstr ""
#: lib/libalpm/remove.c:121
#, c-format
msgid "could not find %s in database -- skipping\n"
msgid "database path is undefined\n"
msgstr ""
#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:243
#, c-format
msgid "cannot remove file '%s': %s\n"
msgid "dependency cycle detected:\n"
msgstr ""
#: lib/libalpm/remove.c:337
#, c-format
msgid "could not remove database entry %s-%s\n"
msgid "%s will be removed after its %s dependency\n"
msgstr ""
#: lib/libalpm/remove.c:342
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgid "%s will be installed before its %s dependency\n"
msgstr ""
#: lib/libalpm/server.c:56
#, c-format
msgid "url '%s' is invalid, ignoring\n"
msgid "provider package was selected (%s provides %s)\n"
msgstr ""
#: lib/libalpm/server.c:60
msgid "url scheme not specified, assuming http\n"
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr ""
#: lib/libalpm/server.c:241
#, 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:245
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr ""
#: lib/libalpm/server.c:275
#, c-format
msgid "cannot resume download, starting over\n"
msgstr ""
#: lib/libalpm/server.c:288
#, c-format
msgid "cannot write to file '%s'\n"
msgstr ""
#: lib/libalpm/server.c:307
#, c-format
msgid "error downloading '%s': %s\n"
msgstr ""
#: lib/libalpm/server.c:319
#, c-format
msgid "error writing to file '%s': %s\n"
msgstr ""
#: lib/libalpm/server.c:387
#, c-format
msgid "could not chdir to %s\n"
msgstr ""
#: lib/libalpm/server.c:394
#, c-format
msgid "running XferCommand: fork failed!\n"
msgstr ""
#: lib/libalpm/server.c:445
msgid "URL does not contain a file for download\n"
msgstr ""
#: lib/libalpm/server.c:458
#, c-format
msgid "failed to download %s\n"
msgstr ""
#: lib/libalpm/sync.c:135
#, 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 ""
#, 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 "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 "could not commit transaction"
msgstr ""
#, c-format
msgid "could not download all files"
msgstr ""
#, c-format
msgid "could not find or read package"
msgstr ""
#, c-format
msgid "invalid or corrupted package"
msgstr ""
#, c-format
msgid "cannot open package file"
msgstr ""
#, c-format
msgid "cannot load package data"
msgstr ""
#, c-format
msgid "package not installed or lesser version"
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 "group not found"
msgstr ""
#, c-format
msgid "could not satisfy dependencies"
msgstr ""
#, c-format
msgid "conflicting dependencies"
msgstr ""
#, c-format
msgid "conflicting files"
msgstr ""
#, c-format
msgid "user aborted the operation"
msgstr ""
#, c-format
msgid "internal error"
msgstr ""
#, c-format
msgid "not confirmed"
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 ""
#, c-format
msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
msgstr ""
#: lib/libalpm/sync.c:250
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr ""
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr ""
#: lib/libalpm/sync.c:320
#, c-format
msgid "repository '%s' not found\n"
msgstr ""
#: lib/libalpm/sync.c:354
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr ""
#: lib/libalpm/sync.c:358
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr ""
#: lib/libalpm/sync.c:613 lib/libalpm/sync.c:618
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr ""
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr ""
#: lib/libalpm/sync.c:628
#, 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:825
#, c-format
msgid "command: %s\n"
msgstr ""
#: lib/libalpm/sync.c:888 lib/libalpm/sync.c:896
#, c-format
msgid "can't get md5 checksum for file %s\n"
msgstr ""
#: lib/libalpm/sync.c:910
#, c-format
msgid "file %s was corrupted (bad MD5 checksum)\n"
msgstr ""
#: lib/libalpm/sync.c:1056
#, c-format
msgid "failed to retrieve some files from %s\n"
msgstr ""
#: lib/libalpm/sync.c:1137
#, c-format
msgid "could not create removal transaction\n"
msgstr ""
#: lib/libalpm/sync.c:1143
#, c-format
msgid "could not initialize the removal transaction\n"
msgstr ""
#: lib/libalpm/sync.c:1165
#, c-format
msgid "could not prepare removal transaction\n"
msgstr ""
#: lib/libalpm/sync.c:1171
#, c-format
msgid "could not commit removal transaction\n"
msgstr ""
#: lib/libalpm/sync.c:1182
#, c-format
msgid "could not create transaction\n"
msgstr ""
#: lib/libalpm/sync.c:1187
#, c-format
msgid "could not initialize transaction\n"
msgstr ""
#: lib/libalpm/sync.c:1214
#, c-format
msgid "could not prepare transaction\n"
msgstr ""
#: lib/libalpm/sync.c:1219
#, c-format
msgid "could not commit transaction\n"
msgstr ""
#: lib/libalpm/trans.c:214
#, c-format
msgid "could not remove lock file %s\n"
msgstr ""
#: lib/libalpm/trans.c:483
#, c-format
msgid "No /bin/sh in root dir (%s), aborting scriptlet\n"
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:536
#, c-format
msgid "could not copy tempfile to %s (%s)\n"
msgstr ""
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr ""
#: lib/libalpm/trans.c:554
#, c-format
msgid "could not fork a new process (%s)\n"
msgstr ""
#: lib/libalpm/trans.c:564
#, c-format
msgid "could not change the root directory (%s)\n"
msgstr ""
#: lib/libalpm/trans.c:569
#, c-format
msgid "could not change directory to / (%s)\n"
msgstr ""
#: lib/libalpm/trans.c:578
#, c-format
msgid "call to popen failed (%s)"
msgstr ""
#: lib/libalpm/trans.c:597
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr ""
#: lib/libalpm/trans.c:606
#, c-format
msgid "scriptlet failed to execute correctly\n"
msgstr ""
#: lib/libalpm/trans.c:615
#, c-format
msgid "could not remove tmpdir %s\n"
msgstr ""
#: lib/libalpm/util.c:204
#, c-format
msgid "failed to make path '%s' : %s\n"
msgstr ""
#: lib/libalpm/util.c:389
#, c-format
msgid "could not open %s: %s\n"
msgstr ""
#: lib/libalpm/util.c:573
#, c-format
msgid "no %s cache exists, creating...\n"
msgstr ""
#: lib/libalpm/util.c:593
#, c-format
msgid "couldn't create package cache, using /tmp instead\n"
msgstr ""
#: lib/libalpm/util.c:643
#, c-format
msgid "md5: %s can't be opened\n"
msgstr ""
#: lib/libalpm/util.c:645
#, c-format
msgid "md5: %s can't be read\n"
msgstr ""

567
lib/libalpm/po/pl.po Normal file
View File

@@ -0,0 +1,567 @@
# 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.
# #
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-08-23 10:54-0500\n"
"PO-Revision-Date: 2009-01-03 16:50+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: symlink %s does not point to dir\n"
msgstr "rozpakowywanie: dowiązanie symboliczne %s nie kieruje do katalogu\n"
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr "rozpakowywanie: nie nadpisuję katalogu plikiem %s\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 entry %s%s\n"
msgstr "nie udało się usunąć wpisu %s%s z bazy danych\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 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 "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 downloading '%s': %s\n"
msgstr "błąd podczas pobierania '%s': %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 "could not chdir to %s\n"
msgstr "nie udało się zmienić katalogu na / %s\n"
#, c-format
msgid "running XferCommand: fork failed!\n"
msgstr "uruchamianie XferCommand: klonowanie nieudane!\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 "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 "could not commit transaction"
msgstr "nie udało się wykonać tranzakcji"
#, c-format
msgid "could not download all files"
msgstr "nie udało się pobrać wszystkich plików"
#, c-format
msgid "could not find or read package"
msgstr "nie udało się znaleźć bądź odczytać pakietu"
#, 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 load package data"
msgstr "nie udało się załadować danych pakietu"
#, c-format
msgid "package not installed or lesser version"
msgstr "pakiet nie zainstalowany lub zainstalowany w niższej wersji"
#, 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 "group not found"
msgstr "grupa nie została odnaleziona"
#, 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 "user aborted the operation"
msgstr "użytkownik zaniechał operacji"
#, c-format
msgid "internal error"
msgstr "błąd wewnętrzny"
#, c-format
msgid "not confirmed"
msgstr "nie potwierdzono"
#, 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-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
msgstr ""
"%s-%s: ignorowanie aktualizowania pakietu (do zastąpienia przez %s-%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 "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: ignorowanie aktualizacji pakietu (%s => %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 "command: %s\n"
msgstr "komenda: %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 initialize the removal transaction\n"
msgstr "nie udało się zainicjować tranzakcji usuwania\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 create transaction\n"
msgstr "nie udało się stworzyć tranzakcji\n"
#, c-format
msgid "could not initialize transaction\n"
msgstr "nie udało się zainicjować tranzakcji\n"
#, c-format
msgid "could not prepare transaction\n"
msgstr "nie udało się przygotować tranzakcji\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 "No /bin/sh in parent environment, aborting scriptlet\n"
msgstr "Brak /bin/sh w środowisku, przerywanie wykonywania skryptu\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 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 "scriptlet failed to execute correctly\n"
msgstr "skrypt nie mógł zostać poprawnie wykonany\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 "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"

View File

@@ -1,745 +0,0 @@
# 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.
#
msgid ""
msgstr ""
"Project-Id-Version: Pacman package manager 3.0.1\n"
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
"POT-Creation-Date: 2007-12-02 21:40-0600\n"
"PO-Revision-Date: 2007-04-12 04:23+0200\n"
"Last-Translator: Mateusz Jędrasik <m.jedrasik@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"
#: lib/libalpm/add.c:88
#, fuzzy, 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"
#: lib/libalpm/add.c:97
#, fuzzy, c-format
msgid "newer version %s-%s is in the target list -- skipping\n"
msgstr "nowsza wersja %s-%s znajduje się w liście celów -- pomijam"
#: lib/libalpm/add.c:168
msgid "conflicting packages were found in the target list\n"
msgstr ""
#: lib/libalpm/add.c:169
msgid "you cannot install two conflicting packages at the same time\n"
msgstr ""
#: lib/libalpm/add.c:172
#, fuzzy
msgid "replacing packages with -A and -U is not supported yet\n"
msgstr "zastępowanie pakietów z -A i -U nie jest jeszcze wspierane"
#: lib/libalpm/add.c:173
msgid "you can replace packages manually using -Rd and -U\n"
msgstr ""
#: lib/libalpm/add.c:365
#, c-format
msgid ""
"directory permissions differ on %s\n"
"filesystem: %o package: %o\n"
msgstr ""
#: lib/libalpm/add.c:392
#, c-format
msgid "extract: symlink %s does not point to dir\n"
msgstr ""
#: lib/libalpm/add.c:399
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr ""
#: lib/libalpm/add.c:454 lib/libalpm/add.c:598 lib/libalpm/util.c:422
#, fuzzy, c-format
msgid "could not extract %s (%s)\n"
msgstr "nie udało się rozpakować %s (%s)"
#: lib/libalpm/add.c:505
#, fuzzy, c-format
msgid "could not rename %s (%s)\n"
msgstr "nie udało się zmienić nazwy %s (%s)"
#: lib/libalpm/add.c:512 lib/libalpm/add.c:532 lib/libalpm/trans.c:508
#, fuzzy, c-format
msgid "could not copy tempfile to %s (%s)\n"
msgstr "nie udało się skopiować pliku tymczasowego do %s (%s)"
#: lib/libalpm/add.c:517 lib/libalpm/remove.c:234
#, fuzzy, c-format
msgid "%s saved as %s\n"
msgstr "%s zachowane jako %s"
#: lib/libalpm/add.c:556
#, fuzzy, c-format
msgid "could not install %s as %s: %s\n"
msgstr "nie udało się zainstalować %s jako %s: %s"
#: lib/libalpm/add.c:559
#, fuzzy, c-format
msgid "%s installed as %s\n"
msgstr "%s zainstalowano jako %s"
#: lib/libalpm/add.c:576
#, fuzzy, c-format
msgid "extracting %s as %s.pacnew\n"
msgstr "rozpakowywanie %s jako %s.pacnew"
#: lib/libalpm/add.c:711 lib/libalpm/trans.c:529
#, fuzzy
msgid "could not get current working directory\n"
msgstr "nie można znaleźć obecnego katalogu"
#: lib/libalpm/add.c:765
#, fuzzy, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "wystąpiły błędy podczas %s %s"
#: lib/libalpm/add.c:770
#, fuzzy, c-format
msgid "problem occurred while installing %s\n"
msgstr "wystąpiły błędy podczas %s %s"
#: lib/libalpm/add.c:785
#, fuzzy, c-format
msgid "could not update database entry %s-%s\n"
msgstr "nie udało się zaktualizować pozycji bazy danych %s-%s"
#: lib/libalpm/add.c:793
#, fuzzy, c-format
msgid "could not add entry '%s' in cache\n"
msgstr "nie udało się dodać pozycji '%s' w pliku podręcznym"
#: lib/libalpm/be_files.c:223
#, fuzzy, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "nieprawidłowa nazwa dla wpisu bazy danych '%s'"
#: lib/libalpm/be_files.c:275
#, fuzzy, c-format
msgid "loading package data for %s : level=%d\n"
msgstr "ładowanie danych pakietu dla %s : poziom=%d"
#: lib/libalpm/be_files.c:292 lib/libalpm/be_files.c:429
#: lib/libalpm/be_files.c:452 lib/libalpm/be_files.c:563
#: lib/libalpm/be_files.c:641 lib/libalpm/be_files.c:669
#: lib/libalpm/package.c:787
#, fuzzy, c-format
msgid "could not open file %s: %s\n"
msgstr "nie udało się otworzyć pliku %s: %s"
#: lib/libalpm/cache.c:62
#, fuzzy, c-format
msgid "adding '%s' to package cache for db '%s'\n"
msgstr "dodawanie '%s' do pamięci podręcznej pakietów dla bd '%s'"
#: lib/libalpm/db.c:285
#, fuzzy, c-format
msgid "could not remove database entry %s%s\n"
msgstr "nie udało się usunąć wpisu %s%s z bazy danych"
#: lib/libalpm/db.c:553
#, fuzzy
msgid "attempt to re-register the 'local' DB\n"
msgstr "próba ponownej rejestracji 'lokalnej' BD"
#: lib/libalpm/db.c:562 lib/libalpm/db.c:613
#, fuzzy
msgid "database path is undefined\n"
msgstr "baza danych nie została zainicjowana"
#: lib/libalpm/deps.c:173
#, fuzzy
msgid "dependency cycle detected:\n"
msgstr "wykryto cykl zależności: %s"
#: lib/libalpm/deps.c:175
#, c-format
msgid "%s will be removed after its %s dependency\n"
msgstr ""
#: lib/libalpm/deps.c:177
#, c-format
msgid "%s will be installed before its %s dependency\n"
msgstr ""
#: lib/libalpm/deps.c:573
#, fuzzy, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "nie udało się rozwiązać zależności dla \"%s\""
#: lib/libalpm/error.c:43
msgid "out of memory!"
msgstr "brak pamięci!"
#: lib/libalpm/error.c:45
msgid "unexpected system error"
msgstr "niespodziewany błąd systemu"
#: lib/libalpm/error.c:47
msgid "insufficient privileges"
msgstr "niewystarczające przywileje"
#: lib/libalpm/error.c:49
msgid "could not find or read file"
msgstr "nie udało się znaleźć bądź odczytać pliku"
#: lib/libalpm/error.c:51
#, fuzzy
msgid "could not find or read directory"
msgstr "nie udało się znaleźć bądź odczytać pliku"
#: lib/libalpm/error.c:53
msgid "wrong or NULL argument passed"
msgstr "błędny bądź ZEROWY argument dany"
#: lib/libalpm/error.c:56
msgid "library not initialized"
msgstr "biblioteka nie została zainicjowana"
#: lib/libalpm/error.c:58
msgid "library already initialized"
msgstr "biblioteka już zainicjowana"
#: lib/libalpm/error.c:60
msgid "unable to lock database"
msgstr "nie udało się zablokować bazy danych"
#: lib/libalpm/error.c:63
msgid "could not open database"
msgstr "nie udało się otworzyć bazy danych"
#: lib/libalpm/error.c:65
msgid "could not create database"
msgstr "nie udało się stworzyć bazy danych"
#: lib/libalpm/error.c:67
msgid "database not initialized"
msgstr "baza danych nie została zainicjowana"
#: lib/libalpm/error.c:69
msgid "database already registered"
msgstr "baza danych już zarejestrowana"
#: lib/libalpm/error.c:71
msgid "could not find database"
msgstr "nie udało się odnaleźc bazy danych"
#: lib/libalpm/error.c:73
msgid "could not update database"
msgstr "nie udało się zaktualizować bazy danych"
#: lib/libalpm/error.c:75
msgid "could not remove database entry"
msgstr "nie udało się usunąć wpisu do bazy danych"
#: lib/libalpm/error.c:78
msgid "invalid url for server"
msgstr "nieprawidłowy url dla serwera"
#: lib/libalpm/error.c:85
msgid "could not set parameter"
msgstr "nie udało się ustawić parametru"
#: lib/libalpm/error.c:88
msgid "transaction already initialized"
msgstr "tranzakcja już zainicjowana"
#: lib/libalpm/error.c:90 lib/libalpm/error.c:94
msgid "transaction not initialized"
msgstr "tranzakcja nie została zainicjowana"
#: lib/libalpm/error.c:92
msgid "duplicate target"
msgstr "duplikat celu"
#: lib/libalpm/error.c:96
msgid "transaction not prepared"
msgstr "tranzakcja nie została przygotowana"
#: lib/libalpm/error.c:98
msgid "transaction aborted"
msgstr "tranzakcja zaniechana"
#: lib/libalpm/error.c:100
msgid "operation not compatible with the transaction type"
msgstr "operacja niekompatybilna z typem tranzakcji"
#: lib/libalpm/error.c:102
msgid "could not commit transaction"
msgstr "nie udało się wykonać tranzakcji"
#: lib/libalpm/error.c:104
msgid "could not download all files"
msgstr "nie udało się pobrać wszystkich plików"
#: lib/libalpm/error.c:107
msgid "could not find or read package"
msgstr "nie udało się znaleźć bądź odczytać pakietu"
#: lib/libalpm/error.c:109
msgid "invalid or corrupted package"
msgstr "nieprawidłowy bądź skorumpowany pakiet"
#: lib/libalpm/error.c:111
msgid "cannot open package file"
msgstr "nie udało się otworzyć pliku pakietu"
#: lib/libalpm/error.c:113
msgid "cannot load package data"
msgstr "nie udało się załadować danych pakietu"
#: lib/libalpm/error.c:115
msgid "package already installed"
msgstr "pakiet już zainstalowany"
#: lib/libalpm/error.c:117
msgid "package not installed or lesser version"
msgstr "pakiet nie zainstalowany lub zainstalowany w niższej wersji"
#: lib/libalpm/error.c:119
msgid "cannot remove all files for package"
msgstr "nie udało się usunąć wszystkich plików pakietu"
#: lib/libalpm/error.c:121
msgid "package name is not valid"
msgstr "nieprawidłowa nazwa pakietu"
#: lib/libalpm/error.c:123
msgid "corrupted package"
msgstr "skorumpowany pakiet"
#: lib/libalpm/error.c:125
msgid "no such repository"
msgstr "nie ma takiego repozytorium"
#: lib/libalpm/error.c:128
#, fuzzy
msgid "corrupted delta"
msgstr "skorumpowany pakiet"
#: lib/libalpm/error.c:130
msgid "delta patch failed"
msgstr ""
#: lib/libalpm/error.c:133
msgid "group not found"
msgstr "grupa nie została odnaleziona"
#: lib/libalpm/error.c:136
msgid "could not satisfy dependencies"
msgstr "nie udało się usatysfakcjonować zależności"
#: lib/libalpm/error.c:138
msgid "conflicting dependencies"
msgstr "konfliktujące zależności"
#: lib/libalpm/error.c:140
msgid "conflicting files"
msgstr "konfliktujące pliki"
#: lib/libalpm/error.c:143
msgid "user aborted the operation"
msgstr "użytkownik zaniechał operacji"
#: lib/libalpm/error.c:145
msgid "internal error"
msgstr "błąd wewnętrzny"
#: lib/libalpm/error.c:147
msgid "libarchive error"
msgstr "błąd libarchive"
#: lib/libalpm/error.c:150
msgid "not confirmed"
msgstr "nie potwierdzono"
#: lib/libalpm/error.c:152
msgid "invalid regular expression"
msgstr "nieprawidłowe wyrażenie regularne"
#: lib/libalpm/error.c:155
msgid "connection to remote host failed"
msgstr "połączenie ze zdalnym hostem nieudane"
#: lib/libalpm/error.c:158
msgid "unexpected error"
msgstr "niespodziewany błąd"
#: lib/libalpm/package.c:124
#, fuzzy, c-format
msgid "could not get md5sum for package %s-%s\n"
msgstr "nie udało się otrzymać sumy md5 dla pakietu %s-%s"
#: lib/libalpm/package.c:133
#, fuzzy, c-format
msgid "md5sums do not match for package %s-%s\n"
msgstr "sumy kontrolne md5 dla pakietu %s-%s nie zgadzają się"
#: lib/libalpm/package.c:737
#, fuzzy, c-format
msgid "%s: forcing upgrade to version %s\n"
msgstr "%s: wymuszanie aktualizacji do wersji %s"
#: lib/libalpm/package.c:742
#, fuzzy, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr "%s: local (%s) jest nowsze niż %s (%s)"
#: lib/libalpm/package.c:750
#, fuzzy, c-format
msgid "%s-%s: delaying upgrade of package (%s)\n"
msgstr "%s-%s: opóźnianie aktualizacji pakietu (%s)"
#: lib/libalpm/package.c:931
#, fuzzy, c-format
msgid "could not parse package description file in %s\n"
msgstr "nie udało się przeczytać pliku opisu"
#: lib/libalpm/package.c:936
#, fuzzy, c-format
msgid "missing package name in %s\n"
msgstr "brak nazwy pakietu w %s"
#: lib/libalpm/package.c:940
#, fuzzy, c-format
msgid "missing package version in %s\n"
msgstr "brak wersji pakietu w %s"
#: lib/libalpm/package.c:970
#, fuzzy, c-format
msgid "could not remove tempfile %s\n"
msgstr "nie udało się usunąć pliku tymczasowego %s"
#: lib/libalpm/package.c:985 lib/libalpm/package.c:998
#, fuzzy, c-format
msgid "error while reading package %s: %s\n"
msgstr "błąd odczytywania pakietu: %s"
#: lib/libalpm/package.c:1005
#, fuzzy, c-format
msgid "missing package metadata in %s\n"
msgstr "brak metadanych pakietu"
#: lib/libalpm/package.c:1012
#, fuzzy, c-format
msgid "missing package filelist in %s, generating one\n"
msgstr "brak listy plików pakietu w %s, generowanie"
#: lib/libalpm/remove.c:121
#, fuzzy, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "nie udało się odnaleźć %s w bazie danych -- pomijanie"
#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:243
#, fuzzy, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "nie udało się usunąć pliku '%s': %s"
#: lib/libalpm/remove.c:337
#, fuzzy, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "nie udało się usunąć wpisu %s-%s z bazy danych"
#: lib/libalpm/remove.c:342
#, fuzzy, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "nie udało się usunąć wpisu '%s' z pamięci podręcznej"
#: lib/libalpm/server.c:56
#, c-format
msgid "url '%s' is invalid, ignoring\n"
msgstr ""
#: lib/libalpm/server.c:60
msgid "url scheme not specified, assuming http\n"
msgstr ""
#: lib/libalpm/server.c:241
msgid "disk"
msgstr ""
#: lib/libalpm/server.c:245
#, fuzzy, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "nie udało się pobrać niektórych plików z %s\n"
#: lib/libalpm/server.c:275
msgid "cannot resume download, starting over\n"
msgstr ""
#: lib/libalpm/server.c:288
#, fuzzy, c-format
msgid "cannot write to file '%s'\n"
msgstr "nie udało się usunąć pliku '%s': %s"
#: lib/libalpm/server.c:307
#, fuzzy, c-format
msgid "error downloading '%s': %s\n"
msgstr "błąd odczytywania pakietu: %s"
#: lib/libalpm/server.c:319
#, fuzzy, c-format
msgid "error writing to file '%s': %s\n"
msgstr "nie udało się usunąć pliku '%s': %s"
#: lib/libalpm/server.c:387
#, fuzzy, c-format
msgid "could not chdir to %s\n"
msgstr "nie udało się zmienić katalogu na / (%s)"
#: lib/libalpm/server.c:394
msgid "running XferCommand: fork failed!\n"
msgstr ""
#: lib/libalpm/server.c:445
msgid "URL does not contain a file for download\n"
msgstr ""
#: lib/libalpm/server.c:458
#, fuzzy, c-format
msgid "failed to download %s\n"
msgstr "nie udało się pobrać wszystkich plików"
#: lib/libalpm/sync.c:135
#, fuzzy, c-format
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)"
#: lib/libalpm/sync.c:250
#, fuzzy, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s-%s: ignorowanie aktualizacji pakietu (%s)"
#: lib/libalpm/sync.c:320
#, fuzzy, c-format
msgid "repository '%s' not found\n"
msgstr "repozytorium '%s' nie zostało znalezione"
#: lib/libalpm/sync.c:354
#, fuzzy, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s jest w najnowszej wersji -- pomijanie"
#: lib/libalpm/sync.c:358
#, fuzzy, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s jest w najnowszej wersji -- pomijanie"
#: lib/libalpm/sync.c:613 lib/libalpm/sync.c:618
#, fuzzy
msgid "unresolvable package conflicts detected\n"
msgstr "odkryto nierozwiązywalne konflikty pakietów"
#: lib/libalpm/sync.c:628
#, fuzzy, c-format
msgid "malloc failure: could not allocate %zd bytes\n"
msgstr "błąd malloc: nie udało się zaalokować %d bajtów"
#: lib/libalpm/sync.c:825
#, c-format
msgid "command: %s\n"
msgstr ""
#: lib/libalpm/sync.c:888 lib/libalpm/sync.c:896
#, fuzzy, c-format
msgid "can't get md5 checksum for file %s\n"
msgstr "nie udało się otrzymać sum kontrolnych md5 lub sha1 dla pakietu %s\n"
#: lib/libalpm/sync.c:910
#, fuzzy, c-format
msgid "file %s was corrupted (bad MD5 checksum)\n"
msgstr "archiwum %s było skorumpowane (błąd sumy kontrolnej MD5 lub SHA1)\n"
#: lib/libalpm/sync.c:1056
#, c-format
msgid "failed to retrieve some files from %s\n"
msgstr "nie udało się pobrać niektórych plików z %s\n"
#: lib/libalpm/sync.c:1137
#, fuzzy
msgid "could not create removal transaction\n"
msgstr "nie udało się utworzyć tranzakcji usuwania"
#: lib/libalpm/sync.c:1143
#, fuzzy
msgid "could not initialize the removal transaction\n"
msgstr "nie udało się zainicjować tranzakcji usuwania"
#: lib/libalpm/sync.c:1165
#, fuzzy
msgid "could not prepare removal transaction\n"
msgstr "nie udało się przygotować tranzakcji usuwania"
#: lib/libalpm/sync.c:1171
#, fuzzy
msgid "could not commit removal transaction\n"
msgstr "nie udało się wykonać tranzakcji usuwania"
#: lib/libalpm/sync.c:1182
#, fuzzy
msgid "could not create transaction\n"
msgstr "nie udało się stworzyć tranzakcji"
#: lib/libalpm/sync.c:1187
#, fuzzy
msgid "could not initialize transaction\n"
msgstr "nie udało się zainicjować tranzakcji"
#: lib/libalpm/sync.c:1214
#, fuzzy
msgid "could not prepare transaction\n"
msgstr "nie udało się przygotować tranzakcji"
#: lib/libalpm/sync.c:1219
#, fuzzy
msgid "could not commit transaction\n"
msgstr "nie udało się wykonać tranzakcji"
#: lib/libalpm/trans.c:214
#, fuzzy, c-format
msgid "could not remove lock file %s\n"
msgstr "nie udało się usunąć pliku blokującego %s"
#: lib/libalpm/trans.c:483
#, c-format
msgid "No /bin/sh in root dir (%s), aborting scriptlet\n"
msgstr ""
#: lib/libalpm/trans.c:494
#, fuzzy
msgid "could not create temp directory\n"
msgstr "nie udało się stworzyć katalogu tymczasowego"
#: lib/libalpm/trans.c:536
#, fuzzy, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "nie udało się zmienić katalogu na %s (%s)"
#: lib/libalpm/trans.c:554
#, fuzzy, c-format
msgid "could not fork a new process (%s)\n"
msgstr "nie udało się odwidlić nowego procesu (%s)"
#: lib/libalpm/trans.c:564
#, fuzzy, c-format
msgid "could not change the root directory (%s)\n"
msgstr "nie udało się zmienić katalogu głównego (%s)"
#: lib/libalpm/trans.c:569
#, fuzzy, c-format
msgid "could not change directory to / (%s)\n"
msgstr "nie udało się zmienić katalogu na / (%s)"
#: lib/libalpm/trans.c:578
#, fuzzy, c-format
msgid "call to popen failed (%s)"
msgstr "zawołanie do waitpid nieudane (%s)"
#: lib/libalpm/trans.c:597
#, fuzzy, c-format
msgid "call to waitpid failed (%s)\n"
msgstr "zawołanie do waitpid nieudane (%s)"
#: lib/libalpm/trans.c:606
msgid "scriptlet failed to execute correctly\n"
msgstr ""
#: lib/libalpm/trans.c:615
#, fuzzy, c-format
msgid "could not remove tmpdir %s\n"
msgstr "nie udało się usunąć katalogu tymczasowego %s"
#: lib/libalpm/util.c:204
#, fuzzy, c-format
msgid "failed to make path '%s' : %s\n"
msgstr "nie udało się stworzyć ścieżki '%s' : %s"
#: lib/libalpm/util.c:389
#, c-format
msgid "could not open %s: %s\n"
msgstr "nie udało się otworzyć %s: %s\n"
#: lib/libalpm/util.c:573
#, c-format
msgid "no %s cache exists, creating...\n"
msgstr "brak pamięci podręcznej dla %s, tworzenie...\n"
#: lib/libalpm/util.c:593
#, fuzzy
msgid "couldn't create package cache, using /tmp instead\n"
msgstr ""
"nie udało się stworzenie pamięci podręcznej pakietu, używanie /tmp w zamian\n"
#: lib/libalpm/util.c:643
#, fuzzy, c-format
msgid "md5: %s can't be opened\n"
msgstr "%s nie może być otwarte\n"
#: lib/libalpm/util.c:645
#, fuzzy, c-format
msgid "md5: %s can't be read\n"
msgstr "%s nie może być otwarte\n"
#~ msgid "please remove '%s' first, using -Rd"
#~ msgstr "proszę usunąć pierw '%s', korzystając z -Rd"
#~ msgid "could not extract %s (%s)"
#~ msgstr "nie udało się rozpakować %s (%s)"
#~ msgid "could not update provision '%s' from '%s'"
#~ msgstr "nie udało się zaktualizować zasobu '%s' z '%s'"
#, fuzzy
#~ msgid "%s: description file is missing"
#~ msgstr "%s: błąd składni w pliku opisu linia %d"
#~ msgid "malloc failed: could not allocate %d bytes"
#~ msgstr "błąd malloc: nie udało się zaalokować %d bajtów"
#~ msgid ""
#~ "cannot resolve dependencies for \"%s\" (\"%s\" is not in the package set)"
#~ msgstr ""
#~ "nie udało się rozwiązać zależności dla \"%s\" (\"%s\" nie znajduje się w "
#~ "zbiorze pakietów)"
#~ msgid "cannot canonicalize specified root path '%s'"
#~ msgstr "nie udało się skanonizować podanej ścieżki docelowej '%s'"
#~ msgid "could not get sha1sum for package %s-%s"
#~ msgstr "nie udało się otrzymać sumy sha1 dla pakietu %s-%s"
#~ msgid "sha1sums do not match for package %s-%s"
#~ msgstr "sumy kontrolne sha1 dla pakietu %s-%s nie zgadzają się"
#~ msgid "cannot remove file %s: %s"
#~ msgstr "nie udało się usunąć pliku %s: %s"
#~ msgid "sha1: %s can't be opened\n"
#~ msgstr "sha1: %s nie może zostać otwarty\n"
#~ msgid "archive %s is corrupted (bad MD5 or SHA1 checksum)\n"
#~ msgstr "archiwum %s jest skorumpowane (błąd sumy kontrolnej MD5 lub SHA1)\n"
#~ msgid "could not update requiredby for database entry %s-%s"
#~ msgstr ""
#~ "nie udało się zaktualizować requiredby dla wpisu %s-%s w bazie danych"
#~ msgid "could not update new database entry %s-%s"
#~ msgstr "nie udało się zaktualizować nowego wpisu %s-%s w bazie danych"
#~ msgid "could not update 'requiredby' database entry %s-%s"
#~ msgstr ""
#~ "nie udało się zaktualizować wpisu do bazy danych 'requiredby' dla %s-%s"

File diff suppressed because it is too large Load Diff

563
lib/libalpm/po/ru.po Normal file
View File

@@ -0,0 +1,563 @@
# Russian 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.
# <4rayven@gmail.com>, 2007. <serg.partizan@gmail.com> 2008
#
msgid ""
msgstr ""
"Project-Id-Version: Pacman package manager 3.0.0\n"
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
"POT-Creation-Date: 2008-08-23 10:54-0500\n"
"PO-Revision-Date: 2009-01-03 15:55+0300\n"
"Last-Translator: Sergey Tereschenko <serg.partizan@gmail.com>\n"
"Language-Team: Russian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#, 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: symlink %s does not point to dir\n"
msgstr "извлечение: символическая ссылка %s не указывает на директорию\n"
#, c-format
msgid "extract: not overwriting dir with file %s\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 entry %s%s\n"
msgstr "не могу удалить из базы данных запись %s%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 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 "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 downloading '%s': %s\n"
msgstr "ошибка загрузки '%s': %s\n"
#, c-format
msgid "error writing to file '%s': %s\n"
msgstr "не могу записать в файл '%s': %s\n"
#, c-format
msgid "could not chdir to %s\n"
msgstr "не могу изменить директорию на %s\n"
#, c-format
msgid "running XferCommand: fork failed!\n"
msgstr "запуск XferCommand: неудача\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 "библиотека не инициализирована"
#, 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 "неверный url"
#, 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 "could not commit transaction"
msgstr "не могу совершить запрос"
#, c-format
msgid "could not download all files"
msgstr "не могу загрузить все файлы"
#, c-format
msgid "could not find or read package"
msgstr "не удается найти или прочитать пакет"
#, c-format
msgid "invalid or corrupted package"
msgstr "пакет неправильный или поврежден"
#, c-format
msgid "cannot open package file"
msgstr "не удается открыть файл пакета"
#, c-format
msgid "cannot load package data"
msgstr "не удается загрузить данные пакета"
#, c-format
msgid "package not installed or lesser version"
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 "group not found"
msgstr "группа не найдена"
#, c-format
msgid "could not satisfy dependencies"
msgstr "не удается удовлетворить зависимости"
#, c-format
msgid "conflicting dependencies"
msgstr "конфликтующие зависимости"
#, c-format
msgid "conflicting files"
msgstr "конфликтующие файлы"
#, c-format
msgid "user aborted the operation"
msgstr "пользователь прервал операцию"
#, c-format
msgid "internal error"
msgstr "внутренняя ошибка"
#, c-format
msgid "not confirmed"
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-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
msgstr "%s-%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 "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: игнорирую обновление пакета (%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 "command: %s\n"
msgstr "команда: %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 initialize the removal 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 create transaction\n"
msgstr "не удалось создать запрос\n"
#, c-format
msgid "could not initialize transaction\n"
msgstr "не удалось инициализировать запрос\n"
#, c-format
msgid "could not prepare 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 "не могу удалить lock-файл %s\n"
#, c-format
msgid "No /bin/sh in parent environment, aborting scriptlet\n"
msgstr "Нету /bin/sh в родительском окружении, отмена скрипта\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 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 "scriptlet failed to execute correctly\n"
msgstr "не удалось корректно выполнить скрипт\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 "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 "could not create directory %s: %s\n"
#~ msgstr "не удалось создать директорию %s: (%s)\n"

View File

@@ -1,707 +0,0 @@
# Russian 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.
# <4rayven@gmail.com>, 2007.
#
msgid ""
msgstr ""
"Project-Id-Version: Pacman package manager 3.0.0\n"
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
"POT-Creation-Date: 2007-12-02 21:40-0600\n"
"PO-Revision-Date: 2007-03-16 02:52+1000\n"
"Last-Translator: Vladimir Bayrakovskiy <4rayven@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: lib/libalpm/add.c:88
#, c-format
msgid "replacing older version %s-%s by %s in target list\n"
msgstr ""
#: lib/libalpm/add.c:97
#, fuzzy, c-format
msgid "newer version %s-%s is in the target list -- skipping\n"
msgstr "%s-%s не устарел -- пропускаю"
#: lib/libalpm/add.c:168
msgid "conflicting packages were found in the target list\n"
msgstr ""
#: lib/libalpm/add.c:169
msgid "you cannot install two conflicting packages at the same time\n"
msgstr ""
#: lib/libalpm/add.c:172
#, fuzzy
msgid "replacing packages with -A and -U is not supported yet\n"
msgstr "замещение пакетов с использованием опций -A и -U еще не реализовано"
#: lib/libalpm/add.c:173
msgid "you can replace packages manually using -Rd and -U\n"
msgstr ""
#: lib/libalpm/add.c:365
#, c-format
msgid ""
"directory permissions differ on %s\n"
"filesystem: %o package: %o\n"
msgstr ""
#: lib/libalpm/add.c:392
#, c-format
msgid "extract: symlink %s does not point to dir\n"
msgstr ""
#: lib/libalpm/add.c:399
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr ""
#: lib/libalpm/add.c:454 lib/libalpm/add.c:598 lib/libalpm/util.c:422
#, fuzzy, c-format
msgid "could not extract %s (%s)\n"
msgstr "не могу извлечь %s (%s)"
#: lib/libalpm/add.c:505
#, fuzzy, c-format
msgid "could not rename %s (%s)\n"
msgstr "не могу переименовать %s (%s)"
#: lib/libalpm/add.c:512 lib/libalpm/add.c:532 lib/libalpm/trans.c:508
#, fuzzy, c-format
msgid "could not copy tempfile to %s (%s)\n"
msgstr "не могу скопировать временный файл в %s (%s)"
#: lib/libalpm/add.c:517 lib/libalpm/remove.c:234
#, fuzzy, c-format
msgid "%s saved as %s\n"
msgstr "%s сохранен как %s"
#: lib/libalpm/add.c:556
#, fuzzy, c-format
msgid "could not install %s as %s: %s\n"
msgstr "не могу установить %s как %s: %s"
#: lib/libalpm/add.c:559
#, fuzzy, c-format
msgid "%s installed as %s\n"
msgstr "%s установлен как %s"
#: lib/libalpm/add.c:576
#, fuzzy, c-format
msgid "extracting %s as %s.pacnew\n"
msgstr "извлекаю %s как %s.pacnew"
#: lib/libalpm/add.c:711 lib/libalpm/trans.c:529
#, fuzzy
msgid "could not get current working directory\n"
msgstr "не могу определить текущую рабочую директорию"
#: lib/libalpm/add.c:765
#, fuzzy, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "во время %s %s произошли ошибки"
#: lib/libalpm/add.c:770
#, fuzzy, c-format
msgid "problem occurred while installing %s\n"
msgstr "во время %s %s произошли ошибки"
#: lib/libalpm/add.c:785
#, fuzzy, c-format
msgid "could not update database entry %s-%s\n"
msgstr "не могу обновить в базе данных запись %s-%s"
#: lib/libalpm/add.c:793
#, fuzzy, c-format
msgid "could not add entry '%s' in cache\n"
msgstr "не могу добавить запись '%s' в кэш"
#: lib/libalpm/be_files.c:223
#, fuzzy, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "не могу удалить из базы данных запись %s%s"
#: lib/libalpm/be_files.c:275
#, fuzzy, c-format
msgid "loading package data for %s : level=%d\n"
msgstr "загружаю данные пакета %s : уровень=%d"
#: lib/libalpm/be_files.c:292 lib/libalpm/be_files.c:429
#: lib/libalpm/be_files.c:452 lib/libalpm/be_files.c:563
#: lib/libalpm/be_files.c:641 lib/libalpm/be_files.c:669
#: lib/libalpm/package.c:787
#, fuzzy, c-format
msgid "could not open file %s: %s\n"
msgstr "не могу скопировать временный файл в %s (%s)"
#: lib/libalpm/cache.c:62
#, c-format
msgid "adding '%s' to package cache for db '%s'\n"
msgstr ""
#: lib/libalpm/db.c:285
#, fuzzy, c-format
msgid "could not remove database entry %s%s\n"
msgstr "не могу удалить из базы данных запись %s%s"
#: lib/libalpm/db.c:553
msgid "attempt to re-register the 'local' DB\n"
msgstr ""
#: lib/libalpm/db.c:562 lib/libalpm/db.c:613
#, fuzzy
msgid "database path is undefined\n"
msgstr "база данных не инициализирована"
#: lib/libalpm/deps.c:173
#, fuzzy
msgid "dependency cycle detected:\n"
msgstr "обнаружена циклическая зависимость: %s"
#: lib/libalpm/deps.c:175
#, c-format
msgid "%s will be removed after its %s dependency\n"
msgstr ""
#: lib/libalpm/deps.c:177
#, c-format
msgid "%s will be installed before its %s dependency\n"
msgstr ""
#: lib/libalpm/deps.c:573
#, fuzzy, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "не удается удовлетворить зависимости для \"%s\""
#: lib/libalpm/error.c:43
msgid "out of memory!"
msgstr ""
#: lib/libalpm/error.c:45
msgid "unexpected system error"
msgstr ""
#: lib/libalpm/error.c:47
msgid "insufficient privileges"
msgstr ""
#: lib/libalpm/error.c:49
msgid "could not find or read file"
msgstr ""
#: lib/libalpm/error.c:51
#, fuzzy
msgid "could not find or read directory"
msgstr "не удается найти или прочитать пакет"
#: lib/libalpm/error.c:53
msgid "wrong or NULL argument passed"
msgstr ""
#: lib/libalpm/error.c:56
msgid "library not initialized"
msgstr ""
#: lib/libalpm/error.c:58
msgid "library already initialized"
msgstr ""
#: lib/libalpm/error.c:60
msgid "unable to lock database"
msgstr "не удается заблокировать базу данных"
#: lib/libalpm/error.c:63
msgid "could not open database"
msgstr "не удается открыть базу данных"
#: lib/libalpm/error.c:65
msgid "could not create database"
msgstr "не удается создать базу данных"
#: lib/libalpm/error.c:67
msgid "database not initialized"
msgstr "база данных не инициализирована"
#: lib/libalpm/error.c:69
msgid "database already registered"
msgstr "база данных уже зарегистрирована"
#: lib/libalpm/error.c:71
msgid "could not find database"
msgstr "не удается найти базу данных"
#: lib/libalpm/error.c:73
msgid "could not update database"
msgstr "не удается обновить базу данных"
#: lib/libalpm/error.c:75
msgid "could not remove database entry"
msgstr "не удается удалить запись в базе данных"
#: lib/libalpm/error.c:78
msgid "invalid url for server"
msgstr "неверный url"
#: lib/libalpm/error.c:85
msgid "could not set parameter"
msgstr "ну могу установить параметр"
#: lib/libalpm/error.c:88
msgid "transaction already initialized"
msgstr ""
#: lib/libalpm/error.c:90 lib/libalpm/error.c:94
msgid "transaction not initialized"
msgstr ""
#: lib/libalpm/error.c:92
msgid "duplicate target"
msgstr ""
#: lib/libalpm/error.c:96
msgid "transaction not prepared"
msgstr ""
#: lib/libalpm/error.c:98
msgid "transaction aborted"
msgstr ""
#: lib/libalpm/error.c:100
msgid "operation not compatible with the transaction type"
msgstr ""
#: lib/libalpm/error.c:102
msgid "could not commit transaction"
msgstr ""
#: lib/libalpm/error.c:104
msgid "could not download all files"
msgstr "не могу загрузить все файлы"
#: lib/libalpm/error.c:107
msgid "could not find or read package"
msgstr "не удается найти или прочитать пакет"
#: lib/libalpm/error.c:109
msgid "invalid or corrupted package"
msgstr "пакет неправильный или поврежден"
#: lib/libalpm/error.c:111
msgid "cannot open package file"
msgstr "не удается открыть файл пакета"
#: lib/libalpm/error.c:113
msgid "cannot load package data"
msgstr "не удается загрузить данные пакета"
#: lib/libalpm/error.c:115
msgid "package already installed"
msgstr "пакет уже установлен"
#: lib/libalpm/error.c:117
msgid "package not installed or lesser version"
msgstr ""
#: lib/libalpm/error.c:119
msgid "cannot remove all files for package"
msgstr "не могу удалить все файлы пакета"
#: lib/libalpm/error.c:121
msgid "package name is not valid"
msgstr "неверное имя пакета"
#: lib/libalpm/error.c:123
msgid "corrupted package"
msgstr "пакет поврежден"
#: lib/libalpm/error.c:125
msgid "no such repository"
msgstr "нет такого репозитория"
#: lib/libalpm/error.c:128
#, fuzzy
msgid "corrupted delta"
msgstr "пакет поврежден"
#: lib/libalpm/error.c:130
msgid "delta patch failed"
msgstr ""
#: lib/libalpm/error.c:133
msgid "group not found"
msgstr "группа не найдена"
#: lib/libalpm/error.c:136
msgid "could not satisfy dependencies"
msgstr "не удается удовлетворить зависимости"
#: lib/libalpm/error.c:138
msgid "conflicting dependencies"
msgstr ""
#: lib/libalpm/error.c:140
msgid "conflicting files"
msgstr ""
#: lib/libalpm/error.c:143
msgid "user aborted the operation"
msgstr "пользователь прервал операцию"
#: lib/libalpm/error.c:145
msgid "internal error"
msgstr "внутренняя ошибка"
#: lib/libalpm/error.c:147
msgid "libarchive error"
msgstr "ошибка в libarchive"
#: lib/libalpm/error.c:150
msgid "not confirmed"
msgstr ""
#: lib/libalpm/error.c:152
msgid "invalid regular expression"
msgstr "неверное регулярное выражение"
#: lib/libalpm/error.c:155
msgid "connection to remote host failed"
msgstr "не удалось подключиться к удаленному хосту"
#: lib/libalpm/error.c:158
msgid "unexpected error"
msgstr "непредвиденная ошибка"
#: lib/libalpm/package.c:124
#, fuzzy, c-format
msgid "could not get md5sum for package %s-%s\n"
msgstr "не могу получить контрольную сумму md5sum для пакета %s-%s"
#: lib/libalpm/package.c:133
#, fuzzy, c-format
msgid "md5sums do not match for package %s-%s\n"
msgstr "контрольные суммы md5sum для пакета %s-%s не совпали"
#: lib/libalpm/package.c:737
#, fuzzy, c-format
msgid "%s: forcing upgrade to version %s\n"
msgstr "%s: принудительно обновляю до версии %s"
#: lib/libalpm/package.c:742
#, fuzzy, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr "%s: установленная версия (%s) новее, чем в %s (%s)"
#: lib/libalpm/package.c:750
#, fuzzy, c-format
msgid "%s-%s: delaying upgrade of package (%s)\n"
msgstr "%s: принудительно обновляю до версии %s"
#: lib/libalpm/package.c:931
#, fuzzy, c-format
msgid "could not parse package description file in %s\n"
msgstr "не могу удалить временный файл %s"
#: lib/libalpm/package.c:936
#, fuzzy, c-format
msgid "missing package name in %s\n"
msgstr "отсутствует список файлов пакета в %s, генерирую его"
#: lib/libalpm/package.c:940
#, fuzzy, c-format
msgid "missing package version in %s\n"
msgstr "отсутствует список файлов пакета в %s, генерирую его"
#: lib/libalpm/package.c:970
#, fuzzy, c-format
msgid "could not remove tempfile %s\n"
msgstr "не могу удалить временный файл %s"
#: lib/libalpm/package.c:985 lib/libalpm/package.c:998
#, fuzzy, c-format
msgid "error while reading package %s: %s\n"
msgstr "ошибка при чтении пакета: %s"
#: lib/libalpm/package.c:1005
#, fuzzy, c-format
msgid "missing package metadata in %s\n"
msgstr "отсутствует список файлов пакета в %s, генерирую его"
#: lib/libalpm/package.c:1012
#, fuzzy, c-format
msgid "missing package filelist in %s, generating one\n"
msgstr "отсутствует список файлов пакета в %s, генерирую его"
#: lib/libalpm/remove.c:121
#, fuzzy, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "не могу найти %s в базе данных -- пропускаю"
#: lib/libalpm/remove.c:172 lib/libalpm/remove.c:243
#, fuzzy, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "не могу удалить файл '%s': %s"
#: lib/libalpm/remove.c:337
#, fuzzy, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "не могу удалить из базы данных запись %s%s"
#: lib/libalpm/remove.c:342
#, fuzzy, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "не могу добавить запись '%s' в кэш"
#: lib/libalpm/server.c:56
#, c-format
msgid "url '%s' is invalid, ignoring\n"
msgstr ""
#: lib/libalpm/server.c:60
msgid "url scheme not specified, assuming http\n"
msgstr ""
#: lib/libalpm/server.c:241
msgid "disk"
msgstr ""
#: lib/libalpm/server.c:245
#, fuzzy, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "не удалось получить некоторые файлы с %s\n"
#: lib/libalpm/server.c:275
msgid "cannot resume download, starting over\n"
msgstr ""
#: lib/libalpm/server.c:288
#, fuzzy, c-format
msgid "cannot write to file '%s'\n"
msgstr "не могу удалить файл '%s': %s"
#: lib/libalpm/server.c:307
#, fuzzy, c-format
msgid "error downloading '%s': %s\n"
msgstr "ошибка при чтении пакета: %s"
#: lib/libalpm/server.c:319
#, fuzzy, c-format
msgid "error writing to file '%s': %s\n"
msgstr "не могу удалить файл '%s': %s"
#: lib/libalpm/server.c:387
#, fuzzy, c-format
msgid "could not chdir to %s\n"
msgstr "не могу извлечь %s (%s)"
#: lib/libalpm/server.c:394
msgid "running XferCommand: fork failed!\n"
msgstr ""
#: lib/libalpm/server.c:445
msgid "URL does not contain a file for download\n"
msgstr ""
#: lib/libalpm/server.c:458
#, fuzzy, c-format
msgid "failed to download %s\n"
msgstr "не могу загрузить все файлы"
#: lib/libalpm/sync.c:135
#, fuzzy, c-format
msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
msgstr "%s-%s: игнорирую обновление этого пакета (он будет заменен на %s-%s)"
#: lib/libalpm/sync.c:250
#, fuzzy, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s-%s: игнорирую обновление этого пакета (он будет заменен на %s-%s)"
#: lib/libalpm/sync.c:320
#, fuzzy, c-format
msgid "repository '%s' not found\n"
msgstr "репозиторий '%s' не найден"
#: lib/libalpm/sync.c:354
#, fuzzy, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s не устарел -- пропускаю"
#: lib/libalpm/sync.c:358
#, fuzzy, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s не устарел -- пропускаю"
#: lib/libalpm/sync.c:613 lib/libalpm/sync.c:618
#, fuzzy
msgid "unresolvable package conflicts detected\n"
msgstr "обнаружен неразрешимый конфликт пакетов"
#: lib/libalpm/sync.c:628
#, c-format
msgid "malloc failure: could not allocate %zd bytes\n"
msgstr ""
#: lib/libalpm/sync.c:825
#, c-format
msgid "command: %s\n"
msgstr ""
#: lib/libalpm/sync.c:888 lib/libalpm/sync.c:896
#, fuzzy, c-format
msgid "can't get md5 checksum for file %s\n"
msgstr "не удалось получить md5 или sha1 контрольную сумму для пакета %s\n"
#: lib/libalpm/sync.c:910
#, fuzzy, c-format
msgid "file %s was corrupted (bad MD5 checksum)\n"
msgstr "архив %s был поврежден (не сходится MD5 или SHA1 контрольная сумма)\n"
#: lib/libalpm/sync.c:1056
#, c-format
msgid "failed to retrieve some files from %s\n"
msgstr "не удалось получить некоторые файлы с %s\n"
#: lib/libalpm/sync.c:1137
#, fuzzy
msgid "could not create removal transaction\n"
msgstr "не удается создать базу данных"
#: lib/libalpm/sync.c:1143
msgid "could not initialize the removal transaction\n"
msgstr ""
#: lib/libalpm/sync.c:1165
#, fuzzy
msgid "could not prepare removal transaction\n"
msgstr "не удается создать базу данных"
#: lib/libalpm/sync.c:1171
msgid "could not commit removal transaction\n"
msgstr ""
#: lib/libalpm/sync.c:1182
#, fuzzy
msgid "could not create transaction\n"
msgstr "не удается создать базу данных"
#: lib/libalpm/sync.c:1187
msgid "could not initialize transaction\n"
msgstr ""
#: lib/libalpm/sync.c:1214
#, fuzzy
msgid "could not prepare transaction\n"
msgstr "не удается создать базу данных"
#: lib/libalpm/sync.c:1219
msgid "could not commit transaction\n"
msgstr ""
#: lib/libalpm/trans.c:214
#, fuzzy, c-format
msgid "could not remove lock file %s\n"
msgstr "не могу удалить lock-файл %s"
#: lib/libalpm/trans.c:483
#, c-format
msgid "No /bin/sh in root dir (%s), aborting scriptlet\n"
msgstr ""
#: lib/libalpm/trans.c:494
#, fuzzy
msgid "could not create temp directory\n"
msgstr "не могу определить текущую рабочую директорию"
#: lib/libalpm/trans.c:536
#, fuzzy, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "не могу извлечь %s (%s)"
#: lib/libalpm/trans.c:554
#, fuzzy, c-format
msgid "could not fork a new process (%s)\n"
msgstr "не могу переименовать %s (%s)"
#: lib/libalpm/trans.c:564
#, fuzzy, c-format
msgid "could not change the root directory (%s)\n"
msgstr "не могу определить текущую рабочую директорию"
#: lib/libalpm/trans.c:569
#, fuzzy, c-format
msgid "could not change directory to / (%s)\n"
msgstr "не могу извлечь %s (%s)"
#: lib/libalpm/trans.c:578
#, c-format
msgid "call to popen failed (%s)"
msgstr ""
#: lib/libalpm/trans.c:597
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr ""
#: lib/libalpm/trans.c:606
msgid "scriptlet failed to execute correctly\n"
msgstr ""
#: lib/libalpm/trans.c:615
#, fuzzy, c-format
msgid "could not remove tmpdir %s\n"
msgstr "не могу удалить временный файл %s"
#: lib/libalpm/util.c:204
#, c-format
msgid "failed to make path '%s' : %s\n"
msgstr ""
#: lib/libalpm/util.c:389
#, c-format
msgid "could not open %s: %s\n"
msgstr ""
#: lib/libalpm/util.c:573
#, c-format
msgid "no %s cache exists, creating...\n"
msgstr "кэш %s не существует, создаю...\n"
#: lib/libalpm/util.c:593
#, fuzzy
msgid "couldn't create package cache, using /tmp instead\n"
msgstr "не могу создать кэш пакета, будет использован /tmp\n"
#: lib/libalpm/util.c:643
#, c-format
msgid "md5: %s can't be opened\n"
msgstr ""
#: lib/libalpm/util.c:645
#, c-format
msgid "md5: %s can't be read\n"
msgstr ""
#~ msgid "please remove '%s' first, using -Rd"
#~ msgstr "пожалуйста, уделите сначала '%s' используя -Rd"
#~ msgid "could not extract %s (%s)"
#~ msgstr "не могу извлечь %s (%s)"
#~ msgid "could not update provision '%s' from '%s'"
#~ msgstr "не могу обновить '%s' из '%s'"
#~ msgid "could not get sha1sum for package %s-%s"
#~ msgstr "не могу получить контрольную сумму sha1sum для пакета %s-%s"
#~ msgid "sha1sums do not match for package %s-%s"
#~ msgstr "контрольные суммы sha1sum для пакета %s-%s не совпали"
#~ msgid "cannot remove file %s: %s"
#~ msgstr "не могу удалить файл %s: %s"
#~ msgid "archive %s is corrupted (bad MD5 or SHA1 checksum)\n"
#~ msgstr "архив %s поврежден (не сходится MD5 или SHA1 контрольная сумма)\n"

557
lib/libalpm/po/tr.po Normal file
View File

@@ -0,0 +1,557 @@
# Turkish translation for libalpm.
# Copyright (C) 2008 Judd Vinet <jvinet@zeroflux.org>
# This file is distributed under the same license as the libalpm package.
# Samed BEYRİBEY <ras0ir@eventualis.org>, 2008.
#
msgid ""
msgstr ""
"Project-Id-Version: 3.1.4-1\n"
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
"POT-Creation-Date: 2008-08-23 10:54-0500\n"
"PO-Revision-Date: 2009-01-03 16:20+0200\n"
"Last-Translator: Samed Beyribey <ras0ir@eventualis.org>\n"
"Language-Team: Turkish Arch Linux Users <tr@archlinuxtr.org>\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 "eski sürüm %s-%s hedef listesindeki %s ile değiştiriliyor\n"
#, c-format
msgid "skipping %s-%s because newer version %s is in the target list\n"
msgstr "%s-%s yeni sürüm %s hedef listesinde olduğundan atlanıyor\n"
#, c-format
msgid "conflicting packages were found in the target list\n"
msgstr "hedef listesinde çakışan paketler bulundu\n"
#, c-format
msgid "you cannot install two conflicting packages at the same time\n"
msgstr "çakışan iki paketi aynı anda kuramazsınız\n"
#, c-format
msgid "replacing packages with -U is not supported yet\n"
msgstr "-A ve -U kullanarak paket değiştirme henüz desteklenmemektedir\n"
#, c-format
msgid "you can replace packages manually using -Rd and -U\n"
msgstr "paketleri -Rd ve -U kullanarak değiştirebilirsiniz\n"
#, c-format
msgid ""
"directory permissions differ on %s\n"
"filesystem: %o package: %o\n"
msgstr ""
"%s paketi üzerinde dizin izinleri farklı\n"
"dosya sistemi: %o paket: %o\n"
#, c-format
msgid "extract: symlink %s does not point to dir\n"
msgstr "aç: %s sembolik bağı dizine yöneltilmemiş\n"
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr "aç: dizin %s dosyası ile baştan yazılmıyor\n"
#, c-format
msgid "could not extract %s (%s)\n"
msgstr "%s açılamadı (%s)\n"
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "%s dosyasının ismi %s olarak değiştirilemiyor (%s)\n"
#, c-format
msgid "%s saved as %s\n"
msgstr "%s, %s olarak kaydedildi\n"
#, c-format
msgid "could not install %s as %s (%s)\n"
msgstr "%s, %s olarak kurulamadı: %s\n"
#, c-format
msgid "%s installed as %s\n"
msgstr "%s, %s olarak kuruldu\n"
#, c-format
msgid "extracting %s as %s.pacnew\n"
msgstr "%s dosyası %s.pacnew olarak açılıyor\n"
#, c-format
msgid "could not get current working directory\n"
msgstr "üzerinde çalışılan dizin algılanamadı\n"
#, c-format
msgid "problem occurred while upgrading %s\n"
msgstr "%s güncellenirken bir sorun meydana geldi\n"
#, c-format
msgid "problem occurred while installing %s\n"
msgstr "%s yüklenirken bir sorun meydana geldi\n"
#, c-format
msgid "could not update database entry %s-%s\n"
msgstr "%s-%s veritabanı kaydı güncellenemedi\n"
#, c-format
msgid "could not add entry '%s' in cache\n"
msgstr "'%s' kaydı tampona eklenemedi\n"
#, c-format
msgid "could not remove database entry %s%s\n"
msgstr "%s%s veritabanı kaydı kaldırılamıyor\n"
#, c-format
msgid "invalid name for database entry '%s'\n"
msgstr "veritabanı kaydı için geçersiz isim '%s'\n"
#, c-format
msgid "corrupted database entry '%s'\n"
msgstr "bozuk veritabanı kaydı '%s'\n"
#, c-format
msgid "could not open file %s: %s\n"
msgstr "%s dosyasıılamadı: %s\n"
#, c-format
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr "%s veritabanı tutarsız: %s paketinde isim uyuşmazlığı\n"
#, c-format
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr "%s veritabanı tutarsız: %s paketinde sürüm uyuşmazlığı\n"
#, c-format
msgid "could not parse package description file in %s\n"
msgstr "%s içerisindeki paket açıklama dosyası ayrıştırılamadı\n"
#, c-format
msgid "missing package name in %s\n"
msgstr "%s içerisinde paket adı bulunmuyor\n"
#, c-format
msgid "missing package version in %s\n"
msgstr "%s içerisinde paket sürümü bulunmuyor\n"
#, c-format
msgid "error while reading package %s: %s\n"
msgstr "%s paketi okunurken hata meydana geldi: %s\n"
#, c-format
msgid "missing package metadata in %s\n"
msgstr "%s içerisinde eksik paket bilgisi\n"
#, c-format
msgid "attempt to re-register the 'local' DB\n"
msgstr "'yerel' veritabanı tekrar kaydedilmeye çalışılıyor\n"
#, c-format
msgid "database path is undefined\n"
msgstr "veritabanı yolu belirtilmemiş\n"
#, c-format
msgid "dependency cycle detected:\n"
msgstr "dolaylı bağımlılıklar bulundu:\n"
#, c-format
msgid "%s will be removed after its %s dependency\n"
msgstr "%s paketi %s bağımlılığından sonra kaldırılacak\n"
#, c-format
msgid "%s will be installed before its %s dependency\n"
msgstr "%s paketi %s bağımlılığından önce kurulacak\n"
#, c-format
msgid "provider package was selected (%s provides %s)\n"
msgstr "sağlayan paket seçildi ( %s %s'i sağlıyor)\n"
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "\"%s\" paketi \"%s\" paketinin bağımlılığı olarak çözümlenemiyor\n"
#, c-format
msgid "url '%s' is invalid\n"
msgstr "'%s' adresi geçersiz\n"
#, c-format
msgid "url scheme not specified, assuming HTTP\n"
msgstr "adres şeması belirtilmemiş, http kullanılacak\n"
#, c-format
msgid "disk"
msgstr "disk"
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "%3$s hatası nedeniyle '%1$s' dosyası %2$s adresinden alınamadı\n"
#, c-format
msgid "cannot resume download, starting over\n"
msgstr "indirmeye devam edilemiyor, baştan başlanıyor\n"
#, c-format
msgid "cannot write to file '%s'\n"
msgstr "'%s' dosyasına yazılamıyor\n"
#, c-format
msgid "error downloading '%s': %s\n"
msgstr "'%s' indirilirken hata oluştu: %s\n"
#, c-format
msgid "error writing to file '%s': %s\n"
msgstr "'%s' dosyasına yazılamıyor: %s\n"
#, c-format
msgid "could not chdir to %s\n"
msgstr "%s dizinine geçilemiyor\n"
#, c-format
msgid "running XferCommand: fork failed!\n"
msgstr "XferCommand çalıştırılıyor: çatallanma başarısız!\n"
#, c-format
msgid "failed to download %s\n"
msgstr "%s dosyası indirilemedi\n"
#, c-format
msgid "out of memory!"
msgstr "bellek yetersiz!"
#, c-format
msgid "unexpected system error"
msgstr "beklenmedik sistem hatası"
#, c-format
msgid "insufficient privileges"
msgstr "yetersiz yetki"
#, c-format
msgid "could not find or read file"
msgstr "dosya bulunamadı veya okunamadı"
#, c-format
msgid "could not find or read directory"
msgstr "klasör bulunamadı veya okunamadı"
#, c-format
msgid "wrong or NULL argument passed"
msgstr "eksik ya da geçersiz parametre geçilmiş"
#, c-format
msgid "library not initialized"
msgstr "kütüphane başlatılamadı"
#, c-format
msgid "library already initialized"
msgstr "kütüphane zaten başlatıldı"
#, c-format
msgid "unable to lock database"
msgstr "veritabanı kilitlenemiyor"
#, c-format
msgid "could not open database"
msgstr "veritabanıılamadı"
#, c-format
msgid "could not create database"
msgstr "veritabanı oluşturulamadı"
#, c-format
msgid "database not initialized"
msgstr "veritabanı başlatılamadı"
#, c-format
msgid "database already registered"
msgstr "veritabanı zaten kayıtlı"
#, c-format
msgid "could not find database"
msgstr "veritabanı bulunamadı"
#, c-format
msgid "could not update database"
msgstr "veritabanı güncellenemedi"
#, c-format
msgid "could not remove database entry"
msgstr "veritabanı kaydı kaldırılamadı"
#, c-format
msgid "invalid url for server"
msgstr "hatalı sunucu adresi"
#, c-format
msgid "transaction already initialized"
msgstr "işlem zaten başlatılmış"
#, c-format
msgid "transaction not initialized"
msgstr "işlem başlatılmamış"
#, c-format
msgid "duplicate target"
msgstr "birden fazla hedef"
#, c-format
msgid "transaction not prepared"
msgstr "işlem hazırlanamadı"
#, c-format
msgid "transaction aborted"
msgstr "işlem iptal edildi"
#, c-format
msgid "operation not compatible with the transaction type"
msgstr "operasyon, işlem tipiyle uyumlu değil"
#, c-format
msgid "could not commit transaction"
msgstr "işlem teslim edilemiyor"
#, c-format
msgid "could not download all files"
msgstr "tüm dosyalar indirilemedi"
#, c-format
msgid "could not find or read package"
msgstr "paket bulunamadı veya okunamadı"
#, c-format
msgid "invalid or corrupted package"
msgstr "geçersiz veya bozuk paket"
#, c-format
msgid "cannot open package file"
msgstr "paket dosyasıılamıyor"
#, c-format
msgid "cannot load package data"
msgstr "paket verisi yüklenemiyor"
#, c-format
msgid "package not installed or lesser version"
msgstr "paket kurulamadı ya da önceki sürümü kurulu"
#, c-format
msgid "cannot remove all files for package"
msgstr "paketle alakalı tüm dosyalar kaldırılamadı"
#, c-format
msgid "package filename is not valid"
msgstr "paket dosya adı geçerli değil"
#, c-format
msgid "no such repository"
msgstr "depo bulunmuyor"
#, c-format
msgid "invalid or corrupted delta"
msgstr "geçersiz ya da bozuk veri"
#, c-format
msgid "delta patch failed"
msgstr "fark yaması başarısız oldu"
#, c-format
msgid "group not found"
msgstr "grup bulunamadı"
#, c-format
msgid "could not satisfy dependencies"
msgstr "bağımlılıklar sağlanamadı"
#, c-format
msgid "conflicting dependencies"
msgstr "çelişen bağımlılıklar"
#, c-format
msgid "conflicting files"
msgstr "çelişen dosyalar"
#, c-format
msgid "user aborted the operation"
msgstr "işlem kullanıcı tarafından durduruldu"
#, c-format
msgid "internal error"
msgstr "dahili hata"
#, c-format
msgid "not confirmed"
msgstr "onaylanmadı"
#, c-format
msgid "invalid regular expression"
msgstr "geçersiz düzenli ifade"
#, c-format
msgid "libarchive error"
msgstr "libarchive hatası"
#, c-format
msgid "download library error"
msgstr "kütüphane indirilirken hata oluştu"
#, c-format
msgid "error invoking external downloader"
msgstr "harici indiriciyi çağırırken hata oluştu"
#, c-format
msgid "unexpected error"
msgstr "beklenmedik hata"
#, c-format
msgid "could not find %s in database -- skipping\n"
msgstr "%s veritabanında bulunamadı -- atlanıyor\n"
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "'%s' dosyası silinemiyor: %s\n"
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "veritabanı kaydı %s-%s silinemedi\n"
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "'%s' kaydı tampondan silinemedi\n"
#, c-format
msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
msgstr "%s-%s: paket güncellemesi göz ardı ediliyor (%s-%s ile değiştirilecek)\n"
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr "%s: yereldeki paket (%s) %s (%s) paketinden daha güncel\n"
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: paket güncellemesi göz ardı ediliyor (%s => %s)\n"
#, c-format
msgid "repository '%s' not found\n"
msgstr "'%s' deposu bulunamadı\n"
#, c-format
msgid "%s-%s is up to date -- skipping\n"
msgstr "%s-%s güncel -- atlanıyor\n"
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%s-%s güncel -- yeniden kuruluyor\n"
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "%s paketi eski sürümüne çevriliyor (%s => %s)\n"
#, c-format
msgid "unresolvable package conflicts detected\n"
msgstr "çözülemeyen paket çakışmaları bulundu\n"
#, c-format
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgstr "'%s' hedef listesinden '%s' ile çeliştiği için kaldırıldı\n"
#, c-format
msgid "command: %s\n"
msgstr "komut: %s\n"
#, c-format
msgid "failed to retrieve some files from %s\n"
msgstr "%s deposundan bazı dosyalar alınamadı\n"
#, c-format
msgid "could not create removal transaction\n"
msgstr "kaldırma işlemi oluşturulamıyor\n"
#, c-format
msgid "could not initialize the removal transaction\n"
msgstr "kaldırma işlemi başlatılamadı\n"
#, c-format
msgid "could not prepare removal transaction\n"
msgstr "kaldırma işlemi hazırlanamadı\n"
#, c-format
msgid "could not commit removal transaction\n"
msgstr "kaldırma işlemi teslim edilemedi\n"
#, c-format
msgid "could not create transaction\n"
msgstr "işlem oluşturulamadı\n"
#, c-format
msgid "could not initialize transaction\n"
msgstr "işlem başlatılamadı\n"
#, c-format
msgid "could not prepare transaction\n"
msgstr "işlem hazırlanamadı\n"
#, c-format
msgid "could not commit transaction\n"
msgstr "işlem teslim edilemedi\n"
#, c-format
msgid "could not remove lock file %s\n"
msgstr "kilit dosyası %s silinemedi\n"
#, c-format
msgid "No /bin/sh in parent environment, aborting scriptlet\n"
msgstr "Bir üst ortamda /bin/sh bulunamadı, betik iptal ediliyor\n"
#, c-format
msgid "could not create temp directory\n"
msgstr "geçici dizin oluşturulamadı\n"
#, c-format
msgid "could not copy tempfile to %s (%s)\n"
msgstr "geçici dosya %s üzerine kopyalanamadı (%s)\n"
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "%s dizinine geçilemedi (%s)\n"
#, c-format
msgid "could not fork a new process (%s)\n"
msgstr "yeni bir süreç çatallanamadı (%s)\n"
#, c-format
msgid "could not change the root directory (%s)\n"
msgstr "kök dizini değiştirilemedi (%s)\n"
#, c-format
msgid "could not change directory to / (%s)\n"
msgstr "/ dizinine gidilemedi (%s)\n"
#, c-format
msgid "call to popen failed (%s)"
msgstr "popen çağrısı başarısız (%s)"
#, c-format
msgid "call to waitpid failed (%s)\n"
msgstr "waitpid çağrısı başarısız (%s)\n"
#, c-format
msgid "scriptlet failed to execute correctly\n"
msgstr "betik düzgün çalıştırılamadı\n"
#, c-format
msgid "could not remove tmpdir %s\n"
msgstr "geçici dizin %s kaldırılamadı\n"
#, c-format
msgid "could not open %s: %s\n"
msgstr "%s açılamadı: %s\n"
#, c-format
msgid "no %s cache exists, creating...\n"
msgstr "%s tamponu bulunmuyor, oluşturuluyor...\n"
#, c-format
msgid "couldn't create package cache, using /tmp instead\n"
msgstr "paket tamponu oluşturulamadı, /tmp kullanılacak\n"

560
lib/libalpm/po/uk.po Normal file
View File

@@ -0,0 +1,560 @@
# Copyright (C) 2008 Judd Vinet <jvinet@zeroflux.org>
# This file is distributed under the same license as the pacman package.
# Ivan Kovnatsky <sevenfourk@gmail.com>, 2008.
# Roman Kyrylych <roman@archlinux.org>, 2008, 2009.
#
msgid ""
msgstr ""
"Project-Id-Version: libalpm 3.2.2\n"
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
"POT-Creation-Date: 2008-08-23 10:54-0500\n"
"PO-Revision-Date: \n"
"Last-Translator: Roman Kyrylych <roman@archlinux.org>\n"
"Language-Team: http://archlinux.org.ua\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Ukrainian\n"
"X-Poedit-Country: UKRAINE\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 "заміна пакунків за допомогою -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 ""
"права каталога відрізняються на\n"
"файловій системі %s: %o пакунок: %o\n"
#, c-format
msgid "extract: symlink %s does not point to dir\n"
msgstr "розпакування: символьне посилання %s не вказує на каталог\n"
#, c-format
msgid "extract: not overwriting dir with file %s\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 entry %s%s\n"
msgstr "неможливо видалити запис бази даних %s%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 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 "спроба перереєструвати базу даних 'local'\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 "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 downloading '%s': %s\n"
msgstr "помилка при завантаженні '%s': %s\n"
#, c-format
msgid "error writing to file '%s': %s\n"
msgstr "помилка при запису до файлу '%s': %s\n"
#, c-format
msgid "could not chdir to %s\n"
msgstr "неможливо змінити каталог на %s\n"
#, c-format
msgid "running XferCommand: fork failed!\n"
msgstr "виконання XferCommand: старт процесу невдалий!\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 "передано невірний аргумент чи NULL"
#, 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 "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 "could not commit transaction"
msgstr "неможливо здійснити транзакцію"
#, c-format
msgid "could not download all files"
msgstr "неможиво завантажити усі файли"
#, c-format
msgid "could not find or read package"
msgstr "неможливо знайти чи прочитати пакунок"
#, c-format
msgid "invalid or corrupted package"
msgstr "невірний чи пошкоджений пакунок"
#, c-format
msgid "cannot open package file"
msgstr "неможливо відкрити файл пакунку"
#, c-format
msgid "cannot load package data"
msgstr "неможливо завантажити дані пакунку"
#, c-format
msgid "package not installed or lesser version"
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 "group not found"
msgstr "група не знадена"
#, c-format
msgid "could not satisfy dependencies"
msgstr "неможливо забезпечити залежності"
#, c-format
msgid "conflicting dependencies"
msgstr "конфліктуючі залежності"
#, c-format
msgid "conflicting files"
msgstr "конфліктуючі файли"
#, c-format
msgid "user aborted the operation"
msgstr "користувач перервав операцію"
#, c-format
msgid "internal error"
msgstr "внутрішня помилка"
#, c-format
msgid "not confirmed"
msgstr "не підтверджено"
#, c-format
msgid "invalid regular expression"
msgstr "невірний регулярний вираз"
#, c-format
msgid "libarchive error"
msgstr "помилка libarchive"
#, 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 "неможливо знайти %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-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
msgstr "%s-%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 "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%s: ігнорування поновлення пакунку (%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 "command: %s\n"
msgstr "команда: %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 initialize the removal 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 create transaction\n"
msgstr "неможливо створити транзакцію\n"
#, c-format
msgid "could not initialize transaction\n"
msgstr "неможливо почати транзакцію\n"
#, c-format
msgid "could not prepare 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 "No /bin/sh in parent environment, aborting scriptlet\n"
msgstr ""
"В батьківському середовищі немає /bin/sh, переривання скрипту виконання\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 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 "scriptlet failed to execute correctly\n"
msgstr "скрипт встановлення не зміг виконатися коректно\n"
#, c-format
msgid "could not remove tmpdir %s\n"
msgstr "неможливо видалити тимчасовий каталог %s\n"
#, c-format
msgid "could not open %s: %s\n"
msgstr "неможливо відкрити %s: %s\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"

558
lib/libalpm/po/zh_CN.po Normal file
View File

@@ -0,0 +1,558 @@
# Chinese/Simplified translation of Pacman package manager package.
# Copyright (C) 2008 Judd Vinet <jvinet@zeroflux.org>
# This file is distributed under the same license as the Pacman package manager package.
# 甘露(Lu.Gan) <rhythm.gan@gmail.com>, 2008.
#
#
#
msgid ""
msgstr ""
"Project-Id-Version: Pacman package manager 3.2.1\n"
"Report-Msgid-Bugs-To: pacman-dev@archlinux.org\n"
"POT-Creation-Date: 2008-08-23 10:54-0500\n"
"PO-Revision-Date: 2008-10-28 16:20+0900\n"
"Last-Translator: Lyman Li <lymanrb@gmail.com>\n"
"Language-Team: Chinese/Simplified <i18n-translation@lists.linux.net.cn>\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 "正在用目标清单中的 %3$s 替换老版本 %1$s-%2$s\n"
#, c-format
msgid "skipping %s-%s because newer version %s is in the target list\n"
msgstr "跳过 %1$s-%2$s因为较新版本的 %3$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 "目前尚不支持用 -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 ""
"目录权限不一致 %1$s\n"
"文件系统:%2$o 软件包:%3$o\n"
#, c-format
msgid "extract: symlink %s does not point to dir\n"
msgstr "解压缩:符号链接 %s 没有指向目录\n"
#, c-format
msgid "extract: not overwriting dir with file %s\n"
msgstr "解压缩:没有用文件 %s 覆盖目录\n"
#, c-format
msgid "could not extract %s (%s)\n"
msgstr "无法解压缩 %1$s (%2$s)\n"
#, c-format
msgid "could not rename %s to %s (%s)\n"
msgstr "无法将 %1$s 重命名为 %2$s (%3$s)\n"
#, c-format
msgid "%s saved as %s\n"
msgstr "%1$s 已另存为 %2$s\n"
#, c-format
msgid "could not install %s as %s (%s)\n"
msgstr "无法将 %1$s 安装为 %2$s (%3$s)\n"
#, c-format
msgid "%s installed as %s\n"
msgstr "%1$s 已安装为 %2$s\n"
#, c-format
msgid "extracting %s as %s.pacnew\n"
msgstr "正在解压缩 %1$s 为 %2$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 "无法更新数据库记录 %1$s-%2$s\n"
#, c-format
msgid "could not add entry '%s' in cache\n"
msgstr "无法在缓存中添加记录 '%s' \n"
#, c-format
msgid "could not remove database entry %s%s\n"
msgstr "无法删除数据库记录 %1$s%2$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 "无法打开文件 %1$s: %2$s\n"
#, c-format
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr "%1$s 数据库不一致:名字和软件包中的 %2$s 不一致\n"
#, c-format
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr "%1$s 数据库不一致:版本和软件包中的 %2$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 "读取软件包 %1$s 发生错误: %2$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 "%1$s 将在它 %2$s 的依赖关系之后被删除\n"
#, c-format
msgid "%s will be installed before its %s dependency\n"
msgstr "%1$s 将在它 %2$s 的依赖关系之前被安装\n"
#, c-format
msgid "provider package was selected (%s provides %s)\n"
msgstr "已选定提供软件包 (%1$s 提供 %2$s)\n"
#, c-format
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
msgstr "无法解决 \"%1$s\"\"%2$s\" 的一个依赖关系\n"
#, c-format
msgid "url '%s' is invalid\n"
msgstr "url '%s' 无效\n"
#, c-format
msgid "url scheme not specified, assuming HTTP\n"
msgstr "url scheme 未指定,假定为 HTTP\n"
#, c-format
msgid "disk"
msgstr "硬盘"
#, c-format
msgid "failed retrieving file '%s' from %s : %s\n"
msgstr "无法从 %2$s : %3$s 获取文件 '%1$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 downloading '%s': %s\n"
msgstr "下载 '%1$s' 时出错: %2$s\n"
#, c-format
msgid "error writing to file '%s': %s\n"
msgstr "写入文件 '%1$s' 时出错: %2$s\n"
#, c-format
msgid "could not chdir to %s\n"
msgstr "无法切换目录到 %s\n"
#, c-format
msgid "running XferCommand: fork failed!\n"
msgstr "正在运行 XferCommandfork 失败!\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 "传递了错误的或 NULL 参数"
#, 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 "无效的服务器 url"
#, 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 "could not commit transaction"
msgstr "无法交付处理"
#, c-format
msgid "could not download all files"
msgstr "无法下载全部文件"
#, c-format
msgid "could not find or read package"
msgstr "无法找到或读取软件包"
#, c-format
msgid "invalid or corrupted package"
msgstr "无效的或已损坏的软件包"
#, c-format
msgid "cannot open package file"
msgstr "无法打开软件包文件"
#, c-format
msgid "cannot load package data"
msgstr "无法加载软件包数据"
#, c-format
msgid "package not installed or lesser version"
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 "无效的或已损坏的 delta"
#, c-format
msgid "delta patch failed"
msgstr "delta 补丁失败"
#, c-format
msgid "group not found"
msgstr "没有找到软件包组"
#, c-format
msgid "could not satisfy dependencies"
msgstr "无法满足依赖关系"
#, c-format
msgid "conflicting dependencies"
msgstr "有冲突的依赖关系"
#, c-format
msgid "conflicting files"
msgstr "有冲突的文件"
#, c-format
msgid "user aborted the operation"
msgstr "用户中断了操作"
#, c-format
msgid "internal error"
msgstr "内部错误"
#, c-format
msgid "not confirmed"
msgstr "未确认"
#, c-format
msgid "invalid regular expression"
msgstr "无效的正则表达式"
#, c-format
msgid "libarchive error"
msgstr "libarchive 错误"
#, 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 "无法在数据库中找到 %s -- 跳过\n"
#, c-format
msgid "cannot remove file '%s': %s\n"
msgstr "无法删除文件 '%1$s': %2$s\n"
#, c-format
msgid "could not remove database entry %s-%s\n"
msgstr "无法删除数据库记录 %1$s-%2$s\n"
#, c-format
msgid "could not remove entry '%s' from cache\n"
msgstr "无法从缓存中删除记录 '%s'\n"
#, c-format
msgid "%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"
msgstr "%1$s-%2$s忽略软件包更新由 %3$s-%4$s 替代)\n"
#, c-format
msgid "%s: local (%s) is newer than %s (%s)\n"
msgstr "%1$s本地%2$s比 %3$s 的版本更新 (%4$s)\n"
#, c-format
msgid "%s: ignoring package upgrade (%s => %s)\n"
msgstr "%1$s忽略软件包更新%2$s => %3$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 "%1$s-%2$s 已经为最新 -- 跳过\n"
#, c-format
msgid "%s-%s is up to date -- reinstalling\n"
msgstr "%1$s-%2$s 已经为最新 -- 重新安装\n"
#, c-format
msgid "downgrading package %s (%s => %s)\n"
msgstr "正在降级软件包 %1$s (%2$s => %3$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 "正在从目标清单中删除 '%1$s' ,因为它和 '%2$s' 冲突\n"
#, c-format
msgid "command: %s\n"
msgstr "命令:%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 initialize the removal 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 create transaction\n"
msgstr "无法创建处理\n"
#, c-format
msgid "could not initialize transaction\n"
msgstr "无法初始化处理\n"
#, c-format
msgid "could not prepare 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 "No /bin/sh in parent environment, aborting scriptlet\n"
msgstr "父环境中没有 /bin/sh正在中断小脚本\n"
#, c-format
msgid "could not create temp directory\n"
msgstr "无法创建临时目录\n"
#, c-format
msgid "could not copy tempfile to %s (%s)\n"
msgstr "无法复制临时文件到 %1$s (%2$s)\n"
#, c-format
msgid "could not change directory to %s (%s)\n"
msgstr "无法更改目录到 %1$s (%2$s)\n"
#, c-format
msgid "could not fork a new process (%s)\n"
msgstr "无法 fork 新进程 (%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 "scriptlet failed to execute correctly\n"
msgstr "小脚本未能被正确执行\n"
#, c-format
msgid "could not remove tmpdir %s\n"
msgstr "无法删除临时目录 %s\n"
#, c-format
msgid "could not open %s: %s\n"
msgstr "无法打开 %1$s: %2$s\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"

View File

@@ -37,7 +37,6 @@
#include "alpm_list.h"
#include "trans.h"
#include "util.h"
#include "error.h"
#include "log.h"
#include "backup.h"
#include "package.h"
@@ -57,12 +56,11 @@ int _alpm_remove_loadtarget(pmtrans_t *trans, pmdb_t *db, char *name)
ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1));
ASSERT(name != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1));
if(_alpm_pkg_find(name, trans->packages)) {
if(_alpm_pkg_find(trans->packages, name)) {
RET_ERR(PM_ERR_TRANS_DUP_TARGET, -1);
}
if((info = _alpm_db_scan(db, name)) == NULL) {
/* Unimportant - just ignore it if we can't find it */
if((info = _alpm_db_get_pkgfromcache(db, name)) == NULL) {
_alpm_log(PM_LOG_DEBUG, "could not find %s in database\n", name);
RET_ERR(PM_ERR_PKG_NOT_FOUND, -1);
}
@@ -78,11 +76,68 @@ int _alpm_remove_loadtarget(pmtrans_t *trans, pmdb_t *db, char *name)
}
_alpm_log(PM_LOG_DEBUG, "adding %s in the targets list\n", info->name);
trans->packages = alpm_list_add(trans->packages, info);
trans->packages = alpm_list_add(trans->packages, _alpm_pkg_dup(info));
return(0);
}
static void remove_prepare_cascade(pmtrans_t *trans, pmdb_t *db,
alpm_list_t *lp)
{
ALPM_LOG_FUNC;
while(lp) {
alpm_list_t *i;
for(i = lp; i; i = i->next) {
pmdepmissing_t *miss = (pmdepmissing_t *)i->data;
pmpkg_t *info = _alpm_db_get_pkgfromcache(db, miss->target);
if(info) {
if(!_alpm_pkg_find(trans->packages, alpm_pkg_get_name(info))) {
_alpm_log(PM_LOG_DEBUG, "pulling %s in the targets list\n",
alpm_pkg_get_name(info));
trans->packages = alpm_list_add(trans->packages, _alpm_pkg_dup(info));
}
} else {
_alpm_log(PM_LOG_ERROR, _("could not find %s in database -- skipping\n"),
miss->target);
}
}
alpm_list_free_inner(lp, (alpm_list_fn_free)_alpm_depmiss_free);
alpm_list_free(lp);
lp = alpm_checkdeps(db, 1, trans->packages, NULL);
}
}
static void remove_prepare_keep_needed(pmtrans_t *trans, pmdb_t *db,
alpm_list_t *lp)
{
ALPM_LOG_FUNC;
/* Remove needed packages (which break dependencies) from the target list */
while(lp != NULL) {
alpm_list_t *i;
for(i = lp; i; i = i->next) {
pmdepmissing_t *miss = (pmdepmissing_t *)i->data;
void *vpkg;
pmpkg_t *pkg = _alpm_pkg_find(trans->packages, miss->causingpkg);
if(pkg == NULL) {
continue;
}
trans->packages = alpm_list_remove(trans->packages, pkg, _alpm_pkg_cmp,
&vpkg);
pkg = vpkg;
if(pkg) {
_alpm_log(PM_LOG_WARNING, "removing %s from the target-list\n",
alpm_pkg_get_name(pkg));
_alpm_pkg_free(pkg);
}
}
alpm_list_free_inner(lp, (alpm_list_fn_free)_alpm_depmiss_free);
alpm_list_free(lp);
lp = alpm_checkdeps(db, 1, trans->packages, NULL);
}
}
int _alpm_remove_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)
{
alpm_list_t *lp;
@@ -97,37 +152,30 @@ int _alpm_remove_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)
return(0);
}
EVENT(trans, PM_TRANS_EVT_CHECKDEPS_START, NULL, NULL);
if((trans->flags & PM_TRANS_FLAG_RECURSE) && !(trans->flags & PM_TRANS_FLAG_CASCADE)) {
_alpm_log(PM_LOG_DEBUG, "finding removable dependencies\n");
_alpm_recursedeps(db, trans->packages, trans->flags & PM_TRANS_FLAG_RECURSEALL);
}
if(!(trans->flags & PM_TRANS_FLAG_NODEPS)) {
EVENT(trans, PM_TRANS_EVT_CHECKDEPS_START, NULL, NULL);
_alpm_log(PM_LOG_DEBUG, "looking for unsatisfied dependencies\n");
lp = alpm_checkdeps(db, 1, trans->packages, NULL);
if(lp != NULL) {
if(trans->flags & PM_TRANS_FLAG_CASCADE) {
while(lp) {
alpm_list_t *i;
for(i = lp; i; i = i->next) {
pmdepmissing_t *miss = (pmdepmissing_t *)i->data;
pmpkg_t *info = _alpm_db_scan(db, miss->target);
if(info) {
if(!_alpm_pkg_find(alpm_pkg_get_name(info), trans->packages)) {
_alpm_log(PM_LOG_DEBUG, "pulling %s in the targets list\n",
alpm_pkg_get_name(info));
trans->packages = alpm_list_add(trans->packages, info);
}
} else {
_alpm_log(PM_LOG_ERROR, _("could not find %s in database -- skipping\n"),
miss->target);
}
}
FREELIST(lp);
lp = alpm_checkdeps(db, 1, trans->packages, NULL);
}
remove_prepare_cascade(trans, db, lp);
} else if (trans->flags & PM_TRANS_FLAG_UNNEEDED) {
/* Remove needed packages (which would break dependencies)
* from the target list */
remove_prepare_keep_needed(trans, db, lp);
} else {
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);
}
@@ -136,17 +184,20 @@ int _alpm_remove_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_REMOVE);
lp = _alpm_sortbydeps(trans->packages, 1);
/* free the old alltargs */
alpm_list_free(trans->packages);
trans->packages = lp;
if(trans->flags & PM_TRANS_FLAG_RECURSE) {
/* -Rcs == -Rc then -Rs */
if((trans->flags & PM_TRANS_FLAG_CASCADE) && (trans->flags & PM_TRANS_FLAG_RECURSE)) {
_alpm_log(PM_LOG_DEBUG, "finding removable dependencies\n");
_alpm_recursedeps(db, trans->packages, 0);
_alpm_recursedeps(db, trans->packages, trans->flags & PM_TRANS_FLAG_RECURSEALL);
}
EVENT(trans, PM_TRANS_EVT_CHECKDEPS_DONE, NULL, NULL);
if(!(trans->flags & PM_TRANS_FLAG_NODEPS)) {
EVENT(trans, PM_TRANS_EVT_CHECKDEPS_DONE, NULL, NULL);
}
return(0);
}
@@ -234,6 +285,7 @@ static void unlink_file(pmpkg_t *info, alpm_list_t *lp, pmtrans_t *trans)
snprintf(newpath, PATH_MAX, "%s.pacsave", file);
rename(file, newpath);
_alpm_log(PM_LOG_WARNING, _("%s saved as %s\n"), file, newpath);
alpm_logaction("warning: %s saved as %s\n", file, newpath);
return;
} else {
_alpm_log(PM_LOG_DEBUG, "transaction is set to NOSAVE, not backing up '%s'\n", file);

View File

@@ -1,469 +0,0 @@
/*
* server.c
*
* Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.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 <errno.h>
#include <time.h>
#include <string.h>
#include <limits.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <download.h>
/* libalpm */
#include "server.h"
#include "alpm_list.h"
#include "error.h"
#include "log.h"
#include "alpm.h"
#include "util.h"
#include "handle.h"
#include "package.h"
pmserver_t *_alpm_server_new(const char *url)
{
struct url *u;
pmserver_t *server;
ALPM_LOG_FUNC;
CALLOC(server, 1, sizeof(pmserver_t), RET_ERR(PM_ERR_MEMORY, NULL));
u = downloadParseURL(url);
if(!u) {
_alpm_log(PM_LOG_ERROR, _("url '%s' is invalid, ignoring\n"), url);
RET_ERR(PM_ERR_SERVER_BAD_URL, NULL);
}
if(strlen(u->scheme) == 0) {
_alpm_log(PM_LOG_WARNING, _("url scheme not specified, assuming http\n"));
strcpy(u->scheme, "http");
}
if(strcmp(u->scheme,"ftp") == 0 && strlen(u->user) == 0) {
strcpy(u->user, "anonymous");
strcpy(u->pwd, "libalpm@guest");
}
/* remove trailing slashes, just to clean up the rest of the code */
for(int i = strlen(u->doc) - 1; u->doc[i] == '/'; --i)
u->doc[i] = '\0';
server->s_url = u;
return server;
}
void _alpm_server_free(pmserver_t *server)
{
ALPM_LOG_FUNC;
if(server == NULL) {
return;
}
/* free memory */
downloadFreeURL(server->s_url);
FREE(server);
}
/* remove filename info from "s_url->doc" and return it */
static char *strip_filename(pmserver_t *server)
{
char *p = NULL, *fname = NULL;
if(!server) {
return(NULL);
}
p = strrchr(server->s_url->doc, '/');
if(p && *(++p)) {
fname = strdup(p);
_alpm_log(PM_LOG_DEBUG, "stripping '%s' from '%s'\n",
fname, server->s_url->doc);
*p = 0;
}
/* s_url->doc now contains ONLY path information. return value
* if the file information from the original URL */
return(fname);
}
/* Return a 'struct url' for this server, for downloading 'filename'. */
static struct url *url_for_file(pmserver_t *server, const char *filename)
{
struct url *ret = NULL;
char *doc = NULL;
int doclen = 0;
doclen = strlen(server->s_url->doc) + strlen(filename) + 2;
CALLOC(doc, doclen, sizeof(char), RET_ERR(PM_ERR_MEMORY, NULL));
snprintf(doc, doclen, "%s/%s", server->s_url->doc, filename);
ret = downloadMakeURL(server->s_url->scheme,
server->s_url->host,
server->s_url->port,
doc,
server->s_url->user,
server->s_url->pwd);
FREE(doc);
return(ret);
}
/*
* Download a list of files from a list of servers
* - if one server fails, we try the next one in the list
* - if *dl_total is non-NULL, then it will be used as the starting
* download amount when TotalDownload is set. It will also be
* set to the final download amount for the calling function to use.
* - totalsize is the total download size for use when TotalDownload
* is set. Use 0 if the total download size is not known.
*
* RETURN: 0 for successful download, 1 on error
*/
int _alpm_downloadfiles(alpm_list_t *servers, const char *localpath,
alpm_list_t *files, int *dl_total, unsigned long totalsize)
{
return(_alpm_downloadfiles_forreal(servers, localpath, files, 0, NULL,
dl_total, totalsize));
}
/*
* This is the real downloadfiles, used directly by sync_synctree() to check
* modtimes on remote files.
* - if mtime1 is non-NULL, then only download files if they are different
* than mtime1.
* - if *mtime2 is non-NULL, it will be filled with the mtime of the remote
* file.
* - if *dl_total is non-NULL, then it will be used as the starting
* download amount when TotalDownload is set. It will also be
* set to the final download amount for the calling function to use.
* - totalsize is the total download size for use when TotalDownload
* is set. Use 0 if the total download size is not known.
*
* RETURN: 0 for successful download
* 1 if the mtimes are identical
* -1 on error
*/
int _alpm_downloadfiles_forreal(alpm_list_t *servers, const char *localpath,
alpm_list_t *files, time_t mtime1, time_t *mtime2, int *dl_total,
unsigned long totalsize)
{
int dl_thisfile = 0;
alpm_list_t *lp;
int done = 0;
alpm_list_t *complete = NULL;
alpm_list_t *i;
ALPM_LOG_FUNC;
if(files == NULL) {
return(0);
}
for(i = servers; i && !done; i = i->next) {
pmserver_t *server = i->data;
/* get each file in the list */
for(lp = files; lp; lp = lp->next) {
struct url *fileurl = NULL;
char realfile[PATH_MAX];
char output[PATH_MAX];
char *fn = (char *)lp->data;
char pkgname[PKG_NAME_LEN];
fileurl = url_for_file(server, fn);
if(!fileurl) {
return(-1);
}
/* pass the raw filename for passing to the callback function */
strncpy(pkgname, fn, PKG_NAME_LEN);
_alpm_log(PM_LOG_DEBUG, "using '%s' for download progress\n", pkgname);
snprintf(realfile, PATH_MAX, "%s%s", localpath, fn);
snprintf(output, PATH_MAX, "%s%s.part", localpath, fn);
if(alpm_list_find_str(complete, fn)) {
continue;
}
if(!handle->xfercommand || !strcmp(fileurl->scheme, "file")) {
FILE *dlf, *localf = NULL;
struct url_stat ust;
struct stat st;
int chk_resume = 0;
if(stat(output, &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;
if (dl_total != NULL) {
*dl_total += st.st_size;
}
localf = fopen(output, "a");
chk_resume = 1;
} else {
fileurl->offset = (off_t)0;
dl_thisfile = 0;
}
/* libdownload does not reset the error code, reset it in
* the case of previous errors */
downloadLastErrCode = 0;
/* 10s timeout - TODO make a config option */
downloadTimeout = 10000;
dlf = downloadXGet(fileurl, &ust, (handle->nopassiveftp ? "" : "p"));
if(downloadLastErrCode != 0 || dlf == NULL) {
const char *host = _("disk");
if(strcmp(SCHEME_FILE, fileurl->scheme) != 0) {
host = fileurl->host;
}
_alpm_log(PM_LOG_ERROR, _("failed retrieving file '%s' from %s : %s\n"),
fn, host, downloadLastErrString);
if(localf != NULL) {
fclose(localf);
}
/* try the next server */
downloadFreeURL(fileurl);
continue;
} else {
_alpm_log(PM_LOG_DEBUG, "connected to %s successfully\n", fileurl->host);
}
if(ust.mtime && mtime1 && ust.mtime == mtime1) {
_alpm_log(PM_LOG_DEBUG, "mtimes are identical, skipping %s\n", fn);
complete = alpm_list_add(complete, fn);
if(localf != NULL) {
fclose(localf);
}
if(dlf != NULL) {
fclose(dlf);
}
downloadFreeURL(fileurl);
return(1);
}
if(ust.mtime && mtime2) {
*mtime2 = 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(output);
fileurl->offset = (off_t)0;
dl_thisfile = 0;
localf = fopen(output, "w");
if(localf == NULL) { /* still null? */
_alpm_log(PM_LOG_ERROR, _("cannot write to file '%s'\n"), output);
if(dlf != NULL) {
fclose(dlf);
}
downloadFreeURL(fileurl);
return(-1);
}
}
/* Progress 0 - initialize */
if(handle->dlcb) {
handle->dlcb(pkgname, 0, ust.size, dl_total ? *dl_total : 0,
totalsize);
}
int nread = 0;
char buffer[PM_DLBUF_LEN];
while((nread = fread(buffer, 1, PM_DLBUF_LEN, dlf)) > 0) {
if(ferror(dlf)) {
_alpm_log(PM_LOG_ERROR, _("error downloading '%s': %s\n"),
fn, downloadLastErrString);
fclose(localf);
fclose(dlf);
downloadFreeURL(fileurl);
return(-1);
}
int 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"),
realfile, strerror(errno));
fclose(localf);
fclose(dlf);
downloadFreeURL(fileurl);
return(-1);
}
}
if(nwritten != nread) {
}
dl_thisfile += nread;
if (dl_total != NULL) {
*dl_total += nread;
}
if(handle->dlcb) {
handle->dlcb(pkgname, dl_thisfile, ust.size,
dl_total ? *dl_total : 0, totalsize);
}
}
downloadFreeURL(fileurl);
fclose(localf);
fclose(dlf);
rename(output, realfile);
complete = alpm_list_add(complete, fn);
} else {
int ret;
int usepart = 0;
char *ptr1, *ptr2;
char origCmd[PATH_MAX];
char parsedCmd[PATH_MAX] = "";
char url[PATH_MAX];
char cwd[PATH_MAX];
/* build the full download url */
snprintf(url, PATH_MAX, "%s://%s%s", fileurl->scheme,
fileurl->host, fileurl->doc);
/* we don't need this anymore */
downloadFreeURL(fileurl);
/* replace all occurrences of %o with fn.part */
strncpy(origCmd, handle->xfercommand, sizeof(origCmd));
ptr1 = origCmd;
while((ptr2 = strstr(ptr1, "%o"))) {
usepart = 1;
ptr2[0] = '\0';
strcat(parsedCmd, ptr1);
strcat(parsedCmd, output);
ptr1 = ptr2 + 2;
}
strcat(parsedCmd, ptr1);
/* replace all occurrences of %u with the download URL */
strncpy(origCmd, parsedCmd, sizeof(origCmd));
parsedCmd[0] = '\0';
ptr1 = origCmd;
while((ptr2 = strstr(ptr1, "%u"))) {
ptr2[0] = '\0';
strcat(parsedCmd, ptr1);
strcat(parsedCmd, url);
ptr1 = ptr2 + 2;
}
strcat(parsedCmd, ptr1);
/* cwd to the download directory */
getcwd(cwd, PATH_MAX);
if(chdir(localpath)) {
_alpm_log(PM_LOG_WARNING, _("could not chdir to %s\n"), localpath);
return(PM_ERR_CONNECT_FAILED);
}
/* execute the parsed command via /bin/sh -c */
_alpm_log(PM_LOG_DEBUG, "running command: %s\n", parsedCmd);
ret = system(parsedCmd);
if(ret == -1) {
_alpm_log(PM_LOG_WARNING, _("running XferCommand: fork failed!\n"));
return(PM_ERR_FORK_FAILED);
} else if(ret != 0) {
/* download failed */
_alpm_log(PM_LOG_DEBUG, "XferCommand command returned non-zero status code (%d)\n", ret);
} else {
/* download was successful */
complete = alpm_list_add(complete, fn);
if(usepart) {
rename(output, realfile);
}
}
chdir(cwd);
}
}
if(alpm_list_count(complete) == alpm_list_count(files)) {
done = 1;
}
}
alpm_list_free(complete);
return(done ? 0 : -1);
}
/** 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)
{
pmserver_t *server;
char *filename, *filepath;
const char *cachedir;
ALPM_LOG_FUNC;
if(strstr(url, "://") == NULL) {
_alpm_log(PM_LOG_DEBUG, "Invalid URL passed to alpm_fetch_pkgurl\n");
return(NULL);
}
server = _alpm_server_new(url);
if(!server) {
return(NULL);
}
/* strip path information from the filename */
filename = strip_filename(server);
if(!filename) {
_alpm_log(PM_LOG_ERROR, _("URL does not contain a file for download\n"));
return(NULL);
}
/* find a valid cache dir to download to */
cachedir = _alpm_filecache_setup();
/* TODO this seems like needless complexity just to download one file */
alpm_list_t *servers = alpm_list_add(NULL, server);
alpm_list_t *files = alpm_list_add(NULL, filename);
/* download the file */
if(_alpm_downloadfiles(servers, cachedir, files, NULL, 0)) {
_alpm_log(PM_LOG_WARNING, _("failed to download %s\n"), url);
return(NULL);
}
_alpm_log(PM_LOG_DEBUG, "successfully downloaded %s\n", filename);
alpm_list_free(files);
alpm_list_free(servers);
_alpm_server_free(server);
/* 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,46 +0,0 @@
/*
* server.h
*
* Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _ALPM_SERVER_H
#define _ALPM_SERVER_H
#include "alpm_list.h"
#include "alpm.h"
#include <time.h>
#include <download.h>
/* Servers */
struct __pmserver_t {
/* useless abstraction now? */
struct url *s_url;
};
#define PM_DLBUF_LEN (1024 * 10)
pmserver_t *_alpm_server_new(const char *url);
void _alpm_server_free(pmserver_t *server);
int _alpm_downloadfiles(alpm_list_t *servers, const char *localpath,
alpm_list_t *files, int *dl_total, unsigned long totalsize);
int _alpm_downloadfiles_forreal(alpm_list_t *servers, const char *localpath,
alpm_list_t *files, time_t mtime1, time_t *mtime2, int *dl_total,
unsigned long totalsize);
#endif /* _ALPM_SERVER_H */
/* vim: set ts=2 sw=2 noet: */

File diff suppressed because it is too large Load Diff

View File

@@ -25,12 +25,12 @@
/* Sync package */
struct __pmsyncpkg_t {
pmsynctype_t type;
pmpkgreason_t newreason;
pmpkg_t *pkg;
void *data;
alpm_list_t *removes;
};
pmsyncpkg_t *_alpm_sync_new(int type, pmpkg_t *spkg, void *data);
pmsyncpkg_t *_alpm_sync_new(pmpkgreason_t newreason, pmpkg_t *spkg, alpm_list_t *removes);
void _alpm_sync_free(pmsyncpkg_t *data);
int _alpm_sync_sysupgrade(pmtrans_t *trans,

View File

@@ -25,17 +25,16 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/statvfs.h>
#include <unistd.h>
#include <errno.h>
/* libalpm */
#include "trans.h"
#include "alpm_list.h"
#include "error.h"
#include "package.h"
#include "util.h"
#include "log.h"
@@ -205,7 +204,7 @@ int SYMEXPORT alpm_trans_release()
/* unlock db */
if(handle->lckfd != -1) {
close(handle->lckfd);
while(close(handle->lckfd) == -1 && errno == EINTR);
handle->lckfd = -1;
}
if(_alpm_lckrm()) {
@@ -228,7 +227,6 @@ pmtrans_t *_alpm_trans_new()
CALLOC(trans, 1, sizeof(pmtrans_t), RET_ERR(PM_ERR_MEMORY, NULL));
trans->targets = NULL;
trans->packages = NULL;
trans->skip_add = NULL;
trans->skip_remove = NULL;
@@ -250,7 +248,6 @@ void _alpm_trans_free(pmtrans_t *trans)
return;
}
FREELIST(trans->targets);
if(trans->type == PM_TRANS_TYPE_SYNC) {
alpm_list_free_inner(trans->packages, (alpm_list_fn_free)_alpm_sync_free);
} else {
@@ -307,13 +304,7 @@ int _alpm_trans_addtarget(pmtrans_t *trans, char *target)
ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1));
ASSERT(target != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1));
if(alpm_list_find_str(trans->targets, target)) {
return(0);
//RET_ERR(PM_ERR_TRANS_DUP_TARGET, -1);
}
switch(trans->type) {
case PM_TRANS_TYPE_ADD:
case PM_TRANS_TYPE_UPGRADE:
if(_alpm_add_loadtarget(trans, handle->db_local, target) == -1) {
/* pm_errno is set by _alpm_add_loadtarget() */
@@ -335,8 +326,6 @@ int _alpm_trans_addtarget(pmtrans_t *trans, char *target)
break;
}
trans->targets = alpm_list_add(trans->targets, strdup(target));
return(0);
}
@@ -357,7 +346,6 @@ int _alpm_trans_prepare(pmtrans_t *trans, alpm_list_t **data)
}
switch(trans->type) {
case PM_TRANS_TYPE_ADD:
case PM_TRANS_TYPE_UPGRADE:
if(_alpm_add_prepare(trans, handle->db_local, data) == -1) {
/* pm_errno is set by _alpm_add_prepare() */
@@ -402,7 +390,6 @@ int _alpm_trans_commit(pmtrans_t *trans, alpm_list_t **data)
trans->state = STATE_COMMITING;
switch(trans->type) {
case PM_TRANS_TYPE_ADD:
case PM_TRANS_TYPE_UPGRADE:
if(_alpm_add_commit(trans, handle->db_local) == -1) {
/* pm_errno is set by _alpm_add_commit() */
@@ -463,7 +450,6 @@ int _alpm_runscriptlet(const char *root, const char *installfn,
char tmpdir[PATH_MAX];
char cwd[PATH_MAX];
char *scriptpath;
struct stat buf;
pid_t pid;
int clean_tmpdir = 0;
int restore_cwd = 0;
@@ -471,14 +457,14 @@ int _alpm_runscriptlet(const char *root, const char *installfn,
ALPM_LOG_FUNC;
if(stat(installfn, &buf)) {
if(access(installfn, R_OK)) {
/* not found */
_alpm_log(PM_LOG_DEBUG, "scriptlet '%s' not found\n", installfn);
return(0);
}
/* NOTE: popen will use the PARENT's /bin/sh, not the chroot's */
if(stat("/bin/sh", &buf)) {
if(access("/bin/sh", X_OK)) {
/* not found */
_alpm_log(PM_LOG_ERROR, _("No /bin/sh in parent environment, aborting scriptlet\n"));
return(0);
@@ -486,8 +472,8 @@ int _alpm_runscriptlet(const char *root, const char *installfn,
/* creates a directory in $root/tmp/ for copying/extracting the scriptlet */
snprintf(tmpdir, PATH_MAX, "%stmp/", root);
if(stat(tmpdir, &buf)) {
_alpm_makepath(tmpdir);
if(access(tmpdir, F_OK) != 0) {
_alpm_makepath_mode(tmpdir, 01777);
}
snprintf(tmpdir, PATH_MAX, "%stmp/alpm_XXXXXX", root);
if(mkdtemp(tmpdir) == NULL) {
@@ -574,8 +560,7 @@ int _alpm_runscriptlet(const char *root, const char *installfn,
if(!pipe) {
_alpm_log(PM_LOG_ERROR, _("call to popen failed (%s)"),
strerror(errno));
retval = 1;
goto cleanup;
exit(1);
}
while(!feof(pipe)) {
char line[PATH_MAX];
@@ -584,12 +569,13 @@ int _alpm_runscriptlet(const char *root, const char *installfn,
alpm_logaction("%s", line);
EVENT(trans, PM_TRANS_EVT_SCRIPTLET_INFO, line, NULL);
}
exit(0);
retval = pclose(pipe);
exit(WEXITSTATUS(retval));
} else {
/* this code runs for the parent only (wait on the child) */
pid_t retpid;
int status;
retpid = waitpid(pid, &status, 0);
while((retpid = waitpid(pid, &status, 0)) == -1 && errno == EINTR);
if(retpid == -1) {
_alpm_log(PM_LOG_ERROR, _("call to waitpid failed (%s)\n"),
strerror(errno));
@@ -636,15 +622,6 @@ unsigned int SYMEXPORT alpm_trans_get_flags()
return handle->trans->flags;
}
alpm_list_t SYMEXPORT * alpm_trans_get_targets()
{
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(handle->trans != NULL, return(NULL));
return handle->trans->targets;
}
alpm_list_t SYMEXPORT * alpm_trans_get_pkgs()
{
/* Sanity checks */

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