~bzr-pqm/bzr/bzr.dev

4501.3.1 by Ian Clatworthy
first draft of a 2.0 Upgrade Guide
1
Data migration
2
##############
3
4
Preparing for data migration
5
----------------------------
6
7
Before starting a migration, there are a few important things to do
8
first:
9
10
1. Take a complete backup.
11
12
2. Take some time to purge obsolete branches.
13
14
A complete backup gives you a safety net in case anything goes wrong.
15
16
Purging obsolete branches reduces the amount of data that needs to
17
be migrated. See `Finding obsolete branches`_ later for some tips
18
on doing this.
19
20
21
Introducing the upgrade-related commands
22
----------------------------------------
23
24
There are 3 important commands to be aware of when migrating data.
25
26
* **check** - check a repository, branch or tree for data integrity errors
27
28
* **reconcile** - fix data integrity errors
29
30
* **upgrade** - migrate data to a different format.
31
32
**reconcile** is rarely needed but it's good practice to run **check**
4634.63.1 by Barry Warsaw
Elaborate on LP branch migration and fix a few typos.
33
before and after running **upgrade**.
4501.3.1 by Ian Clatworthy
first draft of a 2.0 Upgrade Guide
34
4501.3.2 by Ian Clatworthy
shared repository & lp project branch migration steps
35
For detailed help on these commands, see the `Bazaar User Reference`_.
36
4634.39.38 by Ian Clatworthy
make sure the special topics used in plain-style are ignored when building the English user docs under sphinx
37
.. _Bazaar User Reference: ../user-reference/index.html
4501.3.2 by Ian Clatworthy
shared repository & lp project branch migration steps
38
39
40
Communicating with your community
41
---------------------------------
42
4634.63.1 by Barry Warsaw
Elaborate on LP branch migration and fix a few typos.
43
To enable a smooth transition to the new format, you should:
4501.3.2 by Ian Clatworthy
shared repository & lp project branch migration steps
44
45
1. Make one person responsible for migrating the trunk.
4501.3.3 by Ian Clatworthy
various tweaks & standalone branch upgrade process
46
4501.3.2 by Ian Clatworthy
shared repository & lp project branch migration steps
47
2. Test the migration of trunk works successfully.
4501.3.3 by Ian Clatworthy
various tweaks & standalone branch upgrade process
48
49
3. Schedule a time for the trunk migration and notify your community
50
   in advance.
51
52
This advance warning should be long enough for users to have time
4501.3.2 by Ian Clatworthy
shared repository & lp project branch migration steps
53
to upgrade Bazaar and any required plugins before the migration date.
54
55
For larger projects, allow some time for the migration itself.
56
You should have a good idea of how long the migration will take
57
after doing the test migration. It may make sense to do the migration
58
on a weekend or a Friday, giving yourself some breathing space if
59
things go wrong.
60
61
After the trunk is migrated, you'll need to notify your community
62
accordingly, giving them instructions as to how to migrate their
63
local branches. Sample instructions are provided later in this
64
document.
4501.3.1 by Ian Clatworthy
first draft of a 2.0 Upgrade Guide
65
66
67
Migrating a standalone branch
68
-----------------------------
69
4501.3.3 by Ian Clatworthy
various tweaks & standalone branch upgrade process
70
The steps are:
71
72
1. Run **bzr check**.
73
74
2. If there are errors, try using **bzr reconcile** to fix them.
75
   If that fails, file a bug so we can help you resolve the issue
76
   and get your trunk clean. If it works, take a backup copy of
77
   your now clean trunk.
