Author: mlschroe
Date: Wed Mar 5 15:04:27 2008
New Revision: 9019
URL: http://svn.opensuse.org/viewcvs/zypp?rev=9019&view=rev
Log:
- support header-range and sourcerpm in repo_rpmmd
- support -b and -d in rpmmd2solv
Modified:
trunk/sat-solver/tools/CMakeLists.txt
trunk/sat-solver/tools/repo_rpmdb.c
trunk/sat-solver/tools/repo_rpmmd.c
trunk/sat-solver/tools/rpmmd2solv.c
Modified: trunk/sat-solver/tools/CMakeLists.txt
URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/tools/CMakeLists.txt?rev=9019&r1=9018&r2=9019&view=diff
==============================================================================
--- trunk/sat-solver/tools/CMakeLists.txt (original)
+++ trunk/sat-solver/tools/CMakeLists.txt Wed Mar 5 15:04:27 2008
@@ -16,7 +16,7 @@
SET(rpmmd2solv_REPOS rpmmd2solv.c repo_rpmmd.h repo_rpmmd.c repo_write.c common_write.c )
ADD_EXECUTABLE( rpmmd2solv ${rpmmd2solv_REPOS} )
-TARGET_LINK_LIBRARIES( rpmmd2solv satsolver ${EXPAT_LIBRARY})
+TARGET_LINK_LIBRARIES( rpmmd2solv satsolver ${EXPAT_LIBRARY} ${ZLIB_LIBRARY})
SET(helix2solv_REPOS helix2solv.c repo_write.c common_write.c )
ADD_EXECUTABLE( helix2solv ${helix2solv_REPOS} )
Modified: trunk/sat-solver/tools/repo_rpmdb.c
URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/tools/repo_rpmdb.c?rev=9019&r1=9018&r2=9019&view=diff
==============================================================================
--- trunk/sat-solver/tools/repo_rpmdb.c (original)
+++ trunk/sat-solver/tools/repo_rpmdb.c Wed Mar 5 15:04:27 2008
@@ -614,6 +614,48 @@
return olddeps;
}
+static void
+addsourcerpm(Pool *pool, Repodata *repodata, Solvable *s, char *sourcerpm, char *name, char *evr)
+{
+ Id entry;
+ const char *p, *sevr, *sarch;
+
+ p = strrchr(sourcerpm, '.');
+ if (!p || strcmp(p, ".rpm") != 0)
+ return;
+ p--;
+ while (p > sourcerpm && *p != '.')
+ p--;
+ if (*p != '.' || p == sourcerpm)
+ return;
+ sarch = p-- + 1;
+ while (p > sourcerpm && *p != '-')
+ p--;
+ if (*p != '-' || p == sourcerpm)
+ return;
+ p--;
+ while (p > sourcerpm && *p != '-')
+ p--;
+ if (*p != '-' || p == sourcerpm)
+ return;
+ sevr = p + 1;
+ entry = (s - pool->solvables) - repodata->start;
+ if (!strcmp(sarch, "src.rpm"))
+ repodata_set_constantid(repodata, entry, SOLVABLE_SOURCEARCH, ARCH_SRC);
+ else if (!strcmp(sarch, "nosrc.rpm"))
+ repodata_set_constantid(repodata, entry, SOLVABLE_SOURCEARCH, ARCH_NOSRC);
+ else
+ repodata_set_constantid(repodata, entry, SOLVABLE_SOURCEARCH, strn2id(pool, sarch, strlen(sarch) - 4, 1));
+ if (!strncmp(sevr, evr, sarch - sevr - 1) && evr[sarch - sevr - 1] == 0)
+ repodata_set_void(repodata, entry, SOLVABLE_SOURCEEVR);
+ else
+ repodata_set_id(repodata, entry, SOLVABLE_SOURCEEVR, strn2id(pool, sevr, sarch - sevr - 1, 1));
+ if (!strncmp(sourcerpm, name, sevr - sourcerpm - 1) && name[sevr - sourcerpm - 1] == 0)
+ repodata_set_void(repodata, entry, SOLVABLE_SOURCENAME);
+ else
+ repodata_set_id(repodata, entry, SOLVABLE_SOURCENAME, strn2id(pool, sourcerpm, sevr - sourcerpm - 1, 1));
+}
+
static int
rpm2solv(Pool *pool, Repo *repo, Repodata *repodata, Solvable *s, RpmHead *rpmhead)
{
@@ -724,46 +766,7 @@
if (u32)
repodata_set_num(repodata, entry, SOLVABLE_INSTALLSIZE, (u32 + 1023) / 1024);
if (sourcerpm)
- {
- const char *p, *sevr, *sarch;
- p = strrchr(sourcerpm, '.');
- if (p && !strcmp(p, ".rpm"))
- {
- p--;
- while (p > sourcerpm && *p != '.')
- p--;
- if (*p == '.' && p > sourcerpm)
- {
- sarch = p-- + 1;
- while (p > sourcerpm && *p != '-')
- p--;
- if (*p == '-' && p > sourcerpm)
- {
- p--;
- while (p > sourcerpm && *p != '-')
- p--;
- if (*p == '-' && p > sourcerpm)
- {
- sevr = p + 1;
- if (!strcmp(sarch, "src.rpm"))
- repodata_set_constantid(repodata, entry, SOLVABLE_SOURCEARCH, ARCH_SRC);
- else if (!strcmp(sarch, "nosrc.rpm"))
- repodata_set_constantid(repodata, entry, SOLVABLE_SOURCEARCH, ARCH_NOSRC);
- else
- repodata_set_constantid(repodata, entry, SOLVABLE_SOURCEARCH, strn2id(pool, sarch, strlen(sarch) - 4, 1));
- if (!strncmp(sevr, evr, sarch - sevr - 1) && evr[sarch - sevr - 1] == 0)
- repodata_set_void(repodata, entry, SOLVABLE_SOURCEEVR);
- else
- repodata_set_id(repodata, entry, SOLVABLE_SOURCEEVR, strn2id(pool, sevr, sarch - sevr - 1, 1));
- if (!strncmp(sourcerpm, name, sevr - sourcerpm - 1) && name[sevr - sourcerpm - 1] == 0)
- repodata_set_void(repodata, entry, SOLVABLE_SOURCENAME);
- else
- repodata_set_id(repodata, entry, SOLVABLE_SOURCENAME, strn2id(pool, sourcerpm, sevr - sourcerpm - 1, 1));
- }
- }
- }
- }
- }
+ addsourcerpm(pool, repodata, s, sourcerpm, name, evr);
}
sat_free(evr);
return 1;
Modified: trunk/sat-solver/tools/repo_rpmmd.c
URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/tools/repo_rpmmd.c?rev=9019&r1=9018&r2=9019&view=diff
==============================================================================
--- trunk/sat-solver/tools/repo_rpmmd.c (original)
+++ trunk/sat-solver/tools/repo_rpmmd.c Wed Mar 5 15:04:27 2008
@@ -82,6 +82,8 @@
STATE_SUGGESTS,
STATE_ENHANCES,
STATE_FRESHENS,
+ STATE_SOURCERPM,
+ STATE_HEADERRANGE,
STATE_CAPS_FORMAT,
STATE_CAPS_VENDOR,
@@ -203,6 +205,8 @@
{ STATE_FORMAT, "rpm:suggests", STATE_SUGGESTS, 0 },
{ STATE_FORMAT, "rpm:enhances", STATE_ENHANCES, 0 },
{ STATE_FORMAT, "rpm:freshens", STATE_FRESHENS, 0 },
+ { STATE_FORMAT, "rpm:sourcerpm", STATE_SOURCERPM, 1 },
+ { STATE_FORMAT, "rpm:header-range", STATE_HEADERRANGE, 0 },
{ STATE_FORMAT, "file", STATE_FILE, 1 },
{ STATE_PROVIDES, "rpm:entry", STATE_PROVIDESENTRY, 0 },
{ STATE_REQUIRES, "rpm:entry", STATE_REQUIRESENTRY, 0 },
@@ -355,7 +359,7 @@
return str2id(pool, pd->content, 1);
}
-static const char *
+static inline const char *
find_attr(const char *txt, const char **atts)
{
for (; *atts; atts += 2)
@@ -474,6 +478,51 @@
repodata_set_str(data, entry, SOLVABLE_DESCRIPTION, str);
}
+static void
+set_sourcerpm(Repodata *data, Solvable *s, Id entry, char *sourcerpm)
+{
+ const char *p, *sevr, *sarch, *name, *evr;
+ Pool *pool;
+
+ p = strrchr(sourcerpm, '.');
+ if (!p || strcmp(p, ".rpm") != 0)
+ return;
+ p--;
+ while (p > sourcerpm && *p != '.')
+ p--;
+ if (*p != '.' || p == sourcerpm)
+ return;
+ sarch = p-- + 1;
+ while (p > sourcerpm && *p != '-')
+ p--;
+ if (*p != '-' || p == sourcerpm)
+ return;
+ p--;
+ while (p > sourcerpm && *p != '-')
+ p--;
+ if (*p != '-' || p == sourcerpm)
+ return;
+ sevr = p + 1;
+ pool = s->repo->pool;
+ name = id2str(pool, s->name);
+ evr = id2str(pool, s->evr);
+ if (!strcmp(sarch, "src.rpm"))
+ repodata_set_constantid(data, entry, SOLVABLE_SOURCEARCH, ARCH_SRC);
+ else if (!strcmp(sarch, "nosrc.rpm"))
+ repodata_set_constantid(data, entry, SOLVABLE_SOURCEARCH, ARCH_NOSRC);
+ else
+ repodata_set_constantid(data, entry, SOLVABLE_SOURCEARCH, strn2id(pool, sarch, strlen(sarch) - 4, 1));
+ if (!strncmp(sevr, evr, sarch - sevr - 1) && evr[sarch - sevr - 1] == 0)
+ repodata_set_void(data, entry, SOLVABLE_SOURCEEVR);
+ else
+ repodata_set_id(data, entry, SOLVABLE_SOURCEEVR, strn2id(pool, sevr, sarch - sevr - 1, 1));
+ if (!strncmp(sourcerpm, name, sevr - sourcerpm - 1) && name[sevr - sourcerpm -
+ 1] == 0)
+ repodata_set_void(data, entry, SOLVABLE_SOURCENAME);
+ else
+ repodata_set_id(data, entry, SOLVABLE_SOURCENAME, strn2id(pool, sourcerpm, sevr - sourcerpm - 1, 1));
+}
+
static void XMLCALL
startElement(void *userData, const char *name, const char **atts)
{
@@ -627,7 +676,7 @@
break;
case STATE_TIME:
{
- unsigned t;
+ unsigned int t;
str = find_attr("build", atts);
if (str && (t = atoi(str)) != 0)
repodata_set_num(pd->data, entry, SOLVABLE_BUILDTIME, t);
@@ -635,7 +684,7 @@
}
case STATE_SIZE:
{
- unsigned k;
+ unsigned int k;
str = find_attr("installed", atts);
if (str && (k = atoi(str)) != 0)
repodata_set_num(pd->data, entry, SOLVABLE_INSTALLSIZE, (k + 1023) / 1024);
@@ -648,6 +697,13 @@
repodata_set_num(pd->data, entry, SOLVABLE_DOWNLOADSIZE, (k + 1023) / 1024);
break;
}
+ case STATE_HEADERRANGE:
+ {
+ unsigned int end;
+ str = find_attr("end", atts);
+ if (str && (end = atoi(str)) != 0)
+ repodata_set_num(pd->data, entry, SOLVABLE_HEADEREND, end);
+ }
default:
break;
}
@@ -756,6 +812,9 @@
pd->lang = 0;
set_desciption_author(pd->data, entry, pd->content);
break;
+ case STATE_SOURCERPM:
+ set_sourcerpm(pd->data, s, entry, pd->content);
+ break;
default:
break;
}
Modified: trunk/sat-solver/tools/rpmmd2solv.c
URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/tools/rpmmd2solv.c?rev=9019&r1=9018&r2=9019&view=diff
==============================================================================
--- trunk/sat-solver/tools/rpmmd2solv.c (original)
+++ trunk/sat-solver/tools/rpmmd2solv.c Wed Mar 5 15:04:27 2008
@@ -5,23 +5,59 @@
* for further information
*/
+#define _GNU_SOURCE
+
#include