backend/server/importlib/backend.py | 55 ++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 21 deletions(-)
New commits: commit 9cff05430de98e1f081fedd37559203e11e02bba Author: Michael Mraka michael.mraka@redhat.com Date: Tue Feb 8 14:22:10 2011 +0100
517173 - unlink packages with different orgid
diff --git a/backend/server/importlib/backend.py b/backend/server/importlib/backend.py index 3fc8b37..b651dcf 100644 --- a/backend/server/importlib/backend.py +++ b/backend/server/importlib/backend.py @@ -1283,33 +1283,46 @@ class Backend: 'package_id' : [], 'channel_id' : [], } - # Now get the extra packages from the DB if strict: + # if strict remove the extra packages from the DB sql = """ select package_id from rhnChannelPackage where channel_id = :channel_id """ - statement = self.dbmodule.prepare(sql) - for channel_id, pid_hash in channel_packages.items(): - statement.execute(channel_id=channel_id) - while 1: - row = statement.fetchone_dict() - if not row: - break - package_id = row['package_id'] - if not pid_hash.has_key(package_id): - # Have to remove it - extra_cp['package_id'].append(package_id) - extra_cp['channel_id'].append(channel_id) - # And mark this channel as being affected - if not affected_channels.has_key(channel_id): - modified_packages = ([], []) - affected_channels[channel_id] = modified_packages - else: - modified_packages = affected_channels[channel_id] - # Package was deletef from this channel - modified_packages[1].append(package_id) + else: + # or at least we should delete packages from different org + sql = """ + select package_id + from rhnChannelPackage cp + join rhnPackage p + on p.id = cp.package_id + join rhnChannel c + on c.id = cp.channel_id + where cp.channel_id = :channel_id + and c.org_id != p.org_id + """ + + statement = self.dbmodule.prepare(sql) + for channel_id, pid_hash in channel_packages.items(): + statement.execute(channel_id=channel_id) + while 1: + row = statement.fetchone_dict() + if not row: + break + package_id = row['package_id'] + if not pid_hash.has_key(package_id): + # Have to remove it + extra_cp['package_id'].append(package_id) + extra_cp['channel_id'].append(channel_id) + # And mark this channel as being affected + if not affected_channels.has_key(channel_id): + modified_packages = ([], []) + affected_channels[channel_id] = modified_packages + else: + modified_packages = affected_channels[channel_id] + # Package was deletef from this channel + modified_packages[1].append(package_id)
self.__doDeleteTable('rhnChannelPackage', extra_cp) self.__doInsertTable('rhnChannelPackage', hash)
spacewalk-commits@lists.fedorahosted.org