Changeset 1720

Show
Ignore:
Timestamp:
12/20/06 16:43:02 (2 years ago)
Author:
codeFiend
Message:

MantisImportScript:

  • better join in the attachment author finding query
  • changed default encoding to be utf8
  • added working status->keyword migration for statuses that don't have exact Trac equivalents

--This line, and thos below, will be ignored--

M mantis2trac.py

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • mantisimportscript/mantis2trac.py

    r1719 r1720  
    88           MySQL >= 3.23 from http://www.mysql.org/ 
    99 
    10 Version 1.2 
     10Version 1.3 
    1111Author: Anton Stroganov (stroganov.a@gmail.com) 
    12 Date: December 18, 2006 
     12Date: December 19, 2006 
    1313 
    1414Based on version 1.1 from: 
     
    2626  python mantis2trac.py --db mantis --tracenv /usr/local/trac-projects/myproj/ \ 
    2727    --host localhost --user root --clean --products foo,bar 
     28 
     29Changes since version 1.2: 
     30  - better join in the attachment author finding query 
     31  - changed default encoding to be utf8 
     32  - added working status->keyword migration for statuses that don't have exact Trac equivalents 
    2833 
    2934Changes since version 1.1: 
     
    157162  20 : 'assigned', # 20 == 'feedback' 
    158163  30 : 'new',      # 30 == 'acknowledged'  
     164  40 : 'new',      # 40 == 'confirmed' 
    159165  50 : 'assigned', # 50 == 'assigned'  
    160   40 : 'new',      # 40 == 'confirmed
     166  60 : 'assigned', # 60 == 'QA
    161167  80 : 'closed',   # 80 == 'resolved'  
    162168  90 : 'closed'    # 90 == 'closed' 
     
    167173# to retain the Mantis statuses in Trac.  e.g. when a bug is marked  
    168174# 'verified' in Mantis it will be assigned a VERIFIED keyword. 
    169 ##STATUS_KEYWORDS = { 
    170 ##    'confirmed' : 'CONFIRMED', 
    171 ##    'feedback' : 'FEEDBACK', 
    172 ##    'acknowledged':'ACKNOWLEDGED' 
    173 ##} 
     175# STATUS_KEYWORDS = { 
     176#     'confirmed' : 'CONFIRMED', 
     177#     'feedback' : 'FEEDBACK', 
     178#     'acknowledged':'ACKNOWLEDGED', 
     179#     'QA':'QA' 
     180# } 
     181STATUS_KEYWORDS = { 
     182    20 : 'FEEDBACK', 
     183    30 : 'ACKNOWLEDGED', 
     184    40 : 'CONFIRMED', 
     185    60 : 'QA', 
     186    80 : 'RESOLVED' 
     187
    174188 
    175189# Possible Trac resolutions are 'fixed', 'invalid', 'wontfix', 'duplicate', 'worksforme' 
     
    263277    reload(sys) 
    264278 
    265 sys.setdefaultencoding('latin1') 
     279sys.setdefaultencoding('utf-8') 
    266280 
    267281# simulated Attachment class for trac.add 
     
    387401                  severity.encode('utf-8'), priority.encode('utf-8'), owner, reporter, cc, 
    388402                  version, milestone.encode('utf-8'), status.lower(), resolution, 
    389                   summary.encode('utf-8'), desc, keywords,)) 
     403                  summary.encode('utf-8'), desc, keywords)) 
    390404         
    391405        self.db().commit() 
    392406         
     407##        SELECT last_insert_rowid() 
    393408        c.execute('''SELECT LAST_INSERT_ID()''') 
    394409        return c.fetchall()[0][0] 
     
    429444    def getLoginName(self, cursor, userid): 
    430445        if userid not in self.loginNameCache: 
    431             cursor.execute("SELECT * FROM mantis_user_table WHERE id = %s" % userid
     446            cursor.execute("SELECT * FROM mantis_user_table WHERE id = %i" % int(userid)
    432447            loginName = cursor.fetchall() 
    433448 
     
    638653        resolution = '' 
    639654        ticketChanges = [] 
     655        keywords = [] 
    640656        for activity in bugs_activity: 
    641657            field_name = activity['field_name'].lower() 
     
    670686            ticketChange['author'] = trac.getLoginName(mysql_cur, activity['user_id']) 
    671687            ticketChange['field'] = field_name 
     688 
     689            add_keywords = [] 
     690            remove_keywords = [] 
    672691             
    673692            if field_name == 'handler_id': 
     
    684703                ticketChange['oldvalue'] = STATUS_TRANSLATE[int(activity['old_value'])] 
    685704                ticketChange['newvalue'] = STATUS_TRANSLATE[int(activity['new_value'])] 
     705                if int(activity['old_value']) in STATUS_KEYWORDS: 
     706                    remove_keywords.append(STATUS_KEYWORDS[int(activity['old_value'])]) 
     707                if int(activity['new_value']) in STATUS_KEYWORDS: 
     708                    add_keywords.append(STATUS_KEYWORDS[int(activity['new_value'])]) 
     709                 
    686710            elif field_name == 'priority': 
    687711                ticketChange['oldvalue'] = PRIORITY_TRANSLATE[int(activity['old_value'])] 
     
    693717                ticketChange['oldvalue'] = SEVERITY_TRANSLATE[int(activity['old_value'])] 
    694718                ticketChange['newvalue'] = SEVERITY_TRANSLATE[int(activity['new_value'])]             
    695                  
     719 
     720            if add_keywords or remove_keywords: 
     721                # ensure removed ones are in old 
     722                old_keywords = keywords + [kw for kw in remove_keywords if kw not in keywords] 
     723                # remove from new 
     724                keywords = [kw for kw in keywords if kw not in remove_keywords] 
     725                # add to new 
     726                keywords += [kw for kw in add_keywords if kw not in keywords] 
     727                if old_keywords != keywords: 
     728                    ticketChangeKw = ticketChange.copy() 
     729                    ticketChangeKw['field'] = "keywords" 
     730                    ticketChangeKw['oldvalue'] = ' '.join(old_keywords) 
     731                    ticketChangeKw['newvalue'] = ' '.join(keywords) 
     732                    ticketChanges.append(ticketChangeKw) 
     733                                 
    696734            if field_name in IGNORED_ACTIVITY_FIELDS: 
    697735                continue 
     
    732770        # Add ticket file attachments 
    733771        # 
    734         attachment_sql = "SELECT b.id,b.bug_id,b.title,b.description,b.filename,b.filesize,b.file_type,UNIX_TIMESTAMP(b.date_added) AS date_added, b.content, h.user_id FROM mantis_bug_file_table AS b LEFT JOIN mantis_bug_history_table AS h ON (h.type = 9 AND h.old_value = b.filename AND h.date_modified = b.date_added) WHERE b.bug_id = %s" % bugid 
     772        attachment_sql = "SELECT b.id,b.bug_id,b.title,b.description,b.filename,b.filesize,b.file_type,UNIX_TIMESTAMP(b.date_added) AS date_added, b.content, h.user_id FROM mantis_bug_file_table AS b LEFT JOIN mantis_bug_history_table AS h ON (h.type = 9 AND h.old_value = b.filename AND h.bug_id = b.bug_id) WHERE b.bug_id = %s" % bugid 
    735773        # print attachment_sql 
    736774        mysql_cur.execute(attachment_sql)