Modify ↓
#1972 closed enhancement (duplicate)
bugzilla2trac.py
| Reported by: | Owned by: | daniel | |
|---|---|---|---|
| Priority: | normal | Milestone: | |
| Component: | admin/console | Version: | 0.8.4 |
| Severity: | minor | Keywords: | |
| Cc: | Branch: | ||
| Release Notes: | |||
| API Changes: | |||
| Internal Changes: | |||
Description
Here is a quick (and dirty) diff for importing bugs from bugzilla 2.18.1
--- bugzilla2trac_old.py 2005-08-26 13:52:44.000000000 +0200
+++ bugzilla2trac.py 2005-08-26 13:48:18.000000000 +0200
@@ -26,7 +26,7 @@
#
# If you run this script on a version not listed here and it is successful,
# please report it to the Trac mailing list so we can update the list.
-BZ_VERSION = '2.16.5'
+BZ_VERSION = '2.18.1'
# MySQL connection parameters for the Bugzilla database. These can also
# be specified on the command line.
@@ -138,6 +138,8 @@
self._db = self.env.get_db_cnx()
self._db.autocommit = False
self.loginNameCache = {}
+ self.componentNameCache = {}
+ self.productNameCache = {}
self.fieldNameCache = {}
def db(self):
@@ -283,6 +285,36 @@
return self.loginNameCache[userid]
+ def getComponentName(self, cursor, componentid):
+ if componentid not in self.componentNameCache:
+ cursor.execute("SELECT * FROM components WHERE id = %s" % componentid)
+ componentName = cursor.fetchall()
+
+ if componentName:
+ componentName = componentName[0]['name']
+ else:
+ print 'warning: unknown bugzilla component id %d, recording as unknown' % componentid
+ componentName = 'unknown'
+
+ self.componentNameCache[componentid] = componentName
+
+ return self.componentNameCache[componentid]
+
+ def getProductName(self, cursor, productid):
+ if productid not in self.productNameCache:
+ cursor.execute("SELECT * FROM products WHERE id = %s" % productid)
+ productName = cursor.fetchall()
+
+ if productName:
+ productName = productName[0]['name']
+ else:
+ print 'warning: unknown bugzilla product id %d, recording as unknown' % productid
+ productName = 'unknown'
+
+ self.productNameCache[productid] = productName
+
+ return self.productNameCache[productid]
+
def getFieldName(self, cursor, fieldid):
if fieldid not in self.fieldNameCache:
cursor.execute("SELECT * FROM fielddefs WHERE fieldid = %s" % fieldid)
@@ -350,14 +382,14 @@
print
print "2. import components..."
- sql = "SELECT value, initialowner AS owner FROM components"
+ sql = "SELECT name, initialowner AS owner FROM components"
if PRODUCTS:
sql += " WHERE %s" % productFilter('program', PRODUCTS)
mysql_cur.execute(sql)
components = mysql_cur.fetchall()
for component in components:
component['owner'] = trac.getLoginName(mysql_cur, component['owner'])
- trac.setComponentList(components, 'value')
+ trac.setComponentList(components, 'name')
print
print "3. import priorities..."
@@ -401,7 +433,7 @@
ticket['id'] = bugid
ticket['time'] = bug['creation_ts']
ticket['changetime'] = bug['delta_ts']
- ticket['component'] = bug['component']
+ ticket['component'] = trac.getComponentName(mysql_cur, bug['component_id'])
ticket['severity'] = bug['bug_severity']
ticket['priority'] = bug['priority']
@@ -574,8 +606,9 @@
if kw not in keywords:
keywords.append(kw)
- if bug['product'] in PRODUCT_KEYWORDS:
- kw = PRODUCT_KEYWORDS[bug['product']]
+ productName = trac.getProductName(mysql_cur, bug['product_id'])
+ if productName in PRODUCT_KEYWORDS:
+ kw = PRODUCT_KEYWORDS[productName]
# may have already been added during activity import
if kw not in keywords:
keywords.append(kw)
Attachments (0)
Note:
See TracTickets
for help on using tickets.



There are various pending improvements to the Bugzilla import script in #1462. Please test the patches attached there.