mirror of
https://github.com/moparisthebest/pacman
synced 2025-01-08 12:28:00 -05:00
* pacman hidden arguments: removed -Y and -D. -T is the only hidden arg now, to
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
This commit is contained in:
parent
8fbdd03cce
commit
4dd6c92228
@ -184,7 +184,7 @@ checkdeps() {
|
||||
|
||||
pmout=$(pacman $PACMAN_OPTS -T $*)
|
||||
ret=$?
|
||||
if [ $ret -eq 127 ]; then #unresolved deps
|
||||
if [ $ret -eq 1 ]; then #unresolved deps
|
||||
#strip out the pacman prefix from "requires: xyz"
|
||||
echo $pmout | sed 's|requires:||g'
|
||||
elif [ $ret -ne 0 ]; then
|
||||
@ -211,8 +211,8 @@ handledeps() {
|
||||
FAKEROOTKEY2=$FAKEROOTKEY
|
||||
unset FAKEROOTKEY
|
||||
fi
|
||||
sudo pacman $PACMAN_OPTS -D $deplist
|
||||
if [ "$?" = "127" ]; then
|
||||
sudo pacman $PACMAN_OPTS -S $deplist
|
||||
if [ $? -eq 1 ]; then
|
||||
error "Failed to install missing dependencies."
|
||||
exit 1
|
||||
fi
|
||||
@ -223,8 +223,8 @@ handledeps() {
|
||||
elif [ "$DEP_BIN" = "1" ]; then
|
||||
# install missing deps from binary packages (using pacman -S)
|
||||
msg "Installing missing dependencies..."
|
||||
pacman $PACMAN_OPTS -D $deplist
|
||||
if [ "$?" = "127" ]; then
|
||||
pacman $PACMAN_OPTS -S $deplist
|
||||
if [ $? -eq 1 ]; then
|
||||
error "Failed to install missing dependencies."
|
||||
exit 1
|
||||
fi
|
||||
|
@ -36,131 +36,36 @@
|
||||
|
||||
extern config_t *config;
|
||||
|
||||
/* TODO this function is fairly messy, with the obscure return codes and the odd
|
||||
* 'dummy' packages and all these messy FREELISTs of synctargs
|
||||
*/
|
||||
int pacman_deptest(alpm_list_t *targets)
|
||||
{
|
||||
alpm_list_t *data, *i;
|
||||
char *str;
|
||||
int retval = 0;
|
||||
pmdb_t *local;
|
||||
pmpkg_t *pkg;
|
||||
alpm_list_t *i, *provides;
|
||||
|
||||
if(targets == NULL) {
|
||||
return(0);
|
||||
}
|
||||
|
||||
local = alpm_option_get_localdb();
|
||||
|
||||
/* we create a transaction to hold a dummy package to be able to use
|
||||
* deps checkings from alpm_trans_prepare() */
|
||||
if(alpm_trans_init(PM_TRANS_TYPE_ADD, 0, NULL, NULL, NULL) == -1) {
|
||||
ERR(NL, "%s", alpm_strerror(pm_errno));
|
||||
if(pm_errno == PM_ERR_HANDLE_LOCK) {
|
||||
MSG(NL, _(" if you're sure a package manager is not already running,\n"
|
||||
" you can remove %s%s\n"), alpm_option_get_root(), PM_LOCK);
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
|
||||
/* We use a hidden facility from alpm_trans_addtarget() to add a dummy
|
||||
* target to the transaction (see the library code for details).
|
||||
* It allows us to use alpm_trans_prepare() to check dependencies of the
|
||||
* given target.
|
||||
*/
|
||||
str = (char *)malloc(strlen("name=dummy|version=1.0-1")+1);
|
||||
if(str == NULL) {
|
||||
ERR(NL, _("memory allocation failure\n"));
|
||||
retval = 1;
|
||||
goto cleanup;
|
||||
}
|
||||
strcpy(str, "name=dummy|version=1.0-1");
|
||||
for(i = targets; i; i = alpm_list_next(i)) {
|
||||
const char *targ = alpm_list_getdata(i);
|
||||
str = (char *)realloc(str, strlen(str)+8+strlen(targ)+1);
|
||||
strcat(str, "|depend=");
|
||||
strcat(str, targ);
|
||||
}
|
||||
vprint(_("add target %s\n"), str);
|
||||
if(alpm_trans_addtarget(str) == -1) {
|
||||
FREE(str);
|
||||
ERR(NL, _("could not add target (%s)\n"), alpm_strerror(pm_errno));
|
||||
retval = 1;
|
||||
goto cleanup;
|
||||
}
|
||||
FREE(str);
|
||||
const char *pkgname;
|
||||
|
||||
pkgname = alpm_list_getdata(i);
|
||||
/* find this package in the local DB */
|
||||
pkg = alpm_db_get_pkg(local, pkgname);
|
||||
|
||||
if(alpm_trans_prepare(&data) == -1) {
|
||||
alpm_list_t *synctargs = NULL;
|
||||
retval = 126;
|
||||
/* return 126 = deps were missing, but successfully resolved
|
||||
* return 127 = deps were missing, and failed to resolve; OR
|
||||
* = deps were missing, but no resolution was attempted; OR
|
||||
* = unresolvable conflicts were found
|
||||
*/
|
||||
switch(pm_errno) {
|
||||
case PM_ERR_UNSATISFIED_DEPS:
|
||||
for(i = data; i; i = alpm_list_next(i)) {
|
||||
pmdepmissing_t *miss = alpm_list_getdata(i);
|
||||
if(!config->op_d_resolve) {
|
||||
MSG(NL, _("requires: %s"), alpm_dep_get_name(miss));
|
||||
switch(alpm_dep_get_mod(miss)) {
|
||||
case PM_DEP_MOD_ANY:
|
||||
break;
|
||||
case PM_DEP_MOD_EQ:
|
||||
MSG(CL, "=%s", alpm_dep_get_version(miss));
|
||||
break;
|
||||
case PM_DEP_MOD_GE:
|
||||
MSG(CL, ">=%s", alpm_dep_get_version(miss));
|
||||
break;
|
||||
case PM_DEP_MOD_LE:
|
||||
MSG(CL, "<=%s", alpm_dep_get_version(miss));
|
||||
break;
|
||||
}
|
||||
MSG(CL, "\n");
|
||||
}
|
||||
synctargs = alpm_list_add(synctargs, strdup(alpm_dep_get_name(miss)));
|
||||
}
|
||||
alpm_list_free(data);
|
||||
break;
|
||||
case PM_ERR_CONFLICTING_DEPS:
|
||||
/* we can't auto-resolve conflicts */
|
||||
for(i = data; i; i = alpm_list_next(i)) {
|
||||
pmdepmissing_t *miss = alpm_list_getdata(i);
|
||||
MSG(NL, _("conflict: %s"), alpm_dep_get_name(miss));
|
||||
}
|
||||
retval = 127;
|
||||
alpm_list_free(data);
|
||||
break;
|
||||
default:
|
||||
retval = 127;
|
||||
break;
|
||||
}
|
||||
|
||||
/* attempt to resolve missing dependencies */
|
||||
/* TODO: handle version comparators (eg, glibc>=2.2.5) */
|
||||
if(retval == 126 && synctargs != NULL) {
|
||||
if(alpm_trans_release() == -1) {
|
||||
ERR(NL, _("could not release transaction (%s)"), alpm_strerror(pm_errno));
|
||||
FREELIST(synctargs);
|
||||
return(1);
|
||||
if(!pkg) {
|
||||
/* not found, can we find anything that provides this in the local DB? */
|
||||
provides = alpm_db_whatprovides(local, pkgname);
|
||||
if(!provides) {
|
||||
/* nope, must be missing */
|
||||
MSG(NL, _("requires: %s"), pkgname);
|
||||
retval = 1;
|
||||
}
|
||||
if(!config->op_d_resolve || pacman_sync(synctargs) != 0) {
|
||||
/* error (or -D not used) */
|
||||
retval = 127;
|
||||
}
|
||||
FREELIST(synctargs);
|
||||
return(retval);
|
||||
}
|
||||
|
||||
FREELIST(synctargs);
|
||||
}
|
||||
|
||||
cleanup:
|
||||
if(!config->op_d_resolve) {
|
||||
if(alpm_trans_release() == -1) {
|
||||
ERR(NL, _("could not release transaction (%s)"), alpm_strerror(pm_errno));
|
||||
retval = 1;
|
||||
}
|
||||
}
|
||||
|
||||
return(retval);
|
||||
}
|
||||
|
||||
|
@ -217,7 +217,6 @@ static int parseargs(int argc, char *argv[])
|
||||
static struct option opts[] =
|
||||
{
|
||||
{"add", no_argument, 0, 'A'},
|
||||
{"resolve", no_argument, 0, 'D'}, /* used by 'makepkg -s' */
|
||||
{"freshen", no_argument, 0, 'F'},
|
||||
{"query", no_argument, 0, 'Q'},
|
||||
{"remove", no_argument, 0, 'R'},
|
||||
@ -264,7 +263,7 @@ static int parseargs(int argc, char *argv[])
|
||||
struct stat st;
|
||||
unsigned short logmask;
|
||||
|
||||
while((opt = getopt_long(argc, argv, "ARUFQSTDYr:b:vkhscVfmnoldepiuwyg", opts, &option_index))) {
|
||||
while((opt = getopt_long(argc, argv, "ARUFQSTr:b:vkhscVfmnoldepiuwyg", opts, &option_index))) {
|
||||
if(opt < 0) {
|
||||
break;
|
||||
}
|
||||
@ -316,11 +315,6 @@ static int parseargs(int argc, char *argv[])
|
||||
alpm_option_set_cachedir(optarg);
|
||||
break;
|
||||
case 'A': config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_ADD); break;
|
||||
case 'D':
|
||||
config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_DEPTEST);
|
||||
config->op_d_resolve = 1;
|
||||
config->flags |= PM_TRANS_FLAG_ALLDEPS;
|
||||
break;
|
||||
case 'F':
|
||||
config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_UPGRADE);
|
||||
config->flags |= PM_TRANS_FLAG_FRESHEN;
|
||||
@ -331,9 +325,6 @@ static int parseargs(int argc, char *argv[])
|
||||
case 'T': config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_DEPTEST); break;
|
||||
case 'U': config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_UPGRADE); break;
|
||||
case 'V': config->version = 1; break;
|
||||
case 'Y':
|
||||
config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_DEPTEST);
|
||||
break;
|
||||
case 'b':
|
||||
if(stat(optarg, &st) == -1 || !S_ISDIR(st.st_mode)) {
|
||||
ERR(NL, _("'%s' is not a valid db path\n"), optarg);
|
||||
|
@ -153,7 +153,7 @@ int pacman_query(alpm_list_t *targets)
|
||||
const char *grpname;
|
||||
|
||||
grpname = alpm_grp_get_name(grp);
|
||||
pkgnames = alpm_grp_get_packages(grp);
|
||||
pkgnames = alpm_grp_get_pkgs(grp);
|
||||
|
||||
for(p = pkgnames; p; p = alpm_list_next(p)) {
|
||||
MSG(NL, "%s %s\n", grpname, (char *)alpm_list_getdata(p));
|
||||
@ -162,7 +162,7 @@ int pacman_query(alpm_list_t *targets)
|
||||
} else {
|
||||
pmgrp_t *grp = alpm_db_readgrp(db_local, package);
|
||||
if(grp) {
|
||||
alpm_list_t *p, *pkgnames = alpm_grp_get_packages(grp);
|
||||
alpm_list_t *p, *pkgnames = alpm_grp_get_pkgs(grp);
|
||||
for(p = pkgnames; p; p = alpm_list_next(p)) {
|
||||
MSG(NL, "%s %s\n", package, (char *)alpm_list_getdata(p));
|
||||
}
|
||||
@ -217,7 +217,7 @@ int pacman_query(alpm_list_t *targets)
|
||||
pkgver = alpm_pkg_get_version(tmpp);
|
||||
|
||||
if(config->op_q_list || config->op_q_orphans || config->op_q_foreign) {
|
||||
info = alpm_db_readpkg(db_local, (char *)pkgname);
|
||||
info = alpm_db_get_pkg(db_local, (char *)pkgname);
|
||||
if(info == NULL) {
|
||||
/* something weird happened */
|
||||
ERR(NL, _("package \"%s\" not found\n"), pkgname);
|
||||
@ -250,7 +250,7 @@ int pacman_query(alpm_list_t *targets)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
info = alpm_db_readpkg(db_local, package);
|
||||
info = alpm_db_get_pkg(db_local, package);
|
||||
if(info == NULL) {
|
||||
ERR(NL, _("package \"%s\" not found\n"), package);
|
||||
continue;
|
||||
|
@ -53,7 +53,7 @@ int pacman_remove(alpm_list_t *targets)
|
||||
pmgrp_t *grp = alpm_db_readgrp(db_local, alpm_list_getdata(i));
|
||||
if(grp) {
|
||||
int all;
|
||||
alpm_list_t *pkgnames = alpm_grp_get_packages(grp);
|
||||
alpm_list_t *pkgnames = alpm_grp_get_pkgs(grp);
|
||||
|
||||
MSG(NL, _(":: group %s:\n"), alpm_grp_get_name(grp));
|
||||
list_display(" ", pkgnames);
|
||||
@ -117,7 +117,7 @@ int pacman_remove(alpm_list_t *targets)
|
||||
if(config->flags & PM_TRANS_FLAG_RECURSE || config->flags & PM_TRANS_FLAG_CASCADE) {
|
||||
/* list transaction targets */
|
||||
alpm_list_t *lst = NULL;
|
||||
for(i = alpm_trans_get_packages(); i; i = alpm_list_next(i)) {
|
||||
for(i = alpm_trans_get_pkgs(); i; i = alpm_list_next(i)) {
|
||||
pmpkg_t *pkg = alpm_list_getdata(i);
|
||||
lst = alpm_list_add(lst, strdup(alpm_pkg_get_name(pkg)));
|
||||
}
|
||||
|
@ -292,7 +292,7 @@ static int sync_group(int level, alpm_list_t *syncs, alpm_list_t *targets)
|
||||
if(grp) {
|
||||
/* TODO this should be a lot cleaner, why two outputs? */
|
||||
MSG(NL, "%s\n", (char *)alpm_grp_get_name(grp));
|
||||
list_display(" ", alpm_grp_get_packages(grp));
|
||||
list_display(" ", alpm_grp_get_pkgs(grp));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -305,7 +305,7 @@ static int sync_group(int level, alpm_list_t *syncs, alpm_list_t *targets)
|
||||
|
||||
MSG(NL, "%s\n", (char *)alpm_grp_get_name(grp));
|
||||
if(grp && level > 1) {
|
||||
list_display(" ", alpm_grp_get_packages(grp));
|
||||
list_display(" ", alpm_grp_get_pkgs(grp));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -510,10 +510,10 @@ int pacman_sync(alpm_list_t *targets)
|
||||
* this can prevent some of the "syntax error" problems users can have
|
||||
* when sysupgrade'ing with an older version of pacman.
|
||||
*/
|
||||
data = alpm_trans_get_packages();
|
||||
data = alpm_trans_get_pkgs();
|
||||
for(i = data; i; i = alpm_list_next(i)) {
|
||||
pmsyncpkg_t *sync = alpm_list_getdata(i);
|
||||
pmpkg_t *spkg = alpm_sync_get_package(sync);
|
||||
pmpkg_t *spkg = alpm_sync_get_pkg(sync);
|
||||
if(strcmp("pacman", alpm_pkg_get_name(spkg)) == 0 && alpm_list_count(data) > 1) {
|
||||
MSG(NL, _("\n:: pacman has detected a newer version of the \"pacman\" package.\n"));
|
||||
MSG(NL, _(":: It is recommended that you allow pacman to upgrade itself\n"));
|
||||
@ -567,7 +567,7 @@ int pacman_sync(alpm_list_t *targets)
|
||||
found++;
|
||||
MSG(NL, _(":: group %s:\n"), targ);
|
||||
/* remove dupe entries in case a package exists in multiple repos */
|
||||
alpm_list_t *pkgs = alpm_list_remove_dupes(alpm_grp_get_packages(grp));
|
||||
alpm_list_t *pkgs = alpm_list_remove_dupes(alpm_grp_get_pkgs(grp));
|
||||
list_display(" ", pkgs);
|
||||
if(yesno(_(":: Install whole content? [Y/n] "))) {
|
||||
for(k = pkgs; k; k = alpm_list_next(k)) {
|
||||
@ -659,7 +659,7 @@ int pacman_sync(alpm_list_t *targets)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
packages = alpm_trans_get_packages();
|
||||
packages = alpm_trans_get_pkgs();
|
||||
if(packages == NULL) {
|
||||
/* nothing to do: just exit without complaining */
|
||||
MSG(NL, _(" local database is up to date\n"));
|
||||
|
@ -274,7 +274,7 @@ void display_targets(alpm_list_t *syncpkgs)
|
||||
|
||||
for(i = syncpkgs; i; i = alpm_list_next(i)) {
|
||||
pmsyncpkg_t *sync = alpm_list_getdata(i);
|
||||
pmpkg_t *pkg = alpm_sync_get_package(sync);
|
||||
pmpkg_t *pkg = alpm_sync_get_pkg(sync);
|
||||
|
||||
/* If this sync record is a replacement, the data member contains
|
||||
* a list of packages to be removed due to the package that is being
|
||||
@ -381,9 +381,14 @@ void fill_progress(const int percent, const int proglen)
|
||||
const unsigned short chomp = alpm_option_get_chomp();
|
||||
const unsigned int hashlen = proglen - 8;
|
||||
const unsigned int hash = percent * hashlen / 100;
|
||||
unsigned int lasthash = 0, mouth = 0;
|
||||
static unsigned int lasthash = 0, mouth = 0;
|
||||
unsigned int i;
|
||||
|
||||
if(percent == 0) {
|
||||
lasthash = 0;
|
||||
mouth = 0;
|
||||
}
|
||||
|
||||
printf(" [");
|
||||
for(i = hashlen; i > 1; --i) {
|
||||
/* if special progress bar enabled */
|
||||
|
Loading…
Reference in New Issue
Block a user