Changeset 1720
- Timestamp:
- 12/20/06 16:43:02 (2 years ago)
- Files:
-
- mantisimportscript/mantis2trac.py (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
mantisimportscript/mantis2trac.py
r1719 r1720 8 8 MySQL >= 3.23 from http://www.mysql.org/ 9 9 10 Version 1. 210 Version 1.3 11 11 Author: Anton Stroganov (stroganov.a@gmail.com) 12 Date: December 1 8, 200612 Date: December 19, 2006 13 13 14 14 Based on version 1.1 from: … … 26 26 python mantis2trac.py --db mantis --tracenv /usr/local/trac-projects/myproj/ \ 27 27 --host localhost --user root --clean --products foo,bar 28 29 Changes 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 28 33 29 34 Changes since version 1.1: … … 157 162 20 : 'assigned', # 20 == 'feedback' 158 163 30 : 'new', # 30 == 'acknowledged' 164 40 : 'new', # 40 == 'confirmed' 159 165 50 : 'assigned', # 50 == 'assigned' 160 40 : 'new', # 40 == 'confirmed'166 60 : 'assigned', # 60 == 'QA' 161 167 80 : 'closed', # 80 == 'resolved' 162 168 90 : 'closed' # 90 == 'closed' … … 167 173 # to retain the Mantis statuses in Trac. e.g. when a bug is marked 168 174 # '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 # } 181 STATUS_KEYWORDS = { 182 20 : 'FEEDBACK', 183 30 : 'ACKNOWLEDGED', 184 40 : 'CONFIRMED', 185 60 : 'QA', 186 80 : 'RESOLVED' 187 } 174 188 175 189 # Possible Trac resolutions are 'fixed', 'invalid', 'wontfix', 'duplicate', 'worksforme' … … 263 277 reload(sys) 264 278 265 sys.setdefaultencoding(' latin1')279 sys.setdefaultencoding('utf-8') 266 280 267 281 # simulated Attachment class for trac.add … … 387 401 severity.encode('utf-8'), priority.encode('utf-8'), owner, reporter, cc, 388 402 version, milestone.encode('utf-8'), status.lower(), resolution, 389 summary.encode('utf-8'), desc, keywords ,))403 summary.encode('utf-8'), desc, keywords)) 390 404 391 405 self.db().commit() 392 406 407 ## SELECT last_insert_rowid() 393 408 c.execute('''SELECT LAST_INSERT_ID()''') 394 409 return c.fetchall()[0][0] … … 429 444 def getLoginName(self, cursor, userid): 430 445 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)) 432 447 loginName = cursor.fetchall() 433 448 … … 638 653 resolution = '' 639 654 ticketChanges = [] 655 keywords = [] 640 656 for activity in bugs_activity: 641 657 field_name = activity['field_name'].lower() … … 670 686 ticketChange['author'] = trac.getLoginName(mysql_cur, activity['user_id']) 671 687 ticketChange['field'] = field_name 688 689 add_keywords = [] 690 remove_keywords = [] 672 691 673 692 if field_name == 'handler_id': … … 684 703 ticketChange['oldvalue'] = STATUS_TRANSLATE[int(activity['old_value'])] 685 704 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 686 710 elif field_name == 'priority': 687 711 ticketChange['oldvalue'] = PRIORITY_TRANSLATE[int(activity['old_value'])] … … 693 717 ticketChange['oldvalue'] = SEVERITY_TRANSLATE[int(activity['old_value'])] 694 718 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 696 734 if field_name in IGNORED_ACTIVITY_FIELDS: 697 735 continue … … 732 770 # Add ticket file attachments 733 771 # 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" % bugid772 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 735 773 # print attachment_sql 736 774 mysql_cur.execute(attachment_sql)
