bzr branch
/loggerhead/pkg-ssh/openssh/trunk
|
3321
by Colin Watson
Add debian/README.source with instructions on bzr handling. |
1 | Debian OpenSSH source package handling
|
| 2 | ======================================
|
|
| 3 | ||
| 4 | The Debian package of OpenSSH is maintained in Bazaar |
|
| 5 | (http://bazaar-vcs.org/, or the 'bzr' package in Debian). You will need at |
|
| 6 | least version 1.16.1; the version in Debian testing as of the time of |
|
| 7 | writing (2009-12-21) is fine, or you can use the version in lenny-backports. |
|
| 8 | URLs are as follows: |
|
| 9 | ||
|
3472
by Colin Watson
update README.source too |
10 | Anonymous branch: http://anonscm.debian.org/bzr/pkg-ssh/openssh/trunk |
| 11 | Web browsing: http://anonscm.debian.org/loggerhead/pkg-ssh/openssh/trunk |
|
|
3321
by Colin Watson
Add debian/README.source with instructions on bzr handling. |
12 | Authenticated, for developers with commit access only: |
| 13 | bzr+ssh://bzr.debian.org/bzr/pkg-ssh/openssh/trunk |
|
| 14 | ||
| 15 | Although it's possible that I may use something like bzr-loom in the future |
|
| 16 | to better manage things like the Kerberos/GSSAPI patch, right now there's no |
|
| 17 | funny business and all that developers need to do is: |
|
| 18 | ||
| 19 | # To check out: |
|
| 20 | bzr co bzr+ssh://bzr.debian.org/bzr/pkg-ssh/openssh/trunk openssh |
|
| 21 | ||
| 22 | # To update: |
|
| 23 | bzr up |
|
| 24 | ||
| 25 | # To edit: |
|
| 26 | # hack hack hack, and 'bzr add' any new files |
|
| 27 | debcommit # or bzr commit |
|
| 28 | # note that this pushes automatically; you can use 'bzr unbind' to |
|
| 29 | # temporarily prevent this, or 'bzr branch' to create a local branch which |
|
| 30 | # you can merge later |
|
| 31 | ||
| 32 | # To release: |
|
| 33 | dch -r && debcommit -r |
|
| 34 | ||
| 35 | If you have lots of branches, you'll probably want to use a shared |
|
| 36 | repository to save space. Run 'bzr init-repo .' in an ancestor directory of |
|
| 37 | all your OpenSSH working directories. For example, I have a shared |
|
| 38 | repository in ~/src/debian/openssh/, upstream checkouts in |
|
| 39 | ~/src/debian/openssh/upstream/, and my own working trees in |
|
| 40 | ~/src/debian/openssh/trunk/. |
|
| 41 | ||
|
3376
by Colin Watson
* Update README.source to match, and add a 'quilt-setup' target to |
42 | Patch handling
|
| 43 | --------------
|
|
| 44 | ||
| 45 | This package uses quilt to manage all modifications to the upstream source. |
|
| 46 | Changes are stored in the source package as diffs in debian/patches and |
|
| 47 | applied automatically by dpkg-source when the source package is extracted. |
|
| 48 | ||
| 49 | To configure quilt to use debian/patches instead of patches, you want either |
|
| 50 | to export QUILT_PATCHES=debian/patches in your environment or use this |
|
| 51 | snippet in your ~/.quiltrc: |
|
| 52 | ||
| 53 | for where in ./ ../ ../../ ../../../ ../../../../ ../../../../../; do |
|
| 54 | if [ -e ${where}debian/rules -a -d ${where}debian/patches ]; then
|
|
| 55 | export QUILT_PATCHES=debian/patches |
|
| 56 | break |
|
| 57 | fi |
|
| 58 | done |
|
| 59 | ||
| 60 | After unpacking the source package, all patches will be applied, and you can |
|
| 61 | use quilt normally. |
|
| 62 | ||
| 63 | If you check out the source code from bzr, then all patches will be applied, |
|
| 64 | but you will need to inform quilt of this manually. Do this by running: |
|
| 65 | ||
| 66 | debian/rules quilt-setup |
|
| 67 | ||
| 68 | To add a new set of changes, first run quilt push -a, and then run: |
|
| 69 | ||
| 70 | quilt new <patch> |
|
| 71 | ||
| 72 | where <patch> is a descriptive name for the patch, used as the filename in |
|
| 73 | debian/patches. Then, for every file that will be modified by this patch, |
|
| 74 | run: |
|
| 75 | ||
| 76 | quilt add <file> |
|
| 77 | ||
| 78 | before editing those files. You must tell quilt with quilt add what files |
|
| 79 | will be part of the patch before making changes or quilt will not work |
|
| 80 | properly. After editing the files, run: |
|
| 81 | ||
| 82 | quilt refresh |
|
| 83 | ||
| 84 | to save the results as a patch. |
|
| 85 | ||
| 86 | Alternately, if you already have an external patch and you just want to add |
|
| 87 | it to the build system, run quilt push -a and then: |
|
| 88 | ||
| 89 | quilt import -P <patch> /path/to/patch |
|
| 90 | quilt push -a |
|
| 91 | ||
| 92 | (add -p 0 to quilt import if needed). <patch> as above is the filename to |
|
| 93 | use in debian/patches. The last quilt push -a will apply the patch to make |
|
| 94 | sure it works properly. |
|
| 95 | ||
| 96 | To remove an existing patch from the list of patches that will be applied, |
|
| 97 | run: |
|
| 98 | ||
| 99 | quilt delete <patch> |
|
| 100 | ||
| 101 | You may need to run quilt pop -a to unapply patches first before running |
|
| 102 | this command. |
|
| 103 | ||
| 104 | You should only commit changes to bzr with all patches applied, i.e. after |
|
| 105 | 'quilt push -a'. |
|
| 106 | ||
|
3321
by Colin Watson
Add debian/README.source with instructions on bzr handling. |
107 | Merging new upstream releases
|
| 108 | -----------------------------
|
|
| 109 | ||
| 110 | (Most developers will not need to read this section.) |
|
| 111 | ||
| 112 | Thanks to the import from Portable OpenSSH CVS provided by Launchpad |
|
| 113 | (https://code.launchpad.net/~vcs-imports/openssh/main, accessible by the |
|
| 114 | shortcut 'lp:openssh' from the bzr client), the Debian branch is a true DVCS |
|
| 115 | branch from upstream. This is a worthwhile property, but preserving it does |
|
| 116 | take a little bit of work. |
|
| 117 | ||
| 118 | Launchpad only imports CVS HEAD, but upstream sometimes produces releases |
|
| 119 | from a branch. We use the same software used by Launchpad to import the |
|
| 120 | branch as well, but a few small hacks are necessary to do good branch |
|
| 121 | imports. In Bazaar, it's important that the same file in different branches |
|
| 122 | should have the same file-id, otherwise merge attempts will try to delete |
|
| 123 | and re-add the file which usually doesn't work out very well. Occasionally a |
|
| 124 | file is added to CVS HEAD and then also added to a branch, and cscvs isn't |
|
| 125 | quite smart enough to spot this and copy over the file-id. We need to help |
|
| 126 | it out. |
|
| 127 | ||
| 128 | To fetch the necessary code: |
|
| 129 | ||
|
3482
by Colin Watson
bzr get -> bzr branch |
130 | bzr branch lp:~cjwatson/launchpad-cscvs/openssh-branch-imports |
|
3321
by Colin Watson
Add debian/README.source with instructions on bzr handling. |
131 | # or 'bzr pull' in the appropriate directory to update this, if you |
| 132 | # already have a copy |
|
| 133 | ||
| 134 | To import a branch, V_5_3 in this example: |
|
| 135 | ||
| 136 | export PATH="/path/to/cscvs/openssh-branch-imports:$PATH" |
|
| 137 | export PYTHONPATH=/path/to/cscvs/openssh-branch-imports/modules:/path/to/cscvs/openssh-branch-imports |
|
| 138 | # in a CVS checkout of :ext:anoncvs@anoncvs.mindrot.org:/cvs module |
|
| 139 | # openssh: |
|
| 140 | cscvs cache -b |
|
| 141 | # or 'cscvs cache -u' if you've done this before and want to update |
|
| 142 | cvs up -rV_5_3 |
|
| 143 | ||
| 144 | # Now we need to get a few bits of information from cscvs' cache. |
|
| 145 | sqlite CVS/Catalog.sqlite |
|
| 146 | sqlite> select csnum,log from changeset where branch = 'V_5_3' order by startdate; |
|
| 147 | # There will be a solid block of "Creation of branch V_5_3" changesets at |
|
| 148 | # the start; look for the first revision *after* this. Substitute this in
|
|
| 149 | # the following wherever you see "CSX". |
|
| 150 | sqlite> select revision,filename from revision where branch = 'V_5_3' and csnum >= CSX and revision not like '%.%.%' order by filename; |
|
| 151 | # Anything listed here will need to be added to the openssh_ids dictionary |
|
| 152 | # in modules/CVS/StorageLayer.py in cscvs. Please send Colin Watson a |
|
| 153 | # patch if you do this. |
|
| 154 | ||
|
3482
by Colin Watson
bzr get -> bzr branch |
155 | # Next, look up the branchpoint revision in the main bzr import (bzr |
| 156 | # branch lp:openssh). It's usually easiest to just look it up by commit |
|
| 157 | # message and double-check the timestamp. Substitute this revision number |
|
| 158 | # for "BPR" in the following. /path/to/openssh/main is wherever you've |
|
| 159 | # checked out lp:openssh. |
|
| 160 | bzr branch -rBPR /path/to/openssh/main /path/to/openssh/5.3 |
|
|
3321
by Colin Watson
Add debian/README.source with instructions on bzr handling. |
161 | # If you're using Bazaar signed commits with a GPG agent, make sure that |
| 162 | # your agent has seen your passphrase recently. Now you can start the |
|
| 163 | # actual import! |
|
| 164 | cscvs -D4 totla -SC V_5_3.CSX: /path/to/openssh/5.3 |
|
| 165 | # If this fails at the end with a "directories differ" message, you may |
|
| 166 | # have forgotten to switch your CVS checkout to the appropriate branch |
|
| 167 | # with 'cvs up -r...' above. Otherwise you'll have to debug this for |
|
| 168 | # yourself. It's also worth double-checking that any files added to the |
|
| 169 | # branch have file-ids matching those on the trunk, using 'bzr ls -R |
|
| 170 | # --show-ids'. |
|
| 171 | ||
|
3322
by Colin Watson
pushed some previous upstream release branches to Launchpad |
172 | Now we have a Bazaar branch corresponding to what's in CVS. Previous such |
| 173 | branches are available from Launchpad, for reference purposes: |
|
| 174 | ||
| 175 | https://code.launchpad.net/openssh |
|
| 176 | ||
| 177 | However, upstream releases involve a 'make distprep' step as well to |
|
| 178 | construct the tarball, and we need to import the results of this as well to |
|
| 179 | get a clean package. |
|
|
3321
by Colin Watson
Add debian/README.source with instructions on bzr handling. |
180 | |
| 181 | Start by unpacking the upstream tarball (remember to check its GPG signature |
|
| 182 | first!). Copy the .bzr directory from the upstream branch you prepared |
|
| 183 | earlier. Now we have another branch, but with a working tree corresponding |
|
| 184 | to the upstream tarball. Modifications and deletions are handled |
|
| 185 | automatically, but we need to handle additions explicitly to make sure |
|
| 186 | file-ids are correct (see above). Run: |
|
| 187 | ||
| 188 | bzr add --file-ids-from=/path/to/openssh/debian/trunk |
|
| 189 | bzr st --show-ids |
|
| 190 | # compare this with 'bzr ls --show-ids' in the Debian trunk to make sure |
|
| 191 | # the result will be mergeable |
|
| 192 | bzr ci -m 'Import 5.3p1 tarball' |
|
| 193 | ||
|
3406
by Colin Watson
handle merge history from previous tarball branch |
194 | Add a parent revision for the previous tarball branch, to make it easier for |
| 195 | bzr to compute accurate merges. |
|
| 196 | ||
| 197 | bzr log -n0 /path/to/openssh/debian/trunk | less |
|
| 198 | # find revision number for previous tarball import, hence 'PREVIOUS' |
|
| 199 | bzr merge -rPREVIOUS /path/to/openssh/debian/trunk |
|
| 200 | # merge history only, no file changes |
|
| 201 | bzr revert . |
|
| 202 | bzr ci -m 'add 5.2p1 tarball parent revision' |
|
|
3484
by Colin Watson
actually, let's upstream-tag the revision with a tarball parent instead |
203 | bzr tag upstream-5.3p1 |
|
3406
by Colin Watson
handle merge history from previous tarball branch |
204 | |
|
3355
by Colin Watson
describe handling of gssapi branch |
205 | Next, merge this into the gssapi branch |
| 206 | (bzr+ssh://bzr.debian.org/bzr/pkg-ssh/openssh/gssapi/). For this branch, we |
|
| 207 | want to ignore the normal results of merging and take only the patch from |
|
| 208 | http://www.sxw.org.uk/computing/patches/openssh.html; of course such a patch |
|
| 209 | needs to exist first! To do this, run this in the gssapi branch: |
|
| 210 | ||
| 211 | bzr merge /path/to/openssh/tarball/branch |
|
|
3356
by Colin Watson
fix gssapi merge instructions |
212 | bzr revert -rrevno:-1:/path/to/openssh/tarball/branch . |
|
3355
by Colin Watson
describe handling of gssapi branch |
213 | patch -p1 </path/to/openssh/gssapi/patch |
| 214 | bzr add --file-ids-from=/path/to/openssh/debian/trunk |
|
| 215 | # you may need to deal with applying configure.ac changes to configure |
|
| 216 | # here |
|
| 217 | bzr ci -m 'import openssh-5.3p1-gsskex-all-20100124.patch' |
|
| 218 | ||
| 219 | You should now be able to 'bzr merge' from the gssapi branch into the Debian |
|
| 220 | trunk, resolve conflicts, and commit. If you see lots of "Contents conflict" |
|
| 221 | messages, you may have got the file-ids wrong. Once you've committed the |
|
| 222 | merge, you can throw away the tarball branch, as all its history will have |
|
| 223 | been incorporated. |