1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121 | Reference
git URL shortcuts used:
[url "git+ssh://<LPID>@git.launchpad.net/~ubuntu-server-dev/ubuntu/+source/"]
insteadof = lpusdp:
[url "git+ssh://<LPID>@git.launchpad.net/~<LPID>/ubuntu/+source/"]
insteadof = lpmep:
Definitions: "old debian", "old ubuntu", "new debian", "new ubuntu". By
"merge" we always mean an "Ubuntu merge", which is in git terms really a
rebase. No actual git merge takes place in this entire workflow.
Common git references expected (T for tag, B for branch):
Things that will be imported by a sponsor or the importer (available
from: lpusdp:<package>; ask a sponsor if missing):
* T import/<version> and T upload/<version>
* For T import/<version>: imported from the archive and pushed to
~ubuntu-server-dev as an authoritative source.
* For T upload/<version>: pushed to ~ubuntu-server-dev to specify
exactly what was uploaded.
* Tree identical to corresponding source package.
* Pushing to ~ubuntu-server-dev is restricted to uploaders.
* Parent should be the previous version import or upload tag where
available. An orphan commit is acceptable in the exceptional case
that this is not possible.
* B ubuntu/devel
* In ~ubuntu-server-dev, this must always point to something also
tagged as import/<version> or upload/<version>.
* Pushing to ~ubuntu-server-dev is restricted to uploaders.
* This branch will be rebased to new Debian imports during Ubuntu
"merges" (but tags will be left behind).
Things that should be made available to a sponsor when submitting a
merge (push to: lpmep:<package>):
* T logical/<old ubuntu>
* Breakdown of previous Ubuntu delta.
* Must be based on an official import/<old debian> or upload/<old debian>
tag ("official" means from ~ubuntu-server-dev).
* One commit per logical change over the entire Ubuntu delta.
* Churn squashed.
* No upstream changes (so only changes in debian/*).
* No changes to debian/changelog.
* No "update-maintainer" or "Vcs-*" or other meta changes.
* To get to this, you will probably start from reconstruct/<old ubuntu>,
described below.
* Sanity checks:
- Identical to the corresponding import/<version> except for:
+ debian/changelog, which should be unchanged.
+ Meta changes (update-maintainer, Vcs-*) in debian/control.
+ Anything not in debian/*, which should be unchanged
(exceptionally this happens when new upstream versions were
imported ahead of Debian).
- No line should be touched twice since import/<old debian>, except
where multiple logical changes need to touch the same line.
* Providing this makes it easy for the sponsor to verify correctness
against the previous Ubuntu delta (perform the above sanity checks
and use "git log -p" to make sure each logical commit describes only
its own changes) and then compare the proposed merge against this
broken down previous Ubuntu delta.
* B merge
* Proposed merge for upload.
* Based on import/<new debian> or upload/<new debian>.
* One commit per logical change; no changes to debian/changelog in
those commits.
* One commit for each of merge-changelogs, reconstruct-changelog, any
changelog tweaks and ubuntu-meta (or update-maintainer as you wish).
* debian/changelog should be "released" with the version string
matching the proposed upload version and targeting the correct
pocket.
* Add commits to the end of this branch in response to reviewer
comments.
* If agreed with sponsor that for the changes requested a new rebased
merge branch will be easier to manage than adding commits to the
end, then do this instead. Rebase the original "merge" branch. To
keep history, if you wish tag the old one "merge.v1".
Things you might want to make available to reviewers so that they can check
your process (push to: lpmep:<package>):
* T reconstruct/<old ubuntu>
* Based on import/<old debian>. For each Ubuntu upload since then:
* One commit to pull in a new upstream if there is one (rare). This
must not contain any changes to debian/.
* One commit per logical change.
* One commit for changelog.
* One commit for any ubuntu-meta/update-maintainer change (usually
only in merge uploads).
* T merge.v1, merge.v2, etc.
* The old state of each merge branch before you rebased it. Only
useful if you rebased.
Merge proposal to make in Launchpad:
lpmep:<package> merge → lpusdp:<package> ubuntu/devel
After review:
If adding commits in response to reveiwer comments, just push again to
lpmep:<package> merge.
If (exceptionally) rebasing in response to reviewer comments:
1. Tag the old branch "merge.v1" (or v2, v3 etc. for future iterations)
2. Rebase the "merge" branch as required
3. Push to lpmep:<package>:
a) The new "v" tag from above.
b) The merge branch (force will be required).
To upload a reviewed merge (for the sponsor):
1. Upload using dput as usual.
2. Tag the merge branch "upload/<version>" (replace ':' and '~' with '_'
to meet git's naming requirements). A lightweight tag is fine.
3. Force push the merge branch to lpusdp:<package> ubuntu/devel.
4. Push the "upload/<version>" tag to lpusdp:<package>.
|