Lazy opening of databases is supported since 34e1413d75.
We don't need that setlibpath call each time we register a database.
Besides this caused a memleak in case setlibpath failed, because setlibpath
exit directly and we did not do the cleanup part (section string was not
freed, and a file descriptor remained open).
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
* just do one malloc call
* p = realloc(p, new_size) was not good
(see http://www.iso-9899.info/wiki/Why_not_realloc)
* use more efficient strncpy instead of strncat
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
this operation was re-implemented using static strings, instead of using the
existing strreplace function
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
For example when we are not in a tty, there is no point in wrapping the
output. This actually makes the job harder for scripts.
$ pacman -Si binutils | grep Desc
Description : A set of programs to assemble and manipulate binary and
The description was cut because the rest was on the following line.
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
[Dan: use printf everywhere]
Signed-off-by: Dan McGee <dan@archlinux.org>
similarly to the $repo variable, Server can now contain $arch, which will be
automatically replaced by the appropriate architecture.
This allows us to have one universal mirrorlist file, for both i686 and x86_64,
woohoo!
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
- fix one memleak if get_filename failed
- cleanup according to Joerg's feedback:
"url_for_string: If fetchParseURL returned successful, you should always
have a scheme set. The logic for anonftp should only be needed for very
broken server -- do you know of any such?
download_internal:
Specifying 'p' is now a nop -- it is tried by default first with
fall-back to active FTP."
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
[Dan: remove from pacman.conf and pacman.conf.5]
Signed-off-by: Dan McGee <dan@archlinux.org>
For example, if no package is outdated, -Qu will return 1.
This implements FS#15938
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
Skip the SyncFirst dialog, if all the -S packages are SyncFirst packages.
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
This fixes: FS#15675 - pacman can not determine ownership of dangling
symlinks
Using lstat seems more correct than stat for the -Qo operation anyway.
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
This allows a frontend to define its own download algorithm so that the
libfetch dependency can be omitted without using an external process.
The callback will be used when if it is defined, otherwise the old
behavior applies.
Signed-off-by: Sebastian Nowicki <sebnow@gmail.com>
[Dan: minor cleanups]
Signed-off-by: Dan McGee <dan@archlinux.org>
If the user switches from unstable repo to a stable one, it is quite hard to
sync its system with the new repo (the user will see many "Local is newer
than stable" messages, nothing more). That's why I introduced -Suu, which
treats a sync package like an upgrade, iff the package version doesn't match
with the local one's.
I added a new pactest (sync104.py) to test this, and I updated the
documentation of -Su.
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
[Dan: slight doc reword]
Signed-off-by: Dan McGee <dan@archlinux.org>
This implements FS#13877. Add a new option "-Qk" which checks if all of the
files for a given package (or packages) are really on the system (i.e. not
accidentally deleted). This can be combined with filters and other display
options. It also respects both the --quiet and --verbose flags to give
varying levels of output.
Based on the original patch by Charly Coste <changaco@laposte.net>, thanks
for your work!
Signed-off-by: Dan McGee <dan@archlinux.org>
This fixes FS#14899. When running an -Sp operation without servers
configured for a repository, we would segfault, so add an assert to the
backend method returning the first server preventing a null pointer
dereference.
In addition, add a new error code to libalpm that indicates we have no
servers configured for a repository. This makes -Sy and -S <package>
operations fail gracefully and helpfully when a repo is set up with no
servers, as the default mirrorlist in Arch is provided this way.
Signed-off-by: Dan McGee <dan@archlinux.org>
FS#8905 is fixed. The front-end passes PM_TRANS_FLAG_NOLOCK to the back-end,
so it doesn't lock the database. That's why we don't need root anymore.
I reworked (and renamed) needs_transaction() accordingly. I also added
missing -Sc check there (for example, -Sci didn't print non-root error, but
pacman wanted to lock the database).
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
The pacman --help pages and the manual suggested that only one package can
be upgraded/removed per transaction.
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
This header was used in the code for the function strdup()
that is not used anymore.
Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>
Signed-off-by: Dan McGee <dan@archlinux.org>
libgen.h was used for basename() in function main() from src/util/testdb.c
string.h was used for strlen() in function output_cb() from src/util/testpkg.c
Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>
Signed-off-by: Dan McGee <dan@archlinux.org>
The old documentation didn't emphasize our filtering options at all, and it
was a bit misleading. ("List ALL...")
I also clarified the description of -Qu.
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
With --quiet flag, -Ql doesn't print the package name, just lists the files.
I made --quiet documentation up-to-date (I also added -Sgq/-Qgq).
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
pmsyncpkg_t data sructure was removed:
1. pmpkg_t.reason is used instead of pmsyncpkg_t.newreason. (The target
packages come from sync repos, so we can use this field without any
problems. Upgrade transaction also uses this field to store this info.)
2. pmsyncpkg_t.removes was moved to pmpkg_t.removes.
This step requires careful programming, because we don't duplicate packages
when we add them to trans->packages. So we modify sync pkgcache when we
add this transaction-only info to our package. Hence it is important to
free this list when we remove any package from the target list
(remove_unresolvable, remove_conflicts, trans_free), otherwise this could
confuse the new sync transactions (with non-pacman GUI).
Overall, our code became ~100 line shorter, and we can call our helper
functions directly on trans->packages in sync.c, we don't need to maintain
parallel package lists.
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
This patch fixes FS#12059.
Now sync_addtarget can return with PM_ERR_PKG_IGNORED, which indicates that
although the requested package was found it is in ignorepkg, so alpm could
not add it to the transaction. So the front-end can decide what to do.
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
After some irc/forum experiences, I decided to document this option.
However, I left the debug-level undocumented (--debug=2).
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
Don't prompt the user for unignore of IgnorePkg/IgnoreGroup packages,
except for packages explicitly listed for sync by the user. This
eliminates many unnecessary prompts when IgnorePkg/IgnoreGroup is
used.
Signed-off-by: Bryan Ischo <bryan@ischo.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
Enabled a new prompt to ask the user if they'd like to remove
unresolvable packages from the transaction rather than failing it.
Many pactest tests that used to fail now return success codes, because
pacman now issues a prompt allowing the user to cancel rather than
failing many transactions, and the pactest scripts always choose to
cancel with no error rather than failing. The only net effect is that
the return status of pacman is now 0 in cases where it used to be
nonzero.
Signed-off-by: Bryan Ischo <bryan@ischo.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
This patch introduces the following function name convention:
_compute_ in function name: the return value must be freed.
_get_ in function name: the return value must not be freed.
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
The HoldPkg feature is even more important when the packages to be held are
pulled automatically by pacman, in a -Rc and -Rs operation. Before, it only
applied when the packages were explicitly requested by the user to be
removed. This patch extends holdpkg to -Rc and -Rs by doing the HoldPkg
check just before trans_commit.
Additionally, the whole HoldPkg stuff was moved to the front-end.
I changed the default behavior to "don't remove", so I modified remove030.py
pactest as well.
See also: FS#9173.
Original-work-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
When the output is going to a file, glibc seems to buffer way too much
making it hard to monitor progress while tailing a file.
Signed-off-by: Simo Leone <simo@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
This patch slightly modifies pacman.c/_parseconfig():
See FS#12148. Now pacman prints the following error message in that case:
"error: could not register 'unstable' database (could not open database)"
I also added an error message for alpm_db_setserver() error.
I changed the "return(1);" scheme to "ret = 1; goto cleanup;" to make
sure that we free allocated memory and close open files.
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
From now on -Qu is an "outdated package" filter on local database.
(This is a behaviour change.)
This patch fixes some memleaks and makes the code cleaner, for details see
my comment on FS#7884.
FS#11868 is implemented.
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
Example usage and output :
> src/util/testdb -h
usage:
testdb [-b <pacman db>] : check the local database
testdb [-b <pacman db>] core extra ... : check the listed sync databases
> src/util/testdb
Checking the integrity of the local database in /var/lib/pacman/
> src/util/testdb core extra testing community
Checking the integrity of the sync databases in /var/lib/pacman/
missing dependency for archboot : bcm43xx-fwcutter>=006-2
missing dependency for xvattr : xfree86
missing dependency for eclipse-ve : eclipse<3.3
missing dependency for flumotion : twisted-web
missing dependency for gg2 : arts
missing dependency for man-pages-cs : groff-utf8
missing dependency for qc-usb : kernel26<2.6.26
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
Calling printf() in a signal handler can be dangerous, so avoid it by
writing directly which is guaranteed to be safe according to signal(7).
Signed-off-by: Dan McGee <dan@archlinux.org>
Every call to getcols() results in two ioctl() calls, which we really didn't
need as changing the number of columns in mid-print would be pretty crazy.
Signed-off-by: Dan McGee <dan@archlinux.org>
Because libalpm always returns a root path with a trailing slash, when we
use it to create our unspecified paths we get double slashes in the result.
Use the fix suggested by Jürgen Hötzel to remedy this.
Signed-off-by: Dan McGee <dan@archlinux.org>
This fixes FS#11339, which is a regression of commit 89c2c5196:
When totaldownload is enabled, the database downloading percent (-Sy) is
always at 0. That is because we have no guarantee that the totaldownload
callback was called by libalpm. In particular, it is not called (and it
would not make sense to) when a single file is downloaded, like it is the
case with databases.
So the correct way to detect if totaldownload should be used is checking
both config->totaldownload and list_total, like it was already done in
several places in the cb_dl_progress function.
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
This is more consistent with the private functions :
_alpm_db_get_{pkg,grp}cache
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
These two functions now take directly a package list rather than a database.
checkdbconflicts was renamed to checkconflicts.
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
During an upgrade, only the new optdepends will be displayed, to only keep
the useful information and not clutter pacman output too much.
The whole optdepends list is always available with -Si / -Qi.
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
We had one "None" and one "None\n" string; we can let the program do the
addition of the newline so we don't have to.
Signed-off-by: Dan McGee <dan@archlinux.org>
This patch kills one of our hackish pseudo transactions: PRINTURIS.
(The other one is -Sw)
From now on, front-end must not call trans_commit in case of -Sp,
it should print the uris of target packages "by hand" instead.
PRINTURIS flag was removed, NOCONFLICTS flag can be passed to skip
conflict checks.
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
The yesno function had a preset argument for specifying the default answer :
yes or no.
However, in all our calls to yesno, only one used the default "no" answer.
Having to specify preset==1 for all the other cases was rather cumbersome.
To make this easier, this commit adds a noyes function, with the following
behavior :
yesno() : default answer is yes
noyes() : default answer is no
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
* Change the return values to be more informative.
It was previously boolean, only indicating if a sync package was newer than
a local package.
Now it is a simple wrapper to vercmp, handling the force flag.
* Remove the verbose output from _alpm_pkg_compare_versions.
The "force" message is not so useful.
The "package : local (v1) is newer than repo (v2)" message can be moved to
-Su operation.
For the -S operation, it is better to have something like :
"downgrading package from v1 to v2"
* Don't display the "up to date -- skipping" and "up to date -- reinstalling"
messages, when the local version is newer than the sync one.
* Fix the behavior of --needed option to not skip a target when the local
version is newer, and clarify its description.
* Add a new alpm_pkg_has_force function
This allows us to access the pkg->force field like any other package fields.
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
This is a work around for FS#8725.
There are some bad combination of proxies and mirrors where the Content
Length is not returned, and thus the progress bar can't be displayed
correctly.
Dan: Note that this patch also adds a "downloading" message when the
progress bar is disabled, which was formerly not indicated at all in the
output.
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
list_display puts several members on the same line, which is not appropriate
for optdepends:
Optdepends: foo: feature1 bar: feature2 baz: feature3
The new list_display_linebreak function puts every member on its own line,
which is much better with optdepends:
Optdepends: foo: feature1
bar: feature2
baz: feature3
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
[Xav: implement this new behavior as a new function rather than as a
parameter of list_display]
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
So dump_pkg_full will indent all strings correctly.
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
[Xav: add string_length function]
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
This fixes FS#11203.
The doc has always mentioned NoPassiveFtp, but an inconsistency was
introduced with commit 76f816b9f7 when case
sensitive comparision was introduced, and was only found after commit
b3e6cf652c which dropped the case insensitive
comparison.
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
This fixes FS#11180.
The usage of the total percent was detected like this :
/* use disp_percent if it is not 0, else show bar_percent */
However, it is very possible that the total percent is 0 at the beginning,
if the first packages downloaded are very small compared to the total
download.
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
We had a lot of duplicated code here. The code handling the showsize option
needed to be there three times :
1) for install part of -S
2) for remove part of -S (conflict removal)
3) for -R
This patch introduce a new display_targets(pkglist, install) function which
can handle the 3 cases above. We pass install == 1 for case 1), and install
== 0 for case 2) and 3).
Now we can finally get the benefit of an old patch which handled the
ShowSize option consistently in the 3 cases above, without an awful lot of
duplicated code :
http://www.archlinux.org/pipermail/pacman-dev/2008-January/011029.html
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
With --quiet, "pacman -Sg grp" and "pacman -Qg grp" don't list group names.
Note that "pacman -Qgq" and "pacman -Sggq" (without targets) still list
group names becuase their output would not be very useful without them.
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
Commit 8741908276 disabled --debug in these
cases. We just clear PM_LOG_WARNING flag now.
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
This presents plenty of problems on OSes besides Linux, and even on Linux
when the libtool file for libarchive isn't present. The static build isn't
all that useful anyway as missing something such as glibc will still leave
you unable to run the pacman.static binary. Remove it from the formal build
process.
Signed-off-by: Dan McGee <dan@archlinux.org>
In particular, this avoids warnings cluttering the output of these
operations.
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
Now '-S provision' handling is done in the back-end.
In case of multiple providers, the first one is selected (behavior change:
deleted provision002.py). The old processing order was: literal, group,
provision; the new one: literal, provision, group. This is more rational,
but "pacman -S group" will be slower now. "pacman -S repo/provision" also
works. Provision was generalized to dependencies, so you can resolve deps by
hand: "pacman -S 'bash>2.0'" or "pacman -S 'core/bash>2.0'" etc. This can be
useful in makepkg dependency resolving. The changes were documented in
pacman manual.
alpm_find_pkg_satisfiers and _alpm_find_dep_satisfiers functions were
removed, since they are no longer needed.
I added some verbosity to "select provider instead of literal" and
"fallback to group".
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
Now "pacman -R foo" first searches for literal, and then for group.
This is faster in most cases, see:
http://www.archlinux.org/pipermail/pacman-dev/2008-July/012311.html
"-R group" implementation was broken, since alpm_grp_get_pkgs returns with
an pmpkg_t list, not a string list.
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
PM_TRANS_CONV_INSTALL_IGNOREPKG callback function can get 2 params: foo, bar
in this order (packages), bar can be NULL.
Old API:
foo, NULL: Do you want to install foo from IgnorePkg?
foo, bar: foo requires bar from IgnorePkg. Do you want to install bar?
New API:
foo, bar: Do you want to install foo from IgnorePkg? (If bar!=NULL:) bar
requires it.
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Dan McGee <dan@archlinux.org>
We were using the stat() system call in quite a few places when we didn't
actually need anything the stat struct returned- we were simply checking for
file existence. access() will be more efficient in those cases.
Before (strace pacman -Ss pacman):
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
33.16 0.005987 0 19016 stat64
After:
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
34.85 0.003863 0 12633 1 access
7.95 0.000881 0 6391 7 stat64
Signed-off-by: Dan McGee <dan@archlinux.org>
We used list_display() on -Sg output, which might have been slightly nicer
looking but made it much harder to parse in something like a shell script.
Reformat it in the 'grpname pkgname' format that -Qg is already using.
Signed-off-by: Dan McGee <dan@archlinux.org>
Some previous commits apparently broke the get_filename function for package
loaded with pkg_load (on a -Qip operation) because this field was no longer
filled. Now pkg_load fills it.
But the -Qip operation needs to be run like this : -Qip <filename>, so the
filename is already known. There is no need to display it again.
Besides, on a normal -Qi operation, the filename is not displayed either
because this information is not stored in the local database.
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
By putting the search / group / info / list operations just after the -Sy
op, we can simplify several checks :
1) the check for "missing targets". Since we took care of the above
operations, we now have less cases to consider :
* -Syu or -Su : we can proceed
* -Sy : we can end now (this is actually a bugfix)
* -S : this op requires targets, so exit with an error
2) the check to see if a transaction is needed. If we arrive at the end of
the function, it is either because we have -Su or -S <targets> so we already
know a transaction is needed there.
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
Add a new totaldlcb callback function to libalpm and make pacman utilize it
when the TotalDownload option is enabled. This callback function is pretty
simple- it is meant to be called once at the beginning of a "list download"
action, and once at the end (with value 0 to indicate the list has been
finished). The frontend is responsible for keeping track of adding
individual file download amounts to the total xfered amount in order to
display some sort of overall progress.
Signed-off-by: Dan McGee <dan@archlinux.org>
We have been using unsigned long as a file size type for a while, which
works but isn't quite correct and could easily break. Worse was probably our
use of int in the download callback functions, which could be restrictive
for packages > 2GB in size.
Switch all file size variables to use off_t, which is the preferred type for
file sizes. Note that at least on Linux, all applications compiled against
libalpm must now be sure to use large file support, where _FILE_OFFSET_BITS
is defined to be 64 or there will be some weird issues that crop up.
Signed-off-by: Dan McGee <dan@archlinux.org>
Add a new configure flag, --enable-git-version, that allows the output of
'git describe' to be used in the version string associated with this
package. This could aid in debugging for users that are using a development
version of pacman and we should be able to figure out which cut of code they
are using.
Sample output:
$ pacman --version
Pacman v3.1.4-190-g4cfa-dirty - libalpm v2.3.1
$ makepkg --version
makepkg (pacman) 3.1.4-190-g5861-dirty
Signed-off-by: Dan McGee <dan@archlinux.org>
If we don't set the pkgname var to NULL, we run into all sorts of beautiful
segfault behavior when a group spans multiple repositories and we try to
print out the location of the former list. Easy fix.
This regression was introduced in bf86700369.
Signed-off-by: Dan McGee <dan@archlinux.org>
This event was unused, was missing the equivalent EXTRACT_DONE event, and
was useless because we already have ADD / UPGRADE START and DONE events.
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
This is one of those rare cases where we actually want to code in a
platform-specific #ifdef. Because you don't need to be the root user on a
Windows box, and fakeroot doesn't exist so we can do easy testing, lets
disable any checking of the UID.
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
This patch offers a way to fix FS#9228.
By putting "SyncFirst = pacman" in pacman.conf, the version check will
happen before the transaction really starts, and before any replacements is
made.
Otherwise, no version check is done.
The sync301 pactest was updated to use this SyncFirst option.
Example session with SyncFirst = pacman, and a newer pacman version
available :
$ pacman -Su (or pacman -S <any targets>)
:: the following packages should be upgraded first :
pacman
:: Do you want to cancel the current operation
:: and upgrade these packages now? [Y/n]
resolving dependencies...
looking for inter-conflicts...
Targets: pacman-x.y.z-t
Total Download Size: x.xx MB
Total Installed Size: x.xx MB
Proceed with installation? [Y/n] n
As Nagy previously noted, doing this check on any -S operations might look
intrusive, but it can be required.
For example, the case where you want to install a package with versioned
provisions, using a pacman version which didn't support that feature yet
(and there is already a newer pacman in sync db supporting it).
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
* remove obsolete and unused *_cmp helper functions like deppkg_cmp and
_alpm_grp_cmp
* new alpm_list_remove_str function, used 6 times in handle.c
* remove _alpm_prov_cmp / _alpm_db_whatprovides and replace them by
a more general alpm_find_pkg_satisfiers with a cleaner implementation.
before: alpm_db_whatprovides(db, targ)
after: alpm_find_pkg_satisfiers(alpm_db_getpkgcache(db), targ)
* remove satisfycmp and replace alpm_list_find + satisfycmp usage by
_alpm_find_dep_satisfiers.
before : alpm_list_find(_alpm_db_get_pkgcache(db), dep, satisfycmp)
after : _alpm_find_dep_satisfiers(_alpm_db_get_pkgcache(db), dep)
* remove _alpm_pkgname_pkg_cmp, which was used with alpm_list_remove, and
use _alpm_pkg_find + alpm_list_remove with _alpm_pkg_cmp instead.
This commit actually get rids of all complicated and asymmetric _cmp
functions. I first thought these functions were worth it, be caused it
allowed us to reuse list_find and list_remove. But this was at the detriment
of the clarity and also the ease of use of these functions, dangerous
because of their asymmetricity.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
Tested using many easily generated error conditions. Also added "malloc
failure" (conf.c) and "segmentation fault" (pacman.c) error messages for
translation.
Signed-off-by: Allan McRae <mcrae_allan@hotmail.com>
[Dan: fix trailing whitespace errors, other compilation issues]
Signed-off-by: Dan McGee <dan@archlinux.org>
The start of a few commits to remove some PATH_MAX usage from our code. Use
a dynamically allocated string instead.
Signed-off-by: Dan McGee <dan@archlinux.org>
Using the graph structures that Nagy set up for dependency sorting, we now
do a similar process for deltas. Load up all of the deltas into a graph
object on which we can then apply Dijkstra's algorithm, using the new weight
field of graph struct.
We initialize the nodes weight using the base files that we can use in our
filecache (both filename and md5sum must match). The algorithm then picks
the best path among those that can be resolved.
Note that this algorithm has a few advantages over the old one:
1. It is completely file agnostic. These delta chains do not have to consist
of package files- this could be adopted to do delta-fied DBs.
2. It does not use the local_db anymore, or even care if a package or file
is currently installed. Instead, it only looks in the filecache for files
and packages that match delta chain entries.
Original-work-by: Dan McGee <dan@archlinux.org>
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
The calls to alpm_trans_init and alpm_trans_release (+ error checking) were
duplicated between remove.c, sync.c and upgrade.c
This patch introduces trans_init and trans_release functions in util.c to
have this code just once.
So instead of having to do the same change 3 times for fixing FS#10273, I
just had to do it once (so I did it too :))
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
Darwin's binary format does support symbols with differing visibilities, but
it does not support the protected or internal visibilities- only hidden. For
Darwin only, we should fall back to this visibility to prevent warnings from
the compiler and because it is close enough for our library purposes.
See http://gcc.gnu.org/viewcvs/*checkout*/trunk/gcc/config/darwin.c, search
for the "darwin_assemble_visibility" function for more details.
Also add pacman.static.exe to gitignore.
Signed-off-by: Dan McGee <dan@archlinux.org>
Linux includes all the gettext stuff in glibc, so there is no need for the
libintl links which we failed to include in our linker variables. Update the
makefiles which should enable NLS support on all platforms, including OS X
and Cygwin.
Signed-off-by: Dan McGee <dan@archlinux.org>
Remove a few functions and things that were unnecessary, update the help
line calls to the current function name, and make the small change to
pacman.c for the signal handler return type that is defined in config.h.
Signed-off-by: Dan McGee <dan@archlinux.org>
We use this function once in our codebase, but fortunately the workaround is
relatively easy. swprintf() is not available on Cygwin so the compile failed
there, but we can do a series of mbstowcs() calls that produce the same end
result as the swprintf() call.
Signed-off-by: Dan McGee <dan@archlinux.org>
If we specify -q/--quiet on an --owns operation, only print a matching
package name rather than the verbose human-readable message.
Signed-off-by: Dan McGee <dan@archlinux.org>
Not too complicated of a fix, but just adds some code to loop over the
entire group list and space it out.
Signed-off-by: Dan McGee <dan@archlinux.org>
This segfault creeped in as a result of commit bf867003. We were incorrectly
assuming the group member of our package was a pmgrp_t list when in fact it
is just a string list, which caused a segfault on any -Qs operation.
Also slightly cleanup the -Ss code (which was originally correct unlike the
-Qs code).
Signed-off-by: Dan McGee <dan@archlinux.org>
As it was already mentioned several times, the new -Sc behavior in 3.1 is
great, but only when the package cache is not shared.
This option has two possible values : KeepInstalled and KeepCurrent
With KeepCurrent, -Sc will clean packages that are no longer available in
any sync db, rather than packages that are no longer in the local db. The
resulting behavior should be better for shared cache.
Ref :
http://www.archlinux.org/pipermail/pacman-dev/2008-February/011140.html
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
These case insensitive comparisons didn't work in some locales, like tr_TR
where upper(i) != I. So a second case sensitive comparison had to be made
for each directive.
Only keeping case sensitive comparisons make the code cleaner and treat all
locales equally.
Ref: http://www.archlinux.org/pipermail/pacman-dev/2008-March/011445.html
Also fix pactests to use the correct case.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
* -Rss removes all dependencies (including explicitly installed ones).
* updated documentation
* two pactest files added to test the difference between -Rs and -Rss
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
From signal man page :
"The behavior of signal() varies across Unix versions, and has also varied
historically across different versions of Linux. Avoid its use: use
sigaction(2) instead. See Portability below."
The code was taken from there :
http://www.gnu.org/software/libtool/manual/libc/Sigaction-Function-Example.html
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
This function was used in two different ways :
- as a signal handler : the argument was the signal number
- called manually for freeing the resources : the argument was the return
value
So the first part is now handler(int), and the second cleanup(int).
Ref: http://www.archlinux.org/pipermail/pacman-dev/2008-March/011388.html
Remaining problems :
- the return values are messy. for example, 2 can mean both that it was
interrupted (SIGINT == 2), or that --help or -V was used (returned by
parseargs).
- apparently signal is not portable and sigaction should be used instead
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Change the pacman_upgrade stub function to do what pacman_add used to do so
we can eliminate pacman_add. Move the code to the more-descriptive name of
upgrade.c.
Note that we have made no changes to the backend libalpm, where an ADD type
transaction could still be supported.
Signed-off-by: Dan McGee <dan@archlinux.org>
Now pacman frontend uses this function instead of the compile-time libalpm
version number.
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
[Dan: fix one more spot where LIB_VERSION was used]
Signed-off-by: Dan McGee <dan@archlinux.org>
(cherry picked from commit 49197b7492)
Now pacman frontend uses this function instead of the compile-time libalpm
version number.
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
[Dan: fix one more spot where LIB_VERSION was used]
Signed-off-by: Dan McGee <dan@archlinux.org>
* mainly code cosmetics (indent fixes)
* remove debug message "spam"
* print also user friendly result
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
[Dan: a few more whitespace/linebreak cleanups added]
Signed-off-by: Dan McGee <dan@archlinux.org>
test_delta_md5sum and test_pkg_md5sum were simple wrappers to test_md5sum,
and only used once, so not very useful. I removed them.
Also, test_md5sum and alpm_pkg_checkmd5sum functions were a bit duplicated,
so I refactored them with a new _alpm_test_md5sum function in libalpm/util.c
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
I screwed up originally when I accepted the TotalDownload patch,
8ec27835f4. I didn't realize how deeply it
modified libalpm and I probably shouldn't have let it do what it did. This
commit reverts much of what that patch added in order to clean up our
internal function calls. We can find another way to do it right down the
road here but for now it has to go.
Signed-off-by: Dan McGee <dan@archlinux.org>
This change is similar to the one made in
3017b71cb5.
We had a "loading package data..." message, followed by either "failed" or
"done", but it didn't take into account that other warnings / questions
could be displayed between.
Ref: http://archlinux.org/pipermail/pacman-dev/2008-January/010971.html
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Add a preset paramater to yesno function saying which answer should be the
default. Ref:
http://www.archlinux.org/pipermail/pacman-dev/2007-June/008470.html
This allows us to answer no by default to some questions, like the -Scc one
mentioned in the above thread, and implemented by this patch.
Another advantage is that we don't have to repeat the [Y/n] in every
questions. It's only put once in yesno function. This highly reduces the
chances that YES and NO strings are translated, but not some questions,
which lead to obvious confusions.
Finally, the noconfirm variable only needs to be used in that yesno
function. So all other usages of it were removed.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
After a merge with master where some strings we print (such as descriptions)
could be NULL, a few segfaults popped up due to strlen() calls on null
pointers. Fix this by doing some preemptive checks and returning from
functions early if the string was null.
Signed-off-by: Dan McGee <dan@archlinux.org>
Both alpm_logaction() and yesno() are vararg functions, so we might as well
use this functionality and take advantage of it. Remove all of the
snprintf() calls and the LOG_STR_LEN constant that never seemed quite right.
Signed-off-by: Dan McGee <dan@archlinux.org>
Fix up the indentprint and list printing functions so they work properly.
This output can be seen in places such as -Ss, -Si, -Qs, and -Qi.
Signed-off-by: Dan McGee <dan@archlinux.org>
Due to the addition of the Chinese translation, our column widths were all
messed up as mentioned in the download progress commit fixing this same
problem there. This is a port of the code and ideas from that fix to the
installation progress bars. Once again, a handful of examples were tested to
ensure we work in all locales and with varying byte and char widths.
English (before & after):
(1/1) checking for file conflicts [-----------------] 100%
(1/1) upgrading man-pages [-----------------] 100%
German (before & after):
(1/1) Prüfe auf Dateikonflikte [-----------------] 100%
(1/1) Aktualisiere man-pages [-----------------] 100%
Chinese (before):
(1/1) 正在检查文件冲突 [-----------------] 100%
(1/1) 生在升级 man-pages [c o o o o o ] (1/1) 生在升级 man-pages [----------C o o ] (1/1) 生在升级 man-pages [-----------------] 100%
Chinese (after):
(1/1) 正在检查文件冲突 [-----------------] 100%
(1/1) 生在升级 man-pages [-----------------] 100%
Signed-off-by: Dan McGee <dan@archlinux.org>
Now that we have a Chinese translation, all of the problems with new
character sets crop up. Assumptions were made in the past that all
characters occupied one column, which is not true with a Chinese character
set. In addition, the download code even failed on such things as 'ö', which
is two bytes wide but only 1 column.
This code will need to also be ported to the add/remove/upgrade/conflicts
progress printouts.
Note that the tests below try to incorporate a number of things:
1. download filenames too long to fit
2. download filenames cut off in the middle of a multibyte sequence
3. download filenames incorporating multicolumn chars
4. download filenames incorporating multibyte, single-column chars
5. 'plain' download filenames that have always worked
Before:
:: 正在同步软件包数据库……
正在解决倚赖��... 0.0K 199.8K/s 00:00:00 [-----------------] 100%
错误:无法升级正在解决倚赖关系junköëjunköëjunköëäää (未预计的系统错误)
正在解决倚赖��... 0.0K 308.4K/s 00:00:00 [-----------------] 100%
错误:无法升级正在解决倚赖关系 (未预计的系统错误)
junköëä 0.0K 390.6K/s 00:00:00 [-----------------] 100%
错误:无法升级junköëä (未预计的系统错误)
pacman-git 0.5K 4.3M/s 00:00:00 [-----------------] 100%
本地数据库已是最新的
After:
:: 正在同步软件包数据库……
正在解决倚赖关系jun... 0.0K 89.7K/s 00:00:00 [-----------------] 100%
错误:无法升级正在解决倚赖关系junköëjunköëjunköëäää (未预计的系统错误)
正在解决倚赖关系 0.0K 147.7K/s 00:00:00 [-----------------] 100%
错误:无法升级正在解决倚赖关系 (未预计的系统错误)
junköëä 0.0K 156.9K/s 00:00:00 [-----------------] 100%
错误:无法升级junköëä (未预计的系统错误)
pacman-git 0.5K 1515.9K/s 00:00:00 [-----------------] 100%
本地数据库已是最新的
Signed-off-by: Dan McGee <dan@archlinux.org>
This allows us to remove the sync_only flag, and also do the following
steps in the future :
1) refresh the database (if asked)
2) do other stuff (eg checking if a newer pacman version is available)
3) start the actual transaction
Currently when we detect a newer pacman version, we have to release the
current transaction and start a new one.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
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>
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>
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>
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>
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>
With --unneeded option 'pacman -R' doesn't stop in case of dependency error;
it removes the needed-dependency targets from the target-list instead. See
also: http://archlinux.org/pipermail/pacman-dev/2007-October/009653.html .
The patch also adds a new causingpkg field to pmdepmissing_t which indicates
the to-be-removed package which would cause a dependency break. This is
needed, because miss->depend.name may be a provision. miss->causingpkg will
be useful in -R dependency error messages too.
[Xavier: renamed inducer to causingpkg, removed the _alpm_pkgname_pkg_cmp
helper function as requested by Aaron. This might be added by a further
commit. Other small cleanups, updated manpage and bash completion.]
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Keeping this hack around where installed size is only shown if it is
greater than total download size encourages broken repository databases.
Signed-off-by: Dan McGee <dan@archlinux.org>
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>
Fix for sync044.py and reason001.py.
Rename sync->data to sync->removes (alpm_list_t *)
Replace pmsynctype_t sync->type by pmpkgreason_t sync->newreason
The type field was set to UPGRADE or DEPEND or REPLACE.
Instead of using type = UPGRADE or DEPEND, we now rather use a
"pmpkgreason_t newreason" field directly (= explicit or depend) which allows
a better handling of the install reason.
And the REPLACE type is now deduced implicitly when the sync->removes list
is not empty.
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
Testdb will now scan the local database to check there are no conflicts.
I'm not sure how it's possible to get this situation. At least pacman
doesn't allow installing a package that conflicts with a local one, without
removing the local one. But maybe in a very weird situation, or because of
a bug, it could be possible. But anyway, this only requires 5 lines of
code.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
This is the symmetric of --asdeps, install packages explicitly.
Documentation and completion files were updated accordingly.
Added sync301.py and upgrade032.py pactest files to test this.
I also made a little modification in ALLDEPS handling too.
Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu>
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
The deptest code (pacman -T) used by makepkg was mostly in the frontend.
There were 2 drawbacks:
1) the public splitdep function returns a pmdepend_t struct, but the
_alpm_dep_free function for freeing it is private. So there was a memleak.
2) there is a helper in the backend (satisfycmp in deps.c) which makes this
function much easier.
So this adds a new public alpm_deptest in libalpm/deps.c, which cleans
pacman_deptest in pacman/deptest.c a lot.
Besides, alpm_splitdep was made private, because the frontend no longer
requires it, and _alpm_dep_free is also private.
Finally the deptest001 pactest was extended.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
* 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>
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>
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>
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>
This also affects all structures with static strings, such as depmiss,
conflict, etc. This should help a lot with memory usage, and hopefully make
things a bit more "idiot proof".
Currently our pactest pass/fail rate is identical before and after this
patch. This is not to say it is a perfect patch- I have yet to pull valgrind
out. However, this should be quite safe to use in all situations from here
on out, and we can start plugging the memleaks.
Original-work-by: Aaron Griffin <aaronmgriffin@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
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>
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>
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.
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
* 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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
%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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
.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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
* 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>
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>
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>
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>
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>
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>
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>
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>
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>
* 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>
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>
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>
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>
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>
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>
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>
-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>
Removed some unneeded path munging so that our relative
paths resolve properly. This closes FS#7068
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
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>
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>
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>
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>
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>
* 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>
Somehow missed this earlier when changing everything to types.
unsigned short -> pmloglevel_t wherever necessary.
Signed-off-by: Dan McGee <dan@archlinux.org>
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>
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>
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>
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>
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>
* 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>
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>
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>
* 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>
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>
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>
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>
* 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>
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>
* 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>
* 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>
work of fixing these in the translation files, and I removed a few fuzzys
while doing so. If any more patches for translations come, try to do it
against these files.
* Ran msgmerge on all po files from new pot files, but did not check in the
updated pot files as that just causes problems.
* Updated Italian translation
Giovanni Scafora <linuxmania@gmail.com>
* Updated Russian translation, added libalpm partial translation
Владимир Байраковский <4rayven@gmail.com>
* Updated Hungarian translation
Nagy Gabor <ngaba@petra.hos.u-szeged.hu>
* Updated French translation
solsTiCe d'Hiver <solstice.dhiver@laposte.net>
Thanks again guys!
* More significant error messages when -Qo fails
* Potential fix for reported error that pacman indicates corrupt packages
when space is full on the cache dir
Giovanni Scafora <linuxmania@gmail.com>
* Many minor issues mentioned by Scott Horowitz <stonecrest@gmail.com>.
- extra 'done' text in --noprogressbar output
- missing flags in the pacman.8 manpage
- unclear text in --noconfirm help description
issues, this should fix it. Progress bars now go from displaying, to showing
percent only, to not displaying at all. Changed unsigned -> signed to
prevent wraparound errors in integer comparison.
duplicated.
* Updated the util Makefile.am to link with the proper libalpm.la.
* Fixed bitmasking issues in be_files.c and db.h.
* Rankmirrors updates from James Rosten (with some cleaning up of my own).
KeyboardInterrupts are now handled gracefully.
(Because we are in a string freeze, I did not add "to the transaction" to
the original string but kept it in your translation)
Nagy Gabor <ngaba@petra.hos.u-szeged.hu>
Giovanni Scafora <linuxmania@gmail.com>
* long -> float conversion for package size output (which still may be the
wrong size, this needs to be looked at)
- Check EACCES in can_remove_file, to verify - we're only checking for a
read-only FS here... if write permissions fail, we can still remove it
- Switched the message when creating DB directories from an error to a debug
message
* Fix the dep tests once and for all (it wasn't working for provides=()
packages)
Giovanni Scafora <linuxmania@gmail.com>
* Changed default SRCDEST in makepkg.conf. Two reasons:
1) consistency with PKGDEST in /home/packages
2) building packages as root is NOT recommended, so no reason to ever
encourage this use by caching source in a dir with root permissions
Yes, we may all do this differently and build our packages in other
directories. But that is why they are variables and can be set anyway.
* Some header cleanup on the pacman side of things - we had alpm.h instead
alpm_list.h in a few headers.
* removed an extra slash in path-building snprintf in server.c.
reordering and adding ones that were forgotten (noticed when trying to
compile after reordering).
* Updated the HACKING file to include information on #include usage.
* print -> vprint in "making dir" function in pactest.
Translators and developers should count this as the string freeze unless
something REALLY essential comes up. Send in patches to these translations
when you get a chance (and patches are appreciated, as they are much easier
to deal with).
occasions where some alpm stuff could be used without initializing the
library (vercmp is one). TODO make these functions (handle accessors)
better by returning "library not initialized" instead of failing.
* Removed NoUpgrade lines from pacman.conf - we need to test this!
* Re-corrected the lib targets for src/util/*
* make dist seems to have updated the po files
it. Eventually we'll make progress.
* Rewrote the _alpm_splitdep function to behave more like all our other
function calls. Use heap instead of stack allocation for the depend struct,
so now it needs to be freed by the caller.
* Moved entirely to alpm_pkg_get_* accessors, to read data on demand
* Mostly removed the INFRQ_ parameters from outside the be_files backend (making
the backend more extensible in the long run)
* packages created from _alpm_db_scan now have the db and origin set (making
accessors actually work for these packages)
* removed _alpm_db_ensure_pkgcache
* totally revamped the _alpm_checkconflicts function, making it cleaner and
easier to read (and thus fix in the long run) - maintainable code ftw
NOTE: feel free to rename the functions... I couldn't think of anything better
* removed an extra loop in sync.c:find_replacements - no sense in looping over
an entire DB while strcmp'ing the name, when we have get_pkgfromcache
Other:
* package struct "license" -> "licenses"
* Created _alpm_sync_find (duplicate code in some places, find_pkginsync
* Minor const correctness changes along the way
* fixed a couple extra '/' pathing issues (non-issues really)
* removed a duplicate pkg_cmp function
be used in place of -Y. Also, -D was rather silly, as it does mostly what -S
does.
* Cleaned up pacman_deptest - removed the goofy faketarget stuff (NEEDS testing
still)
* libalpm function renames
* Updated all of the language files, as the POT file was updated. NOTE FOR
TRANSLATORS, try to base your next contribution off of these, notice how
some msgids and messages have been wrapped to the next line- it makes it
easier to read anyway.
* More Makefile.am/configure.ac updates. 'make dist' and 'make distclean' now
work properly, with only one caveat- the automatic testing in distclean
doesn't do so hot as it is compiled with a default configure, which includes
the fakeroot-proof code (which does not cooperate with pactest).
* Added a Makefile.am for the pactest directory.
from one package to another seemlessly (knock on wood). This is implemented
through the use of two skip lists in the trans struct- skip_add and
skip_remove, which replace the former trans->skiplist.
* Removed an unnecessary function parameter, added a necessary one.
* If a package has no backup files, print '(none)' under the heading so it is
more obvious.
* Updated my TODO list.
- the code should be clearer, more organized, commented, and have worthwhile
variable names now
- proactive backup=()s now work. That is, adding a file to a backup array
does what it should on the upgrade to that package, no longer forcing you to
wait a full upgrade cycle for it to take effect
* ldconfig was being run twice on an upgrade operation - fixed
* fixed another pm_fprintf/printf output corruption with the progress bars
* refactored some duplicate code for adjusting 'requiredby' lists
* Added config.rpath to .cvsignore
MSG/ERR usage earlier, the trailing '\n's are no longer needed
* Oddly enough - *ADDED* some '\n's to the sync_info errors (last commit) as the
package info output does not use the pm_fprintf facility and thus does not
honor our newline/no-newline setup