Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

launchpad to github migration tool

branch: master
README
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

Something went wrong with that request. Please try again.