index : pacman | |
Archlinux32 fork of pacman | gitolite user |
summaryrefslogtreecommitdiff |
-rw-r--r-- | lib/libalpm/alpm.c | 72 |
diff --git a/lib/libalpm/alpm.c b/lib/libalpm/alpm.c index 93ac2fad..d661698a 100644 --- a/lib/libalpm/alpm.c +++ b/lib/libalpm/alpm.c @@ -209,27 +209,67 @@ int alpm_db_getlastupdate(PM_DB *db, char *ts) { /* Sanity checks */ ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); - ASSERT(db != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); + ASSERT(db != NULL && db != handle->db_local, RET_ERR(PM_ERR_WRONG_ARGS, -1)); + ASSERT(ts != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); - return(db_getlastupdate(db, handle->root, handle->dbpath, ts)); + if(!pm_list_is_ptrin(handle->dbs_sync, db)) { + printf("dn not in dbs_sync 1\n"); + RET_ERR(PM_ERR_DB_NOT_FOUND, -1); + } + + return(db_getlastupdate(db, ts)); } int alpm_db_update(PM_DB *db, char *archive, char *ts) { /* Sanity checks */ ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); - ASSERT(db != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); + ASSERT(db != NULL && db != handle->db_local, RET_ERR(PM_ERR_WRONG_ARGS, -1)); + + if(!pm_list_is_ptrin(handle->dbs_sync, db)) { + printf("db not in dbs_sync 2\n"); + RET_ERR(PM_ERR_DB_NOT_FOUND, -1); + } + + if(ts && strlen(ts) != 0) { + char lastupdate[15]; + if(db_getlastupdate(db, lastupdate) != -1) { + if(strcmp(ts, lastupdate) == 0) { + RET_ERR(PM_ERR_DB_UPTODATE, -1); + } + } + } /* ORE - Does it make sense to update the 'local' database, or should we prevent it? */ + stat() the archive to check it exists */ + /* remove the old dir */ + _alpm_log(PM_LOG_FLOW2, "removing %s (if it exists)\n", db->path); /* ORE - check if the database is registered: if not, return an error */ + We should db_remove each db entry, and not rmrf the top directory */ + _alpm_rmrf(db->path); + /* make the new dir */ + if(db_create(handle->root, handle->dbpath, db->treename) != 0) { + RET_ERR(PM_ERR_DB_CREATE, -1); + } + + /* uncompress the sync database */ /* ORE - stat() the archive to check it exists */ + we should not simply unpack the archive, but better parse it and + db_write each entry */ + _alpm_log(PM_LOG_FLOW2, "Unpacking %s...\n", archive); + if(_alpm_unpack(archive, db->path, NULL)) { + RET_ERR(PM_ERR_XXX, -1); + } - return(db_update(db, handle->root, handle->dbpath, archive, ts)); + if(ts && strlen(ts) != 0) { + if(db_setlastupdate(db, ts) == -1) { + RET_ERR(PM_ERR_XXX, -1); + } + } + + return(0); } PM_PKG *alpm_db_readpkg(PM_DB *db, char *name) @@ -270,24 +310,6 @@ PM_LIST *alpm_db_getgrpcache(PM_DB *db) return(db_get_grpcache(db)); } -PM_LIST *alpm_db_nextgrp(PM_LIST *cache) -{ - /* Sanity checks */ - ASSERT(handle != NULL, return(NULL)); - ASSERT(cache != NULL, return(NULL)); - - return(cache->next); -} - -PM_GRP *alpm_db_getgrp(PM_LIST *cache) -{ - /* Sanity checks */ - ASSERT(handle != NULL, return(NULL)); - ASSERT(cache != NULL, return(NULL)); - - return(cache->data); -} - /* * Packages */ |