Skip to content
Script to copy issues from trac to gitlab.
Python
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
gitlab
.gitignore
README.md
migrate.py

README.md

DEPRECATED

TracBoat is a much more sophisticated successor to this script.

What

This script migrates trac tickets to gitlab issues.

Features

  • Component & Issue-Type are converted to labels
  • Milestones are created in Gitlab from fixture data manualy grabbed from trac (copy/paste)
  • Comments to issues are copied over
  • Wiki Syntax in comments/descriptions is sanitized for my basic usage

How

Usage: configure the following variables in in migrate.py```` and run it (python migrate.py```). Make sure you test it on a test project prior, if you run it twice against the same project you will get duplicated issues.

Source

Target

  • gitlab_url - e.g. https://www.exmple.com/gitlab/api/v3
  • gitlab_access_token - the access token of the user creating all the issues. Found on the account page, e.g. secretsecretsecret
  • dest_project_name - the destination project including the paths to it. Basically the rest of the clone url minus the ".git". E.g. jens.neuhalfen/task-ninja.
  • milestone_map - Maps milestones from trac to gitlab. Milestones have to exist in gitlab prior to running the script (CAVE: Assigning milestones does not work.)
  • milestone_list - Lists milestones from trac with associated metadata. Manually populated at this point by copy/paste out of trac milestone admin page

License

License: http://www.wtfpl.net/

Requirements

  • Python 2.7, xmlrpclib, requests
  • Trac with xmlrpc plugin enabled
  • Gitlab

Create milestone_list from copy paste admin area trac

Copy the milestones from the trac admin page and paste them in your editor of choice that supports regex replace.

Now replace the full text with the following regex and replacement, adjust as you see fit. When done, copy the result in migrate.py.

regex: \s*([\w\.\s]*?)\s*(\d{2})/(\d{2})/(\d{2})\s[\d:]*\s*(?:(\d{2})/(\d{2})/(\d{2})\s[\d:]*)?\s*\d+
replace: "$1":{"title":"$1","description":"Trac Import, milestone completed on: 20$7-$5-$6","due_date":"20$4-$2-$3"},\r\n

Create milestone_map from above

Now from the milestone_list you can create a simple map with the following regex and replacement:

regex: ("[\w\.\s]*"):\{.*\r\n
replace: $1:$1,
You can’t perform that action at this time.