lp2gh
lp2gh copied to clipboard
launchpad to github migration tool
Ready to make the switch? Here's how.
Read these:
- https://github.com/termie/lp2gh/blob/master/docs/moving_branches.rst
- https://github.com/termie/lp2gh/blob/master/docs/moving_issues.rst
-- milestone as label or milestone as milestone -- blueprints as issues -- status as label -- importance as label -- assignee as assignee or assignee as mention
General order of events for a full import: (+ == done, - == in progress)
- Generate all default labels that don't exist
- Import all the milestones
- Make a milestone name -> milestone id mapping db
- Import bugs
- Gather up all the tags that are used and generate those first
- First pass import simply, setting basic values, labels
- Build old id -> new id mapping db
- Second pass
- Add all comments, translating auto-linkable values
- Build a 'summary' text that includes appropriate @mentions, possibly translating from a mapping db of lp names to gh names.
- Update the description translating auto-linkable values and apply the milestones
- Import blueprints
- First pass set basic values
- Build spec name -> new id mapping db
- Second pass
- Update the description translating auto-linkable values
- Build a 'summary' comment that includes appropriate @mentions, possibly translating from a mapping db of lp names to gh names.
- Add whiteboard comments, translating auto-linkable values
Summary bug template <<EOF Imported from Launchpad using lp2gh.
- date created: %(date_created)s
- owner: @%(owner)s
- assignee: @%(assignee)s
- marked duplicate of issue #%(new_issued_id)s
- the following issues have been marked duplicates of this:
- issue #%(duplicate_1)s
- issue #%(duplicate_n)s
- the launchpad url was %(lp_url)s EOF
Summary blueprint template <<EOF Imported from Launchpad using lp2gh.
- date created: %(date_created)s
- drafter: @%(drafter)s
- assignee: @%(assignee)s
- marked duplicate of issue #%(new_issued_id)s
- the following issues have been associated with this:
- issue #%(issue_1)s
- issue #%(issue_n)s
- this spec depends on these specs:
- spec #%(issue_1)s
- spec #%(issue_n)s
- full spec url: %(url)s
- the launchpad url was %(lp_url)s EOF
Whiteboard blueprint template <<EOF The whiteboard from the launchpad original:
%(whiteboard)s EOF
Exported bugs look like {'id': bug.id, 'status': bug_task.status, 'importance': bug_task.importance, 'assignee': assignee and assignee.name or None, 'owner': owner.name, 'milestone': milestone and milestone.name, 'title': bug.title, 'description': bug.description, 'duplicate_of': duplicate_of.id, 'duplicates': [x.id for x in duplicates] 'date_created': to_timestamp(bug_task.date_created), 'comments': [message_to_dict(x) for x in messages]}, 'tags': bug.tags.split(), 'security_related': bug.security_related, 'lp_url': bug.web_link,
id -> local mapping db of new ids to old ids status -> label and state importance -> (optional) label assignee -> (optional) to comment with mention owner -> (optional) comment with mention milestone -> (optional) milestone or label title -> title description -> body duplicate_of_link --> comment pointing to new id of duplicated duplicates_collection_link --> comment mentioning new ids of duplicates comments -> commments comment pointing to original launchpad link tags -> labels
Those comments look like: {'owner': owner.name, 'content': message.content, 'date_created': to_timestamp(message.date_created), }
Exported milestones look like: {'name': ms.name, 'date_targeted': date_targeted and to_timestamp(date_targeted) or None})
Exported specs look like: {'assignee': assignee and assignee.name or None, 'bugs': [x.id for x in spec.bugs], 'definition_status': spec.definition_status, 'dependencies': [x.name for x in spec.dependencies], 'date_created': util.to_timestamp(spec.date_created), 'drafter': drafter and drafter.name or None, 'implementation_status': spec.implementation_status, 'lifecycle_status': spec.lifecycle_status, 'milestone': milestone and milestone.name or None, 'name': spec.name, 'priority': spec.priority, 'summary': spec.summary, 'title': spec.title, 'whiteboard': spec.whiteboard, 'url': spec.specification_url, 'lp_url': spec.web_link, }
Status labels are: ['New', 'Incomplete', 'Invalid', "Won't Fix", 'Confirmed', 'Triaged', 'In Progress', 'Fix Committed', 'Fix Released']
Definition status labels are: Approved Pending Approval Review Drafting Discussion New Superseded Obsolete
Implementation status labels are: Unknown Not started Deferred Needs Infrastructure Blocked Started Slow progress Good progress Beta Available Needs Code Review Deployment Implemented Informational
Lifecycle status labels are: Not started Started Complete
Importance is: Critical High Medium Low Wishlist Undecided
Priorities are: Not Undefined Low Medium High Essential