How to cope with patches sanely

Manoj Srivastava srivasta at debian.org
Sun Feb 24 21:32:48 UTC 2008


On Sat, 23 Feb 2008 11:20:55 -0500, David Nusinow <dnusinow at speakeasy.net> said: 

> On Sat, Feb 23, 2008 at 09:08:23AM -0600, Manoj Srivastava wrote:
>> Now, you are trying to make me go towards a mechanism I think is
>> inferior (a liner, dependent, and in my opinion, opaque, and somewhat
>> shaky linear patch series) as opposed to pure, independent feature
>> branches, for benefits I still think are dubious, so expect serious
>> push back.  Especially if for every upload I'll have to redo all the
>> integration work of the past; ain't gonna happen.
>> 
>> I am not trying to convince you of the error of your ways.  Please
>> desist trying to convince me of mine.

> No one, not me, nor anyone else in this thread that I've seen, is
> saying that you should abandon your sytem. What we want is a
> consistent method of dealing with differences from
> upstream. Currently, we have one giant .diff.gz, which people hack
> around either with patch systems or vcs's. If we switch to something
> other than a monolithic .diff.gz on top of a .orig.tar.gz, then we win
> because currently we just have a lot of chaos.

        So far, this is OK. The devil, though, lies in the details.

> No matter what you want to say about your feature branches, you *must*
> apply them in a linear fashion to your final source tree that you ship
> in the package. This is no way around it.

        But there is no such linearization, not in the way that quilt et
 al do it.  The state of such integration is not maintained in the
 feature branches; it is in the history of the integration branch.  As
 each feature branch was created or developed, if there were any
 conflicts, these conflicts were resolved in the integration branch. And
 the integration branch does not keep track of what changes come from
 which branch -- that is not its job. And it does not keep the
 integration patches up to date either -- that again is not its
 job. Details below.

        There are only Two use cases I care about. A) Feed each pure
 feature to upstream as an up to date patch against current upstream --
 this is what the feature branch does. B) Have an integrated source of
 all features ready to compile for Debian -- and easy to keep updated
 with lates revisions.  This is the task of the integration branch.


> This idea, a linear stack of changes one on top of the other, is the
> commonality between every one of the different means of handling
> changes to upstream, be they maintained by a patch system or a
> vcs. What we want is to stanardize this concept so that our general
> tools like dpkg are aware of it.

        This is where we start to differ. More on this below.

> Given what I know about your system, the only change you would have to
> make is that instead of integrating directly in a final branch, you
> generate a diff and throw that along with the diff's name in to
> debian/patches.

        I do not think you have thought it through.  Let us try seeing
 how this will not work: Say I have have feature branches A-F.  When
 development happens on branch A that requires some conflict resolution
 on the integration branch, I do the resolution, and fix up the
 integration branch.  The fix applied depends on what order the features
 were merged in -- and this is not something I need to keep track of, so
 I do not.

 As more development happens, and non-overlapping
 changes in the same area occur, the patch would no longer apply.  Other
 feature branches may make changes in the area; and again, make the old
 patch obsolete.

        The a new upstream version comes along, and more changes
 happen.  By this time, the old patch will not apply even to
 upstream. Now rinse and repeat -- the patch you blithely threw into
 ./debian/patches is just dead bit by now.

> That's it. It could be totally automated from your
> current setup without much work, if that's what you want.

        I don't think this can be automated.  However, if you think you
 can solve the problem, I'll stand down my objections.  Love to see it
 demonstrated first.

        Indeed, the only way to redo the information in the integration
 branch is to start with the original upstream, from several years ago,
 determine which feature branch was merged in what order, what order any
 improvements were applied, redo the conflict resolution patches, redo
 the upstream version updates in the correct order, and get to the
 current integration branch.

        Heh. Good luck.

> This is not making you give up anything, it's about improving the base
> standard so everyone can get more information without learning a
> zillion different patch systems and vcs's. As a result, we can focus
> on improving the code itself instead of the process of managing the
> code.

> So, in summary, stop trying to act like you're being forced to do
> something that's going to hurt you. No one is taking away your toys.

        Words. Lets us see some code, eh?

        manoj
-- 
When a man knows no this shore, other shore, or both - such a one, free
from anxiety, liberated, that is what I call a brahmin. 385
Manoj Srivastava <srivasta at debian.org> <http://www.debian.org/~srivasta/>  
1024D/BF24424C print 4966 F272 D093 B493 410B  924B 21BA DABB BF24 424C



More information about the vcs-pkg-discuss mailing list