Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=0a36ade1edc01fa4dc3a0cc5d176388803bfe0ff

commit 0a36ade1edc01fa4dc3a0cc5d176388803bfe0ff
Author: Michel Hermier <[email protected]>
Date:   Tue Apr 29 16:48:05 2014 +0200

libpacman: Add Package::provides accessor and interogator.

diff --git a/lib/libpacman/db/localdb.cpp b/lib/libpacman/db/localdb.cpp
index 1d2c623..5ba268f 100644
--- a/lib/libpacman/db/localdb.cpp
+++ b/lib/libpacman/db/localdb.cpp
@@ -436,7 +436,7 @@ int LocalDatabase::write(Package *info, unsigned int 
inforeq)
_pacman_localdb_write_stringlist("DEPENDS", info->depends, fp);
_pacman_localdb_write_stringlist("REQUIREDBY", info->requiredby, fp);
_pacman_localdb_write_stringlist("CONFLICTS", info->conflicts, fp);
-               _pacman_localdb_write_stringlist("PROVIDES", info->provides, 
fp);
+               _pacman_localdb_write_stringlist("PROVIDES", info->provides(), 
fp);
fclose(fp);
fp = NULL;
}
diff --git a/lib/libpacman/db/localdb_files.cpp 
b/lib/libpacman/db/localdb_files.cpp
index 4b56bf4..e5fcc24 100644
--- a/lib/libpacman/db/localdb_files.cpp
+++ b/lib/libpacman/db/localdb_files.cpp
@@ -200,7 +200,7 @@ int _pacman_localdb_depends_fread(Package *info, FILE *fp)
} else if(!strcmp(line, "%CONFLICTS%")) {
_pacman_db_read_lines(&info->conflicts, line, sline, fp);
} else if(!strcmp(line, "%PROVIDES%")) {
-                       _pacman_db_read_lines(&info->provides, line, sline, fp);
+                       _pacman_db_read_lines(&info->m_provides, line, sline, 
fp);
} else if(!strcmp(line, "%REPLACES%")) {
/* the REPLACES tag is special -- it only appears in sync repositories,
* not the local one. */
diff --git a/lib/libpacman/deps.cpp b/lib/libpacman/deps.cpp
index e98a185..7aea416 100644
--- a/lib/libpacman/deps.cpp
+++ b/lib/libpacman/deps.cpp
@@ -358,9 +358,9 @@ pmlist_t *_pacman_checkdeps(pmtrans_t *trans, unsigned char 
op, pmlist_t *packag
for(k = packages; k && !found; k = k->next) {
Package *p = (Package *)k->data;
/* see if the package names match OR if p provides depend.name */
-                                       if(!strcmp(p->name, depend.name) || 
_pacman_list_is_strin(depend.name, p->getinfo(PM_PKG_PROVIDES))) {
+                                       if(!strcmp(p->name, depend.name) || 
p->provides(depend.name)) {
if(depend.mod == PM_DEP_MOD_ANY ||
-                                                               
_pacman_list_is_strin(depend.name, p->getinfo(PM_PKG_PROVIDES))) {
+                                                               
p->provides(depend.name)) {
/* depend accepts any version or p provides depend (provides - by
* definition - is for all versions) */
found = 1;
@@ -414,7 +414,7 @@ pmlist_t *_pacman_checkdeps(pmtrans_t *trans, unsigned char 
op, pmlist_t *packag
for(k=trans->packages; !found && k; k=k->next) {
Package *spkg = k->data;

-                                               if(spkg && 
_pacman_list_is_strin(tp->name, spkg->getinfo(PM_PKG_PROVIDES))) {
+                                               if(spkg && 
spkg->provides(tp->name)) {
found=1;
}
}
@@ -422,7 +422,7 @@ pmlist_t *_pacman_checkdeps(pmtrans_t *trans, unsigned char 
op, pmlist_t *packag
pmsyncpkg_t *ps = k->data;
Package *spkg = ps->pkg;

-                                               if(spkg && 
_pacman_list_is_strin(tp->name, spkg->getinfo(PM_PKG_PROVIDES))) {
+                                               if(spkg && 
spkg->provides(tp->name)) {
found=1;
}
}
@@ -598,7 +598,7 @@ int _pacman_resolvedeps(pmtrans_t *trans, Package *syncpkg, 
pmlist_t *list,
/* check if one of the packages in *list already provides this dependency */
for(j = list; j && !found; j = j->next) {
Package *sp = (Package *)j->data;
-                       if(_pacman_list_is_strin(miss->depend.name, 
sp->getinfo(PM_PKG_PROVIDES))) {
+                       if(sp->provides(miss->depend.name)) {
_pacman_log(PM_LOG_DEBUG, _("%s provides dependency %s -- skipping"),
sp->name, miss->depend.name);
found = 1;
@@ -695,7 +695,7 @@ int _pacman_depcmp(Package *pkg, pmdepend_t *dep)
const char *mod = "~=";

if(strcmp(pkg->name, dep->name) == 0
-               || _pacman_list_is_strin(dep->name, 
pkg->getinfo(PM_PKG_PROVIDES))) {
+               || pkg->provides(dep->name)) {
if(dep->mod == PM_DEP_MOD_ANY) {
equal = 1;
} else {
diff --git a/lib/libpacman/package.cpp b/lib/libpacman/package.cpp
index d864656..855cf5f 100644
--- a/lib/libpacman/package.cpp
+++ b/lib/libpacman/package.cpp
@@ -93,7 +93,7 @@ Package::Package(const libpacman::Package &other)
depends        = _pacman_list_strdup(other.depends);
removes        = _pacman_list_strdup(other.removes);
groups         = _pacman_list_strdup(other.groups);
-       provides       = _pacman_list_strdup(other.provides);
+       m_provides     = _pacman_list_strdup(other.m_provides);
replaces       = _pacman_list_strdup(other.replaces);
triggers       = _pacman_list_strdup(other.triggers);

@@ -114,7 +114,7 @@ Package::~Package()
FREELIST(conflicts);
FREELIST(requiredby);
FREELIST(groups);
-       FREELIST(provides);
+       FREELIST(m_provides);
FREELIST(replaces);
FREELIST(triggers);
if(origin == PKG_FROM_FILE) {
@@ -204,7 +204,7 @@ int _pacman_pkg_fini(Package *self)
FREELIST(self->conflicts);
FREELIST(self->requiredby);
FREELIST(self->groups);
-       FREELIST(self->provides);
+       FREELIST(self->m_provides);
FREELIST(self->replaces);
FREELIST(self->triggers);
if(self->origin == PKG_FROM_FILE) {
@@ -438,7 +438,7 @@ void *Package::getinfo(unsigned char parm)
case PM_PKG_DEPENDS:     data = depends; break;
case PM_PKG_REMOVES:     data = removes; break;
case PM_PKG_REQUIREDBY:  data = requiredby; break;
-               case PM_PKG_PROVIDES:    data = provides; break;
+               case PM_PKG_PROVIDES:    data = m_provides; break;
case PM_PKG_CONFLICTS:   data = conflicts; break;
case PM_PKG_FILES:       data = files; break;
case PM_PKG_BACKUP:      data = backup; break;
@@ -539,6 +539,16 @@ char *Package::fileneedbackup(const char *file) const
return(NULL);
}

+FStringList *Package::provides() const
+{
+       return m_provides;
+}
+
+bool Package::provides(const char *pkgname)
+{
+       return _pacman_list_is_strin(pkgname, getinfo(PM_PKG_PROVIDES));
+}
+
typedef struct FPackageStrMatcher FPackageStrMatcher;

struct FPackageStrMatcher
@@ -595,7 +605,7 @@ int _pacman_packagestrmatcher_match(const void *ptr, const 
void *matcher_data) {
((flags & PM_PACKAGE_FLAG_REMOVES) && f_stringlist_any_match(pkg->removes, 
strmatcher)) ||
((flags & PM_PACKAGE_FLAG_REQUIREDBY) && 
f_stringlist_any_match(pkg->requiredby, strmatcher)) ||
((flags & PM_PACKAGE_FLAG_CONFLITS) && f_stringlist_any_match(pkg->conflicts, 
strmatcher)) ||
-                       ((flags & PM_PACKAGE_FLAG_PROVIDES) && 
f_stringlist_any_match(pkg->provides, strmatcher)) ||
+                       ((flags & PM_PACKAGE_FLAG_PROVIDES) && 
f_stringlist_any_match(pkg->m_provides, strmatcher)) ||
((flags & PM_PACKAGE_FLAG_TRIGGERS) && f_stringlist_any_match(pkg->triggers, 
strmatcher))) {
return 1;
}
diff --git a/lib/libpacman/package.h b/lib/libpacman/package.h
index 4729e8d..3a50c95 100644
--- a/lib/libpacman/package.h
+++ b/lib/libpacman/package.h
@@ -110,6 +110,9 @@ public:
bool set_filename(const char *filename, int witharch);
static bool splitname(const char *target, char *name, char *version, int 
witharch);

+       FStringList *provides() const;
+       bool provides(const char *pkgname);
+
libpacman::Database *database;

unsigned int flags;
@@ -141,7 +144,7 @@ public:
FStringList *removes;
FStringList *requiredby;
FStringList *conflicts;
-       FStringList *provides;
+       FStringList *m_provides;
FStringList *triggers;
/* internal */
unsigned char origin;
diff --git a/lib/libpacman/package/fpmpackage.cpp 
b/lib/libpacman/package/fpmpackage.cpp
index ef5c2c5..4e654dc 100644
--- a/lib/libpacman/package/fpmpackage.cpp
+++ b/lib/libpacman/package/fpmpackage.cpp
@@ -120,7 +120,7 @@ int _pacman_pkginfo_fread(FILE *descfile, Package *info, 
int output)
} else if(!strcmp(key, "REPLACES")) {
info->replaces = f_stringlist_append(info->replaces, ptr);
} else if(!strcmp(key, "PROVIDES")) {
-                               info->provides = 
f_stringlist_append(info->provides, ptr);
+                               info->m_provides = 
f_stringlist_append(info->m_provides, ptr);
} else if(!strcmp(key, "BACKUP")) {
info->backup = f_stringlist_append(info->backup, ptr);
} else if(!strcmp(key, "TRIGGER")) {
diff --git a/lib/libpacman/sync.cpp b/lib/libpacman/sync.cpp
index 52c351b..0417641 100644
--- a/lib/libpacman/sync.cpp
+++ b/lib/libpacman/sync.cpp
@@ -369,7 +369,7 @@ int _pacman_sync_prepare(pmtrans_t *trans, pmlist_t **data)
local = _pacman_db_get_pkgfromcache(db_local, miss->depend.name);
/* check if this package also "provides" the package it's conflicting with
*/
-                               if(_pacman_list_is_strin(miss->depend.name, 
ps->pkg->provides)) {
+                               if(ps->pkg->provides(miss->depend.name)) {
/* so just treat it like a "replaces" item so the REQUIREDBY
* fields are inherited properly.
*/
@@ -544,7 +544,7 @@ int _pacman_sync_prepare(pmtrans_t *trans, pmlist_t **data)
* to a provisio from the package we want to remove */
for(k = conflictp->depends; k && !pfound; k = k->next) {
pmlist_t *m;
-                                                       for(m = 
leavingp->provides; m && !pfound; m = m->next) {
+                                                       for(m = 
leavingp->provides(); m && !pfound; m = m->next) {
if(!strcmp(k->data, m->data)) {
/* Found a match -- now look through final for a package that
* provides the same thing.  If none are found, then it truly
@@ -552,7 +552,7 @@ int _pacman_sync_prepare(pmtrans_t *trans, pmlist_t **data)
pmlist_t *n, *o;
for(n = trans->syncpkgs; n && !pfound; n = n->next) {
pmsyncpkg_t *sp = n->data;
-                                                                               
for(o = sp->pkg->provides; o && !pfound; o = o->next) {
+                                                                               
for(o = sp->pkg->provides(); o && !pfound; o = o->next) {
if(!strcmp(m->data, o->data)) {
/* found matching provisio -- we're good to go */
_pacman_log(PM_LOG_FLOW2, _("found '%s' as a provision for '%s' -- conflict 
aborted"),
diff --git a/lib/libpacman/trans.cpp b/lib/libpacman/trans.cpp
index 6ac4abb..b73aa39 100644
--- a/lib/libpacman/trans.cpp
+++ b/lib/libpacman/trans.cpp
@@ -1167,7 +1167,7 @@ int _pacman_add_commit(pmtrans_t *trans, pmlist_t **data)
if(_pacman_splitdep(tmppm->data, &depend)) {
continue;
}
-                               if(tmppm->data && (!strcmp(depend.name, 
pkg_new->name) || _pacman_list_is_strin(depend.name, pkg_new->provides))) {
+                               if(tmppm->data && (!strcmp(depend.name, 
pkg_new->name) || pkg_new->provides(depend.name))) {
_pacman_log(PM_LOG_DEBUG, _("adding '%s' in requiredby field for '%s'"), 
tmpp->name, pkg_new->name);
pkg_new->requiredby = _pacman_stringlist_append(pkg_new->requiredby, 
tmpp->name);
}
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to