Author: matevz
Date: Wed Apr 3 07:56:12 2013
New Revision: 1463861
URL: http://svn.apache.org/r1463861
Log:
Ref. #470 - fixed link handling wrt. multiple products
Modified:
bloodhound/trunk/bloodhound_multiproduct/multiproduct/versioncontrol.py
Modified:
bloodhound/trunk/bloodhound_multiproduct/multiproduct/versioncontrol.py
URL:
http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_multiproduct/multiproduct/versioncontrol.py?rev=1463861&r1=1463860&r2=1463861&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_multiproduct/multiproduct/versioncontrol.py
(original)
+++ bloodhound/trunk/bloodhound_multiproduct/multiproduct/versioncontrol.py Wed
Apr 3 07:56:12 2013
@@ -44,7 +44,6 @@ class DbRepositoryProvider(ReplacementCo
"""Retrieve list of repositories specified in the repository
table for current product environment
"""
- from multiproduct.env import ProductEnvironment
if isinstance(self.env, ProductEnvironment):
repos = {}
for id, name, value in self.env.db_direct_query(
@@ -68,24 +67,44 @@ class DbRepositoryProvider(ReplacementCo
else:
return super(DbRepositoryProvider, self).get_repositories()
+ def _get_repository_links(self, repoid):
+ with self.env.db_direct_query as db:
+ rows = db("""SELECT value FROM repository WHERE id=%s
+ AND name='product'""" % (repoid,))
+ if rows:
+ return rows[0][0].split(',')
+ return None
+
def link_product(self, reponame):
if not isinstance(self.env, ProductEnvironment):
return
rm = RepositoryManager(self.env.parent)
repoid = rm.get_repository_id(reponame)
+ links = self._get_repository_links(repoid)
with self.env.db_direct_transaction as db:
- db("""INSERT INTO repository (id, name, value)
- VALUES(%s, 'product', '%s')""" %
- (repoid, self.env.product.prefix))
+ if links:
+ links.append(self.env.product.prefix)
+ db("""UPDATE repository SET value=%s WHERE id=%s
+ AND name='product'""", (','.join(links), repoid))
+ else:
+ db("""INSERT INTO repository (id, name, value)
+ VALUES(%s, 'product', '%s')""" %
+ (repoid, self.env.product.prefix))
def unlink_product(self, reponame):
if not isinstance(self.env, ProductEnvironment):
return
rm = RepositoryManager(self.env.parent)
repoid = rm.get_repository_id(reponame)
+ links = self._get_repository_links(repoid)
+ links.remove(self.env.product.prefix)
with self.env.db_direct_transaction as db:
- db("""DELETE FROM repository WHERE id=%s AND name='product'
- AND value='%s'""" % (repoid, self.env.product.prefix))
+ if len(links) > 0:
+ db("""UPDATE repository SET value=%s WHERE id=%s
+ AND name='product'""", (','.join(links), repoid))
+ else:
+ db("""DELETE FROM repository WHERE id=%s AND name='product'
+ AND value='%s'""" % (repoid, self.env.product.prefix))
trac.versioncontrol.api.DbRepositoryProvider = DbRepositoryProvider
trac.versioncontrol.DbRepositoryProvider = DbRepositoryProvider