78
79
2. Run **bzr upgrade --format** where *format* is 2a or later.
80
81
3. Run **bzr check** to confirm the final result is good.
4501.3.1 by Ian Clatworthy
first draft of a 2.0 Upgrade Guide
82
83
84
Migrating branches in a shared repository
85
-----------------------------------------
86
4501.3.2 by Ian Clatworthy
shared repository & lp project branch migration steps
87
Upgrade things in the following order:
88
89
1. Upgrade the shared repository.
90
2. Upgrade the branches.
91
3. Upgrade any lightweight checkouts.
92
4501.3.3 by Ian Clatworthy
various tweaks & standalone branch upgrade process
93
As in the standalone branch case, be sure to run **check** before
94
and after the upgrade to check for any existing or introduced issues.
95
4501.3.2 by Ian Clatworthy
shared repository & lp project branch migration steps
96
97
Migrating branches on Launchpad
98
-------------------------------
99
4634.63.1 by Barry Warsaw
Elaborate on LP branch migration and fix a few typos.
100
You have two options for upgrading your Launchpad branches.  You can either
101
upgrade them remotely or you can upgrade them locally and push the migrated
102
branch to Launchpad.  We recommend the latter.  Upgrading remotely currently
103
requires a fast, rock solid network connection to the Launchpad servers, and
104
any interruption in that connection can leave you with a partially upgraded
105
branch.  The instructions below are the safest and often fastest way to
106
upgrade your Launchpad branches.
107
4501.3.2 by Ian Clatworthy
shared repository & lp project branch migration steps
108
To allow isolation between public and private branches, Launchpad
109
uses stacked branches rather than shared repositories as the core
110
technology for efficient branch storage. The process for migrating
111
to a new format for projects using Launchpad code hosting is therefore
112
different to migrating a personal or in-house project.
113
4634.63.1 by Barry Warsaw
Elaborate on LP branch migration and fix a few typos.
114
In Launchpad, a project can define a *development series* and associate a
115
branch with that series.  The branch then becomes the *focus of development*
5538.2.3 by Zearin
Continued capitalization fixes. (URL, URLs)
116
and gets special treatment and a shortcut URL.  By default, if anybody
4634.63.1 by Barry Warsaw
Elaborate on LP branch migration and fix a few typos.
117
branches your project's focus of development and pushes changes back to
118
Launchpad, their branch will be stacked on your development focus branch.
119
Also, branches can be associated with other Launchpad artifacts such as bugs
120
and merge proposals.  All of these things mean that upgrading your focus of
121
development branch is trickier.
122
4501.3.2 by Ian Clatworthy
shared repository & lp project branch migration steps
123
Here are the steps to follow:
124
4634.63.1 by Barry Warsaw
Elaborate on LP branch migration and fix a few typos.
125
1. The nominated person grabs a copy of trunk and does the migration locally.
4501.3.2 by Ian Clatworthy
shared repository & lp project branch migration steps
126
127
2. On Launchpad, unset the current trunk from being the development focus.
128
   (This *must* be done or the following step won't work as expected.)
129
4634.63.1 by Barry Warsaw
Elaborate on LP branch migration and fix a few typos.
130
   1. Go to your project's home page on Launchpad
131
132
   2. Look for "XXX is the current focus of development"
133
134
   3. Click on the edit (pencil) icon
135
136
   4. Click on "Change details" in the portlet on the right
137
138
   5. Scroll down to where it says "Branch: (Optional)"
139
140
   6. Blank out this input field and click "Change"
141
142
3. Push the migrated trunk to Launchpad.  See below if you want your
143
   new migrated development focus branch to have the same name as your old
144
   pre-migration development focus branch.
145
146
4. Set it as the development focus.  Follow the instructions above but at step
147
   5, enter the name of the newly migrated branch you just pushed.
4501.3.2 by Ian Clatworthy
shared repository & lp project branch migration steps
148
149
5. Ask users subscribed to the old trunk to subscribe to the new one.
150
151
In summary, these steps mean that the old trunk is still available and
152
existing branches stacked on it will continue to be so. However, the
153
development focus has switched to the migrated trunk and any new branches
154
pushed to Launchpad for your project will now stack on it.
155
156
You are now ready to tell your community that the new trunk is available
157
and to give them instructions on migrating any local branches they have.
158
4634.63.1 by Barry Warsaw
Elaborate on LP branch migration and fix a few typos.
159
If you want your new migrated development focus branch to have the same name
160
as your old pre-migration branch, you need to do a few extra things before you
161
establish the new development focus.
162
163
1. Rename your old pre-migration branch; use something like
164
   **foo-obsolete-do-not-use**.  You will really not want to delete this
165
   because there will be artifacts (bugs, merge proposals, etc.) associated
166
   with it.
167
168
2. Rename the new migrated branch to the pre-migration branch's old name.
169
170
3. Re-establish the development focus branch using the new migrated branch's
171
   new name (i.e. the old pre-migration branch's original name).
172
4501.3.2 by Ian Clatworthy
shared repository & lp project branch migration steps
173
174
Migrating local branches after a central trunk has migrated
175
-----------------------------------------------------------
176
177
To migrate a standalone branch:
178
179
1. Grab the latest branch from the central location into a
180
   new directory.
181
182
2. Pull or merge any changes you've made in your existing branch
183
   into the new branch.
184
185
To migrate branches in a shared repository:
186
187
1. Create a fresh shared repository in the new format (2a or later).
188
189
2. Grab the latest branch from the central location into a
190
   new directory inside the shared repository.
191
192
3. Decide which of your local branches you want to migrate. (If you
193
   haven't already, now's a good time for `Finding obsolete branches`_
194
   and purging them, after backing up first of course.)
195
196
4. To migrate each local branch of interest, there are 2 options:
197
4501.3.3 by Ian Clatworthy
various tweaks & standalone branch upgrade process
198
 * **init** an empty branch in the new repository and **pull** the
199
   revisions from the branch in the old repository across.
4501.3.2 by Ian Clatworthy
shared repository & lp project branch migration steps
200
4501.3.3 by Ian Clatworthy
various tweaks & standalone branch upgrade process
201
 * In the new repository, **branch** from trunk to the new branch
202
   name then **merge** your changes from the matching branch in the
203
   old repository.
4501.3.2 by Ian Clatworthy
shared repository & lp project branch migration steps
204
4360.10.45 by Vincent Ladeuil
Stop mentioning 2.0 in the upgrade guide, all documented steps are valid for all bzr versions.
205
The first method will give you a branch which is identical (in terms of
206
revision history) to the old branch, but it's parent branch will be set to the
207
old branch, not your new trunk. If you use this method, you'll probably update
208
the ``parent_location`` configuration variable in the ``branch.conf`` file
209
with::
210
211
    bzr config parent_location=XXX
212
4360.10.50 by Vincent Ladeuil
Fix syntax error in doc.
213
``XXX`` being the URL to your new trunk.
4501.3.2 by Ian Clatworthy
shared repository & lp project branch migration steps
214
4501.3.3 by Ian Clatworthy
various tweaks & standalone branch upgrade process
215
In contrast, the second approach sets up the parent branch correctly.
216
However, it isn't ideal if you're not ready to include all the latest
217
revisions from trunk into that branch yet.