summaryrefslogtreecommitdiff
path: root/doc/en/upgrade-guide/data_migration.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/en/upgrade-guide/data_migration.txt')
-rw-r--r--doc/en/upgrade-guide/data_migration.txt217
1 files changed, 217 insertions, 0 deletions
diff --git a/doc/en/upgrade-guide/data_migration.txt b/doc/en/upgrade-guide/data_migration.txt
new file mode 100644
index 0000000..e414356
--- /dev/null
+++ b/doc/en/upgrade-guide/data_migration.txt
@@ -0,0 +1,217 @@
+Data migration
+##############
+
+Preparing for data migration
+----------------------------
+
+Before starting a migration, there are a few important things to do
+first:
+
+1. Take a complete backup.
+
+2. Take some time to purge obsolete branches.
+
+A complete backup gives you a safety net in case anything goes wrong.
+
+Purging obsolete branches reduces the amount of data that needs to
+be migrated. See `Finding obsolete branches`_ later for some tips
+on doing this.
+
+
+Introducing the upgrade-related commands
+----------------------------------------
+
+There are 3 important commands to be aware of when migrating data.
+
+* **check** - check a repository, branch or tree for data integrity errors
+
+* **reconcile** - fix data integrity errors
+
+* **upgrade** - migrate data to a different format.
+
+**reconcile** is rarely needed but it's good practice to run **check**
+before and after running **upgrade**.
+
+For detailed help on these commands, see the `Bazaar User Reference`_.
+
+.. _Bazaar User Reference: ../user-reference/index.html
+
+
+Communicating with your community
+---------------------------------
+
+To enable a smooth transition to the new format, you should:
+
+1. Make one person responsible for migrating the trunk.
+
+2. Test the migration of trunk works successfully.
+
+3. Schedule a time for the trunk migration and notify your community
+ in advance.
+
+This advance warning should be long enough for users to have time
+to upgrade Bazaar and any required plugins before the migration date.
+
+For larger projects, allow some time for the migration itself.
+You should have a good idea of how long the migration will take
+after doing the test migration. It may make sense to do the migration
+on a weekend or a Friday, giving yourself some breathing space if
+things go wrong.
+
+After the trunk is migrated, you'll need to notify your community
+accordingly, giving them instructions as to how to migrate their
+local branches. Sample instructions are provided later in this
+document.
+
+
+Migrating a standalone branch
+-----------------------------
+
+The steps are:
+
+1. Run **bzr check**.
+
+2. If there are errors, try using **bzr reconcile** to fix them.
+ If that fails, file a bug so we can help you resolve the issue
+ and get your trunk clean. If it works, take a backup copy of
+ your now clean trunk.
+
+2. Run **bzr upgrade --format** where *format* is 2a or later.
+
+3. Run **bzr check** to confirm the final result is good.
+
+
+Migrating branches in a shared repository
+-----------------------------------------
+
+Upgrade things in the following order:
+
+1. Upgrade the shared repository.
+2. Upgrade the branches.
+3. Upgrade any lightweight checkouts.
+
+As in the standalone branch case, be sure to run **check** before
+and after the upgrade to check for any existing or introduced issues.
+
+
+Migrating branches on Launchpad
+-------------------------------
+
+You have two options for upgrading your Launchpad branches. You can either
+upgrade them remotely or you can upgrade them locally and push the migrated
+branch to Launchpad. We recommend the latter. Upgrading remotely currently
+requires a fast, rock solid network connection to the Launchpad servers, and
+any interruption in that connection can leave you with a partially upgraded
+branch. The instructions below are the safest and often fastest way to
+upgrade your Launchpad branches.
+
+To allow isolation between public and private branches, Launchpad
+uses stacked branches rather than shared repositories as the core
+technology for efficient branch storage. The process for migrating
+to a new format for projects using Launchpad code hosting is therefore
+different to migrating a personal or in-house project.
+
+In Launchpad, a project can define a *development series* and associate a
+branch with that series. The branch then becomes the *focus of development*
+and gets special treatment and a shortcut URL. By default, if anybody
+branches your project's focus of development and pushes changes back to
+Launchpad, their branch will be stacked on your development focus branch.
+Also, branches can be associated with other Launchpad artifacts such as bugs
+and merge proposals. All of these things mean that upgrading your focus of
+development branch is trickier.
+
+Here are the steps to follow:
+
+1. The nominated person grabs a copy of trunk and does the migration locally.
+
+2. On Launchpad, unset the current trunk from being the development focus.
+ (This *must* be done or the following step won't work as expected.)
+
+ 1. Go to your project's home page on Launchpad
+
+ 2. Look for "XXX is the current focus of development"
+
+ 3. Click on the edit (pencil) icon
+
+ 4. Click on "Change details" in the portlet on the right
+
+ 5. Scroll down to where it says "Branch: (Optional)"
+
+ 6. Blank out this input field and click "Change"
+
+3. Push the migrated trunk to Launchpad. See below if you want your
+ new migrated development focus branch to have the same name as your old
+ pre-migration development focus branch.
+
+4. Set it as the development focus. Follow the instructions above but at step
+ 5, enter the name of the newly migrated branch you just pushed.
+
+5. Ask users subscribed to the old trunk to subscribe to the new one.
+
+In summary, these steps mean that the old trunk is still available and
+existing branches stacked on it will continue to be so. However, the
+development focus has switched to the migrated trunk and any new branches
+pushed to Launchpad for your project will now stack on it.
+
+You are now ready to tell your community that the new trunk is available
+and to give them instructions on migrating any local branches they have.
+
+If you want your new migrated development focus branch to have the same name
+as your old pre-migration branch, you need to do a few extra things before you
+establish the new development focus.
+
+1. Rename your old pre-migration branch; use something like
+ **foo-obsolete-do-not-use**. You will really not want to delete this
+ because there will be artifacts (bugs, merge proposals, etc.) associated
+ with it.
+
+2. Rename the new migrated branch to the pre-migration branch's old name.
+
+3. Re-establish the development focus branch using the new migrated branch's
+ new name (i.e. the old pre-migration branch's original name).
+
+
+Migrating local branches after a central trunk has migrated
+-----------------------------------------------------------
+
+To migrate a standalone branch:
+
+1. Grab the latest branch from the central location into a
+ new directory.
+
+2. Pull or merge any changes you've made in your existing branch
+ into the new branch.
+
+To migrate branches in a shared repository:
+
+1. Create a fresh shared repository in the new format (2a or later).
+
+2. Grab the latest branch from the central location into a
+ new directory inside the shared repository.
+
+3. Decide which of your local branches you want to migrate. (If you
+ haven't already, now's a good time for `Finding obsolete branches`_
+ and purging them, after backing up first of course.)
+
+4. To migrate each local branch of interest, there are 2 options:
+
+ * **init** an empty branch in the new repository and **pull** the
+ revisions from the branch in the old repository across.
+
+ * In the new repository, **branch** from trunk to the new branch
+ name then **merge** your changes from the matching branch in the
+ old repository.
+
+The first method will give you a branch which is identical (in terms of
+revision history) to the old branch, but it's parent branch will be set to the
+old branch, not your new trunk. If you use this method, you'll probably update
+the ``parent_location`` configuration variable in the ``branch.conf`` file
+with::
+
+ bzr config parent_location=XXX
+
+``XXX`` being the URL to your new trunk.
+
+In contrast, the second approach sets up the parent branch correctly.
+However, it isn't ideal if you're not ready to include all the latest
+revisions from trunk into that branch yet.