1
0
mirror of https://github.com/moparisthebest/pacman synced 2025-02-28 17:31:52 -05:00

* Completed getinfo api changes (pmmissing_t, pmtrans_t, etc)

* Modified some dependancy checking
* Changed "performing local database upgrade" message to be more clear
* Change 'usize' to 'isize' in database files
* Scriptlet output is now sent to pacman's log file
* Limited some debugging output to be more clear
This commit is contained in:
Aaron Griffin 2006-11-22 09:03:41 +00:00
parent 5469177183
commit 986409f9bd
22 changed files with 313 additions and 295 deletions

View File

@ -613,34 +613,6 @@ pmlist_t *alpm_db_search(pmdb_t *db)
* @{
*/
/** Get informations about the transaction.
* @param parm name of the info to get
* @return a void* on success (the value), NULL on error
*/
void *alpm_trans_getinfo(unsigned char parm)
{
pmtrans_t *trans;
void *data;
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(handle->trans != NULL, return(NULL));
trans = handle->trans;
switch(parm) {
case PM_TRANS_TYPE: data = (void *)(long)trans->type; break;
case PM_TRANS_FLAGS: data = (void *)(long)trans->flags; break;
case PM_TRANS_TARGETS: data = trans->targets; break;
case PM_TRANS_PACKAGES: data = trans->packages; break;
default:
data = NULL;
break;
}
return(data);
}
/** Initialize the transaction.
* @param type type of the transaction
* @param flags flags of the transaction (like nodeps, etc)
@ -790,32 +762,6 @@ int alpm_trans_release()
* @brief Functions to get informations about a libalpm dependency
* @{
*/
/** Get informations about a dependency.
* @param miss dependency pointer
* @param parm name of the info to get
* @return a void* on success (the value), NULL on error
*/
void *alpm_dep_getinfo(pmdepmissing_t *miss, unsigned char parm)
{
void *data;
/* Sanity checks */
ASSERT(miss != NULL, return(NULL));
switch(parm) {
case PM_DEP_TARGET: data = (void *)(long)miss->target; break;
case PM_DEP_TYPE: data = (void *)(long)miss->type; break;
case PM_DEP_MOD: data = (void *)(long)miss->depend.mod; break;
case PM_DEP_NAME: data = miss->depend.name; break;
case PM_DEP_VERSION: data = miss->depend.version; break;
default:
data = NULL;
break;
}
return(data);
}
/** @} */
/** \addtogroup alpm_conflict File Conflicts Functions
@ -828,25 +774,6 @@ void *alpm_dep_getinfo(pmdepmissing_t *miss, unsigned char parm)
* @param parm name of the info to get
* @return a void* on success (the value), NULL on error
*/
void *alpm_conflict_getinfo(pmconflict_t *conflict, unsigned char parm)
{
void *data;
/* Sanity checks */
ASSERT(conflict != NULL, return(NULL));
switch(parm) {
case PM_CONFLICT_TARGET: data = conflict->target; break;
case PM_CONFLICT_TYPE: data = (void *)(long)conflict->type; break;
case PM_CONFLICT_FILE: data = conflict->file; break;
case PM_CONFLICT_CTARGET: data = conflict->ctarget; break;
default:
data = NULL;
break;
}
return(data);
}
/** @} */
/** \addtogroup alpm_log Logging Functions

View File

@ -200,6 +200,7 @@ int alpm_parse_config(char *file, alpm_cb_db_register callback, const char *this
int alpm_pkg_vercmp(const char *ver1, const char *ver2);
char *alpm_pkg_name_hasarch(char *pkgname);
const char *alpm_pkg_get_filename(pmpkg_t *pkg);
const char *alpm_pkg_get_name(pmpkg_t *pkg);
const char *alpm_pkg_get_version(pmpkg_t *pkg);
const char *alpm_pkg_get_desc(pmpkg_t *pkg);
@ -212,7 +213,7 @@ const char *alpm_pkg_get_md5sum(pmpkg_t *pkg);
const char *alpm_pkg_get_sha1sum(pmpkg_t *pkg);
const char *alpm_pkg_get_arch(pmpkg_t *pkg);
unsigned long alpm_pkg_get_size(pmpkg_t *pkg);
unsigned long alpm_pkg_get_usize(pmpkg_t *pkg);
unsigned long alpm_pkg_get_isize(pmpkg_t *pkg);
unsigned char alpm_pkg_get_reason(pmpkg_t *pkg);
pmlist_t *alpm_pkg_get_licenses(pmpkg_t *pkg);
pmlist_t *alpm_pkg_get_groups(pmpkg_t *pkg);
@ -331,15 +332,10 @@ typedef void (*alpm_trans_cb_conv)(unsigned char, void *, void *, void *, int *)
/* Transaction Progress callback */
typedef void (*alpm_trans_cb_progress)(unsigned char, char *, int, int, int);
/* Info parameters */
enum {
PM_TRANS_TYPE = 1,
PM_TRANS_FLAGS,
PM_TRANS_TARGETS,
PM_TRANS_PACKAGES
};
void *alpm_trans_getinfo(unsigned char parm);
unsigned char alpm_trans_get_type();
unsigned int alpm_trans_get_flags();
pmlist_t * alpm_trans_get_targets();
pmlist_t * alpm_trans_get_packages();
int alpm_trans_init(unsigned char type, unsigned int flags, alpm_trans_cb_event cb_event, alpm_trans_cb_conv conv, alpm_trans_cb_progress cb_progress);
int alpm_trans_sysupgrade(void);
int alpm_trans_addtarget(char *target);
@ -362,16 +358,12 @@ enum {
PM_DEP_TYPE_REQUIRED,
PM_DEP_TYPE_CONFLICT
};
/* Info parameters */
enum {
PM_DEP_TARGET = 1,
PM_DEP_TYPE,
PM_DEP_MOD,
PM_DEP_NAME,
PM_DEP_VERSION
};
void *alpm_dep_getinfo(pmdepmissing_t *miss, unsigned char parm);
const char *alpm_dep_get_target(pmdepmissing_t *miss);
unsigned char alpm_dep_get_type(pmdepmissing_t *miss);
unsigned char alpm_dep_get_mod(pmdepmissing_t *miss);
const char *alpm_dep_get_name(pmdepmissing_t *miss);
const char *alpm_dep_get_version(pmdepmissing_t *miss);
/*
* File conflicts
@ -381,15 +373,11 @@ enum {
PM_CONFLICT_TYPE_TARGET = 1,
PM_CONFLICT_TYPE_FILE
};
/* Info parameters */
enum {
PM_CONFLICT_TARGET = 1,
PM_CONFLICT_TYPE,
PM_CONFLICT_FILE,
PM_CONFLICT_CTARGET
};
void *alpm_conflict_getinfo(pmconflict_t *conflict, unsigned char parm);
const char *alpm_conflict_get_target(pmconflict_t *conflict);
unsigned char alpm_conflict_get_type(pmconflict_t *conflict);
const char *alpm_conflict_get_file(pmconflict_t *conflict);
const char *alpm_conflict_get_ctarget(pmconflict_t *conflict);
/*
* Helpers
@ -398,6 +386,7 @@ void *alpm_conflict_getinfo(pmconflict_t *conflict, unsigned char parm);
/* pmlist_t */
pmlist_t *alpm_list_first(pmlist_t *list);
pmlist_t *alpm_list_next(pmlist_t *entry);
#define alpm_list_data(type, list) (type)alpm_list_getdata((list))
void *alpm_list_getdata(const pmlist_t *entry);
int alpm_list_free(pmlist_t *entry);
int alpm_list_free_outer(pmlist_t *entry);

View File

@ -198,6 +198,10 @@ int _alpm_db_read(pmdb_t *db, unsigned int inforeq, pmpkg_t *info)
return(-1);
}
if(info->infolevel & inforeq) {
/* already loaded this info, do nothing */
return(0);
}
_alpm_log(PM_LOG_FUNCTION, _("loading package data for %s : level=%d"), info->name, inforeq);
/* clear out 'line', to be certain - and to make valgrind happy */
@ -223,7 +227,16 @@ int _alpm_db_read(pmdb_t *db, unsigned int inforeq, pmpkg_t *info)
break;
}
_alpm_strtrim(line);
if(!strcmp(line, "%DESC%")) {
if(!strcmp(line, "%FILENAME%")) {
/* filename is _new_ - it provides the real name of the package, on the
* server, to allow for us to not tie the name of the actual file to the
* data of the package
*/
if(fgets(info->filename, sizeof(info->filename), fp) == NULL) {
goto error;
}
_alpm_strtrim(info->filename);
} else if(!strcmp(line, "%DESC%")) {
while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) {
info->desc_localized = _alpm_list_add(info->desc_localized, strdup(line));
}
@ -305,15 +318,15 @@ int _alpm_db_read(pmdb_t *db, unsigned int inforeq, pmpkg_t *info)
}
_alpm_strtrim(tmp);
info->size = atol(tmp);
} else if(!strcmp(line, "%USIZE%")) {
/* USIZE (uncompressed size) tag only appears in sync repositories,
} else if(!strcmp(line, "%ISIZE%")) {
/* ISIZE (installed size) tag only appears in sync repositories,
* not the local one. */
char tmp[32];
if(fgets(tmp, sizeof(tmp), fp) == NULL) {
goto error;
}
_alpm_strtrim(tmp);
info->usize = atol(tmp);
info->isize = atol(tmp);
} else if(!strcmp(line, "%SHA1SUM%")) {
/* SHA1SUM tag only appears in sync repositories,
* not the local one. */
@ -525,9 +538,9 @@ int _alpm_db_write(pmdb_t *db, pmpkg_t *info, unsigned int inforeq)
fprintf(fp, "%%CSIZE%%\n"
"%ld\n\n", info->size);
}
if(info->usize) {
fprintf(fp, "%%USIZE%%\n"
"%ld\n\n", info->usize);
if(info->isize) {
fprintf(fp, "%%ISIZE%%\n"
"%ld\n\n", info->isize);
}
if(info->sha1sum) {
fprintf(fp, "%%SHA1SUM%%\n"

View File

@ -29,12 +29,14 @@
#include "config.h"
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <limits.h>
#include <sys/stat.h>
#include <libintl.h>
/* pacman */
#include "handle.h"
#include "list.h"
#include "trans.h"
#include "util.h"
@ -353,4 +355,39 @@ pmlist_t *_alpm_db_find_conflicts(pmdb_t *db, pmtrans_t *trans, char *root, pmli
return(conflicts);
}
const char *alpm_conflict_get_target(pmconflict_t *conflict)
{
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(conflict != NULL, return(NULL));
return conflict->target;
}
unsigned char alpm_conflict_get_type(pmconflict_t *conflict)
{
/* Sanity checks */
ASSERT(handle != NULL, return(-1));
ASSERT(conflict != NULL, return(-1));
return conflict->type;
}
const char *alpm_conflict_get_file(pmconflict_t *conflict)
{
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(conflict != NULL, return(NULL));
return conflict->file;
}
const char *alpm_conflict_get_ctarget(pmconflict_t *conflict)
{
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(conflict != NULL, return(NULL));
return conflict->ctarget;
}
/* vim: set ts=2 sw=2 noet: */

View File

@ -187,7 +187,6 @@ pmlist_t *_alpm_checkdeps(pmtrans_t *trans, pmdb_t *db, unsigned char op, pmlist
{
pmdepend_t depend;
pmlist_t *i, *j, *k;
int cmp;
int found = 0;
pmlist_t *baddeps = NULL;
pmdepmissing_t *miss = NULL;
@ -204,15 +203,16 @@ pmlist_t *_alpm_checkdeps(pmtrans_t *trans, pmdb_t *db, unsigned char op, pmlist
pmpkg_t *tp = i->data;
pmpkg_t *oldpkg;
if(tp == NULL) {
_alpm_log(PM_LOG_DEBUG, _("null package found in package list"));
continue;
}
if((oldpkg = _alpm_db_get_pkgfromcache(db, tp->name)) == NULL) {
_alpm_log(PM_LOG_DEBUG, _("cannot find package installed '%s'"), tp->name);
continue;
}
_alpm_db_read(db, INFRQ_DEPENDS, oldpkg);
for(j = oldpkg->requiredby; j; j = j->next) {
char *ver;
pmpkg_t *p;
found = 0;
if((p = _alpm_db_get_pkgfromcache(db, j->data)) == NULL) {
@ -241,26 +241,7 @@ pmlist_t *_alpm_checkdeps(pmtrans_t *trans, pmdb_t *db, unsigned char op, pmlist
/* we found an installed package that provides depend.name */
FREELISTPTR(provides);
}
found = 0;
if(depend.mod == PM_DEP_MOD_ANY) {
found = 1;
} else {
/* note that we use the version from the NEW package in the check */
ver = strdup(tp->version);
if(!index(depend.version,'-')) {
char *ptr;
for(ptr = ver; *ptr != '-'; ptr++);
*ptr = '\0';
}
cmp = _alpm_versioncmp(ver, depend.version);
switch(depend.mod) {
case PM_DEP_MOD_EQ: found = (cmp == 0); break;
case PM_DEP_MOD_GE: found = (cmp >= 0); break;
case PM_DEP_MOD_LE: found = (cmp <= 0); break;
}
FREE(ver);
}
if(!found) {
if(!_alpm_depcmp(tp, &depend)) {
_alpm_log(PM_LOG_DEBUG, _("checkdeps: found %s as required by %s"), depend.name, p->name);
miss = _alpm_depmiss_new(p->name, PM_DEP_TYPE_REQUIRED, depend.mod, depend.name, depend.version);
if(!_alpm_depmiss_isin(miss, baddeps)) {
@ -277,6 +258,7 @@ pmlist_t *_alpm_checkdeps(pmtrans_t *trans, pmdb_t *db, unsigned char op, pmlist
for(i = packages; i; i = i->next) {
pmpkg_t *tp = i->data;
if(tp == NULL) {
_alpm_log(PM_LOG_DEBUG, _("null package found in package list"));
continue;
}
@ -294,29 +276,7 @@ pmlist_t *_alpm_checkdeps(pmtrans_t *trans, pmdb_t *db, unsigned char op, pmlist
/* check database for literal packages */
for(k = _alpm_db_get_pkgcache(db, INFRQ_DESC|INFRQ_DEPENDS); k && !found; k = k->next) {
pmpkg_t *p = (pmpkg_t *)k->data;
if(!strcmp(p->name, depend.name)) {
if(depend.mod == PM_DEP_MOD_ANY) {
/* accept any version */
found = 1;
} else {
char *ver = strdup(p->version);
/* check for a release in depend.version. if it's
* missing remove it from p->version as well.
*/
if(!index(depend.version,'-')) {
char *ptr;
for(ptr = ver; *ptr != '-'; ptr++);
*ptr = '\0';
}
cmp = _alpm_versioncmp(ver, depend.version);
switch(depend.mod) {
case PM_DEP_MOD_EQ: found = (cmp == 0); break;
case PM_DEP_MOD_GE: found = (cmp >= 0); break;
case PM_DEP_MOD_LE: found = (cmp <= 0); break;
}
FREE(ver);
}
}
found = _alpm_depcmp(p, &depend);
}
/* check database for provides matches */
if(!found) {
@ -340,57 +300,14 @@ pmlist_t *_alpm_checkdeps(pmtrans_t *trans, pmdb_t *db, unsigned char op, pmlist
continue;
}
if(depend.mod == PM_DEP_MOD_ANY) {
/* accept any version */
found = 1;
} else {
char *ver = strdup(p->version);
/* check for a release in depend.version. if it's
* missing remove it from p->version as well.
*/
if(!index(depend.version,'-')) {
char *ptr;
for(ptr = ver; *ptr != '-'; ptr++);
*ptr = '\0';
}
cmp = _alpm_versioncmp(ver, depend.version);
switch(depend.mod) {
case PM_DEP_MOD_EQ: found = (cmp == 0); break;
case PM_DEP_MOD_GE: found = (cmp >= 0); break;
case PM_DEP_MOD_LE: found = (cmp <= 0); break;
}
FREE(ver);
}
found = _alpm_depcmp(p, &depend);
}
FREELISTPTR(k);
}
/* check other targets */
for(k = packages; k && !found; k = k->next) {
pmpkg_t *p = (pmpkg_t *)k->data;
/* see if the package names match OR if p provides depend.name */
if(!strcmp(p->name, depend.name) || _alpm_list_is_strin(depend.name, p->provides)) {
if(depend.mod == PM_DEP_MOD_ANY) {
/* accept any version */
found = 1;
} else {
char *ver = strdup(p->version);
/* check for a release in depend.version. if it's
* missing remove it from p->version as well.
*/
if(!index(depend.version,'-')) {
char *ptr;
for(ptr = ver; *ptr != '-'; ptr++);
*ptr = '\0';
}
cmp = _alpm_versioncmp(ver, depend.version);
switch(depend.mod) {
case PM_DEP_MOD_EQ: found = (cmp == 0); break;
case PM_DEP_MOD_GE: found = (cmp >= 0); break;
case PM_DEP_MOD_LE: found = (cmp <= 0); break;
}
FREE(ver);
}
}
found = _alpm_depcmp(p, &depend);
}
/* else if still not found... */
if(!found) {
@ -701,4 +618,48 @@ error:
return(-1);
}
const char *alpm_dep_get_target(pmdepmissing_t *miss)
{
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(miss != NULL, return(NULL));
return miss->target;
}
unsigned char alpm_dep_get_type(pmdepmissing_t *miss)
{
/* Sanity checks */
ASSERT(handle != NULL, return(-1));
ASSERT(miss != NULL, return(-1));
return miss->type;
}
unsigned char alpm_dep_get_mod(pmdepmissing_t *miss)
{
/* Sanity checks */
ASSERT(handle != NULL, return(-1));
ASSERT(miss != NULL, return(-1));
return miss->depend.mod;
}
const char *alpm_dep_get_name(pmdepmissing_t *miss)
{
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(miss != NULL, return(NULL));
return miss->depend.name;
}
const char *alpm_dep_get_version(pmdepmissing_t *miss)
{
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(miss != NULL, return(NULL));
return miss->depend.version;
}
/* vim: set ts=2 sw=2 noet: */

View File

@ -25,6 +25,7 @@
#include "db.h"
#include "sync.h"
#include "package.h"
#include "alpm.h"
/* Dependency */

View File

@ -58,6 +58,7 @@ pmpkg_t *_alpm_pkg_new(const char *name, const char *version)
} else {
pkg->version[0] = '\0';
}
pkg->filename[0] = '\0';
pkg->desc[0] = '\0';
pkg->url[0] = '\0';
pkg->license = NULL;
@ -70,7 +71,7 @@ pmpkg_t *_alpm_pkg_new(const char *name, const char *version)
pkg->sha1sum[0] = '\0';
pkg->arch[0] = '\0';
pkg->size = 0;
pkg->usize = 0;
pkg->isize = 0;
pkg->scriptlet = 0;
pkg->force = 0;
pkg->reason = PM_PKG_REASON_EXPLICIT;
@ -101,6 +102,7 @@ pmpkg_t *_alpm_pkg_dup(pmpkg_t *pkg)
RET_ERR(PM_ERR_MEMORY, NULL);
}
STRNCPY(newpkg->filename, pkg->filename, PKG_FILENAME_LEN);
STRNCPY(newpkg->name, pkg->name, PKG_NAME_LEN);
STRNCPY(newpkg->version, pkg->version, PKG_VERSION_LEN);
STRNCPY(newpkg->desc, pkg->desc, PKG_DESC_LEN);
@ -113,7 +115,7 @@ pmpkg_t *_alpm_pkg_dup(pmpkg_t *pkg)
STRNCPY(newpkg->sha1sum, pkg->sha1sum, PKG_SHA1SUM_LEN);
STRNCPY(newpkg->arch, pkg->arch, PKG_ARCH_LEN);
newpkg->size = pkg->size;
newpkg->usize = pkg->usize;
newpkg->isize = pkg->isize;
newpkg->force = pkg->force;
newpkg->scriptlet = pkg->scriptlet;
newpkg->reason = pkg->reason;
@ -244,10 +246,10 @@ static int parse_descfile(char *descfile, pmpkg_t *info, int output)
char tmp[32];
STRNCPY(tmp, ptr, sizeof(tmp));
info->size = atol(ptr);
} else if(!strcmp(key, "USIZE")) {
} else if(!strcmp(key, "ISIZE")) {
char tmp[32];
STRNCPY(tmp, ptr, sizeof(tmp));
info->usize = atol(ptr);
info->isize = atol(ptr);
} else if(!strcmp(key, "DEPEND")) {
info->depends = _alpm_list_add(info->depends, strdup(ptr));
} else if(!strcmp(key, "REMOVE")) {
@ -437,30 +439,6 @@ pmpkg_t *_alpm_pkg_isin(char *needle, pmlist_t *haystack)
return(NULL);
}
char *_alpm_pkg_makefilename(pmpkg_t *pkg)
{
char *fname = NULL;
int len = 0, arch_valid = 0;
len = strlen(pkg->name) + strlen(pkg->version) + strlen(PM_EXT_PKG) + 3;
if(pkg->arch && strlen(pkg->arch) > 0) {
arch_valid = 1;
len += strlen(pkg->arch) + 1;
}
if((fname = (char *)calloc(len, sizeof(char))) == NULL) {
RET_ERR(PM_ERR_MEMORY, NULL);
}
if(arch_valid) {
snprintf(fname, len-1, "%s-%s-%s" PM_EXT_PKG, pkg->name, pkg->version, pkg->arch);
} else {
snprintf(fname, len-1, "%s-%s" PM_EXT_PKG, pkg->name, pkg->version);
}
return fname;
}
int _alpm_pkg_splitname(char *target, char *name, char *version, int witharch)
{
char tmp[PKG_FULLNAME_LEN+7];
@ -511,6 +489,24 @@ int _alpm_pkg_splitname(char *target, char *name, char *version, int witharch)
return(0);
}
const char *alpm_pkg_get_filename(pmpkg_t *pkg)
{
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(pkg != NULL, return(NULL));
if(!strlen(pkg->filename)) {
/* construct the file name, it's not in the desc file */
if(pkg->arch && strlen(pkg->arch) > 0) {
snprintf(pkg->filename, PKG_FILENAME_LEN, "%s-%s-%s" PM_EXT_PKG, pkg->name, pkg->version, pkg->arch);
} else {
snprintf(pkg->filename, PKG_FILENAME_LEN, "%s-%s" PM_EXT_PKG, pkg->name, pkg->version);
}
}
return pkg->filename;
}
const char *alpm_pkg_get_name(pmpkg_t *pkg)
{
/* Sanity checks */
@ -649,7 +645,7 @@ unsigned long alpm_pkg_get_size(pmpkg_t *pkg)
return pkg->size;
}
unsigned long alpm_pkg_get_usize(pmpkg_t *pkg)
unsigned long alpm_pkg_get_isize(pmpkg_t *pkg)
{
/* Sanity checks */
ASSERT(handle != NULL, return(-1));
@ -658,7 +654,7 @@ unsigned long alpm_pkg_get_usize(pmpkg_t *pkg)
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
_alpm_db_read(pkg->data, INFRQ_DESC, pkg);
}
return pkg->usize;
return pkg->isize;
}
unsigned char alpm_pkg_get_reason(pmpkg_t *pkg)

View File

@ -37,6 +37,7 @@ enum {
};
/* Packages */
#define PKG_FILENAME_LEN 512
#define PKG_NAME_LEN 256
#define PKG_VERSION_LEN 64
#define PKG_FULLNAME_LEN (PKG_NAME_LEN-1)+1+(PKG_VERSION_LEN-1)+1
@ -50,6 +51,7 @@ enum {
#define PKG_ARCH_LEN 32
struct __pmpkg_t {
char filename[PKG_FILENAME_LEN];
char name[PKG_NAME_LEN];
char version[PKG_VERSION_LEN];
char desc[PKG_DESC_LEN];
@ -62,7 +64,7 @@ struct __pmpkg_t {
char sha1sum[PKG_SHA1SUM_LEN];
char arch[PKG_ARCH_LEN];
unsigned long size;
unsigned long usize;
unsigned long isize;
unsigned char scriptlet;
unsigned char force;
time_t date;
@ -93,7 +95,6 @@ void _alpm_pkg_free(void *data);
int _alpm_pkg_cmp(const void *p1, const void *p2);
pmpkg_t *_alpm_pkg_load(char *pkgfile);
pmpkg_t *_alpm_pkg_isin(char *needle, pmlist_t *haystack);
char *_alpm_pkg_makefilename(pmpkg_t *pkg);
int _alpm_pkg_splitname(char *target, char *name, char *version, int witharch);

View File

@ -785,12 +785,12 @@ int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, pmlist_t **data)
pmdb_t *dbs = spkg->data;
if(current == dbs) {
char *fname = NULL;
const char *fname = NULL;
char path[PATH_MAX];
fname = _alpm_pkg_makefilename(spkg);
fname = alpm_pkg_get_filename(spkg);
if(trans->flags & PM_TRANS_FLAG_PRINTURIS) {
EVENT(trans, PM_TRANS_EVT_PRINTURI, (char *)alpm_db_get_url(current), fname);
EVENT(trans, PM_TRANS_EVT_PRINTURI, (char *)alpm_db_get_url(current), (char *)fname);
} else {
struct stat buf;
snprintf(path, PATH_MAX, "%s/%s", ldir, fname);
@ -801,7 +801,6 @@ int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, pmlist_t **data)
_alpm_log(PM_LOG_DEBUG, _("%s is already in the cache\n"), fname);
}
}
FREE(fname);
}
}
@ -840,11 +839,12 @@ int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, pmlist_t **data)
for(i = trans->packages; i; i = i->next) {
pmsyncpkg_t *sync = i->data;
pmpkg_t *spkg = sync->pkg;
char str[PATH_MAX], *pkgname;
char str[PATH_MAX];
const char *pkgname;
char *md5sum1, *md5sum2, *sha1sum1, *sha1sum2;
char *ptr=NULL;
pkgname = _alpm_pkg_makefilename(spkg);
pkgname = alpm_pkg_get_filename(spkg);
md5sum1 = spkg->md5sum;
sha1sum1 = spkg->sha1sum;
@ -877,7 +877,7 @@ int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, pmlist_t **data)
if(trans->flags & PM_TRANS_FLAG_ALLDEPS) {
doremove=1;
} else {
QUESTION(trans, PM_TRANS_CONV_CORRUPTED_PKG, pkgname, NULL, NULL, &doremove);
QUESTION(trans, PM_TRANS_CONV_CORRUPTED_PKG, (char *)pkgname, NULL, NULL, &doremove);
}
if(doremove) {
char str[PATH_MAX];
@ -890,7 +890,6 @@ int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, pmlist_t **data)
*data = _alpm_list_add(*data, ptr);
retval = 1;
}
FREE(pkgname);
FREE(md5sum2);
FREE(sha1sum2);
}
@ -963,10 +962,10 @@ int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, pmlist_t **data)
pmsyncpkg_t *sync = i->data;
pmpkg_t *spkg = sync->pkg;
char *fname = NULL;
const char *fname = NULL;
char str[PATH_MAX];
fname = _alpm_pkg_makefilename(spkg);
fname = alpm_pkg_get_filename(spkg);
snprintf(str, PATH_MAX, "%s%s/%s", handle->root, handle->cachedir, fname);
if(_alpm_trans_addtarget(tr, str) == -1) {
goto error;

View File

@ -226,4 +226,39 @@ int _alpm_trans_commit(pmtrans_t *trans, pmlist_t **data)
return(0);
}
unsigned char alpm_trans_get_type()
{
/* Sanity checks */
ASSERT(handle != NULL, return(-1));
ASSERT(handle->trans != NULL, return(-1));
return handle->trans->type;
}
unsigned int alpm_trans_get_flags()
{
/* Sanity checks */
ASSERT(handle != NULL, return(-1));
ASSERT(handle->trans != NULL, return(-1));
return handle->trans->flags;
}
pmlist_t * alpm_trans_get_targets()
{
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(handle->trans != NULL, return(NULL));
return handle->trans->targets;
}
pmlist_t * alpm_trans_get_packages()
{
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(handle->trans != NULL, return(NULL));
return handle->trans->packages;
}
/* vim: set ts=2 sw=2 noet: */

View File

@ -511,13 +511,16 @@ int _alpm_runscriptlet(char *root, char *installfn, char *script, char *ver, cha
if(fgets(line, 1024, pp) == NULL)
break;
/* "START <event desc>" */
if((strlen(line) > strlen(STARTSTR)) && !strncmp(line, STARTSTR, strlen(STARTSTR))) {
EVENT(trans, PM_TRANS_EVT_SCRIPTLET_START, _alpm_strtrim(line + strlen(STARTSTR)), NULL);
if((strlen(line) > strlen(SCRIPTLET_START)) && !strncmp(line, SCRIPTLET_START, strlen(SCRIPTLET_START))) {
EVENT(trans, PM_TRANS_EVT_SCRIPTLET_START, _alpm_strtrim(line + strlen(SCRIPTLET_START)), NULL);
/* "DONE <ret code>" */
} else if((strlen(line) > strlen(DONESTR)) && !strncmp(line, DONESTR, strlen(DONESTR))) {
EVENT(trans, PM_TRANS_EVT_SCRIPTLET_DONE, (void*)atol(_alpm_strtrim(line + strlen(DONESTR))), NULL);
} else if((strlen(line) > strlen(SCRIPTLET_DONE)) && !strncmp(line, SCRIPTLET_DONE, strlen(SCRIPTLET_DONE))) {
EVENT(trans, PM_TRANS_EVT_SCRIPTLET_DONE, (void*)atol(_alpm_strtrim(line + strlen(SCRIPTLET_DONE))), NULL);
} else {
EVENT(trans, PM_TRANS_EVT_SCRIPTLET_INFO, _alpm_strtrim(line), NULL);
_alpm_strtrim(line);
/* log our script output */
alpm_logaction(line);
EVENT(trans, PM_TRANS_EVT_SCRIPTLET_INFO, line, NULL);
}
}
pclose(pp);
@ -577,7 +580,7 @@ int _alpm_check_freespace(pmtrans_t *trans, pmlist_t **data)
pmsyncpkg_t *sync = i->data;
if(sync->type != PM_SYNC_TYPE_REPLACE) {
pmpkg_t *pkg = sync->pkg;
pkgsize += pkg->usize;
pkgsize += pkg->isize;
}
}
else

View File

@ -51,8 +51,8 @@
#define _(s) s
#endif
#define STARTSTR "START "
#define DONESTR "DONE "
#define SCRIPTLET_START "START "
#define SCRIPTLET_DONE "DONE "
int _alpm_makepath(char *path);
int _alpm_copyfile(char *src, char *dest);

View File

@ -26,7 +26,12 @@
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <libintl.h>
/* pacman */
#include "alpm.h"
#include "log.h"
#include "util.h"
#include "list.h"
#include "versioncmp.h"
#ifndef HAVE_STRVERSCMP
@ -238,4 +243,42 @@ int _alpm_versioncmp(const char *a, const char *b)
return(*one ? 1 : -1);
}
int _alpm_depcmp(pmpkg_t *pkg, pmdepend_t *dep)
{
int equal = 0;
if(strcmp(pkg->name, dep->name) == 0 || _alpm_list_is_strin(dep->name, pkg->provides)) {
if(dep->mod == PM_DEP_MOD_ANY) {
equal = 1;
} else {
int cmp = _alpm_versioncmp(pkg->version, dep->version);
switch(dep->mod) {
case PM_DEP_MOD_EQ: equal = (cmp == 0); break;
case PM_DEP_MOD_GE: equal = (cmp >= 0); break;
case PM_DEP_MOD_LE: equal = (cmp <= 0); break;
}
}
char *mod = "depends on";
switch(dep->mod) {
case PM_DEP_MOD_EQ: mod = "=="; break;
case PM_DEP_MOD_GE: mod = ">="; break;
case PM_DEP_MOD_LE: mod = "<="; break;
}
if(strlen(dep->version) > 0) {
_alpm_log(PM_LOG_DEBUG, _("depcmp: %s-%s %s %s-%s => %s"),
pkg->name, pkg->version, mod, dep->name, dep->version,
(equal ? "match" : "no match"));
} else {
_alpm_log(PM_LOG_DEBUG, _("depcmp: %s-%s %s %s => %s"),
pkg->name, pkg->version, mod, dep->name,
(equal ? "match" : "no match"));
}
}
return equal;
}
/* vim: set ts=2 sw=2 noet: */

View File

@ -23,7 +23,11 @@
#ifndef _PM_RPMVERCMP_H
#define _PM_RPMVERCMP_H
#include "deps.h"
#include "package.h"
int _alpm_versioncmp(const char *a, const char *b);
int _alpm_depcmp(pmpkg_t *pkg, pmdepend_t *dep);
#endif

View File

@ -94,12 +94,12 @@ int pacman_add(list_t *targets)
case PM_ERR_UNSATISFIED_DEPS:
for(i = alpm_list_first(data); i; i = alpm_list_next(i)) {
pmdepmissing_t *miss = alpm_list_getdata(i);
MSG(NL, _(":: %s: requires %s"), alpm_dep_getinfo(miss, PM_DEP_TARGET),
alpm_dep_getinfo(miss, PM_DEP_NAME));
switch((long)alpm_dep_getinfo(miss, PM_DEP_MOD)) {
case PM_DEP_MOD_EQ: MSG(CL, "=%s", alpm_dep_getinfo(miss, PM_DEP_VERSION)); break;
case PM_DEP_MOD_GE: MSG(CL, ">=%s", alpm_dep_getinfo(miss, PM_DEP_VERSION)); break;
case PM_DEP_MOD_LE: MSG(CL, "<=%s", alpm_dep_getinfo(miss, PM_DEP_VERSION)); break;
MSG(NL, _(":: %s: requires %s"), alpm_dep_get_target(miss),
alpm_dep_get_name(miss));
switch(alpm_dep_get_mod(miss)) {
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");
}
@ -108,25 +108,25 @@ int pacman_add(list_t *targets)
for(i = alpm_list_first(data); i; i = alpm_list_next(i)) {
pmdepmissing_t *miss = alpm_list_getdata(i);
MSG(NL, _(":: %s: conflicts with %s"),
alpm_dep_getinfo(miss, PM_DEP_TARGET), alpm_dep_getinfo(miss, PM_DEP_NAME));
alpm_dep_get_target(miss), alpm_dep_get_name(miss));
}
break;
case PM_ERR_FILE_CONFLICTS:
for(i = alpm_list_first(data); i; i = alpm_list_next(i)) {
pmconflict_t *conflict = alpm_list_getdata(i);
switch((long)alpm_conflict_getinfo(conflict, PM_CONFLICT_TYPE)) {
switch(alpm_conflict_get_type(conflict)) {
case PM_CONFLICT_TYPE_TARGET:
MSG(NL, _("%s%s exists in \"%s\" (target) and \"%s\" (target)"),
config->root,
(char *)alpm_conflict_getinfo(conflict, PM_CONFLICT_FILE),
(char *)alpm_conflict_getinfo(conflict, PM_CONFLICT_TARGET),
(char *)alpm_conflict_getinfo(conflict, PM_CONFLICT_CTARGET));
alpm_conflict_get_file(conflict),
alpm_conflict_get_target(conflict),
alpm_conflict_get_ctarget(conflict));
break;
case PM_CONFLICT_TYPE_FILE:
MSG(NL, _("%s: %s%s exists in filesystem"),
(char *)alpm_conflict_getinfo(conflict, PM_CONFLICT_TARGET),
alpm_conflict_get_target(conflict),
config->root,
(char *)alpm_conflict_getinfo(conflict, PM_CONFLICT_FILE));
alpm_conflict_get_file(conflict));
break;
}
}

View File

@ -107,15 +107,15 @@ int pacman_deptest(list_t *targets)
for(lp = alpm_list_first(data); lp; lp = alpm_list_next(lp)) {
pmdepmissing_t *miss = alpm_list_getdata(lp);
if(!config->op_d_resolve) {
MSG(NL, _("requires: %s"), alpm_dep_getinfo(miss, PM_DEP_NAME));
switch((long)alpm_dep_getinfo(miss, PM_DEP_MOD)) {
case PM_DEP_MOD_EQ: MSG(CL, "=%s", alpm_dep_getinfo(miss, PM_DEP_VERSION)); break;
case PM_DEP_MOD_GE: MSG(CL, ">=%s", alpm_dep_getinfo(miss, PM_DEP_VERSION)); break;
case PM_DEP_MOD_LE: MSG(CL, "<=%s", alpm_dep_getinfo(miss, PM_DEP_VERSION)); break;
MSG(NL, _("requires: %s"), alpm_dep_get_name(miss));
switch(alpm_dep_get_mod(miss)) {
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 = list_add(synctargs, strdup(alpm_dep_getinfo(miss, PM_DEP_NAME)));
synctargs = list_add(synctargs, strdup(alpm_dep_get_name(miss)));
}
alpm_list_free(data);
break;
@ -123,7 +123,7 @@ int pacman_deptest(list_t *targets)
/* we can't auto-resolve conflicts */
for(lp = alpm_list_first(data); lp; lp = alpm_list_next(lp)) {
pmdepmissing_t *miss = alpm_list_getdata(lp);
MSG(NL, _("conflict: %s"), alpm_dep_getinfo(miss, PM_DEP_NAME));
MSG(NL, _("conflict: %s"), alpm_dep_get_name(miss));
}
retval = 127;
alpm_list_free(data);

View File

@ -147,7 +147,7 @@ void dump_pkg_sync(pmpkg_t *pkg, char *treename)
pmlist_display(_("Replaces :"), alpm_pkg_get_replaces(pkg));
printf(_("Size (compressed) : %ld\n"), (long)alpm_pkg_get_size(pkg));
printf(_("Size (uncompressed):%ld\n"), (long)alpm_pkg_get_usize(pkg));
printf(_("Size (installed) : %ld\n"), (long)alpm_pkg_get_isize(pkg));
printf(_("Description : "));
indentprint(alpm_pkg_get_desc(pkg), 20);

View File

@ -163,7 +163,8 @@ int pacman_query(list_t *targets)
}
} else {
ERR(NL, _("group \"%s\" was not found\n"), package);
return(2);
/* do not return on query operations - let's just carry on */
/*return(2);*/
}
}
continue;
@ -215,7 +216,9 @@ int pacman_query(list_t *targets)
if(info == NULL) {
/* something weird happened */
ERR(NL, _("package \"%s\" not found\n"), pkgname);
return(1);
/* do not return on query operations - let's just carry on */
/*return(1);*/
continue;
}
if(config->op_q_foreign) {
int match = 0;
@ -258,7 +261,9 @@ int pacman_query(list_t *targets)
info = alpm_db_readpkg(db_local, package);
if(info == NULL) {
ERR(NL, _("package \"%s\" not found\n"), package);
return(2);
/* do not return on query operations - let's just carry on */
/*return(2);*/
continue;
}
/* find a target */

View File

@ -104,8 +104,8 @@ int pacman_remove(list_t *targets)
case PM_ERR_UNSATISFIED_DEPS:
for(lp = alpm_list_first(data); lp; lp = alpm_list_next(lp)) {
pmdepmissing_t *miss = alpm_list_getdata(lp);
MSG(NL, _(" %s: is required by %s\n"), alpm_dep_getinfo(miss, PM_DEP_TARGET),
alpm_dep_getinfo(miss, PM_DEP_NAME));
MSG(NL, _(" %s is required by %s\n"), alpm_dep_get_target(miss),
alpm_dep_get_name(miss));
}
alpm_list_free(data);
break;
@ -122,7 +122,7 @@ int pacman_remove(list_t *targets)
pmlist_t *lp;
/* list transaction targets */
i = NULL;
for(lp = alpm_list_first(alpm_trans_getinfo(PM_TRANS_PACKAGES)); lp; lp = alpm_list_next(lp)) {
for(lp = alpm_list_first(alpm_trans_get_packages()); lp; lp = alpm_list_next(lp)) {
pmpkg_t *pkg = alpm_list_getdata(lp);
i = list_add(i, strdup(alpm_pkg_get_name(pkg)));
}

View File

@ -410,7 +410,7 @@ int pacman_sync(list_t *targets)
}
if(config->op_s_upgrade) {
MSG(NL, _(":: Starting local database upgrade...\n"));
MSG(NL, _(":: Starting full system upgrade...\n"));
alpm_logaction(_("starting full system upgrade"));
if(alpm_trans_sysupgrade() == -1) {
ERR(NL, "%s\n", alpm_strerror(pm_errno));
@ -424,7 +424,7 @@ int pacman_sync(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_getinfo(PM_TRANS_PACKAGES);
data = alpm_trans_get_packages();
for(lp = alpm_list_first(data); lp; lp = alpm_list_next(lp)) {
pmsyncpkg_t *sync = alpm_list_getdata(lp);
pmpkg_t *spkg = alpm_sync_get_package(sync);
@ -535,13 +535,13 @@ int pacman_sync(list_t *targets)
case PM_ERR_UNSATISFIED_DEPS:
for(lp = alpm_list_first(data); lp; lp = alpm_list_next(lp)) {
pmdepmissing_t *miss = alpm_list_getdata(lp);
MSG(NL, ":: %s: %s %s", alpm_dep_getinfo(miss, PM_DEP_TARGET),
(long)alpm_dep_getinfo(miss, PM_DEP_TYPE) == PM_DEP_TYPE_DEPEND ? _("requires") : _("is required by"),
alpm_dep_getinfo(miss, PM_DEP_NAME));
switch((long)alpm_dep_getinfo(miss, PM_DEP_MOD)) {
case PM_DEP_MOD_EQ: MSG(CL, "=%s", alpm_dep_getinfo(miss, PM_DEP_VERSION)); break;
case PM_DEP_MOD_GE: MSG(CL, ">=%s", alpm_dep_getinfo(miss, PM_DEP_VERSION)); break;
case PM_DEP_MOD_LE: MSG(CL, "<=%s", alpm_dep_getinfo(miss, PM_DEP_VERSION)); break;
MSG(NL, ":: %s %s %s", alpm_dep_get_target(miss),
alpm_dep_get_type(miss) == PM_DEP_TYPE_DEPEND ? _("requires") : _("is required by"),
alpm_dep_get_name(miss));
switch(alpm_dep_get_mod(miss)) {
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");
}
@ -551,7 +551,7 @@ int pacman_sync(list_t *targets)
pmdepmissing_t *miss = alpm_list_getdata(lp);
MSG(NL, _(":: %s: conflicts with %s"),
alpm_dep_getinfo(miss, PM_DEP_TARGET), alpm_dep_getinfo(miss, PM_DEP_NAME));
alpm_dep_get_target(miss), alpm_dep_get_name(miss));
}
break;
case PM_ERR_DISK_FULL:
@ -569,7 +569,7 @@ int pacman_sync(list_t *targets)
goto cleanup;
}
packages = alpm_trans_getinfo(PM_TRANS_PACKAGES);
packages = alpm_trans_get_packages();
if(packages == NULL) {
/* nothing to do: just exit without complaining */
MSG(NL," local database is up to date");
@ -577,12 +577,12 @@ int pacman_sync(list_t *targets)
}
/* list targets and get confirmation */
if(!((unsigned long)alpm_trans_getinfo(PM_TRANS_FLAGS) & PM_TRANS_FLAG_PRINTURIS)) {
if(!(alpm_trans_get_flags() & PM_TRANS_FLAG_PRINTURIS)) {
list_t *list_install = NULL;
list_t *list_remove = NULL;
char *str;
unsigned long totalsize = 0;
unsigned long totalusize = 0;
unsigned long totalisize = 0;
double mb, umb;
for(lp = alpm_list_first(packages); lp; lp = alpm_list_next(lp)) {
@ -605,7 +605,7 @@ int pacman_sync(list_t *targets)
pkgname = alpm_pkg_get_name(pkg);
pkgver = alpm_pkg_get_version(pkg);
totalsize += alpm_pkg_get_size(pkg);
totalusize += alpm_pkg_get_usize(pkg);
totalisize += alpm_pkg_get_isize(pkg);
asprintf(&str, "%s-%s", pkgname, pkgver);
list_install = list_add(list_install, str);
@ -619,7 +619,7 @@ int pacman_sync(list_t *targets)
FREE(str);
}
mb = (double)(totalsize / 1048576.0);
umb = (double)(totalusize / 1048576.0);
umb = (double)(totalisize / 1048576.0);
/* round up to 0.1 */
if(mb < 0.1) {
mb = 0.1;
@ -672,19 +672,19 @@ int pacman_sync(list_t *targets)
case PM_ERR_FILE_CONFLICTS:
for(lp = alpm_list_first(data); lp; lp = alpm_list_next(lp)) {
pmconflict_t *conflict = alpm_list_getdata(lp);
switch((long)alpm_conflict_getinfo(conflict, PM_CONFLICT_TYPE)) {
switch(alpm_conflict_get_type(conflict)) {
case PM_CONFLICT_TYPE_TARGET:
MSG(NL, _("%s%s exists in \"%s\" (target) and \"%s\" (target)"),
config->root,
(char *)alpm_conflict_getinfo(conflict, PM_CONFLICT_FILE),
(char *)alpm_conflict_getinfo(conflict, PM_CONFLICT_TARGET),
(char *)alpm_conflict_getinfo(conflict, PM_CONFLICT_CTARGET));
alpm_conflict_get_file(conflict),
alpm_conflict_get_target(conflict),
alpm_conflict_get_ctarget(conflict));
break;
case PM_CONFLICT_TYPE_FILE:
MSG(NL, _("%s: %s%s exists in filesystem"),
(char *)alpm_conflict_getinfo(conflict, PM_CONFLICT_TARGET),
alpm_conflict_get_target(conflict),
config->root,
(char *)alpm_conflict_getinfo(conflict, PM_CONFLICT_FILE));
alpm_conflict_get_file(conflict));
break;
}
}

View File

@ -3,6 +3,7 @@ bin_PROGRAMS = vercmp
AM_CFLAGS = \
-I$(top_srcdir)/lib/libalpm \
-I$(top_srcdir)/src/pacman
$(CFLAGS)
vercmp_SOURCES = vercmp.c

View File

@ -21,6 +21,9 @@
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <limits.h>
#include "versioncmp.h"
int main(int argc, char *argv[])