[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#850157: Please deprecate all ad-hoc patch systems



>   Running dpkg-source -x on a source package MUST produce the source
>   of the package, ready for editing, and allow one to make changes,

The "ready for editing" language is a bit too sloppy for Policy. Ultimately 
all packages are 'ready for editing' once unpacked, it's just that you might 
be surprised by what you have to edit. 

Does 'ready for editing' mean it has to be patches-applied when unpacked? 
Does that accidentally forbid tarball-within-tarball packages? (Do we have 
any of them still or have they finally all disappeared?) 

>   and run dpkg-buildpackage to produce a modified package, without
>   taking any additional steps.

"run dpkg-buildpackage to produce a modified package" is also too loose. 
Does that mean source package or binary package? If it means binary package, 
then almost every package is non-compliant with that as a local change would 
cause dpkg-buildpackage to fail with:

	dpkg-source: info: local changes detected

... of the 3.0 (quilt) source format packages, the only compliant ones would 
have "auto-commit" in debian/source/options of which there are a total of 5 
in the archive.


>>   Previously, packages which had ad-hoc patch systems would document
>>   their source code management practices in debian/README.source.
>>   Source packages now MUST NOT use in-source-package patch systems
>>   other than `3.0 (quilt)'.
> 
> How many packages in the archive would we make buggy by adding this
> requirement?  

A starting point would be "every package that build-depends on quilt or 
dpatch" of which there are 868.¹ There are 155 packages that are using some 
other patch system such as provided by CDBS.²

Since the 'patch' package is within the build-essential set, it's not easy 
to know what packages are using patch(1). There are 1159 packages that talk 
about patching things in debian/rules³ some of which are build-time commands 
and some of which are only helpers for the maintainer or comments. There are 
quite a few cases where arch-specific patches exist -- 3.0 (quilt) doesn't 
provide for arch-specific patches. I'm assuming that the proposal is not to 
drop all archs that need arch-specific patches ;) There are also build-
stage-specific patches for bootstrapping.

There are also plenty of packages that do a little sed magic in d/rules to 
alter some source prior to building. Sometimes that could be expressed as a 
patch but that patch can be very fragile (needing to be re-made on every 
single new upstream release) while the sed is not. Fiddling thing with sed 
sounds a lot like an ad hoc patch system to me and is certainly not 
something that should be forbidden.

There are a lot of packages in these lists that are maintained by 
experienced maintainers who selected these approaches for sensible technical 
reasons. Some (like simple-patchsys.mk) are relics but most are not. I think 
we're a long way from a "MUST NOT" on this sort of thing. Given the way 
packages like gcc-*, pythonX.Y and linux are operating (and many others 
besides) are operating, there needs to be an alternative that the 
maintainers consider viable first, and then a migration to that alternative.

A couple of additional points:

* Deprecating patch systems should also deprecate the 'patch' target in 
debian/rules from §4.9.

* There are still other useful roles for d/README.source documented within 
policy and in associated documents; the python modules team refer to 
README.source as the place to document that a package is not using their 
standardised tool (git-dpm) and why, for instance.

cheers
Stuart


¹ build-rdeps quilt = 760; build-rdeps dpatch = 108
² https://lintian.debian.org/tags/debian-rules-uses-deprecated-makefile.html
³ https://codesearch.debian.net/search?q=path%3Adebian%2Frules+patch


-- 
Stuart Prescott    http://www.nanonanonano.net/   stuart@nanonanonano.net
Debian Developer   http://www.debian.org/         stuart@debian.org
GPG fingerprint    90E2 D2C1 AD14 6A1B 7EBB 891D BBC1 7EBB 1396 F2F7


Reply to: