1 |
Hello, |
2 |
|
3 |
As far as I'm aware, we don't really have much of a patch maintenance |
4 |
policy in Gentoo. There a few loose rules like «don't put awfully big |
5 |
files into FILESDIR» or the common sense «use unified diff», but no |
6 |
complete and clear policy. |
7 |
|
8 |
Especially considering the late discussion related to the needless |
9 |
and semi-broken functionality in epatch, I'd like to propose |
10 |
setting the following rules for patches in tree and in Gentoo-sourced |
11 |
patchsets: |
12 |
|
13 |
1. Patches have to be either in unified or context diff format. Unified |
14 |
diff is preferred. |
15 |
|
16 |
2. Patches have to apply to the top directory of the source tree with |
17 |
'patch -p1'. If patches are applied to sub-directories, necessary '-p' |
18 |
argument shall be passed to 'epatch' explicitly. Developers are |
19 |
encouraged to create patches which are compatible with 'git am'. |
20 |
|
21 |
3. Patches have to end with either '.patch' or '.diff' suffix. |
22 |
|
23 |
4. If possible, patches shall be named in a way allowing them to be |
24 |
applied in lexical order. However, this one isn't necessary if patches |
25 |
from an older ebuild are applied to a newer one. |
26 |
|
27 |
5. The patch name shall shortly summarize the changes done by it. |
28 |
|
29 |
6. Patch files shall start with a brief description of what the patch |
30 |
does. Developers are encouraged to use git-style tags like 'Fixes:' to |
31 |
point to the relevant bug URIs. |
32 |
|
33 |
7. Patch combining is discouraged. Developers shall prefer multiple |
34 |
patches following either the upstream commits or a logical commit |
35 |
sequence (if changes are not committed upstream). |
36 |
|
37 |
The above-listed policy will apply to the patches kept in the gx86 tree |
38 |
(in FILESDIRs) and patch archives created by Gentoo developers. They |
39 |
will not apply to the patch archives created upstream. |
40 |
|
41 |
|
42 |
RATIONALE |
43 |
--------- |
44 |
|
45 |
The main reason for the whole policy is to let Gentoo supply users with |
46 |
consistent and friendly patches. That is, patches which can be used |
47 |
directly on a source tree or submitted upstream without any additional |
48 |
actions from user. |
49 |
|
50 |
(1) lists the most common patch formats. The formats shall be generally |
51 |
both readable and reusable whenever possible. I wanted just 'unified |
52 |
diff' but ulm suggested that we should also support those upstreams who |
53 |
use 'context diffs'. |
54 |
|
55 |
|
56 |
(2) is likely to be a bikeshed point here. Long story short, epatch has |
57 |
this fragile patchlevel guessing, users don't have it. If we keep our |
58 |
patches consistent to a single patchlevel, we gain: |
59 |
|
60 |
* ability for users to apply the patches without having them try all |
61 |
patchlevels by hand. |
62 |
|
63 |
* clean error output if patch stops to apply for some reason. |
64 |
|
65 |
* no risk that patch will get applied to the wrong file if patch stops |
66 |
to apply at expected patchlevel and starts to apply on another. |
67 |
|
68 |
Also, by creating git-format patches, we gain the ability of rebasing |
69 |
and updating the patches easily. Even with non-git upstreams, we can |
70 |
do: |
71 |
|
72 |
git init; git add -A; git commit -m 1; git am ... |
73 |
|
74 |
|
75 |
(3) should be mostly obvious. The main idea is that if we apply a whole |
76 |
patchdir, we should be able to easily tell between patches |
77 |
and auxiliary files like 'README' or Debian's 'series'. |
78 |
|
79 |
I have never seen a patch file named other than '*.patch' or '*.diff'. |
80 |
Therefore, I think that it's better to just require those rather than |
81 |
trying to provide a sane list of excludes. |
82 |
|
83 |
|
84 |
(4) is mostly about friendliness (again). Since shell does filename |
85 |
expansion in lexical order, it's just great for user to be able apply |
86 |
patches like: |
87 |
|
88 |
git am /usr/portage/foo/bar/files/198-*.patch |
89 |
|
90 |
The other sentence is not to enforce this rule e.g. when the same patch |
91 |
is applied to different versions of the same package. Although with |
92 |
a fair of trickery that could be gotten working, I don't think it will |
93 |
be user-friendly anymore :). |
94 |
|
95 |
|
96 |
(5) makes finding a particular patch of interest easier, while (6) |
97 |
makes sure that the purpose of the patch can be read from patch alone. |
98 |
In both cases, having described patches is much better than having to |
99 |
look into ebuilds for explanations. |
100 |
|
101 |
|
102 |
(7) is because merged patches are usually hard to read and completely |
103 |
not suitable for submitting anywhere. |
104 |
|
105 |
|
106 |
What are your thoughts? |
107 |
|
108 |
-- |
109 |
Best regards, |
110 |
Michał Górny |