Moved downloaded db unpacking to the backend files, to easier allow conversion

from db to whatever format we need.
This commit is contained in:
Aaron Griffin 2006-10-25 18:15:25 +00:00
parent ea9e9ae22e
commit e8275fa964
5 changed files with 37 additions and 48 deletions

View File

@ -364,7 +364,7 @@ int alpm_db_update(int force, PM_DB *db)
_alpm_log(PM_LOG_ERROR, _("could not remove database entry %s/%s"), db->treename,
((pmpkg_t *)lp->data)->name);
}
RET_ERR(PM_ERR_DB_REMOVE, 1);
RET_ERR(PM_ERR_DB_REMOVE, -1);
}
}
@ -372,20 +372,9 @@ int alpm_db_update(int force, PM_DB *db)
_alpm_db_free_pkgcache(db);
/* uncompress the sync database */
/* ORE
we should not simply unpack the archive, but better parse it and
db_write each entry (see sync_load_dbarchive to get archive content) */
_alpm_log(PM_LOG_FLOW2, _("unpacking %s"), path);
if(_alpm_unpack(path, db->path, NULL)) {
RET_ERR(PM_ERR_SYSTEM, 1);
if(_alpm_db_install(db, path) == -1) {
return -1;
}
/* remove the .tar.gz */
/* aaron: let's not do this... we'll keep the DB around to be read for the
* "new and improved" db routines
unlink(path);
*/
}
return(0);

View File

@ -44,15 +44,33 @@
#include "error.h"
#include "handle.h"
/* This function is used to convert the downloaded db file to the proper backend
* format
*/
int _alpm_db_install(pmdb_t *db, const char *dbfile)
{
/* ORE
we should not simply unpack the archive, but better parse it and
db_write each entry (see sync_load_dbarchive to get archive content) */
_alpm_log(PM_LOG_FLOW2, _("unpacking database '%s'"), dbfile);
if(_alpm_unpack(dbfile, db->path, NULL)) {
RET_ERR(PM_ERR_SYSTEM, -1);
}
return unlink(dbfile);
}
int _alpm_db_open(pmdb_t *db)
{
if(db == NULL) {
return(-1);
RET_ERR(PM_ERR_DB_NULL, -1);
}
db->handle = opendir(db->path);
if(db->handle == NULL) {
return(-1);
RET_ERR(PM_ERR_DB_OPEN, -1);
}
return(0);
@ -90,7 +108,7 @@ pmpkg_t *_alpm_db_scan(pmdb_t *db, char *target, unsigned int inforeq)
pmpkg_t *pkg;
if(db == NULL) {
return(NULL);
RET_ERR(PM_ERR_DB_NULL, NULL);
}
if(target != NULL) {
@ -166,7 +184,12 @@ int _alpm_db_read(pmdb_t *db, unsigned int inforeq, pmpkg_t *info)
pmlist_t *tmplist;
char *foo;
if(db == NULL || info == NULL || info->name[0] == 0 || info->version[0] == 0) {
if(db == NULL) {
RET_ERR(PM_ERR_DB_NULL, -1);
}
if(info == NULL || info->name[0] == 0 || info->version[0] == 0) {
_alpm_log(PM_LOG_ERROR, _("invalid package entry provided to _alpm_db_read"));
return(-1);
}
@ -606,38 +629,13 @@ cleanup:
int _alpm_db_remove(pmdb_t *db, pmpkg_t *info)
{
char path[PATH_MAX];
int local = 0;
if(db == NULL || info == NULL) {
return(-1);
RET_ERR(PM_ERR_DB_NULL, -1);
}
if(strcmp(db->treename, "local") == 0) {
local = 1;
}
/* DESC */
snprintf(path, PATH_MAX, "%s/%s-%s/desc", db->path, info->name, info->version);
unlink(path);
/* DEPENDS */
snprintf(path, PATH_MAX, "%s/%s-%s/depends", db->path, info->name, info->version);
unlink(path);
if(local) {
/* FILES */
snprintf(path, PATH_MAX, "%s/%s-%s/files", db->path, info->name, info->version);
unlink(path);
/* INSTALL */
snprintf(path, PATH_MAX, "%s/%s-%s/install", db->path, info->name, info->version);
unlink(path);
/* CHANGELOG */
snprintf(path, PATH_MAX, "%s/%s-%s/changelog", db->path, info->name, info->version);
unlink(path);
}
/* Package directory */
snprintf(path, PATH_MAX, "%s/%s-%s",
db->path, info->name, info->version);
if(rmdir(path) == -1) {
snprintf(path, PATH_MAX, "%s/%s-%s", db->path, info->name, info->version);
if(_alpm_rmrf(path) == -1) {
return(-1);
}

View File

@ -51,7 +51,9 @@ pmdb_t *_alpm_db_new(char *root, char *dbpath, char *treename);
void _alpm_db_free(void *data);
int _alpm_db_cmp(const void *db1, const void *db2);
pmlist_t *_alpm_db_search(pmdb_t *db, pmlist_t *needles);
/* Prototypes for backends functions */
int _alpm_db_install(pmdb_t *db, const char *dbfile);
int _alpm_db_open(pmdb_t *db);
void _alpm_db_close(pmdb_t *db);
void _alpm_db_rewind(pmdb_t *db);

View File

@ -259,7 +259,7 @@ int _alpm_lckrm(char *file)
/* Compression functions
*/
int _alpm_unpack(char *archive, const char *prefix, const char *fn)
int _alpm_unpack(const char *archive, const char *prefix, const char *fn)
{
register struct archive *_archive;
struct archive_entry *entry;

View File

@ -60,7 +60,7 @@ char *_alpm_strtoupper(char *str);
char *_alpm_strtrim(char *str);
int _alpm_lckmk(char *file);
int _alpm_lckrm(char *file);
int _alpm_unpack(char *archive, const char *prefix, const char *fn);
int _alpm_unpack(const char *archive, const char *prefix, const char *fn);
int _alpm_rmrf(char *path);
int _alpm_logaction(unsigned char usesyslog, FILE *f, char *fmt, ...);
int _alpm_ldconfig(char *root);