Skip to content
launchpad to github migration tool
Python
Find file
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
bin
docs
github3
lp2gh
README
demo_milestones_bug.py
pip-requires

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.