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


Reply via email to