Compare commits

...

890 Commits

Author SHA1 Message Date
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
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
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
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
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
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
7786bf6024 Add deprecation warnings to gensync and updatesync
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-02-02 13:57:15 -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
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
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
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
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
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
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
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
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
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
Dan McGee
079f5a8346 Update configure.ac version for release
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-09 18:04:12 -06:00
Nathan Jones
3ddbdc4c1d Documentation updates
Document the following:

* -R can take a group
* -S can take a group and provision

I also split up the -S description into multiple paragraphs because it
was getting too large.

Signed-off-by: Nathan Jones <nathanj@insightbb.com>
[Dan: added some feedback from the ML, rewrapped lines]
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-08 16:05:01 -06:00
Dan McGee
504e6ebb87 NEWS: fix note about ABS
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-08 15:52:49 -06:00
Dan McGee
9dd016001e Remove upgradedelay and all code associated with it
It wasn't even implemented correctly, and it really doesn't have a use if
packagers just do their job correctly anyway for a distro. Let's not try to
solve a problem with the wrong solution now.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-08 15:49:52 -06:00
Dan McGee
a24c323aba Remove unused date element from pmpkg_t struct
We had an unused date element in the pmpkg_t struct (not builddate or
installdate). Kill it off and fix the one function that was using it.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-08 13:29:41 -06:00
Chantry Xavier
9a6361d31f Update NEWS with versioned conflicts and new DEP_MOD operators.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-01-08 13:29:29 -06:00
Dan McGee
dd5bc808ea makepkg: Fix issues with --asroot and building dependencies
The --asroot option was not passed to recursive calls of makepkg.

In addition, a 'cd' call was done only on the fakeroot branch instead of
both fakeroot and root branches. Move it outside the conditional.

Noticed-by: Karolina Lindqvist <karolina.lindqvist@kramnet.se>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-08 09:15:30 -06:00
Dan McGee
aa48be7223 Update translation-help with new translation policies
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-07 21:43:03 -06:00
Dan McGee
f438f7a8ff Documentation updates
Update description of path specifiers for both pacman and pacman.conf in
their respective manpages. Ensure it is obvious that they are absolute and
not relative paths.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-06 22:20:44 -06:00
Dan McGee
6025df6594 Asciidoc a few more of our informative files
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-06 16:14:18 -06:00
Dan McGee
6f86f46c96 Remove makeworld from pacman package
This is an Arch-specific tool (although others could find use in it), so
off to the standalone ABS package it goes.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-06 10:42:35 -06:00
Dan McGee
00c57ddae7 Remove stuff that was a little too Arch-specific from manpage footer
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-06 10:26:21 -06:00
Dan McGee
d53388fb90 install: install prototype PKGBUILD and install to datadir
Move the prototypes out of contrib/ and into the top level directory, and
install them to what is usually /usr/share/pacman/ on a package install.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-06 10:23:49 -06:00
Dan McGee
e0e33c329f Remove hardcoded DBEXT value from script
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-06 09:44:28 -06:00
Chantry Xavier
a71f4c4c6a conflict.c : fix for FS#8156, detect conflict between symlink and dir.
The previous fileconflict check (package vs filesystem) skipped the conflict
when the file on the filesystem was a directory or a symlink to a directory,
no matter what the file in the package was.
Now, the conflict will only be skipped if the file in the package is a
directory (so compatible with a dir or a dir symlink on the filesystem).

So in the case of 8156 (new fileconflict003 pactest for this case), instead
of silently ignoring the extraction of the test symlink, pacman will now
fail because of a file conflict between the test symlink in the pkg2 package
and the test directory on the filesystem.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-01-06 10:59:41 +01:00
Chantry Xavier
a27d7f6071 bugfix in pactest when creating a symlink at the top level.
Trying to make a symlink at the top level previously made pactest fail.
For example : "test -> test2/" as a file in a package.

The path to the test symlink was empty in this case, but the python code
still tried to chdir in "", which failed.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2008-01-06 10:33:17 +01:00
Dan McGee
1a0aaa20df Don't stat cachedir immediately
By attempting to stat the cachedir when we load the pacman config, pacman
bails out if it is a non-existant directory, even if it will never be
needed. This is unfortunate as it is only used for sync transactions anyway.
Instead, wait until we need it in _alpm_filecache_setup to actually do
anything.

Reported as FS#9096.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-05 17:39:38 -06:00
Dan McGee
5aa873edb6 sync.c: add sanity check so we don't dereference a null pointer
Originally noticed in FS#9024, but was fixed in previous changes anyway.
However, it doesn't hurt to still check it.

Also add a pactest from Chantry Xavier for the original problem to ensure
we can't reproduce it.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-05 17:35:43 -06:00
Chantry Xavier
85a8b150ed conflict.c : fix for upgrade042.
Thanks to the proactive backup handling, we don't need to add the moving
file to the skip_add list.
The backup handling will make sure nothing gets overwritten.

Ref: http://www.archlinux.org/pipermail/pacman-dev/2007-December/010610.html

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-05 16:49:09 -06:00
Dan McGee
14e4366c78 makepkg: add application/zip to the recognized types
The recent upgrade of magic.mime in the file program changed the mime type
output to application/zip instead of application/x-zip as it is a registered
type. Unfortunately we then just skipped zip file extraction becuase of this
change.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-05 16:44:43 -06:00
Gustavo Chain
728b601f7b scripts: extra exit() calls in usage() function
Remove the exit() calls from usage as they should be handled by the caller.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-05 16:44:43 -06:00
Dan McGee
f35a5cf174 doc: remove --ask option from pacman manpage
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-05 14:37:36 -06:00
Dan McGee
7417d9d81c doc: add symlink for repo-remove manpage on install
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-05 14:37:24 -06:00
Dan McGee
c26039240d Remove mentions of ABS from makepkg
Kill off some of the $ABSROOT stuff that was still hanging around in there.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-05 14:35:40 -06:00
Chantry Xavier
601a85082d add.c : fix upgrade026 pactest.
This was the case of the bash packaging error where a file was removed from
the package but not the backup array.
I just added a sanity check so that only the files from the backup array
that are also in the filelist are used.

I had to edit upgrade026 pactest slightly : it required the file to be
copied to .pacsave instead of moved. But just moving it should be enough, as
we agreed on the ML :
http://www.archlinux.org/pipermail/pacman-dev/2007-December/010440.html

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-05 13:47:49 -06:00
Matthias Gorissen
04472f925a Update of German translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-05 13:47:35 -06:00
Dan McGee
c18191ba5b Small code cleanups with indents/spaces
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-01 20:03:24 -06:00
Dan McGee
4abd710ec9 Remove gettext calls from debug-level messages
These used FUNCTION output level and not DEBUG, so I didn't catch them way
back when I removed those gettext calls. Remove them now (which exposed a
nice little memory access error elsewhere in the code). This should have a
slight speedup effect on the code too as we no longer have to make the
gettext call even when these messages aren't printed.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-01 20:03:24 -06:00
Dan McGee
860465b34b Add some more regular contributors to the AUTHORS file
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-01 20:03:24 -06:00
Dan McGee
553ce8323c Fix another usage of pkg_new in _alpm_sync_addtarget
Use _alpm_pkg_dup instead.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-01 20:03:24 -06:00
Dan McGee
d18686a563 Switch pkg_new -> pkg_dup in find_replacements
Ugh, it was a pain to figure out why the Total Removed Size was showing up
wrong in the output of removed packages, but this was why- we used a stupid
_alpm_pkg_new call instead of just duping the package. Fix this. In the long
run, we really need to figure out better ways to not duplicate all this
package information.

Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-01 20:03:24 -06:00
Chantry Xavier
ac0605b9c2 new upgade042 pactest + bugfix in chk_filedifference.
This adds a pactest for the relocation of a config file between two packages
(case of etc/profile moving from bash to filesystem).
While running this pactest, I found out that chk_filedifference didn't work
correctly with an empty list as second argument. So that's fixed now.

Ref: http://www.archlinux.org/pipermail/pacman-dev/2007-December/010610.html

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2008-01-01 20:03:18 -06:00
Karolina Lindqvist
dffa0654f2 Fix case where pacman asks for confirmation when it should not
There is another case where pacman-git asks for confirmation, when it should
not. It is when removing packages. If running with makeworld --noconfirm
--rmdeps the question will come to the log file, and never appear on the
console, so you can wait forever wondering what is happening.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-29 12:42:45 -06:00
Dan McGee
fbd88a8212 Remove .FILELIST generation from makepkg (and elsewhere)
This is something pacman can do on its own straight from the archive, and we
will reduce the chance of problems occurring becuase of inproper FILELIST
generation as we have had in the past with special characters in filenames.

Once we remove it from makepkg. we can remove any usage of it from all of
our other tools, including pacman, pactest, and contrib/ utilities.

Note that removing it from pacman uncovered a few other bugs anyway, so this
was probably a good move.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-29 11:58:23 -06:00
Chantry Xavier
01930400a5 add a new upgrade026 pactest for backup handling.
This is the bash case when the /etc/profile file was removed by error from
the package, but stayed in the backup array.

Ref:
http://www.archlinux.org/pipermail/arch-dev-public/2007-December/003556.html

Also fixed a little typo in add.c, but it's disabled code.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-12-29 11:17:20 -06:00
Dan McGee
b3c6bdda38 doc: rename manlink macro to linkman
Between AsciiDoc 8.2.2 and 8.2.3, the following change was made to the stock
Asciidoc configuration:

@@ -149,7 +153,10 @@
 # Inline macros.
 # Backslash prefix required for escape processing.
 # (?s) re flag for line spanning.
-(?su)[\\]?(?P<name>\w(\w|-)*?):(?P<target>\S*?)(\[(?P<attrlist>.*?)\])=
+
+# Explicit so they can be nested.
+(?su)[\\]?(?P<name>(http|https|ftp|file|mailto|callto|image|link)):(?P<target>\S*?)(\[(?P<attrlist>.*?)\])=
+
 # Anchor: [[[id]]]. Bibliographic anchor.
 (?su)[\\]?\[\[\[(?P<attrlist>[\w][\w-]*?)\]\]\]=anchor3
 # Anchor: [[id,xreflabel]]

This default regex now matches explicit values, and unfortunately in this
case manlink was being matched by just 'link', causing the wrong inline
macro template to be applied. By renaming the macro, we can avoid being
matched by the wrong regex.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-29 00:24:15 -06:00
Dan McGee
26c05b1c8c Ensure that manpages are always distributed and installed
Commit 012f793978 was a bit misguided in its
thinking, and resulted in a package built without asciidoc enabled not
installing the manpages to the system on a 'make install' operation. Fix
this behavior by making manpages required in a normal build, and in order to
disable their existence, the '--disable-doc' option must be used.

Hopefully this solves manpage issues for both developers and package
builders while allowing as much flexibility as possible.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-28 20:06:58 -06:00
Giovanni Scafora
fdab7207e2 Updated Italian translation
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-28 20:01:21 -06:00
Chantry Xavier
c913c53322 libalpm/add.c: disable buggy backup handling code that didn't do anything.
As I mentioned earlier on the ML :
http://www.archlinux.org/pipermail/pacman-dev/2007-December/010416.html
the first part of commit 843d368ef6 had no effect because of a bug.

So I fixed the bug, but since this would change backup handling behavior,
and possibly require other bigger changes to work right, I decided to just
disable that part temporarily, and left a TODO in the code.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-28 19:57:11 -06:00
Chantry Xavier
73aa6b610e fix two broken pactests because of date localization.
query002 and sync1100 had PACMAN_OUTPUT rules that looked at the
build/install date (localized).
Instead of looking at the month name, it will now check the year, which
should be safer.
I also had to add another pactest (query005) for keeping the same coverage.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-12-28 19:56:29 -06:00
Chantry Xavier
630541a72e french translation : one broken message caused a segfault.
pacman segfaulted on sync012 pactest because of one broken translation.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-12-28 19:56:14 -06:00
Chantry Xavier
457692b928 libalpm/remove.c : switch back to lstat usage.
commit b55abdce7a changed every instance of lstat to alpm_stat to remove an
eventual trailing /, but in remove.c, this is not wanted.

Ref: http://www.archlinux.org/pipermail/pacman-dev/2007-December/010451.html

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-28 19:55:38 -06:00
K. Piche
c84feb92db Makepkg missing check for empty pkgname
I thought it was wierd that makepkg didn't do a sanity check for the
$pkgname.  This makes for a simple first try at a GIT patch.

Signed-off-by: K. Piche <kevin@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-28 19:54:45 -06:00
Allan McRae
14d6832ef2 Allow NULL parameter in alpm_trans_commit
Fixes FS#7380: alpm crashes on passing NULL to alpm_trans_commit in
a sync operation.  Adds check that data parameter is not NULL in
several functions.

Signed-off-by: Allan McRae <mcrae_allan@hotmail.com>
[Dan: fix whitespace]
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-28 19:46:21 -06:00
Allan McRae
cca4ec647e Add remove counterparts to alpm_option_add_* functions
Fixes FS#7428. Added functions to remove cachedir, noupgrade, noextract,
ignorepkg, holdpkg and ignoregrp.

Signed-off-by: Allan McRae <mcrae_allan@hotmail.com>
[Dan: fix whitespace]
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-28 19:43:59 -06:00
Dan McGee
d8a10a8e72 Update path for Belnet mirror
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-28 19:39:44 -06:00
Dan McGee
9addd88a7d Do not move man pages to a non-FHS location
Fixes Arch Linux bug FS#8839.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-21 15:47:30 -06:00
Nathan Jones
7fdb2ee48a Check ignored packages in _alpm_sync_addtarget().
This will allow someone to install a group but ignore individual
packages inside the group.

Signed-off-by: Nathan Jones <nathanj@insightbb.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-21 11:09:24 -06:00
Nathan Jones
b43301428e Fix memory leak in shortest_delta_path.
It is possible for the if statement to never succeed, causing path to
never be freed. It is also possible for the if statement to succeed more
than once per loop, which could have caused a segfault.

Signed-off-by: Nathan Jones <nathanj@insightbb.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-21 11:08:05 -06:00
Vojtěch Gondžala
9a6582a8fd Add new Czech translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-21 11:05:44 -06:00
Chantry Xavier
020629a371 Finish french translation.
It's probably far from perfect, but at least I tried to translate
everything.
I noticed a missing newline at libalpm/trans.c , line 573 :
_alpm_log(PM_LOG_ERROR, _("call to popen failed (%s)"),

I don't think it's possible to fix it now (string freeze?), so I didn't.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-12-21 11:05:44 -06:00
Giovanni Scafora
3128535d1b Italian translation fixes
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>

	modified:   po/it.po
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-21 11:05:44 -06:00
Chantry Xavier
b4a84e4f1d testdb : fix wrong usage of checkdeps.
During last rebase where the checkdeps prototype changed, I messed up the
arguments order (remove list, then upgrade list). That made testdb totally
useless.
Also remove the newline that was manually added by the log callback.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-21 11:05:44 -06:00
Dan McGee
741fa31603 Remove abs from the pacman repository
abs has always been an Arch Linux specific tool, and although it is used
primarily by pacman and makepkg, it should not be included with a distro-
agnostic tarball. In addition, maintenance of the script would be better
outside of pacman and would allow for more frequent updates.

This also facilitates our move away from a cvsup/csup dependent tool for
syncing PKGBUILDs.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-21 11:05:38 -06:00
Nagy Gabor
c0845db8f7 Updated Hungarian translation
1 untranslated message translated and 1 message fixed

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-20 08:05:54 -06:00
Dan McGee
8e53cea8f8 Update PKGBUILD manpage to give info on scriptlet arguments
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-19 23:41:17 -06:00
Dan McGee
25072219b5 Fixes to allow make distcheck to work again
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-19 23:40:25 -06:00
Dan McGee
6058a225b6 More updates to the NEWS file (add bug numbers, etc.)
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-19 21:12:26 -06:00
Chantry Xavier
d4f170623b Update french translation.
Only the messages in pacman frontend were updated, and it's probably not
perfect yet, but it's a start.
There are 160 untranslated msg left for the scripts / tools.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-12-19 18:21:59 -06:00
Chantry Xavier
ebae8bd009 update of translation-help and fix a typo in gensync.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-12-19 18:21:27 -06:00
Nagy Gabor
b06ce1e8ad Add PM_DEP_MOD_GT and PM_DEP_MOD_LT to documentation
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-19 14:48:10 -06:00
Nagy Gabor
13dd2864ca PM_DEP_MOD_LT and PM_DEP_MOD_GT depmods added
You can use foo<2.0 and foo>2.0 as depend
add046.py and add047.py pactests were added to check this

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-19 14:48:05 -06:00
Nagy Gabor
47f4c5a480 Updated Hungarian translation
* Updated libalpm translation
* Regenerated hu.po files, because the 'call-for-translators version' was outdated

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-19 13:30:04 -06:00
Dan McGee
a2cf4701ea Change all bug references in NEWS to be 'FS#' references
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-18 20:32:06 -06:00
Dan McGee
64fd3fd324 Initial updates to NEWS file for 3.1.0 release
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-18 20:24:40 -06:00
Giovanni Scafora
16ed9ad19b Updated Italian Translation
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>

	modified:   lib/libalpm/po/it.po
	modified:   po/it.po
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-18 18:27:23 -06:00
Aaron Griffin
a4b8138797 Allow unreadable Include files to be non-fatal
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
[Dan: remove unused variable, make parseconfig static]
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-17 20:56:35 -06:00
Allan McRae
e5cdac7d48 Only query pacman upgrade when performing actual upgrade
Fixes FS#7147.  Do not ask about upgrading pacman when -w and -p
flags are used.

Signed-off-by: Allan McRae <mcrae_allan@hotmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-17 20:44:21 -06:00
Giovanni Scafora
a11b2065af Updated Italian Translation for pacman 3.1
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-17 20:43:12 -06:00
Dan McGee
ce424a356f Check for errors on descfile extraction
If /tmp was full during the early stages of package extraction, we were
unable to extract the package description file with the call to
archive_read_data_into_fd(archive, fd) becuase we never checked the return
code. Add a check to ensure the extraction was successful and print and
return an error if it was not instead of falling through to a possibly
untrue error message.

This should fix FS #8885.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-16 22:45:57 -06:00
Dan McGee
20bad3b839 Set the default packager to "Unknown Packager"
There is no real reason to make it look like someone that can't bother to
set the packager variable is official in any way, so remove the Arch Linux
reference from makepkg.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-16 22:00:12 -06:00
Aaron Griffin
f5478d68a6 Add real scriptlet checking for pactest
Due to commit da1222de2e30aabcae9d17bbfa10bbf0672338af, we can now use
fakechroot to completely run scriptlet pactests

Use "which" functionality so as not to REQUIRE it for all users

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-10 23:06:48 -06:00
Aaron Griffin
685a659656 Add "which" path searching functionality to pactest
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-12-10 23:06:03 -06:00
Aaron Griffin
9558639d80 popen does NOT require /bin/sh in a subchroot
I appears that when chrooted, the /bin/sh used by popen is that of the parent
process. This is true until the process forks once chrooted, which we do not
want to do.

As such, this actually makes things nicer. We don't need a /bin/sh in a chroot
to run install scriptlets, and don't need to check for it in the root directory

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-10 23:03:16 -06:00
Aaron Griffin
f8b113ed97 Fail sanely on OUTPUT rules when --nolog is passed
Check for existence of the logfile first, and output an error if not found

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-10 23:02:20 -06:00
Aaron Griffin
565d2eeed5 Correct scriptlet usage pattern
The new pattern is as follows:
    . /path/to/scriptlet
    post_upgrade X Y

This requires less frameworking in the install scripts (the three lines that
shift and eval a function are nasty)

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-10 23:02:07 -06:00
Dan McGee
9781d0d637 Update GNU GPL boilerplate and copyright dates
Update the GPL boilerplate to direct people to the GNU website for a copy of
the license, as well as bump all of Judd's copyrights to 2007.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-10 22:55:39 -06:00
Dan McGee
572bdb5c99 pactest: if we are root, don't use fakeroot
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-10 21:17:39 -06:00
Dan McGee
bd83a1fd85 Updates to PKGBUILD manpage
Make the manpage a little more distro agnostic by referring to ABS in the
context of Arch Linux, and saying that prototype files are also available
with the pacman source.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-10 21:14:55 -06:00
Dan McGee
90d72bd24f Rename prototype install file
Most (sane) people name their install file pkgname.install, and this move of
the prototype reflects that.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-10 21:14:55 -06:00
Dan McGee
7249c08bdf Improve changelog handling through addition of open/read/close functions
Thanks to Allan for inspiring all this work on what was one little TODO item
in the codebase. :)

Change changelog handling so we can now dump a changelog from both installed
packages and package files (fixes FS#7371). We do this by moving all of the
machinery to the backend where it should have been in the first place.

The changelog reading is now done through a open/read/close interface
similar to the fopen/fread/fclose functions (can you guess how it is done?).
It is buffered by the frontend, so programs using the library can read as
much or as little as they want at a time.

Unfortunately, I could not implement a changelog_feof function due to some
shortcomings of libarchive. However, I left the stub code in there,
commented out, in case it becomes possible later or anyone wants to take a
stab at it.

Original-work-by: Allan McRae <mcrae_allan@hotmail.com>
Improved-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-09 11:33:08 -06:00
Giovanni Scafora
815a2ead3e Updated Italian Translation
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-09 11:23:56 -06:00
Chantry Xavier
b6acb30aae src/pacman/: use the FREELIST macro when possible.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-08 21:56:40 -06:00
Chantry Xavier
4437033d2a testdb.c : add vim modeline according to HACKING, and reindent the file.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-08 21:55:54 -06:00
Chantry Xavier
2ef78355fc _alpm_unpack: return 1 when the file is not found.
If _alpm_unpack has a specific file to extract (not NULL), but doesn't find
it, it'll now return 1, for indicating the failure.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-08 21:54:46 -06:00
Chantry Xavier
97fe3d3f5a libalpm/server.c : fix segfault when downloading failed.
The alpm_list_free(complete) needs to be done OUTSIDE the loop walking
through the server list.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-07 09:45:20 -06:00
Dan McGee
f0664fbd93 Update pacman manpage with description of --clean option
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-05 20:34:38 -06:00
Chantry Xavier
c49b2a00d6 pacman/sync.c : improve the sync db cleanup feature.
This feature (introduced by b118ce55bd as a
part of -Sc) could actually be helpful in the 3.0 -> 3.1 transition, because
all sync dbs will be left in /var/lib/pacman/, while the updated ones will
go to /var/lib/pacman/sync/.
So it'll now clean everything in /var/lib/pacman/, and only the unused
databases in /var/lib/pacman/sync/ (with the exception of local/ and sync/
in both cases).

Note: This feature is undocumented. I wonder if moving it to another option,
something like -S --dbclean, wouldn't help for documenting it.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-05 19:57:35 -06:00
Nagy Gabor
43eacf2852 Remove duplicated PM_TRANS_CONV_INSTALL_IGNOREPKG message
Now alpm_checkdeps first search for literals, then search for no-literal satisfiers

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
[Dan: fix spelling of INTALL, fix line wrapping]
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-05 11:28:47 -06:00
Nathan Jones
145c8eb52d Update zsh completion.
Update zsh completion file to version 0.5-2 from AUR and add the new
options in pacman 3.1.

Signed-off-by: Nathan Jones <nathanj@insightbb.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-05 11:23:23 -06:00
Allan McRae
9615d82343 Compress hard linked man pages
This fixes FS#5392.  If hard links are present for a man page, all
other hard linked files are removed, the man page is zipped and the
hard links are updated to the newly compress man page.

Signed-off-by: Allan McRae <mcrae_allan@hotmail.com>
[Dan: use find -samefile option, don't fail if one of mandirs is
nonexistent]
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-04 18:55:44 -06:00
Chantry Xavier
87d95f14f7 libalpm/backup.c : simple refactoring.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-12-04 17:59:45 -06:00
Giovanni Scafora
afdf3724d9 Updated Italian translation for pacman 3.1
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>

	modified:   po/it.po
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-04 15:14:38 -06:00
Dan McGee
874f3379ff Update some errors in messages found during localization
Also perform the updates in the message files so we don't break
translations.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-04 09:56:28 -06:00
Nagy Gabor
665b61082e Updated Hungarian translation
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-04 09:49:40 -06:00
Dan McGee
f42e223386 pacman/sync.c: mark sync_trans as static
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-03 22:50:33 -06:00
Dan McGee
d6354ff248 Oops- forgot to ever set init to 1 in setlibpaths()
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-03 22:17:19 -06:00
Chantry Xavier
72dae72691 Delay output during progress bar
This fixes the output issue related to the progress bar by delaying the
output. We can decide later (post-release) if we like this method or we want
to switch to something else.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
[Dan: just some minor cleanups]
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-03 18:43:12 -06:00
Giovanni Scafora
0d1cb03756 Update it translation for 3.1
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-03 09:11:34 -06:00
Dan McGee
f07a800fab Merge branch 'maint' into working 2007-12-02 23:07:18 -06:00
Jeff Bailes
4ce004a846 Update en_GB translation for 3.1
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-02 22:36:18 -06:00
Dan McGee
3170106149 Update all translation files in anticipation of 3.1 release
Update all of the pot and po files with the latest messages available.

Translators- you are encouraged to do this as well every time you update the
translation, and the directions in 'translation-help' should help. Also feel
free to delete all the old translations that end up at the bottom of these
files and only clutter things up.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-02 21:44:40 -06:00
Chantry Xavier
594f1fbbb1 alpm_list : change the alpm_list_find* to return the matching item.
alpm_list_find and alpm_list_find_ptr will now return a void *, and
alpm_list_find_str will return a char *, instead of an int.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-02 18:12:41 -06:00
Dan McGee
94aa8b1f16 Add a lot more tests (and some pactest fixes) to -Si and -Qi tests
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-02 18:11:23 -06:00
Dan McGee
e8eff3ef97 Add more pactests to increase code coverage
These new tests test the following ops at least once:
-Ss, -Si, -Sl, -Sp, -Qs, -Qi, -T

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-02 17:56:48 -06:00
Dan McGee
0b6d73a5b4 Remove _alpm_depmiss_isin
This is unneeded now that commit 2ed6b482d2
has eliminated the last user of this function.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-02 17:25:34 -06:00
Dan McGee
7341d09541 Add 4 new pactests to get better code coverage by pactest
I started playing around with gcov today and it showed a few places in the
code that we don't test at all. This is the start of ensuring that we
execute most of the code in our codebase.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-02 17:24:22 -06:00
Dan McGee
32e625db14 parseconfig: refactor duplicate code out into a function
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-02 15:10:18 -06:00
Dan McGee
3017b71cb5 Remove "done" messages from frontend callback function
This should simplify our output a bit when it comes to determining whether
or not we need a newline in our output. A "done" message was almost always
immediately followed by another start message anyway (or some other output),
so it really isn't necessary.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-02 13:48:49 -06:00
Dan McGee
aa2d0d7114 Add --ignoregroup to completion files
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-02 13:11:39 -06:00
Dan McGee
8a474e8735 Fixes for the ineptitude of libalpm DB registration
When a DB is "registered" in libalpm, it goes and tries to create paths and
other BS which is stupid, but a pain in the butt to fix. For now, work
around this terrible behavior by ensuring our paths are always set before we
call any alpm_db_register function.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-02 12:56:57 -06:00
Dan McGee
4845207fd4 Make pacman path handling (hopefully) a bit more intuitive
I made pacman path handling a bit odd with my rootdir changes a while back
in order to increase flexability. However, it had a bit of a drawback in
that dbpath/logfile/etc. would not default to being under the rootdir if
that was the only parameter you specified in the config file or on the
command line. (Note: logfile handling was always broken due to the explicit
logfile line required in config files)

Pacman now works as follows:
if a rootdir is specified but not dbpath or logfile:
  attempt to place the logfile and dbpath in their default locations under
  root
if an explicit dbpath/logfile is specified:
  interpret these as absolute paths, regardless of the rootdir setting
if nothing is specified:
  fall back to configured defaults

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-02 12:20:55 -06:00
Chantry Xavier
250331a636 Add new --needed option for -S.
During a pacman operation such as a group install, pacman can ask several
questions such as "local version is up to date. Upgrade anyway?". They are
usually all answered either by yes or by no:
* yes when you want to reinstall all the targets.
* no when you only want to install the missing ones (either because you are
installing a group, or because you are copying a pacman -S line from wiki or
whatever).

So instead of asking this question for each target, it is now now configured
with a flag.  Yes will be the default -S behavior, No will be achieved with
the --needed flag.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-02 11:14:13 -06:00
Nagy Gabor
c15f7710de Unify dump_pkg_full in pacman [-Si, -Qip, -Qi and -Qii]
dump_pkg_sync is now a trivial wrapper for dump_pkg_full
Some smaller changes:
* string_display function added to util.c [prints None in case of empty string]
* Filename field added to -Qip
* rename License to Licenses
* 'Compressed Size' used instead of 'Download Size' for -Qip

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
[Dan: fix whitespace errors, spacing issues, const modifiers]
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-01 11:58:07 -06:00
Nagy Gabor
f19820cba8 New sync1005 and sync1006 pactests
This pactest checks what happens if a package exists in two sync repos.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
[Dan: added sync1006, same test with different versions]
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-01 11:29:41 -06:00
Chantry Xavier
22c2043160 Minor fixes in sync.c and deps.c.
* memleak found by Nagy in checkdeps
* an useless line found by Nagy in resolvedeps
* data wasn't set to the missing dependencies in sync_prepare
* use the MALLOC macro in resolvedeps

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-01 11:10:22 -06:00
Aaron Griffin
5f811dc020 Ensure 0644 permissions for install and changelog files
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-12-01 10:43:16 -06:00
Dan McGee
cff1e2a58f Remove alpm_depcmp DEBUG output
alpm_depcmp is simple enough that we shouldn't need constant debug logging,
and the logging we do have in there negatively impacts our speed regardless
of whether we actually are seeing it or not. If it ever needs debugging, it
would be trivial to reimplement it by just temporarily reverting this
commit.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-30 23:02:06 -06:00
Dan McGee
e95e346ac7 Remove some null checks in _alpm_checkdeps
Hopefully these are unnecessary, as they were probably added originally to
cover up a problem instead of finding the root cause. I'd rather fail hard
in these cases anyway.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-30 22:57:47 -06:00
Nagy Gabor
2ed6b482d2 alpm_checkdeps clean-up
No bugfixes, just makes the code human-readable

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-30 21:17:04 -06:00
Dan McGee
5c21f0f152 Move requiredby computation before any display starts
This should reduce the chances of people thinking pacman hung during the
middle of something.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-29 16:16:13 -06:00
Nagy Gabor
72f40b3876 _alpm_checkconflicts split
_alpm_innerconflicts: check for target<->target conflicts
_alpm_outerconflicts: check for target<->localpkg conflicts
This will be useful in sync.c clean-up and in testdb.c

As an application the patch also fixes a misleading message (and a memleak)
in add.c

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>
2007-11-25 16:14:16 -06:00
Chantry Xavier
d683033d3e pacman/query.c : -Qo optimization.
I didn't understand why realpath was called on every files of every filelist
in query_fileowner :
ppath = resolve_path(path);

It turns out this is needed for the diverted files. For example, cddb_get
installs /usr/lib/perl5/site_perl/5.8.8/CDDB_get.pm which actually ends in
/usr/lib/perl5/site_perl/current/CDDB_get.pm .

And for making pacman -Qo /usr/lib/perl5/site_perl/current/CDDB_get.pm ,
realpath has to be called on both the target, and the file in the filelist.

However, realpath is costly, and calling it on every single file resulted
in a poor -Qo performance. Worst case :
pacman -Qo /lib/libz.so.1  0.35s user 1.51s system 99% cpu 1.864 total

So I did a little optimization to avoid calling realpath as much as
possible: first compare the basename of each file.

Result:
src/pacman/pacman -Qo /lib/libz.so.1  0.24s user 0.05s system 99% cpu 0.298
total

Obviously, the difference will be even bigger at the first run (no fs
cache), though it's quite scary on my system : 1.7s vs 40s previously.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-25 16:13:56 -06:00
Chantry Xavier
11133da587 Move mbasename from pacman.c to util.c
This function can be useful in other places.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-25 16:13:30 -06:00
Nagy Gabor
7d37d9278d Fix for sync1003 and sync1004 pactests
checkdeps and resolvedeps now take both a remove list and an install list as
arguments, allowing dependencies to be calculated correctly.

This broke the sync990 pactest, but this pactest used dependencies and
provides in an unusual way, so it has been changed.

Dan: the sync990 pactest was just plain wrong. It didn't satisfy the
dependencies correctly, so should never have succeeded.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
[Dan: some variable renaming, clarification in commit message]
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-25 15:29:37 -06:00
Artyom
1e9a1a0292 Add -q/--quiet option for controlling output.
Currently this only affects -Ss, -Sl, and -Q to output less information (only
package names).

In the future, we can reuse this flag for other things as well.

[Aaron: rewritten as a front-end flag]
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
[Dan: squashed commits together]
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-25 14:33:32 -06:00
Dan McGee
c36b0f32c6 Fix memleak when querying package file(s)
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-25 14:12:00 -06:00
Aaron Griffin
6e8daa553b Force mode of all database files to 644
In the case of a packaging error where install or changelog had bad permissions,
pacman respected the original permissions without trying to fix it - this means
that some operations (changelog) artificially required root permissions to run

In addition, minor function housekeeping on _alpm_unpack

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-11-25 14:03:13 -06:00
Aaron Griffin
c7879e77a7 Additionally search for non-regex strings on a db search operation
This closes out FS#6500 and covers cases where the package names contain regex
characters (i.e. the case of dvd+rw-tools)

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-11-25 14:02:25 -06:00
Aaron Griffin
7af1f66441 Make the download failure message more clear
Use the word "disk" in place of the host name for local files

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-11-25 14:02:03 -06:00
Chantry Xavier
8d9ee923ec Fix several memleaks, mostly related to errors handling.
* The frontend calls alpm_trans_prepare(&data), and in case of errors,
receive the missing dependencies / conflicts / etc in the data pointer.
It apparently needs to free this structure totally with :
alpm_list_free_inner(data, free)
alpm_list_free(data)

So I added alpm_list_free_inner(data, free) in
pacman/{sync.c,remove.c,add,c}

* in _alpm_sync_prepare, the deps and asked lists were not freed in case
of errors (unresolvable conflicts).
Besides the code for handling this case was duplicated.

* in _alpm_remove_commit, free was used instead of alpm_list_free for
newfiles.

* newline fix in pacman/sync.c

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-25 14:01:19 -06:00
Chantry Xavier
8bee526d28 Fix a memleak in _alpm_sync_free.
An alpm_list_free call was missing.
Also make use of alpm_list_free_inner in both _alpm_sync_free and
_alpm_trans_free.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-25 14:00:38 -06:00
Dan McGee
f5d2150e9d Remove -F/--freshen operation
This operation made sense in the days before sync DBs existed, but it no
longer has the same usefulness it once did.

Signed-off-by: Dan McGee <dan@archlinux.org>
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-11-21 11:51:17 -06:00
Dan McGee
0144b2ed29 Add some additional files to .gitignore
*.lineno - these show up when you use a shell less-featured than bash
cscope.*.out - These show up when you build reverse databases using -q

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-21 10:35:27 -06:00
Nagy Gabor
7cf28a7595 Improved 'dependency cycle' warning
From now on libalpm informs user about packages which will be
installed/removed in wrong order.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-21 10:25:52 -06:00
Chantry Xavier
83fa6aa289 Remove duplicated get_upgrades function, use sysupgrade instead.
The alpm_get_upgrades was exactly the same as find_replacements +
_alpm_sync_sysupgrade, except that it automatically made the eventual
replacements, without asking the user : Replace %s with %s/%s? [Y/n]

The replace question, asked in find_replacements. can now be skipped by
using a NULL trans argument, so that we get the same behavior as with
alpm_get_upgrades.

So alpm_db_get_upgrades() can now be replaced by
alpm_sync_sysupgrade(db_local, syncdbs).

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-21 00:05:05 -06:00
Dan McGee
3e9c590480 doc: use source highlighter on PKGBUILD guide, update wrong example text
Note that if you are building manpages with asciidoc now, you must also
have source-highlight installed for it to correctly generate everything.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-20 23:40:20 -06:00
Dan McGee
5f28996220 Turn HACKING into an asciidoc document
Add some hints so we can use asciidoc on the HACKING document. It is still
readable as text, but a simple 'asciidoc HACKING' command will give you a
nice pretty guide now.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-20 23:31:41 -06:00
Nagy Gabor
4696ad6cad New alpm_list_join function
This O(1) function joins 2 lists.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-20 23:31:40 -06:00
Chantry Xavier
967a78f5e4 Update PKGBUILD manpage with versioned conflicts.
As the b96922679e commit showed with two
pactests (which were renamed to depconflict110/111), versioned conflicts are
now possible.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-20 23:31:40 -06:00
Dan McGee
aa942a126b Add missing header includes for setlocale
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-20 11:01:56 -06:00
Dan McGee
4576000c39 Spruce up HACKING a bit
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-19 15:47:20 -06:00
Nagy Gabor
84ebf82319 Versioned provisions.
This patch introduces versioned provisions in "provision 1.0-1" format.
_alpm_db_whatprovides was modified accordingly (added sync500.py),
alpm_depcmp was modified accordingly (add043.py passes now; added add044.py
and add045.py).

Notes:
alpm_db_search now uses the whole versioned %PROVIDES% string in its search.
debug logging was simplified in alpm_depcmp.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
[Xavier: fixed a few typos, duplicate const strings with strdup before
modifying them, put some debugging back in alpm_depcmp, minor code cleanups
(var/function renaming), added a note in PKGBUILD man page.]
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
[Dan: made strcmp checks clearer, added a comment]
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-18 20:05:51 -06:00
Dan McGee
23b4e0270b Fix sh and scriptlet interaction
dash doesn't pass positional parameters to sourced scripts, causing install
scripts to fail. Instead of sourcing the script, make it executable and
call it directly which allows positional parameters to be passed correctly.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-18 16:49:02 -06:00
Nagy Gabor
2aa7e69da9 Add the pmconflict_t type.
pmdepmissing_t was used for two totally different things :
missing dependencies, and dependency conflicts.
So this patch simply adds a type for dep conflicts,
and convert the code to use it.

This fix the TODO in conflict.c :
/* TODO WTF is a 'depmissing' doing indicating a conflict? */

Additionally, the code in conflict.c now eliminates the duplicated conflicts.
If pkg1 conflicts with pkg2, and pkg2 conflicts with pkg1, only one of them will be stored.

However the conflict handling in sync_prepare (sync.c) is still very asymetrical, and very ugly too.
This should be improved in the future (there is already a pending patch from Nagy that cleans it a lot).

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-11-18 12:42:39 -06:00
Chantry Xavier
65fb99133d Simple s/conflict/fileconflict/ renaming.
The names related to conflicts are misleading :
For dependencies conflicts, the type is pmdepmissing,
and the function names contain just "conflict".

For file conflicts, the type is pmconflict,
and some functions contained just "conflict", some others "fileconflict".

So this is the first step for improving the situation.
Original idea/patch from Nagy, but the patch already didn't apply anymore,
so I did it again.
The main difference is that I kept the conflictype, with the following renaming :

pmconflicttype_t -> pmfileconflicttype_t
PM_CONFLICT_TYPE_TARGET -> PM_FILECONFLICT_TARGET
PM_CONFLICT_TYPE_FILE -> PM_FILECONFLICT_FILESYSTEM

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-11-18 12:42:34 -06:00
Chantry Xavier
829a7b904d Minor rephrasing of the question asked by -Sc.
Suggested by stonecrest on irc :
'I think "uninstalled" would be better, as it implies that the package was once
installed and since removed. Otherwise a user might wonder why there are
non-installed pkgs in cache'

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-11-18 12:37:52 -06:00
Dan McGee
5f0c241987 POSIX shell does not specify meaning of source operation
Just use '.' operator instead. Oops.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-18 12:37:29 -06:00
Chantry Xavier
b118ce55bd Extend the -Sc operation to also clean up unused sync databases.
We discussed this with stonecrest on IRC :
20:46   stonecrest >> someone brings up a good point.. why aren't repos that aren't in the pacman.conf removed from /var/lib/pacman?
20:46   stonecrest >> i have 118mb and 24 dirs in there, but only 5 repos at present
21:26   stonecrest >> shining: i guess you could prompt the user on deleting every dir in /var/lib/pacman.. since it shouldn't happen that often except for
                      the first time
21:30   stonecrest >> could be part of pacman -Sc.. what else were you thinking?

I already heard about this before, but it sounded dangerous to me. I didn't even think about a simple prompt.
I also didn't know where this code would fit. And it fits well with -Sc, I borrowed most of the code from sync_cleancache.

Example session :

Cache directory: /var/cache/pacman/pkg/
Do you want to remove non-installed packages from cache? [Y/n] n
Database directory: /var/lib/pacman/
Do you want to remove unused repositories? [Y/n]
Do you want to remove /var/lib/pacman/sync/pacman-git? [Y/n]
Do you want to remove /var/lib/pacman/sync/deltatest? [Y/n]
Database directory cleaned up

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-18 12:37:16 -06:00
Nagy Gabor
55a7455135 libalpm/deps.c : improves IgnorePkg handling in resolvedeps.
resolvedeps will now search for other satisfiers
when we don't let it add a package from IgnorePkg.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-11-18 12:37:16 -06:00
Chantry Xavier
8f824e70bb Remove the IgnorePkg handling from alpm_pkg_compare_version.
And check the IgnorePkg handling is done correctly in the other places.
For example, -Qu and -Su will automatically skip the ignored packages (-Su will print a warning),
but -S will install ignored packages anyway, because it was asked explicitly.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-11-18 12:37:16 -06:00
Dan McGee
e174865bdc Don't filter package files output based on dir/file status
This caused more problems than it solved, especially with -Qlp output
and files that are new to the new package.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-18 12:36:44 -06:00
Chantry Xavier
e28973169d pacman/sync.c : remove duplicated fallback on providers.
The fallback on providers when a target is not found was already made in the backend :
libalpm/sync.c , _alpm_sync_addtarget .
So I removed it from the frontend.

The sync500 pactest proves this fallback still works correctly.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-17 09:51:04 -06:00
Chantry Xavier
c8be7540a5 Remove provide.c and provide.h .
This file only contained one private function : _alpm_db_whatprovides .
And the public alpm_db_whatprovides was in db.c , so I moved everything there.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
[Dan: updated POTFILES.in as well]
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-17 09:50:05 -06:00
Nagy Gabor
d311ad067f Generalized alpm_list_find.
The old alpm_list_find was renamed to alpm_list_find_ptr, and a new
alpm_list_find was introduced, which uses the fn comparison-function
parameter in its decision.
Now both alpm_list_find_ptr (a new ptrcmp helper function was also
added) and alpm_list_find_str are just an alpm_list_find call.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
[Dan: made ptrcmp a static function]
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-17 09:44:48 -06:00
Nagy Gabor
04b7d2ad14 Two memleak fixes in pacman.
Both memleak was an unfreed alpm_db_whatprovides list.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
2007-11-17 09:39:12 -06:00
Dan McGee
3d10786394 Fix memleak in _alpm_trans_free with package lists
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-17 09:39:00 -06:00
Dan McGee
cfcc550e2a libalpm: use FREELIST when possible
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-16 21:15:49 -06:00
Dan McGee
2322909703 War on whitespace
Run the kernel's cleanfile script on all of our source files.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-16 20:18:45 -06:00
Dan McGee
3cd684b41d libalpm: simplify sync db lastupdate
Legacy code is hitting the trash here. Remove unnecessary _alpm_time2string
time storage abstraction in favor of just writing the time_t value to the
disk.

The only drawback is that everyone's sync DBs will have to be updated at
least once so that the lastupdate values are stored right. :)

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-16 11:51:26 -06:00
Dan McGee
6f2b436249 Add new mirror (FS#8638)
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-15 08:07:45 -06:00
Dan McGee
4ce13e2398 Fix a would-be memleak with the new compute requiredby stuff
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-15 08:05:10 -06:00
Dan McGee
2f55733be3 Ensure -Si and -Qi output show correct dependencies
Because alpm_pkg_get_depends() no longer returns strings as the data, we
need to first convert the returned structures to printable strings before
we can print the list.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-14 22:52:26 -06:00
Dan McGee
c8243bb8ed libalpm: change graph malloc to MALLOC macro
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-14 22:51:47 -06:00
Dan McGee
f75ee71762 Fix alpm_list_copy_data
So I spent a good 4 hours tracking a bug down tonight due to
alpm_list_copy_data not actually doing what I expected to do. We can't find
the size of an object we don't know the type of, so rewrite it so we pass
in the size explicitly. This was making _alpm_pkg_dup fail and causing all
sorts of other issues.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-14 22:51:16 -06:00
Dan McGee
c244cfecf6 Move alpm_splitdep usage to db_read
Holy inefficient batman! For a pacman -Qt operation (when we are using
compute_requiredby and not database entries), splitdep was being called ~1.3
million times on my local database. By splitting when we read the DB, we
drop this number to around 1700 and save a LOT of time in doing so (a 5x
increase in pacman -Qt speed here).

Note that the depends alpm_list_t in the package struct is no longer a
string list, but a list of pmdepent_t objects.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-14 21:00:02 -06:00
Dan McGee
8757398a7e testdb: remove requiredby checking
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-14 18:49:51 -06:00
Dan McGee
ceb870655e Remove REQUIREDBY checks from pactest
Remove any checks dealing with requiredby from pactest (but not actually
from the pactests themselves). Of course, we should probably find a new way
to check requiredby values of packages since there is no guarantee our code
is working perfectly.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-14 18:49:50 -06:00
Dan McGee
7219326dd4 Remove REQUIREDBY usage from libalpm
Instead of using the often-busted REQUIREDBY entries in the pacman database,
compute them each time they are required. This should help many things:

1. Simplify the codebase
2. Prevent future database corruption
3. Ensure when we do use requiredby, it is always correct
4. Shrink the pmpkg_t memory overhead

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-14 18:49:50 -06:00
Nagy Gabor
f5fcaf0b3c new trans001.py pactest
The pactest demonstrates what happens if fileconflict was found after the
removal part of a sync transaction.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-14 18:49:02 -06:00
Nagy Gabor
1d57a3e801 new add043.py pactest
Currently alpm_depcmp uses pkg->version as a version number for provisions,
which is odd.  The failure of the pactest demonstrates this.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-14 18:49:02 -06:00
Nagy Gabor
85b06f1276 alpm_list_add == alpm_list_add_last
It's time to define that alpm_list_add(list, foo) adds 'foo' to the end of
'list' and returns with 'list', because:
1. list is a list, not a set.
2. sortbydeps _needs_ an alpm_list_add definition to work properly.

As a first step, I used this definition in recursedeps.

Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
[Dan: punctuation cleanup in commit message and code comments, added comment
to alpm_list_add]
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-14 18:48:34 -06:00
Nathan Jones
46ec9e3548 Make it easier to ignore multiple packages.
This makes --ignore and --ignoregroup able to accept multiple
packages/groups by separating each with a comma.

For instance: pacman -Su --ignore kernel26,udev,glibc

This was requested in the comments of FS#8054.

Signed-off-by: Nathan Jones <nathanj@insightbb.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-13 20:59:02 -06:00
Nathan Jones
70a91cbb22 Add help for --ignoregroup.
Signed-off-by: Nathan Jones <nathanj@insightbb.com>
[Dan: split usage line into two lines for clarity]
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-13 20:58:45 -06:00
Dan McGee
dbc2f902db pacman-optimize: add note saying sync would be helpful
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-13 20:56:15 -06:00
Nathan Jones
c29209e7b6 repo-add: Ensure only adding package's deltas.
repo-add was adding the delta files of any package that started with the
same package name plus a hyphen.

In this example, deltatest-libs delta files were added to the deltatest
package:

$ repo-add deltatest.db.tar.gz deltatest-1.0.2-1-i686.pkg.tar.gz
==> Extracting database to a temporary location...
==> Adding package 'deltatest-1.0.2-1-i686.pkg.tar.gz'
  -> Removing existing package 'deltatest-1.0.2-1'...
  -> Creating 'desc' db entry...
  -> Computing md5 checksums...
  -> Creating 'depends' db entry...
  -> Creating 'deltas' db entry...
  -> Added delta 'deltatest-1.0.2rc3-1_to_1.0.2-1-i686.delta'
  -> Added delta 'deltatest-libs-1.0.0-1_to_1.0.1-1-i686.delta'
==> Creating updated database file /tmp/deltatest.db.tar.gz

Signed-off-by: Nathan Jones <nathanj@insightbb.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-13 00:13:21 -06:00
Dan McGee
103c3ac5a7 configure: Doxygen is disabled by default; manpages are included in dist
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-13 00:13:05 -06:00
Dan McGee
1b2817f539 Enforce const correctness on dep functions and rewrite alpm_dep_get_string
Add some const specifiers to the dep functions that can have them. In
addition, rewrite alpm_dep_get_string to use snprintf and cover all of
the bases (operators).

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-13 00:13:05 -06:00
Dan McGee
ec6a7d689b Return libalpm version number to being dot-separated
I think I goofed this up when making the big overhaul of configure.ac.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-13 00:13:05 -06:00
Nathan Jones
ca262623fc Add pactest for IgnoreGroup.
Also tell pactest to reset IgnoreGroup like it does for IgnorePkg.

Signed-off-by: Nathan Jones <nathanj@insightbb.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-13 00:13:04 -06:00
Dan McGee
07243f74d1 Update valgrind.supp to ignore ld 2.X dl_relocate
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-13 00:12:57 -06:00
Dan McGee
5e12d3dec9 Fix display of -Qip output when a package file is given
Too many fields were being shown on -Qip output, and sizes were not always
correct (-Qi and -Qip output on the same package did not agree).

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-13 00:09:45 -06:00
Dan McGee
a0c908dd0d Remove 'Total Package Size'
Having 'Total Installed Size' and 'Total Download Size' makes this size
unnecessary.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-11 14:14:07 -06:00
Dan McGee
53fdae9a19 Fix memleak with new alpm_list_reverse usage
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-11 12:59:45 -06:00
Dan McGee
8236be9fd8 Add a horrible little hack to get symlink001.py to pass again
This really doesn't give us any regressions in behavior, so it is safe to
do although quite ugly. Tell the conflict checking code to ignore symlinks
to dirs so that they are not seen as conflicts.

Hopefully this entire commit will get factored out soon enough.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-11 11:30:16 -06:00
Chantry Xavier
96f8faa666 Add two requiredby pactests
One currently should succeed (006), and 005 fails.

requiredby005.py is originally from Nagy Gabor <ngaba@petra.hos.u-szeged.hu>.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-11 10:52:51 -06:00
Dan McGee
4a835f5f53 Ensure list tail pointer is updated when we remove tail node
Commit 2ee90ddae2 did a special check to see
if we were removing the head node, but not the tail node. Add a special case
for the tail node to ensure all relevant pointers get updated.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-11 10:47:28 -06:00
Nagy Gabor
b6b3b0135e Incorrect usage of alpm_db_whatprovides in sync.c
The old code thought that alpm_db_whatprovides returns with a list of strings (package names).
 Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-11 09:56:50 -06:00
Aaron Griffin
434ea5bf61 Typo fix (sepArately)
Found by Giovanni Scafora <linuxmania@gmail.com>

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-11-11 09:52:17 -06:00
Aaron Griffin
cc15d29db2 Missing quote in output
Found by Giovanni Scafora <linuxmania@gmail.com>

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-11-11 09:52:07 -06:00
Dan McGee
2898ccb609 libalpm: fix lstat wrapper to actually use newpath
Commit b55abdce7a introduced an lstat wrapper
function that never dereferences paths with a trailing slash, but still
called lstat on path instead of newpath. Oops!

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-11 09:51:09 -06:00
Dan McGee
7b4573d851 Remove unused and broken alpm_list_remove_node function
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-11 09:51:09 -06:00
Dan McGee
dd0275b759 Add a missing newline in sync confirmation output
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-11 09:51:09 -06:00
Dan McGee
a55a07f5dd Add a symlink-based pactest
This passes with both the upcoming 3.1 devel tree and the 3.0.6 pacman code.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-11 09:51:09 -06:00
Dan McGee
84433c8800 Update bash completion
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-11 09:51:09 -06:00
Nagy Gabor
ed37d78664 Update Hungarian translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-11 09:51:09 -06:00
Dan McGee
6b98599953 pacman: remove leftover help string for -Rh
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-11 09:51:08 -06:00
Nathan Jones
8ec27835f4 Implement TotalDownload option.
Setting this option will change the download progress to show the amount
downloaded, download rate, ETA, and download percent of the entire
download list rather than per each individual file.

The progress bar is still based on the completion of the current file
regardless if the TotalDownload option is set.

This closes FS#7205.

Signed-off-by: Nathan Jones <nathanj@insightbb.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-11 09:46:13 -06:00
Nathan Jones
b206af78e0 Add TotalDownload option.
This will be used in the next commit.

Signed-off-by: Nathan Jones <nathanj@insightbb.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-11 09:46:09 -06:00
Nathan Jones
3312de65e6 Implement IgnoreGroup.
This option acts as if IgnorePkg was set on each package in the group.

This closes FS#1592.

Signed-off-by: Nathan Jones <nathanj@insightbb.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-11 09:44:30 -06:00
Nathan Jones
5c58b3d500 Add IgnoreGroup and --ignoregroup option.
This will be used in the next commit.

Signed-off-by: Nathan Jones <nathanj@insightbb.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-11 09:44:26 -06:00
Giovanni Scafora
5cd6ffda72 makeworld: gettext support
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-11 09:42:19 -06:00
Roman Kyrylych
6f5ee2432c makepkg: remove .pacsave files when uninstalling dependencies
Signed-off-by: Roman Kyrylych <roman@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-11 09:39:39 -06:00
Dan McGee
7d51882dd0 Simplify callback DONE event handling
Move them all to a single fallthrough case statement since they all print
"done".

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-08 23:41:05 -06:00
Dan McGee
4e45e1187d Add missing 'done' printout
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-08 23:39:51 -06:00
Dan McGee
889fccd55f Small manpage updates
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-08 23:38:32 -06:00
Dan McGee
e6673544b2 Fix some issues with localized dates/epoch usage
Commit 47622eef4d introduced localized times
in the metadata by way of storing the UNIX epoch value instead of a hard
coded date string. However, it missed a few things:
* If we weren't in the C/POSIX/en_US locale, the date parsing would fail
  as it tried to use the abbreviations of the locale being used. Fix this
  by switching the LC_TIME value before we parse a date.
* We used ctime to print the date value, which is always the C locale
  string. Instead, use strftime to print a localized date string.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-08 23:18:07 -06:00
Dan McGee
5b4b4df4c9 Get rid of the footnotes section in generated manpages
We really don't need it since it is just links. However, we do need to figure
out how to get our old links to show up right.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-08 21:56:53 -06:00
Dan McGee
9407baaaa6 doc: update links in footer.txt so they are actual links
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-08 21:17:59 -06:00
Giovanni Scafora
c00f46b653 Update Italian Translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-08 21:16:07 -06:00
Dan McGee
f3e8343c7e Update PKGBUILD.5 with missing devel variable descriptions
The lack of descriptions on some of the variables was causing issues with
documentation generation. Adding text to them fixes this.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-08 09:33:05 -06:00
Dan McGee
9fdb15b4b5 Sync asciidoc.conf with GIT repository changes
We got our file from the GIT repository originally, so keep it up to date.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-08 09:31:58 -06:00
Scott Horowitz
dd2d6f980b Correctly handle version comparisons for SVN/CVS/etc PKGBUILDS.
Retrieve SVN/CVS/etc revision number before checking if the
package has already been built. This allows building a newer
version of a developmental package without having to use -f.
Now -f will only be needed if the latest SVN/CVS/etc revision
is the same as the built package.

Signed-off-by: Scott Horowitz <stonecrest@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-08 07:15:37 -06:00
Dan McGee
23745a7bf2 Update the PKGBUILD example in the manpages
The old one was old. Use something a bit more recent and a bit simpler as
well so it actually looks OK in the manpage.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-07 19:03:58 -06:00
Dan McGee
0e83f12f4a Change -fstack-protector flag to -fstack-protector-all
We only use it with --enable-debug, so we might as well go all out and try
to find any attempt of stack smashing.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-07 19:03:58 -06:00
Jeff Bailes
4bbb055cd9 Update en_GB translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-07 19:03:58 -06:00
Aaron Griffin
d0d58489ff Add STRDUP macro to mirror MALLOC/CALLOC
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-11-06 23:23:03 -06:00
Aaron Griffin
2ee90ddae2 Maintain list tail pointers in the head node
List head nodes contain null 'prev' pointer, which we can (ab)use to maintain a
back reference to the tail pointer of the list.

While list additions are not _significantly_ improved, they are still sped up.

Original
   $ time pacman -Qo /usr/bin/wtpt
   /usr/bin/wtpt is owned by lcms 1.17-2

   real    0m3.623s
   user    0m1.883s
   sys     0m1.473s

New
   $ time pacman -Qo /usr/bin/wtpt
   /usr/bin/wtpt is owned by lcms 1.17-2

   real    0m2.006s
   user    0m0.263s
   sys     0m1.627s

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-11-06 22:47:10 -06:00
Dan McGee
bdab234d97 Comment out paths by default in pacman.conf
Now that all paths are defined to reasonable defaults at compile time by
pacman, we shouldn't force users to have RootDir, DBPath, etc. in their
default pacman.conf although these options are always available.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-05 22:09:05 -06:00
Dan McGee
52b7fd81f5 libalpm/db.c: change two warnings to errors
These two warnings really indicate failure, so the message they print should
do so as well.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-05 21:10:43 -06:00
Sebastian Nowicki
cb04b3a5f3 Fix mercurial complaining about directory already existing
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-05 21:10:35 -06:00
Dan McGee
11f99e0685 Add LOGFILE as a define at compile time for pacman
It has always been a bit odd that logfile had to be specified in the config
file, but no other paths did. Add LOGFILE as a preprocessor definition, and
make a call to alpm_option_set_logfile() to set the default location so no
logfile parameter is necessary in pacman.conf.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-05 21:10:22 -06:00
Chantry Xavier
0686fec839 Remove the newline automatically added by alpm_logaction.
This way, _alpm_logaction behaves like _alpm_log, and gives more control.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-11-04 18:04:43 -06:00
Dan McGee
b55abdce7a libalpm: use an lstat wrapper so we never dereference dir symlinks
Linux lstat follows POSIX standards and dereferences a symlink pointing
to a directory if there is a trailing slash. For purposes of libalpm, we
don't want this so make a lstat wrapper that suppresses this behavior.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-04 18:02:25 -06:00
Dan McGee
99f42d6bd2 libalpm: open the logstream on demand
Don't open a stream to the logfile until necessary. This will allow us
to catch any errors in opening the logfile instead of ignorning them.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-04 16:38:59 -06:00
Dan McGee
86ca39d15e Clean up usage of extern variables
Instead of declaring the extern variable in every *.c file, include it in
the header file that makes sense. This means handle.h for the handle, and
conf.h for the pacman side config object.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-04 12:05:22 -06:00
Dan McGee
006387828c Readd scriptlet logging that got lost in an earlier commit
I broke scriptlet logging with ad691001e2.
Readd more or less what was there before, although it still needs a lot of
work including hopefully rewriting it to a new event subsystem and having
it log to a seperate file.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-04 11:27:41 -06:00
Dan McGee
2e51e28442 vercmp: add some usage instructions
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-04 11:27:29 -06:00
Dan McGee
8dc8434444 Remove unneeded CXX macros from acinclude.m4
This follows the removal patch previously used for GCC & F77 macros. If we
don't use it, dump it so we can speed up configure time.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-04 11:13:24 -06:00
Dan McGee
6d42439a3e Add some text at the top of acinclude.m4 so people know what is going on
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-04 10:45:55 -06:00
Dan McGee
c32f00f77c Remove unneeded F77 and GCJ libtool macros from acinclude.m4
We don't use Fortran or Java code in our project, so no need to waste time
looking for this stuff. This gives a noticeable speedup to running the
./configure program as well.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-04 10:43:01 -06:00
Dan McGee
e5be26fb23 Make building of pacman.static optional
Because building of pacman.static fails on some platforms, we should make
it optional. It is enabled by default but can be disabled with the use of
the --disable-pacman-static flag.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-04 10:42:08 -06:00
Dan McGee
c26fe63ee5 Add some more autoconf macros to filter our CFLAGS usage
Hopefully these new autoconf macros, with a little magic, will allow us to
compile with any compiler and still choose the options we have available
to us.

Tested locally with gcc 4.2.2 and gcc 3.4.6; the latter doesn't support two
of the items we previously had hardcoded in our CFLAGS.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-04 10:42:07 -06:00
Dan McGee
8feccaed78 Use an autoconf macro to see if -fstack-protector is available
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-04 10:42:07 -06:00
Dan McGee
288dd54982 Revise configure.ac
Do a little cleanup of our configure script. Highlights:

* Remove macros deemed unnecessary to call [1]
* Change check for compiler to look for one that is C99 capable-
  this automatically adds the -std=gnu99 flag

[1] Noted in the autoconf NEWS file, notably entries for 2.59d

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-04 10:42:07 -06:00
Dan McGee
7ee62ca216 Update libtool files and macros to newest versions
It looks like some of the newer libtool m4 files offer improved support
for the Darwin platform and possibly BSD, so bump our files to these new
versions.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-04 10:41:44 -06:00
Dan McGee
381690f9b3 Update my TODO 2007-11-04 09:51:23 -06:00
Dan McGee
ab91cef655 Add a little const correctness fix to alpm_list
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-04 09:50:59 -06:00
Dan McGee
dea9b3bc0f Fix basename usage in pacman and utilities
basename() is a rather untrusty function call on a lot of platforms as it
does some weird and different things. To solve this, I added a mbasename
fuction to pacman to take its place, and simply removed its usage in the
utilities (it isn't worth dealing with there).

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-04 09:50:43 -06:00
Roman Kyrylych
4a5e7b6bd1 Add support for arch='any'
Signed-off-by: Roman Kyrylych <roman@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-04 09:50:04 -06:00
Dan McGee
0ea43089e1 Remove final use of the math library from pacman
To round a value, we don't need floorf- we can just cast to an int.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-04 09:49:30 -06:00
Jeff Mickey
bcb5465b21 Added optdepends support to pactest
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-11-04 09:48:24 -06:00
Dan McGee
ccdf29ffa8 abs: prefer csup to cvsup
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-30 08:12:09 -05:00
Dan McGee
ac79135b94 Pick best python program available for 'make check'
Use an autoconf macro to find us a python executable, preferring python2.5
if we can find it. From there, fall back to python2.4 and then python.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-30 00:20:18 -05:00
Dan McGee
6aeda5fbff When printing size_t, use %zd
%d was used, which worked for Linux and FreeBSD. Not so for Darwin. The
warning was probably spat out when compiling on x68_64 as well, but no
developers use this architecture as their primary one.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-29 23:32:58 -05:00
Dan McGee
be387148c9 libalpm/handle.c: make realpath() call portable
BSD didn't support the NULL second argument GNU extension, so do it the
old fashioned way.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-29 23:12:37 -05:00
Dan McGee
6af7dbcf72 pacman/query.c: add missing free()
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-29 23:11:49 -05:00
Scott Horowitz
aea45a8b20 Small updates to documentation.
Signed-off-by: Scott Horowitz <stonecrest@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-29 22:47:48 -05:00
Dan McGee
dede5371e7 Copy pmdelta_t objects in _alpm_pkg_dup()
This was forgotten in the original set of patches.

CC: Nathan Jones <nathanj@insightbb.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-29 21:06:13 -05:00
Dan McGee
74aa54a1f6 Make general list copy function
Package dup needs to copy all members. Nathan had his implementation, but
I generalized it to this new alpm_list function (and will use it in the
next commit).

CC: Nathan Jones <nathanj@insightbb.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-29 21:05:04 -05:00
Chantry Xavier
014306eb99 simple pactest renaming : split conflict* into depconflict* and fileconflict*.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-29 07:15:41 -05:00
Dan McGee
c50a7c6026 doxygen: preprocess SYMHIDDEN/SYMEXPORT macros so they don't show in docs
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-29 07:13:58 -05:00
Dan McGee
6cf8a5137e libalpm/delta: add const to most methods
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-29 01:28:13 -05:00
Dan McGee
cc754bc6e3 libalpm: introduce MALLOC and CALLOC macros
These macros take the place of the common 4 or 5 line blocks of code we had
in most places that called malloc or calloc. This should reduce some code
duplication and make memory allocation more standard in libalpm.

Highlights:
* Note that the MALLOC macro actually uses calloc, this is just for safety
  so that memory is initialized to 0. This can be easily changed in one
  place.
* One malloc call was completely eliminated- it made more sense to do it
  on the stack.
* The use of RET_ERR in public functions (mainly the alpm_*_new functions)
  was standardized, this makes sense so pm_errno is set.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-29 01:00:52 -05:00
Dan McGee
fe3a461703 Add some more debugging output to dep checking code
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-29 00:01:17 -05:00
Dan McGee
671224b64c pactest: generate the filelist the correct way
Actually use python commands to generate the filelist instead of os.system
calls that don't necessarily work everywhere. Noticed when running "make
check" on FreeBSD where the tar program is actually bsdtar.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-28 22:24:11 -05:00
Chantry Xavier
0dc34f496d extend type001 pactest with a symlink.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-10-28 21:18:55 -05:00
Dan McGee
3e3e7a97a6 makepkg: add explicit dir to find calls
Some of the find calls did not have a path, which isn't valid in some
versions of the find utility. Add a . for compatibility.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-28 21:18:39 -05:00
Scott Horowitz
8a9c83dd4b Integrate versionpkg into makepkg
If PKGBUILDs use the correct svn/cvs/etc variables, determine the latest
revision number and force this as the pkgver for building.

Signed-off-by: Scott Horowitz <stonecrest@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-26 22:35:23 -05:00
Dan McGee
3e1b72f4f2 Clean up LDADD usage
We had a lot of unnecessary overstatements of libraries to include on
linking, and autoconf/automake takes care of this for us. This also helps
some compilation issues on other platforms.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-26 20:40:20 -05:00
Dan McGee
a8731ff2f7 Fix mcheck detection and usage
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-26 20:31:25 -05:00
Dan McGee
b38e046621 Explicitly cast void* to char* during printf call
If we don't have an explicit cast, make fails during -Wall -Werror.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-26 19:09:21 -05:00
Nagy Gabor
17f99a0f00 dependency error message fix in libalpm/remove.c
Normally you must never see that error message.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-26 19:05:42 -05:00
Nagy Gabor
d903fc607e Dependency error/log messages fix
The old code used only the depend.name in messages, which might have not
been informative. The new code uses the whole dependency string in
%DEPENDS% format.

(Dan: slight English clarification in one of the messages)
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-26 18:54:21 -05:00
Dan McGee
b609cb0a5d makepkg: readd -p option that was lost in getopt conversion
The -p option was accidentally dropped in commit
54b71f0427. Readd it.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-26 18:36:58 -05:00
Dan McGee
09253b48d6 Move .cvsignore -> .gitignore
* Move all .cvsignore files to .gitignore for switch in VCS. In addition,
  delete ones that were unnecessary because they only contained Makefile
  and Makefile.am.

Signed-off-by: Dan McGee <dan@archlinux.org>
(cherry picked from commit 8cacc46f8b)
2007-10-25 11:53:13 -05:00
Nagy Gabor
0cff7c6bdf Add alpm_dep_get_string method
Public alpm_dep_get_string function is introduced, which converts a
pmdepend_t structure to printable string in %DEPENDS% format.  This
function is now used in pacman to print dependency error messages.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-25 07:10:08 -05:00
Nagy Gabor
89ac8aa9c4 _alpm_depmiss_isin fix
The old code used memcmp, which is not good for comparing strings:
"pkgname"'\0''\0' should be equal to "pkgname"'\0''a' for example.
The new code uses strcmp.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-24 16:51:12 -05:00
Dan McGee
581769b72d Add strndup implemention for environments that are missing it
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-24 00:37:50 -05:00
Dan McGee
aa545f6798 One more added include to help compilation elsewhere
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-23 23:27:03 -05:00
Dan McGee
616668fb71 Replace UK mirror with a new updated one
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-23 19:24:39 -05:00
Dan McGee
bd15c23e16 Print and typecast time_t correctly
The recommended C99 way to print the value of a time_t is to cast it to
uintmax_t or intmax_t. Do this to ensure compatability with all platforms.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-23 00:35:42 -05:00
Dan McGee
8b1fb61df2 Ensure all localization stuff is correctly guarded
Anything dealing with libintl and localization should be correctly guarded
inside an ENABLE_NLS block on both the pacman and libalpm sides.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-22 23:52:55 -05:00
Dan McGee
0c4f7d821c Fix broken or missing includes
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-22 23:37:38 -05:00
Dan McGee
46eaa5c542 Fix invalid static scoping of strverscmp
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-22 23:36:03 -05:00
Nathan Jones
f5b77eb989 Add download size to target list.
This displays the download size, taking into account delta files and
cached files.

This closes FS#4182.

Signed-off-by: Nathan Jones <nathanj@insightbb.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-19 19:30:06 -05:00
Nathan Jones
e472e80c08 Download delta files if UseDelta is set.
Delta files will be used if the size is smaller than a percent
(MAX_DELTA_RATIO) of the package size.

Signed-off-by: Nathan Jones <nathanj@insightbb.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-19 19:29:17 -05:00
Nathan Jones
520db578da Refactor md5sum checking.
This will allow deltas and packages to share the md5sum checking code.

Signed-off-by: Nathan Jones <nathanj@insightbb.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-19 19:24:24 -05:00
Nathan Jones
0c2cc108d3 Add pmdelta_t structure and functions to libalpm.
Signed-off-by: Nathan Jones <nathanj@insightbb.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-19 19:21:44 -05:00
Nathan Jones
1118e00fe9 Add delta information to the repository database.
(Dan: cleaned up one if statement)

Signed-off-by: Nathan Jones <nathanj@insightbb.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-19 19:20:16 -05:00
Dan McGee
b8dba7a6fa Add Hungarian mirror
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-18 19:32:30 -05:00
Andrew Fyfe
12e1346252 scripts/makepkg.sh.in: Strip bins/libs in all {bin, sbin, lib} directories.
In one of the original clean up patches[1] I changed the search path
for stripping binaries and libraries. This resulted in only
usr/{bin,sbin,lib} being searched. This patch reverts that change.

[1] 721ceee1e2

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-10-18 19:28:02 -05:00
Chantry Xavier
0ff02995f1 libalpm/package.c : fix requiredby with multiple providers.
The code didn't match the following comment :
"A depends on B through n depends <=> A listed in B's requiredby n times"

It stopped at n=1 with a break.

I was surprised to see this case happens in real, that's how I noticed the
bug: wine depends on both freeglut and glut, while freeglut provides glut.

So when installing wine, the update_depends function listed wine twice in
freeglut's requiredby.  But the compute_requiredby function (used when
installing freeglut, and used by testdb) listed wine only once in
freeglut's requiredby.  That made testdb unhappy.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-18 12:32:10 -05:00
Dan McGee
619bf56e66 Remove rounding on package size totals
We print the total to two decimal places, so there is no real need for
rounding of the values. Remove the rounding and switch all output to two
decimal places.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-16 08:41:37 -05:00
Dan McGee
128b288ca7 Fix scriptlet pactest cases so they 'succeed' again
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-14 18:52:17 -05:00
Chantry Xavier
3d7e06f204 libalpm/trans.c : fix a recently introduced breakage in scriptlets handling.
Commit 4853a4aad9 used the tmpdir variable
for checking the existence of /bin/sh, without resetting it.

This caused /bin/sh to be deleted during the cleanup part, as soon as a scriptlet
other than pre_upgrade or pre_install was executed.
For example, on the first post_upgrade during a -Su.

I introduced two variables : clean_tmpdir and restore_cwd, for deciding what should
be done in the cleanup part.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-10-14 18:47:19 -05:00
Chantry Xavier
4e6a03c4f6 libalpm/trans.c : remove the DBPath <-> RootDir dependence in runscriptlet.
This code assumed that DBPath was under RootDir, while this is not necessarily the case :
pacman doesn't enforce anymore than DBPath is under RootDir.

So now, all scriptlets will be put somewhere in RootDir/tmp/, so that when it chroots in RootDir,
the scriptlets are still available inside the chroot.

This also removes the need of normalizing both dbpath and rootdir, in order to do computation on the paths.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-10-14 18:46:43 -05:00
Chantry Xavier
5d30c5c0b7 pacman/pacman.c : put back root check even if -r is specified.
Root is needed for most install / remove operation, because it's needed
for chrooting, for running scriptlets.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-10-14 17:56:40 -05:00
Nathan Jones
abce73de4c Manually check xdelta exit codes.
This is needed because 'xdelta delta' returns 1 even when the delta
creation succeeds. This was causing makepkg to exit after the command
due to bash's -e option.

Some information from the xdelta man page:
The delta command exits with status 0 to indicate that no differences
were found, with status 1 to indicate that some differences were found,
and with status 2 to indicate an error of some kind.

Signed-off-by: Nathan Jones <nathanj@insightbb.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-14 17:54:32 -05:00
Dan McGee
0adedc536f Updates to fix Doxygen documentation generation
We had way too much going on with the Doxygen manpage generation. Clean it
up quite a bit by removing directory manpages, using relative paths, not
having a manpage for every single alpm function, and ensuring internal
functions are not documented publicly.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-14 17:29:32 -05:00
Dan McGee
5adb8d4b5a util/testdb: fix up function naming
We shouldn't use the _alpm prefix (copy-paste issue, no big deal).

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-10 06:57:42 -05:00
Nagy Gabor
3c4e98f7b5 Add two new pactests to check symlink behavior
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-09 13:27:08 -05:00
Dan McGee
7f3adc3936 Add new French Arch mirror
Fix Aaron's busted-a** commit. :P

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-09 12:48:02 -05:00
Aaron Griffin
5e3a1bdec6 New French mirror at ftp.free.fr
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-10-09 12:41:05 -05:00
Dan McGee
6db0562b8d Add gcc format attribute to _alpm_log, catch a few bugs in the process
This fixed a few of our formatted output strings that were broken before
but never being checked.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-08 21:25:52 -05:00
Dan McGee
087b8df781 libalpm/package.c: ensure we use package name when loading packages
Some of the error messages in _alpm_pkg_load failed to use the pkgname
value when printing, which made error messages rather hard to decode.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-08 21:21:04 -05:00
Chantry Xavier
e03a1f0044 pacman/pacman.c : add --logfile option.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-10-08 20:46:56 -05:00
Dan McGee
920b0d2049 Update usage of gcc __attribute__ flags
Change the default visibility of libalpm functions to internal instead of
hidden- this allows for slightly better optimization because it tells GCC
that the function can never be called outside of the current module (see
http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html).

Also added some attributes to the pacman print functions so that they check
the format strings being passed to them.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-08 20:46:56 -05:00
Dan McGee
b1613c2651 Clean up the scriptlet fork code a bit, honor the child return value
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-08 20:46:55 -05:00
Nagy Gabor
3d8408759d Add new (failing) sync pactest
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-08 20:46:55 -05:00
Dan McGee
1ff8e7f364 Remove the non-user friendly --ask option
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-08 20:46:55 -05:00
Dan McGee
60dc4b43fd Fix backward compatibility with non-epoch builddates
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-08 20:46:55 -05:00
Dan McGee
6aac221879 Add new french mirror
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-08 20:46:55 -05:00
Dan McGee
f5f4650de7 pacman-optimize: add check for diff/diffutils
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-10-08 20:46:55 -05:00
Aaron Griffin
4853a4aad9 Fail loudly is scriptlets cannot be run via /bin/sh
If /bin/sh is missing in the root directory, scriptlets cannot be executed, as
we're explicitly calling it.

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-10-04 21:36:25 -05:00
Chantry Xavier
98bcd1f5b1 Fix -Sy and -Sp operations.
When the -Sy operation failed, the lock wasn't removed because
alpm_trans_release wasn't called. This is fixed now.

Also, after my last change in commit 52e7e6d747 ,
Sp didn't do anything anymore.
That's because needs_transaction returned false for -Sp, so the sync transaction
wasn't run. However, the current implementation of -Sp requires a sync transaction.

Also, since a transaction creates the lock file at the beginning, and releases it
at the end, this mean that -Sp requires root access anyway..

I think I understand now why Aaron found that the current -Sp implementation is hackish :)

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-10-04 18:13:09 -05:00
Nathan Jones
02ec82b8c6 makepkg: Fix typo to make xdelta creation work.
Signed-off-by: Nathan Jones <nathanj@insightbb.com>
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-10-04 17:50:29 -05:00
Chantry Xavier
52e7e6d747 needs_transaction adjustments
I just moved the root path check out of needs_transaction, and put it directly
in pacman.c . I think this part is alright.

For the other problems, I thought about doing the transaction first, in a new
sync trans function, which will init and release a transaction.  And then doing
the commands like -Ss / -Sl / -Sg / -Si.

The problem is that for commands like -Sys / -Syl / etc, only the refresh part
of the transaction should be done.  So I had to introduce an ugly sync_only
hack.

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-10-03 21:02:36 -05:00
Dan McGee
4453ce155c libalpm: Optimize/inline the md5 functionality
The md5 routines are one of the chokepoints of libalpm (main chokepoint being
archive extraction). Although IO delay causes a lot of it, we can at least
inline some of the md5 stuff as we aren't that concerned about space and
eliminate quite a few function calls.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-28 23:27:14 -05:00
Dan McGee
01e92e9ded libalpm/deps.c: fix memleak found by valgrind
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-28 23:27:14 -05:00
Dan McGee
7d5dca4043 libalpm/be_files: Fix outdated code setting path for lastupdate file
The code for setting the lastupdate file path still referenced both the
root and dbpath, when we should only be using dbpath. Fix it.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-28 23:27:14 -05:00
Dan McGee
d5fa2da171 makepkg: Fix output color codes for real
Make sure we reset both the bold attribute and the color attributes when it
is necessary.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-28 12:45:14 -05:00
Dan McGee
5977a6ec9e Remove outdated mirror
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-28 06:46:27 -05:00
Dan McGee
69d68ef0b5 makepkg: When we add an option, we should probably make it work
The -A,--ignorearch option was added and given help text, but never actually
listed as valid to the option parser. Fix this.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-28 00:36:48 -05:00
Aaron Griffin
48bf088e65 Use ANSI 'foreground' color instead of hardcoding 'white'
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-09-28 00:25:57 -05:00
Aaron Griffin
b86479cf9b Allow --refresh specified for most -S options
Included options are -g, -i, -s, and -l
All of these will sync the DB if -y is specified and permissions are
appropriate.

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-09-28 00:25:57 -05:00
Aaron Griffin
4942d21632 Break out transaction test to a separate function
Added needs_transaction, putting out "hey do we need root?" tests in one place.

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-09-28 00:25:57 -05:00
Aaron Griffin
50bb16e015 OMG a space!
Yeah, I added a space. It deserves its own commit.

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-09-28 00:25:57 -05:00
Aaron Griffin
cb3c3a920d Minor "cannot remove" message cleanup
The strings differed in quotes only, this way we have only one i18n string for
translation

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-09-28 00:25:57 -05:00
Aaron Griffin
f2f4ada1d6 Remove buildtype package accessor prototype
This was removed a while ago, but the prototype was still hanging out.

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-09-28 00:25:57 -05:00
Aaron Griffin
47622eef4d Support for localized times in metadata
Packages and DBs now support using the UNIX epoch (seconds since Jan 1, 1970)
for use in builddate and installdate. This will only affect newly built
packages. Old existing packages with the text format are still supported, but
this is deprecated.

In the case of removal of text time support, this code will fail gracefully,
returning the start of the epoch for broken packages.

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-09-28 00:25:57 -05:00
Dan McGee
219808714f Add 'full' parameter to alpm_pkg_load
In most cases, we want to fully scan a package when we load it, which serves
as a integrity verification check. However, there are times when it is only
desired to read the metadata and nothing else, so allow the caller of pkg_load
to choose the behavior they need.

This pays big dividends in speeding up pacman cache cleaning functionality.
Old (729 packages):
real    1m43.717s
user    1m20.785s
sys     0m2.993s
New (729 packages):
real    0m25.607s
user    0m19.389s
sys     0m0.543s

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-28 00:16:43 -05:00
Dan McGee
d2edcb58e2 Update comments dealing with pkgext/dbext stripping
pacman/callback.c already did the work I set out to do with this commit, so
update the comments accordingly in the frontend and backend.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-28 00:16:43 -05:00
Dan McGee
16cb8e6e61 Reimplement pacman cache cleaning the right way
Partial cache cleaning was eliminated in a previous commit because it relied
on package naming conventions. Re-add it the correct way- we actually open
up each package in the cache and get a name and version out of it. If the
name and version match that of an installed package, keep it. If the package
is not installed or the version does not match the locally-installed version,
get rid of it.

This can easily be modified if some other heuristic of keeping and removing
packages is desired, or if we should clean out the cache dir of any files
that are not packages, etc.

The biggest current problem with this new approach- speed. Here is one run
on my local machine, going from 1643 to 729 packages in the cache (753 in
the local DB):
real    4m25.829s
user    3m22.527s
sys     0m6.713s

This is likely best addressed by the package loading scheme, which may be
loading the entirety of each package archive, which is a waste when we only
need the .PKGINFO file read.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-28 00:16:43 -05:00
Dan McGee
f7bbfe4052 Remove package name dependency from libalpm
Previously, package names must match a specified scheme or they will cause
pacman add operations to fail. This is not a very intelligent or necessary
way to act, so remove the dependency on the name of the package to be
installed and read all relevant information from the metadata instead.

This does have one causality to be addressed later- pacman cache cleaning
functionality, which has never been phenomenal, just lost most capability.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-28 00:16:43 -05:00
Dan McGee
0758012b66 libalpm: Add newline to alpm log function output
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-28 00:15:28 -05:00
Dan McGee
679eff90cc Mirrorlist updates
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-27 22:13:33 -05:00
Chantry Xavier
a6b58638d1 document the -Qii option.
I suppose -Qii could be used for other things than displaying
the list of backup files, but currently, it's the only one,
so that's how I documented it..

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-27 22:00:57 -05:00
Dan McGee
fc0e83f05b Preliminary support for optdepends
Add some alpm functions for getting optdepends, have makepkg include them
in the PKGINFO file, and have a pacman -Qi operation display the raw string
as stored by libalpm.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-25 23:02:30 -05:00
Dan McGee
012f793978 Allow a normal 'make' to compile without asciidoc installed
If we don't have asciidoc installed or enabled, we should still have a
successful make. However, we want to ensure 'make dist' fails without
asciidoc. This commit should ensure this.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-23 21:19:06 -05:00
Dan McGee
843d368ef6 libalpm/add.c: fix backup array issue
As seen with the recent upgrade of pacman and the removal of the
pacman.d/current mirrorlist, files that were formerly in the backup array
get deleted upon their removal, which could be dangerous. Instead, we should
use the combined backup array of the old and new package. This fix should
address this issue in a relatively straightforward way.

In addition, old files should be moved to pacsave locations as expected.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-23 20:48:04 -05:00
Chantry Xavier
105fd40a4a Add sync044 pactest : A dependency induces a replacement.
That is the problem mentioned by Nagy there (with suggestions for fixing it) :
http://www.archlinux.org/pipermail/pacman-dev/2007-August/009082.html

If a dependency conflicts with a local package and has to replace it,
the PM_SYNC_TYPE_DEPEND information is lost, and the resulting install
reason is wrong (the package is marked as explictly installed).

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-09-23 19:50:11 -05:00
Chantry Xavier
6898bb0f97 Add two pactests with broken requiredby, and two about pacsave handling.
remove048 is the case mentioned there (fails in 3.0 but works in 3.1) :
http://www.archlinux.org/pipermail/pacman-dev/2007-September/009294.html
It's the same as remove046 with -R instead of -Rc.

sync060 is a case reported this morning on IRC :
a pacman -Su wanted to replace gensplashutils by gensplash,
but pacman said gensplashutils was required by initscripts-gensplash,
while initscripts-gensplash was not even installed.
This is also fixed in the current 3.1 code though.

upgrade02{4,5} are the backup handling problem I described there :
http://www.archlinux.org/pipermail/pacman-dev/2007-September/009376.html

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-09-23 19:50:03 -05:00
Dan McGee
8acb6d24af libalpm/remove.c: fix up arguments to unlink_file
Move the progressbar code out of unlink_file so we can pass half the args.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-23 19:47:52 -05:00
Dan McGee
d3c8003020 alpm: removed unused strtoupper wrapper, remove installeddate on parse_descfile
installdate should never be present in a package descfile, so get rid of it.
With the last commit, we also don't need the util strtoupper function.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-23 12:20:48 -05:00
Chantry Xavier
443950b7e9 libalpm/package.c : fix for FS#8081, case sensitive comparisons in parse_descfile.
This fix FS#8081. The tr_TR locale has known issue with case insensitive
comparisons, mostly because upper(i) != I.

So the .PKGINFO files generated by makepkg MUST contain all keywords in lowercases now.
This was already done, but was not mandatory.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-09-23 12:05:30 -05:00
Chantry Xavier
f9b7c67d24 libalpm/add.c : fix backup handling (2)
The mistake fixed in commit 26441cf65c
was actually done at two places.
This fix the second one.

Also remove one unnecessary newline introduced by
commit d34b2c4ed8

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-09-18 18:56:40 -05:00
Dan McGee
1860ab8980 Update NEWS, -S testing/qt example, and mirrorlist change
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-18 13:40:19 -05:00
Dan McGee
7325ebbc22 Refine pacman manpage, clarify -S repo/package possibility, remove --test
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-17 23:01:01 -05:00
Chantry Xavier
d34b2c4ed8 libalpm/add.c : newline fix.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-09-17 22:56:42 -05:00
Stefano Esposito
d50390c089 Avoid segfaults whet calling alpm_option_get_* before initialization
When calling a function of the alpm_option_get_* group, you get a segfault
if you don't call alpm_initialize() first. With this patch those functions
set pm_errno to PM_ERR_HANDLE_NULL and return an error value if handle ==
NULL.

(Dan: modified to meet pacman coding standards)

Signed-off-by: Stefano Esposito <stefano.esposito87@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-17 21:59:02 -05:00
Jeff Bailes
82a1129539 Update British English translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-17 21:22:32 -05:00
Peter Johnson
afdcf7552c Allow rankmirrors to read from stdin
Feature Request #8043 and provided patch. Thanks!

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-17 19:48:57 -05:00
Dan McGee
acfdad6db3 Add Australian mirror
Thanks to Jeff Bailes <thepizzaking@gmail.com> for pointing this out.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-17 19:35:23 -05:00
Chantry Xavier
3955858a2d rankmirrors : add support for the $repo var in url.
To keep working correctly with url like :
ftp://ftp.archlinux.org/$repo/os/i686
rankmirrors will now replace $repo by core.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-17 19:32:39 -05:00
Dan McGee
708488f6fe Merge branch 'asciidoc' into working
We're getting close to release, so might as well do this now so people can
actually update some of our documentation.
2007-09-16 21:10:44 -05:00
Chantry Xavier
b0aa510592 trans.c : reworking of transaction interruptions
My two previous hacks related to this part
(8038190c7c and
b15a5194d1) were caused by the lack of
understanding of a feature introduced a while ago:
Better control over CTRL-C interruptions -- do not leave the DB in an
inconsistent state (54008798ef).

Now I have been looking at this commit, and the added feature is indeed
interesting. The main problem I had with it is that it does a rather
unusual use of alpm_trans_release, which caused a few problems that I tried
to fix in a weird way. I think these problems were caused by the fact that
there weren't any difference between "interrupt transaction" and "release a
transaction which failed" actions from the alpm_trans_release POV.  So I
decided to add a new function instead, alpm_trans_interrupt, which is
called on Ctrl+C, and which only sets trans->state to STATE_INTERRUPTED so
that remove_commit and add_commit can exit cleanly at a safe moment. This
allowed me to revert my two previous hacks as well.

Also ensure we handle SIGINT correctly in all cases- if a transaction is
not ongoing, then we can free the transaction and exit quickly.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-16 20:17:44 -05:00
Chantry Xavier
046c8a6819 Remove the DB consistency check from pacman and libalpm.
This reverts commit dfc85cb5f5
and b6f3fe6957.
This DB check is already in testdb (among others).

Also testdb now uses the db path set at make time by default,
so specifying the db path is optional.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-16 20:10:18 -05:00
Dan McGee
7daf5a038d Remove a dead mirror, update contrib/pacsearch for core change
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-16 17:48:42 -05:00
Dan McGee
a06d91f7f9 A few final changes for the 3.0.6 release
* Updated all message catalogs
* Bump version in configure.ac
* Remove a dead mirror
2007-09-16 22:15:03 +00:00
Dan McGee
3166257396 A few more core updates and revise the mirrorlist 2007-09-16 21:44:00 +00:00
Dan McGee
892faa3e5c Add new Russian mirror
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-16 16:38:52 -05:00
Dan McGee
4d51a2b357 Make changes for Arch Linux current -> core change
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-16 16:26:58 -05:00
Dan McGee
05346af459 Make current -> core updates 2007-09-16 21:20:19 +00:00
Chantry Xavier
71a4511d0f Add testdb util for finding inconsistencies in the database.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-11 21:11:42 -05:00
Stefano Esposito
27acdc2c94 make alpm_strerror binding friendly
I'm currently working on python bindings for alpm written in pyrex. While
working i found that declaring alpm_strerror as
	char * alpm_strerror (void)
instead of
	char * alpm_strerror (int err)

and then using pm_errno in the implementation instead of err, could make it
more bindings-friendly.

Dan: cleaned up and added void to declaration. Instead of replacing existing
function, add a new function called 'alpm_strerrorlast(void)'.

Signed-off-by: Stefano Esposito <stefano.esposito87@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-11 20:58:27 -05:00
Chantry Xavier
f21c45c0dd libalpm/deps.c : export _alpm_checkdeps (-> alpm_checkdeps).
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-11 20:42:03 -05:00
Chantry Xavier
be32aa3004 libalpm/package.c : add new alpm_pkg_compute_requiredby function.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-09-11 20:41:54 -05:00
Dan McGee
2f0de317b8 Make some small changes recommended by splint
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-11 20:41:42 -05:00
Dan McGee
b2501950c7 Fix sync db location in pactest so new location is acceptable
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-06 19:52:55 -05:00
Chantry Xavier
b15a5194d1 libalpm/trans.c : remove the lock even on interrupted transactions.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-09-06 19:45:16 -05:00
Chantry Xavier
53fc745aed Add a few pactests collected over time.
remove047 : Remove a package required by other packages

conflict004 : a package conflicts with itself
  http://www.archlinux.org/pipermail/pacman-dev/2007-August/009077.html

sync400 : Install package with dep that conflicts with older version of package
sync401 : Ensure we choose provider already in target list
  http://www.archlinux.org/pipermail/pacman-dev/2007-July/009041.html

sync402/sync403 (failing) : Choice between two providers
  http://www.archlinux.org/pipermail/pacman-dev/2007-July/008787.html

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-09-06 19:30:18 -05:00
Andrew Fyfe
678983d262 scripts/*.sh.in: Clean up and fix a few bugs
repo-add, repo-remove:
		'bsdtar -c * | ...' doesn't work (you need '-f -'). Code clean up
		eliminated this bug.

		Removed the multiple checksum support, pacman now only supports MD5, so
		there's no need for the database to contain multiple checksums.

		Quote all variables containing file/dir names to prevent paths
		containing spaces from causing problems.

		Add msg, warning and error functions.

		General code clean up.

	pacman-optimize:
		Use a sub-directory in /tmp for working files to make it easier to clean
		up at the end.

		Add quotes round $@ in die and die_r, otherwise printf can't display the
		message correctly.

	makepkg:
		Disable colour output if stderr is not a tty.

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-09-06 19:28:57 -05:00
Dan McGee
9cceb3d9c4 Add a few missing includes, caught while compiling on cygwin
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-06 19:03:38 -05:00
Chantry Xavier
3987137505 contrib : update zsh and bash completion to reflect the new sync dbs location.
I wonder how many tools / scripts deal directly with the sync databases under /var/lib/pacman/ ,
I doubt these are the only ones.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-09-05 20:28:46 -05:00
Dan McGee
461bc9e6ce libalpm: remove outdated files from POTFILES.in
Fixes 'make dist' target as sha1.c and md5driver.c no longer exist.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-04 07:12:57 -05:00
Travis Willard
824b7fd27b Fix compile-time error with de.po, runtime error with db.c
One string in de.po differed pretty strongly with its translated version.
It may still be totally wrong as far as translations go, but it compiles
now. Get translater to check.

Also, ensure the proper dbpath gets set in the db when it's created.

Signed-off-by: Travis Willard <travis@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-03 20:50:24 -05:00
Dan McGee
b3a1619457 Add new mirror
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-03 08:14:20 -05:00
Matthias Gorissen
d34db57b6b Update German translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-02 09:50:07 -05:00
Chantry Xavier
aef1c88f3b libalpm/remove.c : avoid duplicated packages in removal list.
Suppose a package foo depends on foo1, foo2, ..., foon.
Doing pacman -Rc foo1 foo2 ... foon added foo n times to the removal list,
because what checkdeps return is something like :
foo1 is requiredby foo
foo2 is requiredby foo
...
foon is requiredby foo

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-09-02 09:33:46 -05:00
Nagy Gabor
788fcee0dc Update po/hu.po
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-08-30 14:31:38 -04:00
Travis Willard
b6f89f03af separate local from sync dbs on filesystem
Introduce two new methods into the API - alpm_db_register_sync and
alpm_db_register_local, which replace the functionality of
alpm_db_register. db_register_local always returns the local DB, and
db_register_sync will always try to register a sync DB. This conceptually
separates the local DB from sync DBs in the code. Also updated the pacman
frontend to use the new functions. In addition, this changes the location
of all sync DBs in the filesystem from $DBPATH/$REPO to $DBPATH/sync/$REPO,
This removes the silly limitation that a sync DB couldn't be named 'local',
along with structurally separating sync DBs and the local DB in the
filesystem.

Signed-off-by: Travis Willard <travis@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-08-26 23:44:32 -04:00
Chantry Xavier
26441cf65c libalpm/add.c : fix backup handling.
During last refactoring, a "continue" somehow became a "return(0)" :)

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-08-26 13:34:16 -04:00
Chantry Xavier
c8011954a5 pacman/sync.c : kill extra newline with groups on -Ss operation.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-08-26 13:32:00 -04:00
Andrew Fyfe
3e418a1534 scripts/makepkg.sh.in: Add missing [
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-08-26 13:31:05 -04:00
Dan McGee
5c9eec5570 libalpm: add newlines to all strings passed to log callback
This allows us to remove the hack in the frontend where we added a newline
to everything coming out of the pm_printf functions, and instead let the
developer put newlines where they want them. This should be the last hangover
of that auto-newline stuff.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-08-23 22:26:55 -04:00
Dan McGee
2798ebbb62 libalpm/remove.c: check for ability to unlink is wrong
As reported by JGC in FS #7652, the check for EACCES is not exactly correct.
We need to check for the ETXTBSY error as well. This is necessary on FreeBSD.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-08-23 20:47:40 -04:00
Chantry Xavier
656c895ca4 makepkg : add -L (--dereference) to file.
makepkg didn't correctly detect the type of the archive
since it didn't dereference symlinks, and so failed
to extract the source tarball.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-08-23 14:14:19 -04:00
Dan McGee
10c3f335d0 pacman.c: clarify reason for doing 2 strcmp operations
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-08-22 14:02:14 -04:00
Dan McGee
e24bcc395e configure.ac: Remove the hyphen from the version suffix
Also switch out outdated PACKAGE_STRING variable for pacman_display_version.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-08-21 23:37:04 -04:00
Dan McGee
515754faac Various valgrind mem leak fixes
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-08-21 23:29:10 -04:00
Dan McGee
d09d114e99 Add a default cachedir if one wasn't specified
Use the default cachedir (specified at compile time) if one wasn't specified
on the command line or in the config file.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-08-21 21:53:38 -04:00
Dan McGee
c22e381a8b Post trial install changes, round one
A bunch of changes related to my first "real" install of pacman-git into
/usr/local and trying to use it.

* Shift some uses of free -> FREE in libalpm.
* Move stat and sanity checks of config paths into libalpm from the
  config and argument parsing in pacman.c.
* Fix issue where dbpath still was not defined early enough due to its
  requirement for being used in alpm_db_register. This should be rewritten
  so it doesn't have this dependency, but this will work for now.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-08-21 21:28:05 -04:00
Nagy Gabor
13525255dc Add sync1003 pactest.
The sync package pkg3 depends on the sync package pkg2, but pkg1 replaces pkg2.
So pkg2 is added to the remove list.

When checkdeps checks if pkg2 can be removed, it looks at the packages that require pkg2
(with the RequiredBy field of pkg2), but this doesn't contain pkg3 at this point.
RequiredBy fields are only updated after the packages are installed.

Proposed solution : checkdeps should know both the remove and upgrade list to decide properly.

Reference:
http://www.archlinux.org/pipermail/pacman-dev/2007-July/008972.html

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-08-20 15:24:28 -04:00
Nagy Gabor
b1808930ce libalpm/add.c,trans.c : cleanup of requiredby handling.
This patch cleans up and fix the _alpm_trans_update_depends function
and ensure that all requiredby fields are filled in case of multiple satisfiers
(previously, the handling of mutliple satisfiers in that function was inconsistent).

This makes a special case handling of requiredby in commit_single_pkg() obsolete,
and so allows cleaning that code as well.

Also fixed upgrade056 pactest because :
1) the requiredby fields were wrong, and this wouldn't happen with the fixed _alpm_trans_update_depends().
2) this is a very unusual case anyway (and handling all corner cases combined to a broken database
  seems nearly impossible to achieve).

References :
http://www.archlinux.org/pipermail/pacman-dev/2007-July/008919.html
http://www.archlinux.org/pipermail/pacman-dev/2007-July/008920.html

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-08-20 15:23:53 -04:00
Dan McGee
17d9122e01 Fix for FS 6404 and functionalize some cachedir handling stuff
In order to best resolve bug 6404, move some cachedir handling stuff out of
sync.c and into util.c and create two new functions: filecache_find and
filecache_setup. sync.c was rewritten to use these, and alpm_fetch_pkgurl
now also uses these routines.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-08-20 15:23:46 -04:00
Dan McGee
942175feaa Add const qualifier to md5_file and alpm_get_md5sum
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-08-20 12:58:17 -04:00
Dan McGee
3acbf56bba Clean up architecture handling in configure.ac
Remove the need for two variables for the architecture-specific switches
(things like "-march=i686") by combining it into one variable. Also allow
configure to proceed with only a warning if we don't have presets for the
detected architecture- it is kind of stupid to restrict ourselves like we
had been.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-08-20 00:38:37 -04:00
Dan McGee
9ea7c5c402 Fix symlink overwrite issue in CVS 2007-08-17 20:07:05 +00:00
Chantry Xavier
f81e619974 libalpm/sync.c : don't go back on STATE_PREPARED when committing fails.
In my opinion, a commiting transaction that failed isn't equivalent
to a prepared transaction.
Some things could have been done in the meantime.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-08-17 14:46:27 -04:00
Dan McGee
fc65a9bcb1 Fix some errors spit out by -Wextra
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-08-16 16:19:06 -04:00
Dan McGee
16c91bedf8 configure.ac: Clean up and document version number increments
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-08-16 15:27:38 -04:00
Andrew Fyfe
1cb6d80631 Clean up MD5 code.
* Move alpm md5 functions to lib/libalpm/util.c
	* Remove unneeded includes for md5.h
	* Replace md5 implementation with one from http://www.xyssl.org

Dan: clean up XySSL code by removing parts we don't use, and add a note
saying what changed.
Dan: fix alpm_get_md5sum, off by one error on the malloc call and other
small things.

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-08-16 13:17:33 -04:00
Andrew Fyfe
ba67fdae63 Remove support for SHA1 from pacman.
There's no need for a second hashing algorithm. MD5 serves the purpose
of verifying that a package file hasn't been corrupted during download.

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-08-16 11:30:38 -04:00
Chantry Xavier
ee977019e3 libalpm/db.c : add alpm_db_unregister_all.
This basically moves the code from alpm_release, which was mostly about
unregistering all databases, to a safer alpm_db_unregister_all.
This allows to avoid modifying the dbs_sync list while iterating over it,
and and also prevent alpm_release from looping infinitely when a database
can't be unregistered.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-08-16 11:08:17 -04:00
Chantry Xavier
f131ee9c56 Update manpage with new query options.
Dan: did a bit more updating and clarifying.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-08-16 11:05:36 -04:00
Dan McGee
47cada81a0 pacman.c: Alphabetize listing of query options
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-08-16 11:04:58 -04:00
Chantry Xavier
8038190c7c libalpm/db.c : allow unregistering db for interrupted transaction.
This prevents alpm_release to loop infinitely in case of
an interrupted transaction, where the database wasn't
unregistered.
alpm_release should probably also be fixed, as it can
still loop if db_unregister fails for another reason.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-08-15 20:22:31 -04:00
Chantry Xavier
0f539832f4 new query options : explicit (-Qe) and deps (-Qd).
The t shortcut for --test was removed,
the orphan option (previously -Qe) was renamed to -Qt,
-Qe lists all packages installed explictly,
and -Qd lists all packages installed as dependencies.

Besides, t can be combined with either e or d.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-08-15 20:21:43 -04:00
Chantry Xavier
064de149b7 libalpm/query.c : makes orphans and foreign options as filters.
The --foreign and --orphans functions now behave as a filter
for the other options. This cleans the code a bit, and will
make easier the adding of new filter options, like
explicit (show only explictly installed packages) or depends
(show only packages installed as dependencies).

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-08-15 20:21:18 -04:00
Dan McGee
f4dbb204f1 src/util: Clean up headers and a few fixes
Remove some unnecessary headers in the two utilities as well as fix
a possible non-null termination issue in vercmp.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-08-15 20:16:46 -04:00
Dan McGee
a65ad4efc1 package.h: implement origin_data union in pmpkg_t struct
We were using a void *data element in pmpkg_t before, which is unsafe by its
nature of being untyped. Reimplement data as origin_data being a union that
can hold either a path to a package file or a pointer to a cache database,
and make the other necesary updates in the code to reflect this. See package.h
for details.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-08-14 10:14:35 -04:00
Dan McGee
49c29e16b3 Code cleanup
Remove the commented desc_localized stuff, we can find it later in version
control. Also remove some unnecessary includes of the stat header and
use -fstack-protector-all which is a bit more broad.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-08-14 09:33:55 -04:00
Andrew Fyfe
47ee89ada9 scripts/makepkg.sh.in: Fix 2 bugs
- Downloaded files weren't being copied to $srcdir
	- Counter wasn't being incremented for checksum checks

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-08-12 21:19:08 -04:00
Chantry Xavier
f2c7187e43 pacman/sync.c : return 0 on succesful search, 1 otherwise.
Closes FS#7690.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-08-12 21:18:44 -04:00
Nagy Gabor
3a0a4db129 libalpm/conflict.c : small speed-up and fix.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-08-12 21:15:37 -04:00
Nagy Gabor
ab06221521 libalpm/conflict.c : small memleak fix.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-08-12 21:14:14 -04:00
Nagy Gabor
b96922679e Add two pactest for versioned conflicts.
A side effect of the previous commit ( ea9a756eea )
is that it's now possible to use versioned conflicts.
Add two new conflict pactests for showing it.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-08-12 21:14:05 -04:00
Dan McGee
dc5e6d5d87 Update mtune/mcpu/march comments in makepkg.conf
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-30 23:11:32 -04:00
Dan McGee
e0ffc60c53 Fix re-pacman locale issues
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-26 20:21:38 -04:00
Juan Pablo González Tognarelli
e4f56298be Update Spanish translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-26 19:06:56 -04:00
Andrew Fyfe
ce10b5f1e2 Fix gettext output in repo-{add,remove}
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-26 18:59:40 -04:00
Dan McGee
178c1d228d Cleanup of pacman.c and addition of default paths to frontend
Instead of barfing when the root path and db path haven't been defined,
have pacman set them to some sane defaults when they aren't specified on
either the command line or the config file.

Also do some cleaning of error output and Doxygen comments.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-23 16:58:04 -04:00
Chantry Xavier
ea9a756eea libalpm/conflict.c : cleanup + fix for conflict001.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-20 11:58:52 -04:00
Nagy Gabor
72c15482dc add conflict001 pactest.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-07-20 10:42:01 -04:00
Nagy Gabor
0d00f7095f libalpm/sync.c : two memleak fixes in _alpm_sync_prepare.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-07-20 10:37:24 -04:00
Chantry Xavier
b0c064d59b libalpm/sync.c : fix DEPENDSONLY flag handling.
I didn't like the patch proposed by Nagy for the sync1002 pactest here:
http://www.archlinux.org/pipermail/pacman-dev/2007-July/008971.html

So here is another attempt of fixing it.
In case of the DEPENDSONLY flag :
1) pass an empty list to resolvedeps instead of the list of targets
2) empty the trans->packages targets list before adding the resolved deps.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-07-20 10:34:28 -04:00
Nagy Gabor
5991e85abb Add sync1002 pactest.
Reference:
http://www.archlinux.org/pipermail/pacman-dev/2007-July/008971.html

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-07-20 10:33:42 -04:00
Chantry Xavier
df2447cd23 libalpm/alpm_list.c : add SYMEXPORT to all alpm_list_ functions.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-07-20 10:28:07 -04:00
Dan McGee
23a4d51b7a Reorder functions in libalpm/package.c for Doxygen purposes
Put all of the public functions at the top and inside the Doxygen packages
group.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-18 10:26:21 -04:00
Nagy Gabor
88077889a4 Hungarian translation updates
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-18 10:12:14 -04:00
Chantry Xavier
240bdf5971 libalpm/deps.c : split alpm_depcmp.
That function wasn't big, but this might be useful
for later refactoring of the search for satisfier code.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-17 10:10:27 -04:00
Chantry Xavier
c68d3cc38a libalpm/deps.c : split sortbydeps function.
The _alpm_sortbydeps function has two main part :
1) initialization of the graph structure
2) the sorting itself

So it didn't seem bad to move the first part to a second function.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-17 10:06:26 -04:00
Dan McGee
466d289e6a Remove unnecessary entries from .gitignore files
.gitignore works recursively, so we don't need Makefile and Makefile.in
in all of the subdirectory .gitignore files.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-16 16:49:28 -04:00
Chantry Xavier
fa2164a59e Use only one mirror list for all repos
Fully implement what this commit allows:
ebad199614

Dan: update .gitignore as well.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-16 16:42:09 -04:00
Dan McGee
c9189f54cd Man page revision time
Spruce up the asciidoc formatting, fix a few issues that we had. Formatting
now looks pretty good in both the manpage output and the XHTML output.

Also added some options that we have changed since 3.0, and a few wording
updates, etc.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-16 12:57:02 -04:00
Chantry Xavier
99572ed8f6 new pmdepend_t / pmdepmissing_t accessors.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-16 09:21:13 -04:00
Chantry Xavier
ab2354e762 Add remove046 pactest for FS#7622.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-07-16 09:20:17 -04:00
Dan McGee
1d97da9450 makepkg: Add note with some required programs for execution
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-15 22:31:29 -04:00
Dan McGee
591bfabbd3 Clean up libalpm/add.c and revise file extraction code
This is a full refactoring of _alpm_add_commit into multiple functions and a
better layout for later. Some highlights:

* No regressions in pactest performance.
* Much cleaner layout. add_commit is split into four functions:
  upgrade_remove, extract_single_file, commit_single_pkg, _alpm_add_commit
* No more super-functions, the heaviest (extract_single_file) is finally
  under 400 lines, with much improved commenting as well.
* Incorporation of Andrew Fyfe's ideas for fixing FS #7484. Try to handle
  all possible cases of extraction combinations with files, symlinks, dirs,
  and non-existant entries on the filesystem. This should make our dealings
  with libarchive fall more into our control.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-15 21:36:46 -04:00
Chantry Xavier
aaf291c11c Add new sync012 pactest.
This test installs three packages with a circular dependency,
to check everything still goes fine in that case.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-07-15 19:46:18 -04:00
Dan McGee
a909fe6018 Update AUTHORS file, change encoding to UTF-8
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-15 15:00:49 -04:00
Dan McGee
a1e57cbec8 Add --asdeps option to pacman
This replaces the former -D operation that was undocumented and rather
hacky. It can be used with add, upgrade, or sync transactions and will affect
all packages installed. Should close FS #7193.

Also tell makepkg to use this new flag.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-15 12:46:02 -04:00
Nagy Gabor
c2920033d0 libalpm/deps.c : cleanup + little fix for resolvedeps.
The resolvedeps function was a bit negligent, as showed by the sync011 pactest.
Reference :
http://www.archlinux.org/pipermail/pacman-dev/2007-July/008782.html

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-07-15 10:37:38 -04:00
Dan McGee
66b09410b4 Switch repo-add, repo-remove, and pacman-optimize to bsdtar
Relatively straightforward fixes (s/tar/bsdtar/g, add hyphens to options).

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-15 10:29:26 -04:00
Dan McGee
f0ea21cffc Ensure requiredby entries are removed during an upgrade
This fixes the failure of the requiredby004 pactest in a not so pretty way,
but it gets the job done. I purposely used the extremely long name of
PM_TRANS_TYPE_REMOVEUPGRADE to be both clear and in the hope that someone
else will figure out a better solution.

Original idea from Nagy Gabor, patch updated and cleaned for current code.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-14 09:34:39 -04:00
Nagy Gabor
ce1fb07436 libalpm/sync.c : ldconfig is run twice.
remove _alpm_ldconfig call from _alpm_sync_commit,
since sync operation causes an upgrade transaction,
where ldconfig is already run.

Reference:
http://www.archlinux.org/pipermail/pacman-dev/2007-April/008132.html

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-14 01:12:18 -04:00
Chantry Xavier
edcefb1d58 libalpm/remove.c : revert part of commit to fix remove044 pactest
In 1c9f30b9fa

This change should be done AFTER the TODO in recursedeps is implemented.
Then we'll be able to first sort the list, then call recursedeps which keeps
it sorted. For now, the sorting should still be done as the last step.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-13 17:18:27 -04:00
Dan McGee
b5ab4bffb7 Add TRANSLATORS file
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-13 16:01:17 -04:00
Nagy Gabor
9f9086573a Update hungarian translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-13 15:44:39 -04:00
Chantry Xavier
1c9f30b9fa libalpm/deps.c : fix for remove044 pactest.
Patch from Nagy that makes removedeps use alpm_depcmp.

I also renamed removedeps to recursedeps, as it can have
a more general usage, and added an include_explicit argument,
so we can control if packages explictly installed are added or not.

Note: Small changes made by me (Dan) as well- mostly some English grammar
correction and a few other cleanups.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-13 10:37:13 -04:00
Chantry Xavier
8d62835ba1 Remove conflict message for non-existent files (reworked)
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-13 10:18:52 -04:00
Chantry Xavier
5ed501565e remove sync022 and sync023 pactest.
Currently the replaces flag is only used for forcing the replacement
of package (eg because of a renaming) on sysupgrade operation.

If the replaces flag should also be used for resolving conflicts,
then it should be discussed and specified correctly first.

References:
http://bugs.archlinux.org/task/7415#comment17207
http://www.archlinux.org/pipermail/pacman-dev/2007-June/008553.html
commit which introduced the replace flag : 4fcec8f03f

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-07-13 10:11:54 -04:00
Chantry Xavier
7234785601 libalpm/remove.c : Rsd combination.
Currently the d (nodeps) option skips the s (recursive) part,
rendering the Rsd combination totally useless.
This patch makes a recursive removal still possible using the nodeps option,
as Romashka asked there :
http://bugs.archlinux.org/task/6057#comment17784

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-07-13 15:47:20 +02:00
Andrew Fyfe
c0a7d9d82d Some doxygen comments.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-07-12 16:00:58 -04:00
Dan McGee
d402583c43 Remove some more conditional include stuff
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-12 16:00:35 -04:00
Andrew Fyfe
fd3a1a92c8 Fix previous makepkg patch, and some pacman output.
makepkg: We still need the source files in $srcdir because PKGBUILDS need
         access to noextract() files and other file not handled by by
         extract_source(). (eg config files)

query.c: Fix some output formating.

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-07-12 15:22:16 -04:00
Dan McGee
20f73d6299 Remove versioncmp.{c,h}, clean up selective #ifdefs
Remove versioncmp.c by moving all functions to locations that make sense.

Move replacement functions (for building without glibc) into util.c where
they belong, and do proper checks for them instead of using __sun__, etc.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-12 15:20:43 -04:00
Dan McGee
653fb8fe03 Remove 'buildtype' from libalpm and pacman
Remove unused buildtype field from pmpkg_t struct and anything associated
with it, as it is unused at the moment. If we need to readd it, it is an
easy revert of this commit.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-11 23:36:13 -04:00
Dan McGee
147a32b32d Add {PKGBUILD,install}.proto to contrib/ directory
Also update README and Makefile.am in the contrib/ directory.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-11 11:03:33 -04:00
Chantry Xavier
cb164c3130 conflict.c: start cleaning conflict check functions
The three chk_ functions overlap for packages both in targets and in the
database. This caused the same conflict to be found in both direction
(A conflicts with B, and B conflicts with A).

This patch avoids this duplication. which shouldn't be needed, but other
changes might be required for that to work correctly.

This also has the unexpected side effect to hide the failure of sync022
pactest, for FS #7415. That's maybe not a good thing though..

Note from Dan: sync022 does succeed, but a sync023 pactest added to check
regressions also seems to pass. This may be a valid fix to this 'problem'
sync022 was meant to find.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-11 00:48:03 -04:00
Dan McGee
37736a56f9 Add new pactest that is backwards of sync022
sync022 was added here:
39b6549655

This pactest reverses the installed package to see if it is correctly
picked, in order to test some further changes to this depcheck code that
currently makes sync022 fail.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-11 00:45:15 -04:00
Dan McGee
39b6549655 Update translation files on libalpm side after gettext change
Because of this commit:
ea1fef69ad
we lost a lot of gettext-ized messages on the libalpm side. Remove them
in order to clean out these files a bit.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-11 00:31:27 -04:00
Sergej Pupykin
1646fcc5bd Use mbstowcs instead of strlen where applicable
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-10 23:36:15 -04:00
Dan McGee
64e45a36f8 Create the pacman DB and cachedir directories upon install
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-10 14:58:45 -04:00
Dan McGee
d12c4f4b29 Fix issue with <dbpath>/db.lck being truncated
snprintf takes a length including the '\0' character, this wasn't accounted
for originally. Fix it.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-10 14:31:39 -04:00
Dan McGee
ea1fef69ad Remove gettext calls from all PM_LOG_DEBUG messages
There is no real reason to burden our translators with these messages, as
anyone helping to debug these will probably want them in English.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-10 14:24:58 -04:00
Andrew Fyfe
9a9928f1b8 Remove conflict message for no-existent files.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-07-10 11:35:32 -04:00
Andrew Fyfe
142225fd7d FS#7271 - [patch] option for avoiding caching netfiles
Change the behaviour of makepkg so no longer stores a copy of the
source tarball in $srcdir, instead it downloads all sources to $SRCDEST
then extracts them to $srcdir.

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-07-10 11:18:17 -04:00
Chantry Xavier
862ea62761 add remove045 pactest.
Another test a bit more complicated for -Rs,
to prevent regression if removedeps is changed.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-07-10 11:10:54 -04:00
Nagy Gabor
c4e712c0ef add remove044 pactest.
This indicates a problem in the current removedeps function
(no version checking) for which Nagy proposed a fix here :
http://www.archlinux.org/pipermail/pacman-dev/2007-June/008539.html

But as he mentioned there, a better fix might be to use the checkdeps
function in the removedeps one.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-07-10 11:10:54 -04:00
Dan McGee
d8b57fcb76 backport fix for FS 7578 2007-07-10 15:08:33 +00:00
Dan McGee
573b80405c makepkg: when running as root, cut out some warnings
When running as root, we don't care if fakeroot is installed, and the user
certainly isn't "unprivileged". Cut out these warnings.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-10 10:31:03 -04:00
Andrew Fyfe
5e68e9d451 Cleanup of pacman_deptest()
Clean up some left over code from
http://projects.archlinux.org/git/gitweb.cgi?p=pacman.git;a=commitdiff;h=7653bb93997f52848b54ab80868cd6da52808a75

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-10 10:15:24 -04:00
Andrew Fyfe
7ec2e088ec scripts/makepkg.sh.in: Add CHOST to the list of variables exported.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-07-10 10:00:00 -04:00
Chantry Xavier
57d77eab32 libalpm/trans.c : exit the forked process correctly in case of errors.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-07-09 17:47:05 -04:00
Dan McGee
8f2575b26e Add AC_SYS_LARGEFILE to configure.ac
This defines _FILE_OFFSET_BITS == 64, which makes stat calls transparently
use stat64, etc. This allows us to support large files, such as packages
over 1 GB in size. libarchive was already correctly compiled with this macro.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-09 16:40:50 -04:00
Andrew Fyfe
7d74572887 Change the exit code for pacman_deptest().
Changed the exit code for missing deps from 1 to 127 because 1 is used
for other errors. makepkg breaks if pacman exits with 1 for any reason
other than a missing dep.

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-07-09 15:57:38 -04:00
Dan McGee
1480ac29e4 Clean up the alpm handle
Add some comments in handle.h, and remove the pmaccess_t part that we
don't even use.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-09 15:23:26 -04:00
Dan McGee
d2613b97fa Add asciidoc checking to configure.ac, make manpage generation optional
Include manpages when we ship a package tarball, and allow them to be
generated by the end user if they want by using the --enable-asciidoc option
to ./configure. This will allow us to maintain manpages in an easier to modify
format while still keeping the make dependencies to a minimum.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-09 14:38:02 -04:00
Dan McGee
cd5b38a4b0 Add a manpage for repo-add
We still need some work here- we should have a repo-remove manpage link
to this one, and we should not have to struggle with asciidoc formatting
to get it to work like any other multiple-command manpage works.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-09 14:22:01 -04:00
Dan McGee
e412ac19f5 Asciidoc updates- make it pretty, fix build, etc.
* Fix up the target so we rebuild the manpages when we edit the corresponding
  text file.
* Add vim modelines to all of the asciidoc files ensureing the right syntax
  highlighting is used and we have expandtabs turned off.
* Start making a few small changes to PKGBUILD.5 to make it pretty in both
  HTML and manpage format output.
* Fix the manlink macro to include the manpage section in the link.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-09 13:47:56 -04:00
Andrew Fyfe
f1fac6abfb Update PKGBUILD example.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-07-09 13:47:56 -04:00
Andrew Fyfe
ab87657b93 Add Synopsis section to man 5 pages.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-07-09 13:47:56 -04:00
Dan McGee
499b750c2f Make manpage generation depend on footer.txt
If footer.txt is updated, we need to regenerate the manpages, this little
fix should do this.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-09 13:47:56 -04:00
Andrew Fyfe
fe9a0de32e doc/Makefile.am: Set pacman version and date when man pages are generated.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-07-09 13:47:56 -04:00
Andrew Fyfe
be0a472cb7 Convert the remaining man pages to asciidoc.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-07-09 13:47:56 -04:00
Andrew Fyfe
493e5fb782 Move common stuff into footer.txt and some formating tweaks.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-07-09 13:47:55 -04:00
Andrew Fyfe
2f7d2485f5 Add two asciidoc manpages to the doc/ dir
Add the pacman.8 and pacman.conf.5 asciidoc manpages to the GIT tree, with
the rest to follow.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-09 13:47:55 -04:00
Dan McGee
168b795f9e Start addition of asciidoc stuff
Add some asciidoc generation stuff to the doc/ Makefile.am so we can get
some manpages up and working. Add necessary stuff to gitignore, and check
in the asciidoc.conf file along with the footer for all of the manpages.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-09 13:47:55 -04:00
Dan McGee
91f1752701 Remove old 'static' manpages in anticipation of the asciidoc switch
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-09 13:47:55 -04:00
Dan McGee
4906e15d0d Remove gettext from any alpm_logaction calls
We shouldn't translate log messages to pacman.log so it is consistant and
can be parsed by other tools. Remove all gettext _() around these strings.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-09 13:44:48 -04:00
Dan McGee
a2186a43a8 Add top level hidden file code to package.c
This was already taken care of in add.c by commit
2ae0438660, but was missed in package.c.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-08 23:46:48 -04:00
Dan McGee
a501b72e40 Make paragraph text in scripts single strings
It is much easier for translators to deal with paragraphs as strings rather
than by lines. Take all usage and version information and convert it to this
format.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-06 19:35:32 -04:00
Dan McGee
b5f8a44beb Move scripts from *.in to *.sh.in so gettext can determine type
If we move the scripts from *.in to *.sh.in and *.py.in, gettext can pull the
required strings to translate a whole lot easier. Do this.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-06 18:43:24 -04:00
Dan McGee
49f447d02c First step of moving translations from src/pacman/po to po/
Move the translations from src/pacman/po to just po/ so we can include the
scripts gettext translations in the same message catalog as that of the
pacman frontend. The libalpm message catalog, for now, will remain a separate
existence.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-06 17:59:08 -04:00
Dan McGee
15e1ce2e70 Various small fixes as suggested by some static code checkers
I ran flawfinder and sparse over the pacman source code and found a few
things that were worth fixing (and were quick fixes).

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-06 12:11:55 -04:00
Dan McGee
6b7b974318 Fix up pactest TODO
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-06 00:33:26 -04:00
Dan McGee
59d9ccf48d Reduce delay in pactest when running MODIFIED tests
pactest was sleeping for 3 seconds, which is unnecessary. Reduce it to 1.5
seconds and clean up the code a bit anyway.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-02 10:06:03 -04:00
Chantry Xavier
4d9b5d4a2a pacman/query.c : return after a query on all packages.
Previously, the following error was displayed even after a valid
and successful query operation on all packages,
like -Q , -Ql, -Qi, -Qil :
no targets specified (use -h for help)

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-07-02 09:22:52 -04:00
Dan McGee
4d286e567b Update 'submitting-patches'
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-01 23:27:20 -04:00
Chantry Xavier
89ed15c9c2 pacman/packages.c : print an error for files that can't be stated.
The -Ql operation is supposed to print all files but directories.
stat was used for detecting directories. However, when stat failed,
(because the file doesn't exist or is not readable), the files
were still displayed just like the others.

Now, these files are printed on stderr, with the corresponding error message.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-07-01 22:32:18 -04:00
Chantry Xavier
7a42e24400 libalpm/add.c : fix for FS #7484
Adds the ARCHIVE_EXTRACT_NO_OVERWRITE libarchive flags
for extracting files and directories.
This will prevent symlinks for being overwritten by directories.
All other files that need to be extracted should already have
been deleted previously by pacman.
This flag is not used for extracting files in backup array
to /tmp/alpm_XXXX, because this file is created by mkstemp first,
and so needs to be overwritten by the file from the archive.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-07-01 22:31:40 -04:00
Chantry Xavier
f55f7f100f libalpm/add.c,util.c : log ARCHIVE_WARN warning to debug output.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-07-01 22:31:40 -04:00
Dan McGee
cd3a636813 Remove unnecessary and extra includes
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-01 20:22:42 -04:00
Dan McGee
19f66083f0 Add mode and type checking to pactest for files
Add the ability to check the permissions and type of a file within the
framework of pactest. Two new rules can be used:

self.addrule("FILE_TYPE=bin/foo|file")
self.addrule("FILE_MODE=bin/bar|644")

TODO: add the ability to add different types of files (eg links) via the test
package building framework, and add the ability to change the modes on files.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-01 20:03:15 -04:00
Dan McGee
d70116bfbc Move Doxygen manpage generation to doc/ directory
Instead of doing the doxygen work in the libalpm/ dir, do it with the rest
of the docs in the doc/ dir.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-07-01 18:40:43 -04:00
Chantry Xavier
2657a2bfb7 libalpm/add.c : ignore libarchive warning.
With libarchive 2.2.3 (previously 1.3.1), archive_read_extract now returns ARCHIVE_WARN
when a package is extracted as user, because for example, UID=0 or SUID bit can't be set.
This patch makes pacman not treating these warnings as errors anymore,
but simply ignoring them.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-06-28 19:29:38 +02:00
Chantry Xavier
1a3b3bc130 libalpm/util.c : stat returns 0 on success
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-06-28 17:14:26 +02:00
Andrew Fyfe
78bac81a58 scripts/makepkg.in: Don't include .PKGINFO etc in .FILELIST
And move .PKGINFO and .FILELIST to be the first to files included in the
package.

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-06-28 13:45:12 +01:00
Dan McGee
7daa6708d2 Remove lockfile configuration from frontend, make it job of libalpm
I previously introduced some patches to make just about every path in
pacman/libalpm configurable; doing this with the lockfile seemed a bit too
far and we really should just place the lockfile where it belongs- with the
DB that needs locking.

More details in this thread:
http://archlinux.org/pipermail/pacman-dev/2007-June/008499.html

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-27 23:34:38 -04:00
Dan McGee
7bdb904af5 pacman.c: make parseconfig a bit more robust
Don't let parseconfig overwrite settings that parseargs already made.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-27 22:58:21 -04:00
Dan McGee
ad691001e2 Remove scriptlet START and DONE commands that we don't use
The scriptlet calling had some unneeded complexity for the time being
which we aren't using here. Let's get rid of it until we find a good way
to implement it correctly.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-27 22:12:59 -04:00
Andrew Fyfe
1e56e41d63 scripts/makepkg.in: Use bsdtar to find packages for xdelta.
When looking for old packages to create a delta from used bsdtar to read the
packages .PKGINFO to check it's name and arch instead of depending on the
filename of th package.

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-06-27 20:35:09 -04:00
Chantry Xavier
269022ccae scripts/makepkg.in: Fix creation of .FILELIST
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-06-27 20:35:09 -04:00
Baptiste Daroussin
24c41f5190 FS7485: Replace tar/cpio/unzip with bsdtar for extracting/creating packages.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-06-27 20:35:08 -04:00
Dan McGee
5a3b595837 Fix wrong permissions on pacnew extraction
First reported here:
http://bbs.archlinux.org/viewtopic.php?pid=261861

Newly created files were done with the standard umask, so those that are
extracted seperately and copied to a .pacnew extension will have the wrong
permissions. This should hopefully fix this.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-27 20:32:37 -04:00
Dan McGee
77bbe58197 Remove TODO items that have been taken care of.
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-27 20:32:37 -04:00
Chantry Xavier
3a27fbaae4 libalpm/remove.c : file variable used before being initialized.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-06-28 01:41:15 +02:00
Dan McGee
d821d75e25 Add archlinux.de mirror
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-27 09:55:20 -04:00
Dan McGee
51aeac33e9 Add fix for config parsing issue in case of another pacman 3.0.X release 2007-06-26 19:35:00 +00:00
Chantry Xavier
31cbbbf953 Add pactest to help debug FS #7415
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-26 15:27:56 -04:00
Chantry Xavier
0e4c1e86ed Add sync301 pactest- pacman gains new deps and should be pulled in
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-26 12:00:22 -04:00
Nagy Gabor
7653bb9399 Make alpm_splitdep immutable
The alpm_splitdep function formerly overwrote the input string, causing
a few issues. Fix this.

Signed-off-by: Nagy Gabor <ngaba@petra.hos.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-26 11:49:00 -04:00
Nagy Gabor
da66bedf4f Remove unnecessary trans parameter from _alpm_checkdeps
The trans parameter was never used, so remove it.

Signed-off-by: Nagy Gabor <ngaba@petra.hos.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-26 11:43:02 -04:00
Dan McGee
2ae0438660 Don't extract any top-level files in a package that start with '.'
For future possibilities, don't extract any files that start with '.'.
This will allow us to add features such as the ChangeLog viewing without
having to wait to include these files in packages, because older versions
of pacman will be forward compatable with 'hidden' files at the root level
of the package.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-26 11:42:41 -04:00
Dan McGee
f401e52398 Mirror update and NEWS updates
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-26 11:41:31 -04:00
Dan McGee
0de5c97193 libalpm/util.c: remove unnecessary include
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-20 17:54:42 -04:00
Dan McGee
4b00fdeef0 Revert erroneous chmod 'fix'. 2007-06-20 21:52:24 +00:00
Dan McGee
f372a542b9 Revert "Fix libarchive permission extraction"
This was a bad way to fix a problem upstream. Doing this resulted in
symlink permissions being applied to files installed on the system, leaving
some binaries with 77 permission, etc.

This reverts commit 4e6b7c1cde.
2007-06-20 17:38:56 -04:00
Dan McGee
0cfb412220 Check in changes for 3.0.5 release (mostly backports)
* Update the mirrorlist
* Fix FS7338- the previous repo-add fix didn't quite do the job, but it
  should be fixed now.
* Small updates to translations files
* Add -mtune=generic to default CFLAGS (req'd by GCC 4.2)
2007-06-18 00:15:36 +00:00
Dan McGee
cacf968970 Update Doxyfile and add a few missing parts of documentation
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-17 13:20:17 -04:00
Dan McGee
2ab320a388 Remove some use of goto in the pacman frontend
Refactor the goto cleanup; statements out of add.c and remove.c, and move
what the cleanup: label did into a function.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-17 13:20:17 -04:00
Dan McGee
520841ee8a Quick updates to the bash completion script
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-17 13:20:17 -04:00
Chantry Xavier
a486fec3c4 FS7338: Fix conflicts typo totally this time.
The last typo fix for conflicts wasn't complete,
it only fixed one occurence of the conflicts variable, instead of the two :
http://www.archlinux.org/pipermail/pacman-dev/2007-May/008222.html

This caused all conflicts statement to be ignored, so all databases
will need to be rebuilt with a fixed repo-add.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-06-17 18:57:15 +02:00
Andrew Fyfe
7bd4486ebd scripts/makepkg.in: Forgot the fakeroot switch when changing to GNU getopt.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-06-13 09:32:09 -04:00
Dan McGee
af813a8bad Add ARM architecture to configure.ac
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-13 01:12:22 -04:00
Dan McGee
620a811f91 Clean up pacman/sync.c and organize it a bit
Re-add some checks for a valid target list. In addition, move variable
declarations to the most local scope possible, which should help in finding
errors that were previously uncaught.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-13 01:09:02 -04:00
Dan McGee
5e774d72b0 Remove some more diskspace checking holdover stuff
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-13 00:31:01 -04:00
Dan McGee
caf6c326ec Functionalize query.c and pacman_query
Move a lot of the operations that pacman query performs into their own
functions for ease of following the flow and for possible later merges with
their sync counterparts. We need to think less in terms of operations and
more in term of overall concepts.

Also (re)introduced checks for the target list on a -Q operation, ensuring
that we only call certain query operations when it is sane to do so.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-12 23:56:26 -04:00
Andrew Fyfe
83245aa58e scripts/makepkg.in: Added fakeroot version to .PKGINFO header.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-06-12 23:30:56 +01:00
Andrew Fyfe
54b71f0427 scripts/makepkg.in: Switch to GNU getopt.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-06-12 21:54:39 +01:00
Nagy Gabor
e2a75a8257 Add pactest requiredby004.
Upgrade a package that no longer needs a depend.
Reference:
http://www.archlinux.org/pipermail/pacman-dev/2007-June/008503.html

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-12 16:19:50 -04:00
Dan McGee
892e6a7fe9 pacman util.h: Add missing stdarg.h include
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-12 16:09:46 -04:00
Andreas Hauser
c1b6a6d616 FS7355: Add --ignorearch option to makepkg
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-11 07:53:30 -04:00
Nagy Gabor
2746a6319a Add new pactest remove043.
Remove a package required by another package.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
2007-06-11 11:21:19 +02:00
Dan McGee
dde7b6f87a Attempt to clean up _alpm_sync_prepare
This function is an absolute disaster, so we'll take it one step at a time
here. This was a quick once-over of the whole thing, trying to straighten
out some of the spaghetti code and fix some mistakes that others found.

We are now down to two failing pactests again: sync300 and upgrade051.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-10 23:17:19 -04:00
Nagy Gabor
544bcbe664 Implement simple topological sort algorithm for sortbydeps
Based on the "depth first search" algorithm, for more infos visit:
http://en.wikipedia.org/wiki/Topological_sorting

The previous algorithm used by sortbydeps was too slow, and to work around
it the number of steps needed to get correct result was reduced greatly.
So it produced wrong results in several cases :
1) smoke001.py
2) http://bugs.archlinux.org/task/7229

More here: http://archlinux.org/pipermail/pacman-dev/2007-April/008057.html

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-10 22:13:58 -04:00
Chantry Xavier
8588b4823b Ensure correct and consistent usage of depmiss
See comment from Nagy here :
http://www.archlinux.org/pipermail/pacman-dev/2007-April/008134.html
This also makes easier correct usage of checkdeps in sync.c,
which fixes sync901 pactest (and so bug 6057).

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-10 21:41:06 -04:00
Dan McGee
07069cd502 pactest: fix description of remove040
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-10 21:33:24 -04:00
Chantry Xavier
796cc4e6ed Fix for removing a package that is no longer needed
Fix for remove041 pactest. You could not remove a package before that
was provided by something else already installed on the system. This fixes
this problem.

Reference:
http://archlinux.org/pipermail/pacman-dev/2007-April/008131.html
http://archlinux.org/pipermail/pacman-dev/2007-April/008134.html

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-10 21:25:01 -04:00
Chantry Xavier
1da78a7d25 Add two new pactests for FS #6057
As described in the bug report, installing taglib-rcc (sync900 pactest)
works fine. But installing taglib back (sync901 pactest) doesn't.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-10 20:14:20 -04:00
Chantry Xavier
ece1ee7ef2 Add new pactest remove042
Same as remove040, with cascaded remove instead of simple remove.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-10 17:41:35 -04:00
Nagy Gabor
0436601224 Small speed-tuning to upgrade-checkdep
Posted on the ML here:
http://archlinux.org/pipermail/pacman-dev/2007-April/008131.html

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-10 17:31:18 -04:00
Nagy Gabor
97ba9c9227 Fix issue when upgrading two packages that would break deps
Fixes for pactest upgrade060. Posted on the ML here:
http://archlinux.org/pipermail/pacman-dev/2007-April/008130.html

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-10 17:25:20 -04:00
Nagy Gabor
970f15d832 Fix breakage in checkdeps when upgrading a multiple-depend
Fixes pactest upgrade059. Posted on the ML in the following messages:
http://archlinux.org/pipermail/pacman-dev/2007-April/008127.html
http://archlinux.org/pipermail/pacman-dev/2007-April/008129.html

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-10 17:20:12 -04:00
Dan McGee
da6b175d01 pacman.c: Refine error messages used by parseconfig
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-09 13:38:14 -04:00
Dan McGee
cadd28072a be_files.c: Fix compilation bug since I removed unnecessary LOG_STR_LEN
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-09 13:37:47 -04:00
Dan McGee
35a794c2ed Allow multiple CacheDirs to be specified
This should hopefully allow multiple cache dirs to be specified in
pacman.conf and/or on the command line, and allow pacman to test
each one for the package file. The first one found to be writeable is
used as the download cache.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-09 13:03:25 -04:00
Dan McGee
b6f3fe6957 Implement a -Qt operation in frontend to test the database
After adding a alpm_db_check() operation in the back end, we can call it
in the front end and present a user-friendly interface to it.

Inspired-by: VMiklos <vmiklos@frugalware.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-09 12:58:12 -04:00
VMiklos
dfc85cb5f5 Add a alpm_db_test() function to the backend for checking DB consistency
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-09 12:58:12 -04:00
Dan McGee
25c5b39d05 Fix up things after the last few changes
* Readd default logmask of ERROR and WARNING
* Remove DOWNLOAD log level as it no longer applies
* Add 'no targets' logic back in where it applies
* Switch some prints in parseconfig to ERROR

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-09 12:57:50 -04:00
Dan McGee
a32ca90192 Remove logmask stuff from backend; switch logging callback to new pm_printf
Remove the logmask functionality from the backend as it has been moved to
the frontend, and change the logging callback function to use pm_printf.

In addition, make much better use of va_list- use the args list instead
of a arbitrarily chosen string to print to in the logging functions.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-09 12:57:50 -04:00
Dan McGee
fc93601b98 Revamp pacman.c main function ordering, switch some output to pm_printf
Reorder some of the initilization stuff in pacman.c, as well as remove
some code that should be reimplemented elsewhere- checking the target
list to see if it is NULL.

Change the temp printf statements in parseconfig to pm_printf as well.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-09 12:57:50 -04:00
Dan McGee
a7f417f35c Update configure.ac with a few new functions to check for
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-09 12:57:49 -04:00
Dan McGee
d317acaee8 Add a series of pm_printf functions to pacman frontend
Add pm_printf, pm_fprintf, and pm_vfprintf to the pacman frontend for use by
debug printing and other output messages from pacman. These will be
incorporated into the log callback functions in the next iteration of
changes.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-09 12:57:49 -04:00
Roman Kyrylych
430a19c604 makepkg: Make it possible to create an empty package
Signed-off-by: Roman Kyrylych <roman@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-09 12:26:43 -04:00
Dan McGee
564d779c2c mirrorlist: Add Brazilian mirror
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-09 12:21:11 -04:00
Dan McGee
f7912e9dc6 Const correctness!
Add some 'const' keywords all over the code to make it a bit more strict on
what you can and can't do with data. This is especially important when we
return pointers to the pacman frontend- ideally this would always be
untouchable data.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-05 17:34:33 -04:00
Dan McGee
4906b76c85 Clean up unnecessary headers and macros from alpm.c
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-05 17:32:53 -04:00
Dan McGee
d8e88aa017 Fix compilation with GCC 4.2.0
'inline' keyword in C99 is not correctly recognized, so compilation fails on
the warning it spits. This fixes this.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-05 17:32:09 -04:00
Dan McGee
26e3db423a Merge branch 'alpm.c_cleanup' into frontend_config
Conflicts:

	lib/libalpm/alpm.c
2007-06-04 23:32:38 -04:00
Dan McGee
466b79bf8f Fix up outstanding parseconfig issues
The db variable was left unset when calling alpm_db_register, leading
to a failure to ever register a sync db. Also added a check to ensure
DBPath was set when trying to register a database.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-04 23:10:49 -04:00
Dan McGee
358cc5804a Rip alpm_parse_config out of libalpm
Switch over to the new frontend parseconfig.

* Fix a few issues in parseconfig
* Remove unused callback upon database registration
* Remove conf file related errors from error.c/alpm.h

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-04 23:10:49 -04:00
Dan McGee
6949ab9761 Move three config options out of the backend
Move chomp, usecolor, and showsize out of the backend and into the
pacman frontend as they are pacman-specific options and not related
to the behavior of libalpm.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-04 23:10:49 -04:00
Dan McGee
65662315b6 Add a parseconfig to the pacman frontend that compiles
Warning: this compiles but may not work as intended quite yet. :)

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-04 23:10:49 -04:00
Dan McGee
64d36db5f4 Move functions out of alpm.c to where they belong
alpm.h is the only "publically viewable" file, so there is no reason to have
functions in alpm.c that belong in package.c, db.c, etc. Move the functions
where they belong and leave only the library init functions in alpm.c.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-04 22:52:04 -04:00
Andrew Fyfe
e0afe6e94a Autotool clean up.
* Add vim modeline to Makefile.am and configure.ac
	* Fix white space in Makefile.am and configure.ac
	* Add contrib/wget-xdelta.sh to EXTRA_DIST in Makefile.am

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-04 22:24:29 -04:00
Andrew Fyfe
f32292367a scripts/makepkg.in: Add gettext translation for WARNING and ERROR.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-06-04 22:01:26 -04:00
Andrew Fyfe
a78ad0d38d contrib/wget-xdelta.sh: Replaced with an improved version.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-06-04 22:00:56 -04:00
Andrew Fyfe
b757cc9414 scripts/makepkg.in: Fix version comparision in create_xdelta().
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-06-04 22:00:35 -04:00
Andrew Fyfe
241832853c scripts/abs.in: Rearrange/Cleanup.
* Rearrange the script.
        * Add gettext support.
        * Clean up usage message.

        * Add PACKAGE_BUGREPORT to substitution in scripts/Makefile.am

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-04 21:59:17 -04:00
Jaroslaw Swierczynski
a63d58daec Update Polish Translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-04 21:22:29 -04:00
Dan McGee
1698022bea Fix pacman-optimize autoconf paths
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-04 17:35:31 -04:00
Dan McGee
d9ff7bbcd2 Remove hardcoded defines from libalpm
Remove any use of the former path variables defined by the Makefiles or
config.h. These are now runtime configurable only with pacman.conf (or by
using flags on the command line).

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-04 17:00:30 -04:00
Dan McGee
a094deacf4 Start moving hardcoded paths out of libalpm
Move the defaults for RootDir, CacheDir, DBPath, and LockFile into
pacman.conf, just as LogFile was done before. Add a section to
alpm_parse_config to look for a LockFile directive.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-04 17:00:30 -04:00
Nagy Gabor
029a8a9d44 Add five new pactest tests where pacman currently fails
Most of these new tests deal with provisions upon sync or upgrade being
changed by packages, and pacman not being smart enough to deal with
it yet.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-04 17:00:30 -04:00
Giovanni Scafora
ecb594107e Add gettext/i18n to most of the currently-used scripts
Signed-off-by: Giovanni Scafora <linuxmania@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-04 16:54:25 -04:00
Dan McGee
d0679da4f3 makeworld: var rename from version -> myver
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-04 16:54:25 -04:00
Andrew Fyfe
c6c60bcc80 scripts/makepkg.in: More clean up.
* Add ChangeLog to source package.
	* Quote references to $BUILDSCRIPT.
	* Check $srcdir isn't empty when running --noextract.
	* Check $pkgdir isn't empty when running --repackage.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-03 22:21:06 -04:00
Andrew Fyfe
b69edc1c35 scripts/makepkg.in: Improve error handling and clean up on exit.
* makepkg now runs with errexit (exit on syntax error) enabled
	  for the whole script.
	* Removed unneeded setting of errexit around build().
	* Added bash traps to catch TERM HUP INT signals.
	* Added trap to catch unhandled/unknown errors.
	* Added trap to call clean_up() when the script exits.
	* Moved call to remove_deps() into clean_up().
	* Moved -c/--clean code into clean_up().

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-03 22:19:52 -04:00
Andrew Fyfe
76fd85450e Clean up output messages for translation.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-06-03 22:19:52 -04:00
Andrew Fyfe
2fb2613ec1 scripts/makepkg.in: Rewrite check_{options,buildenv} to tidy them up.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-06-03 22:19:51 -04:00
Andrew Fyfe
3b1e67628e scripts/makepkg.in: Clean up.
* Move create_xdelta() outside of fakeroot run.
	* Clean up dep check functions.
	* Clean up extract_sources().

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-03 22:19:51 -04:00
Roman Kyrylych
508d5cb3a3 Correct descriptions of configure options
Signed-off-by: Roman Kyrylych <roman@archlinux.org>
Signed-off-by: Dan McGee <dpmcgee@gmail.com>
2007-06-03 21:45:06 -04:00
Dan McGee
214f264bd0 Rename functions in makepkg for consistency
Add a hyphen to any function name that needs it so we are consistent across
the board.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-02 13:44:54 -04:00
Ash Milsted
111c0f71c3 makepkg: fix create_xdelta() and add warning
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-02 13:44:54 -04:00
Andrew Fyfe
40af40da4c scripts/makepkg.in: Some more clean ups.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-06-02 13:44:54 -04:00
Dan McGee
9883c157f9 makepkg: code cleanup
* Collapse some if statements (Andrew Fyfe)
* Add some E_ exit designations

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-02 13:44:54 -04:00
Andrew Fyfe
e19d7da4f9 scripts/makepkg.in: Move the remaining stages into functions.
* Move download code to download_sources()
  * Move checksum generation code to generate_checksums()
  * Move checksum check code to check_checksums()
  * Move extract source code to extract_sources()

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-02 13:44:54 -04:00
Andrew Fyfe
afd2adf1f3 scripts/makepkg.in: All calls to eval_gettext have been remove, gettext.sh is no longer needed.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-06-02 13:44:54 -04:00
Dan McGee
ed13ac2cc8 Remove freespace checking code
This code depends on /etc/mtab existance, which is not very reliable in all
cases, especially in a chroot or non-Linux environment. Dump it for now
until we can find a better way.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-02 13:17:26 -04:00
Chantry Xavier
fe2c58fc92 Move parts of pacman_query into subfunctions (query_search, query_group, query_isfile)
Clean up pacman_query so functionality is actually in functions, similar to how
sync.c is organized. After doing this, it is easy to see similarity in the code
between sync.c and query.c, so we should be able to consolidate some of this.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-02 12:44:43 -04:00
Dan McGee
fb10e0c797 Drop --usesudo option and add some checks related to ASROOT
Drop the --usesudo option and use it by default if running as a non-root
user. Check the usage of the --asroot option and do not allow it to be used
as a normal user. A few other small fixes, including a typo in $confdir.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-01 13:43:41 -04:00
Andrew Fyfe
6f183cb984 scripts/makepkg.in: Clean up gen/check checksum code.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-01 11:57:10 -04:00
Andrew Fyfe
7f153b729f scripts/makepkg.in: Various clean ups.
* etc/makepkg.conf.in: Add description for xdelta.
* doc/makepkg.conf.5: Add description for xdelta.
* scripts/makepkg.in: Various clean ups.

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-01 11:49:17 -04:00
Andrew Fyfe
85fbf528bb Cleaned up dependencies check functions in makepkg
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-01 11:43:31 -04:00
Nathan Jones
80237630af Change -z|--showsize flag to ShowSize pacman.conf option
Also cleaned up some duplicate printf lines related to the ShowSize option.

Signed-off-by: Nathan Jones <nathanj@insightbb.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-01 11:00:39 -04:00
Juan Pablo González T
cb9f046945 Updated Spanish Translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-06-01 10:30:22 -04:00
Dan McGee
6d6910388e Add Andrew to the authors list
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-31 18:44:53 -04:00
Andrew Fyfe
6d649473fa FS7319: Add option to disable the inclusion of abs script.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-31 18:44:00 -04:00
VMiklos
af888c534b alpm_parse_config(): ignore #.*$, not just ^#.*$
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-31 15:21:33 -04:00
Andrew Fyfe
e422b71a48 Add autotool substitution for SRCEXT.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-31 14:30:41 -04:00
Andrew Fyfe
139d3c5e99 Autotool fixes/cleanup.
* configure.ac: Add AC_SUBST() for ROOTDIR, PKGEXT, DBEXT so
	they get exported to Makefiles.
	* {makepkg,pacman}.conf.in: Remove extra / from paths.

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-31 17:24:24 +01:00
Dan McGee
7bd2ff6851 Move DB and cache dirs away from there dependence on ROOTDIR
This change allows us to use all autoconf specified paths, most notably
$(localstatedir). It is quite a change and touches a lot of files, as
all references to the DB and cache were done with the ROOTDIR as a prefix.

* add --lock command-line option to pacman to specify the location of the
  lockfile (this can now be specified at configure time by setting the
  $localstatedir path).
* Rip quite a few settings out of configure.ac as they are now picked by
  setting the paths during configure or make.
* Fix bug with /tmp fallback for sync downloads not working correctly
  (related to root location, now the system tmp dir is used).
* Simplified the parameters to some libalpm functions, and added get/set
  for the new lockfile option.
* Renamed several of the DEFS to names without the PM_ prefix.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-31 02:51:28 -04:00
Dan McGee
722db4535a Set an error exit status on -Qi or -Si failure
Regression from 2.9.8 where a failed -Qi lookup did not return an error
on exit. The exit status is now incremented for each error encountered.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-31 01:12:17 -04:00
Dale Ogilvie
cad44221c8 Clean up variable usage in create_xdelta() and add a check for the xdelta program.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-30 23:58:22 -05:00
Dale Ogilvie
a8c552d477 Add support for creating xdeltas in makepkg.
Add xdelta option to makepkg.conf

Added xfer script to contrib.

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-30 23:58:22 -05:00
Dag Odenhall
2ef1c8416f makepkg: do not retrieve sources if NOEXTRACT or REPKG set
Signed-off-by: Dag Odenhall <dag.odenhall@gmail.com>
Signed-off-by: Andrew Fyfe <Andrew Fyfe  andrew@neptune-one.net>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-31 00:07:12 -04:00
Dan McGee
90a307bfa3 makepkg: switch applicable $startdir/dir refs to new variable names
After introducing $pkgdir and $srcdir, we can switch some lookups to
these new variables.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-31 00:02:32 -04:00
Dag Odenhall
92a14eab59 Check if pkgdir exists in create_package
Signed-off-by: Dag Odenhall <dag.odenhall@gmail.com>
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-30 23:52:22 -04:00
Dag Odenhall
6b776c82e7 makepkg: fix double occurance of word in asroot warning
Signed-off-by: Dag Odenhall <dag.odenhall@gmail.com>
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-30 23:42:23 -04:00
Dan McGee
ca05e942f2 Use @sysconfdir@ in etc/ configuration files
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-30 23:33:39 -04:00
Dan McGee
3e05e18707 doc/makepkg.8: document --log option
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-30 16:07:48 -04:00
Dan McGee
b3535db2aa makepkg: add srcdir and pkgdir variables
We already have $startdir, so this introduces two more shorthand variables
for the most commonly accessed directories.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-30 14:32:04 -04:00
Dan McGee
f4d6efeee0 makepkg: add source package creation option
Add a new --source flag that allows creation of a source-only package.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-30 14:27:13 -04:00
Dan McGee
a6129bb789 Finish making autoconf changes
Fix up everything in the etc/ directory so it is built at make-time and
not configure-time. This reduces configure generated files to just the
makefiles, which is the correct way to do things. This also allows a switch
from @@REPO@@ to the more sane @REPO@ in mirrorlist.in, and kills the
two-part generation of the mirror files.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-30 11:46:37 -04:00
Dan McGee
b6387b954f scripts: do autoconf path replacement right
This should finally get the path replacement in our scripts right. This
is the way the autoconf package itself does it and should not need much
further tweaking.

Threw in a few trailing whitespace corrections from the scripts as well.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-30 11:04:49 -04:00
Dan McGee
dd926c7a1c Modernize and update configure.ac
Using the autoscan tool, ensure we are doing the checks we should be doing
in configure.ac. There is still more work to do, but this is a start at
cleaning up the file a bit to make it much easier to change in the future.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-30 09:04:36 -04:00
Andrew Fyfe
5c41d0eb4c Substitute config directory in scripts.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-29 17:49:24 -04:00
Dan McGee
d255d511aa Update POTFILES.in for new source file layout on pacman side
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-29 17:46:57 -04:00
Dan McGee
f3836ff8e8 Set paths in pacman-optimize to use configure-time paths
By setting up a few more AC_SUBST macros in configure.ac, we can fill in
paths in the scripts on the fly instead of having them in multiple places.

Other small fixes:
* Fix an oops on my last commit where I had some lines stil commented.
* Fix makepkg bug where the generated package name using PKGEXT had two
  periods (..).

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-29 17:46:20 -04:00
Dan McGee
103c7243a2 Get --help and --version options working on all scripts
Added the autoconf option std-options to the scripts/ directory, which
checks to ensure all programs have both --help and --version options. A
few things needed cleaning up to get this working. To test these types
of options, use the 'make distcheck' target.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-29 16:53:15 -04:00
Andrew Fyfe
2760828e9d Add -mtune=generic to C{,XX}FLAGS in makepkg.conf
GCC-4.2.0 requires -mtune=generic to produce binaries optimized for
generic i686/x86_64. By default it tries to optimize a for the host
system building the package.

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-28 23:52:02 +01:00
Andrew Fyfe
124693af37 Switch to printf for output messages.
Using printf we can avoid haveing to use eval_gettext and the ugly escape sequances required to use it.

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-28 20:27:18 +01:00
Dan McGee
7e98eac309 Add autotool-generated scripts to .gitignore
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-27 17:23:40 -04:00
Andrew Fyfe
26c32b017e Remove extra_dist from scripts/Makefile.am
This is automaticly done by autoconf.

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-27 17:16:28 -04:00
Andrew Fyfe
94aa9aff13 Fixed typo in scripts/repo-remove.in
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-27 17:16:28 -04:00
Andrew Fyfe
71026af678 chmod -x scripts/*.in
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-27 17:16:28 -04:00
Andrew Fyfe
e9e19b7cc6 autotool scripts/updatesync
- move scripts/updatesync -> scripts/updatesync.in
	- add -V --version options to scripts/updatesync.in
	- add autotool commands to generate scripts/updatesync

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-27 17:16:28 -04:00
Andrew Fyfe
48946b624b autotool scripts/repo-remove
- move scripts/repo-remove -> scripts/repo-remove.in
	- add -V --version options to scripts/repo-remove.in
	- add autotool commands to generate scripts/repo-remove

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-27 17:16:27 -04:00
Andrew Fyfe
49eddd3feb Added copyright header to scripts/abs.in
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-27 17:16:27 -04:00
Andrew Fyfe
f6b0869ee5 autotool scripts/repo-add
- move scripts/repo-add -> scripts/repo-add.in
	- add -V --version options to scripts/repo-add.in
	- add autotool commands to generate scripts/repo-add

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-27 17:16:27 -04:00
Andrew Fyfe
a73e9a24af move parameter count check after check for help and version.
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-27 17:16:27 -04:00
Andrew Fyfe
95720106bb autotool scripts/pacman-optimize
- move scripts/pacman-optimize -> scripts/pacman-optimize.in
	- add -V --version options to scripts/pacman-optimize.in
	- add autotool commands to generate scripts/pacman-optimize

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-27 17:16:27 -04:00
Andrew Fyfe
ab53ee1e7c autotool scripts/makeworld
- move scripts/makeworld to scripts/makeworld.in
	- add -V --version options to scripts/makeworld.in
	- add autotool commands to generate scripts/makeworld

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-27 17:16:27 -04:00
Andrew Fyfe
a2d018a954 autotool scripts/gensync
- move scripts/gensync -> scripts/gensync.in
	- add -V --version options to scripts/gensync.in
	- add autotool commands to generate scripts/gensync

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-27 17:16:27 -04:00
Andrew Fyfe
2b6bc5bcda autotool scripts/abs
- move scripts/abs -> scripts/abs.in
	- add -V --version options to scripts/abs.in
	- add autotool commands to generate scripts/abs

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-27 17:16:27 -04:00
Andrew Fyfe
c3876845b2 fix existing autotools in scripts/*
- Remove scripts/makepkg on 'make distclean'
	- scripts/makepkg.in: set myver on ./configure

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-27 17:16:27 -04:00
Dan McGee
aedff1c117 makepkg: fakeroot-related changes and other misc output
A few changes to undo my stupid mistake earlier wrt fakeroot checking,
and unify the output and usage of 'makepkg.conf'.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-27 17:01:49 -04:00
Andrew Fyfe
bc6ce2a190 Removed fakeroot hacks.
Removed fakeroot hacks from
	* handledeps()
	* removedeps()
	* installpackage()

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-27 16:10:24 -04:00
Andrew Fyfe
9ff52db3db Reduced the number of commands run inside fakeroot to the bare minimum.
Only the following functions now run inside fakeroot
	* run_build()
	* tidy_install()
	* create_package()

Added check for inproper use of '-F' option.

Added warning if makepkg is run as root. Added a new '--asroot' flag that
must be passed if you wish to run makepkg as the root user.

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-27 16:06:50 -04:00
Andrew Fyfe
4e15b54926 Add missing new line to 'pacman -T' output.
'pacman -T foo bar' returns 'foobar' instead of:

foo
bar

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>o
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-05-24 21:45:00 -05:00
Chantry Xavier
51225b3263 Add -Qee option for the original behavior of -Qe
-Qee now lists "orphans" the way pacman used to - that
is, -Qe lists packages required by nothing that were
installed as a dependency, but -Qee lists all packages
not required by something else.

Also, I snuck in a compile fix for my real_path cleanup earlier, heh

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-05-20 01:20:07 -05:00
Aaron Griffin
ebad199614 Allow $repo expansion in 'Server' config lines
Small change (addition of a 'strreplace' function) which replaces
any $repo tokens found in a server line with the name of the repo
or section being processed.

While this is more simplistic than suggestions on flyspray, it works
and I think it is cleaner.  Merits can be discussed further.

Ref: FS#6389

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-05-18 01:24:59 -05:00
Chantry Xavier
1381b58ceb Fix extraneous "ignoring upgrade" output on Ignore'd packages
Reorder package version checking so there is no output when a
package is listed in IgnorePkg.
Closes FS#7111

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-05-18 01:22:18 -05:00
Aaron Griffin
1ef27e97a1 Fix broken resolve_path function
Removed some unneeded path munging so that our relative
paths resolve properly.  This closes FS#7068

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-05-18 01:20:49 -05:00
Aaron Griffin
9d9ac66bb2 Continue scanning when an invalid DB entry is found
Fix for FS#7133 - when DB scanning finds an invalid named entry,
scanning is currently aborted.  Instead we will simply skip it
and find the next valid package.

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-05-18 01:19:00 -05:00
Aaron Griffin
9abe99f236 Remove trailing slashes from Server URLs
Simple clean up for the rest of the code, which also prevents a little
libdownload bug relating to '//' appearing in URLs.

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-05-18 01:17:52 -05:00
Aaron Griffin
4e6b7c1cde Fix libarchive permission extraction
Hackish fix to ensure libarchive extracts files and dirs with the right
permissions.  For some reason extracting /tmp on install wasn't handled properly
by librachive, so an explicit chmod will fix this.

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-05-18 01:16:56 -05:00
Aaron Griffin
5786c6e4a3 Fix libarchive permission extraction
Hackish fix to ensure libarchive extracts files and dirs with the right
permissions.  For some reason extracting /tmp on install wasn't handled properly
by librachive, so an explicit chmod will fix this.

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-05-18 03:26:24 +00:00
Dan McGee
c88037203b makepkg: ensure DISTCC_HOSTS variable is exported when required
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-16 13:18:19 -04:00
Dan McGee
6a0059ddd5 Ensure MAKEFLAGS and DISTCC_HOSTS are exported if required 2007-05-16 17:14:19 +00:00
Dan McGee
53f2dcaa3a makepkg: a few small changes
* change "Tidying Install" message to msg instead of msg2
* Fix quoting issues in usage output
* Remove LANG and friends unsetting- this should be done in the offending
  package builds
* Check for defined $BUILDSCRIPT, since it was moved to makepkg.conf

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-14 11:55:19 -04:00
Andrew Fyfe
93b6e35bcb Cleaned up and simplified run_build().
Restore LC_ALL and LANG after running build().

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-14 11:05:58 -04:00
Andrew Fyfe
eda7e5fcdf Moved commands to setup build environment and run build() into run_build().
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-14 11:05:58 -04:00
Andrew Fyfe
9b85864e37 Cleaned up and simplified tidy_install().
Added 'LC_ALL= LANG=' to find commands for stripping symbols from binaries/libraries.
This stops the greps failing if LC_ALL or LANG != en_US|C|POSIX.

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-14 11:05:58 -04:00
Andrew Fyfe
e2f42947e3 Moved commands to tidy up package install into tidy_install().
The following sets of commands were moved into tidy_install()
	* Remove info/doc files.
	* Move usr/share/man to usr/man
	* Compress man pages.
	* Strip debug symbols from binaries/libraries.
	* Remove libtool *.la files.
	* Remove empty directories.

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-14 11:05:58 -04:00
Andrew Fyfe
7fb1dc3f20 Cleaned up and simplified create_package().
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-14 11:05:58 -04:00
Andrew Fyfe
5b4a4af94d Moved commands to create package file into create_package().
Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
2007-05-14 11:05:58 -04:00
Dan McGee
a1adddddfe Add three new 'requiredby' pactests
These should test various aspects of the DB when dealing with requiredby
entries. At least one fails without Nagy's alpm_depcmp patch.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-14 10:56:52 -04:00
Nagy Gabor
a3994f975b Use alpm_depcmp in _alpm_pkg_update_requiredby
The old function did too much on its own; let alpm_depcmp do the hard
work. This will allow for future versioned provisions if necessary.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-14 10:56:52 -04:00
Dan McGee
2bcecbd62c Remove unnecessary casts on malloc and elsewhere
We had many unnecessary casts, most of them dealing with malloc and
other memory allocations. The variable type should take care of it;
no need to do it explicitly. In addition, I caught a const error while
removing the casts.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-14 03:16:55 -04:00
Nathan Jones
5c930c318e Display size for packages
This patch adds a -z|--showsize option to the -Q and -S commands. The
option displays the size of individual packages. This is something that
I have wanted for a while, and there is a feature request for it.

Signed-off-by: Nathan Jones <nathanj@insightbb.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-14 01:22:15 -04:00
Dan McGee
14c768365c Fix inconsistency in options in default makepkg.conf
Also add a quick note on how the options are described and used.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-14 00:51:32 -04:00
Dan McGee
2c74e0ad8a * Updated German translation
Pierre Schmitz <pierre@archlinux.de>
2007-05-13 04:40:13 +00:00
Dan McGee
a01b2ad8e6 Corrections to Spanish translation 2007-05-13 04:29:05 +00:00
Dan McGee
558e045f63 Slight updates to PKGBUILD.vim
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-10 13:42:02 -04:00
Alessio 'mOLOk' Bolognino
449ea6e259 Updated vim syntax file
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-10 02:44:07 -04:00
Alessio 'mOLOk' Bolognino
5fc170ff05 Add vim syntax file for PKGBUILDs to contrib/
Thanks for the contribution.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-10 01:01:57 -04:00
Aaron Griffin
1213212c31 Fix IgnorePkg handling with replacement packages
Allow IgnorePkg (or --ignore) to work for _either_ side of a
replacement.  For example, if 'foo' is set to replace 'bar',
ignoring either package will skip this replacement.

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-05-09 23:11:39 -05:00
Aaron Griffin
8be3f1f62f Version bumped to 3.0.4 2007-05-08 08:13:13 +00:00
Aaron Griffin
48c840fb76 minor: Remove trailing slashes from Server urls to prevent double slashes in
paths
2007-05-08 08:11:59 +00:00
Dan McGee
337046ab75 A ton of updates of all of the translation files. Thanks to the
authors of those.
2007-05-08 03:41:30 +00:00
Dan McGee
34ee32d373 Clean up query_fileowner
* gotcha -> found
* line wrap changes

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-07 14:21:44 -04:00
Dan McGee
53bc96106d repo-add: fix typo, conflicts instead of conflict 2007-05-06 22:56:08 +00:00
Dan McGee
01bc7d7749 repo-add: fix conflicts instead of conflict bug
makepkg generates PKGINFO files with "conflict = ", repo-add was
incorrectly looking for "conflicts = ".

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-06 18:55:26 -04:00
Dan McGee
96f35d219c Allow repo-add to work with symlinks (fixes FS #7054)
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-05-06 18:50:41 -04:00
Dan McGee
8bbb5dd078 libalpm util.c and util.h cleanup
* Remove some unnecessary conditional compiling in util.h- move the
  functions tha required it to trans.c (along with a bunch of new header
  includes).
* Clean up util.h a bit- remove some header includes, remove universal
  libarchive include and only put it in the files that need it.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-29 12:47:02 -04:00
Dan McGee
a58e17a1d7 Remove STRNCPY macro from libalpm
Replaced calls to the STRNCPY macro with the actual strncpy function, and
pacman passes all pactests.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-29 12:03:09 -04:00
Dan McGee
ea327cab84 Bump up the version numbers a bit for the development branch
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-28 20:07:17 -04:00
Dan McGee
eeb38ef677 Remove 'removes' array from libalpm
We don't use this functionality for now, so get rid of it and the
functions associated with it.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-28 19:56:29 -04:00
Dan McGee
a71b943a09 Set HTTP_USER_AGENT envvar in pacman
Instead of using libdownload's default user agent string, make one of
our own.

Format:
Pacman/3.0.1 (Linux i686 2.6.21-rc7-ARCH; en_US.utf8) libalpm/1.0.0

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-28 05:25:05 -04:00
Dan McGee
afec5e46a4 Bumps for pacman 3.0.3 2007-04-28 08:26:37 +00:00
Dan McGee
a57b2f233f Remove FREELISTPTR macro
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-28 03:54:25 -04:00
Dan McGee
a8b683d8e2 Add a cb_log call on segfaults
This should make it easier to see exactly where a segfault occurs; old
method was prone to output flushing issues.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-28 03:09:37 -04:00
Dan McGee
a3491224df Remove FREEPKG macro and correctly type _alpm_pkg_free
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-28 02:59:58 -04:00
Dan McGee
0984dab1f2 Remove FREEHANDLE macro and correctly type _alpm_handle_free
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-28 01:54:10 -04:00
Dan McGee
69bc2e62fe Remove FREESERVER macro and correctly type _alpm_server_free
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-27 20:40:29 -04:00
Dan McGee
3cf8a333d0 Remove FREEGRP macro and correctly type _alpm_grp_free
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-27 20:38:54 -04:00
Dan McGee
ec7d6955b8 Remove FREESYNC macro and correctly type _alpm_sync_free
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-27 14:53:01 -04:00
Dan McGee
db9e10f142 Remove FREETRANS macro and correctly type _alpm_trans_free
Remove an unnecessary macro, and get rid of the void pointer.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-27 14:29:23 -04:00
Dan McGee
75efcbbff6 Clean up gettext on the libalpm side
Remove inclusion of libintl.h from all files, because we can do it once
in util.c where the _() macro is defined.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-26 19:39:53 -04:00
Dan McGee
63588aff19 Remove output.c and output.h
One function was left in this set of files after the earlier cleansing, so
I moved yesno to util.c.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-26 19:20:46 -04:00
Dan McGee
b39aba99f9 Start of the newline fixes after switching over the output
* A few quick newline fixes, mostly related to sync operations.
* Moved get_update_timediff to callback.c as it is not used outside of
  that file.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-26 19:03:24 -04:00
Dan McGee
6a1dfdf292 Set the correct type on the log callback function
Somehow missed this earlier when changing everything to types.
unsigned short -> pmloglevel_t wherever necessary.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-26 18:59:02 -04:00
Dan McGee
7bbcaaaae9 Add -pedantic flag to pacman (frontend) CFLAGS
Now that we got rid of the ERR and WARN macros, compilation with
-pedantic turned on works with only minor changes.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-26 16:59:38 -04:00
Dan McGee
8d46cf6651 Remove ERR calls from the code
All ERR() calls have been replaced with fprintf(stderr, ...).

Still to be done- fix all the newline issues that are sure to pop up. What fun!

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-26 16:23:59 -04:00
Dan McGee
f2dabeb19f Remove ERR, WARN, and pm_fprintf macros/functions
Rip out this stuff from output.c and output.h for the next step of ripping all ERR
output from the pacman front end.

This commit will NOT compile.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-26 15:34:16 -04:00
Dan McGee
961be77c93 Remove MSG output macro (#define and in code)
This is the first step of converting output to standard functions such as printf, and
eventually allowing compiliation with the -pedantic flag as is done on the libalpm
side.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-26 15:28:54 -04:00
Dan McGee
f0304168ee Move log.c/h -> output.c/h to properly reflect what is contained
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-26 14:34:47 -04:00
Dan McGee
dc05cd107c Pacman side code consolidation- unify callback functions to one file
Some more major code reorginization here. The download progress callback
function has been renamed and moved to callback.c, which is the former
trans.c with the download and log callbacks added. In addition, this allows
util.c to be cleaned up as fill_progress can now be static in callback.c.
We've also cut two more source files out.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-26 14:34:41 -04:00
Dan McGee
97313ba316 More pacman side cleanup
* Cleaned up more of the header #includes, and got rid of a lot of stuff
  that was due to trying to make it compile on BSD/Darwin/CYGWIN. We can
  add it later but lets keep it simple for now and do it in seperate files
  if possible later.
* Removed a lot of #define MACROS. Some were not even used, and others were
  only used a few times.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-26 14:34:41 -04:00
Dan McGee
da3286a80d Allow sync search to work without arguments
Enable an -Ss operation to work without a target list. This allows all package information
to be printed (as opposed to individual -Sl operations on repositories).

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-26 14:27:13 -04:00
Dan McGee
085e5898ae Update Doxyfile for v1.5.2
Ran a doxygen -s -u as recommended on the Doxyfile.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-25 11:07:48 -04:00
Dan McGee
c03277f83d add.c and remove.c cleanup
Unification and cleanup of the add.c and remove.c code. It looks remarkably
similar, so this may be a candidate for functionalization at a later time.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-25 11:07:48 -04:00
Dan McGee
7760f5fe60 Remove more unnecessary stuff
* Remove libintl.h from most files, as we only need to include it once in
  util.h where _() is defined.
* Remove other unnecessary header inclusions.
* Remove a macro that was only used once and replaced it with actual code.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-25 11:07:48 -04:00
Dan McGee
828f1f53ef Remove unnecessary includes of downloadprog.h
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-25 11:07:48 -04:00
Dan McGee
34aefc62e4 Remove single-function upgrade.c
Move pacman_upgrade into add.c, at least for now. It really doesn't need
its own file. For the long term, we may want to move this whole file
back to upgrade.c if we deprecate the add operation.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-25 11:07:48 -04:00
Dan McGee
5e1419c0b5 Merge single-function header files on pacman side
Having a seperate header file for add, remove, query, etc. seemed overkill.
Merge them all into a common pacman.h and fix the necessary #includes.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-25 11:07:47 -04:00
Marcus Habernehl
339caa61ef repo-add: Fix bug where desc info was omitted if package in a group
This fixes FS #7005.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-25 11:05:53 -04:00
Dan McGee
4a6d963ae1 repo-add: Fixed bug of missing desc entries if package is in a group
Fixes bug #7005 as reported and patched by
Marcus Habernehl <bmh1980de@yahoo.de>
2007-04-25 15:00:49 +00:00
Dan McGee
27f99b3854 Update the pot language files
It looks like it is easier if these get updated too, so lets do it for
now.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-25 02:58:00 -04:00
Dan McGee
e0e793b912 Update all translation po files
In order to get more reliable message statistics, I updated all of the
po files by first doing a make *.pot-update followed by a make. I am
holding off on committing the pot files as this causes issues with make
constantly wanting to rebuild them.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-25 01:05:02 -04:00
Nam
234581ae6f Updated French Translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-25 01:00:52 -04:00
Dan McGee
a7e80fba9e Updated French translation from Nam <37i11@altern.org>. 2007-04-25 04:38:54 +00:00
Pierre Schmitz
ffef4d0507 Updating German Translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-23 04:22:09 -04:00
Dan McGee
c60c1b5ccc * Updated German translation
Pierre Schmitz <pierre@archlinux.de>
2007-04-23 08:14:33 +00:00
Dan McGee
3236e9320f Forward port NEWS file from 3.0.2
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-23 04:08:16 -04:00
Dan McGee
75b20014c1 Updates in prep for 3.0.2 release 2007-04-23 07:03:13 +00:00
Dan McGee
fa542515e6 Add a pactest for IgnorePkg and force on same package
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-23 02:44:24 -04:00
Dan McGee
3e42d00c99 Add two pactests 2007-04-23 06:41:00 +00:00
Dan McGee
318d2b511b * Updated Italian translation
Giovanni Scafora <linuxmania@gmail.com>
2007-04-23 06:15:06 +00:00
Scott Horowitz
d1c3bd62de rankmirrors: download first 50KB of DB to get more reliable numbers
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-23 00:30:45 -04:00
Dan McGee
4f2ecfdee3 rankmirrors: download first 50KB of DB to get more reliable numbers
Scott Horowitz <stonecrest@gmail.com>
2007-04-23 04:09:00 +00:00
Aaron Griffin
5299115020 * Nagy Gabor <ngaba@petra.hos.u-szeged.hu>
Using the wrong variable in sortbydeps
2007-04-23 04:01:37 +00:00
Aaron Griffin
c6a335501c New archlinuxppc.org mirror added to mirrorlist 2007-04-23 03:53:19 +00:00
Aaron Griffin
38e3b7c4fa * Chantry Xavier <xav@chantry.homelinux.org>
Let IgnorePkg take precedence over the FORCE package flag
2007-04-23 03:46:54 +00:00
Nagy Gabor
8e694dc40f Using wrong variable for depend lookup in sortbydeps
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-04-22 22:01:47 -05:00
Dan McGee
8af5c8d421 Added Spanish Translation.
Juan Pablo González T. <lord_jotape@yahoo.com.ar>
2007-04-23 02:56:11 +00:00
Aaron Griffin
c523d78358 New archlinuxppc.org mirror added to mirrorlist
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-04-22 21:51:13 -05:00
Chantry Xavier
5de03497c3 Let IgnorePkg superceed the FORCE package flag
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-04-22 21:48:10 -05:00
Juan Pablo González T
37211020ec Added Spanish translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-22 23:07:56 -04:00
Aaron Griffin
1a42b23187 * Alexander Baldeck <alexander@archlinux.org>
Bugfix for FS#6944
2007-04-18 05:50:00 +00:00
Alexander Baldeck
a34dc1d4ef Bug fix for FS#6944
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-04-17 23:52:59 -05:00
Dan McGee
7f183d29ac makepkg: unset LC_MESSAGES during builds
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-16 23:58:07 -04:00
Dan McGee
eb448f222a makepkg: unset one more language variable 2007-04-17 03:56:52 +00:00
Matthias Gorissen
7adf07bcc7 Update German translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-16 23:48:26 -04:00
Mateusz Jędrasik
75844d0063 Add Polish language translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-16 23:48:26 -04:00
Dan McGee
756ec7e69f Updated German translation
Matthias Gorissen <siquame@web.de>
2007-04-17 03:32:20 +00:00
Dan McGee
38ff2153c6 Adding Polish language translation, thanks!
From: Mateusz Jędrasik <m.jedrasik@gmail.com>
2007-04-17 02:35:59 +00:00
Aaron Griffin
e0f5d4efbe * Nagy Gabor <ngaba@petra.hos.u-szeged.hu>
Make sure ldconfig runs on upgrade
* Added 3 pactests to verify (by output only) that ldconfig is run
2007-04-17 02:31:04 +00:00
Dan McGee
ec83c93ea4 Bugfixes in prep for a 3.0.2 release
Fix #6905- makepkg dependency checking error
Fix #6915- add SUU mirror to mirrorlist.in
2007-04-17 01:49:06 +00:00
Aaron Griffin
3929bbfb7b ldconfig changes from CVS
forward-porting some 3.0.2 changes
* Nagy's ldconfig fix
* 3 new pactests to check if ldconfig runs
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-04-16 20:34:57 -05:00
Andrew Fyfe
721ceee1e2 makepkg: remove grep calls from stripping binaries
Remove grep calls from stripping binaries and libraries, which will
not work with localized strings. Clean up the find usage as well.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-16 22:12:15 -04:00
Dan McGee
8bd0f3921f Forward port 3.0.2 branch fixes
Fix #6905- makepkg dependency checking error
Fix #6915- add SUU mirror to mirrorlist.in

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-16 21:51:18 -04:00
Dan McGee
14606c301c Add void to functions with empty parameter list
Adding void [eg foo(void) instead of foo()] makes the code more compliant with
ANSI C.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-14 17:26:39 -04:00
Dan McGee
dde2f3eefa Fix FS #6872- CFLAGS are not used
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-11 12:44:42 -04:00
Dan McGee
562887ba5c Fix FS #6872- CFLAGS were not being exported 2007-04-11 16:41:29 +00:00
Dan McGee
14d74623b0 Added easynews mirror 2007-04-09 20:13:31 +00:00
Dan McGee
1c2358532f Add pactest for pre_ and post_remove scriptlet events firing
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-07 16:27:32 -04:00
Roman Kyrylych
37eafc3d31 Really run scriptlet on pre_remove and post_remove
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-05 12:40:18 -04:00
Dan McGee
d4f78116e0 Fix running of pre_remove and Post_remove
pkgname was undefined previously when this was called, fixed.
Patch from Roman Kyrylych <roman.kyrylych@gmail.com>.
2007-04-05 16:37:23 +00:00
Roman Kyrylych
4dc5dfc72a makepkg: spelling fix
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-05 11:36:38 -04:00
Dan McGee
b65a81b8af Add replaces output to -Qi operation
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-04 23:19:14 -04:00
Dan McGee
cbabfa8cff Added easynews mirror to mirrorlist.in
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-04 23:19:14 -04:00
Dan McGee
df290b499a Enable support for other download protocols in makepkg
This patch fixes FS #4404 as well as adding support for future protocols by
generalizing the concept of a download agent and allowing a downloader to
be specified for each protocol.

Original work done by Andrew Fyfe <andrew@neptune-one.net>.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-04 22:58:47 -04:00
Aaron Griffin
4db7948d1a Testing git emails
Added a random line to my TODO list to see if I can get commit diffs.

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-04-04 19:32:57 -05:00
Aaron Griffin
15a1b06d36 pactest: remove001.py
* Test for duplicate remove targets (should succeed)

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-04-04 19:24:02 -05:00
Aaron Griffin
76f816b9f7 Backport changes from 3.0.1
* Align makepkg -g checksums (Tom Killian <tom@archlinux.org>)
* Use additional case-sensitive string compare to defeat locale issues (tr_TR)
* Added Russian mirror
* Fix a -R failure when trying to remove the same target twice
* Bump configure.ac version to 3.0.1

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-04-04 00:30:14 -05:00
Andrew Fyfe
9c9e18ef32 Tidy up usage of makepkg.conf
Moved the following variables into /etc/makepkg.conf
	* BUILDSCRIPT
	* PKGEXT
	* DB_COMPRESSION
	* DB_CHECKSUMS

Cleaned up sourcing of /etc/makepkg.conf in scripts and source
~/.makepkg.conf if it exists.

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-01 21:52:28 -04:00
VMiklos
ea3a182dbf New pactest: Sysupgrade with a sync package forcing a downgrade
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-01 21:52:28 -04:00
VMiklos
32924c9bdb Move the 100% progress bar call before remove scriptlet for output reasons
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-01 21:52:28 -04:00
Dan McGee
d32ef4329c Remove some debug print statements that were left in on accident
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-01 21:52:28 -04:00
Giovanni Scafora
dea03d715b Updated Italian Translation
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-04-01 13:07:40 -04:00
Giovanni Scafora
f044e23a60 Gettext support in makepkg
Add gettext support to makepkg. Still to do- figure out for sure what
textdomain the translations should go in (perhaps share with pacman?), and
ensure this doesn't break anything.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-03-31 20:30:35 -04:00
Dan McGee
583b4b10a3 Move makepkg -> makepkg.in in anticaption of gettextized version
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-03-31 20:30:35 -04:00
Dan McGee
8fd16d0dcb Clean up pacman.c, add localize function
* Add a localize function to do what was done before in main wrt i18n
  initialization.
* Added Doxygen comments to all functions in pacman.c.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-03-31 20:30:35 -04:00
Dan McGee
b8602adee9 Remove --disable-fakeroot option from configure.ac
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-03-31 20:28:41 -04:00
Dan McGee
c3ad8bd75f Make all paths and file locations configurable
Several important paths, file locations, and extensions were #define-d in the
source code instead of being configurable. This moves all of these to
the configure script where they can be picked upon running ./configure. We
may later want to make some of these even more visible and move them to
pacman.conf.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-03-30 15:55:58 -04:00
Dan McGee
e9ee9045ff Remove unnecessary $ENV_CFLAGS from configure.ac
CFLAGS are used at build time, not configure time. We don't need to get the
CFLAGS from the environment during configure.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-03-30 15:55:58 -04:00
Nagy Gabor
5bc43df6f3 Updated Hungarian Translation.
Signed-off-by: Nagy Gabor <ngaba@petra.hos.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-03-30 15:47:11 -04:00
Владимир Байраковский
f72db27c5c Russian translation update.
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-03-30 14:07:26 -04:00
Aaron Griffin
1d35c4dcc6 Report an error on setmntent failure
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-03-29 22:44:10 -05:00
Aaron Griffin
970d2e942e repo-add leaves .PKGINFO in the current directory
* Misuse of 'tar xf', which should be 'tar tf'

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-03-29 21:30:40 -05:00
Aaron Griffin
9a9f1e00da From: Andrew Fyfe <andrew@neptune-one.net>
Date: Thu, 29 Mar 2007 11:11:36 +0100
Subject: [PATCH 1/1] Fix bug where makepkg can't extract .tar.Z archives.

For some reason 'tar -xf' doesn't work with .tar.Z, you need to use
'tar -xzf' to extract the archive.

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2007-03-29 21:26:58 -05:00
Dan McGee
d6d7435a6c Fix a 0 and '/0' switch
It looks like someone accidentally put a 0 instead of '/0', this fixes it.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-03-29 00:57:04 -04:00
Dan McGee
bbe55b5ce9 Doxygen fixups for libalpm
We haven't done a whole lot with Doxygen so far, so this updates some of the
things that have changed a lot- namely, the now public exposure of alpm_list.
All functions in this file have now been Doxygen commented, and a few other
things in alpm.c were fixed as well. In addition, the Doxygen config file
was updated.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-03-29 00:40:49 -04:00
Dan McGee
462ad153e7 Add execute permissions to abs and rankmirrors
Signed-off-by: Dan McGee <dan@archlinux.org>
2007-03-28 18:41:29 -04:00
Dan McGee
3ef1aeb8bd Continue fixing usage instructions.
* Unify the main usage instructions to look a bit more like the rest
  with a usage and options line.
* Fix some of the spacing from the de-gettexting done yesterday.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-03-28 16:26:37 -04:00
Dan McGee
4a0aac3862 Fix --ignore behavior on sysupgrade
* --ignore was being ignored (haha) on sysupgrade when a package was listed
  as being a force upgrade. This adds a prompt to the user in this case asking
  what to do.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-03-28 00:35:17 -04:00
Dan McGee
8cacc46f8b Move .cvsignore -> .gitignore
* Move all .cvsignore files to .gitignore for switch in VCS. In addition,
  delete ones that were unnecessary because they only contained Makefile
  and Makefile.am.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-03-27 21:06:31 -04:00
Dan McGee
5ec3ed4674 Improve pacman.c gettext usage
* Break out a few strings in pacman.c that are used repeatedly to
  reduce unnecessary translations.

Signed-off-by: Dan McGee <dan@archlinux.org>
2007-03-27 20:26:54 -04:00
323 changed files with 46782 additions and 34614 deletions

View File

@@ -8,9 +8,11 @@ config.h
config.h.in
config.log
config.status
config.status.lineno
config.rpath
config.sub
configure
configure.lineno
depcomp
install-sh
libtool
@@ -18,7 +20,11 @@ ltmain.sh
missing
stamp-h1
*.o
*~
root
tags
cscope.out
cscope.in.out
cscope.po.out
pacman-*.tar.gz

View File

@@ -3,11 +3,14 @@ Aurelien Foret <aurelien@archlinux.org>
Aaron Griffin <aaron@archlinux.org>
Dan McGee <dan@archlinux.org>
Mikl<EFBFBD>s Vajna <vmiklos@frugalware.org>
Miklós Vajna <vmiklos@frugalware.org>
Christian Hamar <krics@linuxforum.hu>
Josh Wheeler <deltalima@gmail.com>
David Kimpe <DNAku@frugalware.org>
James Rosten <seinfeld90@gmail.com>
Roman Kyrylych <Roman.Kyrylych@gmail.com>
Andrew Fyfe <andrew@neptune-one.net>
Chantry Xavier <shiningxc@gmail.com>
Nagy Gabor <ngaba@petra.hos.u-szeged.hu>
Nathan Jones <nathanj@insightbb.com>
Allan McRae <mcrae_allan@hotmail.com>

31
COPYING
View File

@@ -1,9 +1,8 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@@ -16,7 +15,7 @@ software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
@@ -56,7 +55,7 @@ patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
@@ -111,7 +110,7 @@ above, provided that you also meet all of these conditions:
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
@@ -169,7 +168,7 @@ access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
@@ -226,7 +225,7 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
@@ -279,8 +278,8 @@ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
Appendix: How to Apply These Terms to Your New Programs
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
@@ -292,7 +291,7 @@ convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) 19yy <name of author>
Copyright (C) <year> <name of author>
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
@@ -304,16 +303,16 @@ the "copyright" line and a pointer to where the full notice is found.
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, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19yy name of author
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
@@ -336,5 +335,5 @@ necessary. Here is a sample; alter the names:
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

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.

105
HACKING
View File

@@ -1,52 +1,71 @@
Contributing to pacman
======================
Pacman - Contributing
=====================
Please read 'submitting-patches' and 'translation-help' in the same directory
as this file.
This file is meant to give you a brief overview of coding style and other
concerns when hacking on pacman. If you are interested in contributing, please
read link:submitting-patches.html[submitting-patches] and
link:translation-help.html[translation-help] as well.
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:
/* vim: set ts=2 sw=2 noet: */
+
[C]
code~~~~~~~~~~
/* 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
gets its own line (the only exception being 'else'). Do not use extra
spaces around the parentheses of the block. ALWAYS use opening/closing
braces, even if it's just a one-line block.
spaces around the parentheses of the block. ALWAYS use opening and closing
braces, even if it's just a one-line block. This reduces future error when
blocks are expanded beyond one line.
+
[C]
code~~~~~~~~~~
for(lp = list; lp; lp = lp->next) {
newlist = _alpm_list_add(newlist, strdup(lp->data));
}
for(lp = list; lp; lp = lp->next) {
newlist = _alpm_list_add(newlist, strdup(lp->data));
}
while(it) {
ptr = it->next;
if(fn) {
fn(it->data);
} else {
return(1);
}
free(it);
it = ptr;
}
while(it) {
ptr = it->next;
if(fn) {
fn(it->data);
} else {
return(1);
}
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~~~~~~~~~~
alpm_list_t *alpm_list_add(alpm_list_t *list, void *data)
{
alpm_list_t *ptr, *lp;
pmlist_t *_alpm_list_add(pmlist_t *list, void *data)
{
pmlist_t *ptr, *lp;
ptr = list;
if(ptr == NULL) {
...
}
...
}
code~~~~~~~~~~
ptr = list;
if(ptr == NULL) {
...
}
4. Comments should be ANSI-C89 compliant. That means no `// Comment` style;
use only `/* Comment */` style.
4. Comments should be ANSI-C89 compliant. That means no "// Comment" style;
use only "/* Comment */" style.
/* This is a comment */
NOT
// This is a comment
5. Return statements should be written like a function call.
@@ -62,34 +81,58 @@ Coding style
NOT
sizeof(*mylist);
7. When using strcmp() (or any function that returns 0 on success) in a
conditional statement, use != 0 or == 0 and not the negation (!) operator.
It reads much cleaner for humans (using a negative to check for success is
confusing) and the compiler will treat it correctly anyway.
if(strcmp(a, b) == 0)
NOT
if(!strcmp(a, b))
Other Concerns
--------------
Header Includes
~~~~~~~~~~~~~~~
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~~~~~~~~~~
#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~~~~~~~~~~
/* libalpm */
#include "yourfile.h"
#include "alpm_list.h"
#include "anythingelse.h"
code~~~~~~~~~~
For pacman:
[C]
code~~~~~~~~~~
#include <alpm.h>
#include <alpm_list.h>
/* pacman */
#include "yourfile.h"
#include "anythingelse.h"
code~~~~~~~~~~
vim: set ts=2 sw=2 et:
/////
vim: set ts=2 sw=2 syntax=asciidoc et:
/////

View File

@@ -1,14 +1,27 @@
SUBDIRS = lib/libalpm src/util src/pacman scripts doc etc pactest contrib
#DISTCHECK_CONFIGURE_FLAGS = --disable-fakeroot
SUBDIRS = lib/libalpm src/util src/pacman scripts etc po pactest contrib
if WANT_DOC
SUBDIRS += doc
endif
# 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 ChangeLog.proto
# run the pactest test suite
check-local: src/pacman
python $(top_srcdir)/pactest/pactest.py --debug=1 \
$(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
# create the pacman DB and cache directories upon install
install-data-local:
for dir in "$(DESTDIR)$(localstatedir)/lib/pacman" "$(DESTDIR)$(localstatedir)/cache/pacman/pkg"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
# vim:set ts=2 sw=2 noet:

169
NEWS
View File

@@ -1,5 +1,142 @@
VERSION DESCRIPTION
-----------------------------------------------------------------------------
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
- updates to pacman clean operation- now cleans uninstalled
packages and old sync DBs (FS#8061)
- remove all hardcoded paths and allow them to be set at
configure/build time
- single mirrorfile- pacman substitutes the repository name in
mirror file when $repo is found (FS#6389)
- New config file options: ShowSize, TotalDownload, IgnoreGroup,
UseDelta
- all scripts have been gettext-ized and can be translated
- added testdb utility to check pacman DBs for common problems
- huge additions to pactest suite
- remove -F/--freshen operation
- add --ignoregroup option (FS#1592)
- --ignore and --ignoregroup accept comma separated lists
- add --needed option for --sync
- massive optimization and speedup for --owns
- add -q/--quiet option for -Ss/-Sl and -Q? output (FS#8470)
- add --asdeps option (install reason: dependency) (FS#7193)
- replace "Total Package Size" with "Total Download Size"
(FS#4182)
- fix -Q options to work on installed packages AND package files
- change -Q/--query options to act as filters and increase their
flexibility
- -U/-A <url> now downloads to cachedir (FS#6404)
- install and build dates are localized
- optdepends support
- delta support
- versioned provisions support
- versioned conflicts support
- add < and > operators for versioned dependencies and conflicts
- bash completion updates
- mirrorlist updates
- removed ABS script from codebase (now a separate project)
- allow multiple pacman cache directories
- all manpages are now generated using Asciidoc (FS#7312)
- moved parseconfig from backend library to frontend
- clean up and refactoring of the ENTIRE codebase
- remove many useless #ifdefs
- split many too-long functions
- portability updates: compiles and passes tests on BSD and
Darwin (switching libdownload->libfetch)
- clean up build process
- use of static code analysis
- memory leak fixes all over the place
- fix overzealous use of macros
- entire codebase builds with -pedantic GCC option
- libalpm-specific changes:
- moved location of sync DBs into their own folder to thwart
deletion and remove naming limitations
- REQUIREDBY entries are no longer used in local DB but are
computed on the fly when needed, which should resolve
phantom dependency issues (FS#7639)
- ensure we export everything that should be public
- fix some const correctness issues
- add list tail ptr shortcut to make last element lookups O(1)
- database dates are stored as seconds from epoch
- removed SHA1 support
- drop in new MD5 library
- implement topological sorting for dependencies
- do case sensitive compare in parse_descfile (FS#8081)
- remove hardcoded architectures
- conflicts checking speedups and fixes
- move lockfile location to inside the DB
- remove gettext calls from DEBUG messages
- remove faulty diskspace checking
- move functions out of alpm.c to where they belong
- rewrite of file extraction code (FS#7484)
- makepkg-specific changes:
- entire script has been functionalized
- only runs in fakeroot when necessary
- hard linked manpages are now compressed (FS#5392)
- built-in versionpkg support
- arch=('any') support (FS#8153)
- clean up and prettify the output
- replace tar/cpio/unzip with bsdtar (FS#7485)
- add --ignorearch option (FS#7355)
- improved error handling
- downloads straight to $SRCDEST to avoid copies (FS#7271)
- support for multiple download protocols (FS#4404)
- remove --usesudo option, use it by default
- add --asroot option to discourage building as root
- add $srcdir and $pkgdir variables (FS#7278)
- add source package creation option
- rankmirrors- allow reading from stdin (FS#8043)
- and many other updates: 198 bugs/FRs closed since 3.0.0 release
- switch to GIT for source code management
3.0.6 - config files updated to reflect current -> core change
- fix symlink overwriting issue (FS#7484)
- fix config parsing with tr_TR locale (FS#7235)
- use AC_SYS_LARGEFILE if available (FS#7578)
3.0.5 - add -mtune=generic to default CFLAGS in makepkg.conf
- small updates to translations
- repo-add: fix conflicts issue for real this time
- fix issue with libarchive incorrectly setting permissions
3.0.4 - updated translations
- repo-add: fix issue where conflicts were not put in database
3.0.3 - updated translations
- repo-add: fixed a desc file clobbering issue
3.0.2 - fix a bug where pre/post_remove scriptlets were not ran
- ensure ldconfig is ran in all operations
- added a few new translations, updated existing ones
- updated mirror lists
- makepkg: ensure CFLAGS are exported to build function
3.0.1 - fix a locale issue with tr_TR upper/lower-case conversion
- allow removal when listing the same package multiple times
- fix a repo-add bug that left a .PKGINFO file in the current
@@ -156,15 +293,15 @@ VERSION DESCRIPTION
- Smarter file-conflict checking with symlinked paths and
with files that move from one package to another
2.8 - Bugfixes:
- #861: file:/// urls not handled properly with XferCommand
- #1003: set umask before scriptlet calls
- #1027: download problems with http urls using -U/-A
- #1044: segfaults when using -Rs
- #863: "missing post_remove" errors with some packages
- #875: detect low disk space properly
- #986: makepkg -e doesn't validate files
- #1010: add -j option to makepkg
- #1028: make pacman -Sp runnable as non-root
- FS#861: file:/// urls not handled properly with XferCommand
- FS#1003: set umask before scriptlet calls
- FS#1027: download problems with http urls using -U/-A
- FS#1044: segfaults when using -Rs
- FS#863: "missing post_remove" errors with some packages
- FS#875: detect low disk space properly
- FS#986: makepkg -e doesn't validate files
- FS#1010: add -j option to makepkg
- FS#1028: make pacman -Sp runnable as non-root
- added pre_install and pre_upgrade scriptlet support
- added an "Architecture" field in the package meta-data
- added patch from Aurelien Foret which improves performance
@@ -177,7 +314,7 @@ VERSION DESCRIPTION
2.7.9 - added the "force" option to packages, so --sysupgrade can
downgrade packages when it needs to
2.7.8 - added post_remove scriptlet support
- added -Qs option (bug #854)
- added -Qs option (FS#854)
- a provisio does not imply conflict, to make a provisio target
conflict with anything else that provides the same thing, you
can now do this by specifying the provisio target as both a
@@ -186,10 +323,10 @@ VERSION DESCRIPTION
provides=('x-server')
- cleaned up the download progress bar a bit
- added %o parameter to XferCommand so wget can resume properly
- fixed a segfault in downloadfiles() (bug #787)
- fixed a segfault in downloadfiles() (FS#787)
- patches from Oliver Burnett-Hall
- gensync uses a better temp dir (bug #774)
- PKGDEST can be set in makepkg.conf (bug #783)
- gensync uses a better temp dir (FS#774)
- PKGDEST can be set in makepkg.conf (FS#783)
- patches from Aurelien Foret
- segfault fix, couple memory leaks
- more sanity checks in "provides" searches
@@ -203,7 +340,7 @@ VERSION DESCRIPTION
- -Ss now searches thru provides fields
- added --dbonly option to -R
2.7.6 - added --print-uris option
- fixed an http download bug (bug #667)
- fixed an http download bug (FS#667)
- fixed a segfault related to replaces/conflicts handling
2.7.5 - "replaces" packages were ignoring IgnorePkg in pacman.conf
- fixed another bug in conflict handling
@@ -219,7 +356,7 @@ VERSION DESCRIPTION
- You can now use the --info option with --sync to display an
uninstalled package's dependency info.
- Added a sane umask before db writes
- buffer overflow fix (bug #442)
- buffer overflow fix (FS#442)
2.7.3 - makepkg not longer strips files with .exe or .dll extensions
- Added Aurelien's patch:
- proxy support (no authentication yet)
@@ -248,7 +385,7 @@ VERSION DESCRIPTION
2.6.3 - A couple memory fixes in the new replaces code
2.6.2 - Fixed a memory cleanup bug
- Aurelien's patch:
- bug #159 implemented (for -S and -R)
- FS#159 implemented (for -S and -R)
- fixed a bug with pacman -Sg (pacman was browsing only one
db to get groups)
- fixed a bug with list_merge()

35
PKGBUILD.proto Normal file
View File

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

1
README
View File

@@ -59,7 +59,6 @@ library is initialized.
* 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)
* usesyslog: Log to syslog instead of `logfile` for file-base logging.
* upgradedelay: The time span to wait before listing a package as an upgrade (Default: 0)
* xfercommand: The command to use for downloading instead of pacman's internal
downloading functionality.
* nopassiveftp: Do not use passive FTP commands for ftp connections.

View File

@@ -6,16 +6,6 @@
"replaces" packages to the front end, so the frontend can handle the QUESTION()
stuff in that case
* Look into other VCSs to use. The main CVS repo will remain, but having a
distributed system to allow for easy patching/pushing/pulling would be nice
- monotone and mercurial look like the top contenders in my book, but I need
to evaluate both a bit more.
* src/pacman:
There's quite a few single function headers which contain the pacman_*
functions. We should move these to a single header (pacman.h) to clean up
the source a bit.
* libalpm -> front end communication needs a work-up. Both progress functions
can be combined into one callback, IFF we adjust it to accept a prefix string
for the progress bars, and format it at the lib side. Question functions
@@ -45,10 +35,6 @@
* pacman: fixup doxygen documentation for public interface
* libalpm: just because a function is in alpm.h doesn't mean it needs to be in
alpm.c - we should move functions around where they should be. In fact,
alpm.c might not be needed at all, if things were organized properly.
* feature for 3.1: package file hooks *
I've been planning on this one for some time. Here's a simple rundown:
in /etc/pacman.d/hooks:

View File

@@ -4,23 +4,9 @@ TODO.dan
This is my personal TODO list. No guarantees if it is out of date and things no
longer apply. If you want to help out with any of it, send me an email.
Only vaguely related to pacman:
-------------------------------
Port the libdownload (libfetch) manpage from BSD style to Linux style, or at
very least change references to BSD.
Pacman 3.1:
-----------
Documentation- look into moving man page format to a more portable source
format to make translation easier to keep up-to-date (something like txt2tags,
docbook, asciidoc) This will need some research.
Update cache cleaning functionality - keep installed version, choose number to
keep, etc. Good python script in the forums that we should try to emulate.
Downgrade feature - allow users to see cached packages and downgrade to
(previous or any?) available options.
@@ -46,12 +32,6 @@ another FS bug), etc. Remove the -A flag and possibly -D, -T, and -Y (-Y is
killed now in favor of vercmp binary) if they can be done by other actions.
Possible switch of -U --> -I (#5571).
Rewrite _alpm_sortbydeps to use Topological Sort. Should work using a standard
topo sort algorithm, once the crazy types can be fixed up a bit. Include a
cycle check - print a big error message if this happens.
-- http://en.wikipedia.org/wiki/Topological_sort
-- http://everything2.com/?node_id=556079
Review display and logging functions. There seems to be an abundance of them.
Make it extensible to use color, review what verbose/debug means. Perhaps
separate logging functionality- Pacman has its normal log, and alpm backend
@@ -59,12 +39,6 @@ keeps a very simple log file - listing only adds (including syncs) and removes.
This way a consistency list can be kept of what is currently installed and what
isn't, without all the logging junk from the front end.
If we stick with autotools, add more defines to configure.in, including
CACHEDIR, PKGEXT, so these can be specified at configure time for ease of use
by other distributions which may want to change the defaults. Also, review what
needs to be in config.h and what does not. There may be excess #depends which
are hard coded into the sources. (from TODO.autoconf)
Profile the code. Find the functions that are being called a lot, and see what
can be done about it. Find out if all these calls are necessary (e.g. excessive
alpm_list_count calls), and maybe think about changing data structures to speed
@@ -72,12 +46,10 @@ operations up (e.g. a 'count' field). NOTE: already found two huge issues with
quick profiling- excessive setlocale calls, and extremely excessive strcmp
calls.
Localize the date display done in --info output. Also, fix other localized
issues- use non-printf when necessary, make sure all two line printed messages
(especially usage instructions) are printed using one print statement. We
may need to use some wchar_t output on the progress bar as char/byte counts
differ here. Sizes of packages (e.g. 10,400.23 MB) should all be localized with
correct seperators.
Fix other localized issues- use non-printf when necessary. We may need to use
some wchar_t output on the progress bar as char/byte counts differ here. Sizes
of packages (e.g. 10,400.23 MB) should all be localized with correct
seperators.
Rewrite makepkg to use terminal-safe coloring/bolding. tput utility should
allow us to do this. Make universal message functions for systemwide use,
@@ -86,11 +58,6 @@ including all pacman utilites- abs, pacman-optimize, etc.
Bugs/FRs to smash: 6468, 6437, 6430?, 6420, 6404, 6389, 6312?, 6284, 6273?,
6255?, 6208, 5987, 5885, 5571, 4182, 3492, 2810?, 1769, 1588, 1571
Remove _alpm from function names now that we have SYMHIDDEN and static
declarations.
Remove alpm.c, put functions where they should be.
Update doxygen comments, they may need some work. Try to document all of the
private internal functions too- it helps a ton for people just getting a
start on pacman hacking.
@@ -106,8 +73,6 @@ Update copyrights (2007)
Update pacman website, and add/finish pacman coding style page
autogen.sh / autoclean.sh - these seem messy. Can we clean this up?
Refine makepkg error codes. Each kind of failure could have its own code:
--package already built
--failed integ checks
@@ -119,14 +84,8 @@ to KB, MB, GB.
Revamp the downloadprog function a bit. Seems kind of messy.
Add localized pkgdesc variables to makepkg.
--print-uri option to sync should not require saying yes or no to up to date
Add testing scripts to pactest for issues we have been working on (especially
files moving between packages). Also, take a look at cleaning up the output and
structure of the pactest.py program itself.
Build a replacement for this, or at least standardize its use. We shouldn't
always need to pass handle->root around, it is constant. Something like char*
buildpath(file).

43
TRANSLATORS Normal file
View File

@@ -0,0 +1,43 @@
Thanks to all of those who have helped translate pacman, both in the past
and currently. Here are some of the current translators (past translators
can be found by looking in the GIT history).
If your language is listed here and you are interested in helping translate,
contact either the pacman mailing list at pacman-dev@archlinux.org, or one
of the translators listed above.
If your language is not listed here and you wish it was, let the pacman mailing
list know you are interested in making a translation. We will be happy to add
your language to the mix.
* indicates the last active translator.
Czech (cs):
* Vojtěch Gondžala <vogo@seznam.cz>
German (de):
* Matthias Gorissen <matthias@archlinux.de>
Pierre Schmitz <pierre@archlinux.de>
British English (en_GB):
* Jeff Bailes <thepizzaking@gmail.com>
Spanish (es):
* Juan Pablo González Tognarelli <lord_jotape@yahoo.com.ar>
French (fr):
* Chantry Xavier <shiningxc@gmail.com>
solsTiCe d'Hiver <solstice.dhiver@laposte.net>
Hungarian (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):
* Mateusz Jędrasik <m.jedrasik@gmail.com>
Brazilian Portuguese (pt_BR):
* João Felipe Santos <joao.eel@gmail.com>
Douglas Soares de Andrade <douglas@archlinux-br.org>
Hugo Doria <hugodoria@archlinux-br.org>
Lincoln de Sousa <lincoln@archlinux-br.org>
Leandro Inácio <leandro@archlinux-br.org>
Russian (ru):
Vladimir Bayrakovskiy <4rayven@gmail.com>

File diff suppressed because it is too large Load Diff

4
config.guess vendored
View File

@@ -4,7 +4,7 @@
# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
# Inc.
timestamp='2007-03-06'
timestamp='2007-05-17'
# 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
@@ -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.*:*)
i86pc:SunOS:5.*:* | ix86xen:SunOS:5.*:*)
echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit ;;
sun4*:SunOS:6*:*)

6
config.sub vendored
View File

@@ -4,7 +4,7 @@
# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
# Inc.
timestamp='2007-01-18'
timestamp='2007-04-29'
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
@@ -683,6 +683,10 @@ case $basic_machine in
basic_machine=i386-pc
os=-mingw32
;;
mingw32ce)
basic_machine=arm-unknown
os=-mingw32ce
;;
miniframe)
basic_machine=m68000-convergent
;;

View File

@@ -1,225 +1,362 @@
ENV_CFLAGS=$CFLAGS
CFLAGS=""
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
# Minimum version of autoconf required
AC_PREREQ(2.60)
# UPDATING VERSION NUMBERS FOR RELEASES
#
# libalpm:
# current
# The most recent interface number that this library implements.
# revision
# The implementation number of the current interface.
# age
# The difference between the newest and oldest interfaces that this library
# implements. In other words, the library implements all the interface
# numbers in the range from number current - age to current.
#
# 1. Start with version information of `0:0:0' for each libtool library.
# 2. Update the version information only immediately before a public release of
# your software. More frequent updates are unnecessary, and only guarantee
# that the current interface number gets larger faster.
# 3. If the library source code has changed at all since the last update, then
# increment revision (`c:r:a' becomes `c:r+1:a').
# 4. If any interfaces have been added, removed, or changed since the last
# update, increment current, and set revision to 0.
# 5. If any interfaces have been added since the last public release, then
# increment age.
# 6. If any interfaces have been removed since the last public release, then
# set age to 0.
#
# pacman:
# Extreme huge major changes:
# pacman_version_major += 1
# pacman_version_minor = 0
# pacman_version_micro = 0
#
# Real releases:
# pacman_version_minor += 1
# pacman_version_micro = 0
#
# Bugfix releases:
# pacman_version_micro += 1
#
# 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], [4])
m4_define([lib_revision], [0])
m4_define([lib_age], [2])
m4_define([pacman_version_major], [3])
m4_define([pacman_version_minor], [1])
m4_define([pacman_version_micro], [2])
m4_define([pacman_version_suffix], [])
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_CONFIG_SRCDIR([config.h.in])
AC_CONFIG_HEADERS([config.h])
AC_PREREQ(2.59)
dnl Update it right before the release since $pkgver_foo are all _post_ release snapshots
AC_INIT([Pacman package manager], 3.0.1, [pacman-dev@archlinux.org], [pacman])
AC_LANG([C])
AC_CONFIG_HEADERS(config.h)
AC_CANONICAL_HOST
AM_INIT_AUTOMAKE
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,
# and put LIB_VERSION in config.h
AC_SUBST(LIB_VERSION)
AC_SUBST(LIB_VERSION_INFO)
AC_DEFINE_UNQUOTED([LIB_VERSION], ["$LIB_VERSION"], [libalpm version number])
# Help line for root directory
AC_ARG_WITH(root-dir,
AC_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]),
[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]),
[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]),
[DBEXT=$withval], [DBEXT=.db.tar.gz])
# Help line for documentation
AC_ARG_ENABLE(doc,
AC_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]),
[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]),
[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])
# Checks for programs.
AC_PROG_AWK
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])
# find installed gettext
AM_GNU_GETTEXT([external])
AM_GNU_GETTEXT_VERSION(0.13.1)
dnl Define the libalpm version number here
LIB_MAJOR_VERSION=1
LIB_MINOR_VERSION=0
LIB_MICRO_VERSION=0
LIB_VERSION=$LIB_MAJOR_VERSION.$LIB_MINOR_VERSION.$LIB_MICRO_VERSION
dnl Needed for libtool to create proper shared lib version.
dnl This is not completely correct- see
dnl http://sourceware.org/autobook/autobook/autobook_91.html for details.
LIB_VERSION_INFO=`expr $LIB_MAJOR_VERSION + $LIB_MINOR_VERSION`:$LIB_MICRO_VERSION:$LIB_MINOR_VERSION
# Check for libarchive
AC_CHECK_LIB([archive], [archive_read_data], , AC_MSG_ERROR([libarchive is needed to compile pacman!]))
dnl Set subsitution values for version stuff in Makefiles and anywhere else
AC_SUBST(LIB_VERSION)
AC_SUBST(LIB_VERSION_INFO)
# Check for libdownload
AC_CHECK_LIB([download], [downloadParseURL], , AC_MSG_ERROR([libdownload is needed to compile pacman!]))
dnl Put version number in config.h
AC_DEFINE_UNQUOTED([LIB_VERSION], ["$LIB_VERSION"], [libalpm version number])
# 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])
dnl Configuration files
dnl AC_CONFIG_FILES([etc/makepkg.conf] [etc/pacman.conf])
# Checks for typedefs, structures, and compiler characteristics.
AC_C_INLINE
AC_TYPE_MODE_T
AC_TYPE_OFF_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_STRUCT_TM
AC_TYPE_UID_T
AC_PROG_CC
AC_HEADER_STDC
AC_PROG_INSTALL
AC_CHECK_FUNCS([strverscmp])
AM_PROG_LIBTOOL
AM_CONDITIONAL(LINKSTATIC, test "$enable_static" = "yes")
# 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])
dnl Help line for doxygen
AC_ARG_ENABLE(doxygen,
AC_HELP_STRING([--disable-doxygen], [Build API docs via Doxygen]),
[wantdoxygen=$enableval], [wantdoxygen=yes])
# Enable large file support if available
AC_SYS_LARGEFILE
dnl Help line for config file
AC_ARG_WITH(config-file,
AC_HELP_STRING([--with-config-file=path], [Set the location of pacman's config file]),
[configfile=$withval], [configfile=/etc/pacman.conf])
# Check if we can use symbol visibility support in GCC
GCC_VISIBILITY_CC
# Check if we have -fgnu89-inline flag
GCC_GNU89_INLINE_CC
dnl Help line for debug
AC_ARG_ENABLE(debug,
AC_HELP_STRING([--enable-debug], [Enable debugging support]),
[debug=$enableval], [debug=no])
dnl Help line for fakeroot
AC_ARG_ENABLE(fakeroot,
AC_HELP_STRING([--disable-fakeroot], [Disable fakeroot proof support]),
[fakeroot=$enableval], [fakeroot=yes])
dnl Host-dependant flags
# Host-dependant flags
case "${host}" in
*-*-cygwin*)
ENV_CFLAGS="$ENV_CFLAGS -DCYGWIN"
CFLAGS="$CFLAGS -DCYGWIN"
;;
esac
dnl Check for architecture
# Check for architecture, used in default makepkg.conf
# (Note single space left after CARCHFLAGS)
case "${host}" in
i686-*)
i686-*)
CARCH="i686"
CARCHFLAGS="i686"
ARCHSWITCH="march"
CARCHFLAGS="-march=i686 "
;;
x86_64-*)
x86_64-*)
CARCH="x86_64"
CARCHFLAGS="x86-64"
ARCHSWITCH="march"
CARCHFLAGS="-march=x86-64 "
;;
ia64-*)
ia64-*)
CARCH="ia64"
CARCHFLAGS="ia64"
ARCHSWITCH="march"
CARCHFLAGS="-march=ia64 "
;;
sparc-*)
sparc-*)
CARCH="sparc"
CARCHFLAGS="v9"
ARCHSWITCH="mcpu"
CARCHFLAGS="-mcpu=v9 "
;;
ppc-* | powerpc-*)
CARCH="ppc"
CARCHFLAGS="750"
ARCHSWITCH="mcpu"
CARCHFLAGS="-mcpu=750 "
;;
i386-*)
i386-*)
CARCH="i386"
CARCHFLAGS="i386"
ARCHSWITCH="march"
CARCHFLAGS="-march=i386 "
;;
arm-*)
CARCH="arm"
CARCHFLAGS="-march=armv4 "
;;
*)
AC_MSG_ERROR([Your architecture is not supported])
AC_MSG_WARN([[Your architecture is unknown for makepkg.conf, consider adding it to configure.ac]])
CARCH="unknown"
CARCHFLAGS=""
;;
esac
dnl Now do some things common to all architectures
# Now do some things common to all architectures
CHOST="${host}"
AC_SUBST(CARCH)
AC_SUBST(CARCHFLAGS)
AC_SUBST(ARCHSWITCH)
AC_SUBST(CHOST)
dnl Humor lowers blood pressure
AC_MSG_CHECKING(your blood pressure)
AC_MSG_RESULT([a bit high, but we can proceed])
dnl Check for doxygen support
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
else
AC_MSG_RESULT(no, doxygen missing)
usedoxygen=no
fi
# Check for documentation support and status
AC_MSG_CHECKING([for building documentation])
if test "x$wantdoc" = "xyes" ; then
AC_MSG_RESULT([yes])
wantdoc=yes
else
AC_MSG_RESULT(no, disabled by configure)
AC_MSG_RESULT([no, disabled by configure])
wantdoc=no
fi
AM_CONDITIONAL(WANT_DOC, test "x$wantdoc" = "xyes")
# Check for doxygen support and status
AC_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
else
AC_MSG_RESULT([no, doxygen missing])
usedoxygen=no
fi
else
AC_MSG_RESULT([no, disabled by configure])
usedoxygen=no
fi
AM_CONDITIONAL(HAS_DOXYGEN, test "x$usedoxygen" = "xyes")
AM_CONDITIONAL(USE_DOXYGEN, test "x$usedoxygen" = "xyes")
dnl Check for math
AC_CHECK_LIB([m], [sqrt], [AC_CHECK_HEADER([math.h], [LIBM='-lm'])])
if test -z "$LIBM"; then
AC_MSG_ERROR("math library needed to compile pacman!");
fi
dnl Check for libarchive
AC_CHECK_LIB([archive], [archive_read_data], [AC_CHECK_HEADER([archive.h], [LIBARCHIVE='-larchive'])])
if test -z "$LIBARCHIVE"; then
AC_MSG_ERROR("libarchive is needed to compile pacman!");
fi
dnl Check for libdownload
AC_CHECK_LIB([download], [downloadParseURL], [AC_CHECK_HEADER([download.h], [LIBDOWNLOAD='-ldownload'])])
if test -z "$LIBDOWNLOAD"; then
AC_MSG_ERROR("libdownload is needed to compile pacman!");
fi
dnl Set config location
AC_MSG_CHECKING(for configuration file name)
if test -n "$configfile"; then
AC_DEFINE_UNQUOTED([PACCONF], "$configfile", [Location of pacman conf file])
AC_MSG_RESULT(["$configfile"])
# 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_ERROR(["pacman config file (--with-config-file is not set"])
AC_MSG_RESULT([no, disabled by configure])
useasciidoc=no
fi
AM_CONDITIONAL(USE_ASCIIDOC, test "x$useasciidoc" = "xyes")
dnl Enable or disable debug code
# Enable or disable debug code
AC_MSG_CHECKING(for debug mode request)
if test "x$debug" = "xyes" ; then
AC_MSG_RESULT(yes)
AC_DEFINE([PACMAN_DEBUG], , [Enable debug code])
CFLAGS="$CFLAGS -g -Wall -Werror -fstack-protector -std=c99"
LDFLAGS="$LDFLAGS -lmcheck"
AC_MSG_RESULT(yes)
# Check for mcheck
AC_CHECK_HEADERS([mcheck.h])
# Check for -fstack-protector availability
GCC_STACK_PROTECT_LIB
GCC_STACK_PROTECT_CC
CFLAGS="$CFLAGS -Wall -Werror"
else
CFLAGS="$CFLAGS -Wall -std=c99"
AC_MSG_RESULT(no)
AC_MSG_RESULT(no)
CFLAGS="$CFLAGS -Wall"
fi
dnl Enable or disable fakeroot code
AC_MSG_CHECKING(for fakeroot proof support)
if test "x$fakeroot" = "xyes" ; then
# 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])
else
AC_DEFINE([FAKEROOT], , [Disable fakeroot-proof code])
AC_MSG_RESULT(no)
fi
AM_CONDITIONAL(INCLUDE_PACMAN_STATIC, test "x$pacmanstatic" = "xyes")
dnl Set CFLAGS to both $CFLAGS and ones from env ($ENV_CFLAGS)
CFLAGS="$CFLAGS $ENV_CFLAGS"
# Set root directory
AC_SUBST(ROOTDIR)
# Set package file extension
AC_SUBST(PKGEXT)
AC_DEFINE_UNQUOTED([PKGEXT], "$PKGEXT", [The file extension used by pacman packages])
# Set source package file extension
AC_SUBST(SRCEXT)
AC_DEFINE_UNQUOTED([SRCEXT], "$SRCEXT", [The file extension used by pacman source packages])
# Set database file extension
AC_SUBST(DBEXT)
AC_DEFINE_UNQUOTED([DBEXT], "$DBEXT", [The file extension used by pacman databases])
dnl ==========================================================================
AC_OUTPUT([
# Configuration files
AC_CONFIG_FILES([
lib/libalpm/Makefile
lib/libalpm/po/Makefile.in
src/pacman/Makefile
src/pacman/po/Makefile.in
src/util/Makefile
scripts/Makefile
doc/Makefile
etc/Makefile
etc/makepkg.conf
etc/pacman.conf
etc/pacman.d/Makefile
etc/pacman.d/mirrorlist
etc/abs/Makefile
po/Makefile.in
pactest/Makefile
contrib/Makefile
Makefile
])
AC_OUTPUT
echo "
pacman-$VERSION:
pacman_display_version:
prefix : ${prefix}
Build information:
source code location : ${srcdir}
prefix : ${prefix}
sysconfdir : $(eval echo ${sysconfdir})
conf file : $(eval echo ${sysconfdir})/pacman.conf
localstatedir : $(eval echo ${localstatedir})
database dir : $(eval echo ${localstatedir})/lib/pacman/
cache dir : $(eval echo ${localstatedir})/cache/pacman/pkg/
compiler : ${CC}
compiler flags : ${CFLAGS}
defines : ${DEFS}
Architecture : ${CARCH}
Architecture flags : -${ARCHSWITCH}=${CARCHFLAGS}
Architecture flags : ${CARCHFLAGS}
Host Type : ${CHOST}
libalpm version : ${LIB_VERSION}
libalpm version info : ${LIB_VERSION_INFO}
pacman version : ${PACKAGE_VERSION}
pacman.conf location : ${configfile}
Directory and file information:
root working directory : ${ROOTDIR}
package extension : ${PKGEXT}
source pkg extension : ${SRCEXT}
database extension : ${DBEXT}
Compilation options:
Run make in doc/ dir : ${wantdoc}
Doxygen support : ${usedoxygen}
Asciidoc support : ${useasciidoc}
debug support : ${debug}
fakeroot-proof support : ${fakeroot}
build pacman.static : ${pacmanstatic}
"
# vim:set ts=2 sw=2 noet:

View File

@@ -1,2 +0,0 @@
Makefile
Makefile.in

0
contrib/.gitignore vendored Normal file
View File

View File

@@ -1,8 +1,12 @@
EXTRA_DIST = \
PKGBUILD.vim \
bash_completion \
pacsearch \
pacdiff \
pacsearch \
re-pacman \
vimproject \
wget-xdelta.sh \
zsh_completion \
README
# vim:set ts=2 sw=2 noet:

233
contrib/PKGBUILD.vim Normal file
View File

@@ -0,0 +1,233 @@
" Vim syntax file
" Language: PKGBUILD
" Maintainer: Alessio 'mOLOk' Bolognino <themolok at gmail.com>
" Last Change: 2007/05/08
" Version Info: PKGBUILD-0.2 (colorphobic)
" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif
let b:main_syntax = "sh"
runtime! syntax/sh.vim
" case on
syn case match
" pkgname
" FIXME if '=' is in pkgname/pkgver, it highlights whole string, not just '='
syn keyword pb_k_pkgname pkgname contained
syn match pbValidPkgname /\([[:alnum:]]\|+\|-\|_\){,32}/ contained contains=pbIllegalPkgname
syn match pbIllegalPkgname /[[:upper:]]\|[^[:alnum:]-+_=]\|=.*=\|=['"]\?.\{33,\}['"]\?/ contained
syn match pbPkgnameGroup /^pkgname=.*/ contains=pbIllegalPkgname,pb_k_pkgname,shDoubleQuote,shSingleQuote
" pkgver
syn keyword pb_k_pkgver pkgver contained
syn match pbValidPkgver /\([[:alnum:]]\|\.\|+\|_\)/ contained contains=pbIllegalPkgver
syn match pbIllegalPkgver /[^[:alnum:]+=\.\_]\|=.*=/ contained
syn match pbPkgverGroup /^pkgver=.*/ contains=pbIllegalPkgver,pbValidPkgver,pb_k_pkgver,shDoubleQuote,shSingleQuote
" pkgrel
syn keyword pb_k_pkgrel pkgrel contained
syn match pbValidPkgrel /[[:digit:]]*/ contained contains=pbIllegalPkgver
syn match pbIllegalPkgrel /[^[:digit:]=]\|=.*=/ contained
syn match pbPkgrelGroup /^pkgrel=.*/ contains=pbIllegalPkgrel,pbValidPkgrel,pb_k_pkgrel,shDoubleQuote,shSingleQuote
" pkgdesc
syn keyword pb_k_desc pkgdesc contained
" 90 chars: 80 for description, 8 for pkgdesc and 2 for ''
syn match pbIllegalPkgdesc /.\{90,}\|=['"]\?.*['" ]\+[iI][sS] [aA]/ contained contains=pbPkgdescSign
syn match pbValidPkgdesc /[^='"]\.\{,80}/ contained contains=pbIllegalPkgdesc
syn match pbPkgdescGroup /^pkgdesc=.*/ contains=pbIllegalPkgdesc,pb_k_desc,pbValidPkgdesc,shDoubleQuote,shSingleQuote
syn match pbPkgdescSign /[='"]/ contained
" url
syn keyword pb_k_url url contained
syn match pbValidUrl /['"]*\(https\|http\|ftp\)\:\/.*\.\+.*/ contained
syn match pbIllegalUrl /[^=]/ contained contains=pbValidUrl
syn match pbUrlGroup /^url=.*/ contains=pbValidUrl,pb_k_url,pbIllegalUrl,shDoubleQuote,shSingleQuote
" license
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
" 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
" 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
" 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
" 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
" conflicts
syn keyword pb_k_conflicts conflicts contained
syn match pbValidConflicts /\([[:alnum:]]\|+\|-\|_\)*/ contained
syn region pbConflictsGroup start=/^conflicts=(/ end=/)/ contains=pb_k_conflicts,pbValidConflicts,shDoubleQuote,shSingleQuote
" provides
syn keyword pb_k_provides provides contained
syn match pbValidProvides /\([[:alnum:]]\|+\|-\|_\)*/ contained
syn region pbProvidesGroup start=/^provides=(/ end=/)/ contains=pb_k_provides,pbValidProvides,shDoubleQuote,shSingleQuote
" replaces
syn keyword pb_k_replaces replaces contained
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
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
syn keyword pb_k_install install contained
syn match pbValidInstall /\([[:alnum:]]\|\$\|+\|-\|_\)*\.install/ contained
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
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
syn keyword pb_k_source source contained
syn match pbIllegalSource /\(http\|ftp\|https\).*\.\+\(dl\|download.\?\)\.\(sourceforge\|sf\).net/
syn region pbSourceGroup start=/^source=(/ end=/)/ contains=pb_k_source,pbIllegalSource,shNumber,shDoubleQuote,shSingleQuote,pbDerefEmulation
syn match pbDerefEmulation /\$[{]\?[[:alnum:]_]*[}]\?/ contained
hi def link pbDerefEmulation PreProc
" md5sums
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 match pbMd5Quotes /'.*'\|".*"/ contained contains=pbMd5Hash,pbIllegalMd5sums
syn match pbMd5Hash /[[:alnum:]]\+/ contained contains=pbValidMd5sums
hi def link pbMd5Quotes Keyword
hi def link pbMd5Hash Error
hi def link pbValidMd5sums Number
" sha1sums
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 match pbSha1Quotes /'.*'\|".*"/ contained contains=pbSha1Hash,pbIllegalSha1sums
syn match pbSha1Hash /[[:alnum:]]\+/ contained contains=pbValidSha1sums
hi def link pbSha1Quotes Keyword
hi def link pbSha1Hash Error
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 pbOptionsNeg /\!/ contained
syn match pbOptionsDeprec /no/ contained
syn region pbOptionsGroup start=/^options=(/ end=/)/ contains=pb_k_options,pbOptions,pbOptionsNeg,pbOptionsDeprec,pbIllegalOption,shDoubleQuote,shSingleQuote
syn match pbIllegalOption /[^!"'()= ]/ contained contains=pbOptionsDeprec,pbOptions
" noextract
syn match pbNoextract /[[:alnum:]+._${}-]\+/ contained
syn keyword pb_k_noextract noextract contained
syn region pbNoextractGroup start=/^noextract=(/ end=/)/ contains=pb_k_noextract,pbNoextract,shDoubleQuote,shSingleQuote
" comments
syn keyword pb_k_maintainer Maintainer Contributor contained
syn match pbMaintainerGroup /Maintainer.*/ contains=pbMaintainer contained
syn match pbDate /[0-9]\{4}\/[0-9]\{2}\/[0-9]\{2}/ contained
syn cluster pbCommentGroup contains=pbTodo,pb_k_maintainer,pbMaintainerGroup,pbDate
syn keyword pbTodo contained COMBAK FIXME TODO XXX
syn match pbComment "^#.*$" contains=@pbCommentGroup
syn match pbComment "[^0-9]#.*$" contains=@pbCommentGroup
" quotes are handled by sh.vim
hi def link pbComment Comment
hi def link pbTodo Todo
hi def link pbIllegalPkgname Error
hi def link pb_k_pkgname pbKeywords
hi def link pbIllegalPkgver Error
hi def link pb_k_pkgver pbKeywords
hi def link pbIllegalPkgrel Error
hi def link pb_k_pkgrel pbKeywords
hi def link pbIllegalPkgdesc Error
hi def link pb_k_desc pbKeywords
hi def link pbIllegalUrl Error
hi def link pb_k_url pbKeywords
hi def link pb_k_license pbKeywords
hi def link pbIllegalLicense Error
hi def link pb_k_backup pbKeywords
hi def link pb_k_arch pbKeywords
hi def link pbIllegalArch Error
hi def link pb_k_makedepends pbKeywords
hi def link pb_k_depends pbKeywords
hi def link pb_k_replaces pbKeywords
hi def link pb_k_conflicts pbKeywords
hi def link pb_k_provides pbKeywords
hi def link pbIllegalInstall Error
hi def link pb_k_install pbKeywords
hi def link pb_k_source pbKeywords
hi def link pbIllegalSource Error
hi def link pb_k_md5sums pbKeywords
hi def link pbIllegalMd5sums Error
hi def link pb_k_sha1sums pbKeywords
hi def link pbIllegalSha1sums Error
hi def link pb_k_options pbKeywords
hi def link pbOptionsDeprec Todo
hi def link pbIllegalOption Error
hi def link pb_k_noextract pbKeywords
hi def link pbNoextract Normal
hi def link pb_k_maintainer pbKeywords
hi def link pbKeywords Keyword
hi def link pbDate Special
"syntax include @SHELL syntax/sh.vim
"syntax region BUILD start=/^build()/ end=/^}/ contains=@SHELL
"let b:current_syntax = "PKGBUILD"
" vim: ft=vim

View File

@@ -1,16 +1,27 @@
Here is a brief description of the files included in this directory:
PKGBUILD.vim - a vim/gvim syntax file for PKGBUILDs. Colors known variable
names, highlights common errors such as invalid characters in pkgname or
pkgver, etc.
bash_completion - a bash completion script for pacman, install in
/etc/bash_completion.d/ for use (but rename to something descriptive!).
zsh_completion - a zsh completion script, install (with a rename) to
/usr/share/zsh/site-functions/.
pacdiff - a simple pacnew/pacorig/pacsave updater for /etc/.
pacsearch - a colorized search combining both -Ss and -Qs output. Installed
packages are easily identified with a *** and local-only packages are also
listed.
pacdiff - a simple pacnew/pacorig/pacsave updater for /etc/.
re-pacman - 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).
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.

View File

@@ -7,18 +7,6 @@
# Distributed under the terms of the GNU General Public License, v2 or later.
#
## ChangeLog ##
#
# * 3.0 (2007-02-18)
# - Updated to pacman 3.0.0 options
# * 1.1 (2004-01-17)
# - Code cleanup
# - Updated to pacman 2.7.2-2
# * 2004-02-16 (orelien)
# - Improved available_{pkgs,groups) functions
# - Added support for querying groups
#
## initial functions
rem_selected ()
@@ -60,7 +48,7 @@ _available_pkgs ()
local available_pkgs
local enabled_repos
enabled_repos=$( grep '\[' /etc/pacman.conf | grep -v -e 'options' -e '^#' | tr -d '[]' )
available_pkgs=$( for r in $enabled_repos; do echo /var/lib/pacman/$r/*; done )
available_pkgs=$( for r in $enabled_repos; do echo /var/lib/pacman/sync/$r/*; done )
COMPREPLY=( $( compgen -W "$( for i in $available_pkgs; do j=${i##*/}; echo ${j%-*-*}; done )" -- $cur ) )
}
@@ -79,7 +67,7 @@ _available_groups ()
local available_groups
local enabled_repos
enabled_repos=$( grep '\[' /etc/pacman.conf | grep -v -e 'options' -e '^#' | tr -d '[]' )
available_groups=$( for r in $enabled_repos; do sed '/%GROUPS%/,/^$/{//d; p}' /var/lib/pacman/$r/*/desc | sort -u; done )
available_groups=$( for r in $enabled_repos; do sed '/%GROUPS%/,/^$/{//d; p}' /var/lib/pacman/sync/$r/*/desc | sort -u; done )
COMPREPLY=( $( compgen -W "$( for i in $available_groups; do echo ${i%-*-*}; done )" -- $cur ) )
}
@@ -105,8 +93,8 @@ _makepkg ()
if [[ "$cur" == -* ]]; then
COMPREPLY=( $( compgen -W '\
-A --ignorearch \
-b --builddeps \
-B --noccache \
-c --clean \
-C --cleancache \
-d --nodeps \
@@ -115,14 +103,14 @@ _makepkg ()
-g --geninteg \
-h --help \
-i --install \
-j \
-L --log \
-m --nocolor \
-o --nobuild \
-p \
-r --rmdeps \
-s --syncdeps \
-S --usesudo \
--asroot \
--source \
--noconfirm \
--noprogressbar' -- $cur ) )
fi
@@ -158,7 +146,7 @@ _pacman ()
toparse="${a:2}"
case "${arg}" in
-@(A|U|F|R|S|Q|h|V))
-@(A|U|R|S|Q|h|V))
op="${arg/-}"
mod="${mod}${a:2}"
;;
@@ -168,7 +156,6 @@ _pacman ()
add) op="A" ;;
remove) op="R" ;;
upgrade) op="U" ;;
freshen) op="F" ;;
query) op="Q" ;;
sync) op="S" ;;
help) op="h" ;;
@@ -184,15 +171,19 @@ _pacman ()
print-uris) mod="${mod}p" ;;
search) mod="${mod}s" ;;
sysupgrade) mod="${mod}u" ;;
upgrades) mod="${mod}u" ;;
downloadonly) mod="${mod}w" ;;
refresh) mod="${mod}y" ;;
orphans) mod="${mod}e" ;;
changelog) mod="${mod}c" ;;
deps) mod="${mod}d" ;;
explicit) mod="${mod}e" ;;
unrequired) mod="${mod}t" ;;
foreign) mod="${mod}m" ;;
owns) mod="${mod}o" ;;
file) mod="${mod}p" ;;
search) mod="${mod}s" ;;
upgrades) mod="${mod}u" ;;
cascade) mod="${mod}c" ;;
nodeps) mod="${mod}d" ;;
dbonly) mod="${mod}k" ;;
nosave) mod="${mod}n" ;;
recursive) mod="${mod}s" ;;
@@ -212,7 +203,6 @@ _pacman ()
if [ $COMP_CWORD -eq 1 ] && [[ "$cur" == -* ]]; then
COMPREPLY=( $( compgen -W '\
-A --add \
-F --freshen \
-h --help \
-Q --query \
-R --remove \
@@ -226,14 +216,15 @@ _pacman ()
if [[ "$cur" == -* ]]; then
case "${op}" in
A|U|F)
A|U)
COMPREPLY=( $( compgen -W '\
--asdeps \
-d --nodeps \
-f --force \
-h --help \
--config \
--logfile \
--noconfirm \
--ask \
--noprogressbar \
--noscriptlet \
-v --verbose \
@@ -247,14 +238,13 @@ _pacman ()
COMPREPLY=( $( compgen -W '\
-c --cascade \
-d --nodeps \
-f --force \
-h --help \
-k --dbonly \
-n --nosave \
-s --recursive \
--config \
--logfile \
--noconfirm \
--ask \
--noprogressbar \
--noscriptlet \
-v --verbose \
@@ -266,6 +256,7 @@ _pacman ()
;;
S)
COMPREPLY=( $( compgen -W '\
--asdeps \
-c --clean \
-d --nodeps \
-e --dependsonly \
@@ -279,10 +270,12 @@ _pacman ()
-u --sysupgrade \
-w --downloadonly \
-y --refresh \
--needed \
--ignore \
--ignoregroup \
--config \
--logfile \
--noconfirm \
--ask \
--noprogressbar \
--noscriptlet \
-v --verbose \
@@ -295,7 +288,8 @@ _pacman ()
Q)
COMPREPLY=( $( compgen -W '\
-c --changelog \
-e --orphans \
-d --deps \
-e --explicit \
-g --groups \
-h --help \
-i --info \
@@ -304,9 +298,11 @@ _pacman ()
-o --owns \
-p --file \
-s --search \
-t --unrequired \
-u --upgrades \
--config \
--logfile \
--noconfirm \
--ask \
--noprogressbar \
--noscriptlet \
-v --verbose \
@@ -338,6 +334,9 @@ _pacman ()
elif _instring $mod p; then
COMPREPLY=( $( compgen -d -- "$cur" ) \
$( compgen -f -X '!*.pkg.tar.gz' -- "$cur" ) )
elif _instring $mod u; then
COMPREPLY=''
return 0
else
_installed_pkgs
fi

4
contrib/pacdiff Normal file → Executable file
View File

@@ -14,9 +14,7 @@
# 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
# USA.
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Original http://phraktured.net/config/bin/pacdiff

View File

@@ -14,8 +14,7 @@
# 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, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#TODO: colors flag on commandline
@@ -72,7 +71,7 @@ done
# Print colorized package list and descriptions to screen
echo -e "$(sed -r \
-e "s@current/.*@$CLR1&$BASE@" \
-e "s@core/.*@$CLR1&$BASE@" \
-e "s@extra/.*@$CLR2&$BASE@" \
-e "s@community/.*@$CLR3&$BASE@" \
-e "s@testing/.*@$CLR4&$BASE@" \

View File

@@ -17,9 +17,7 @@
# 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
# USA.
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#TODO
@@ -48,6 +46,8 @@ make_pkginfo () {
done
}
LANG="POSIX"
if [ $# -ne 1 ]; then
echo "usage: re-pacman <installed package name>"
exit 1
@@ -60,20 +60,18 @@ if [ "x${ver}" = "x" ]; then
fi
echo ":: Cleaning up old files"
rm -f .PKGINFO .FILELIST "${1}-${ver}.pkg.tar.gz"
rm -f .PKGINFO "${1}-${ver}.pkg.tar.gz"
echo ":: Building PKGINFO"
make_pkginfo ${1} > .PKGINFO
echo ":: Building FILELIST"
pacman -Ql ${1} | cut -d' ' -f2- > .FILELIST
flist=".PKGINFO .FILELIST"
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 .FILELIST
rm -f .PKGINFO
echo ":: Package '${1}-${ver}.pkg.tar.gz' is now ready for installation"
# vim: set ts=2 sw=2 noet:

View File

@@ -24,16 +24,13 @@ pacman=~/devel/pacman-lib CD=. flags=S {
handle.c
log.c
md5.c
md5driver.c
package.c
provide.c
remove.c
server.c
sha1.c
sync.c
trans.c
util.c
versioncmp.c
add.h
alpm.h
alpm_list.h
@@ -51,11 +48,9 @@ pacman=~/devel/pacman-lib CD=. flags=S {
provide.h
remove.h
server.h
sha1.h
sync.h
trans.h
util.h
versioncmp.h
Makefile.am
Makefile.in
}

70
contrib/wget-xdelta.sh Executable file
View File

@@ -0,0 +1,70 @@
#!/bin/bash
if [ -r "/etc/makepkg.conf" ]; then
source /etc/makepkg.conf
else
echo "wget-xdelta: Unable to find makepkg.conf"
exit 1
fi
if [ -r ~/.makepkg.conf ]; then
source ~/.makepkg.conf
fi
out_file=$(basename $1)
file_url=$2
if ! [[ "$out_file" =~ "pkg.tar.gz" ]]; then
# If it's not a package file download as normal and exit.
#wget --passive-ftp -c -O "$out_file" "$file_url"
exit $?
fi
# Get the package name and version
[[ "$out_file" =~ "$CARCH" ]] && arch="-$CARCH" || arch=""
pkg_data=$(echo $out_file | \
sed "s|^\(.*\)-\([[:alnum:]_\.]*-[[:alnum:]_\.]*\)${arch}${PKGEXT}.part|\1 \2|")
pkgname=$(echo $pkg_data | cut -d ' ' -f 1)
new_version=$(echo $pkg_data | cut -d ' ' -f 2)
base_url=${file_url%/*}
# Look for the last version
for file in $(ls -r /var/cache/pacman/pkg/${pkgname}-*-*{,-$CARCH}$PKGEXT 2>/dev/null); do
[[ "$file" =~ "$CARCH" ]] && arch="-$CARCH" || arch=""
check_version=$(echo $file | \
sed "s|^.*/${pkgname}-\([[:alnum:]_\.]*-[[:alnum:]_\.]*\)${arch}$PKGEXT$|\1|" | \
grep -v "^/var/cache/pacman/pkg")
[ "$check_version" = "" ] && continue
vercmp=$(vercmp "$check_version" "$old_version")
if [ "$check_version" != "$new_version" -a $vercmp -gt 0 ]; then
old_version=$check_version
old_file=$file
fi
done
if [ "$old_version" != "" -a "$old_version" != "$new_version" ]; then
# Great, we have a cached file, now calculate a patch name from it
delta_name="$pkgname-${old_version}_to_${new_version}-${CARCH}.delta"
echo "wget-xdelta: Attempting to download delta $delta_name..." >&2
if wget --passive-ftp -c "$base_url/$delta_name"; then
echo "wget-xdelta: Applying delta..."
if xdelta patch "$delta_name" "$old_file" "$out_file"; then
echo "wget-xdelta: Delta applied successfully!"
rm "$delta_name"
exit 0
else
echo "wget-xdelta: Failed to apply delta!"
rm $delta_name
fi
fi
fi
echo "wget-xdelta: Downloading new package..."
wget --passive-ftp -c -O "$out_file" "$file_url"
exit $?
# vim:set ts=4 sw=4 noet:

View File

@@ -1,13 +1,12 @@
# file: /usr/share/zsh/site-functions/_pacman
# use the following in your zsh config:
# compdef pacman pacman.static=pacman
#compdef pacman pacman.static=pacman
# copy this file to /usr/share/zsh/site-functions/_pacman
typeset -A opt_args
# options for passing to _arguments: main pacman commands
_pacman_opts_commands=(
'-A[Add a package to the system]'
'-F[Upgrade an installed package]'
'-Q[Query the package database]'
'-R[Remove a package from the system]'
'-S[Synchronize packages]'
@@ -22,11 +21,15 @@ _pacman_opts_common=(
'-h[Display syntax for the given operation]'
'-r[Set alternate installation root]:installation root:_files -/'
'-v[Be more verbose]'
'--cachedir[Alternate package cache location]:cache_location:_files -/'
'--config[An alternate configuration file]:config file:_files'
'--logfile[An alternate log file]:config file:_files'
'--noconfirm[Do not ask for confirmation]'
'--noprogressbar[Do not show a progress bar when downloading files]'
'--noscriptlet[Do not execute the install scriptlet if one exists]'
)
# options for passing to _arguments: options for --add, --freshen and --update commands
# options for passing to _arguments: options for --add and --update commands
_pacman_opts_pkgfile=(
'-d[Skip dependency checks]'
'-f[Overwrite conflicting files]'
@@ -35,7 +38,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'
@@ -44,8 +46,15 @@ _pacman_opts_query_actions=(
# options for passing to _arguments: options for --query and subcommands
_pacman_opts_query_modifiers=(
'-c[List package changelog]'
'-d[List packages installed as dependencies]'
'-e[List packages explicitly installed]'
'-i[View package information]'
'-ii[View package information including backup files]'
'-l[List package contents]'
'-m[List installed packages not found in sync db(s)]'
'-t[List packages not required by any package]'
'-u[List packages that can be upgraded]'
)
# options for passing to _arguments: options for --remove command
@@ -61,6 +70,7 @@ _pacman_opts_remove=(
# options for passing to _arguments: options for --sync command
_pacman_opts_sync_actions=(
'*-c[Remove old packages from cache]:*:clean:->sync_clean'
'*-cc[Remove all packages from cache]:*:clean:->sync_clean'
'-g[View all members of a package group]:*:package groups:->sync_group'
'-s[Search package names and descriptions]:*:search text:->sync_search'
)
@@ -68,6 +78,7 @@ _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]'
@@ -75,7 +86,11 @@ _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'
'*--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]'
)
# handles --action subcommand
@@ -85,13 +100,6 @@ _pacman_action_add() {
"$_pacman_opts_pkgfile[@]"
}
# handles --freshen subcommand
_pacman_action_freshen() {
_arguments -s : \
"$_pacman_opts_common[@]" \
"$_pacman_opts_pkgfile[@]"
}
# handles --help subcommand
_pacman_action_help() {
_arguments -s : \
@@ -127,11 +135,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[@]" \
@@ -216,43 +219,57 @@ _pacman_action_version() {
_pacman_completions_all_groups() {
local -a cmd groups
_pacman_get_command
groups=( $(_call_program groups $cmd[@] -Sg | grep -e \^$PREFIX) )
groups=( $(_call_program groups $cmd[@] -Sg) )
compadd "$@" -a groups
}
# provides completions for packages available from repositories
# these can be specified as either 'package' or 'repository/package'
_pacman_completions_all_packages() {
local -a cmd packages repositories
local -a cmd packages repositories packages_long
repositories=( $(_call_program repositories cat /etc/pacman.conf | grep "^\[" | sed "s,\(\[\|\]\),,g" | grep -v "^options" | sort -u) )
# these can be specified as either 'package' or 'repository/package'
if [[ "$PREFIX" == "" ]] ; then
packages=( $(_call_program packages ls /var/lib/pacman/${^repositories} | grep -v "^/" | sed "s,\-[^-]*\-[^-]*$,," | sort -u) )
repositories=(${(o)${${${(M)${(f)"$(</etc/pacman.conf)"}:#\[*}/\[/}/\]/}:#options})
typeset -U repositories
packages_long=(/var/lib/pacman/sync/${^repositories}/*(/))
packages=(${(o)${${packages_long/\/var\/lib\/pacman\/sync\//}#*/}%-*-*} )
typeset -U packages
_wanted packages expl "packages" compadd - "${(@)packages}"
if [[ $PREFIX != */* ]] ; then
repositories=(${(o)${${${(M)${(f)"$(</etc/pacman.conf)"}:#\[*}/\[/}/\]/}:#options})
typeset -U repositories
_wanted repo_packages expl "repository/package" compadd -S "/" $repositories
else
packages=( $(_call_program packages ls /var/lib/pacman/${^repositories} | grep -v "^/" | grep -e \^$PREFIX | sed "s,\-[^-]*\-[^-]*$,," | sort -u) )
compset -P '*/'
packages_long=(/var/lib/pacman/sync/$IPREFIX*(/))
packages=(${(o)${${packages_long/\/var\/lib\/pacman\/sync\//}#*/}%-*-*} )
typeset -U packages
_wanted repo_packages expl "repository/package" compadd ${(@)packages}
fi
compadd "$@" -a packages
}
# provides completions for package groups
_pacman_completions_installed_groups() {
local -a cmd groups
_pacman_get_command
groups=( $(_call_program installed_groups $cmd[@] -Qg | cut -d' ' -f1 | grep -e \^$PREFIX | sort -u) )
groups=(${(o)${(f)"$(pacman -Qg)"}% *})
typeset -U groups
compadd "$@" -a groups
}
# provides completions for installed packages
_pacman_completions_installed_packages() {
local -a cmd packages
packages=( $(_call_program installed_packages ls /var/lib/pacman/local | grep "^$PREFIX" | sed "s,\-[^-]*\-[^-]*$,,") )
local -a cmd packages packages_long
packages_long=(/var/lib/pacman/local/*(/))
packages=( ${${packages_long/\/var\/lib\/pacman\/local\//}%-*-*} )
compadd "$@" -a packages
}
# provides completions for repository names
_pacman_completions_repositories() {
local -a cmd repositories
repositories=( $(_call_program repositories cat /etc/pacman.conf | grep "^\[" | sed "s,\(\[\|\]\),,g" | grep -v "^options" | grep "^$PREFIX" | sort -u) )
repositories=(${(o)${${${(M)${(f)"$(</etc/pacman.conf)"}:#\[*}/\[/}/\]/}:#options})
# Uniq the array
typeset -U repositories
compadd "$@" -a repositories
}
@@ -274,20 +291,19 @@ _pacman_get_command() {
_pacman() {
case $words[2] in
-A*) _pacman_action_add ;;
-F*) _pacman_action_freshen ;;
-Qg) # ipkg groups
-Q*g*) # ipkg groups
_arguments -s : \
"$_pacman_opts_common[@]" \
"$_pacman_opts_query_modifiers[@]" \
'*:groups:_pacman_completions_installed_groups'
;;
-Qo) # file *.pkg.tar.gz
-Q*o*) # file
_arguments -s : \
"$_pacman_opts_common[@]" \
"$_pacman_opts_query_modifiers[@]" \
'*:package file:_files'
;;
-Qp) # file *.pkg.tar.gz
-Q*p*) # file *.pkg.tar.gz
_arguments -s : \
"$_pacman_opts_common[@]" \
"$_pacman_opts_query_modifiers[@]" \
@@ -295,13 +311,16 @@ _pacman() {
;;
-Q*) _pacman_action_query ;;
-R*) _pacman_action_remove ;;
-Sl) # repos
-S*c*) # no completion
return 0
;;
-S*l*) # repos
_arguments -s : \
"$_pacman_opts_common[@]" \
"$_pacman_opts_sync_modifiers[@]" \
'*:package repo:_pacman_completions_repositories' \
;;
-Sg) # pkg groups
-S*g*) # pkg groups
_arguments -s : \
"$_pacman_opts_common[@]" \
"$_pacman_opts_sync_modifiers[@]" \

View File

@@ -1,4 +0,0 @@
Makefile
Makefile.in
*.html
man3

10
doc/.gitignore vendored Normal file
View File

@@ -0,0 +1,10 @@
PKGBUILD.5
libalpm.3
makepkg.8
makepkg.conf.5
pacman.8
pacman.conf.5
repo-add.8
repo-remove.8
*.xml
man3

View File

@@ -1,14 +1,14 @@
# Doxyfile 1.4.5
# Doxyfile 1.5.2
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = libalpm
PROJECT_NUMBER =
OUTPUT_DIRECTORY =
OUTPUT_DIRECTORY = ./
CREATE_SUBDIRS = NO
OUTPUT_LANGUAGE = English
USE_WINDOWS_ENCODING = NO
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF = "The $name class" \
@@ -22,9 +22,9 @@ ABBREVIATE_BRIEF = "The $name class" \
a \
an \
the
ALWAYS_DETAILED_SEC = NO
ALWAYS_DETAILED_SEC = YES
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = YES
FULL_PATH_NAMES = NO
STRIP_FROM_PATH =
STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
@@ -33,11 +33,12 @@ MULTILINE_CPP_IS_BRIEF = NO
DETAILS_AT_TOP = NO
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 8
TAB_SIZE = 4
ALIASES =
OPTIMIZE_OUTPUT_FOR_C = YES
OPTIMIZE_OUTPUT_JAVA = NO
BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
DISTRIBUTE_GROUP_DOC = NO
SUBGROUPING = YES
#---------------------------------------------------------------------------
@@ -48,10 +49,10 @@ EXTRACT_PRIVATE = NO
EXTRACT_STATIC = NO
EXTRACT_LOCAL_CLASSES = YES
EXTRACT_LOCAL_METHODS = NO
HIDE_UNDOC_MEMBERS = YES
HIDE_UNDOC_CLASSES = YES
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO
HIDE_FRIEND_COMPOUNDS = NO
HIDE_IN_BODY_DOCS = NO
HIDE_IN_BODY_DOCS = YES
INTERNAL_DOCS = NO
CASE_SENSE_NAMES = YES
HIDE_SCOPE_NAMES = NO
@@ -67,7 +68,7 @@ GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
SHOW_DIRECTORIES = YES
SHOW_DIRECTORIES = NO
FILE_VERSION_FILTER =
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
@@ -82,12 +83,14 @@ WARN_LOGFILE =
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
INPUT =
FILE_PATTERNS = *.c
INPUT = ../lib/libalpm/
INPUT_ENCODING = UTF-8
FILE_PATTERNS =
RECURSIVE = NO
EXCLUDE =
EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS =
EXCLUDE_SYMBOLS =
EXAMPLE_PATH =
EXAMPLE_PATTERNS = *
EXAMPLE_RECURSIVE = NO
@@ -99,50 +102,136 @@ FILTER_SOURCE_FILES = NO
# configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = NO
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = NO
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
REFERENCES_LINK_SOURCE = YES
USE_HTAGS = NO
VERBATIM_HEADERS = YES
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = NO
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML = NO
HTML_OUTPUT = html
HTML_FILE_EXTENSION = .html
HTML_HEADER =
HTML_FOOTER =
HTML_STYLESHEET =
HTML_ALIGN_MEMBERS = YES
GENERATE_HTMLHELP = NO
CHM_FILE =
HHC_LOCATION =
GENERATE_CHI = NO
BINARY_TOC = NO
TOC_EXPAND = NO
DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = NO
TREEVIEW_WIDTH = 250
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX = NO
LATEX_OUTPUT = latex
LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = a4wide
EXTRA_PACKAGES =
LATEX_HEADER =
PDF_HYPERLINKS = NO
USE_PDFLATEX = NO
LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF = NO
RTF_OUTPUT = rtf
COMPACT_RTF = NO
RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN = YES
MAN_OUTPUT = ../../doc
MAN_OUTPUT = .
MAN_EXTENSION = .3
MAN_LINKS = YES
MAN_LINKS = NO
#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = NO
XML_OUTPUT = xml
XML_SCHEMA =
XML_DTD =
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# configuration options related to the Perl module output
#---------------------------------------------------------------------------
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
PERLMOD_PRETTY = YES
PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = NO
EXPAND_ONLY_PREDEF = NO
MACRO_EXPANSION = YES
EXPAND_ONLY_PREDEF = YES
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED =
INCLUDE_PATH = ../..
INCLUDE_FILE_PATTERNS = *.h
PREDEFINED = HAVE_CONFIG_H= SYMHIDDEN= SYMEXPORT=
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration::additions related to external references
#---------------------------------------------------------------------------
TAGFILES =
GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = NO
MSCGEN_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
UML_LOOK = NO
TEMPLATE_RELATIONS = NO
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
CALL_GRAPH = NO
CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
DOT_PATH =
DOTFILE_DIRS =
DOT_GRAPH_MAX_NODES = 50
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
#---------------------------------------------------------------------------
# Configuration::additions related to the search engine
#---------------------------------------------------------------------------
SEARCHENGINE = NO

View File

@@ -1,17 +1,76 @@
man_MANS = \
# We have to do some funny stuff here with the manpages. In order to ensure
# a dist tarball doesn't get put out there without manpages, we keep those
# files listed in EXTRA_DIST no matter what. However, we only add them to
# man_MANS if --enable-asciidoc and/or --enable-doxygen are used.
ASCIIDOC_MANS = \
pacman.8 \
makepkg.8 \
repo-add.8 \
PKGBUILD.5 \
makepkg.conf.5 \
pacman.conf.5 \
libalpm.3
if HAS_DOXYGEN
man_MANS += $(wildcard man3/*.3)
DOXYGEN_MANS = $(wildcard man3/*.3)
EXTRA_DIST = \
pacman.8.txt \
makepkg.8.txt \
repo-add.8.txt \
PKGBUILD.5.txt \
PKGBUILD-example.txt \
makepkg.conf.5.txt \
pacman.conf.5.txt \
libalpm.3.txt \
footer.txt \
Doxyfile \
$(ASCIIDOC_MANS) \
$(DOXYGEN_MANS)
# Files that should be removed, but which Automake does not know.
MOSTLYCLEANFILES = *.xml
MAINTAINERCLEANFILES = $(ASCIIDOC_MANS)
man_MANS =
dist_man_MANS = $(ASCIIDOC_MANS) repo-remove.8
if USE_DOXYGEN
man_MANS += $(DOXYGEN_MANS)
all: doxygen.in
doxygen.in:
$(DOXYGEN) $(srcdir)/Doxyfile
endif
EXTRA_DIST = $(man_MANS)
if USE_ASCIIDOC
ASCIIDOC_OPTS = \
-f asciidoc.conf \
-a pacman_version="$(PACKAGE_VERSION)" \
-a pacman_date="`date +%Y-%m-%d`" \
-a sysconfdir=$(sysconfdir)
A2X_OPTS = \
-d manpage \
-f manpage \
--xsltproc-opts='-param man.endnotes.list.enabled 0' \
--xsltproc-opts='-param man.endnotes.are.numbered 0'
clean-local:
$(RM) man3/*.3
$(ASCIIDOC_MANS):
a2x $(A2X_OPTS) --asciidoc-opts="$(ASCIIDOC_OPTS)" $@.txt
# These rules are due to the includes and files of the asciidoc text
$(ASCIIDOC_MANS): asciidoc.conf footer.txt
pacman.8: pacman.8.txt
makepkg.8: makepkg.8.txt
repo-add.8: repo-add.8.txt
PKGBUILD.5: PKGBUILD.5.txt PKGBUILD-example.txt
makepkg.conf.5: makepkg.conf.5.txt
pacman.conf.5: pacman.conf.5.txt
libalpm.3: libalpm.3.txt
# this one is just a symlink
repo-remove.8: repo-add.8
ln -s repo-add.8 repo-remove.8
endif
# vim:set ts=2 sw=2 noet:

20
doc/PKGBUILD-example.txt Normal file
View File

@@ -0,0 +1,20 @@
# Maintainer: judd <jvinet@zeroflux.org>
pkgname=patch
pkgver=2.5.4
pkgrel=3
pkgdesc="A utility to apply patch files to original sources"
arch=(i686 x86_64)
url="http://www.gnu.org/software/patch/patch.html"
license=('GPL')
groups=('base-devel')
depends=('glibc' 'ed')
source=(ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz)
md5sums=('ee5ae84d115f051d87fcaaef3b4ae782')
build() {
cd $startdir/src/$pkgname-$pkgver
./configure --prefix=/usr
make || return 1
make prefix=$startdir/pkg/usr install
}

View File

@@ -1,288 +0,0 @@
." the string declarations are a start to try and make distro independent
.ds DS Arch Linux
.ds PB PKGBUILD
.ds VR 3.0.0
.TH \*(PB 5 "Feb 07, 2007" "\*(PB version \*(VR" "\*(DS Files"
.SH NAME
\*(PB \- \*(DS package build description file
.SH DESCRIPTION
This manual page is meant to describe general rules about \fB\*(PB\fPs. Once
a \fB\*(PB\fP is written, the actual package is built using \fBmakepkg\fP and
installed with \fBpacman\fP.
\fBNOTE:\fP If you have a local copy of the Arch Build System (ABS) tree
on your computer, you can copy the \*(PB.proto file to your new package
build directory and edit it from there. To acquire/sync the ABS tree, use
the \fBabs\fP script included with \fBpacman\fP.
.SH OPTIONS AND DIRECTIVES
.TP
.B pkgname
The name of the package. This has be a unix-friendly name as it will be
used in the package filename.
.TP
.B pkgver
The version of the software as released from the author (e.g. 2.7.1).
.TP
.B pkgrel
This is the release number specific to the \*(DSs release. This allows package
maintainers to make updates to the package's configure flags, for example.
.TP
.B pkgdesc
This should be a brief description of the package and its functionality. Try to
keep the description to one line of text.
.TP
.B url
This field contains a URL that is associated with the software being packaged.
This is typically the project's website.
.TP
.B license (array)
This field specifies the license(s) that apply to the package. Commonly-used
licenses are found in \fI/usr/share/licenses/common\fP. If you see the
package's license there, simply reference it in the license field (e.g.
\fBlicense=("GPL")\fP). If the package provides a license not found in
\fI/usr/share/licenses/common\fP, then you should include the license in the
package itself and set \fBlicense=("custom")\fP or
\fBlicense=("custom:LicenseName")\fP. The license should be placed in
\fI$startdir/pkg/usr/share/licenses/$pkgname\fP when building the package. If
multiple licenses are applicable for a package, list all of them:
\fBlicenses=('GPL' 'FDL')\fP.
.TP
.B install
Specifies a special install script that is to be included in the package. This
file should reside in the same directory as the \fB\*(PB\fP, and will be copied
into the package by \fBmakepkg\fP. It does not need to be included in the
\fIsource\fP array (e.g. \fBinstall=pkgname.install\fP).
.TP
.B source \fI(array)\fP
An array of source files required to build the package. Source files must
either reside in the same directory as the \fB\*(PB file\fP, or be a
fully-qualified URL that makepkg will use to download the file. In order to
make the PKGBUILD as useful as possible, use the \fB$pkgname\fP and
\fB$pkgver\fP variables if possible when specifying the download location.
.TP
.B noextract \fI(array)\fP
An array of filenames corresponding to those from the \fBsource\fP array. Files
listed here will not be extracted with the rest of the source files. This is
useful for packages which use compressed data which is downloaded but not
necessary to uncompress.
.TP
.B md5sums \fI(array)\fP
This array contains an MD5 hash for every source file specified in the
\fBsource\fP array (in the same order). \fBmakepkg\fP will use this to verify
source file integrity during subsequent builds. To easily generate md5sums, run
"makepkg -g >> \*(PB". If desired, move the \fBmd5sums\fP line to an
appropriate location. NOTE: \fBmakepkg\fP 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.
.TP
.B sha1sums, etc.
Alternative integrity checks that \fBmakepkg\fP supports, as noted in
\fBmd5sums\fP above.
.TP
.B groups \fI(array)\fP
An array of symbolic names that represent groups of packages, allowing
you to install multiple packages by requesting a single target. For example,
one could install all KDE packages by installing the 'kde' group.
.TP
.B arch \fI(array)\fP
Defines on which architectures the given package is available (e.g.
\fBarch=('i686' 'x86_64')\fP).
.TP
.B backup \fI(array)\fP
A space-delimited array of filenames, \fIwithout\fP preceding slashes, that
should be backed up if the package is removed or upgraded. This is commonly
used for packages placing configuration files in /etc. See \fBHANDLING CONFIG
FILES\fP in the \fBpacman\fP manpage for more information.
.TP
.B depends \fI(array)\fP
An array of packages that this package depends on to run. Packages in this list
should be surrounded with single quotes and contain at least the package name.
Entries can also include a version requirement of the form
\fB'name<>version'\fP, where <> is one of three comparisons: \fI>=\fP (greater
than or equal to), \fI<=\fP (less than or equal to), or \fI=\fP (equal to).
.TP
.B makedepends \fI(array)\fP
An array of packages that this package depends on to build, but are not needed
at runtime. Packages in this list follow the same format as \fBdepends\fP.
.TP
.B conflicts \fI(array)\fP
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 same format as
\fIdepends\fP, except you cannot specify versions.
.TP
.B provides \fI(array)\fP
An array of "virtual provisions" that this package provides. This allows 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'.
.TP
.B replaces \fI(array)\fP
An array of packages that this package should replace, and can be used to
handle renamed/combined packages. For example, if the 'j2re' package is renamed
to 'jre', this directive allows future upgrades to continue as expected even
though the package has moved.
.TP
.B options \fI(array)\fP
This array allows you to override some of \fBmakepkg\fP's default behavior when
building packages. To set an option, just include the option name in the
\fBoptions\fP array. To reverse the default behavior, place an "!" at the front
of the option. Only specify the options you specifically want to override, the
rest will be taken from \fBmakepkg.conf\fP. NOTE: 'force' is a special option
only used in \fB\*(PB\fPs, do not use it unless you know what you are doing.
.RS
.TP
.B strip
Strip symbols from binaries and libraries. If you frequently use a debugger on
programs or libraries, it may be helpful to disable this option.
.TP
.B docs
Save doc and info directories. If you wish to delete doc and info directories,
specify "!docs" in the array.
.TP
.B libtool
Leave libtool (.la) files in packages. Specify "!libtool" to remove them.
.TP
.B emptydirs
Leave empty directories in packages.
.TP
.B ccache
Allow the use of \fBccache\fP during build. More useful in its negative form
"!ccache" with select packages that have problems building with \fBccache\fP.
.TP
.B distcc
Allow the use of \fBdistcc\fP during build. More useful in its negative form
"!distcc" with select packages that have problems building with \fBdistcc\fP.
.TP
.B makeflags
Allow the use of user-specific makeflags during build as specified in
\fBmakepkg.conf\fP. More useful in its negative form "!makeflags" with select
packages that have problems building with custom makeflags such as "-j2" (or
higher).
.TP
.B force
Force the package to be upgraded by a \fBpacman\fP 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).
.RE
.SH INSTALL/UPGRADE/REMOVE SCRIPTING
\fBPacman\fP has the ability to store and execute a package-specific script
when it installs, removes, or upgrades a package. This allows a package to
configure itself after installation and do the opposite right before it is
removed.
The exact time the script is run varies with each operation:
.TP
.B pre_install
script is run right before files are extracted.
.TP
.B post_install
script is run right after files are extracted.
.TP
.B pre_upgrade
script is run right before files are extracted.
.TP
.B post_upgrade
script is run after files are extracted.
.TP
.B pre_remove
script is run right before files are removed.
.TP
.B post_remove
script is run right after files are removed.
.P
To use this feature, create a file such as 'pkgname.install' and put it in
the same directory as the \fB\*(PB\fP script. Then use the \fBinstall\fP
directive:
.RS
.nf
install=pkgname.install
.fi
.RE
The install script does not need to be specified in the \fBsource\fP array.
A template install file is available in the ABS tree (/var/abs/install.proto).
.SH EXAMPLE
The following is an example \fB\*(PB\fP for the 'modutils' package. For more
examples, look through the ABS tree.
.nf
# Maintainer: John Doe <johndoe@archlinux.org>
# Contributor: Bill Smith <billsmith@archlinux.org>
pkgname=modutils
pkgver=2.4.25
pkgrel=1
pkgdesc="Utilities for inserting modules in the linux kernel"
url="http://www.kernel.org"
makedepends=('bash' 'mawk')
depends=('glibc' 'zlib')
backup=(etc/modules.conf)
source=(ftp://ftp.kernel.org/pub/linux/utils/kernel/$pkgname/v2.4/$pkgname-$pkgver.tar.bz2
modules.conf)
arch=('i686')
license=('GPL' 'custom') # dual licensed
md5sums=('2c0cca3ef6330a187c6ef4fe41ecaa4d'
'35175bee593a7cc7d6205584a94d8625')
options=(!libtool)
build() {
cd $startdir/src/$pkgname-$pkgver
./configure --prefix=/usr --enable-insmod-static
make || return 1
make prefix=$startdir/pkg/usr install
mv $startdir/pkg/usr/sbin $startdir/pkg
mkdir -p $startdir/pkg/etc
cp ../modules.conf $startdir/pkg/etc
}
.fi
.SH SEE ALSO
.BR makepkg (8),
.BR pacman (8),
.BR makepkg.conf (5)
See the Arch Linux website at <http://www.archlinux.org> for more current
information on the distribution and the \fBpacman\fP family of tools, and
<http://wiki.archlinux.org/index.php/Arch_Packaging_Standards> for
recommendations on packaging standards.
.SH AUTHORS
.nf
Judd Vinet <jvinet@zeroflux.org>
Aurelien Foret <aurelien@archlinux.org>
Aaron Griffin <aaron@archlinux.org>
Dan McGee <dan@archlinux.org>
.fi
See the 'AUTHORS' file for additional contributors.

331
doc/PKGBUILD.5.txt Normal file
View File

@@ -0,0 +1,331 @@
/////
vim:set ts=4 sw=4 syntax=asciidoc noet:
/////
PKGBUILD(5)
===========
Name
----
PKGBUILD - Arch Linux package build description file
Synopsis
--------
PKGBUILD
Description
-----------
This manual page is meant to describe general rules about PKGBUILDs. Once a
PKGBUILD is written, the actual package is built using makepkg and installed
with pacman.
NOTE: If you are using Arch Linux and have a local copy of the Arch Build
System (ABS) tree on your computer, or are using another distribution that
provides a similar tree of build files, you can copy the provided
PKGBUILD.proto file to a new package build directory and make customizations to
suit your needs. An up to date prototype file can also be found in the source
distribution of this package.
Options and Directives
----------------------
*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').
*pkgrel*::
This is the release number specific to the Arch Linux release. This
allows package maintainers to make updates to the package's configure
flags, for example. A pkgrel of 1 is typically used for each upstream
software release and is incremented for intermediate PKGBUILD updates.
*pkgdesc*::
This should be a brief description of the package and its functionality.
Try to keep the description to one line of text.
*url*::
This field contains a URL that is associated with the software being
packaged. This is typically the project's website.
*license (array)*::
This field specifies the license(s) that apply to the package.
Commonly-used licenses are found in '/usr/share/licenses/common'. If you
see the package's license there, simply reference it in the license
field (e.g. `$$license=('GPL')$$`). If the package provides a license not
found in '/usr/share/licenses/common', then you should include the license
in the package itself and set `$$license=('custom')$$` or
`$$license=('custom:LicenseName')$$`. The license should be placed in
'$pkgdir/usr/share/licenses/$pkgname' when building the package. If
multiple licenses are applicable for a package, list all of them:
`$$license=('GPL' 'FDL')$$`.
*install*::
Specifies a special install script that is to be included in the package.
This file should reside in the same directory as the PKGBUILD, and will
be copied into the package by makepkg. It does not need to be included
in the source array (e.g. `$$install=pkgname.install$$`).
*source (array)*::
An array of source files required to build the package. Source files
must either reside in the same directory as the PKGBUILD file, or be a
fully-qualified URL that makepkg will use to download the file. In order
to make the PKGBUILD as useful as possible, use the $pkgname and $pkgver
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.
*noextract (array)*::
An array of filenames corresponding to those from the source array. Files
listed here will not be extracted with the rest of the source files. This
is useful for packages which use compressed data which is downloaded but
not necessary to uncompress.
*md5sums (array)*::
This array contains an MD5 hash for every source file specified in the
source array (in the same order). makepkg will use this to verify source
file integrity during subsequent builds. 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.
*sha1sums, etc.*::
Alternative integrity checks that makepkg supports, as noted in md5sums
above.
*groups (array)*::
An array of symbolic names that represent groups of packages, allowing
you to install multiple packages by requesting a single target. For
example, one could install all KDE packages by installing the 'kde' group.
*arch (array)*::
Defines on which architectures the given package is available (e.g.
`$$arch=('i686' 'x86_64')$$`).
*backup (array)*::
A space-delimited array of filenames, without preceding slashes, that
should be backed up if the package is removed or upgraded. This is
commonly used for packages placing configuration files in /etc. See
Handling Config Files in linkman:pacman[8] for more information.
*depends (array)*::
An array of packages that this package depends on to run. Packages in
this list should be surrounded with single quotes and contain at least
the package name. Entries can also include a version requirement of the
form 'name<>version', where <> is one of five comparisons: >= (greater
than or equal to), <= (less than or equal to), = (equal to), > (greater
than), or < (less than).
*makedepends (array)*::
An array of packages that this package depends on to build, but are not
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
same format as depends. Versioned conflicts are also supported.
*provides (array)*::
An array of ``virtual provisions'' that this package provides. This allows
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, in the 'name=version' format.
For example, dcron can provide 'cron=2.0' to satisfy the 'cron>=2.0'
dependency of other packages.
*replaces (array)*::
An array of packages that this package should replace, and can be used
to handle renamed/combined packages. For example, if the 'j2re' package
is renamed to 'jre', this directive allows future upgrades to continue
as expected even though the package has moved. Sysupgrade is currently
the only pacman operation that utilizes this field, a normal sync will
not use its value.
*options (array)*::
This array allows you to override some of makepkg's default behavior
when building packages. To set an option, just include the option name
in the options array. To reverse the default behavior, place an ``!'' at
the front of the option. Only specify the options you specifically want
to override, the rest will be taken from linkman:makepkg.conf[5].
*NOTE:* 'force' is a special option only used in a linkman:PKGBUILD[5],
do not use it unless you know what you are doing.
*strip*;;
Strip symbols from binaries and libraries. If you frequently
use a debugger on programs or libraries, it may be helpful to
disable this option.
*docs*;;
Save doc and info directories. If you wish to delete doc and
info directories, specify `!docs` in the array.
*libtool*;;
Leave libtool (.la) files in packages. Specify `!libtool` to
remove them.
*emptydirs*;;
Leave empty directories in packages.
*ccache*;;
Allow the use of ccache during build. More useful in its negative
form `!ccache` with select packages that have problems building
with ccache.
*distcc*;;
Allow the use of distcc during build. More useful in its negative
form `!distcc` with select packages that have problems building
with distcc.
*makeflags*;;
Allow the use of user-specific makeflags during build as specified
in linkman:makepkg.conf[5]. More useful in its negative form
`!makeflags` with select packages that have problems building with
custom makeflags such as `-j2` (or higher).
*force*;;
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).
Install/Upgrade/Remove Scripting
--------------------------------
Pacman has the ability to store and execute a package-specific script when it
installs, removes, or upgrades a package. This allows a package to configure
itself after installation and perform an opposite action upon removal.
The exact time the script is run varies with each operation:
*pre_install*::
script is run right before files are extracted. One argument is passed:
new package version.
*post_install*::
script is run right after files are extracted. One argument is passed:
new package version.
*pre_upgrade*::
script is run right before files are extracted. Two arguments are passed
in the following order: new package version, old package version.
*post_upgrade*::
script is run after files are extracted. Two arguments are passed
in the following order: new package version, old package version.
*pre_remove*::
script is run right before files are removed. One argument is passed:
old package version.
*post_remove*::
script is run right after files are removed. One argument is passed:
old package version.
To use this feature, create a file such as 'pkgname.install' and put it in the
same directory as the PKGBUILD script. Then use the install directive:
install=pkgname.install
The install script does not need to be specified in the source array. A
template install file is available with the source distribution of this
program, or one may be provided by your distribution. For example, Arch Linux
provides prototype install files in the ABS tree.
Development Directives
----------------------
makepkg supports building development versions of packages without having to
manually update the pkgver in the PKGBUILD. This was formerly done using the
separate utility 'versionpkg'. In order to utilize this functionality, your
PKGBUILD must use correct variable names depending on the SCM being fetched
from.
*CVS*::
The generated pkgver will be the date the package is built.
*_cvsroot*;;
The root of the CVS repository.
*_cvsmod*;;
The CVS module to fetch.
*SVN*::
The generated pkgver will be the latest SVN revision number.
*_svntrunk*;;
The trunk of the SVN repository.
*_svnmod*;;
The SVN module to fetch.
*Git*::
The generated pkgver will be one formatted by the 'git-describe'
command, with '-' characters converted to '_' characters.
*_gitroot*;;
The URL (all protocols supported) to the GIT repository.
*_gitname*;;
GIT tag or branch to use.
*Mercurial*::
The generated pkgver will be the hg tip revision number.
*_hgroot*;;
The URL of the mercurial repository.
*_hgrepo*;;
The repository to follow.
*Darcs*::
The generated pkgver will be the date the package is built.
*_darcstrunk*;;
URL to the repository trunk.
*_darcsmod*;;
Darcs module to use.
*Bazaar*::
The generated pkgver will be the latest Bazaar revision number (revno).
*_bzrtrunk*;;
URL to the bazaar repository.
*_bzrmod*;;
Bazaar module to use.
Example
-------
The following is an example PKGBUILD for the 'patch' package. For more
examples, look through the build files of your distribution's packages. For
those using Arch Linux, consult the ABS tree.
[sh]
source~~~~~
include::PKGBUILD-example.txt[]
source~~~~~
See Also
--------
linkman:makepkg[8], linkman:pacman[8], linkman:makepkg.conf[5]
include::footer.txt[]

70
doc/asciidoc.conf Normal file
View File

@@ -0,0 +1,70 @@
## linkman: macro
# Inspired by/borrowed from the GIT source tree at Documentation/asciidoc.conf
#
# Usage: linkman:command[manpage-section]
#
# Note, {0} is the manpage section, while {target} is the command.
#
# Show man link as: <command>(<section>); if section is defined, else just show
# the command.
[attributes]
plus=&#43;
caret=&#94;
startsb=&#91;
endsb=&#93;
tilde=&#126;
ifdef::backend-docbook[]
[linkman-inlinemacro]
{0%{target}}
{0#<citerefentry>}
{0#<refentrytitle>{target}</refentrytitle><manvolnum>{0}</manvolnum>}
{0#</citerefentry>}
endif::backend-docbook[]
ifdef::backend-docbook[]
ifndef::docbook-xsl-172[]
# "unbreak" docbook-xsl v1.68 for manpages. v1.69 works with or without this.
# v1.72 breaks with this because it replaces dots not in roff requests.
[listingblock]
<example><title>{title}</title>
<literallayout>
ifdef::doctype-manpage[]
&#10;.ft C&#10;
endif::doctype-manpage[]
|
ifdef::doctype-manpage[]
&#10;.ft&#10;
endif::doctype-manpage[]
</literallayout>
{title#}</example>
endif::docbook-xsl-172[]
endif::backend-docbook[]
ifdef::doctype-manpage[]
ifdef::backend-docbook[]
[header]
template::[header-declarations]
<refentry>
<refentryinfo>
<date>{pacman_date}</date>
</refentryinfo>
<refmeta>
<refentrytitle>{mantitle}</refentrytitle>
<manvolnum>{manvolnum}</manvolnum>
<refmiscinfo class="source">Pacman</refmiscinfo>
<refmiscinfo class="version">{pacman_version}</refmiscinfo>
<refmiscinfo class="manual">Pacman Manual</refmiscinfo>
</refmeta>
<refnamediv>
<refname>{manname}</refname>
<refpurpose>{manpurpose}</refpurpose>
</refnamediv>
endif::backend-docbook[]
endif::doctype-manpage[]
ifdef::backend-xhtml11[]
[linkman-inlinemacro]
<a href="{target}.{0}.html">{target}{0?({0})}</a>
endif::backend-xhtml11[]

23
doc/footer.txt Normal file
View File

@@ -0,0 +1,23 @@
/////
vim:set ts=4 sw=4 syntax=asciidoc noet:
/////
See the pacman website at http://www.archlinux.org/pacman/[] for current
information on pacman and its related tools.
Bugs
----
Bugs? You must be kidding, there are no bugs in this software. But if we
happen to be wrong, send us an email with as much detail as possible to
mailto:pacman-dev@archlinux.org[].
Authors
-------
* 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

@@ -1,53 +0,0 @@
." the string declarations are a start to try and make distro independent
.ds DS Arch Linux
.ds PB PKGBUILD
.ds VR 3.0.0
.ds LV 1.0.0
.TH libalpm 3 "Feb 08, 2007" "libalpm version \*(LV" "\*(DS Utilities"
.SH NAME
libalpm \- Arch Linux Package Management (ALPM) library
.SH SYNOPSIS
For ease of access, the libalpm manual has been split up into several sections.
(TODO) Yes, this man page needs a lot of work. Once we get around to doing good
Doxygen documentation, it will improve. We promise.
.nf
alpm_databases Database Functions
alpm_interface Interface Functions
alpm_list List Functions
alpm_log Logging Functions
alpm_misc Miscellaneous Functions
alpm_packages Package Functions
alpm_sync Sync Functions
alpm_trans Transaction Functions
.fi
.SH CONFIGURATION
See
.BR pacman.conf (5)
for more details on configuring \fBlibalpm\fP using the \fBpacman.conf\fP file.
.SH BUGS
Bugs? You must be kidding, there are no bugs in this software. But if we happen
to be wrong, send us an email with as much detail as possible to
<pacman-dev@archlinux.org>.
.SH SEE ALSO
.BR pacman (8),
.BR makepkg (8),
.BR pacman.conf (5)
See the Arch Linux website at <http://www.archlinux.org> for more current
information on the distribution and the \fBpacman\fP family of tools.
.SH AUTHORS
.nf
Judd Vinet <jvinet@zeroflux.org>
Aurelien Foret <aurelien@archlinux.org>
Aaron Griffin <aaron@archlinux.org>
Dan McGee <dan@archlinux.org>
.fi
See the 'AUTHORS' file for additional contributors.

39
doc/libalpm.3.txt Normal file
View File

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

View File

@@ -1,142 +0,0 @@
." the string declarations are a start to try and make distro independent
.ds DS Arch Linux
.ds PB PKGBUILD
.ds VR 3.0.0
.TH makepkg 8 "Feb 07, 2007" "makepkg version \*(VR" "\*(DS Utilities"
.SH NAME
makepkg \- package build utility
.SH SYNOPSIS
.B makepkg
[\fIoptions\fR]
.SH DESCRIPTION
\fBmakepkg\fP is a script to automate the building of packages. All it needs is
a build-capable Linux platform and a custom build script for each package you
wish to build (known as a \fB\*(PB\fP). See
.BR \*(PB (5)
for details on creating your own build scripts.
The advantage to a script-based build is that the work is only done once. Once
you have the build script for a package, makepkg will do the rest: download and
validate source files, check dependencies, configure the build-time settings,
build the package, install the package into a temporary root, make
customizations, generate meta-info, and package the whole thing up for
\fBpacman\fP to use.
\fBmakeworld\fP can be used to rebuild an entire package group or the entire
build tree. See \fBmakeworld --help\fP for syntax.
.SH OPTIONS
.TP
.B \-b, --builddeps
Build missing dependencies from source. When \fBmakepkg\fP finds missing
build-time or run-time dependencies, it will look for the dependencies'
\fB\*(PB\fP files under \fIABSROOT\fP (set in \fBmakepkg.conf\fP). If it finds
them it will call \fBmakepkg\fP to build and install the missing dependencies.
The child calls will be made with the \fB-b\fP and \fB-i\fP options.
.TP
.B \-c, --clean
Clean up leftover work files and directories after a successful build.
.TP
.B \-C, --cleancache
Removes all cached source files from the directory specified in \fISRCDEST\fP
in \fBmakepkg.conf\fP.
.TP
.B \-d, --nodeps
Do not perform any dependency checks. This will let you override and ignore any
dependencies required. There is a good chance this option will break the build
process if all of the dependencies are not installed.
.TP
.B \-e, --noextract
Do not extract source files; use whatever source already exists in the src/
directory. This is handy if you want to go into src and manually patch or tweak
code, then make a package out of the result. Keep in mind that creating a patch
may be a better solution to allow others to use your \fB\*(PB\fP.
.TP
.B \-f, --force
\fBmakepkg\fP will not build a package if a built package already exists in the
\fIPKGDEST\fP (set in \fBmakepkg.conf\fP) directory, which may default to the
current directory. This allows the built package to be overwritten.
.TP
.B \-g, --geninteg
For each source file in the source array of \fB\*(PB\fP, download the file if
required and generate integrity checks. The integrity checks generated are
determined by the value of the \fIINTEGRITY_CHECK\fP array in makepkg.conf.
This output can be redirected into your \fB\*(PB\fP for source validation
(makepkg -g >> \*(PB).
.TP
.B \-h, --help
Output syntax and command line options.
.TP
.B \-i, --install
Install or upgrade the package after a successful build using \fBpacman\fP.
.TP
.B \-m, --nocolor
Disable color in output messages.
.TP
.B \-o, --nobuild
Download and extract files only, but do not build them. Useful with the
\fB--noextract\fP option if you wish to tweak the files in src/ before
building.
.TP
.B \-p \fIbuildscript\fP
Read the package script \fIbuildscript\fP instead of the default, \fI\*(PB\fP.
.TP
.B \-r, --rmdeps
Upon successful build, remove any dependencies installed by \fBmakepkg\fP
during dependency auto-resolution (using \fB-b\fP or \fB-s\fP).
.TP
.B \-R, --repackage
Repackage contents of pkg/ without rebuilding the package. This is useful if
you forgot a depend or install file in your \fB\*(PB\fP and the build itself
will not change.
.TP
.B \-s, --syncdeps
Install missing dependencies using \fBpacman\fP. When missing build-time or
run-time dependencies are found, \fBpacman\fP will try to resolve them. If
successful, the missing packages will be downloaded and installed.
.TP
.B \-S, --usesudo
Use \fBsudo\fP to perform all operations that require \fBpacman\fP. This is
useful for \fB--install\fP, \fB--rmdeps\fP, and \fB--syncdeps\fP. If you are
building packages as a non-root user as recommended, this option should be used
if using any option that calls \fBpacman\fP.
.TP
.B \--noconfirm
(Passed to \fBpacman\fP) Prevent \fBpacman\fP from waiting for user input
before proceeding with operations.
.TP
.B \--noprogressbar
(Passed to \fBpacman\fP) Prevent \fBpacman\fP from displaying a progress bar;
useful if you are redirecting makepkg output to file.
.SH CONFIGURATION
See
.BR makepkg.conf (5)
for more details on configuring \fBmakepkg\fP using the \fBmakepkg.conf\fP file.
.SH BUGS
Bugs? You must be kidding, there are no bugs in this software. But if we happen
to be wrong, send us an email with as much detail as possible to
<pacman-dev@archlinux.org>.
.SH SEE ALSO
.BR makepkg.conf (5),
.BR \*(PB (5),
.BR pacman (8)
See the Arch Linux website at <http://www.archlinux.org> for more current
information on the distribution and the \fBpacman\fP family of tools, and
<http://wiki.archlinux.org/index.php/Arch_Packaging_Standards> for
recommendations on packaging standards.
.SH AUTHORS
.nf
Judd Vinet <jvinet@zeroflux.org>
Aurelien Foret <aurelien@archlinux.org>
Aaron Griffin <aaron@archlinux.org>
Dan McGee <dan@archlinux.org>
.fi
See the 'AUTHORS' file for additional contributors.

170
doc/makepkg.8.txt Normal file
View File

@@ -0,0 +1,170 @@
/////
vim:set ts=4 sw=4 syntax=asciidoc noet:
/////
makepkg(8)
==========
Name
----
makepkg - package build utility
Synopsis
--------
makepkg [options]
Description
-----------
makepkg is a script to automate the building of packages. The requirements for
using the script are a build-capable \*nix platform and a custom build script
for each package you wish to build (known as a PKGBUILD). See
linkman:PKGBUILD[5] for details on creating your own build scripts.
The advantage to a script-based build is that the work is only done once. Once
you have the build script for a package, makepkg will do the rest: download and
validate source files, check dependencies, configure the build-time settings,
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.
*-C, \--cleancache*::
Removes all cached source files from the directory specified in `SRCDEST`
in linkman:makepkg.conf[5].
*-d, \--nodeps*::
Do not perform any dependency checks. This will let you override and
ignore any dependencies required. There is a good chance this option
will break the build process if all of the dependencies are not
installed.
*-e, \--noextract*::
Do not extract source files; use whatever source already exists in the
src/ directory. This is handy if you want to go into src/ and manually
patch or tweak code, then make a package out of the result. Keep in mind
that creating a patch may be a better solution to allow others to use
your PKGBUILD.
*-f, \--force*::
makepkg will not build a package if a built package already exists in
the `PKGDEST` (set in linkman:makepkg.conf[5]) directory, which may
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 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.
*-o, \--nobuild*::
Download and extract files only, but do not build them. Useful with the
`\--noextract` option if you wish to tweak the files in src/ before
building.
*-p* <`buildscript`>::
Read the package script `buildscript` instead of the `PKGBUILD` default;
see linkman:PKGBUILD[5].
*-r, \--rmdeps*::
Upon successful build, remove any dependencies installed by makepkg
during dependency auto-resolution (using `-b` or `-s`).
*-R, \--repackage*::
Repackage contents of pkg/ without rebuilding the package. This is
useful if you forgot a depend or install file in your PKGBUILD and the
build itself will not change.
*-s, \--syncdeps*::
Install missing dependencies using pacman. When build-time or run-time
dependencies are not found, pacman will try to resolve them. If
successful, the missing packages will be downloaded and installed.
*\--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.
*\--noconfirm*::
(Passed to pacman) Prevent pacman from waiting for user input before
proceeding with operations.
*\--noprogressbar*::
(Passed to pacman) Prevent pacman from displaying a progress bar;
useful if you are redirecting makepkg output to file.
Additional Features
-------------------
makepkg supports building development versions of packages without having to
manually update the pkgver in the PKGBUILD. This was formerly done using the
separate utility 'versionpkg'. See linkman:PKGBUILD[5] for details on how to
set up a development PKGBUILD.
Configuration
-------------
See linkman:makepkg.conf[5] for more details on configuring makepkg using the
'makepkg.conf' file.
See Also
--------
linkman:makepkg.conf[5], linkman:PKGBUILD[5], linkman:pacman[8]
include::footer.txt[]

View File

@@ -1,146 +0,0 @@
." the string declarations are a start to try and make distro independent
.ds DS Arch Linux
.ds PB PKGBUILD
.ds VR 3.0.0
.TH \*(PB 5 "Feb 08, 2007" "makepkg.conf version \*(VR" "\*(DS Files"
.SH NAME
makepkg.conf \- makepkg configuration file
.SH DESCRIPTION
Configuration options for \fBmakekpg\fP are stored in \fBmakepkg.conf\fP. This
file is sourced, so you can include any special compiler flags you wish to use.
This is helpful for building for different architectures, or with different
optimizations.
\fBNOTE:\fP This does not guarantee that all package Makefiles will use your
exported variables. Some of them are non-standard...
The default file is fairly well commented, so it may be easiest to simply
follow directions given there for customization.
.SH OPTIONS
.TP
.B FTPAGENT="\fI/path/to/command\fP [\fIoptions\fP]"
Sets the download agent used to fetch source files specified with a URL in the
\fB\*(PB\fP file. Flags can be specified as well; the download URL is then
placed on the end of the command.
.TP
.B CARCH="\fIcarch\fP"
Specifies your computer architecture; possible values include such things as
"i686", "x86_64", "ppc", etc. This should be automatically set on installation.
.TP
.B CHOST="\fIchost\fP"
A string such as "i686-pc-linux-gnu", do not touch unless you know what you are
doing.
.TP
.B CFLAGS="\fIcflags\fP"
Flags used for the C compiler. This is a key part to the use of makepkg.
Usually several options are specified, and the most common string resembles
something like this: "-march=i686 -O2 -pipe". Another useful option may be
-mcpu in place of -march. Read
.BR gcc (1)
for more details on the wide variety of compiler flags available.
.TP
.B CXXFLAGS="\fIcxxflags\fP"
Flags used for the C++ compiler; see \fBCFLAGS\fP for more info.
.TP
.B MAKEFLAGS="\fImakeflags\fP"
This is often used to set the number of jobs used, for example, "-j2". Other
flags that make accepts can also be passed.
.TP
.B BUILDENV=(fakeroot !distcc color !ccache)
This array contains four options that affect the build environment, the
defaults are shown here. All options should always be left in the array; to
enable or disable an option simply remove or place an "!" at the front of the
option. Each works as follows:
.RS
.TP
.B fakeroot
Allow building packages as a non-root user. This is \fIhighly\fP recommended.
.TP
.B distcc
Use the distributed C/C++/ObjC compiler to spread compilation among multiple
machines. If this is enabled, \fBDISTCC_HOSTS\fP must be specified as well.
.TP
.B color
Colorize output messages, making output easier to read.
.TP
.B ccache
Use ccache to cache compilation by default. This allows for faster compiles if
you are continuously recompiling the same packages. It can be disabled for
individual packages by placing \fB!ccache\fP in the \fB\*(PB\fP options array.
.RE
.TP
.B DISTCC_HOSTS="\fIhost1 ...\fP"
If using DistCC, this is used to specify a space-delimited list of hosts
running in the DistCC cluster. In addition, you will want to modify your
\fBMAKEFLAGS\fP.
.TP
.B OPTIONS=(strip !docs libtool emptydirs)
This array contains four options that affect the default packaging. All four
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 option.
Each works as follows:
.RS
.TP
.B strip
Strip symbols from binaries and libraries. If you frequently use a debugger on
programs or libraries, it may be helpful to disable this option.
.TP
.B docs
Save doc and info directories. If you wish to delete doc and info directories,
specify "!docs" in the array.
.TP
.B libtool
Leave libtool (.la) files in packages. Specify "!libtool" to remove them.
.TP
.B emptydirs
Leave empty directories in packages.
.RE
.TP
.B INTEGRITY_CHECK=(\fIcheck1 ...\fP)
File integrity checks to use. Multiple checks may be specified; this affects
both generation and checking. The current valid options are: md5, sha1, sha256,
sha384, and sha512.
.TP
.B DOC_DIRS=(usr/{,share/}{info,doc} ...)
If "!docs" is specified in the \fBOPTIONS\fP array, this variable will instruct
makepkg where to look to remove docs. If you build packages that are located in
opt/, you may need to add the directory to this array. NOTE: do not add the
leading slash to the directory name.
.TP
.B PKGDEST=\fI/path/to/folder\fP
If this value is not set, packages will by default be placed in the current
directory (location of the \fB\*(PB\fP). Many people like to keep all their
packages in one place so this option allows this behavior. A common location is
"/home/packages".
.TP
.B SRCDEST=\fI/path/to/folder\fP
If this value is not set, downloaded source files will only be stored in the
current directory. Many people like to keep all source files in a central
location for easy cleanup, so this path can be set here.
.TP
.B PACKAGER="\fIJohn Doe <john@doe.com>\fP"
This value is used when querying a package to see who was the builder. It is
recommended you change this to your name and email address.
.SH SEE ALSO
.BR makepkg (8),
.BR pacman (8),
.BR \*(PB (5)
See the Arch Linux website at <http://www.archlinux.org> for more current
information on the distribution and the \fBpacman\fP family of tools, and
<http://wiki.archlinux.org/index.php/Arch_Packaging_Standards> for
recommendations on packaging standards.
.SH AUTHORS
.nf
Judd Vinet <jvinet@zeroflux.org>
Aurelien Foret <aurelien@archlinux.org>
Aaron Griffin <aaron@archlinux.org>
Dan McGee <dan@archlinux.org>
.fi
See the 'AUTHORS' file for additional contributors.

154
doc/makepkg.conf.5.txt Normal file
View File

@@ -0,0 +1,154 @@
/////
vim:set ts=4 sw=4 syntax=asciidoc noet:
/////
makepkg.conf(5)
===============
Name
----
makepkg.conf - makepkg configuration file
Synopsis
--------
{sysconfdir}/makepkg.conf, ~/.makepkg.conf
Description
-----------
Configuration options for makekpg are stored in makepkg.conf. This file is
sourced, so you can include any special compiler flags you wish to use. This is
helpful for building for different architectures, or with different
optimizations. However, only the variables described below are exported to the
build environment.
NOTE: This does not guarantee that all package Makefiles will use your exported
variables. Some of them are non-standard.
The default file is fairly well commented, so it may be easiest to simply
follow directions given there for customization.
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.
**CARCH=**"carch"::
Specifies your computer architecture; possible values include such things
as ``i686'', ``x86_64'', ``ppc'', etc. This should be automatically set on
installation.
**CHOST=**"chost"::
A string such as ``i686-pc-linux-gnu'', do not touch unless you know what
you are doing. This can be commented out by most users if desired.
**CFLAGS=**"cflags"::
Flags used for the C compiler. This is a key part to the use of makepkg.
Usually several options are specified, and the most common string resembles
something like this: ``-march=i686 -O2 -pipe''. Another useful option may
be `-mcpu` in place of `-march`. Read gcc(1) for more details on the wide
variety of compiler flags available.
**CXXFLAGS=**"cxxflags"::
Flags used for the C++ compiler; see CFLAGS for more info.
**MAKEFLAGS=**"makeflags"::
This is often used to set the number of jobs used, for example, `-j2`.
Other flags that make accepts can also be passed.
**BUILDENV=(**fakeroot !distcc color !ccache !xdelta**)**::
This array contains options that affect the build environment, the defaults
are shown here. All options should always be left in the array; to enable
or disable an option simply remove or place an ``!'' at the front of the
option. Each works as follows:
*fakeroot*;;
Allow building packages as a non-root user. This is highly recommended.
*distcc*;;
Use the distributed C/C++/ObjC compiler to spread compilation among
multiple machines. If this is enabled, `DISTCC_HOSTS` must be specified
as well.
*color*;;
Colorize output messages, making output easier to read.
*ccache*;;
Use ccache to cache compilation by default. This allows for faster
compiles if you are continuously recompiling the same packages. It can
be disabled for individual packages by placing `!ccache` in the
PKGBUILD options array.
*xdelta*;;
Generate an xdelta binary patch from previous to current package. The
previous package must be available in the makepkg cache directory for
this to occur.
**DISTCC_HOSTS=**"host1 ..."::
If using DistCC, this is used to specify a space-delimited list of hosts
running in the DistCC cluster. In addition, you will want to modify your
`MAKEFLAGS`.
**OPTIONS=(**strip !docs libtool emptydirs**)**::
This array contains options that affect the default packaging. All four are
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
option. Each works as follows:
*strip*;;
Strip symbols from binaries and libraries. If you frequently use a
debugger on programs or libraries, it may be helpful to disable this
option.
*docs*;;
Save doc and info directories. If you wish to delete doc and info
directories, specify `!docs' in the array.
*libtool*;;
Leave libtool (.la) files in packages. Specify `!libtool' to remove
them.
*emptydirs*;;
Leave empty directories in packages.
**INTEGRITY_CHECK=(**check1 ...**)**::
File integrity checks to use. Multiple checks may be specified; this
affects both generation and checking. The current valid options are:
`md5`, `sha1`, `sha256`, `sha384`, and `sha512`.
**DOC_DIRS=(**usr/{,share/}{info,doc} ...**)**::
If "!docs" is specified in the OPTIONS array, this variable will
instruct makepkg where to look to remove docs. If you build packages
that are located in opt/, you may need to add the directory to this
array. *NOTE:* Do not add the leading slash to the directory name.
**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
like to keep all their packages in one place so this option allows
this behavior. A common location is ``/home/packages''.
**SRCDEST=**"/path/to/folder"::
If this value is not set, downloaded source files will only be stored
in the current directory. Many people like to keep all source files in
a central location for easy cleanup, so this path can be set here.
**PACKAGER=**"John Doe <john@doe.com>"::
This value is used when querying a package to see who was the builder.
It is recommended you change this to your name and email address.
*BUILDSCRIPT*, *PKGEXT*, *SRCEXT*, *DB_COMPRESSION*, *DB_CHECKSUMS*::
Do not touch these unless you know what you are doing.
See Also
--------
linkman:makepkg[8], linkman:pacman[8], linkman:PKGBUILD[5]
include::footer.txt[]

View File

@@ -1,293 +0,0 @@
." the string declarations are a start to try and make distro independent
.ds DS Arch Linux
.ds PB PKGBUILD
.ds VR 3.0.0
.ds LV 1.0.0
.TH pacman 8 "Feb 07, 2007" "pacman version \*(VR" "\*(DS Utilities"
.SH NAME
pacman \- package manager utility
.SH SYNOPSIS
.B pacman
<\fIoperation\fR> [\fIoptions\fR] [\fIpackages\fR]
.SH DESCRIPTION
\fBpacman\fP is a \fIpackage management\fP utility that tracks installed
packages on a Linux system. It features dependency support, package groups,
install and uninstall hooks, and the ability to sync your local machine with a
remote ftp server to automatically upgrade packages. \fBpacman\fP packages are
a zipped tar format.
Since version 3.0.0, \fBpacman\fP has been the frontend to \fBlibalpm\fP, the
"Arch Linux Package Management" library. This library allows alternative front
ends to be written (for instance, a GUI front end).
.SH OPERATIONS
.TP
.B \-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 \fB--upgrade\fP in place of this option.
.TP
.B \-F, --freshen
This is like \fB--upgrade\fP except it will only upgrade packages already
installed on the system.
.TP
.B \-Q, --query
Query the package database. This operation allows you to view installed
packages and their files, as well as meta-information about individual packages
(dependencies, conflicts, install date, build date, size). This can be run
against the local package database or can be used on individual .tar.gz
packages. See \fBQUERY OPTIONS\fP below.
.TP
.B \-R, --remove
Remove a package from the system. Files belonging to the specified package
will be deleted, and the database will be updated. Most configuration files
will be saved with a \fI.pacsave\fP extension unless the \fB--nosave\fP option
is used. See \fBREMOVE OPTIONS\fP below.
.TP
.B \-S, --sync
Synchronize packages. Packages are installed directly from the ftp servers,
including all dependencies required to run the packages. For example,
\fBpacman -S qt\fP will download and install \fBqt\fP and all the packages it
depends on. You can also use \fBpacman -Su\fP to upgrade all packages that are
out of date. See \fBSYNC OPTIONS\fP below.
.TP
.B \-U, --upgrade
Upgrade or add a package to the system. Either a URL or file path can be
specified. This is a "remove-then-add" process. See \fBHANDLING CONFIG
FILES\fP for an explanation on how pacman takes care of config files.
.TP
.B \-V, --version
Display version and exit.
.TP
.B \-h, --help
Display syntax for the given operation. If no operation was supplied then the
general syntax is shown.
.SH OPTIONS
.TP
.B \--ask \fInumber\fP
Pre-specify answers to questions. It is doubtful whether this option even
works, so I would not recommend using it. TODO: document this more, as I have
no idea how it works or when you would use it, or if we should just dump it.
.TP
.B \-b, --dbpath \fIpath\fP
Specify an alternative database location (default is "/var/lib/pacman/"). This
should not be used unless you know what you are doing.
.TP
.B \-d, --nodeps
Skips all dependency checks. Normally, pacman will always check a package's
dependency fields to ensure that all dependencies are installed and there are
no package conflicts in the system.
.TP
.B \-f, --force
Bypass file conflict checks and overwrite conflicting files. If the package
that is about to be installed contains files that are already installed, this
option will cause all those files to be overwritten. This option should be
used with care, ideally not at all.
.TP
.B \-r, --root \fIpath\fP
Specify an alternative installation root (default is "/"). This should
\fInot\fP 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. By using this option you not only
specify where the software should be installed, but you also specify which
package database and cache location to use.
.TP
.B \-v, --verbose
Output more status messages, such as the Root and DBPath.
.TP
.B \--cachedir \fIdir\fP
Specify an alternative package cache location (default is
"/var/cache/pacman/pkg/"). This should not be used unless you know what you are
doing.
.TP
.B \--config \fIfilepath\fP
Specify an alternate configuration file.
.TP
.B \--noconfirm
Bypass any and all "Are you sure?" messages. It's not a good idea to do this
unless you want to run pacman from a script.
.TP
.B \--noprogressbar
Do not show a progress bar when downloading files. This can be useful for
scripts that call pacman and capture the output.
.TP
.B \--noscriptlet
If an install scriptlet exists, do not execute it. Do not use this unless you
know what you are doing.
.SH QUERY OPTIONS
.TP
.B \-c, --changelog
View the ChangeLog of a package. Not every package will provide one but it
will be shown if available.
.TP
.B \-e, --orphans
List all packages that were pulled in by a previously installed package but no
longer required by any installed package.
.TP
.B \-g, --groups
Display all packages that are members of a named group. If not name is
specified, list all grouped packages.
.TP
.B \-i, --info
Display information on a given package. The \fB-p\fP option can be used if
querying a package file instead of the local database.
.TP
.B \-l, --list
List all files owned by a given package. Multiple packages can be specified on
the command line.
.TP
.B \-m, --foreign
List all packages that were not found in the sync database(s). Typically these
are packages that were downloaded manually and installed with \fB--upgrade\fP.
.TP
.B \-o, --owns \fIfile\fP
Search for the package that owns \fIfile\fP.
.TP
.B \-p, --file
Signifies that the package supplied on the command line is a file and not an
entry in the database. The file will be decompressed and queried. This is
useful in combination with \fB--info\fP and \fB--list\fP.
.TP
.B \-s, --search \fIregexp\fP
This will search each locally-installed package for names or descriptions that
matche \fIregexp\fP.
.TP
.B \-u, --upgrades
Lists all packages that are out of date on the local system. This option works
best if the sync database is refreshed using \fB-Sy\fP.
.SH REMOVE OPTIONS
.TP
.B \-c, --cascade
Remove all target packages, as well as all packages that depend on one or more
target packages. This operation is recursive.
.TP
.B \-k, --keep
Removes the database entry only. Leaves all files in place.
.TP
.B \-n, --nosave
Instructs pacman to ignore file backup designations. Normally, when a file is
removed from the system the database is checked to see if the file should be
renamed with a .pacsave extension.
.TP
.B \-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 \fB--sync\fP operation.
.SH SYNC OPTIONS
.TP
.B \-c, --clean
Remove old packages from the cache to free up disk space. When \fBpacman\fP
downloads packages, it saves them in \fI/var/cache/pacman/pkg\fP. Use one
\fB--clean\fP switch to remove \fIold\fP packages; use two to remove \fIall\fP
packages from the cache.
.TP
.B \-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.
.TP
.B \-g, --groups
Display all the members for each package group specified. If no group names
are provided, all groups will be listed; pass the flag twice to view all
groups and their members.
.TP
.B \-i, --info
Display dependency and other information for a given package. This will search
through all repositories for a matching package.
.TP
.B \-l, --list
List all packages in the specified repositories. Multiple repositories can be
specified on the command line.
.TP
.B \-p, --print-uris
Print out URIs for each package that will be installed, including any
dependencies yet to be installed. These can be piped to a file and downloaded
at a later time, using a program like wget.
.TP
.B \-s, --search \fIregexp\fP
This will search each package in the sync databases for names or descriptions
that match \fIregexp\fP.
.TP
.B \-u, --sysupgrade
Upgrades all packages that are out of date. Each currently-installed package
will be examined and upgraded if a newer package exists. A report of all
packages to upgrade will be presented and the operation will not proceed
without user confirmation. Dependencies are automatically resolved at this
level and will be installed/upgraded if necessary.
.TP
.B \-w, --downloadonly
Retrieve all packages from the server, but do not install/upgrade anything.
.TP
.B \-y, --refresh
Download a fresh copy of the master package list from the server(s) defined in
\fBpacman.conf\fP. This should typically be used each time you use
\fB--sysupgrade\fP or \fB-u\fP. Passing two \fB--refresh\fP or \fB-y\fP flags
will force a refresh of all package lists even if they are thought to be
up to date.
.TP
.B \--ignore \fIpackage\fP
Directs \fBpacman\fP to ignore upgrades of \fIpackage\fP even if there is one
available.
.SH HANDLING CONFIG FILES
pacman uses the same logic as rpm to determine action against files that are
designated to be backed up. During an upgrade, 3 md5 hashes are used for each
backup file to determine the required action: one for the original file
installed, one for the new file that's about to be installed, and one for the
actual file existing on the filesystem. After comparing these 3 hashes, the
follow scenarios can result:
.TP
original=\fBX\fP, current=\fBX\fP, new=\fBX\fP
All three files are the same, so overwrites are not an issue Install the new
file.
.TP
original=\fBX\fP, current=\fBX\fP, new=\fBY\fP
The current file is the same as the original but the new one differs. Since
the user did not ever modify the file, and the new one may contain improvements
or bugfixes, install the new file.
.TP
original=\fBX\fP, current=\fBY\fP, new=\fBX\fP
Both package versions contain the exact same file, but the one on the
filesystem has been modified. Leave the current file in place.
.TP
original=\fBX\fP, current=\fBY\fP, new=\fBY\fP
The new file is identical to the current file. Install the new file.
.TP
original=\fBX\fP, current=\fBY\fP, new=\fBZ\fP
All three files are different, so install the new file with a .pacnew extension
and warn the user. The user must then manually merge any necessary changes into
the original file.
.SH CONFIGURATION
See
.BR pacman.conf (5)
for more details on configuring \fBpacman\fP using the \fBpacman.conf\fP file.
.SH BUGS
Bugs? You must be kidding, there are no bugs in this software. But if we happen
to be wrong, send us an email with as much detail as possible to
<pacman-dev@archlinux.org>.
.SH SEE ALSO
.BR pacman.conf (5),
.BR makepkg (8),
.BR libalpm (3)
See the Arch Linux website at <http://www.archlinux.org> for more current
information on the distribution and the \fBpacman\fP family of tools.
.SH AUTHORS
.nf
Judd Vinet <jvinet@zeroflux.org>
Aurelien Foret <aurelien@archlinux.org>
Aaron Griffin <aaron@archlinux.org>
Dan McGee <dan@archlinux.org>
.fi
See the 'AUTHORS' file for additional contributors.

345
doc/pacman.8.txt Normal file
View File

@@ -0,0 +1,345 @@
/////
vim:set ts=4 sw=4 syntax=asciidoc noet:
/////
pacman(8)
=========
Name
----
pacman - package manager utility
Synopsis
--------
'pacman' <operation> [options] [packages]
Description
-----------
Pacman is a package management utility that tracks installed packages on a Linux
system. It features dependency support, package groups, install and uninstall
hooks, and the ability to sync your local machine with a remote ftp server to
automatically upgrade packages. Pacman packages are a zipped tar format.
Since version 3.0.0, pacman has been the frontend to linkman:libalpm[3], the
"Arch Linux Package Management" library. This library allows alternative front
ends to be written (for instance, a GUI front end).
Operations
----------
*-A, \--add* (deprecated)::
Add a package to the system. Either a URL or file path can be specified.
The package will be uncompressed into the installation root and the
database will be updated. The package will not be installed if another
version is already installed. *NOTE*: please use '\--upgrade' in place of
this option.
*-Q, \--query*::
Query the package database. This operation allows you to view installed
packages and their files, as well as meta-information about individual
packages (dependencies, conflicts, install date, build date, size). This
can be run against the local package database or can be used on
individual '.tar.gz' packages. See <<QO,Query Options>> below.
*-R, \--remove*::
Remove a package from the system. Groups can also be specified to be
removed, in which case every package in that group will be removed.
Files belonging to the specified package will be deleted, and the
database will be updated. Most configuration files will be saved
with a `.pacsave` extension unless the '\--nosave' option is used.
See <<RO,Remove Options>> below.
*-S, \--sync*::
Synchronize packages. Packages are installed directly from the ftp
servers, including all dependencies required to run the packages. For
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`.
+
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
package in the gnome group, as well as the dependencies of those packages.
+
Packages which provide other packages are also handled. For example, `pacman -S
foo` will first look for a foo package. If foo is not found, packages which
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.
*-U, \--upgrade*::
Upgrade or add a package to the system. Either a URL or file path can be
specified. This is a "remove-then-add" process. See <<HCF,Handling Config
Files>> for an explanation on how pacman takes care of config files.
*-V, \--version*::
Display version and exit.
*-h, \--help*::
Display syntax for the given operation. If no operation was supplied
then the general syntax is shown.
Options
-------
*\--asdeps*::
Install packages non-explicitly; in other works, 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.
*-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.
*-d, \--nodeps*::
Skips all dependency checks. Normally, pacman will always check a
package's dependency fields to ensure that all dependencies are
installed and there are no package conflicts in the system.
*-f, \--force*::
Bypass file conflict checks and overwrite conflicting files. If the
package that is about to be installed contains files that are already
installed, this option will cause all those files to be overwritten.
This option should be used with care, ideally not at all.
*-r, \--root* <'path'>::
Specify an alternative installation root (default is ``/''). This should
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.
*\--cachedir* <'dir'>::
Specify an alternative package cache location (a typical default is
``/var/cache/pacman/pkg''). Multiple cache directories can be specified,
and they are tried in the order they are passed to pacman. *NOTE*: this
is an absolute path, the root path is not automatically prepended. This
behavior changed in pacman 3.1.0.
*\--config* <'file'>::
Specify an alternate configuration file.
*\--logfile* <'file'>::
Specify an alternate log file. This is an absolute path, regardless of
the installation root setting.
*\--noconfirm*::
Bypass any and all "Are you sure?" messages. It's not a good idea to do
this unless you want to run pacman from a script.
*\--noprogressbar*::
Do not show a progress bar when downloading files. This can be useful
for scripts that call pacman and capture the output.
*\--noscriptlet*::
If an install scriptlet exists, do not execute it. Do not use this
unless you know what you are doing.
Query Options[[QO]]
-------------------
*-c, \--changelog*::
View the ChangeLog of a package. Not every package will provide one but
it will be shown if available.
*-d, \--deps*::
List all packages installed as dependencies. This option can be combined
with '-t' for listing real orphans- packages that were installed as
dependencies but are no longer required by any installed package. ('-Qdt'
is equivalent to the pacman 3.0.X '-Qe' option.)
*-e, \--explicit*::
List all packages explicitly installed. This option can be combined with
'-t' to list top-level packages- those packages that were explicitly
installed but are not required by any other package. ('-Qet' is equivalent
to the pacman 2.9.X '-Qe' option.)
*-g, \--groups*::
Display all packages that are members of a named group. If a name is not
specified, list all grouped packages.
*-i, \--info*::
Display information on a given package. The '-p' option can be used if
querying a package file instead of the local database. Passing two
'\--info' or '-i' flags will also display the list of backup files and
their modification states.
*-l, \--list*::
List all files owned by a given package. Multiple packages can be
specified on the command line.
*-m, \--foreign*::
Restrict or filter output to packages that were not found in the sync
database(s). Typically these are packages that were downloaded manually
and installed with '\--upgrade'.
*-o, \--owns* <'file'>::
Search for the package that owns file. The path can be relative or
absolute.
*-p, \--file*::
Signifies that the package supplied on the command line is a file and
not an entry in the database. The file will be decompressed and queried.
This is useful in combination with '\--info' and '\--list'.
*-s, \--search* <'regexp'>::
This will search each locally-installed package for names or
descriptions that match `regexp`.
*-t, \--unrequired*::
Restrict or filter output to packages not required by any currently
installed package.
*-u, \--upgrades*::
Lists all packages that are out of date on the local system. This option
works best if the sync database is refreshed using '-Sy'.
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, 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.
*-n, \--nosave*::
Instructs pacman to ignore file backup designations. Normally, when a
file is removed from the system the database is checked to see if the
file should be renamed with a ``.pacsave'' extension.
*-s, \--recursive*::
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.
Sync Options[[SO]]
------------------
*-c, \--clean*::
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.
*-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.
*-g, \--groups*::
Display all the members for each package group specified. If no group
names are provided, all groups will be listed; pass the flag twice to
view all groups and their members.
*-i, \--info*::
Display dependency and other information for a given package. This will
search through all repositories for a matching package.
*-l, \--list*::
List all packages in the specified repositories. Multiple repositories
can be specified on the command line.
*-p, \--print-uris*::
Print out URIs for each package that will be installed, including any
dependencies yet to be installed. These can be piped to a file and
downloaded at a later time, using a program like wget.
*-s, \--search* <'regexp'>::
This will search each package in the sync databases for names or
descriptions that match `regexp`.
*-u, \--sysupgrade*::
Upgrades all packages that are out of date. Each currently-installed
package will be examined and upgraded if a newer package exists. A
report of all packages to upgrade will be presented and the operation
will not proceed without user confirmation. Dependencies are
automatically resolved at this level and will be installed/upgraded if
necessary.
*-w, \--downloadonly*::
Retrieve all packages from the server, but do not install/upgrade
anything.
*-y, \--refresh*::
Download a fresh copy of the master package list from the server(s)
defined in linkman:pacman.conf[5]. This should typically be used each time
you use '\--sysupgrade' or '-u'. Passing two '\--refresh' or '-y' flags
will force a refresh of all package lists even if they are thought to be up
to date.
*\--needed*::
Only install the targets that are not already installed and up-to-date.
*\--ignore* <'package'>::
Directs pacman to ignore upgrades of package even if there is one
available. Multiple packages can be specified by separating them
with a comma.
*\--ignoregroup* <'group'>::
Directs pacman to ignore upgrades of all packages in 'group' even if
there is one available. Multiple groups can be specified by
separating them with a comma.
Handling Config Files[[HCF]]
----------------------------
Pacman uses the same logic as rpm to determine action against files that are
designated to be backed up. During an upgrade, 3 md5 hashes are used for each
backup file to determine the required action: one for the original file
installed, one for the new file that's about to be installed, and one for the
actual file existing on the filesystem. After comparing these 3 hashes, the
follow scenarios can result:
original=X, current=X, new=X::
All three files are the same, so overwrites are not an issue Install the
new file.
original=X, current=X, new=Y::
The current file is the same as the original but the new one differs.
Since the user did not ever modify the file, and the new one may contain
improvements or bugfixes, install the new file.
original=X, current=Y, new=X::
Both package versions contain the exact same file, but the one on the
filesystem has been modified. Leave the current file in place.
original=X, current=Y, new=Y::
The new file is identical to the current file. Install the new file.
original=X, current=Y, new=Z::
All three files are different, so install the new file with a '.pacnew'
extension and warn the user. The user must then manually merge any
necessary changes into the original file.
Configuration
-------------
See linkman:pacman.conf[5] for more details on configuring pacman using the
'pacman.conf' file.
See Also
--------
linkman:pacman.conf[5], linkman:makepkg[8], linkman:libalpm[3]
include::footer.txt[]

View File

@@ -1,139 +0,0 @@
." the string declarations are a start to try and make distro independent
.ds DS Arch Linux
.ds PB PKGBUILD
.ds VR 3.0.0
.ds LV 1.0.0
.TH \*(PB 5 "Feb 07, 2007" "pacman.conf version \*(VR" "\*(DS Files"
.SH NAME
pacman.conf \- pacman package manager configuration file
.SH DESCRIPTION
\fBpacman\fP, using \fBlibalpm\fP, will attempt to read \fBpacman.conf\fP each
time it is invoked. This configuration file is divided into sections or
\fIrepositories\fP. Each section defines a package repository that \fBpacman\fP
can use when searching for packages in \fB--sync\fP mode. The exception to this
is the \fIoptions\fP section, which defines global options.
.SH EXAMPLE
.RS
.nf
#
# pacman.conf
#
[options]
NoUpgrade = etc/passwd etc/group etc/shadow
NoUpgrade = etc/fstab
[current]
Include = /etc/pacman.d/current
[custom]
Server = file:///home/pkgs
.fi
.RE
.SH OPTIONS
.TP
.B DBPath = \fIpath/to/db/dir\fP
Overrides the default location of the toplevel database directory. The default
is \fIvar/lib/pacman\fP.
.TP
.B CacheDir = \fIpath/to/cache/dir\fP
Overrides the default location of the package cache directory. The default is
\fIvar/cache/pacman\fP.
.TP
.B HoldPkg = \fIpackage\fP ...
If a user tries to \fB--remove\fP a package that's listed in \fBHoldPkg\fI,
\fBpacman\fP will ask for confirmation before proceeding.
.TP
.B IgnorePkg = \fIpackage\fP ...
Instructs \fBpacman\fP to ignore any upgrades for this package when performing a
\fB--sysupgrade\fP.
.TP
.B Include = \fIpath\fP
Include another config file. This file can include repositories or general
configuration options.
.TP
.B XferCommand = \fI/path/to/command %u\fP
If set, an external program will be used to download all remote files. All
instances of \fB%u\fP will be replaced with the download URL. If present,
instances of \fB%o\fP will be replaced with the local filename, plus a ".part"
extension, which allows programs like wget to do file resumes properly.
This option is useful for users who experience problems with built-in
http/ftp support, or need the more advanced proxy support that comes with
utilities like wget.
.TP
.B NoPassiveFtp
Disables passive ftp connections when downloading packages. (aka Active Mode)
.TP
.B NoUpgrade = \fIfile\fP ...
All files listed with a \fBNoUpgrade\fP directive will never be touched during
a package install/upgrade. Do \fInot\fP include the leading slash when
specifying files.
.TP
.B NoExtract = \fIfile\fP ...
All files listed with a \fBNoExtract\fP directive will never be extracted from
a package into the filesystem. This can be useful when you don't want part 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
\fBapache\fP package.
.TP
.B UseSyslog
Log action messages through \fBsyslog()\fP. This will insert log entries into
\fI/var/log/messages\fP or equivalent.
.TP
.B LogFile = \fI/path/to/file\fP
Log actions directly to a file. Default is \fI/var/log/pacman.log\fP.
.SH REPOSITORY SECTIONS
Each repository section defines a section name and at least one location where
the packages can be found. The section name is defined by the string within
square brackets (the two above are 'current' and 'custom'). Locations are
defined with the \fBServer\fP 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.
.SH USING YOUR OWN REPOSITORY
If you have numerous custom packages of your own, it is often easier to
generate your own custom local repository than install them all with the
\fB--upgrade\fP option. All you need to do is generate a compressed package
database in the directory with these packages so \fBpacman\fP can find it when
run with \fB--refresh\fP.
.RS
.nf
repo-add /home/pkgs/custom.db.tar.gz /home/pkgs/*.pkg.tar.gz
.fi
.RE
The above command will generate a compressed database named
\fI/home/pkgs/custom.db.tar.gz\fP. Note that the database must be of the form
\fI{treename}.db.tar.gz\fP, where {treename} is the name of the section defined
in the configuration file. That's it! Now configure your \fIcustom\fP section
in the configuration file as shown in the config example above. Pacman will
now use your package repository. If you add new packages to the repository,
remember to re-generate the database and use \fBpacman\fP's --refresh option.
For more information on the \fBrepo-add\fP command, use \fB repo-add --help\fP.
.SH SEE ALSO
.BR pacman (8),
.BR libalpm (3)
See the Arch Linux website at <http://www.archlinux.org> for more current
information on the distribution and the \fBpacman\fP family of tools.
.SH AUTHORS
.nf
Judd Vinet <jvinet@zeroflux.org>
Aurelien Foret <aurelien@archlinux.org>
Aaron Griffin <aaron@archlinux.org>
Dan McGee <dan@archlinux.org>
.fi
See the 'AUTHORS' file for additional contributors.

193
doc/pacman.conf.5.txt Normal file
View File

@@ -0,0 +1,193 @@
/////
vim:set ts=4 sw=4 syntax=asciidoc noet:
/////
pacman.conf(5)
==============
Name
----
pacman.conf - pacman package manager configuration file
Synopsis
--------
{sysconfdir}/pacman.conf
Description
-----------
Pacman, using linkman:libalpm[3], will attempt to read pacman.conf each time it
is invoked. This configuration file is divided into sections or repositories.
Each section defines a package repository that pacman can use when searching
for packages in '\--sync' mode. The exception to this is the options section,
which defines global options.
Example
-------
--------
#
# pacman.conf
#
[options]
NoUpgrade = etc/passwd etc/group etc/shadow
NoUpgrade = etc/fstab
[core]
Include = /etc/pacman.d/core
[custom]
Server = file:///home/pkgs
--------
Options
-------
*RootDir =* path/to/root::
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.
*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*: this is an absolute
path, the root path is not automatically prepended. This behavior changed
in pacman 3.1.0.
*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.
*HoldPkg =* package ...::
If a user tries to '\--remove' a package that's listed in `HoldPkg`,
pacman will ask for confirmation before proceeding.
*IgnorePkg =* package ...::
Instructs pacman to ignore any upgrades for this package when performing
a '\--sysupgrade'.
*IgnoreGroup =* group ...::
Instructs pacman to ignore any upgrades for all packages in this
group when performing a '\--sysupgrade'.
*Include =* path::
Include another config file. This file can include repositories or
general configuration options.
*XferCommand =* /path/to/command %u::
If set, an external program will be used to download all remote files.
All instances of `%u` will be replaced with the download URL. If present,
instances of `%o` will be replaced with the local filename, plus a
``.part'' extension, which allows programs like wget to do file resumes
properly.
+
This option is useful for users who experience problems with built-in
http/ftp support, or need the more advanced proxy support that comes with
utilities like wget.
*NoPassiveFtp*::
Disables passive ftp connections when downloading packages. (aka Active Mode)
*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.
*NoExtract =* file ...::
All files listed with a `NoExtract` directive will never be extracted from
a package into the filesystem. This can be useful when you don't want part
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.
*UseSyslog*::
Log action messages through syslog(). This will insert log entries into
``/var/log/messages'' or equivalent.
*ShowSize*::
Display the size of individual packages for '\--sync' and '\--query' modes.
*UseDelta*::
Download delta files instead of complete packages if possible. Requires
the xdelta program to be installed.
*TotalDownload*::
When downloading, display the amount downloaded, download rate, ETA,
and completed percentage of the entire download list list rather
than the percent of each individual download target. The progress
bar is still based solely on the current file download.
Repository Sections
-------------------
Each repository section defines a section name and at least one location where
the packages can be found. The section name is defined by the string within
square brackets (the two above are 'current' and 'custom'). Locations are
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.
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
-------------------------
If you have numerous custom packages of your own, it is often easier to generate
your own custom local repository than install them all with the '\--upgrade'
option. All you need to do is generate a compressed package database in the
directory with these packages so pacman can find it when run with '\--refresh'.
repo-add /home/pkgs/custom.db.tar.gz /home/pkgs/*.pkg.tar.gz
The above command will generate a compressed database named
'/home/pkgs/custom.db.tar.gz'. Note that the database must be of the form
'{treename}.db.tar.gz', where '{treename}' is the name of the section defined in
the configuration file. That's it! Now configure your custom section in the
configuration file as shown in the config example above. Pacman will now use your
package repository. If you add new packages to the repository, remember to
re-generate the database and use pacman's '\--refresh' option.
For more information on the repo-add command, see ``repo-add \--help'' or
linkman:repo-add[8].
See Also
--------
linkman:pacman[8], linkman:libalpm[3]
include::footer.txt[]

51
doc/repo-add.8.txt Normal file
View File

@@ -0,0 +1,51 @@
/////
vim:set ts=4 sw=4 syntax=asciidoc noet:
/////
repo-add(8)
==========
Name
----
////
* If we use this below line, the manpage name comes out all weird. We also
* can't use two separate lines, which is quite annoying. *
repo-add, repo-remove - package database maintenance utilities
////
repo-add - package database maintenance utility
Synopsis
--------
repo-add <path-to-db> [--force] <package> ...
repo-remove <path-to-db> <packagename> ...
Description
-----------
repo-add and repo-remove are two scripts to help build a package database for
packages built with linkman:makepkg[8] and installed with linkman:pacman[8].
repo-add will update a package database by reading a built package file.
Multiple packages to add can be specified on the command line.
repo-remove will update a package database by removing the package name
specified on the command line. Multiple packages to remove can be specified
on the command line.
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.
See Also
--------
linkman:makepkg[8], linkman:pacman[8]
include::footer.txt[]

View File

@@ -1,4 +1,2 @@
Makefile
Makefile.in
makepkg.conf
pacman.conf

View File

@@ -1,4 +1,30 @@
SUBDIRS = pacman.d abs
EXTRA_DIST = makepkg.conf pacman.conf
dist_sysconf_DATA = makepkg.conf pacman.conf
EXTRA_DIST = makepkg.conf.in pacman.conf.in
# Files that should be removed, but which Automake does not know.
MOSTLYCLEANFILES = $(dist_sysconf_DATA)
#### Taken from the autoconf scripts Makefile.am ####
edit = sed \
-e 's|@sysconfdir[@]|$(sysconfdir)|g' \
-e 's|@localstatedir[@]|$(localstatedir)|g' \
-e 's|@prefix[@]|$(prefix)|g' \
-e 's|@PACKAGE_VERSION[@]|$(PACKAGE_VERSION)|g' \
-e 's|@PACKAGE_NAME[@]|$(PACKAGE_NAME)|g' \
-e 's|@PKGEXT[@]|$(PKGEXT)|g' \
-e 's|@SRCEXT[@]|$(SRCEXT)|g' \
-e 's|@CARCH[@]|$(CARCH)|g' \
-e 's|@CHOST[@]|$(CHOST)|g' \
-e 's|@ARCHSWITCH[@]|$(ARCHSWITCH)|g' \
-e 's|@CARCHFLAGS[@]|$(CARCHFLAGS)|g' \
-e 's|@ROOTDIR[@]|$(ROOTDIR)|g'
$(dist_sysconf_DATA): Makefile
rm -f $@ $@.tmp
$(edit) `test -f ./$@.in || echo $(srcdir)/`$@.in >$@.tmp
mv $@.tmp $@
makepkg.conf: $(srcdir)/makepkg.conf.in
pacman.conf: $(srcdir)/pacman.conf.in
# vim:set ts=2 sw=2 noet:

View File

@@ -1,2 +0,0 @@
Makefile
Makefile.in

View File

@@ -1,17 +0,0 @@
EXTRA_DIST = abs.conf \
supfile.arch \
supfile.community \
supfile.extra \
supfile.testing \
supfile.unstable
install-data-hook:
mkdir -p $(DESTDIR)$(sysconfdir)/abs ; \
for j in $(EXTRA_DIST); do \
$(INSTALL) -c -m 644 $(srcdir)/$$j $(DESTDIR)$(sysconfdir)/abs/$$j ; \
done
uninstall-hook:
for j in $(EXTRA_DIST); do \
rm -f $(DESTDIR)$(sysconfdir)/abs/$$j ; \
done

View File

@@ -1,13 +0,0 @@
#
# /etc/abs/abs.conf
#
# the top-level directory of all your PKGBUILDs
[ "$ABSROOT" = "" ] && ABSROOT="/var/abs/"
#
# Supfiles to be parsed by abs (in this order)
# (prefix a module with a ! to disable it)
#
SUPFILES=(arch extra !unstable !community !testing)

View File

@@ -1,15 +0,0 @@
#
# /etc/abs/supfile.arch
#
# this is the host containing the current PKGBUILD files
*default host=cvs.archlinux.org
*default release=cvs
*default delete
*default use-rel-suffix
*default compress
#*default umask=002
*default tag=CURRENT
arch

View File

@@ -1,15 +0,0 @@
#
# /etc/abs/supfile.community
#
# this is the host containing the community PKGBUILD files
*default host=cvs.archlinux.org
*default release=cvs
*default delete
*default use-rel-suffix
*default compress
#*default umask=002
*default tag=CURRENT
community

View File

@@ -1,15 +0,0 @@
#
# /etc/abs/supfile.extra
#
# this is the host containing the extra PKGBUILD files
*default host=cvs.archlinux.org
*default release=cvs
*default delete
*default use-rel-suffix
*default compress
#*default umask=002
*default tag=CURRENT
extra

View File

@@ -1,16 +0,0 @@
#
# /etc/abs/supfile.testing
#
# this is the host containing the testing PKGBUILD files
*default host=cvs.archlinux.org
*default release=cvs
*default delete
*default use-rel-suffix
*default compress
#*default umask=002
*default tag=TESTING
arch
extra

View File

@@ -1,15 +0,0 @@
#
# /etc/abs/supfile.unstable
#
# this is the host containing the unstable PKGBUILD files
*default host=cvs.archlinux.org
*default release=cvs
*default delete
*default use-rel-suffix
*default compress
#*default umask=002
*default tag=CURRENT
unstable

View File

@@ -1,15 +1,23 @@
#
# /etc/makepkg.conf
# @sysconfdir@/makepkg.conf
#
#########################################################################
# SOURCE ACQUISITION
#########################################################################
#
#-- The FTP/HTTP download utility that makepkg should use to acquire sources
FTPAGENT="/usr/bin/wget --continue --passive-ftp --tries=3 --waitretry=3 --no-check-certificate"
#FTPAGENT="/usr/bin/snarf"
#FTPAGENT="/usr/bin/lftpget -c"
#-- 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')
# Other common tools:
# /usr/bin/snarf
# /usr/bin/lftpget -c
# /usr/bin/curl
#########################################################################
# ARCHITECTURE, COMPILE FLAGS
@@ -19,10 +27,10 @@ CARCH="@CARCH@"
CHOST="@CHOST@"
#-- Exclusive: will only run on @CARCHFLAGS@
# -mtune builds exclusively for an architecture
# -mcpu optimizes for an architecture, but builds for the whole processor family
CFLAGS="-@ARCHSWITCH@=@CARCHFLAGS@ -O2 -pipe"
CXXFLAGS="-@ARCHSWITCH@=@CARCHFLAGS@ -O2 -pipe"
# -march (or -mcpu) builds exclusively for an architecture
# -mtune optimizes for an architecture, but builds for whole processor family
CFLAGS="@CARCHFLAGS@-mtune=generic -O2 -pipe"
CXXFLAGS="@CARCHFLAGS@-mtune=generic -O2 -pipe"
#-- Make Flags: change this for DistCC/SMP systems
#MAKEFLAGS="-j2"
@@ -30,14 +38,16 @@ CXXFLAGS="-@ARCHSWITCH@=@CARCHFLAGS@ -O2 -pipe"
# BUILD ENVIRONMENT
#########################################################################
#
# Defaults: BUILDENV=(!fakeroot !distcc color !ccache)
# Defaults: BUILDENV=(fakeroot !distcc color !ccache !xdelta)
# A negated environment option will do the opposite of the comments below.
#
#-- fakeroot: Allow building packages as a non-root user
#-- distcc: Use the Distributed C/C++/ObjC compiler
#-- color: Colorize output messages
#-- ccache: Use ccache to cache compilation
#-- xdelta: Generate delta patch from previous to current package
#
BUILDENV=(fakeroot !distcc color !ccache)
BUILDENV=(fakeroot !distcc color !ccache !xdelta)
#
#-- If using DistCC, your MAKEFLAGS will also need modification. In addition,
#-- specify a space-delimited list of hosts running in the DistCC cluster.
@@ -48,7 +58,8 @@ BUILDENV=(fakeroot !distcc color !ccache)
# These are default values for the options=() settings
#########################################################################
#
# Default: OPTIONS=(strip !docs !libtool emptydirs)
# Default: OPTIONS=(strip !docs libtool emptydirs)
# A negated option will do the opposite of the comments below.
#
#-- strip: Strip symbols from binaries/libraries
#-- docs: Save doc and info directories
@@ -60,7 +71,7 @@ OPTIONS=(strip !docs libtool emptydirs)
#-- 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})
#########################################################################
# PACKAGE OUTPUT
@@ -72,7 +83,22 @@ DOC_DIRS=(usr/{,share/}{info,doc,gtk-doc} opt/gnome/{,share/}{info,doc,gtk-doc})
#PKGDEST=/home/packages
#-- Source cache: specify a fixed directory where source files will be cached
#SRCDEST=/home/sources
#-- Source root: specify location where PKGBUILDs are located for '--builddeps'
#SRCROOT=/home/pkgbuilds
#-- Packager: name/email of the person or organization building packages
#PACKAGER="John Doe <john@doe.com>"
#########################################################################
# BUILDSCRIPT/EXTENSION DEFAULTS
#########################################################################
#
# WARNING: Do NOT modify these variables unless you know what you are
# doing.
#
BUILDSCRIPT='PKGBUILD'
PKGEXT='@PKGEXT@'
SRCEXT='@SRCEXT@'
DB_COMPRESSION='gz'
DB_CHECKSUMS=(md5)
# vim: set ft=sh ts=2 sw=2 et:

View File

@@ -1,13 +1,18 @@
#
# /etc/pacman.conf
# @sysconfdir@/pacman.conf
#
# See the pacman manpage for option directives
# See the pacman.conf(5) manpage for option and repository directives
#
# GENERAL OPTIONS
#
[options]
LogFile = /var/log/pacman.log
# The following paths are commented out with their default values listed.
# If you wish to use different paths, uncomment and update the paths.
#RootDir = @ROOTDIR@
#DBPath = @localstatedir@/lib/pacman/
#CacheDir = @localstatedir@/cache/pacman/pkg/
#LogFile = @localstatedir@/log/pacman.log
HoldPkg = pacman glibc
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
@@ -18,25 +23,25 @@ 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 = /etc/pacman.d/testing
[current]
# Add your preferred servers here, they will be used first
Include = /etc/pacman.d/current
[extra]
# Add your preferred servers here, they will be used first
Include = /etc/pacman.d/extra
[community]
# Add your preferred servers here, they will be used first
Include = /etc/pacman.d/community
#[unstable]
# Add your preferred servers here, they will be used first
#Include = /etc/pacman.d/unstable
# 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
# tips on creating your own repositories.

View File

@@ -1,9 +0,0 @@
Makefile
Makefile.in
community
current
extra
mirrorlist
release
unstable
testing

View File

@@ -1,9 +0,0 @@
pkgsysconfdir = ${sysconfdir}/pacman.d
dist_pkgsysconf_DATA = community current extra release testing unstable
$(dist_pkgsysconf_DATA): mirrorlist
sed "s|@@REPO@@|$@|g" <$< >$@
clean-local:
rm -f $(dist_pkgsysconf_DATA)

View File

@@ -1,69 +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://ftp-linux.cc.gatech.edu/pub/linux/distributions/archlinux/@@REPO@@/os/@CARCH@
Server = ftp://mirror.cs.vt.edu/pub/ArchLinux/@@REPO@@/os/@CARCH@
Server = ftp://ftp.ibiblio.org/pub/linux/distributions/archlinux/@@REPO@@/os/@CARCH@
# Europe
# - Austria
Server = ftp://gd.tuwien.ac.at/opsys/linux/archlinux/@@REPO@@/os/@CARCH@
# - Belgium
Server = ftp://ftp.belnet.be/packages/archlinux/@@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://ftp.rez-gif.supelec.fr/pub/Linux/distrib/archlinux/@@REPO@@/os/@CARCH@
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@
# - 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@
# - Great Britain
Server = http://ftp.parrswood.manchester.sch.uk/Mirrors/ftp.archlinux.org/@@REPO@@/os/@CARCH@
# - Greece
Server = ftp://ftp.ntua.gr/pub/linux/archlinux/@@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@
# - Lithuania
Server = ftp://saule.mintis.lt/pub/linux/@@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@
# - Norway
Server = ftp://mirror.djzradio.net/archlinux/@@REPO@@/os/@CARCH@
# - Poland
Server = ftp://sunsite.icm.edu.pl/site/linux-sunsite/distributions/archlinux/@@REPO@@/os/@CARCH@
Server = ftp://mirror.icis.pcz.pl/archlinux/@@REPO@@/os/@CARCH@
# - Portugal
Server = ftp://gul.est.ips.pt/repos/archlinux/@@REPO@@/os/@CARCH@
Server = ftp://cesium.di.uminho.pt/pub/archlinux/@@REPO@@/os/@CARCH@
Server = ftp://darkstar.ist.utl.pt/pub/archlinux/@@REPO@@/os/@CARCH@
# - Romania
Server = ftp://ftp.iasi.roedu.net/mirrors/archlinux.org/@@REPO@@/os/@CARCH@
# - Russia
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 = ftp://ftp.linux.org.tr/pub/archlinux/@@REPO@@/os/@CARCH@
# - Ukraine
Server = ftp://ftp.linux.kiev.ua/pub/Linux/ArchLinux/@@REPO@@/os/@CARCH@
# Australia
Server = ftp://mirror.pacific.net.au/linux/archlinux/@@REPO@@/os/@CARCH@

View File

@@ -1,6 +1,4 @@
.deps
.libs
Makefile
Makefile.in
*.lo
*.la

View File

@@ -5,12 +5,16 @@ SUBDIRS = po
lib_LTLIBRARIES = libalpm.la
include_HEADERS = alpm_list.h alpm.h
localedir = $(datadir)/locale
DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@
DEFS = -DLOCALEDIR=\"@localedir@\" @DEFS@
AM_CFLAGS = -fvisibility=hidden -pedantic -D_GNU_SOURCE
AM_CFLAGS = -pedantic -D_GNU_SOURCE
EXTRA_DIST = Doxyfile
if ENABLE_VISIBILITY_CC
AM_CFLAGS += -fvisibility=internal
endif
if ENABLE_GNU89_INLINE_CC
AM_CFLAGS += -fgnu89-inline
endif
libalpm_la_SOURCES = \
add.h add.c \
@@ -21,30 +25,20 @@ libalpm_la_SOURCES = \
cache.h cache.c \
conflict.h conflict.c \
db.h db.c \
delta.h delta.c \
deps.h deps.c \
error.h error.c \
group.h group.c \
handle.h handle.c \
log.h log.c \
md5.h md5.c \
md5driver.c \
package.h package.c \
provide.h provide.c \
remove.h remove.c \
server.h server.c \
sha1.h sha1.c \
sync.h sync.c \
trans.h trans.c \
util.h util.c \
versioncmp.h versioncmp.c
util.h util.c
libalpm_la_LDFLAGS = -no-undefined -version-info $(LIB_VERSION_INFO)
libalpm_la_LIBADD = -larchive -ldownload -lm
if HAS_DOXYGEN
all: doxygen.in
doxygen.in:
doxygen $(srcdir)/Doxyfile
endif
# vim:set ts=2 sw=2 noet:

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,8 @@
/*
* add.h
*
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
*
* Copyright (c) 2002-2007 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
@@ -14,9 +14,7 @@
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _ALPM_ADD_H
#define _ALPM_ADD_H

File diff suppressed because it is too large Load Diff

View File

@@ -1,11 +1,11 @@
/*
* alpm.h
*
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* 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) 2005, 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
@@ -17,9 +17,7 @@
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _ALPM_H
#define _ALPM_H
@@ -29,28 +27,23 @@ extern "C" {
#endif
#include <time.h> /* for time_t */
#include <stdarg.h> /* for va_list */
#include <alpm_list.h>
#define DEPRECATED __attribute__((deprecated))
/*
* Arch Linux Package Management library
*/
#define PM_ROOT "/"
#define PM_DBPATH "var/lib/pacman/"
#define PM_CACHEDIR "var/cache/pacman/pkg/"
#define PM_LOCK "tmp/pacman.lck"
#define PM_EXT_PKG ".pkg.tar.gz"
#define PM_EXT_DB ".db.tar.gz"
/*
/*
* Structures
*/
typedef struct __alpm_list_t alpm_list_t;
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;
@@ -58,12 +51,14 @@ 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
*/
int alpm_initialize();
int alpm_initialize(void);
int alpm_release(void);
/*
@@ -75,18 +70,18 @@ typedef enum _pmloglevel_t {
PM_LOG_ERROR = 0x01,
PM_LOG_WARNING = 0x02,
PM_LOG_DEBUG = 0x04,
PM_LOG_DOWNLOAD = 0x08,
PM_LOG_FUNCTION = 0x10
PM_LOG_FUNCTION = 0x08
} pmloglevel_t;
typedef void (*alpm_cb_log)(unsigned short, char *);
typedef void (*alpm_cb_log)(pmloglevel_t, char *, va_list);
int alpm_logaction(char *fmt, ...);
/*
* Downloading
*/
typedef void (*alpm_cb_download)(const char *filename, int xfered, int total);
typedef void (*alpm_cb_download)(const char *filename, int file_xfered,
int file_total, int list_xfered, int list_total);
/*
* Options
@@ -100,58 +95,57 @@ 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);
unsigned short alpm_option_get_logmask();
void alpm_option_set_logmask(unsigned short mask);
const char *alpm_option_get_root();
void alpm_option_set_root(const char *root);
int alpm_option_set_root(const char *root);
const char *alpm_option_get_dbpath();
void alpm_option_set_dbpath(const char *dbpath);
int alpm_option_set_dbpath(const char *dbpath);
const char *alpm_option_get_cachedir();
void alpm_option_set_cachedir(const char *cachedir);
alpm_list_t *alpm_option_get_cachedirs();
int alpm_option_add_cachedir(const char *cachedir);
void alpm_option_set_cachedirs(alpm_list_t *cachedirs);
int alpm_option_remove_cachedir(const char *cachedir);
const char *alpm_option_get_logfile();
void alpm_option_set_logfile(const char *logfile);
int alpm_option_set_logfile(const char *logfile);
const char *alpm_option_get_lockfile();
/* no set_lockfile, path is determined from dbpath */
unsigned short alpm_option_get_usesyslog();
void alpm_option_set_usesyslog(unsigned short usesyslog);
alpm_list_t *alpm_option_get_noupgrades();
void alpm_option_add_noupgrade(char *pkg);
void alpm_option_add_noupgrade(const char *pkg);
void alpm_option_set_noupgrades(alpm_list_t *noupgrade);
int alpm_option_remove_noupgrade(const char *pkg);
alpm_list_t *alpm_option_get_noextracts();
void alpm_option_add_noextract(char *pkg);
void alpm_option_add_noextract(const char *pkg);
void alpm_option_set_noextracts(alpm_list_t *noextract);
int alpm_option_remove_noextract(const char *pkg);
alpm_list_t *alpm_option_get_ignorepkgs();
void alpm_option_add_ignorepkg(char *pkg);
void alpm_option_add_ignorepkg(const char *pkg);
void alpm_option_set_ignorepkgs(alpm_list_t *ignorepkgs);
int alpm_option_remove_ignorepkg(const char *pkg);
alpm_list_t *alpm_option_get_holdpkgs();
void alpm_option_add_holdpkg(char *pkg);
void alpm_option_add_holdpkg(const char *pkg);
void alpm_option_set_holdpkgs(alpm_list_t *holdpkgs);
int alpm_option_remove_holdpkg(const char *pkg);
time_t alpm_option_get_upgradedelay();
void alpm_option_set_upgradedelay(time_t delay);
alpm_list_t *alpm_option_get_ignoregrps();
void alpm_option_add_ignoregrp(const char *grp);
void alpm_option_set_ignoregrps(alpm_list_t *ignoregrps);
int alpm_option_remove_ignoregrp(const char *grp);
const char *alpm_option_get_xfercommand();
void alpm_option_set_xfercommand(const char *cmd);
unsigned short alpm_option_get_nopassiveftp();
void alpm_option_set_nopassiveftp(unsigned short nopasv);
unsigned short alpm_option_get_chomp();
void alpm_option_set_chomp(unsigned short chomp);
alpm_list_t *alpm_option_get_needles();
void alpm_option_add_needle(char *needle);
void alpm_option_set_needles(alpm_list_t *needles);
unsigned short alpm_option_get_usecolor();
void alpm_option_set_usecolor(unsigned short usecolor);
void alpm_option_set_usedelta(unsigned short usedelta);
pmdb_t *alpm_option_get_localdb();
alpm_list_t *alpm_option_get_syncdbs();
@@ -160,14 +154,14 @@ alpm_list_t *alpm_option_get_syncdbs();
* Databases
*/
/* Database registration callback */
typedef void (*alpm_cb_db_register)(const char *, pmdb_t *);
pmdb_t *alpm_db_register(char *treename);
/* Preferred interfaces db_register_local and db_register_sync */
pmdb_t *alpm_db_register_local(void);
pmdb_t *alpm_db_register_sync(const char *treename);
int alpm_db_unregister(pmdb_t *db);
int alpm_db_unregister_all(void);
const char *alpm_db_get_name(pmdb_t *db);
const char *alpm_db_get_url(pmdb_t *db);
const char *alpm_db_get_name(const pmdb_t *db);
const char *alpm_db_get_url(const pmdb_t *db);
int alpm_db_setserver(pmdb_t *db, const char *url);
@@ -179,7 +173,7 @@ 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);
alpm_list_t *alpm_db_search(pmdb_t *db, alpm_list_t* needles);
alpm_list_t *alpm_db_search(pmdb_t *db, const alpm_list_t* needles);
/*
* Packages
@@ -193,35 +187,22 @@ typedef enum _pmpkgreason_t {
PM_PKG_REASON_DEPEND = 1 /* installed as a dependency for another package */
} pmpkgreason_t;
/* package name formats */
/*
typedef enum _pmpkghasarch_t {
PM_PKG_WITHOUT_ARCH = 0, / pkgname-pkgver-pkgrel, used under PM_DBPATH /
PM_PKG_WITH_ARCH = 1 / pkgname-pkgver-pkgrel-arch, used under PM_CACHEDIR /
} pmpkghasarch_t;
*/
int alpm_pkg_load(char *filename, pmpkg_t **pkg);
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);
int alpm_pkg_checksha1sum(pmpkg_t *pkg);
char *alpm_fetch_pkgurl(char *url);
int alpm_parse_config(char *file, alpm_cb_db_register callback,
const char *this_section);
char *alpm_fetch_pkgurl(const char *url);
int alpm_pkg_vercmp(const char *ver1, const char *ver2);
char *alpm_pkg_name_hasarch(char *pkgname);
alpm_list_t *alpm_pkg_compute_requiredby(pmpkg_t *pkg);
const char *alpm_pkg_get_filename(pmpkg_t *pkg);
const char *alpm_pkg_get_name(pmpkg_t *pkg);
const char *alpm_pkg_get_version(pmpkg_t *pkg);
const char *alpm_pkg_get_desc(pmpkg_t *pkg);
const char *alpm_pkg_get_url(pmpkg_t *pkg);
const char *alpm_pkg_get_builddate(pmpkg_t *pkg);
const char *alpm_pkg_get_buildtype(pmpkg_t *pkg);
const char *alpm_pkg_get_installdate(pmpkg_t *pkg);
time_t alpm_pkg_get_builddate(pmpkg_t *pkg);
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_sha1sum(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);
@@ -229,20 +210,37 @@ 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);
alpm_list_t *alpm_pkg_get_depends(pmpkg_t *pkg);
alpm_list_t *alpm_pkg_get_removes(pmpkg_t *pkg);
alpm_list_t *alpm_pkg_get_requiredby(pmpkg_t *pkg);
alpm_list_t *alpm_pkg_get_optdepends(pmpkg_t *pkg);
alpm_list_t *alpm_pkg_get_conflicts(pmpkg_t *pkg);
alpm_list_t *alpm_pkg_get_provides(pmpkg_t *pkg);
alpm_list_t *alpm_pkg_get_deltas(pmpkg_t *pkg);
alpm_list_t *alpm_pkg_get_replaces(pmpkg_t *pkg);
alpm_list_t *alpm_pkg_get_files(pmpkg_t *pkg);
alpm_list_t *alpm_pkg_get_backup(pmpkg_t *pkg);
void *alpm_pkg_changelog_open(pmpkg_t *pkg);
size_t alpm_pkg_changelog_read(void *ptr, size_t size,
const pmpkg_t *pkg, const void *fp);
/*int alpm_pkg_changelog_feof(const pmpkg_t *pkg, void *fp);*/
int alpm_pkg_changelog_close(const pmpkg_t *pkg, void *fp);
unsigned short alpm_pkg_has_scriptlet(pmpkg_t *pkg);
unsigned long alpm_pkg_download_size(pmpkg_t *newpkg, pmdb_t *db_local);
/*
* Deltas
*/
const char *alpm_delta_get_from(pmdelta_t *delta);
const char *alpm_delta_get_to(pmdelta_t *delta);
unsigned long alpm_delta_get_size(pmdelta_t *delta);
const char *alpm_delta_get_filename(pmdelta_t *delta);
const char *alpm_delta_get_md5sum(pmdelta_t *delta);
/*
* Groups
*/
const char *alpm_grp_get_name(pmgrp_t *grp);
alpm_list_t *alpm_grp_get_pkgs(pmgrp_t *grp);
const char *alpm_grp_get_name(const pmgrp_t *grp);
const alpm_list_t *alpm_grp_get_pkgs(const pmgrp_t *grp);
/*
* Sync
@@ -255,9 +253,11 @@ typedef enum _pmsynctype_t {
PM_SYNC_TYPE_DEPEND
} pmsynctype_t;
pmsynctype_t alpm_sync_get_type(pmsyncpkg_t *sync);
pmpkg_t *alpm_sync_get_pkg(pmsyncpkg_t *sync);
void *alpm_sync_get_data(pmsyncpkg_t *sync);
pmsynctype_t alpm_sync_get_type(const pmsyncpkg_t *sync);
pmpkg_t *alpm_sync_get_pkg(const pmsyncpkg_t *sync);
void *alpm_sync_get_data(const pmsyncpkg_t *sync);
int alpm_sync_sysupgrade(pmdb_t *db_local,
alpm_list_t *dbs_sync, alpm_list_t **syncpkgs);
/*
* Transactions
@@ -267,6 +267,7 @@ void *alpm_sync_get_data(pmsyncpkg_t *sync);
typedef enum _pmtranstype_t {
PM_TRANS_TYPE_ADD = 1,
PM_TRANS_TYPE_REMOVE,
PM_TRANS_TYPE_REMOVEUPGRADE,
PM_TRANS_TYPE_UPGRADE,
PM_TRANS_TYPE_SYNC
} pmtranstype_t;
@@ -276,7 +277,7 @@ typedef enum _pmtransflag_t {
PM_TRANS_FLAG_NODEPS = 0x01,
PM_TRANS_FLAG_FORCE = 0x02,
PM_TRANS_FLAG_NOSAVE = 0x04,
PM_TRANS_FLAG_FRESHEN = 0x08,
/* 0x08 flag can go here */
PM_TRANS_FLAG_CASCADE = 0x10,
PM_TRANS_FLAG_RECURSE = 0x20,
PM_TRANS_FLAG_DBONLY = 0x40,
@@ -285,7 +286,8 @@ typedef enum _pmtransflag_t {
PM_TRANS_FLAG_DOWNLOADONLY = 0x200,
PM_TRANS_FLAG_NOSCRIPTLET = 0x400,
PM_TRANS_FLAG_NOCONFLICTS = 0x800,
PM_TRANS_FLAG_PRINTURIS = 0x1000
PM_TRANS_FLAG_PRINTURIS = 0x1000,
PM_TRANS_FLAG_NEEDED = 0x2000
} pmtransflag_t;
/* Transaction Events */
@@ -294,8 +296,6 @@ typedef enum _pmtransevt_t {
PM_TRANS_EVT_CHECKDEPS_DONE,
PM_TRANS_EVT_FILECONFLICTS_START,
PM_TRANS_EVT_FILECONFLICTS_DONE,
PM_TRANS_EVT_CLEANUP_START,
PM_TRANS_EVT_CLEANUP_DONE,
PM_TRANS_EVT_RESOLVEDEPS_START,
PM_TRANS_EVT_RESOLVEDEPS_DONE,
PM_TRANS_EVT_INTERCONFLICTS_START,
@@ -309,9 +309,14 @@ typedef enum _pmtransevt_t {
PM_TRANS_EVT_EXTRACT_DONE,
PM_TRANS_EVT_INTEGRITY_START,
PM_TRANS_EVT_INTEGRITY_DONE,
PM_TRANS_EVT_DELTA_INTEGRITY_START,
PM_TRANS_EVT_DELTA_INTEGRITY_DONE,
PM_TRANS_EVT_DELTA_PATCHES_START,
PM_TRANS_EVT_DELTA_PATCHES_DONE,
PM_TRANS_EVT_DELTA_PATCH_START,
PM_TRANS_EVT_DELTA_PATCH_DONE,
PM_TRANS_EVT_DELTA_PATCH_FAILED,
PM_TRANS_EVT_SCRIPTLET_INFO,
PM_TRANS_EVT_SCRIPTLET_START,
PM_TRANS_EVT_SCRIPTLET_DONE,
PM_TRANS_EVT_PRINTURI,
PM_TRANS_EVT_RETRIEVE_START,
} pmtransevt_t;
@@ -323,7 +328,7 @@ typedef enum _pmtransconv_t {
PM_TRANS_CONV_CONFLICT_PKG = 0x04,
PM_TRANS_CONV_CORRUPTED_PKG = 0x08,
PM_TRANS_CONV_LOCAL_NEWER = 0x10,
PM_TRANS_CONV_LOCAL_UPTODATE = 0x20,
/* 0x20 flag can go here */
PM_TRANS_CONV_REMOVE_HOLDPKG = 0x40
} pmtransconv_t;
@@ -356,6 +361,7 @@ int alpm_trans_sysupgrade(void);
int alpm_trans_addtarget(char *target);
int alpm_trans_prepare(alpm_list_t **data);
int alpm_trans_commit(alpm_list_t **data);
int alpm_trans_interrupt(void);
int alpm_trans_release(void);
/*
@@ -366,44 +372,47 @@ typedef enum _pmdepmod_t {
PM_DEP_MOD_ANY = 1,
PM_DEP_MOD_EQ,
PM_DEP_MOD_GE,
PM_DEP_MOD_LE
PM_DEP_MOD_LE,
PM_DEP_MOD_GT,
PM_DEP_MOD_LT
} pmdepmod_t;
typedef enum _pmdeptype_t {
PM_DEP_TYPE_DEPEND = 1,
PM_DEP_TYPE_CONFLICT
} pmdeptype_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);
const char *alpm_dep_get_target(pmdepmissing_t *miss);
pmdeptype_t alpm_dep_get_type(pmdepmissing_t *miss);
pmdepmod_t alpm_dep_get_mod(pmdepmissing_t *miss);
const char *alpm_dep_get_name(pmdepmissing_t *miss);
const char *alpm_dep_get_version(pmdepmissing_t *miss);
const char *alpm_miss_get_target(const pmdepmissing_t *miss);
pmdepend_t *alpm_miss_get_dep(pmdepmissing_t *miss);
const char *alpm_conflict_get_package1(pmconflict_t *conflict);
const char *alpm_conflict_get_package2(pmconflict_t *conflict);
pmdepmod_t alpm_dep_get_mod(const pmdepend_t *dep);
const char *alpm_dep_get_name(const pmdepend_t *dep);
const char *alpm_dep_get_version(const pmdepend_t *dep);
char *alpm_dep_get_string(const pmdepend_t *dep);
/*
* File conflicts
*/
typedef enum _pmconflicttype_t {
PM_CONFLICT_TYPE_TARGET = 1,
PM_CONFLICT_TYPE_FILE
} pmconflicttype_t;
typedef enum _pmfileconflicttype_t {
PM_FILECONFLICT_TARGET = 1,
PM_FILECONFLICT_FILESYSTEM
} pmfileconflicttype_t;
const char *alpm_conflict_get_target(pmconflict_t *conflict);
pmconflicttype_t alpm_conflict_get_type(pmconflict_t *conflict);
const char *alpm_conflict_get_file(pmconflict_t *conflict);
const char *alpm_conflict_get_ctarget(pmconflict_t *conflict);
const char *alpm_fileconflict_get_target(pmfileconflict_t *conflict);
pmfileconflicttype_t alpm_fileconflict_get_type(pmfileconflict_t *conflict);
const char *alpm_fileconflict_get_file(pmfileconflict_t *conflict);
const char *alpm_fileconflict_get_ctarget(pmfileconflict_t *conflict);
/*
* Helpers
*/
/* md5sums */
char *alpm_get_md5sum(char *name);
char *alpm_get_sha1sum(char *name);
/* checksums */
char *alpm_get_md5sum(const char *name);
/*
* Errors
@@ -413,6 +422,7 @@ enum _pmerrno_t {
PM_ERR_SYSTEM,
PM_ERR_BADPERMS,
PM_ERR_NOT_A_FILE,
PM_ERR_NOT_A_DIR,
PM_ERR_WRONG_ARGS,
/* Interface */
PM_ERR_HANDLE_NULL,
@@ -455,6 +465,9 @@ enum _pmerrno_t {
PM_ERR_PKG_INVALID_NAME,
PM_ERR_PKG_CORRUPTED,
PM_ERR_PKG_REPO_NOT_FOUND,
/* Deltas */
PM_ERR_DLT_CORRUPTED,
PM_ERR_DLT_PATCHFAILED,
/* Groups */
PM_ERR_GRP_NOT_FOUND,
/* Dependencies */
@@ -465,15 +478,9 @@ enum _pmerrno_t {
PM_ERR_USER_ABORT,
PM_ERR_INTERNAL_ERROR,
PM_ERR_LIBARCHIVE_ERROR,
PM_ERR_DISK_FULL,
PM_ERR_DB_SYNC,
PM_ERR_RETRIEVE,
PM_ERR_PKG_HOLD,
/* Configuration file */
PM_ERR_CONF_BAD_SECTION,
PM_ERR_CONF_LOCAL,
PM_ERR_CONF_BAD_SYNTAX,
PM_ERR_CONF_DIRECTIVE_OUTSIDE_SECTION,
PM_ERR_INVALID_REGEX,
/* Downloading */
PM_ERR_CONNECT_FAILED,
@@ -482,9 +489,8 @@ enum _pmerrno_t {
extern enum _pmerrno_t pm_errno;
char *alpm_strerror(int err);
alpm_list_t *alpm_get_upgrades();
const char *alpm_strerror(int err);
const char *alpm_strerrorlast(void);
#ifdef __cplusplus
}

View File

@@ -1,8 +1,8 @@
/*
* alpm_list.c
*
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
*
* Copyright (c) 2002-2007 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
@@ -14,9 +14,7 @@
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
@@ -29,29 +27,41 @@
#include "alpm_list.h"
#include "util.h"
/** \defgroup alpm_list functions */
/*\@{*/
/**
* @addtogroup alpm_list List Functions
* @brief Functions to manipulate alpm_list_t lists.
*
* These functions are designed to create, destroy, and modify lists of
* type alpm_list_t. This is an internal list type used by libalpm that is
* publicly exposed for use by frontends if desired.
*
* @{ */
/* Allocation */
/** Allocate a new alpm_list_t
* @return a new alpm_list_t item, or NULL on failure
/**
* @brief Allocate a new alpm_list_t.
*
* @return a new alpm_list_t item, or NULL on failure
*/
alpm_list_t *alpm_list_new()
alpm_list_t SYMEXPORT *alpm_list_new()
{
alpm_list_t *list = NULL;
list = (alpm_list_t *)malloc(sizeof(alpm_list_t));
list = malloc(sizeof(alpm_list_t));
if(list) {
list->data = NULL;
list->prev = NULL;
list->prev = list; /* maintain a back reference to the tail pointer */
list->next = NULL;
}
return(list);
}
/** Free a list, but not the contained data
* @param list the list to free
/**
* @brief Free a list, but not the contained data.
*
* @param list the list to free
*/
void SYMEXPORT alpm_list_free(alpm_list_t *list)
{
@@ -64,9 +74,11 @@ void SYMEXPORT alpm_list_free(alpm_list_t *list)
}
}
/** Free the internal data of a list structure
* @param list the list to free
* @param fn a free function for the internal data
/**
* @brief Free the internal data of a list structure.
*
* @param list the list to free
* @param fn a free function for the internal data
*/
void SYMEXPORT alpm_list_free_inner(alpm_list_t *list, alpm_list_fn_free fn)
{
@@ -83,10 +95,13 @@ void SYMEXPORT alpm_list_free_inner(alpm_list_t *list, alpm_list_fn_free fn)
/* Mutators */
/** Add a new item to the list
* @param list the list to add to
* @param data the new item to be added to the list
* @return the resultant list, or NULL on failure
/**
* @brief Add a new item to the end of the list.
*
* @param list the list to add to
* @param data the new item to be added to the list
*
* @return the resultant list
*/
alpm_list_t SYMEXPORT *alpm_list_add(alpm_list_t *list, void *data)
{
@@ -110,6 +125,7 @@ alpm_list_t SYMEXPORT *alpm_list_add(alpm_list_t *list, void *data)
}
lp->next->prev = lp;
lp = lp->next;
list->prev = lp;
}
lp->data = data;
@@ -117,13 +133,16 @@ alpm_list_t SYMEXPORT *alpm_list_add(alpm_list_t *list, void *data)
return(ptr);
}
/** Add items to a list in sorted order.
* @param list the list to add to
* @param data the new item to be added to the list
* @param fn the comparison function to use to determine order
* @return the resultant list, or NULL on failure
/**
* @brief Add items to a list in sorted order.
*
* @param list the list to add to
* @param data the new item to be added to the list
* @param fn the comparison function to use to determine order
*
* @return the resultant list
*/
alpm_list_t *alpm_list_add_sorted(alpm_list_t *list, void *data, alpm_list_fn_cmp fn)
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);
@@ -153,21 +172,63 @@ alpm_list_t *alpm_list_add_sorted(alpm_list_t *list, void *data, alpm_list_fn_cm
} else {
list = add; /* At beginning, or new list */
}
if(next == NULL) {
/* At end, adjust tail pointer on head node */
list->prev = add;
}
return(list);
}
}
/** Merge the two sorted sublists into one sorted list
* @param left the first list
* @param right the second list
* @param fn comparison function for determining merge order
/**
* @brief Join two lists.
* The two lists must be independent. Do not free the original lists after
* calling this function, as this is not a copy operation. The list pointers
* passed in should be considered invalid after calling this function.
*
* @param first the first list
* @param second the second list
*
* @return the resultant joined list
*/
alpm_list_t *alpm_list_mmerge(alpm_list_t *left, alpm_list_t *right, alpm_list_fn_cmp fn)
alpm_list_t SYMEXPORT *alpm_list_join(alpm_list_t *first, alpm_list_t *second)
{
alpm_list_t *tmp;
if (first == NULL) {
return second;
}
if (second == NULL) {
return first;
}
/* tmp is the last element of the first list */
tmp = first->prev;
/* link the first list to the second */
tmp->next = second;
/* link the second list to the first */
first->prev = second->prev;
/* set the back reference to the tail */
second->prev = tmp;
return(first);
}
/**
* @brief Merge the two sorted sublists into one sorted list.
*
* @param left the first list
* @param right the second list
* @param fn comparison function for determining merge order
*
* @return the resultant list
*/
alpm_list_t SYMEXPORT *alpm_list_mmerge(alpm_list_t *left, alpm_list_t *right, alpm_list_fn_cmp fn)
{
alpm_list_t *newlist, *lp;
if (left == NULL)
if (left == NULL)
return right;
if (right == NULL)
return left;
@@ -189,7 +250,7 @@ alpm_list_t *alpm_list_mmerge(alpm_list_t *left, alpm_list_t *right, alpm_list_f
lp->next = left;
left->prev = lp;
left = left->next;
}
}
else {
lp->next = right;
right->prev = lp;
@@ -206,22 +267,35 @@ alpm_list_t *alpm_list_mmerge(alpm_list_t *left, alpm_list_t *right, alpm_list_f
lp->next = right;
right->prev = lp;
}
/* Find our tail pointer
* TODO maintain this in the algorithm itself */
lp = newlist;
while(lp && lp->next) {
lp = lp->next;
}
newlist->prev = lp;
return(newlist);
}
/** Sort a list of size `n` using mergesort algorithm
* @param list the list to sort
* @param n the size of the list
* @param fn the comparison function for determining order
/**
* @brief Sort a list of size `n` using mergesort algorithm.
*
* @param list the list to sort
* @param n the size of the list
* @param fn the comparison function for determining order
*
* @return the resultant list
*/
alpm_list_t* alpm_list_msort(alpm_list_t *list, int n, alpm_list_fn_cmp fn)
alpm_list_t SYMEXPORT *alpm_list_msort(alpm_list_t *list, int n, alpm_list_fn_cmp fn)
{
if (n > 1) {
alpm_list_t *left = list;
alpm_list_t *lastleft = alpm_list_nth(list, n/2 - 1);
alpm_list_t *right = lastleft->next;
/* terminate first list */
lastleft->next = NULL;
lastleft->next = NULL;
left = alpm_list_msort(left, n/2, fn);
right = alpm_list_msort(right, n - (n/2), fn);
@@ -230,15 +304,18 @@ alpm_list_t* alpm_list_msort(alpm_list_t *list, int n, alpm_list_fn_cmp fn)
return(list);
}
/** Remove an item from the list
* @param haystack the list to remove the item from
* @param needle the data member of the item we're removing
* @param fn the comparison function for searching
* @param data output parameter containing the data member of the item removed
* @return the resultant list, or NULL on failure
/**
* @brief Remove an item from the list.
*
* @param haystack the list to remove the item from
* @param needle the data member of the item we're removing
* @param fn the comparison function for searching
* @param data output parameter containing data of the removed item
*
* @return the resultant list
*/
alpm_list_t *alpm_list_remove(alpm_list_t *haystack, const void *needle, alpm_list_fn_cmp fn, void **data)
{ /* TODO I modified this to remove ALL matching items. Do we need a remove_first? */
alpm_list_t SYMEXPORT *alpm_list_remove(alpm_list_t *haystack, const void *needle, alpm_list_fn_cmp fn, void **data)
{
alpm_list_t *i = haystack, *tmp = NULL;
if(data) {
@@ -252,16 +329,31 @@ alpm_list_t *alpm_list_remove(alpm_list_t *haystack, const void *needle, alpm_li
tmp = i->next;
if(fn(needle, i->data) == 0) {
/* we found a matching item */
if(i->next) {
i->next->prev = i->prev;
}
if(i->prev) {
i->prev->next = i->next;
}
if(i == haystack) {
/* The item found is the first in the chain */
haystack = haystack->next;
/* Special case: removing the head node which has a back reference to
* the tail node */
haystack = i->next;
if(haystack) {
haystack->prev = i->prev;
}
i->prev = NULL;
} else if(i == haystack->prev) {
/* Special case: removing the tail node, so we need to fix the back
* reference on the head node. We also know tail != head. */
if(i->prev) {
/* i->next should always be null */
i->prev->next = i->next;
haystack->prev = i->prev;
i->prev = NULL;
}
} else {
/* Normal case, non-head and non-tail node */
if(i->next) {
i->next->prev = i->prev;
}
if(i->prev) {
i->prev->next = i->next;
}
}
if(data) {
@@ -269,48 +361,30 @@ alpm_list_t *alpm_list_remove(alpm_list_t *haystack, const void *needle, alpm_li
}
i->data = NULL;
free(i);
i = NULL;
} else {
i = tmp;
}
i = tmp;
}
return(haystack);
}
/** Remove the passed in node from the list that it is a part of
* @note this DOES NOT free the node
* @param node the list node we're removing
* @return the node which took the place of this one
/**
* @brief Create a new list without any duplicates.
*
* This does NOT copy data members.
*
* @param list the list to copy
*
* @return a new list containing non-duplicate items
*/
alpm_list_t *alpm_list_remove_node(alpm_list_t *node)
alpm_list_t SYMEXPORT *alpm_list_remove_dupes(const alpm_list_t *list)
{
if(!node) return(NULL);
alpm_list_t *ret = NULL;
if(node->prev) {
node->prev->next = node->next;
ret = node->prev;
node->prev = NULL;
}
if(node->next) {
node->next->prev = node->prev;
ret = node->next;
node->next = NULL;
}
return(ret);
}
/** Create a new list without any duplicates
* @note DOES NOT copy data members
* @param list the list to copy
* @return a NEW list containing non-duplicated items
*/
alpm_list_t SYMEXPORT *alpm_list_remove_dupes(alpm_list_t *list)
{ /* TODO does removing the strdup here cause invalid free's anywhere? */
alpm_list_t *lp = list, *newlist = NULL;
const alpm_list_t *lp = list;
alpm_list_t *newlist = NULL;
while(lp) {
if(!alpm_list_find(newlist, lp->data)) {
if(!alpm_list_find_ptr(newlist, lp->data)) {
newlist = alpm_list_add(newlist, lp->data);
}
lp = lp->next;
@@ -318,14 +392,17 @@ alpm_list_t SYMEXPORT *alpm_list_remove_dupes(alpm_list_t *list)
return(newlist);
}
/** Copy a string list, including data
* @note this is gross, assumes string data members
* @param list the list to copy
* @return a copy of the original list
/**
* @brief Copy a string list, including data.
*
* @param list the list to copy
*
* @return a copy of the original list
*/
alpm_list_t *alpm_list_strdup(alpm_list_t *list)
alpm_list_t SYMEXPORT *alpm_list_strdup(const alpm_list_t *list)
{
alpm_list_t *lp = list, *newlist = NULL;
const alpm_list_t *lp = list;
alpm_list_t *newlist = NULL;
while(lp) {
newlist = alpm_list_add(newlist, strdup(lp->data));
lp = lp->next;
@@ -333,15 +410,68 @@ alpm_list_t *alpm_list_strdup(alpm_list_t *list)
return(newlist);
}
/** Create a new list in reverse order
* @param list the list to copy
* @return a NEW list in reverse order of the first
/**
* @brief Copy a list, without copying data.
*
* @param list the list to copy
*
* @return a copy of the original list
*/
alpm_list_t *alpm_list_reverse(alpm_list_t *list)
{ /* TODO any invalid free's from NOT duplicating data here? */
alpm_list_t *lp, *newlist = NULL;
alpm_list_t SYMEXPORT *alpm_list_copy(const alpm_list_t *list)
{
const alpm_list_t *lp = list;
alpm_list_t *newlist = NULL;
while(lp) {
newlist = alpm_list_add(newlist, lp->data);
lp = lp->next;
}
return(newlist);
}
/**
* @brief Copy a list and copy the data.
* Note that the data elements to be copied should not contain pointers
* and should also be of constant size.
*
* @param list the list to copy
* @param size the size of each data element
*
* @return a copy of the original list, data copied as well
*/
alpm_list_t SYMEXPORT *alpm_list_copy_data(const alpm_list_t *list,
size_t size)
{
const alpm_list_t *lp = list;
alpm_list_t *newlist = NULL;
while(lp) {
void *newdata = calloc(1, size);
if(newdata) {
memcpy(newdata, lp->data, size);
newlist = alpm_list_add(newlist, newdata);
lp = lp->next;
}
}
return(newlist);
}
/**
* @brief Create a new list in reverse order.
*
* @param list the list to copy
*
* @return a new list in reverse order
*/
alpm_list_t SYMEXPORT *alpm_list_reverse(alpm_list_t *list)
{
const alpm_list_t *lp;
alpm_list_t *newlist = NULL;
lp = alpm_list_last(list);
if(list) {
/* break our reverse circular list */
list->prev = NULL;
}
while(lp) {
newlist = alpm_list_add(newlist, lp->data);
lp = lp->prev;
@@ -351,65 +481,84 @@ alpm_list_t *alpm_list_reverse(alpm_list_t *list)
/* Accessors */
/** Get the first element of a list.
/**
* @brief Get the first element of a list.
*
* @param list the list
*
* @return the first element in the list
*/
alpm_list_t SYMEXPORT *alpm_list_first(alpm_list_t *list)
inline alpm_list_t SYMEXPORT *alpm_list_first(const alpm_list_t *list)
{
return(list);
return((alpm_list_t*)list);
}
/** Return nth element from list (starting with 0)
* @param list the list to access
* @param n the index of the item to find
* @return an alpm_list_t node for index `n`
/**
* @brief Return nth element from list (starting from 0).
*
* @param list the list
* @param n the index of the item to find
*
* @return an alpm_list_t node for index `n`
*/
alpm_list_t *alpm_list_nth(alpm_list_t *list, int n)
alpm_list_t SYMEXPORT *alpm_list_nth(const alpm_list_t *list, int n)
{
alpm_list_t *i = list;
const alpm_list_t *i = list;
while(n--) {
i = i->next;
}
return(i);
return((alpm_list_t*)i);
}
/** Get the next element of a list.
* @param entry the list entry
/**
* @brief Get the next element of a list.
*
* @param node the list node
*
* @return the next element, or NULL when no more elements exist
*/
alpm_list_t SYMEXPORT *alpm_list_next(alpm_list_t *entry)
inline alpm_list_t SYMEXPORT *alpm_list_next(const alpm_list_t *node)
{
return(entry->next);
}
/** Get the last item in the list.
* @param list the list to operate on
* @return the last element in the list
*/
alpm_list_t *alpm_list_last(alpm_list_t *list)
{
alpm_list_t *i = list;
while(i && i->next) {
i = i->next;
}
return(i);
return(node->next);
}
/** Get the data member of a list entry.
* @param entry the list entry
/**
* @brief Get the last item in the list.
*
* @param list the list
*
* @return the last element in the list
*/
alpm_list_t SYMEXPORT *alpm_list_last(const alpm_list_t *list)
{
if(list) {
return(list->prev);
} else {
return(NULL);
}
}
/**
* @brief Get the data member of a list node.
*
* @param node the list node
*
* @return the contained data, or NULL if none
*/
void SYMEXPORT *alpm_list_getdata(const alpm_list_t *entry)
void SYMEXPORT *alpm_list_getdata(const alpm_list_t *node)
{
if(entry == NULL) return(NULL);
return(entry->data);
if(node == NULL) return(NULL);
return(node->data);
}
/* Misc */
/** Count the list items
* @param list the list to operate on
* @return the number of list items
/**
* @brief Get the number of items in a list.
*
* @param list the list
*
* @return the number of list items
*/
int SYMEXPORT alpm_list_count(const alpm_list_t *list)
{
@@ -422,53 +571,80 @@ int SYMEXPORT alpm_list_count(const alpm_list_t *list)
return(i);
}
/** Is an item in the list
* @param needle the data to compare to (== comparison)
* @param haystack the list to search
* @return 1 if `needle` is found, 0 otherwise
/**
* @brief Find an item in a list.
*
* @param needle the item to search
* @param haystack the list
* @param fn the comparison function for searching (!= NULL)
*
* @return `needle` if found, NULL otherwise
*/
int SYMEXPORT alpm_list_find(alpm_list_t *haystack, const void *needle)
void SYMEXPORT *alpm_list_find(const alpm_list_t *haystack, const void *needle,
alpm_list_fn_cmp fn)
{
alpm_list_t *lp = haystack;
const alpm_list_t *lp = haystack;
while(lp) {
if(lp->data == needle) {
return(1);
if(lp->data && fn(lp->data, needle) == 0) {
return(lp->data);
}
lp = lp->next;
}
return(0);
return(NULL);
}
/* Test for existence of a string in a alpm_list_t
*/
/** Is a _string_ in the list (optimization of alpm_list_find for strings)
* @param needle the string to compare
* @param haystack the list to search
* @return 1 if `needle` is found, 0 otherwise
*/
int SYMEXPORT alpm_list_find_str(alpm_list_t *haystack, const char *needle)
/* trivial helper function for alpm_list_find_ptr */
static int ptrcmp(const void *p, const void *q)
{
alpm_list_t *lp = haystack;
while(lp) {
if(lp->data && strcmp((const char *)lp->data, needle) == 0) {
return(1);
}
lp = lp->next;
}
return(0);
return(p != q);
}
/**
* Calculate the items in list `lhs` that are not present in list `rhs`
* @note Entries are not duplicated
/**
* @brief Find an item in a list.
*
* Search for the item whos data matches that of the `needle`.
*
* @param needle the data to search for (== comparison)
* @param haystack the list
*
* @return `needle` if found, NULL otherwise
*/
void SYMEXPORT *alpm_list_find_ptr(const alpm_list_t *haystack, const void *needle)
{
return(alpm_list_find(haystack, needle, ptrcmp));
}
/**
* @brief Find a string in a list.
*
* @param needle the string to search for
* @param haystack the list
*
* @return `needle` if found, NULL otherwise
*/
char SYMEXPORT *alpm_list_find_str(const alpm_list_t *haystack, const char *needle)
{
return((char *)alpm_list_find(haystack, (const void*)needle, (alpm_list_fn_cmp)strcmp));
}
/**
* @brief Find the items in list `lhs` that are not present in list `rhs`.
*
* Entries are not duplicated. Operation is O(m*n). The first list is stepped
* through one node at a time, and for each node in the first list, each node
* in the second list is compared to it.
*
* @param lhs the first list
* @param rhs the second list
* @param fn the comparison function
* @return a list containing all items in lhs not present in rhs
* @param fn the comparison function
*
* @return a list containing all items in `lhs` not present in `rhs`
*/
alpm_list_t *alpm_list_diff(alpm_list_t *lhs, alpm_list_t *rhs, alpm_list_fn_cmp fn)
alpm_list_t SYMEXPORT *alpm_list_diff(const alpm_list_t *lhs,
const alpm_list_t *rhs, alpm_list_fn_cmp fn)
{
alpm_list_t *i, *j, *ret = NULL;
const alpm_list_t *i, *j;
alpm_list_t *ret = NULL;
for(i = lhs; i; i = i->next) {
int found = 0;
for(j = rhs; j; j = j->next) {

View File

@@ -1,8 +1,8 @@
/*
* alpm_alpm_list.h
*
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* alpm_list.h
*
* Copyright (c) 2002-2007 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
@@ -14,26 +14,32 @@
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _ALPM_LIST_H
#define _ALPM_LIST_H
#include "alpm.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Chained list struct */
struct __alpm_list_t {
/**
* @brief Linked list type used by libalpm.
*
* It is exposed so front ends can use it to prevent the need to reimplement
* lists of their own; however, it is not required that the front end uses
* it.
*/
typedef struct __alpm_list_t {
/** data held by the list node */
void *data;
/** pointer to the previous node */
struct __alpm_list_t *prev;
/** pointer to the next node */
struct __alpm_list_t *next;
};
} alpm_list_t;
/* TODO we should do away with these... they're messy*/
#define _FREELIST(p, f) do { alpm_list_free_inner(p, f); alpm_list_free(p); p = NULL; } while(0)
#define FREELIST(p) _FREELIST(p, free)
#define FREELISTPTR(p) do { alpm_list_free(p); p = NULL; } while(0)
#define FREELIST(p) do { alpm_list_free_inner(p, free); alpm_list_free(p); p = NULL; } while(0)
typedef void (*alpm_list_fn_free)(void *); /* item deallocation callback */
typedef int (*alpm_list_fn_cmp)(const void *, const void *); /* item comparison callback */
@@ -46,27 +52,33 @@ void alpm_list_free_inner(alpm_list_t *list, alpm_list_fn_free fn);
/* item mutators */
alpm_list_t *alpm_list_add(alpm_list_t *list, void *data);
alpm_list_t *alpm_list_add_sorted(alpm_list_t *list, void *data, alpm_list_fn_cmp fn);
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_node(alpm_list_t *node);
alpm_list_t *alpm_list_remove_dupes(alpm_list_t *list);
alpm_list_t *alpm_list_strdup(alpm_list_t *list);
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);
alpm_list_t *alpm_list_copy_data(const alpm_list_t *list, size_t size);
alpm_list_t *alpm_list_reverse(alpm_list_t *list);
/* item accessors */
alpm_list_t *alpm_list_first(alpm_list_t *list);
alpm_list_t *alpm_list_nth(alpm_list_t *list, int n);
alpm_list_t *alpm_list_next(alpm_list_t *list);
alpm_list_t *alpm_list_last(alpm_list_t *list);
alpm_list_t *alpm_list_first(const alpm_list_t *list);
alpm_list_t *alpm_list_nth(const alpm_list_t *list, int n);
alpm_list_t *alpm_list_next(const alpm_list_t *list);
alpm_list_t *alpm_list_last(const alpm_list_t *list);
void *alpm_list_getdata(const alpm_list_t *entry);
/* misc */
int alpm_list_count(const alpm_list_t *list);
int alpm_list_find(alpm_list_t *haystack, const void *needle);
int alpm_list_find_str(alpm_list_t *haystack,const char *needle);
alpm_list_t *alpm_list_diff(alpm_list_t *lhs, alpm_list_t *rhs, alpm_list_fn_cmp fn);
void *alpm_list_find(const alpm_list_t *haystack, const void *needle, alpm_list_fn_cmp fn);
void *alpm_list_find_ptr(const alpm_list_t *haystack, const void *needle);
char *alpm_list_find_str(const alpm_list_t *haystack, const char *needle);
alpm_list_t *alpm_list_diff(const alpm_list_t *lhs, const alpm_list_t *rhs, alpm_list_fn_cmp fn);
#ifdef __cplusplus
}
#endif
#endif /* _ALPM_LIST_H */
/* vim: set ts=2 sw=2 noet: */

View File

@@ -1,11 +1,11 @@
/*
* backup.c
*
*
* Copyright (c) 2005 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>
* 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
@@ -17,9 +17,7 @@
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
@@ -33,12 +31,53 @@
#include "log.h"
#include "util.h"
/* Look for a filename in a pmpkg_t.backup list. If we find it,
* then we return the md5 or sha1 hash (parsed from the same line)
*/
char *_alpm_needbackup(const char *file, alpm_list_t *backup)
/* split a backup string "file\thash" into two strings : file and hash */
int _alpm_backup_split(const char *string, char **file, char **hash)
{
alpm_list_t *lp;
char *str = strdup(string);
char *ptr;
/* tab delimiter */
ptr = strchr(str, '\t');
if(ptr == NULL) {
if(file) {
*file = str;
}
return(0);
}
*ptr = '\0';
ptr++;
/* now str points to the filename and ptr points to the hash */
if(file) {
*file = strdup(str);
}
if(hash) {
*hash = strdup(ptr);
}
FREE(str);
return(1);
}
char *_alpm_backup_file(const char *string)
{
char *file = NULL;
_alpm_backup_split(string, &file, NULL);
return(file);
}
char *_alpm_backup_hash(const char *string)
{
char *hash = NULL;
_alpm_backup_split(string, NULL, &hash);
return(hash);
}
/* Look for a filename in a pmpkg_t.backup list. If we find it,
* then we return the md5 hash (parsed from the same line)
*/
char *_alpm_needbackup(const char *file, const alpm_list_t *backup)
{
const alpm_list_t *lp;
ALPM_LOG_FUNC;
@@ -46,26 +85,22 @@ char *_alpm_needbackup(const char *file, alpm_list_t *backup)
return(NULL);
}
/* run through the backup list and parse out the md5 or sha1 hash for our file */
/* run through the backup list and parse out the hash for our file */
for(lp = backup; lp; lp = lp->next) {
char *str = strdup(lp->data);
char *ptr;
/* tab delimiter */
ptr = strchr(str, '\t');
if(ptr == NULL) {
FREE(str);
char *filename = NULL;
char *hash = NULL;
/* no hash found */
if(!_alpm_backup_split((char *)lp->data, &filename, &hash)) {
FREE(filename);
continue;
}
*ptr = '\0';
ptr++;
/* now str points to the filename and ptr points to the md5 or sha1 hash */
if(strcmp(file, str) == 0) {
char *hash = strdup(ptr);
FREE(str);
if(strcmp(file, filename) == 0) {
FREE(filename);
return(hash);
}
FREE(str);
FREE(filename);
FREE(hash);
}
return(NULL);

View File

@@ -1,8 +1,8 @@
/*
* backup.h
*
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
*
* Copyright (c) 2002-2007 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
@@ -14,16 +14,16 @@
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _ALPM_BACKUP_H
#define _ALPM_BACKUP_H
#include "alpm_list.h"
char *_alpm_needbackup(const char *file, alpm_list_t *backup);
char *_alpm_backup_file(const char *string);
char *_alpm_backup_hash(const char *string);
char *_alpm_needbackup(const char *file, const alpm_list_t *backup);
#endif /* _ALPM_BACKUP_H */

View File

@@ -1,9 +1,9 @@
/*
* be_files.c
*
*
* Copyright (c) 2006 by Christian Hamar <krics@linuxforum.hu>
* 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
@@ -15,9 +15,7 @@
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
@@ -27,16 +25,13 @@
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#ifdef __sun__
#include <strings.h>
#endif
#include <stdint.h> /* uintmax_t */
#include <sys/stat.h>
#include <dirent.h>
#include <libintl.h>
#include <locale.h>
#ifdef CYGWIN
#include <ctype.h>
#include <time.h>
#include <limits.h> /* PATH_MAX */
#endif
#include <locale.h> /* setlocale */
/* libalpm */
#include "db.h"
@@ -47,6 +42,8 @@
#include "error.h"
#include "handle.h"
#include "package.h"
#include "delta.h"
#include "deps.h"
/* This function is used to convert the downloaded db file to the proper backend
@@ -56,9 +53,9 @@ int _alpm_db_install(pmdb_t *db, const char *dbfile)
{
ALPM_LOG_FUNC;
/* TODO we should not simply unpack the archive, but better parse it and
/* TODO we should not simply unpack the archive, but better parse it and
* db_write each entry (see sync_load_dbarchive to get archive content) */
_alpm_log(PM_LOG_DEBUG, _("unpacking database '%s'"), dbfile);
_alpm_log(PM_LOG_DEBUG, "unpacking database '%s'\n", dbfile);
if(_alpm_unpack(dbfile, db->path, NULL)) {
RET_ERR(PM_ERR_SYSTEM, -1);
@@ -75,7 +72,7 @@ int _alpm_db_open(pmdb_t *db)
RET_ERR(PM_ERR_DB_NULL, -1);
}
_alpm_log(PM_LOG_DEBUG, _("opening database from path '%s'"), db->path);
_alpm_log(PM_LOG_DEBUG, "opening database from path '%s'\n", db->path);
db->handle = opendir(db->path);
if(db->handle == NULL) {
RET_ERR(PM_ERR_DB_OPEN, -1);
@@ -109,6 +106,43 @@ void _alpm_db_rewind(pmdb_t *db)
rewinddir(db->handle);
}
static int _alpm_db_splitname(const char *target, char *name, char *version)
{
/* the format of a db entry is as follows:
* package-version-rel/
* package name can contain hyphens, so parse from the back- go back
* two hyphens and we have split the version from the name.
*/
char *tmp, *p, *q;
if(target == NULL) {
return(-1);
}
tmp = strdup(target);
p = tmp + strlen(tmp);
/* do the magic parsing- find the beginning of the version string
* by doing two iterations of same loop to lop off two hyphens */
for(q = --p; *q && *q != '-'; q--);
for(p = --q; *p && *p != '-'; p--);
if(*p != '-' || p == tmp) {
return(-1);
}
/* copy into fields and return */
if(version) {
strncpy(version, p+1, PKG_VERSION_LEN);
}
/* insert a terminator at the end of the name (on hyphen)- then copy it */
*p = '\0';
if(name) {
strncpy(name, tmp, PKG_NAME_LEN);
}
free(tmp);
return(0);
}
pmpkg_t *_alpm_db_scan(pmdb_t *db, const char *target)
{
struct dirent *ent = NULL;
@@ -142,7 +176,7 @@ pmpkg_t *_alpm_db_scan(pmdb_t *db, const char *target)
if(stat(path, &sbuf) || !S_ISDIR(sbuf.st_mode)) {
continue;
}
STRNCPY(name, ent->d_name, PKG_FULLNAME_LEN);
strncpy(name, ent->d_name, PKG_FULLNAME_LEN);
/* truncate the string at the second-to-last hyphen, */
/* which will give us the package name */
if((ptr = rindex(name, '-'))) {
@@ -179,21 +213,25 @@ pmpkg_t *_alpm_db_scan(pmdb_t *db, const char *target)
pkg = _alpm_pkg_new(NULL, NULL);
if(pkg == NULL) {
_alpm_log(PM_LOG_DEBUG, _("db scan could not find package: %s"), target);
_alpm_log(PM_LOG_DEBUG, "db scan could not find package: %s\n", target);
return(NULL);
}
if(_alpm_pkg_splitname(ent->d_name, pkg->name, pkg->version, 0) == -1) {
_alpm_log(PM_LOG_ERROR, _("invalid name for database entry '%s'"), ent->d_name);
return(NULL);
/* split the db entry name */
if(_alpm_db_splitname(ent->d_name, pkg->name, pkg->version) != 0) {
_alpm_log(PM_LOG_ERROR, _("invalid name for database entry '%s'\n"),
ent->d_name);
alpm_pkg_free(pkg);
pkg = NULL;
continue;
}
/* explicitly read with only 'BASE' data, accessors will handle the rest */
if(_alpm_db_read(db, pkg, INFRQ_BASE) == -1) {
/* TODO removed corrupt entry from the FS here */
FREEPKG(pkg);
_alpm_pkg_free(pkg);
} else {
pkg->data = db;
pkg->origin = PKG_FROM_CACHE;
pkg->origin_data.db = db;
}
}
@@ -206,10 +244,6 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
struct stat buf;
char path[PATH_MAX+1];
char line[513];
/*
alpm_list_t *tmplist;
char *locale;
*/
ALPM_LOG_FUNC;
@@ -218,12 +252,12 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
}
if(info == NULL || info->name[0] == 0 || info->version[0] == 0) {
_alpm_log(PM_LOG_DEBUG, _("invalid package entry provided to _alpm_db_read, skipping"));
_alpm_log(PM_LOG_DEBUG, "invalid package entry provided to _alpm_db_read, skipping\n");
return(-1);
}
if(info->origin == PKG_FROM_FILE) {
_alpm_log(PM_LOG_DEBUG, _("request to read database info for a file-based package '%s', skipping..."), info->name);
_alpm_log(PM_LOG_DEBUG, "request to read database info for a file-based package '%s', skipping...\n", info->name);
return(-1);
}
@@ -236,7 +270,8 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
/* already loaded this info, do nothing */
return(0);
}
_alpm_log(PM_LOG_FUNCTION, _("loading package data for %s : level=%d"), info->name, inforeq);
_alpm_log(PM_LOG_FUNCTION, "loading package data for %s : level=0x%x\n",
info->name, inforeq);
/* clear out 'line', to be certain - and to make valgrind happy */
memset(line, 0, 513);
@@ -244,7 +279,8 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
snprintf(path, PATH_MAX, "%s/%s-%s", db->path, info->name, info->version);
if(stat(path, &buf)) {
/* directory doesn't exist or can't be opened */
_alpm_log(PM_LOG_DEBUG, _("cannot find '%s-%s' in db '%s'"), info->name, info->version, db->treename);
_alpm_log(PM_LOG_DEBUG, "cannot find '%s-%s' in db '%s'\n",
info->name, info->version, db->treename);
return(-1);
}
@@ -252,7 +288,7 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
if(inforeq & INFRQ_DESC) {
snprintf(path, PATH_MAX, "%s/%s-%s/desc", db->path, info->name, info->version);
if((fp = fopen(path, "r")) == NULL) {
_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s"), path, strerror(errno));
_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s\n"), path, strerror(errno));
goto error;
}
while(!feof(fp)) {
@@ -261,10 +297,6 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
}
_alpm_strtrim(line);
if(!strcmp(line, "%FILENAME%")) {
/* filename is _new_ - it provides the real name of the package, on the
* server, to allow for us to not tie the name of the actual file to the
* data of the package
*/
if(fgets(info->filename, sizeof(info->filename), fp) == NULL) {
goto error;
}
@@ -273,32 +305,6 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
if(fgets(info->desc, sizeof(info->desc), fp) == NULL) {
goto error;
}
/*
while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) {
info->desc_localized = alpm_list_add(info->desc_localized, strdup(line));
PKG_
}
if((locale = setlocale(LC_ALL, "")) == NULL) { //To fix segfault when locale invalid
setenv("LC_ALL", "C", 1);
locale = setlocale(LC_ALL, "");
}
if(info->desc_localized && !info->desc_localized->next) {
snprintf(info->desc, 512, "%s", (char*)info->desc_localized->data);
} else {
for (tmplist = info->desc_localized; tmplist; tmplist = tmplist->next) {
if (tmplist->data && strncmp(tmplist->data, locale, strlen(locale))) {
strncpy(info->desc, (char *)info->desc_localized->data, sizeof(info->desc));
} else {
char *p = (char *)tmplist->data;
p += strlen(locale) + 1;
strncpy(info->desc, p, sizeof(info->desc));
break;
}
}
}
*/
_alpm_strtrim(info->desc);
} else if(!strcmp(line, "%GROUPS%")) {
while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) {
@@ -319,20 +325,39 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
}
_alpm_strtrim(info->arch);
} else if(!strcmp(line, "%BUILDDATE%")) {
if(fgets(info->builddate, sizeof(info->builddate), fp) == NULL) {
char tmp[32];
if(fgets(tmp, sizeof(tmp), fp) == NULL) {
goto error;
}
_alpm_strtrim(info->builddate);
} else if(!strcmp(line, "%BUILDTYPE%")) {
if(fgets(info->buildtype, sizeof(info->buildtype), fp) == NULL) {
goto error;
_alpm_strtrim(tmp);
char first = tolower(tmp[0]);
if(first > 'a' && first < 'z') {
struct tm tmp_tm = {0}; //initialize to null incase of failure
setlocale(LC_TIME, "C");
strptime(tmp, "%a %b %e %H:%M:%S %Y", &tmp_tm);
info->builddate = mktime(&tmp_tm);
setlocale(LC_TIME, "");
} else {
info->builddate = atol(tmp);
}
_alpm_strtrim(info->buildtype);
} else if(!strcmp(line, "%INSTALLDATE%")) {
if(fgets(info->installdate, sizeof(info->installdate), fp) == NULL) {
char tmp[32];
if(fgets(tmp, sizeof(tmp), fp) == NULL) {
goto error;
}
_alpm_strtrim(info->installdate);
_alpm_strtrim(tmp);
char first = tolower(tmp[0]);
if(first > 'a' && first < 'z') {
struct tm tmp_tm = {0}; //initialize to null incase of failure
setlocale(LC_TIME, "C");
strptime(tmp, "%a %b %e %H:%M:%S %Y", &tmp_tm);
info->installdate = mktime(&tmp_tm);
setlocale(LC_TIME, "");
} else {
info->installdate = atol(tmp);
}
} else if(!strcmp(line, "%PACKAGER%")) {
if(fgets(info->packager, sizeof(info->packager), fp) == NULL) {
goto error;
@@ -357,6 +382,10 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
}
_alpm_strtrim(tmp);
info->size = atol(tmp);
/* also store this value to isize if isize is unset */
if(info->isize == 0) {
info->isize = atol(tmp);
}
} else if(!strcmp(line, "%ISIZE%")) {
/* ISIZE (installed size) tag only appears in sync repositories,
* not the local one. */
@@ -366,12 +395,6 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
}
_alpm_strtrim(tmp);
info->isize = atol(tmp);
} else if(!strcmp(line, "%SHA1SUM%")) {
/* SHA1SUM tag only appears in sync repositories,
* not the local one. */
if(fgets(info->sha1sum, sizeof(info->sha1sum), fp) == NULL) {
goto error;
}
} else if(!strcmp(line, "%MD5SUM%")) {
/* MD5SUM tag only appears in sync repositories,
* not the local one. */
@@ -398,7 +421,7 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
if(inforeq & INFRQ_FILES) {
snprintf(path, PATH_MAX, "%s/%s-%s/files", db->path, info->name, info->version);
if((fp = fopen(path, "r")) == NULL) {
_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s"), path, strerror(errno));
_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s\n"), path, strerror(errno));
goto error;
}
while(fgets(line, 256, fp)) {
@@ -421,7 +444,7 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
if(inforeq & INFRQ_DEPENDS) {
snprintf(path, PATH_MAX, "%s/%s-%s/depends", db->path, info->name, info->version);
if((fp = fopen(path, "r")) == NULL) {
_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s"), path, strerror(errno));
_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s\n"), path, strerror(errno));
goto error;
}
while(!feof(fp)) {
@@ -429,11 +452,12 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
_alpm_strtrim(line);
if(!strcmp(line, "%DEPENDS%")) {
while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) {
info->depends = alpm_list_add(info->depends, strdup(line));
pmdepend_t *dep = alpm_splitdep(line);
info->depends = alpm_list_add(info->depends, dep);
}
} else if(!strcmp(line, "%REQUIREDBY%")) {
} else if(!strcmp(line, "%OPTDEPENDS%")) {
while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) {
info->requiredby = alpm_list_add(info->requiredby, strdup(line));
info->optdepends = alpm_list_add(info->optdepends, strdup(line));
}
} else if(!strcmp(line, "%CONFLICTS%")) {
while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) {
@@ -451,7 +475,7 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
* not the local one. *
while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) {
info->replaces = alpm_list_add(info->replaces, strdup(line));
}
}
} else if(!strcmp(line, "%FORCE%")) {
* FORCE tag only appears in sync repositories,
* not the local one. *
@@ -462,6 +486,24 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
fp = NULL;
}
/* DELTAS */
if(inforeq & INFRQ_DELTAS) {
snprintf(path, PATH_MAX, "%s/%s-%s/deltas", db->path, info->name, info->version);
if((fp = fopen(path, "r"))) {
while(!feof(fp)) {
fgets(line, 255, fp);
_alpm_strtrim(line);
if(!strcmp(line, "%DELTAS%")) {
while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) {
info->deltas = alpm_list_add(info->deltas, _alpm_delta_parse(line));
}
}
}
fclose(fp);
fp = NULL;
}
}
/* INSTALL */
if(inforeq & INFRQ_SCRIPTLET) {
snprintf(path, PATH_MAX, "%s/%s-%s/install", db->path, info->name, info->version);
@@ -509,22 +551,17 @@ int _alpm_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
/* DESC */
if(inforeq & INFRQ_DESC) {
_alpm_log(PM_LOG_DEBUG, _("writing %s-%s DESC information back to db"), info->name, info->version);
_alpm_log(PM_LOG_DEBUG, "writing %s-%s DESC information back to db\n",
info->name, info->version);
snprintf(path, PATH_MAX, "%s/%s-%s/desc", db->path, info->name, info->version);
if((fp = fopen(path, "w")) == NULL) {
_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s"), path, strerror(errno));
_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s\n"), path, strerror(errno));
retval = -1;
goto cleanup;
}
fprintf(fp, "%%NAME%%\n%s\n\n"
"%%VERSION%%\n%s\n\n", info->name, info->version);
if(info->desc[0]) {
/*fputs("%DESC%\n", fp);
for(lp = info->desc_localized; lp; lp = lp->next) {
fprintf(fp, "%s\n", (char *)lp->data);
}
fprintf(fp, "\n");
*/
fprintf(fp, "%%DESC%%\n"
"%s\n\n", info->desc);
}
@@ -551,17 +588,13 @@ int _alpm_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
fprintf(fp, "%%ARCH%%\n"
"%s\n\n", info->arch);
}
if(info->builddate[0]) {
if(info->builddate) {
fprintf(fp, "%%BUILDDATE%%\n"
"%s\n\n", info->builddate);
"%ju\n\n", (uintmax_t)info->builddate);
}
if(info->buildtype[0]) {
fprintf(fp, "%%BUILDTYPE%%\n"
"%s\n\n", info->buildtype);
}
if(info->installdate[0]) {
if(info->installdate) {
fprintf(fp, "%%INSTALLDATE%%\n"
"%s\n\n", info->installdate);
"%ju\n\n", (uintmax_t)info->installdate);
}
if(info->packager[0]) {
fprintf(fp, "%%PACKAGER%%\n"
@@ -585,10 +618,7 @@ int _alpm_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
fprintf(fp, "%%ISIZE%%\n"
"%lu\n\n", info->isize);
}
if(info->sha1sum) {
fprintf(fp, "%%SHA1SUM%%\n"
"%s\n\n", info->sha1sum);
} else if(info->md5sum) {
if(info->md5sum) {
fprintf(fp, "%%MD5SUM%%\n"
"%s\n\n", info->md5sum);
}
@@ -599,10 +629,11 @@ int _alpm_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
/* FILES */
if(local && (inforeq & INFRQ_FILES)) {
_alpm_log(PM_LOG_DEBUG, _("writing %s-%s FILES information back to db"), info->name, info->version);
_alpm_log(PM_LOG_DEBUG, "writing %s-%s FILES information back to db\n",
info->name, info->version);
snprintf(path, PATH_MAX, "%s/%s-%s/files", db->path, info->name, info->version);
if((fp = fopen(path, "w")) == NULL) {
_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s"), path, strerror(errno));
_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s\n"), path, strerror(errno));
retval = -1;
goto cleanup;
}
@@ -626,23 +657,26 @@ int _alpm_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
/* DEPENDS */
if(inforeq & INFRQ_DEPENDS) {
_alpm_log(PM_LOG_DEBUG, _("writing %s-%s DEPENDS information back to db"), info->name, info->version);
_alpm_log(PM_LOG_DEBUG, "writing %s-%s DEPENDS information back to db\n",
info->name, info->version);
snprintf(path, PATH_MAX, "%s/%s-%s/depends", db->path, info->name, info->version);
if((fp = fopen(path, "w")) == NULL) {
_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s"), path, strerror(errno));
_alpm_log(PM_LOG_ERROR, _("could not open file %s: %s\n"), path, strerror(errno));
retval = -1;
goto cleanup;
}
if(info->depends) {
fputs("%DEPENDS%\n", fp);
for(lp = info->depends; lp; lp = lp->next) {
fprintf(fp, "%s\n", (char *)lp->data);
char *depstring = alpm_dep_get_string(lp->data);
fprintf(fp, "%s\n", depstring);
free(depstring);
}
fprintf(fp, "\n");
}
if(local && info->requiredby) {
fputs("%REQUIREDBY%\n", fp);
for(lp = info->requiredby; lp; lp = lp->next) {
if(info->optdepends) {
fputs("%OPTDEPENDS%\n", fp);
for(lp = info->optdepends; lp; lp = lp->next) {
fprintf(fp, "%s\n", (char *)lp->data);
}
fprintf(fp, "\n");
@@ -709,67 +743,63 @@ int _alpm_db_remove(pmdb_t *db, pmpkg_t *info)
return(0);
}
/* reads dbpath/.lastupdate and populates *ts with the contents.
* *ts should be malloc'ed and should be at least 15 bytes.
*
* Returns 0 on success, 1 on error
*
/*
* Return the last update time as number of seconds from the epoch.
* Returns 0 if the value is unknown or can't be read.
*/
int _alpm_db_getlastupdate(pmdb_t *db, char *ts)
time_t _alpm_db_getlastupdate(const pmdb_t *db)
{
FILE *fp;
char file[PATH_MAX];
time_t ret = 0;
ALPM_LOG_FUNC;
if(db == NULL || ts == NULL) {
return(-1);
if(db == NULL) {
return(ret);
}
snprintf(file, PATH_MAX, "%s%s.lastupdate", handle->root, db->path);
snprintf(file, PATH_MAX, "%s.lastupdate", db->path);
/* get the last update time, if it's there */
if((fp = fopen(file, "r")) == NULL) {
return(-1);
return(ret);
} else {
char line[256];
char line[64];
if(fgets(line, sizeof(line), fp)) {
STRNCPY(ts, line, 15); /* YYYYMMDDHHMMSS */
ts[14] = '\0';
} else {
fclose(fp);
return(-1);
ret = atol(line);
}
}
fclose(fp);
return(0);
return(ret);
}
/* writes the dbpath/.lastupdate with the contents of *ts
/*
* writes the dbpath/.lastupdate file with the value in time
*/
int _alpm_db_setlastupdate(pmdb_t *db, char *ts)
int _alpm_db_setlastupdate(const pmdb_t *db, time_t time)
{
FILE *fp;
char file[PATH_MAX];
int ret = 0;
ALPM_LOG_FUNC;
if(db == NULL || ts == NULL || strlen(ts) == 0) {
if(db == NULL || time == 0) {
return(-1);
}
snprintf(file, PATH_MAX, "%s%s.lastupdate", handle->root, db->path);
snprintf(file, PATH_MAX, "%s.lastupdate", db->path);
if((fp = fopen(file, "w")) == NULL) {
return(-1);
}
if(fputs(ts, fp) <= 0) {
fclose(fp);
return(-1);
if(fprintf(fp, "%ju", (uintmax_t)time) <= 0) {
ret = -1;
}
fclose(fp);
return(0);
return(ret);
}
/* vim: set ts=2 sw=2 noet: */

View File

@@ -1,8 +1,8 @@
/*
* cache.c
*
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
*
* Copyright (c) 2002-2007 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
@@ -14,9 +14,7 @@
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
@@ -26,8 +24,6 @@
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/stat.h>
#include <libintl.h>
/* libalpm */
#include "cache.h"
@@ -56,15 +52,15 @@ int _alpm_db_load_pkgcache(pmdb_t *db)
_alpm_db_free_pkgcache(db);
_alpm_log(PM_LOG_DEBUG, _("loading package cache for repository '%s'"),
_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'"),
_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->data = db;
info->origin_data.db = db;
/* add to the collection */
db->pkgcache = alpm_list_add(db->pkgcache, info);
count++;
@@ -82,10 +78,15 @@ void _alpm_db_free_pkgcache(pmdb_t *db)
return;
}
_alpm_log(PM_LOG_DEBUG, _("freeing package cache for repository '%s'"),
_alpm_log(PM_LOG_DEBUG, "freeing package cache for repository '%s'\n",
db->treename);
FREELISTPKGS(db->pkgcache);
alpm_list_t *tmp;
for(tmp = db->pkgcache; tmp; tmp = alpm_list_next(tmp)) {
_alpm_pkg_free(tmp->data);
}
alpm_list_free(db->pkgcache);
db->pkgcache = NULL;
if(db->grpcache) {
_alpm_db_free_grpcache(db);
@@ -106,7 +107,7 @@ alpm_list_t *_alpm_db_get_pkgcache(pmdb_t *db)
/* hmmm, still NULL ?*/
if(!db->pkgcache) {
_alpm_log(PM_LOG_DEBUG, _("error: pkgcache is NULL for db '%s'"), db->treename);
_alpm_log(PM_LOG_DEBUG, "error: pkgcache is NULL for db '%s'\n", db->treename);
}
return(db->pkgcache);
@@ -126,7 +127,7 @@ int _alpm_db_add_pkgincache(pmdb_t *db, pmpkg_t *pkg)
if(newpkg == NULL) {
return(-1);
}
_alpm_log(PM_LOG_DEBUG, _("adding entry '%s' in '%s' cache"),
_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);
@@ -146,19 +147,19 @@ int _alpm_db_remove_pkgfromcache(pmdb_t *db, pmpkg_t *pkg)
return(-1);
}
_alpm_log(PM_LOG_DEBUG, _("removing entry '%s' from '%s' cache"),
_alpm_log(PM_LOG_DEBUG, "removing entry '%s' from '%s' cache\n",
alpm_pkg_get_name(pkg), db->treename);
db->pkgcache = alpm_list_remove(db->pkgcache, pkg, _alpm_pkg_cmp, &vdata);
data = vdata;
if(data == NULL) {
/* package not found */
_alpm_log(PM_LOG_DEBUG, _("cannot remove entry '%s' from '%s' cache: not found"),
_alpm_log(PM_LOG_DEBUG, "cannot remove entry '%s' from '%s' cache: not found\n",
alpm_pkg_get_name(pkg), db->treename);
return(-1);
}
FREEPKG(data);
_alpm_pkg_free(data);
_alpm_db_free_grpcache(db);
@@ -175,7 +176,8 @@ pmpkg_t *_alpm_db_get_pkgfromcache(pmdb_t *db, const char *target)
alpm_list_t *pkgcache = _alpm_db_get_pkgcache(db);
if(!pkgcache) {
_alpm_log(PM_LOG_DEBUG, _("error: failed to get '%s' from NULL pkgcache"), target);
_alpm_log(PM_LOG_DEBUG, "error: failed to get '%s' from NULL pkgcache\n",
target);
return(NULL);
}
@@ -198,10 +200,11 @@ int _alpm_db_load_grpcache(pmdb_t *db)
_alpm_db_load_pkgcache(db);
}
_alpm_log(PM_LOG_DEBUG, _("loading group cache for repository '%s'"), db->treename);
_alpm_log(PM_LOG_DEBUG, "loading group cache for repository '%s'\n",
db->treename);
for(lp = _alpm_db_get_pkgcache(db); lp; lp = lp->next) {
alpm_list_t *i;
const alpm_list_t *i;
pmpkg_t *pkg = lp->data;
for(i = alpm_pkg_get_groups(pkg); i; i = i->next) {
@@ -251,8 +254,10 @@ void _alpm_db_free_grpcache(pmdb_t *db)
for(lg = db->grpcache; lg; lg = lg->next) {
pmgrp_t *grp = lg->data;
FREELISTPTR(grp->packages);
FREEGRP(lg->data);
alpm_list_free(grp->packages);
grp->packages = NULL;
_alpm_grp_free(lg->data);
lg->data = NULL;
}
FREELIST(db->grpcache);
}

View File

@@ -1,8 +1,8 @@
/*
* cache.h
*
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
*
* Copyright (c) 2002-2007 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
@@ -14,9 +14,7 @@
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _ALPM_CACHE_H
#define _ALPM_CACHE_H

View File

@@ -1,12 +1,12 @@
/*
* conflict.c
*
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2006 by David Kimpe <dnaku@frugalware.org>
* Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org>
* Copyright (c) 2006 by Christian Hamar <krics@linuxforum.hu>
*
*
* 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
@@ -18,9 +18,7 @@
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
@@ -30,11 +28,7 @@
#include <unistd.h>
#include <string.h>
#include <limits.h>
#if defined(__APPLE__) || defined(__OpenBSD__)
#include <sys/syslimits.h>
#endif
#include <sys/stat.h>
#include <libintl.h>
/* libalpm */
#include "conflict.h"
@@ -47,191 +41,145 @@
#include "cache.h"
#include "deps.h"
pmconflict_t *_alpm_conflict_new(const char *package1, const char *package2)
{
pmconflict_t *conflict;
/** See if potential conflict 'name' matches package 'pkg'.
* @param target the name of the parent package we're checking
* @param depname the name of the dependency we're checking
* @param pkg the package to check
* @param conflict the name of the possible conflict
* @return A depmissing struct indicating the conflict
* @note The first two paramters are here to simplify the addition
* of new 'depmiss' objects.
*
* TODO WTF is a 'depmissing' doing indicating a conflict??
*/
static pmdepmissing_t *does_conflict(const char *target, const char *depname,
pmpkg_t *pkg, const char *conflict)
ALPM_LOG_FUNC;
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);
return(conflict);
}
int _alpm_conflict_isin(pmconflict_t *needle, alpm_list_t *haystack)
{
alpm_list_t *i;
/* check the actual package name, easy */
if(strcmp(alpm_pkg_get_name(pkg), conflict) == 0) {
_alpm_log(PM_LOG_DEBUG, _(" found conflict '%s' : package '%s'"), conflict, target);
return(_alpm_depmiss_new(target, PM_DEP_TYPE_CONFLICT,
PM_DEP_MOD_ANY, depname, NULL));
ALPM_LOG_FUNC;
for(i = haystack; i; i = i->next) {
pmconflict_t *conflict = i->data;
char *cpkg1 = conflict->package1;
char *cpkg2 = conflict->package2;
char *npkg1 = needle->package1;
char *npkg2 = needle->package2;
if((!strcmp(cpkg1, npkg1) && !strcmp(cpkg2, npkg2))
|| (!strcmp(cpkg1, npkg2) && !strcmp(cpkg2, npkg1))) {
return(1);
}
}
return(0);
}
/** Check if pkg1 conflicts with pkg2
* @param pkg1 package we are looking at
* @param conflict name of the possible conflict
* @param pkg2 package to check
* @return 0 for no conflict, non-zero otherwise
*/
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);
int match = 0;
match = alpm_depcmp(pkg2, conf);
if(match) {
_alpm_log(PM_LOG_DEBUG, "package %s conflicts with %s (by %s)\n",
pkg1name, pkg2name, conflict);
}
FREE(conf);
return(match);
}
/** Adds the pkg1/pkg2 conflict to the baddeps list
* @param *baddeps list to add conflict to
* @param pkg1 first package
* @param pkg2 package causing conflict
*/
static void add_conflict(alpm_list_t **baddeps, const char *pkg1,
const char *pkg2)
{
pmconflict_t *conflict = _alpm_conflict_new(pkg1, pkg2);
if(conflict && !_alpm_conflict_isin(conflict, *baddeps)) {
*baddeps = alpm_list_add(*baddeps, conflict);
} else {
/* check what this package provides, harder */
for(i = alpm_pkg_get_provides(pkg); i; i = i->next) {
const char *provision = i->data;
if(strcmp(provision, conflict) == 0) {
_alpm_log(PM_LOG_DEBUG, _(" found conflict '%s' : package '%s' provides '%s'"),
conflict, target, provision);
return(_alpm_depmiss_new(target, PM_DEP_TYPE_CONFLICT,
PM_DEP_MOD_ANY, depname, NULL));
}
}
FREE(conflict);
}
return(NULL); /* not a conflict */
}
static alpm_list_t *chk_pkg_vs_db(alpm_list_t *baddeps, pmpkg_t *pkg, pmdb_t *db)
{
pmdepmissing_t *miss = NULL;
const char *pkgname;
alpm_list_t *i, *j;
/** Check if packages from list1 conflict with packages from list2.
* This looks at the conflicts fields of all packages from list1, and sees
* if they match packages from list2.
* If a conflict (pkg1, pkg2) is found, it is added to the baddeps list
* in this order if order >= 0, or reverse order (pkg2,pkg1) otherwise.
*
* @param list1 first list of packages
* @param list2 second list of packages
* @param *baddeps list to store conflicts
* @param order if >= 0 the conflict order is preserved, if < 0 it's reversed
*/
static void check_conflict(alpm_list_t *list1, alpm_list_t *list2,
alpm_list_t **baddeps, int order) {
alpm_list_t *i, *j, *k;
pkgname = alpm_pkg_get_name(pkg);
for(i = alpm_pkg_get_conflicts(pkg); i; i = i->next) {
const char *conflict = i->data;
if(strcmp(pkgname, conflict) == 0) {
/* a package cannot conflict with itself -- that's just not nice */
_alpm_log(PM_LOG_DEBUG, _("package '%s' conflicts with itself - packaging error"),
pkgname);
continue;
}
/* CHECK 1: check targets against database */
_alpm_log(PM_LOG_DEBUG, _("checkconflicts: target '%s' vs db"), pkgname);
for(j = _alpm_db_get_pkgcache(db); j; j = j->next) {
pmpkg_t *dbpkg = j->data;
if(strcmp(alpm_pkg_get_name(dbpkg), pkgname) == 0) {
/* skip the package we're currently processing */
continue;
}
miss = does_conflict(pkgname, alpm_pkg_get_name(dbpkg), dbpkg, conflict);
if(miss && !_alpm_depmiss_isin(miss, baddeps)) {
baddeps = alpm_list_add(baddeps, miss);
} else {
FREE(miss);
}
}
if(!baddeps) {
return;
}
return(baddeps);
}
for(i = list1; i; i = i->next) {
pmpkg_t *pkg1 = i->data;
const char *pkg1name = alpm_pkg_get_name(pkg1);
static alpm_list_t *chk_pkg_vs_targets(alpm_list_t *baddeps,
pmpkg_t *pkg, pmdb_t *db,
alpm_list_t *targets)
{
pmdepmissing_t *miss = NULL;
const char *pkgname;
alpm_list_t *i, *j;
pkgname = alpm_pkg_get_name(pkg);
for(i = alpm_pkg_get_conflicts(pkg); i; i = i->next) {
const char *conflict = i->data;
if(strcmp(pkgname, conflict) == 0) {
/* a package cannot conflict with itself -- that's just not nice */
_alpm_log(PM_LOG_DEBUG, _("package '%s' conflicts with itself - packaging error"),
pkgname);
continue;
}
/* CHECK 2: check targets against targets */
_alpm_log(PM_LOG_DEBUG, _("checkconflicts: target '%s' vs all targets"), pkgname);
for(j = targets; j; j = j->next) {
const char *targetname;
pmpkg_t *target = j->data;
targetname = alpm_pkg_get_name(target);
if(strcmp(targetname, pkgname) == 0) {
/* skip the package we're currently processing */
continue;
}
miss = does_conflict(pkgname, targetname, target, conflict);
if(miss && !_alpm_depmiss_isin(miss, baddeps)) {
baddeps = alpm_list_add(baddeps, miss);
} else {
FREE(miss);
}
}
}
return(baddeps);
}
static alpm_list_t *chk_db_vs_targets(alpm_list_t *baddeps, pmpkg_t *pkg,
pmdb_t *db, alpm_list_t *targets)
{
pmdepmissing_t *miss = NULL;
const char *pkgname;
alpm_list_t *i, *j;
pkgname = alpm_pkg_get_name(pkg);
_alpm_log(PM_LOG_DEBUG, _("checkconflicts: db vs target '%s'"), pkgname);
for(i = _alpm_db_get_pkgcache(db); i; i = i->next) {
alpm_list_t *conflicts = NULL;
const char *dbpkgname;
pmpkg_t *dbpkg = i->data;
dbpkgname = alpm_pkg_get_name(dbpkg);
if(strcmp(dbpkgname, pkgname) == 0) {
/* skip the package we're currently processing */
continue;
}
/* is this db package in the targets? if so use the
* new package's conflict list to pick up new changes */
int use_newconflicts = 0;
for(j = targets; j; j = j->next) {
pmpkg_t *targ = j->data;
if(strcmp(alpm_pkg_get_name(targ), dbpkgname) == 0) {
_alpm_log(PM_LOG_DEBUG, _("target '%s' is also in target list, using NEW conflicts"),
dbpkgname);
conflicts = alpm_pkg_get_conflicts(targ);
use_newconflicts = 1;
break;
}
}
/* if we didn't find newer conflicts, use the original list */
if(!use_newconflicts) {
conflicts = alpm_pkg_get_conflicts(dbpkg);
}
for(j = conflicts; j; j = j->next) {
for(j = alpm_pkg_get_conflicts(pkg1); j; j = j->next) {
const char *conflict = j->data;
for(k = list2; k; k = k->next) {
pmpkg_t *pkg2 = k->data;
const char *pkg2name = alpm_pkg_get_name(pkg2);
miss = does_conflict(pkgname, dbpkgname, pkg, conflict);
if(miss && !_alpm_depmiss_isin(miss, baddeps)) {
baddeps = alpm_list_add(baddeps, miss);
} else {
FREE(miss);
if(strcmp(pkg1name, pkg2name) == 0) {
/* skip the package we're currently processing */
continue;
}
if(does_conflict(pkg1, conflict, pkg2)) {
if(order >= 0) {
add_conflict(baddeps, pkg1name, pkg2name);
} else {
add_conflict(baddeps, pkg2name, pkg1name);
}
}
}
}
}
}
/* Check for inter-conflicts */
alpm_list_t *_alpm_innerconflicts(alpm_list_t *packages)
{
alpm_list_t *baddeps = NULL;
ALPM_LOG_FUNC;
_alpm_log(PM_LOG_DEBUG, "check targets vs targets\n");
check_conflict(packages, packages, &baddeps, 0);
return(baddeps);
}
/* Returns a alpm_list_t* of pmdepmissing_t pointers.
*
* conflicts are always name only
/* Check for target vs (db - target) conflicts
* In case of conflict the package1 field of pmdepconflict_t contains
* the target package, package2 field contains the local package
*/
alpm_list_t *_alpm_checkconflicts(pmdb_t *db, alpm_list_t *packages)
alpm_list_t *_alpm_outerconflicts(pmdb_t *db, alpm_list_t *packages)
{
alpm_list_t *i, *baddeps = NULL;
alpm_list_t *baddeps = NULL;
ALPM_LOG_FUNC;
@@ -239,27 +187,23 @@ alpm_list_t *_alpm_checkconflicts(pmdb_t *db, alpm_list_t *packages)
return(NULL);
}
for(i = packages; i; i = i->next) {
pmpkg_t *pkg = i->data;
if(pkg == NULL) {
continue;
}
alpm_list_t *dblist = alpm_list_diff(_alpm_db_get_pkgcache(db), packages,
_alpm_pkg_cmp);
/* run three different conflict checks on each package */
baddeps = chk_pkg_vs_db(baddeps, pkg, db);
baddeps = chk_pkg_vs_targets(baddeps, pkg, db, packages);
baddeps = chk_db_vs_targets(baddeps, pkg, db, packages);
}
/* debug loop */
for(i = baddeps; i; i = i->next) {
pmdepmissing_t *miss = i->data;
_alpm_log(PM_LOG_DEBUG, _("\tCONFLICTS:: %s conflicts with %s"), miss->target, miss->depend.name);
}
/* two checks to be done here for conflicts */
_alpm_log(PM_LOG_DEBUG, "check targets vs db\n");
check_conflict(packages, dblist, &baddeps, 1);
_alpm_log(PM_LOG_DEBUG, "check db vs targets\n");
check_conflict(dblist, packages, &baddeps, -1);
alpm_list_free(dblist);
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)));
}
/* Returns a alpm_list_t* of file conflicts.
* Hooray for set-intersects!
@@ -307,6 +251,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 both filesA and filesB have entries, do this loop */
while(pA && pB) {
const char *strA = pA->data;
const char *strB = pB->data;
@@ -331,36 +276,42 @@ 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);
}
/* Adds pmconflict_t to a conflicts list. Pass the conflicts list, type (either
* PM_CONFLICT_TYPE_TARGET or PM_CONFLICT_TYPE_FILE), a file string, and either
/* Adds pmfileconflict_t to a conflicts list. Pass the conflicts list, type (either
* PM_FILECONFLICT_TARGET or PM_FILECONFLICT_FILESYSTEM), a file string, and either
* two package names or one package name and NULL. This is a wrapper for former
* functionality that was done inline.
*/
static alpm_list_t *add_fileconflict(alpm_list_t *conflicts,
pmconflicttype_t type, const char *filestr,
pmfileconflicttype_t type, const char *filestr,
const char* name1, const char* name2)
{
pmconflict_t *conflict = malloc(sizeof(pmconflict_t));
if(conflict == NULL) {
_alpm_log(PM_LOG_ERROR, _("malloc failure: could not allocate %d bytes"),
sizeof(pmconflict_t));
return(conflicts);
}
pmfileconflict_t *conflict;
MALLOC(conflict, sizeof(pmfileconflict_t), return(conflicts));
conflict->type = type;
STRNCPY(conflict->target, name1, PKG_NAME_LEN);
STRNCPY(conflict->file, filestr, CONFLICT_FILE_LEN);
strncpy(conflict->target, name1, PKG_NAME_LEN);
strncpy(conflict->file, filestr, CONFLICT_FILE_LEN);
if(name2) {
STRNCPY(conflict->ctarget, name2, PKG_NAME_LEN);
strncpy(conflict->ctarget, name2, PKG_NAME_LEN);
} else {
conflict->ctarget[0] = '\0';
}
conflicts = alpm_list_add(conflicts, conflict);
_alpm_log(PM_LOG_DEBUG, "found file conflict %s, packages %s and %s",
_alpm_log(PM_LOG_DEBUG, "found file conflict %s, packages %s and %s\n",
filestr, name1, name2 ? name2 : "(filesystem)");
return(conflicts);
@@ -369,11 +320,12 @@ static alpm_list_t *add_fileconflict(alpm_list_t *conflicts,
/* Find file conflicts that may occur during the transaction with two checks:
* 1: check every target against every target
* 2: check every target against the filesystem */
alpm_list_t *_alpm_db_find_conflicts(pmdb_t *db, pmtrans_t *trans, char *root)
alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *root)
{
alpm_list_t *i, *conflicts = NULL;
alpm_list_t *targets = trans->packages;
int numtargs = alpm_list_count(targets);
int current;
ALPM_LOG_FUNC;
@@ -381,7 +333,11 @@ alpm_list_t *_alpm_db_find_conflicts(pmdb_t *db, pmtrans_t *trans, char *root)
return(NULL);
}
for(i = targets; i; i = i->next) {
/* TODO this whole function needs a huge change, which hopefully will
* be possible with real transactions. Right now we only do half as much
* here as we do when we actually extract files in add.c with our 12
* different cases. */
for(current = 1, i = targets; i; i = i->next, current++) {
alpm_list_t *j, *k, *tmpfiles = NULL;
pmpkg_t *p1, *p2, *dbpkg;
char path[PATH_MAX+1];
@@ -391,37 +347,35 @@ alpm_list_t *_alpm_db_find_conflicts(pmdb_t *db, pmtrans_t *trans, char *root)
continue;
}
double percent = (double)(alpm_list_count(targets) - alpm_list_count(i) + 1)
/ alpm_list_count(targets);
double percent = (double)current / numtargs;
PROGRESS(trans, PM_TRANS_PROGRESS_CONFLICTS_START, "", (percent * 100),
numtargs, (numtargs - alpm_list_count(i) +1));
numtargs, current);
/* CHECK 1: check every target against every target */
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",
_alpm_log(PM_LOG_DEBUG, "searching for file conflicts: %s and %s\n",
alpm_pkg_get_name(p1), alpm_pkg_get_name(p2));
tmpfiles = chk_fileconflicts(alpm_pkg_get_files(p1), alpm_pkg_get_files(p2));
if(tmpfiles) {
for(k = tmpfiles; k; k = k->next) {
snprintf(path, PATH_MAX, "%s%s", root, (char *)k->data);
conflicts = add_fileconflict(conflicts, PM_CONFLICT_TYPE_TARGET, path,
alpm_pkg_get_name(p1), alpm_pkg_get_name(p2));
conflicts = add_fileconflict(conflicts, PM_FILECONFLICT_TARGET, path,
alpm_pkg_get_name(p1), alpm_pkg_get_name(p2));
}
alpm_list_free_inner(tmpfiles, &free);
alpm_list_free(tmpfiles);
FREELIST(tmpfiles);
}
}
/* declarations for second check */
struct stat buf;
struct stat lsbuf, sbuf;
char *filestr = NULL;
/* CHECK 2: check every target against the filesystem */
_alpm_log(PM_LOG_DEBUG, "searching for filesystem conflicts: %s", p1->name);
_alpm_log(PM_LOG_DEBUG, "searching for filesystem conflicts: %s\n", p1->name);
dbpkg = _alpm_db_get_pkgfromcache(db, p1->name);
/* Do two different checks here. f the package is currently installed,
@@ -429,7 +383,8 @@ alpm_list_t *_alpm_db_find_conflicts(pmdb_t *db, pmtrans_t *trans, char *root)
* is not currently installed, then simply stat the whole filelist */
if(dbpkg) {
/* older ver of package currently installed */
tmpfiles = chk_filedifference(alpm_pkg_get_files(p1), alpm_pkg_get_files(dbpkg));
tmpfiles = chk_filedifference(alpm_pkg_get_files(p1),
alpm_pkg_get_files(dbpkg));
} else {
/* no version of package currently installed */
tmpfiles = alpm_list_strdup(alpm_pkg_get_files(p1));
@@ -437,26 +392,42 @@ alpm_list_t *_alpm_db_find_conflicts(pmdb_t *db, pmtrans_t *trans, char *root)
/* loop over each file to be installed */
for(j = tmpfiles; j; j = j->next) {
int skip_conflict = 0;
filestr = j->data;
snprintf(path, PATH_MAX, "%s%s", root, filestr);
/* stat the file - if it exists and is not a dir, do some checks */
if(lstat(path, &buf) == 0 && !S_ISDIR(buf.st_mode)) {
_alpm_log(PM_LOG_DEBUG, "checking possible conflict: %s", path);
/* stat the file - if it exists, do some checks */
if(_alpm_lstat(path, &lsbuf) != 0) {
continue;
}
stat(path, &sbuf);
if(path[strlen(path)-1] == '/') {
if(S_ISDIR(lsbuf.st_mode)) {
_alpm_log(PM_LOG_DEBUG, "%s is a directory, not a conflict\n", path);
skip_conflict = 1;
} else if(S_ISLNK(lsbuf.st_mode) && S_ISDIR(sbuf.st_mode)) {
_alpm_log(PM_LOG_DEBUG,
"%s is a symlink to a dir, hopefully not a conflict\n", path);
skip_conflict = 1;
}
}
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 buf2;
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);
lstat(str, &buf2);
if(buf.st_ino == buf2.st_ino) {
if(!_alpm_lstat(str, &pkgbuf) && lsbuf.st_ino == pkgbuf.st_ino) {
ok = 1;
_alpm_log(PM_LOG_DEBUG, "conflict was a symlink: %s", path);
_alpm_log(PM_LOG_DEBUG, "conflict was a symlink: %s\n", path);
break;
}
}
@@ -482,42 +453,51 @@ alpm_list_t *_alpm_db_find_conflicts(pmdb_t *db, pmtrans_t *trans, char *root)
if(localp2 && !alpm_list_find_str(pkgfiles, filestr)
&& alpm_list_find_str(localfiles, filestr)) {
/* check if the file is now in the backup array */
if(alpm_list_find_str(alpm_pkg_get_backup(p1), filestr)) {
/* keep file intact if it is in backup array */
trans->skip_add = alpm_list_add(trans->skip_add, strdup(path));
trans->skip_remove = alpm_list_add(trans->skip_remove, strdup(path));
_alpm_log(PM_LOG_DEBUG, "file in backup array, adding to add and remove skiplist: %s", filestr);
resolved_conflict = 1;
break;
} else {
/* skip removal of file, but not add. this will prevent a second
* package from removing the file when it was already installed
* by its new owner */
trans->skip_remove = alpm_list_add(trans->skip_remove, strdup(path));
_alpm_log(PM_LOG_DEBUG, "file changed packages, adding to remove skiplist: %s", filestr);
resolved_conflict = 1;
break;
}
/* skip removal of file, but not add. this will prevent a second
* package from removing the file when it was already installed
* by its new owner (whether the file is in backup array or not */
trans->skip_remove = alpm_list_add(trans->skip_remove, strdup(path));
_alpm_log(PM_LOG_DEBUG, "file changed packages, adding to remove skiplist: %s\n", filestr);
resolved_conflict = 1;
break;
}
}
if(!resolved_conflict) {
_alpm_log(PM_LOG_DEBUG, "file found in conflict: %s", path);
conflicts = add_fileconflict(conflicts, PM_CONFLICT_TYPE_FILE,
path, p1->name, NULL);
_alpm_log(PM_LOG_DEBUG, "file found in conflict: %s\n", path);
conflicts = add_fileconflict(conflicts, PM_FILECONFLICT_FILESYSTEM,
path, p1->name, NULL);
}
} else {
_alpm_log(PM_LOG_DEBUG, "%s is a directory, not a conflict", path);
}
}
alpm_list_free_inner(tmpfiles, &free);
alpm_list_free(tmpfiles);
FREELIST(tmpfiles);
}
return(conflicts);
}
const char SYMEXPORT *alpm_conflict_get_target(pmconflict_t *conflict)
const char SYMEXPORT *alpm_conflict_get_package1(pmconflict_t *conflict)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(conflict != NULL, return(NULL));
return conflict->package1;
}
const char SYMEXPORT *alpm_conflict_get_package2(pmconflict_t *conflict)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(conflict != NULL, return(NULL));
return conflict->package2;
}
const char SYMEXPORT *alpm_fileconflict_get_target(pmfileconflict_t *conflict)
{
ALPM_LOG_FUNC;
@@ -528,7 +508,7 @@ const char SYMEXPORT *alpm_conflict_get_target(pmconflict_t *conflict)
return conflict->target;
}
pmconflicttype_t SYMEXPORT alpm_conflict_get_type(pmconflict_t *conflict)
pmfileconflicttype_t SYMEXPORT alpm_fileconflict_get_type(pmfileconflict_t *conflict)
{
ALPM_LOG_FUNC;
@@ -539,7 +519,7 @@ pmconflicttype_t SYMEXPORT alpm_conflict_get_type(pmconflict_t *conflict)
return conflict->type;
}
const char SYMEXPORT *alpm_conflict_get_file(pmconflict_t *conflict)
const char SYMEXPORT *alpm_fileconflict_get_file(pmfileconflict_t *conflict)
{
ALPM_LOG_FUNC;
@@ -550,7 +530,7 @@ const char SYMEXPORT *alpm_conflict_get_file(pmconflict_t *conflict)
return conflict->file;
}
const char SYMEXPORT *alpm_conflict_get_ctarget(pmconflict_t *conflict)
const char SYMEXPORT *alpm_fileconflict_get_ctarget(pmfileconflict_t *conflict)
{
ALPM_LOG_FUNC;

View File

@@ -1,8 +1,8 @@
/*
* conflict.h
*
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
*
* Copyright (c) 2002-2007 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
@@ -14,9 +14,7 @@
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _ALPM_CONFLICT_H
#define _ALPM_CONFLICT_H
@@ -28,14 +26,23 @@
#define CONFLICT_FILE_LEN 512
struct __pmconflict_t {
char package1[PKG_NAME_LEN];
char package2[PKG_NAME_LEN];
};
struct __pmfileconflict_t {
char target[PKG_NAME_LEN];
pmconflicttype_t type;
pmfileconflicttype_t type;
char file[CONFLICT_FILE_LEN];
char ctarget[PKG_NAME_LEN];
};
pmconflict_t *_alpm_conflict_new(const char *package1, const char *package2);
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_conflicts(pmdb_t *db, pmtrans_t *trans, char *root);
alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans, char *root);
#endif /* _ALPM_CONFLICT_H */

View File

@@ -1,12 +1,12 @@
/*
* db.c
*
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* 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 David Kimpe <dnaku@frugalware.org>
* Copyright (c) 2005, 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
@@ -18,9 +18,7 @@
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
@@ -30,17 +28,11 @@
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <stdint.h> /* uintmax_t */
#include <sys/stat.h>
#if defined(__APPLE__) || defined(__OpenBSD__)
#include <sys/syslimits.h>
#include <sys/stat.h>
#endif
#include <dirent.h>
#include <libintl.h>
#include <regex.h>
#ifdef CYGWIN
#include <limits.h> /* PATH_MAX */
#endif
#include <time.h>
/* libalpm */
#include "db.h"
@@ -53,38 +45,425 @@
#include "cache.h"
#include "alpm.h"
pmdb_t *_alpm_db_new(const char *root, const char *dbpath, const char *treename)
/** \addtogroup alpm_databases Database Functions
* @brief Functions to query and manipulate the database of libalpm
* @{
*/
/** Register a sync database of packages.
* @param treename the name of the sync repository
* @return a pmdb_t* on success (the value), NULL on error
*/
pmdb_t SYMEXPORT *alpm_db_register_sync(const char *treename)
{
pmdb_t *db;
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, NULL));
ASSERT(treename != NULL && strlen(treename) != 0, RET_ERR(PM_ERR_WRONG_ARGS, NULL));
/* Do not register a database if a transaction is on-going */
ASSERT(handle->trans == NULL, RET_ERR(PM_ERR_TRANS_NOT_NULL, NULL));
return(_alpm_db_register_sync(treename));
}
/** Register the local package database.
* @return a pmdb_t* representing the local database, or NULL on error
*/
pmdb_t SYMEXPORT *alpm_db_register_local(void)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, NULL));
/* Do not register a database if a transaction is on-going */
ASSERT(handle->trans == NULL, RET_ERR(PM_ERR_TRANS_NOT_NULL, NULL));
return(_alpm_db_register_local());
}
/* Helper function for alpm_db_unregister{_all} */
static void _alpm_db_unregister(pmdb_t *db)
{
if(db == NULL) {
return;
}
_alpm_log(PM_LOG_DEBUG, "closing database '%s'\n", db->treename);
_alpm_db_close(db);
_alpm_log(PM_LOG_DEBUG, "unregistering database '%s'\n", db->treename);
_alpm_db_free(db);
}
/** Unregister all package databases
* @return 0 on success, -1 on error (pm_errno is set accordingly)
*/
int SYMEXPORT alpm_db_unregister_all(void)
{
alpm_list_t *i;
ALPM_LOG_FUNC;
db = calloc(1, sizeof(pmdb_t));
if(db == NULL) {
_alpm_log(PM_LOG_ERROR, _("malloc failed: could not allocate %d bytes"),
sizeof(pmdb_t));
RET_ERR(PM_ERR_MEMORY, NULL);
/* Sanity checks */
ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1));
/* Do not unregister a database if a transaction is on-going */
ASSERT(handle->trans == NULL, RET_ERR(PM_ERR_TRANS_NOT_NULL, -1));
/* close local database */
_alpm_db_unregister(handle->db_local);
handle->db_local = NULL;
/* and also sync ones */
for(i = handle->dbs_sync; i; i = i->next) {
pmdb_t *db = i->data;
_alpm_db_unregister(db);
i->data = NULL;
}
FREELIST(handle->dbs_sync);
return(0);
}
/** Unregister a package database
* @param db pointer to the package database to unregister
* @return 0 on success, -1 on error (pm_errno is set accordingly)
*/
int SYMEXPORT alpm_db_unregister(pmdb_t *db)
{
int found = 0;
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1));
ASSERT(db != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1));
/* Do not unregister a database if a transaction is on-going */
ASSERT(handle->trans == NULL, RET_ERR(PM_ERR_TRANS_NOT_NULL, -1));
if(db == handle->db_local) {
handle->db_local = NULL;
found = 1;
} else {
/* Warning : this function shouldn't be used to unregister all sync
* databases by walking through the list returned by
* alpm_option_get_syncdbs, because the db is removed from that list here.
*/
void *data;
handle->dbs_sync = alpm_list_remove(handle->dbs_sync,
db, _alpm_db_cmp, &data);
if(data) {
found = 1;
}
}
db->path = calloc(1, strlen(root)+strlen(dbpath)+strlen(treename)+2);
if(db->path == NULL) {
_alpm_log(PM_LOG_ERROR, _("malloc failed: could not allocate %d bytes"),
strlen(root)+strlen(dbpath)+strlen(treename)+2);
FREE(db);
RET_ERR(PM_ERR_MEMORY, NULL);
if(!found) {
RET_ERR(PM_ERR_DB_NOT_FOUND, -1);
}
sprintf(db->path, "%s%s%s/", root, dbpath, treename);
STRNCPY(db->treename, treename, PATH_MAX);
_alpm_db_unregister(db);
return(0);
}
/** Set the serverlist of a database.
* @param db database pointer
* @param url url of the server
* @return 0 on success, -1 on error (pm_errno is set accordingly)
*/
int SYMEXPORT alpm_db_setserver(pmdb_t *db, const char *url)
{
alpm_list_t *i;
int found = 0;
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, -1));
for(i = handle->dbs_sync; i && !found; i = i->next) {
pmdb_t *sdb = i->data;
if(strcmp(db->treename, sdb->treename) == 0) {
found = 1;
}
}
if(!found) {
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);
}
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);
} else {
FREELIST(db->servers);
_alpm_log(PM_LOG_DEBUG, "serverlist flushed for '%s'\n", db->treename);
}
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
*/
const char SYMEXPORT *alpm_db_get_name(const pmdb_t *db)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(db != NULL, return(NULL));
return db->treename;
}
/** Get a download URL for the package database
* @param db pointer to the package database
* @return a fully-specified download URL, NULL on error
*/
const char SYMEXPORT *alpm_db_get_url(const pmdb_t *db)
{
char path[PATH_MAX];
pmserver_t *s;
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(db != NULL, return(NULL));
s = (pmserver_t*)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);
}
/** Get a package entry from a package database
* @param db pointer to the package database to get the package from
* @param name of the package
* @return the package entry on success, NULL on error
*/
pmpkg_t SYMEXPORT *alpm_db_get_pkg(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_get_pkgfromcache(db, name));
}
/** Get the package cache of a package database
* @param db pointer to the package database to get the package from
* @return the list of packages on success, NULL on error
*/
alpm_list_t SYMEXPORT *alpm_db_getpkgcache(pmdb_t *db)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(db != NULL, return(NULL));
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
* @return the groups entry on success, NULL on error
*/
pmgrp_t SYMEXPORT *alpm_db_readgrp(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_get_grpfromcache(db, name));
}
/** Get the group cache of a package database
* @param db pointer to the package database to get the group from
* @return the list of groups on success, NULL on error
*/
alpm_list_t SYMEXPORT *alpm_db_getgrpcache(pmdb_t *db)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(db != NULL, return(NULL));
return(_alpm_db_get_grpcache(db));
}
/** Searches a database
* @param db pointer to the package database to search in
* @param needles the list of strings to search for
* @return the list of packages on success, NULL on error
*/
alpm_list_t SYMEXPORT *alpm_db_search(pmdb_t *db, const alpm_list_t* needles)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(db != NULL, return(NULL));
return(_alpm_db_search(db, needles));
}
/** @} */
pmdb_t *_alpm_db_new(const char *dbpath, const char *treename)
{
pmdb_t *db;
const size_t pathsize = strlen(dbpath) + strlen(treename) + 2;
ALPM_LOG_FUNC;
CALLOC(db, 1, sizeof(pmdb_t), RET_ERR(PM_ERR_MEMORY, NULL));
CALLOC(db->path, 1, pathsize, RET_ERR(PM_ERR_MEMORY, NULL));
sprintf(db->path, "%s%s/", dbpath, treename);
strncpy(db->treename, treename, PATH_MAX);
return(db);
}
void _alpm_db_free(pmdb_t *db)
{
alpm_list_t *tmp;
ALPM_LOG_FUNC;
_FREELIST(db->servers, _alpm_server_free);
/* 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);
FREE(db->path);
FREE(db);
@@ -97,9 +476,10 @@ int _alpm_db_cmp(const void *db1, const void *db2)
return(strcmp(((pmdb_t *)db1)->treename, ((pmdb_t *)db2)->treename));
}
alpm_list_t *_alpm_db_search(pmdb_t *db, alpm_list_t *needles)
alpm_list_t *_alpm_db_search(pmdb_t *db, const alpm_list_t *needles)
{
alpm_list_t *i, *j, *k, *ret = NULL;
const alpm_list_t *i, *j, *k;
alpm_list_t *ret = NULL;
ALPM_LOG_FUNC;
@@ -111,8 +491,8 @@ alpm_list_t *_alpm_db_search(pmdb_t *db, alpm_list_t *needles)
continue;
}
targ = i->data;
_alpm_log(PM_LOG_DEBUG, "searching for target '%s'", targ);
_alpm_log(PM_LOG_DEBUG, "searching for target '%s'\n", targ);
if(regcomp(&reg, targ, REG_EXTENDED | REG_NOSUB | REG_ICASE | REG_NEWLINE) != 0) {
RET_ERR(PM_ERR_INVALID_REGEX, NULL);
}
@@ -125,6 +505,10 @@ alpm_list_t *_alpm_db_search(pmdb_t *db, alpm_list_t *needles)
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 desc */
else if (regexec(&reg, alpm_pkg_get_desc(pkg), 0, 0, 0) == 0) {
matched = alpm_pkg_get_desc(pkg);
@@ -142,7 +526,7 @@ alpm_list_t *_alpm_db_search(pmdb_t *db, alpm_list_t *needles)
}
if(matched != NULL) {
_alpm_log(PM_LOG_DEBUG, " search target '%s' matched '%s'",
_alpm_log(PM_LOG_DEBUG, " search target '%s' matched '%s'\n",
targ, matched);
ret = alpm_list_add(ret, pkg);
}
@@ -154,90 +538,150 @@ alpm_list_t *_alpm_db_search(pmdb_t *db, alpm_list_t *needles)
return(ret);
}
pmdb_t *_alpm_db_register(const char *treename, alpm_cb_db_register callback)
pmdb_t *_alpm_db_register_local(void)
{
struct stat buf;
pmdb_t *db;
const char *dbpath;
char path[PATH_MAX];
ALPM_LOG_FUNC;
if(strcmp(treename, "local") == 0) {
if(handle->db_local != NULL) {
_alpm_log(PM_LOG_WARNING, _("attempt to re-register the 'local' DB"));
RET_ERR(PM_ERR_DB_NOT_NULL, NULL);
}
} else {
alpm_list_t *i;
for(i = handle->dbs_sync; i; i = i->next) {
pmdb_t *sdb = i->data;
if(strcmp(treename, sdb->treename) == 0) {
_alpm_log(PM_LOG_DEBUG, _("attempt to re-register the '%s' database, using existing"), sdb->treename);
return sdb;
}
}
if(handle->db_local != NULL) {
_alpm_log(PM_LOG_WARNING, _("attempt to re-register the 'local' DB\n"));
RET_ERR(PM_ERR_DB_NOT_NULL, NULL);
}
_alpm_log(PM_LOG_DEBUG, _("registering database '%s'"), treename);
_alpm_log(PM_LOG_DEBUG, "registering local database\n");
/* make sure the database directory exists */
snprintf(path, PATH_MAX, "%s%s/%s", handle->root, handle->dbpath, treename);
dbpath = alpm_option_get_dbpath();
if(!dbpath) {
_alpm_log(PM_LOG_ERROR, _("database path is undefined\n"));
RET_ERR(PM_ERR_DB_OPEN, NULL);
}
snprintf(path, PATH_MAX, "%slocal", dbpath);
/* TODO this is rediculous, we try to do this even if we can't */
if(stat(path, &buf) != 0 || !S_ISDIR(buf.st_mode)) {
_alpm_log(PM_LOG_DEBUG, _("database directory '%s' does not exist, creating it"), path);
_alpm_log(PM_LOG_DEBUG, "database dir '%s' does not exist, creating it\n",
path);
if(_alpm_makepath(path) != 0) {
RET_ERR(PM_ERR_SYSTEM, NULL);
}
}
db = _alpm_db_new(handle->root, handle->dbpath, treename);
db = _alpm_db_new(dbpath, "local");
if(db == NULL) {
RET_ERR(PM_ERR_DB_CREATE, NULL);
}
_alpm_log(PM_LOG_DEBUG, _("opening database '%s'"), db->treename);
_alpm_log(PM_LOG_DEBUG, "opening database '%s'\n", db->treename);
if(_alpm_db_open(db) == -1) {
_alpm_db_free(db);
RET_ERR(PM_ERR_DB_OPEN, NULL);
}
/* Only call callback on NEW registration. */
if(callback) callback(treename, db);
if(strcmp(treename, "local") == 0) {
handle->db_local = db;
} else {
handle->dbs_sync = alpm_list_add(handle->dbs_sync, db);
}
handle->db_local = db;
return(db);
}
const char SYMEXPORT *alpm_db_get_name(pmdb_t *db)
pmdb_t *_alpm_db_register_sync(const char *treename)
{
struct stat buf;
pmdb_t *db;
const char *dbpath;
char path[PATH_MAX];
alpm_list_t *i;
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(db != NULL, return(NULL));
for(i = handle->dbs_sync; i; i = i->next) {
pmdb_t *sdb = i->data;
if(strcmp(treename, sdb->treename) == 0) {
_alpm_log(PM_LOG_DEBUG, "attempt to re-register the '%s' database, using existing\n", sdb->treename);
return sdb;
}
}
return db->treename;
_alpm_log(PM_LOG_DEBUG, "registering sync database '%s'\n", treename);
/* make sure the database directory exists */
dbpath = alpm_option_get_dbpath();
if(!dbpath) {
_alpm_log(PM_LOG_ERROR, _("database path is undefined\n"));
RET_ERR(PM_ERR_DB_OPEN, NULL);
}
/* all sync DBs now reside in the sync/ subdir of the dbpath */
snprintf(path, PATH_MAX, "%ssync/%s", dbpath, treename);
/* TODO this is rediculous, we try to do this even if we can't */
if(stat(path, &buf) != 0 || !S_ISDIR(buf.st_mode)) {
_alpm_log(PM_LOG_DEBUG, "database dir '%s' does not exist, creating it\n",
path);
if(_alpm_makepath(path) != 0) {
RET_ERR(PM_ERR_SYSTEM, NULL);
}
}
/* Ensure the db gets the real path. */
path[0] = '\0';
snprintf(path, PATH_MAX, "%ssync/", dbpath);
db = _alpm_db_new(path, treename);
if(db == NULL) {
RET_ERR(PM_ERR_DB_CREATE, NULL);
}
_alpm_log(PM_LOG_DEBUG, "opening database '%s'\n", db->treename);
if(_alpm_db_open(db) == -1) {
_alpm_db_free(db);
RET_ERR(PM_ERR_DB_OPEN, NULL);
}
handle->dbs_sync = alpm_list_add(handle->dbs_sync, db);
return(db);
}
const char *alpm_db_get_url(pmdb_t *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 path[PATH_MAX];
pmserver_t *s;
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;
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(db != NULL, return(NULL));
if(db == NULL || package == NULL || strlen(package) == 0) {
return(NULL);
}
s = (pmserver_t*)db->servers->data;
for(lp = _alpm_db_get_pkgcache(db); lp; lp = lp->next) {
pmpkg_t *info = lp->data;
snprintf(path, PATH_MAX, "%s://%s%s", s->s_url->scheme, s->s_url->host, s->s_url->doc);
return strdup(path);
if(alpm_list_find(alpm_pkg_get_provides(info), (const void *)package, _alpm_prov_cmp)) {
pkgs = alpm_list_add(pkgs, info);
}
}
return(pkgs);
}
/* vim: set ts=2 sw=2 noet: */

View File

@@ -1,10 +1,10 @@
/*
* db.h
*
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* 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
@@ -16,15 +16,14 @@
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _ALPM_DB_H
#define _ALPM_DB_H
#include "alpm.h"
#include <limits.h>
#include <time.h>
/* Database entries */
typedef enum _pmdbinfrq_t {
@@ -33,8 +32,9 @@ typedef enum _pmdbinfrq_t {
INFRQ_DEPENDS = 0x04,
INFRQ_FILES = 0x08,
INFRQ_SCRIPTLET = 0x10,
INFRQ_DELTAS = 0x20,
/* ALL should be sum of all above */
INFRQ_ALL = 0x1F
INFRQ_ALL = 0x3F
} pmdbinfrq_t;
/* Database */
@@ -48,11 +48,16 @@ struct __pmdb_t {
};
/* db.c, database general calls */
pmdb_t *_alpm_db_new(const char *root, const char *dbpath, const char *treename);
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);
alpm_list_t *_alpm_db_search(pmdb_t *db, alpm_list_t *needles);
pmdb_t *_alpm_db_register(const char *treename, alpm_cb_db_register callback);
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);
@@ -63,8 +68,8 @@ pmpkg_t *_alpm_db_scan(pmdb_t *db, const char *target);
int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq);
int _alpm_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq);
int _alpm_db_remove(pmdb_t *db, pmpkg_t *info);
int _alpm_db_getlastupdate(pmdb_t *db, char *ts);
int _alpm_db_setlastupdate(pmdb_t *db, char *ts);
time_t _alpm_db_getlastupdate(const pmdb_t *db);
int _alpm_db_setlastupdate(const pmdb_t *db, time_t time);
#endif /* _ALPM_DB_H */

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

@@ -0,0 +1,266 @@
/*
* delta.c
*
* Copyright (c) 2007 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 <string.h>
/* libalpm */
#include "delta.h"
#include "error.h"
#include "util.h"
#include "log.h"
#include "alpm_list.h"
#include "alpm.h"
/** \addtogroup alpm_deltas Delta Functions
* @brief Functions to manipulate libalpm deltas
* @{
*/
const char SYMEXPORT *alpm_delta_get_from(pmdelta_t *delta)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(delta != NULL, return(NULL));
return(delta->from);
}
const char SYMEXPORT *alpm_delta_get_to(pmdelta_t *delta)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(delta != NULL, return(NULL));
return(delta->to);
}
unsigned long SYMEXPORT alpm_delta_get_size(pmdelta_t *delta)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(delta != NULL, return(-1));
return(delta->size);
}
const char SYMEXPORT *alpm_delta_get_filename(pmdelta_t *delta)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(delta != NULL, return(NULL));
return(delta->filename);
}
const char SYMEXPORT *alpm_delta_get_md5sum(pmdelta_t *delta)
{
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(delta != NULL, return(NULL));
return(delta->md5sum);
}
/** @} */
/** 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)
{
unsigned long sum = 0;
alpm_list_t *dlts = deltas;
while(dlts) {
pmdelta_t *d = (pmdelta_t *)alpm_list_getdata(dlts);
sum += d->size;
dlts = alpm_list_next(dlts);
}
return(sum);
}
/** 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;
while(dlts) {
pmdelta_t *d = (pmdelta_t *)alpm_list_getdata(dlts);
char *fname = _alpm_filecache_find(d->filename);
if(!fname) {
sum += d->size;
}
FREE(fname);
dlts = alpm_list_next(dlts);
}
return(sum);
}
/** 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);
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);
}
}
}
}
alpm_list_free(path);
return(shortest);
}
/** 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.
*/
alpm_list_t *_alpm_shortest_delta_path(alpm_list_t *deltas, const char *from,
const char *to)
{
alpm_list_t *path = NULL;
path = shortest_delta_path(deltas, from, to, path);
return(path);
}
/** Parses the string representation of a pmdelta_t object.
*
* This function assumes that the string is in the correct format.
*
* @param line the string to parse
*
* @return A pointer to the new pmdelta_t object
*/
pmdelta_t *_alpm_delta_parse(char *line)
{
pmdelta_t *delta;
char *tmp = line, *tmp2;
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);
tmp2 = tmp;
tmp = strchr(tmp, ' ');
*(tmp++) = '\0';
strncpy(delta->to, tmp2, DLT_VERSION_LEN);
tmp2 = tmp;
tmp = strchr(tmp, ' ');
*(tmp++) = '\0';
delta->size = atol(tmp2);
tmp2 = tmp;
tmp = strchr(tmp, ' ');
*(tmp++) = '\0';
strncpy(delta->filename, tmp2, DLT_FILENAME_LEN);
strncpy(delta->md5sum, tmp, DLT_MD5SUM_LEN);
return(delta);
}
/* vim: set ts=2 sw=2 noet: */

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

@@ -0,0 +1,43 @@
/*
* delta.h
*
* Copyright (c) 2007 by Judd Vinet <jvinet@zeroflux.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _ALPM_DELTA_H
#define _ALPM_DELTA_H
#include "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];
};
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);
#endif /* _ALPM_DELTA_H */
/* vim: set ts=2 sw=2 noet: */

File diff suppressed because it is too large Load Diff

View File

@@ -1,10 +1,10 @@
/*
* deps.h
*
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* 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
@@ -16,9 +16,7 @@
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _ALPM_DEPS_H
#define _ALPM_DEPS_H
@@ -38,21 +36,24 @@ struct __pmdepend_t {
/* Missing dependency */
struct __pmdepmissing_t {
char target[PKG_NAME_LEN];
pmdeptype_t type;
pmdepend_t depend;
};
pmdepmissing_t *_alpm_depmiss_new(const char *target, pmdeptype_t type,
pmdepmod_t depmod, const char *depname,
const char *depversion);
int _alpm_depmiss_isin(pmdepmissing_t *needle, alpm_list_t *haystack);
/* 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);
alpm_list_t *_alpm_checkdeps(pmtrans_t *trans, pmdb_t *db, pmtranstype_t op,
alpm_list_t *packages);
alpm_list_t *_alpm_removedeps(pmdb_t *db, alpm_list_t *targs);
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 *trail, pmtrans_t *trans,
alpm_list_t **data);
alpm_list_t **list, alpm_list_t *remove, pmtrans_t *trans, alpm_list_t **data);
#endif /* _ALPM_DEPS_H */

View File

@@ -1,11 +1,11 @@
/*
* error.c
*
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* 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>
*
*
* 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
@@ -17,22 +17,23 @@
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
#include <libintl.h>
/* libalpm */
#include "error.h"
#include "util.h"
#include "alpm.h"
/* TODO does this really need a file all on its own? */
char SYMEXPORT *alpm_strerror(int err)
const char SYMEXPORT *alpm_strerrorlast(void)
{
return alpm_strerror(pm_errno);
}
const char SYMEXPORT *alpm_strerror(int err)
{
switch(err) {
/* System */
@@ -44,6 +45,8 @@ char SYMEXPORT *alpm_strerror(int err)
return _("insufficient privileges");
case PM_ERR_NOT_A_FILE:
return _("could not find or read file");
case PM_ERR_NOT_A_DIR:
return _("could not find or read directory");
case PM_ERR_WRONG_ARGS:
return _("wrong or NULL argument passed");
/* Interface */
@@ -118,6 +121,11 @@ char SYMEXPORT *alpm_strerror(int err)
return _("corrupted package");
case PM_ERR_PKG_REPO_NOT_FOUND:
return _("no such repository");
/* Deltas */
case PM_ERR_DLT_CORRUPTED:
return _("corrupted delta");
case PM_ERR_DLT_PATCHFAILED:
return _("delta patch failed");
/* Groups */
case PM_ERR_GRP_NOT_FOUND:
return _("group not found");
@@ -135,20 +143,9 @@ char SYMEXPORT *alpm_strerror(int err)
return _("internal error");
case PM_ERR_LIBARCHIVE_ERROR:
return _("libarchive error");
case PM_ERR_DISK_FULL:
return _("not enough space on disk");
case PM_ERR_PKG_HOLD:
/* TODO wow this is not descriptive at all... what does this mean? */
return _("not confirmed");
/* Configuration file */
case PM_ERR_CONF_BAD_SECTION:
return _("bad configuration section name");
case PM_ERR_CONF_LOCAL:
return _("'local' is reserved and cannot be used as a repository name");
case PM_ERR_CONF_BAD_SYNTAX:
return _("syntax error in config file");
case PM_ERR_CONF_DIRECTIVE_OUTSIDE_SECTION:
return _("all directives must belong to a section");
case PM_ERR_INVALID_REGEX:
return _("invalid regular expression");
/* Downloading */

View File

@@ -1,8 +1,8 @@
/*
* error.h
*
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
*
* Copyright (c) 2002-2007 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
@@ -14,15 +14,13 @@
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _ALPM_ERROR_H
#define _ALPM_ERROR_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_strerror(err)); \
_alpm_log(PM_LOG_DEBUG, "returning error %d from %s : %s\n", err, __func__, alpm_strerrorlast()); \
return(ret); } while(0)
#endif /* _ALPM_ERROR_H */

View File

@@ -1,7 +1,7 @@
/*
* group.c
*
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2002-2007 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
@@ -14,9 +14,7 @@
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
@@ -24,7 +22,6 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <libintl.h>
/* libalpm */
#include "group.h"
@@ -40,20 +37,13 @@ pmgrp_t *_alpm_grp_new()
ALPM_LOG_FUNC;
grp = calloc(1, sizeof(pmgrp_t));
if(grp == NULL) {
_alpm_log(PM_LOG_ERROR, _("malloc failure: could not allocate %d bytes"),
sizeof(pmgrp_t));
RET_ERR(PM_ERR_MEMORY, NULL);
}
CALLOC(grp, 1, sizeof(pmgrp_t), RET_ERR(PM_ERR_MEMORY, NULL));
return(grp);
}
void _alpm_grp_free(void *data)
void _alpm_grp_free(pmgrp_t *grp)
{
pmgrp_t *grp = data;
ALPM_LOG_FUNC;
if(grp == NULL) {
@@ -62,8 +52,6 @@ void _alpm_grp_free(void *data)
FREELIST(grp->packages);
FREE(grp);
return;
}
/* Helper function for sorting groups
@@ -76,7 +64,7 @@ int _alpm_grp_cmp(const void *g1, const void *g2)
return(strcmp(grp1->name, grp2->name));
}
const char SYMEXPORT *alpm_grp_get_name(pmgrp_t *grp)
const char SYMEXPORT *alpm_grp_get_name(const pmgrp_t *grp)
{
ALPM_LOG_FUNC;
@@ -86,7 +74,7 @@ const char SYMEXPORT *alpm_grp_get_name(pmgrp_t *grp)
return grp->name;
}
alpm_list_t SYMEXPORT *alpm_grp_get_pkgs(pmgrp_t *grp)
const alpm_list_t SYMEXPORT *alpm_grp_get_pkgs(const pmgrp_t *grp)
{
ALPM_LOG_FUNC;

View File

@@ -1,8 +1,8 @@
/*
* group.h
*
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
*
* Copyright (c) 2002-2007 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
@@ -14,9 +14,7 @@
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _ALPM_GROUP_H
#define _ALPM_GROUP_H
@@ -31,11 +29,8 @@ struct __pmgrp_t {
alpm_list_t *packages; /* List of strings */
};
#define FREEGRP(p) do { if(p) { _alpm_grp_free(p); p = NULL; } } while(0)
#define FREELISTGRPS(p) _FREELIST(p, _alpm_grp_free)
pmgrp_t *_alpm_grp_new(void);
void _alpm_grp_free(void *data);
void _alpm_grp_free(pmgrp_t *grp);
int _alpm_grp_cmp(const void *g1, const void *g2);
#endif /* _ALPM_GROUP_H */

View File

@@ -1,10 +1,10 @@
/*
* handle.c
*
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org>
*
*
* 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
@@ -16,9 +16,7 @@
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
@@ -29,8 +27,9 @@
#include <limits.h>
#include <sys/types.h>
#include <syslog.h>
#include <libintl.h>
#include <time.h>
#include <sys/stat.h>
#include <errno.h>
/* libalpm */
#include "handle.h"
@@ -42,62 +41,44 @@
#include "alpm.h"
#include "server.h"
/* global var for handle (private to libalpm) */
pmhandle_t *handle = NULL;
pmhandle_t *_alpm_handle_new()
{
pmhandle_t *handle;
handle = (pmhandle_t *)malloc(sizeof(pmhandle_t));
if(handle == NULL) {
_alpm_log(PM_LOG_ERROR, _("malloc failure: could not allocate %d bytes"), sizeof(pmhandle_t));
RET_ERR(PM_ERR_MEMORY, NULL);
}
ALPM_LOG_FUNC;
CALLOC(handle, 1, sizeof(pmhandle_t), RET_ERR(PM_ERR_MEMORY, NULL));
memset(handle, 0, sizeof(pmhandle_t));
handle->lckfd = -1;
handle->logstream = NULL;
#ifndef CYGWIN
/* see if we're root or not */
handle->uid = geteuid();
//#ifndef FAKEROOT
// if(!handle->uid && getenv("FAKEROOTKEY")) {
// /* fakeroot doesn't count, we're non-root */
// handle->uid = 99;
// }
//#endif
//
// /* see if we're root or not (fakeroot does not count) */
//#ifndef FAKEROOT
// if(handle->uid == 0 && !getenv("FAKEROOTKEY")) {
// /* } make vim indent work - stupid ifdef's */
//#else
// if(handle->uid == 0) {
//#endif
// handle->access = PM_ACCESS_RW;
// } else {
// handle->access = PM_ACCESS_RO;
// }
//#else
handle->access = PM_ACCESS_RW;
#endif
handle->root = strdup(PM_ROOT);
handle->dbpath = strdup(PM_DBPATH);
handle->cachedir = strdup(PM_CACHEDIR);
handle->logmask = PM_LOG_ERROR | PM_LOG_WARNING;
handle->root = NULL;
handle->dbpath = NULL;
handle->cachedirs = NULL;
handle->lockfile = NULL;
handle->logfile = NULL;
handle->usedelta = 0;
return(handle);
}
int _alpm_handle_free(pmhandle_t *handle)
void _alpm_handle_free(pmhandle_t *handle)
{
ALPM_LOG_FUNC;
ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1));
if(handle == NULL) {
return;
}
/* close logfiles */
if(handle->logfd) {
fclose(handle->logfd);
handle->logfd = NULL;
/* close logfile */
if(handle->logstream) {
fclose(handle->logstream);
handle->logstream= NULL;
}
if(handle->usesyslog) {
handle->usesyslog = 0;
@@ -105,197 +86,486 @@ int _alpm_handle_free(pmhandle_t *handle)
}
/* free memory */
FREETRANS(handle->trans);
_alpm_trans_free(handle->trans);
FREE(handle->root);
FREE(handle->dbpath);
FREE(handle->cachedir);
FREELIST(handle->cachedirs);
FREE(handle->logfile);
FREE(handle->lockfile);
FREE(handle->xfercommand);
FREELIST(handle->dbs_sync);
FREELIST(handle->noupgrade);
FREELIST(handle->noextract);
FREELIST(handle->ignorepkg);
FREELIST(handle->holdpkg);
FREELIST(handle->ignoregrp);
FREE(handle);
return(0);
}
alpm_cb_log alpm_option_get_logcb() { return (handle ? handle->logcb : NULL); }
alpm_cb_download alpm_option_get_dlcb() { return (handle ? handle->dlcb : NULL); }
unsigned short SYMEXPORT alpm_option_get_logmask() { return handle->logmask; }
const char SYMEXPORT *alpm_option_get_root() { return handle->root; }
const char SYMEXPORT *alpm_option_get_dbpath() { return handle->dbpath; }
const char SYMEXPORT *alpm_option_get_cachedir() { return handle->cachedir; }
const char *alpm_option_get_logfile() { return handle->logfile; }
unsigned short alpm_option_get_usesyslog() { return handle->usesyslog; }
alpm_list_t *alpm_option_get_noupgrades() { return handle->noupgrade; }
alpm_list_t *alpm_option_get_noextracts() { return handle->noextract; }
alpm_list_t *alpm_option_get_ignorepkgs() { return handle->ignorepkg; }
alpm_list_t *alpm_option_get_holdpkgs() { return handle->holdpkg; }
time_t alpm_option_get_upgradedelay() { return handle->upgradedelay; }
const char *alpm_option_get_xfercommand() { return handle->xfercommand; }
unsigned short alpm_option_get_nopassiveftp() { return handle->nopassiveftp; }
unsigned short SYMEXPORT alpm_option_get_chomp() { return handle->chomp; }
unsigned short alpm_option_get_usecolor() { return handle->use_color; }
alpm_cb_log SYMEXPORT alpm_option_get_logcb()
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return NULL;
}
return handle->logcb;
}
alpm_cb_download SYMEXPORT alpm_option_get_dlcb()
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return NULL;
}
return handle->dlcb;
}
const char SYMEXPORT *alpm_option_get_root()
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return NULL;
}
return handle->root;
}
const char SYMEXPORT *alpm_option_get_dbpath()
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return NULL;
}
return handle->dbpath;
}
alpm_list_t SYMEXPORT *alpm_option_get_cachedirs()
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return NULL;
}
return handle->cachedirs;
}
const char SYMEXPORT *alpm_option_get_logfile()
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return NULL;
}
return handle->logfile;
}
const char SYMEXPORT *alpm_option_get_lockfile()
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return NULL;
}
return handle->lockfile;
}
unsigned short SYMEXPORT alpm_option_get_usesyslog()
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return -1;
}
return handle->usesyslog;
}
alpm_list_t SYMEXPORT *alpm_option_get_noupgrades()
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return NULL;
}
return handle->noupgrade;
}
alpm_list_t SYMEXPORT *alpm_option_get_noextracts()
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return NULL;
}
return handle->noextract;
}
alpm_list_t SYMEXPORT *alpm_option_get_ignorepkgs()
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return NULL;
}
return handle->ignorepkg;
}
alpm_list_t SYMEXPORT *alpm_option_get_holdpkgs()
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return NULL;
}
return handle->holdpkg;
}
alpm_list_t SYMEXPORT *alpm_option_get_ignoregrps()
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return NULL;
}
return handle->ignoregrp;
}
const char SYMEXPORT *alpm_option_get_xfercommand()
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return NULL;
}
return handle->xfercommand;
}
unsigned short SYMEXPORT alpm_option_get_nopassiveftp()
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return -1;
}
return handle->nopassiveftp;
}
pmdb_t SYMEXPORT *alpm_option_get_localdb()
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return NULL;
}
return handle->db_local;
}
pmdb_t SYMEXPORT *alpm_option_get_localdb() { return handle->db_local; }
alpm_list_t SYMEXPORT *alpm_option_get_syncdbs()
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return NULL;
}
return handle->dbs_sync;
}
void SYMEXPORT alpm_option_set_logcb(alpm_cb_log cb) { handle->logcb = cb; }
void SYMEXPORT alpm_option_set_dlcb(alpm_cb_download cb) { handle->dlcb = cb; }
void SYMEXPORT alpm_option_set_logmask(unsigned short mask) { handle->logmask = mask; }
void SYMEXPORT alpm_option_set_root(const char *root)
void SYMEXPORT alpm_option_set_logcb(alpm_cb_log cb)
{
if(handle->root) FREE(handle->root);
/* According to the man page, realpath is safe to use IFF the second arg is
* NULL. */
char *realroot = realpath(root, NULL);
if(realroot) {
root = realroot;
} else {
_alpm_log(PM_LOG_ERROR, _("cannot canonicalize specified root path '%s'"), root);
}
if(root) {
/* verify root ends in a '/' */
int rootlen = strlen(realroot);
if(realroot[rootlen-1] != '/') {
rootlen += 1;
}
handle->root = calloc(rootlen+1, sizeof(char));
strncpy(handle->root, realroot, rootlen);
handle->root[rootlen-1] = '/';
_alpm_log(PM_LOG_DEBUG, _("option 'root' = %s"), handle->root);
}
if(realroot) {
free(realroot);
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return;
}
handle->logcb = cb;
}
void SYMEXPORT alpm_option_set_dbpath(const char *dbpath)
void SYMEXPORT alpm_option_set_dlcb(alpm_cb_download cb)
{
if(handle->dbpath) FREE(handle->dbpath);
if(dbpath) {
/* verify dbpath ends in a '/' */
int dbpathlen = strlen(dbpath);
if(dbpath[dbpathlen-1] != '/') {
dbpathlen += 1;
}
handle->dbpath = calloc(dbpathlen+1, sizeof(char));
strncpy(handle->dbpath, dbpath, dbpathlen);
handle->dbpath[dbpathlen-1] = '/';
_alpm_log(PM_LOG_DEBUG, _("option 'dbpath' = %s"), handle->dbpath);
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
return;
}
handle->dlcb = cb;
}
void SYMEXPORT alpm_option_set_cachedir(const char *cachedir)
int SYMEXPORT alpm_option_set_root(const char *root)
{
if(handle->cachedir) FREE(handle->cachedir);
if(cachedir) {
/* verify cachedir ends in a '/' */
int cachedirlen = strlen(cachedir);
if(cachedir[cachedirlen-1] != '/') {
cachedirlen += 1;
}
handle->cachedir = calloc(cachedirlen+1, sizeof(char));
strncpy(handle->cachedir, cachedir, cachedirlen);
handle->cachedir[cachedirlen-1] = '/';
_alpm_log(PM_LOG_DEBUG, _("option 'cachedir' = %s"), handle->cachedir);
}
}
struct stat st;
char *realroot;
size_t rootlen;
void alpm_option_set_logfile(const char *logfile)
{
ALPM_LOG_FUNC;
if(handle->logfile) {
FREE(handle->logfile);
if(handle->logfd) {
fclose(handle->logfd);
handle->logfd = NULL;
}
if(!root) {
pm_errno = PM_ERR_WRONG_ARGS;
return(-1);
}
if(logfile) {
handle->logfile = strdup(logfile);
handle->logfd = fopen(logfile, "a");
if(stat(root, &st) == -1 || !S_ISDIR(st.st_mode)) {
pm_errno = PM_ERR_NOT_A_DIR;
return(-1);
}
realroot = calloc(PATH_MAX+1, sizeof(char));
if(!realpath(root, realroot)) {
pm_errno = PM_ERR_NOT_A_DIR;
return(-1);
}
/* verify root ends in a '/' */
rootlen = strlen(realroot);
if(realroot[rootlen-1] != '/') {
rootlen += 1;
}
if(handle->root) {
FREE(handle->root);
}
handle->root = calloc(rootlen + 1, sizeof(char));
strncpy(handle->root, realroot, rootlen);
handle->root[rootlen-1] = '/';
FREE(realroot);
_alpm_log(PM_LOG_DEBUG, "option 'root' = %s\n", handle->root);
return(0);
}
void alpm_option_set_usesyslog(unsigned short usesyslog)
int SYMEXPORT alpm_option_set_dbpath(const char *dbpath)
{
struct stat st;
size_t dbpathlen, lockfilelen;
const char *lf = "db.lck";
ALPM_LOG_FUNC;
if(!dbpath) {
pm_errno = PM_ERR_WRONG_ARGS;
return(-1);
}
if(stat(dbpath, &st) == -1 || !S_ISDIR(st.st_mode)) {
pm_errno = PM_ERR_NOT_A_DIR;
return(-1);
}
/* verify dbpath ends in a '/' */
dbpathlen = strlen(dbpath);
if(dbpath[dbpathlen-1] != '/') {
dbpathlen += 1;
}
if(handle->dbpath) {
FREE(handle->dbpath);
}
handle->dbpath = calloc(dbpathlen+1, sizeof(char));
strncpy(handle->dbpath, dbpath, dbpathlen);
handle->dbpath[dbpathlen-1] = '/';
_alpm_log(PM_LOG_DEBUG, "option 'dbpath' = %s\n", handle->dbpath);
if(handle->lockfile) {
FREE(handle->lockfile);
}
lockfilelen = strlen(handle->dbpath) + strlen(lf) + 1;
handle->lockfile = calloc(lockfilelen, sizeof(char));
snprintf(handle->lockfile, lockfilelen, "%s%s", handle->dbpath, lf);
_alpm_log(PM_LOG_DEBUG, "option 'lockfile' = %s\n", handle->lockfile);
return(0);
}
int SYMEXPORT alpm_option_add_cachedir(const char *cachedir)
{
char *newcachedir;
size_t cachedirlen;
ALPM_LOG_FUNC;
if(!cachedir) {
pm_errno = PM_ERR_WRONG_ARGS;
return(-1);
}
/* don't stat the cachedir yet, as it may not even be needed. we can
* fail later if it is needed and the path is invalid. */
/* verify cachedir ends in a '/' */
cachedirlen = strlen(cachedir);
if(cachedir[cachedirlen-1] != '/') {
cachedirlen += 1;
}
newcachedir = calloc(cachedirlen + 1, sizeof(char));
strncpy(newcachedir, cachedir, cachedirlen);
newcachedir[cachedirlen-1] = '/';
handle->cachedirs = alpm_list_add(handle->cachedirs, newcachedir);
_alpm_log(PM_LOG_DEBUG, "option 'cachedir' = %s\n", newcachedir);
return(0);
}
void SYMEXPORT alpm_option_set_cachedirs(alpm_list_t *cachedirs)
{
if(handle->cachedirs) FREELIST(handle->cachedirs);
if(cachedirs) handle->cachedirs = cachedirs;
}
int SYMEXPORT alpm_option_remove_cachedir(const char *cachedir)
{
void *vdata = NULL;
char *newcachedir;
size_t cachedirlen;
/* verify cachedir ends in a '/' */
cachedirlen = strlen(cachedir);
if(cachedir[cachedirlen-1] != '/') {
cachedirlen += 1;
}
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);
FREE(newcachedir);
if(vdata != NULL) {
FREE(vdata);
return(1);
}
return(0);
}
int SYMEXPORT alpm_option_set_logfile(const char *logfile)
{
char *oldlogfile = handle->logfile;
ALPM_LOG_FUNC;
if(!logfile) {
pm_errno = PM_ERR_WRONG_ARGS;
return(-1);
}
handle->logfile = strdup(logfile);
/* free the old logfile path string, and close the stream so logaction
* will reopen a new stream on the new logfile */
if(oldlogfile) {
FREE(oldlogfile);
}
if(handle->logstream) {
fclose(handle->logstream);
}
_alpm_log(PM_LOG_DEBUG, "option 'logfile' = %s\n", handle->logfile);
return(0);
}
void SYMEXPORT alpm_option_set_usesyslog(unsigned short usesyslog)
{
handle->usesyslog = usesyslog;
}
void alpm_option_add_noupgrade(char *pkg)
void SYMEXPORT alpm_option_add_noupgrade(const char *pkg)
{
handle->noupgrade = alpm_list_add(handle->noupgrade, strdup(pkg));
}
void alpm_option_set_noupgrades(alpm_list_t *noupgrade)
void SYMEXPORT alpm_option_set_noupgrades(alpm_list_t *noupgrade)
{
if(handle->noupgrade) FREELIST(handle->noupgrade);
if(noupgrade) handle->noupgrade = noupgrade;
}
void alpm_option_add_noextract(char *pkg)
int SYMEXPORT alpm_option_remove_noupgrade(const char *pkg)
{
void *vdata = NULL;
handle->noupgrade = alpm_list_remove(handle->noupgrade, pkg,
_alpm_str_cmp, &vdata);
if(vdata != NULL) {
FREE(vdata);
return(1);
}
return(0);
}
void SYMEXPORT alpm_option_add_noextract(const char *pkg)
{
handle->noextract = alpm_list_add(handle->noextract, strdup(pkg));
}
void alpm_option_set_noextracts(alpm_list_t *noextract)
void SYMEXPORT alpm_option_set_noextracts(alpm_list_t *noextract)
{
if(handle->noextract) FREELIST(handle->noextract);
if(noextract) handle->noextract = noextract;
}
void SYMEXPORT alpm_option_add_ignorepkg(char *pkg)
int SYMEXPORT alpm_option_remove_noextract(const char *pkg)
{
void *vdata = NULL;
handle->noextract = alpm_list_remove(handle->noextract, pkg,
_alpm_str_cmp, &vdata);
if(vdata != NULL) {
FREE(vdata);
return(1);
}
return(0);
}
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;
}
void alpm_option_add_holdpkg(char *pkg)
int SYMEXPORT alpm_option_remove_ignorepkg(const char *pkg)
{
void *vdata = NULL;
handle->ignorepkg = alpm_list_remove(handle->ignorepkg, pkg,
_alpm_str_cmp, &vdata);
if(vdata != NULL) {
FREE(vdata);
return(1);
}
return(0);
}
void SYMEXPORT alpm_option_add_holdpkg(const char *pkg)
{
handle->holdpkg = alpm_list_add(handle->holdpkg, strdup(pkg));
}
void alpm_option_set_holdpkgs(alpm_list_t *holdpkgs)
void SYMEXPORT alpm_option_set_holdpkgs(alpm_list_t *holdpkgs)
{
if(handle->holdpkg) FREELIST(handle->holdpkg);
if(holdpkgs) handle->holdpkg = holdpkgs;
}
void alpm_option_set_upgradedelay(time_t delay)
int SYMEXPORT alpm_option_remove_holdpkg(const char *pkg)
{
handle->upgradedelay = delay;
void *vdata = NULL;
handle->holdpkg = alpm_list_remove(handle->holdpkg, pkg,
_alpm_str_cmp, &vdata);
if(vdata != NULL) {
FREE(vdata);
return(1);
}
return(0);
}
void alpm_option_set_xfercommand(const char *cmd)
void SYMEXPORT alpm_option_add_ignoregrp(const char *grp)
{
handle->ignoregrp = alpm_list_add(handle->ignoregrp, strdup(grp));
}
void SYMEXPORT alpm_option_set_ignoregrps(alpm_list_t *ignoregrps)
{
if(handle->ignoregrp) FREELIST(handle->ignoregrp);
if(ignoregrps) handle->ignoregrp = 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);
if(vdata != NULL) {
FREE(vdata);
return(1);
}
return(0);
}
void SYMEXPORT alpm_option_set_xfercommand(const char *cmd)
{
if(handle->xfercommand) FREE(handle->xfercommand);
if(cmd) handle->xfercommand = strdup(cmd);
}
void alpm_option_set_nopassiveftp(unsigned short nopasv)
void SYMEXPORT alpm_option_set_nopassiveftp(unsigned short nopasv)
{
handle->nopassiveftp = nopasv;
}
void alpm_option_set_chomp(unsigned short chomp) { handle->chomp = chomp; }
void alpm_option_set_usecolor(unsigned short usecolor)
void SYMEXPORT alpm_option_set_usedelta(unsigned short usedelta)
{
handle->use_color = usecolor;
handle->usedelta = usedelta;
}
/* vim: set ts=2 sw=2 noet: */

View File

@@ -1,8 +1,8 @@
/*
* handle.h
*
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
*
* Copyright (c) 2002-2007 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
@@ -14,14 +14,13 @@
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _ALPM_HANDLE_H
#define _ALPM_HANDLE_H
#include <stdio.h>
#include <stdio.h>
#include <sys/types.h>
#include "alpm_list.h"
#include "db.h"
@@ -29,50 +28,45 @@
#include "alpm.h"
#include "trans.h"
typedef enum _pmaccess_t {
PM_ACCESS_RO,
PM_ACCESS_RW
} pmaccess_t;
typedef struct _pmhandle_t {
/* Internal */
pmaccess_t access;
uid_t uid;
pmdb_t *db_local;
alpm_list_t *dbs_sync; /* List of (pmdb_t *) */
FILE *logfd;
int lckfd;
/* 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 */
int lckfd; /* lock file descriptor if one exists */
pmtrans_t *trans;
/* options */
alpm_cb_log logcb; /* Log callback function */
alpm_cb_download dlcb; /* Download callback function */
unsigned short logmask; /* Output mask for logging functions */
char *root; /* Root path, default '/' */
char *dbpath; /* Base path to pacman's DBs */
char *cachedir; /* Base path to pacman's cache */
char *logfile; /* Name of the file to log to */ /*TODO is this used?*/
unsigned short usesyslog; /* Use syslog instead of logfile? */
alpm_list_t *noupgrade; /* List of packages NOT to be upgraded */
alpm_list_t *noextract; /* List of packages NOT to extrace */ /*TODO is this used?*/
alpm_list_t *ignorepkg; /* List of packages to ignore */
alpm_list_t *holdpkg; /* List of packages which 'hold' pacman */
time_t upgradedelay; /* Amount of time to wait before upgrading a package*/
/* servers */
char *xfercommand; /* External download command */
/* callback functions */
alpm_cb_log logcb; /* Log callback function */
alpm_cb_download dlcb; /* Download callback function */
/* filesystem paths */
char *root; /* Root path, default '/' */
char *dbpath; /* Base path to pacman's DBs */
char *logfile; /* Name of the log file */
char *lockfile; /* Name of the lock file */
alpm_list_t *cachedirs; /* Paths to pacman cache directories */
/* 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 *ignorepkg; /* List of packages to ignore */
alpm_list_t *holdpkg; /* List of packages which 'hold' pacman */
alpm_list_t *ignoregrp; /* List of groups to ignore */
/* options */
unsigned short usesyslog; /* Use syslog instead of logfile? */ /* TODO move to frontend */
unsigned short nopassiveftp; /* Don't use PASV ftp connections */
unsigned short chomp; /* I Love Candy! */
unsigned short use_color; /* enable colorful output */
char *xfercommand; /* External download command */
unsigned short usedelta; /* Download deltas if possible */
} pmhandle_t;
/* global handle variable */
extern pmhandle_t *handle;
#define FREEHANDLE(p) do { if (p) { _alpm_handle_free(p); p = NULL; } } while (0)
pmhandle_t *_alpm_handle_new();
int _alpm_handle_free(pmhandle_t *handle);
void _alpm_handle_free(pmhandle_t *handle);
#endif /* _ALPM_HANDLE_H */

View File

@@ -1,8 +1,8 @@
/*
* log.c
*
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
*
* Copyright (c) 2002-2007 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
@@ -14,38 +14,92 @@
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
#include <stdio.h>
#include <stdarg.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <time.h>
/* libalpm */
#include "log.h"
#include "handle.h"
#include "util.h"
#include "error.h"
#include "alpm.h"
/** \addtogroup alpm_log Logging Functions
* @brief Functions to log using libalpm
* @{
*/
/** A printf-like function for logging.
* @param fmt output format
* @return 0 on success, -1 on error (pm_errno is set accordingly)
*/
int SYMEXPORT alpm_logaction(char *fmt, ...)
{
int ret;
va_list args;
ALPM_LOG_FUNC;
/* Sanity checks */
ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1));
/* check if the logstream is open already, opening it if needed */
if(handle->logstream == NULL) {
handle->logstream = fopen(handle->logfile, "a");
/* if we couldn't open it, we have an issue */
if(handle->logstream == NULL) {
if(errno == EACCES) {
pm_errno = PM_ERR_BADPERMS;
} else if(errno == ENOENT) {
pm_errno = PM_ERR_NOT_A_DIR;
} else {
pm_errno = PM_ERR_SYSTEM;
}
return(-1);
}
}
va_start(args, fmt);
ret = _alpm_logaction(handle->usesyslog, handle->logstream, fmt, args);
va_end(args);
/* TODO We should add a prefix to log strings depending on who called us.
* If logaction was called by the frontend:
* USER: <the frontend log>
* and if called internally:
* ALPM: <the library log>
* Moreover, the frontend should be able to choose its prefix
* (USER by default?):
* pacman: "PACMAN"
* kpacman: "KPACMAN"
* This would allow us to share the log file between several frontends
* and know who does what */
return(ret);
}
/** @} */
void _alpm_log(pmloglevel_t flag, char *fmt, ...)
{
va_list args;
alpm_cb_log logcb = alpm_option_get_logcb();
if(logcb == NULL) {
return;
}
if(flag & alpm_option_get_logmask()) {
char str[LOG_STR_LEN];
va_list args;
va_start(args, fmt);
vsnprintf(str, LOG_STR_LEN, fmt, args);
va_end(args);
logcb(flag, str);
}
va_start(args, fmt);
logcb(flag, fmt, args);
va_end(args);
}
/* vim: set ts=2 sw=2 noet: */

View File

@@ -1,8 +1,8 @@
/*
* log.h
*
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
*
* Copyright (c) 2002-2007 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
@@ -14,25 +14,21 @@
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _ALPM_LOG_H
#define _ALPM_LOG_H
#include "alpm.h"
#define LOG_STR_LEN 1024
#ifdef PACMAN_DEBUG
/* Log funtion entry points if debugging is enabled */
#define ALPM_LOG_FUNC _alpm_log(PM_LOG_FUNCTION, "Enter %s", __func__)
#define ALPM_LOG_FUNC _alpm_log(PM_LOG_FUNCTION, "Enter %s\n", __func__)
#else
#define ALPM_LOG_FUNC
#endif
void _alpm_log(pmloglevel_t flag, char *fmt, ...);
void _alpm_log(pmloglevel_t flag, char *fmt, ...) __attribute__((format(printf,2,3)));
#endif /* _ALPM_LOG_H */

View File

@@ -1,307 +1,334 @@
/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
/*
* RFC 1321 compliant MD5 implementation
*
* 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 library 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.
*
* 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/>.
*/
/*
* The MD5 algorithm was designed by Ron Rivest in 1991.
*
* http://www.ietf.org/rfc/rfc1321.txt
*/
/*
* 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
* as following, which may be helpful for future updates:
* * change include from "xyssl/md5.h" to "md5.h"
* * removal of HMAC code
* * removal of SELF_TEST code
* * removal of ipad and opad from the md5_context struct in md5.h
* * change of md5_file prototype from
* int md5_file( char *path, unsigned char *output )
* to
* int md5_file( const char *path, unsigned char *output )
*/
/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
rights reserved.
License to copy and use this software is granted provided that it
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
Algorithm" in all material mentioning or referencing this software
or this function.
License is also granted to make and use derivative works provided
that such works are identified as "derived from the RSA Data
Security, Inc. MD5 Message-Digest Algorithm" in all material
mentioning or referencing the derived work.
RSA Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided "as is"
without express or implied warranty of any kind.
These notices must be retained in any copies of any part of this
documentation and/or software.
*/
#ifndef _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_DEPRECATE 1
#endif
#include <string.h>
#include <stdio.h>
#include "md5.h"
/* Constants for MD5Transform routine.
/*
* 32-bit integer manipulation macros (little endian)
*/
#ifndef GET_UINT32_LE
#define GET_UINT32_LE(n,b,i) \
{ \
(n) = ( (unsigned long) (b)[(i) ] ) \
| ( (unsigned long) (b)[(i) + 1] << 8 ) \
| ( (unsigned long) (b)[(i) + 2] << 16 ) \
| ( (unsigned long) (b)[(i) + 3] << 24 ); \
}
#endif
#define S11 7
#define S12 12
#define S13 17
#define S14 22
#define S21 5
#define S22 9
#define S23 14
#define S24 20
#define S31 4
#define S32 11
#define S33 16
#define S34 23
#define S41 6
#define S42 10
#define S43 15
#define S44 21
#ifndef PUT_UINT32_LE
#define PUT_UINT32_LE(n,b,i) \
{ \
(b)[(i) ] = (unsigned char) ( (n) ); \
(b)[(i) + 1] = (unsigned char) ( (n) >> 8 ); \
(b)[(i) + 2] = (unsigned char) ( (n) >> 16 ); \
(b)[(i) + 3] = (unsigned char) ( (n) >> 24 ); \
}
#endif
static void MD5Transform(UINT4 [4], unsigned char [64]);
static void Encode(unsigned char *, UINT4 *, unsigned int);
static void Decode(UINT4 *, unsigned char *, unsigned int);
/*
* MD5 context setup
*/
static inline void md5_starts( md5_context *ctx )
{
ctx->total[0] = 0;
ctx->total[1] = 0;
static unsigned char 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, 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, 0
ctx->state[0] = 0x67452301;
ctx->state[1] = 0xEFCDAB89;
ctx->state[2] = 0x98BADCFE;
ctx->state[3] = 0x10325476;
}
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 );
#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))
#define P(a,b,c,d,k,s,t) \
{ \
a += F(b,c,d) + X[k] + t; a = S(a,s) + b; \
}
A = ctx->state[0];
B = ctx->state[1];
C = ctx->state[2];
D = ctx->state[3];
#define F(x,y,z) (z ^ (x & (y ^ z)))
P( A, B, C, D, 0, 7, 0xD76AA478 );
P( D, A, B, C, 1, 12, 0xE8C7B756 );
P( C, D, A, B, 2, 17, 0x242070DB );
P( B, C, D, A, 3, 22, 0xC1BDCEEE );
P( A, B, C, D, 4, 7, 0xF57C0FAF );
P( D, A, B, C, 5, 12, 0x4787C62A );
P( C, D, A, B, 6, 17, 0xA8304613 );
P( B, C, D, A, 7, 22, 0xFD469501 );
P( A, B, C, D, 8, 7, 0x698098D8 );
P( D, A, B, C, 9, 12, 0x8B44F7AF );
P( C, D, A, B, 10, 17, 0xFFFF5BB1 );
P( B, C, D, A, 11, 22, 0x895CD7BE );
P( A, B, C, D, 12, 7, 0x6B901122 );
P( D, A, B, C, 13, 12, 0xFD987193 );
P( C, D, A, B, 14, 17, 0xA679438E );
P( B, C, D, A, 15, 22, 0x49B40821 );
#undef F
#define F(x,y,z) (y ^ (z & (x ^ y)))
P( A, B, C, D, 1, 5, 0xF61E2562 );
P( D, A, B, C, 6, 9, 0xC040B340 );
P( C, D, A, B, 11, 14, 0x265E5A51 );
P( B, C, D, A, 0, 20, 0xE9B6C7AA );
P( A, B, C, D, 5, 5, 0xD62F105D );
P( D, A, B, C, 10, 9, 0x02441453 );
P( C, D, A, B, 15, 14, 0xD8A1E681 );
P( B, C, D, A, 4, 20, 0xE7D3FBC8 );
P( A, B, C, D, 9, 5, 0x21E1CDE6 );
P( D, A, B, C, 14, 9, 0xC33707D6 );
P( C, D, A, B, 3, 14, 0xF4D50D87 );
P( B, C, D, A, 8, 20, 0x455A14ED );
P( A, B, C, D, 13, 5, 0xA9E3E905 );
P( D, A, B, C, 2, 9, 0xFCEFA3F8 );
P( C, D, A, B, 7, 14, 0x676F02D9 );
P( B, C, D, A, 12, 20, 0x8D2A4C8A );
#undef F
#define F(x,y,z) (x ^ y ^ z)
P( A, B, C, D, 5, 4, 0xFFFA3942 );
P( D, A, B, C, 8, 11, 0x8771F681 );
P( C, D, A, B, 11, 16, 0x6D9D6122 );
P( B, C, D, A, 14, 23, 0xFDE5380C );
P( A, B, C, D, 1, 4, 0xA4BEEA44 );
P( D, A, B, C, 4, 11, 0x4BDECFA9 );
P( C, D, A, B, 7, 16, 0xF6BB4B60 );
P( B, C, D, A, 10, 23, 0xBEBFBC70 );
P( A, B, C, D, 13, 4, 0x289B7EC6 );
P( D, A, B, C, 0, 11, 0xEAA127FA );
P( C, D, A, B, 3, 16, 0xD4EF3085 );
P( B, C, D, A, 6, 23, 0x04881D05 );
P( A, B, C, D, 9, 4, 0xD9D4D039 );
P( D, A, B, C, 12, 11, 0xE6DB99E5 );
P( C, D, A, B, 15, 16, 0x1FA27CF8 );
P( B, C, D, A, 2, 23, 0xC4AC5665 );
#undef F
#define F(x,y,z) (y ^ (x | ~z))
P( A, B, C, D, 0, 6, 0xF4292244 );
P( D, A, B, C, 7, 10, 0x432AFF97 );
P( C, D, A, B, 14, 15, 0xAB9423A7 );
P( B, C, D, A, 5, 21, 0xFC93A039 );
P( A, B, C, D, 12, 6, 0x655B59C3 );
P( D, A, B, C, 3, 10, 0x8F0CCC92 );
P( C, D, A, B, 10, 15, 0xFFEFF47D );
P( B, C, D, A, 1, 21, 0x85845DD1 );
P( A, B, C, D, 8, 6, 0x6FA87E4F );
P( D, A, B, C, 15, 10, 0xFE2CE6E0 );
P( C, D, A, B, 6, 15, 0xA3014314 );
P( B, C, D, A, 13, 21, 0x4E0811A1 );
P( A, B, C, D, 4, 6, 0xF7537E82 );
P( D, A, B, C, 11, 10, 0xBD3AF235 );
P( C, D, A, B, 2, 15, 0x2AD7D2BB );
P( B, C, D, A, 9, 21, 0xEB86D391 );
#undef F
ctx->state[0] += A;
ctx->state[1] += B;
ctx->state[2] += C;
ctx->state[3] += D;
}
/*
* MD5 process buffer
*/
static inline void md5_update( md5_context *ctx, unsigned char *input, int ilen )
{
int fill;
unsigned long left;
if( ilen <= 0 )
return;
left = ctx->total[0] & 0x3F;
fill = 64 - left;
ctx->total[0] += ilen;
ctx->total[0] &= 0xFFFFFFFF;
if( ctx->total[0] < (unsigned long) ilen )
ctx->total[1]++;
if( left && ilen >= fill )
{
memcpy( (void *) (ctx->buffer + left),
(void *) input, fill );
md5_process( ctx, ctx->buffer );
input += fill;
ilen -= fill;
left = 0;
}
while( ilen >= 64 )
{
md5_process( ctx, input );
input += 64;
ilen -= 64;
}
if( ilen > 0 )
{
memcpy( (void *) (ctx->buffer + left),
(void *) input, ilen );
}
}
static 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,
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, 0
};
/* F, G, H and I are basic MD5 functions.
/*
* MD5 final digest
*/
#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
#define H(x, y, z) ((x) ^ (y) ^ (z))
#define I(x, y, z) ((y) ^ ((x) | (~z)))
/* ROTATE_LEFT rotates x left n bits.
*/
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
Rotation is separate from addition to prevent recomputation.
*/
#define FF(a, b, c, d, x, s, ac) { \
(a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define GG(a, b, c, d, x, s, ac) { \
(a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define HH(a, b, c, d, x, s, ac) { \
(a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define II(a, b, c, d, x, s, ac) { \
(a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
/* MD5 initialization. Begins an MD5 operation, writing a new context.
*/
void _alpm_MD5Init (context)
MD5_CTX *context; /* context */
static inline void md5_finish( md5_context *ctx, unsigned char *output )
{
context->count[0] = context->count[1] = 0;
/* Load magic initialization constants.
*/
context->state[0] = 0x67452301;
context->state[1] = 0xefcdab89;
context->state[2] = 0x98badcfe;
context->state[3] = 0x10325476;
unsigned long last, padn;
unsigned long high, low;
unsigned char msglen[8];
high = ( ctx->total[0] >> 29 )
| ( ctx->total[1] << 3 );
low = ( ctx->total[0] << 3 );
PUT_UINT32_LE( low, msglen, 0 );
PUT_UINT32_LE( high, msglen, 4 );
last = ctx->total[0] & 0x3F;
padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last );
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 );
}
/* MD5 block update operation. Continues an MD5 message-digest
operation, processing another message block, and updating the
context.
/*
* Output = MD5( input buffer )
*/
void _alpm_MD5Update (context, input, inputLen)
MD5_CTX *context; /* context */
unsigned char *input; /* input block */
unsigned int inputLen; /* length of input block */
void md5( unsigned char *input, int ilen,
unsigned char *output )
{
unsigned int i, index, partLen;
md5_context ctx;
/* Compute number of bytes mod 64 */
index = (unsigned int)((context->count[0] >> 3) & 0x3F);
md5_starts( &ctx );
md5_update( &ctx, input, ilen );
md5_finish( &ctx, output );
/* Update number of bits */
if ((context->count[0] += ((UINT4)inputLen << 3))
< ((UINT4)inputLen << 3))
context->count[1]++;
context->count[1] += ((UINT4)inputLen >> 29);
partLen = 64 - index;
/* Transform as many times as possible.
*/
if (inputLen >= partLen) {
memcpy ((POINTER)&context->buffer[index], (POINTER)input, partLen);
MD5Transform (context->state, context->buffer);
for (i = partLen; i + 63 < inputLen; i += 64)
MD5Transform (context->state, &input[i]);
index = 0;
}
else
i = 0;
/* Buffer remaining input */
memcpy ((POINTER)&context->buffer[index], (POINTER)&input[i], inputLen-i);
memset( &ctx, 0, sizeof( md5_context ) );
}
/* MD5 finalization. Ends an MD5 message-digest operation, writing the
the message digest and zeroizing the context.
/*
* Output = MD5( file contents )
*/
void _alpm_MD5Final (digest, context)
unsigned char digest[16]; /* message digest */
MD5_CTX *context; /* context */
int md5_file( const char *path, unsigned char *output )
{
unsigned char bits[8];
unsigned int index, padLen;
FILE *f;
size_t n;
md5_context ctx;
unsigned char buf[1024];
/* Save number of bits */
Encode (bits, context->count, 8);
if( ( f = fopen( path, "rb" ) ) == NULL )
return( 1 );
/* Pad out to 56 mod 64.
*/
index = (unsigned int)((context->count[0] >> 3) & 0x3f);
padLen = (index < 56) ? (56 - index) : (120 - index);
_alpm_MD5Update (context, PADDING, padLen);
md5_starts( &ctx );
/* Append length (before padding) */
_alpm_MD5Update (context, bits, 8);
while( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 )
md5_update( &ctx, buf, (int) n );
/* Store state in digest */
Encode (digest, context->state, 16);
md5_finish( &ctx, output );
/* Zeroize sensitive information.
*/
memset ((POINTER)context, 0, sizeof (*context));
memset( &ctx, 0, sizeof( md5_context ) );
if( ferror( f ) != 0 )
{
fclose( f );
return( 2 );
}
fclose( f );
return( 0 );
}
/* MD5 basic transformation. Transforms state based on block.
*/
static void MD5Transform (state, block)
UINT4 state[4];
unsigned char block[64];
{
UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
Decode (x, block, 64);
/* Round 1 */
FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
/* Round 2 */
GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */
GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
/* Round 3 */
HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */
HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
/* Round 4 */
II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
state[0] += a;
state[1] += b;
state[2] += c;
state[3] += d;
/* Zeroize sensitive information.
*/
memset ((POINTER)x, 0, sizeof (x));
}
/* Encodes input (UINT4) into output (unsigned char). Assumes len is
a multiple of 4.
*/
static void Encode (output, input, len)
unsigned char *output;
UINT4 *input;
unsigned int len;
{
unsigned int i, j;
for (i = 0, j = 0; j < len; i++, j += 4) {
output[j] = (unsigned char)(input[i] & 0xff);
output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
}
}
/* Decodes input (unsigned char) into output (UINT4). Assumes len is
a multiple of 4.
*/
static void Decode (output, input, len)
UINT4 *output;
unsigned char *input;
unsigned int len;
{
unsigned int i, j;
for (i = 0, j = 0; j < len; i++, j += 4)
output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) |
(((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);
}
/* vim: set ts=2 sw=2 noet: */

View File

@@ -1,53 +1,66 @@
/* MD5.H - header file for MD5C.C
/*
* RFC 1321 compliant MD5 implementation
*
* 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 library 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.
*
* 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/>.
*/
/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
rights reserved.
#ifndef _MD5_H
#define _MD5_H
License to copy and use this software is granted provided that it
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
Algorithm" in all material mentioning or referencing this software
or this function.
#ifdef __cplusplus
extern "C" {
#endif
License is also granted to make and use derivative works provided
that such works are identified as "derived from the RSA Data
Security, Inc. MD5 Message-Digest Algorithm" in all material
mentioning or referencing the derived work.
/**
* \internal
* \brief MD5 context structure
*/
typedef struct
{
unsigned long total[2]; /*!< number of bytes processed */
unsigned long state[4]; /*!< intermediate digest state */
unsigned char buffer[64]; /*!< data block being processed */
}
md5_context;
RSA Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided "as is"
without express or implied warranty of any kind.
/**
* \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 );
These notices must be retained in any copies of any part of this
documentation and/or software. */
#ifndef _ALPM_MD5_H
#define _ALPM_MD5_H
/**
* \internal
* \brief Output = MD5( file contents )
*
* \param path input file name
* \param output MD5 checksum result
*
* \return 0 if successful, 1 if fopen failed,
* or 2 if fread failed
*/
int md5_file( const char *path, unsigned char *output );
/* POINTER defines a generic pointer type */
typedef unsigned char *POINTER;
#ifdef __cplusplus
}
#endif
/* UINT2 defines a two byte word */
typedef unsigned short int UINT2;
/* UINT4 defines a four byte word */
typedef unsigned int UINT4;
/* MD5 context. */
typedef struct {
UINT4 state[4]; /* state (ABCD) */
UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
unsigned char buffer[64]; /* input buffer */
} MD5_CTX;
void _alpm_MD5Init(MD5_CTX *);
void _alpm_MD5Update(MD5_CTX *, unsigned char *, unsigned int);
void _alpm_MD5Final(unsigned char [16], MD5_CTX *);
char* _alpm_MDFile(char *);
void _alpm_MDPrint(unsigned char [16]);
#endif /* _ALPM_MD5_H */
/* vim: set ts=2 sw=2 noet: */
#endif /* md5.h */

View File

@@ -1,80 +0,0 @@
/* MD5DRIVER.C - taken and modified from MDDRIVER.C (license below) */
/* for use in pacman. */
/*********************************************************************/
/* Copyright (C) 1990-2, RSA Data Security, Inc. Created 1990. All
rights reserved.
RSA Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided "as is"
without express or implied warranty of any kind.
These notices must be retained in any copies of any part of this
documentation and/or software.
*/
/* The following makes MD default to MD5 if it has not already been
defined with C compiler flags.
*/
#define MD MD5
#include "config.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <libintl.h>
/* libalpm */
#include "alpm.h"
#include "log.h"
#include "util.h"
#include "md5.h"
/* Length of test block, number of test blocks.
*/
#define TEST_BLOCK_LEN 1000
#define TEST_BLOCK_COUNT 1000
#define MD_CTX MD5_CTX
#define MDInit _alpm_MD5Init
#define MDUpdate _alpm_MD5Update
#define MDFinal _alpm_MD5Final
char* _alpm_MDFile(char *filename)
{
FILE *file;
MD_CTX context;
int len;
char hex[3];
unsigned char buffer[1024], digest[16];
ALPM_LOG_FUNC;
if((file = fopen(filename, "rb")) == NULL) {
_alpm_log(PM_LOG_ERROR, _("%s can't be opened\n"), filename);
} else {
char *ret;
int i;
MDInit(&context);
while((len = fread(buffer, 1, 1024, file))) {
MDUpdate(&context, buffer, len);
}
MDFinal(digest, &context);
fclose(file);
ret = calloc(33, sizeof(char));
for(i = 0; i < 16; i++) {
snprintf(hex, 3, "%02x", digest[i]);
strncat(ret, hex, 2);
}
_alpm_log(PM_LOG_DEBUG, _("md5(%s) = %s"), filename, ret);
return(ret);
}
return(NULL);
}
/* vim: set ts=2 sw=2 noet: */

File diff suppressed because it is too large Load Diff

View File

@@ -1,12 +1,12 @@
/*
* package.h
*
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
*
* Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2006 by David Kimpe <dnaku@frugalware.org>
* Copyright (c) 2005, 2006 by Christian Hamar <krics@linuxforum.hu>
* Copyright (c) 2005, 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
@@ -18,16 +18,12 @@
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _ALPM_PACKAGE_H
#define _ALPM_PACKAGE_H
#if defined(__APPLE__) || defined(__sun__)
#include <time.h>
#endif
#include "alpm.h"
#include "db.h"
@@ -48,7 +44,6 @@ typedef enum _pmpkgfrom_t {
#define PKG_TYPE_LEN 32
#define PKG_PACKAGER_LEN 64
#define PKG_MD5SUM_LEN 33
#define PKG_SHA1SUM_LEN 41
#define PKG_ARCH_LEN 32
struct __pmpkg_t {
@@ -57,57 +52,48 @@ struct __pmpkg_t {
char version[PKG_VERSION_LEN];
char desc[PKG_DESC_LEN];
char url[PKG_URL_LEN];
char builddate[PKG_DATE_LEN];
char buildtype[PKG_TYPE_LEN];
char installdate[PKG_DATE_LEN];
time_t builddate;
time_t installdate;
char packager[PKG_PACKAGER_LEN];
char md5sum[PKG_MD5SUM_LEN];
char sha1sum[PKG_SHA1SUM_LEN];
char arch[PKG_ARCH_LEN];
unsigned long size;
unsigned long isize;
unsigned short scriptlet;
unsigned short force;
time_t date;
pmpkgreason_t reason;
/* alpm_list_t *desc_localized;*/
alpm_list_t *licenses;
alpm_list_t *replaces;
alpm_list_t *groups;
alpm_list_t *files;
alpm_list_t *backup;
alpm_list_t *depends;
alpm_list_t *removes;
alpm_list_t *requiredby;
alpm_list_t *optdepends;
alpm_list_t *conflicts;
alpm_list_t *provides;
alpm_list_t *deltas;
/* internal */
pmpkgfrom_t origin;
void *data;
/* TODO replace 'data' with this:
/* Replaced 'void *data' with this union as follows:
origin == PKG_FROM_CACHE, use pkg->origin_data.db
origin == PKG_FROM_FILE, use pkg->origin_data.fd
union {
int fd;
pmdb_t *db;
} origin_data;
origin == PKG_FROM_FILE, use pkg->origin_data.file
*/
union {
pmdb_t *db;
char *file;
} origin_data;
pmdbinfrq_t infolevel;
};
#define FREEPKG(p) do { if(p){_alpm_pkg_free(p); p = NULL;}} while(0)
#define FREELISTPKGS(p) _FREELIST(p, _alpm_pkg_free)
int _alpm_versioncmp(const char *a, const char *b);
pmpkg_t* _alpm_pkg_new(const char *name, const char *version);
pmpkg_t *_alpm_pkg_dup(pmpkg_t *pkg);
void _alpm_pkg_free(void *data);
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);
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_splitname(const char *target, char *name, char *version, int witharch);
int _alpm_pkg_istoonew(pmpkg_t *pkg);
void _alpm_pkg_update_requiredby(pmpkg_t *pkg);
int _alpm_pkg_should_ignore(pmpkg_t *pkg);
#endif /* _ALPM_PACKAGE_H */

View File

@@ -1,5 +1,3 @@
Makefile
Makefile.in
*.gmo
POTFILES
stamp-po

View File

@@ -1,8 +1,11 @@
# Set of available languages.
cs
de
en_GB
es
fr
hu
it
pl
pt_BR
en_GB
ru_RU
ru

View File

@@ -8,18 +8,16 @@ lib/libalpm/be_files.c
lib/libalpm/cache.c
lib/libalpm/conflict.c
lib/libalpm/db.c
lib/libalpm/delta.c
lib/libalpm/deps.c
lib/libalpm/error.c
lib/libalpm/group.c
lib/libalpm/handle.c
lib/libalpm/log.c
lib/libalpm/md5.c
lib/libalpm/md5driver.c
lib/libalpm/package.c
lib/libalpm/provide.c
lib/libalpm/remove.c
lib/libalpm/sha1.c
lib/libalpm/server.c
lib/libalpm/sync.c
lib/libalpm/trans.c
lib/libalpm/util.c
lib/libalpm/versioncmp.c

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