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

commit 4fb146dce6712b938142402778d335d98a75cb13
Author: Michel Hermier <[email protected]>
Date:   Thu May 15 13:21:32 2014 +0200

libpacman: Remove oldpkg dummy package copy in __pmtrans_t::commit.

diff --git a/lib/libpacman/trans.cpp b/lib/libpacman/trans.cpp
index b98256b..1cdd9cf 100644
--- a/lib/libpacman/trans.cpp
+++ b/lib/libpacman/trans.cpp
@@ -1767,7 +1767,6 @@ int __pmtrans_t::commit(pmlist_t **data)
int __pmtrans_t::commit(pmtranstype_t type, pmlist_t **data)
{
Database *db_local;
-       Package *pkg_new, *pkg_local;
int howmany, remain;
pmlist_t *targ, *lp;
char pm_install[PATH_MAX];
@@ -1797,7 +1796,8 @@ int __pmtrans_t::commit(pmtranstype_t type, pmlist_t 
**data)
howmany = _pacman_list_count(packages);

for(targ = packages; targ; targ = targ->next) {
-               Package *oldpkg = NULL;
+               Package *pkg_new = NULL, *pkg_local = NULL;
+
remain = _pacman_list_count(targ);

if(handle->trans->state == STATE_INTERRUPTED) {
@@ -1806,7 +1806,6 @@ int __pmtrans_t::commit(pmtranstype_t type, pmlist_t 
**data)

if(type & PM_TRANS_TYPE_ADD) {
pkg_new = (Package *)targ->data;
-               pkg_local = NULL;

type = this->type;

@@ -1825,29 +1824,24 @@ int __pmtrans_t::commit(pmtranstype_t type, pmlist_t 
**data)
_pacman_log(PM_LOG_FLOW1, _("upgrading package %s-%s"), pkg_new->name(), 
pkg_new->version());

/* we'll need to save some record for backup checks later */
-                               oldpkg = new Package(pkg_local->name(), 
pkg_local->version());
-                               if(oldpkg) {
+                               pkg_local->acquire();
if(!(pkg_local->flags & INFRQ_FILES)) {
_pacman_log(PM_LOG_DEBUG, _("loading FILES info for '%s'"), pkg_local->name());
pkg_local->read(INFRQ_FILES);
}
-                                       oldpkg->m_backup = 
_pacman_list_strdup(pkg_local->m_backup);
-                                       strncpy(oldpkg->m_name, 
pkg_local->name(), PKG_NAME_LEN);
-                                       strncpy(oldpkg->m_version, 
pkg_local->version(), PKG_VERSION_LEN);
-                               }
} else {
_pacman_log(PM_LOG_FLOW1, _("adding package %s-%s"), pkg_new->name(), 
pkg_new->version());
}

if(pkg_new->scriptlet && !(flags & PM_TRANS_FLAG_NOSCRIPTLET)) {
-                       _pacman_runscriptlet(handle->root, pkg_new->path(), 
trans_event_table[type].pre.hook, pkg_new->version(), oldpkg ? 
oldpkg->version() : NULL, this);
+                       _pacman_runscriptlet(handle->root, pkg_new->path(), 
trans_event_table[type].pre.hook, pkg_new->version(), pkg_local ? 
pkg_local->version() : NULL, this);
}

-               if(oldpkg) {
+               if(pkg_local) {
pmtrans_t *tr;
pmtrans_cbs_t null_cbs = { NULL };

-                       _pacman_log(PM_LOG_FLOW1, _("removing old package first 
(%s-%s)"), oldpkg->name(), oldpkg->version());
+                       _pacman_log(PM_LOG_FLOW1, _("removing old package first 
(%s-%s)"), pkg_local->name(), pkg_local->version());
tr = new __pmtrans_t(PM_TRANS_TYPE_UPGRADE, flags, null_cbs);
if(tr == NULL) {
RET_ERR(PM_ERR_TRANS_ABORT, -1);
@@ -1868,7 +1862,7 @@ int __pmtrans_t::commit(pmtranstype_t type, pmlist_t 
**data)
}

if(!(this->flags & PM_TRANS_FLAG_DBONLY)) {
-                       int errors = _pacman_fpmpackage_install(pkg_new, type, 
this, trans_event_table[type].pre.event, howmany, remain, oldpkg);
+                       int errors = _pacman_fpmpackage_install(pkg_new, type, 
this, trans_event_table[type].pre.event, howmany, remain, pkg_local);

if(errors) {
ret = 1;
@@ -1961,12 +1955,14 @@ int __pmtrans_t::commit(pmtranstype_t type, pmlist_t 
**data)
/* must run ldconfig here because some scriptlets fail due to missing libs 
otherwise */
_pacman_ldconfig(handle->root);
snprintf(pm_install, PATH_MAX, "%s%s/%s/%s-%s/install", handle->root, 
handle->dbpath, db_local->treename, pkg_new->name(), pkg_new->version());
-                       _pacman_runscriptlet(handle->root, pm_install, 
trans_event_table[type].post.hook, pkg_new->version(), oldpkg ? 
oldpkg->version() : NULL, this);
+                       _pacman_runscriptlet(handle->root, pm_install, 
trans_event_table[type].post.hook, pkg_new->version(), pkg_local ? 
pkg_local->version() : NULL, this);
}

-               EVENT(this, trans_event_table[type].post.event, pkg_new, 
oldpkg);
+               EVENT(this, trans_event_table[type].post.event, pkg_new, 
pkg_local);

-               delete oldpkg;
+               if (pkg_local) {
+                       pkg_local->release();
+               }
}
if(type == PM_TRANS_TYPE_REMOVE) {
pkg_local = (Package*)targ->data;
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to