Git development
 help / color / mirror / Atom feed
* [TopGit] Multiple concurrent sets of patches
@ 2009-03-03 11:37 Jonas Smedegaard
  2009-03-03 13:03 ` martin f krafft
  0 siblings, 1 reply; 6+ messages in thread
From: Jonas Smedegaard @ 2009-03-03 11:37 UTC (permalink / raw)
  To: git

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

I have run into a challenge that I suspect is a limitation of current 
TopGit. I am hoping you could help enlighten me, as I otherwise feel 
that TopGit is not generally usable for my Debian packaging needs:

How to manage patches against multiple source branches using TopGit?

Let's take netatalk as an example. Upstream only quite infrequently 
release new upstream tarball releases, so I cherry-pick patches from 
upstream VCS. Recently a security-related bug was discovered which 
needed fixing not only in the current packaging development (git master 
branch) but also needed branching off earlier releases of the package 
(those included in the "stable" and "oldstable" Debian distro releases) 
and applying same fix for them.

The actual patch needed for the various branches was obviously not 
identical, as upstream sources were different and my cherry-picked set 
of patches had evolved.

It seems to me that TopGit is incapable of handling this. That it can 
only handle patchset against a single branch, and if the need arise for 
restructuring an additional patchset for e.g. a stable or oldstable 
branch, then quilt needs to be used manually anyway.


   - Jonas

Debian developer

- -- 
* Jonas Smedegaard - idealist og Internet-arkitekt
* Tlf.: +45 40843136  Website: http://dr.jones.dk/

   [x] quote me freely  [ ] ask before reusing  [ ] keep private
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iEYEARECAAYFAkmtFoUACgkQn7DbMsAkQLgvrACdHfy5K0igPa6Yj/LYyhh3Llyn
jvcAnRfla1QyuUrx8+L4IL9XYY2CB+Su
=B1Kc
-----END PGP SIGNATURE-----

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [TopGit] Multiple concurrent sets of patches
  2009-03-03 11:37 [TopGit] Multiple concurrent sets of patches Jonas Smedegaard
@ 2009-03-03 13:03 ` martin f krafft
  2009-03-03 19:22   ` Jonas Smedegaard
  0 siblings, 1 reply; 6+ messages in thread
From: martin f krafft @ 2009-03-03 13:03 UTC (permalink / raw)
  To: Jonas Smedegaard, git

[-- Attachment #1: Type: text/plain, Size: 884 bytes --]

also sprach Jonas Smedegaard <dr@jones.dk> [2009.03.03.1237 +0100]:
> It seems to me that TopGit is incapable of handling this. That it can 
> only handle patchset against a single branch, and if the need arise for 
> restructuring an additional patchset for e.g. a stable or oldstable 
> branch, then quilt needs to be used manually anyway.

Let me try to understand you: you want TopGit to maintain a single
feature branch against two different source branches? How should
that work? Could you elaborate a bit so that your needs become a bit
more obvious?

Thanks,

-- 
martin | http://madduck.net/ | http://two.sentenc.es/
 
"i feel sorry for people who don't drink. when they wake up in the
 morning, that's as good as they're going to feel all day."
                                                    -- frank sinatra
 
spamtraps: madduck.bogus@madduck.net

[-- Attachment #2: Digital signature (see http://martin-krafft.net/gpg/) --]
[-- Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [TopGit] Multiple concurrent sets of patches
  2009-03-03 13:03 ` martin f krafft
@ 2009-03-03 19:22   ` Jonas Smedegaard
  2009-03-03 19:42     ` Uwe Kleine-König
  2009-03-04  7:16     ` martin f krafft
  0 siblings, 2 replies; 6+ messages in thread
From: Jonas Smedegaard @ 2009-03-03 19:22 UTC (permalink / raw)
  To: git; +Cc: pasky, u.kleine-koenig, martin f krafft

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Tue, Mar 03, 2009 at 02:03:16PM +0100, martin f krafft wrote:
>also sprach Jonas Smedegaard <dr@jones.dk> [2009.03.03.1237 +0100]:
>> It seems to me that TopGit is incapable of handling this. That it can 
>> only handle patchset against a single branch, and if the need arise 
>> for restructuring an additional patchset for e.g. a stable or 
>> oldstable branch, then quilt needs to be used manually anyway.
>
>Let me try to understand you: you want TopGit to maintain a single
>feature branch against two different source branches? How should
>that work? Could you elaborate a bit so that your needs become a bit
>more obvious?

Not quite. I want TopGit to maintain multiple feature branches, 
preferrably related.

With "related" I mean that I would like to be able to "fork" a chain of 
interdependent feature branches.

TopGit easily support one chain of branches:

upstream + pristine-tar -> master -> build

I want TopGit to additionally support the following:

upstream + pristine-tar -> stable-master -> stable-build

upstream + pristine-tar -> oldstable-master -> oldstable-build


E.g. in addition to TopGit branches t/fix_01 and t/feature_01 I would 
want to fork those branches as t_stable/fix_01 and t_stable/feature_01.


I know that I can create all those TopGit branches one by one, but I 
would then need to explicitly declare a list of TopGit branches to apply 
each time I want to (re)generate a quilt patchlist.


Perhaps what I really am looking for here is something like "tg tag":

    git checkout t/fix_01
    tg tag t/fix_01 master
    git checkout -b t_stable/fix_01 t/fix_01
    tg tag -d master
    tg tag stable
    git checkout stable_build
    ./debian/rules tg-export tags=stable


...or perhaps this is not relevant upstream to TopGit at all but only to 
your packaging of a "tg-export" rule?


    - Jonas

- -- 
* Jonas Smedegaard - idealist og Internet-arkitekt
* Tlf.: +45 40843136  Website: http://dr.jones.dk/

    [x] quote me freely  [ ] ask before reusing  [ ] keep private
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iEYEARECAAYFAkmtg20ACgkQn7DbMsAkQLhQGQCfQjtfJzzQUu6B0qywpkmxmdGp
66oAnjEtR2Dc/zJ+lMoP3TD3jy1pr1s9
=MwTs
-----END PGP SIGNATURE-----

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [TopGit] Multiple concurrent sets of patches
  2009-03-03 19:22   ` Jonas Smedegaard
@ 2009-03-03 19:42     ` Uwe Kleine-König
  2009-03-03 22:07       ` Jonas Smedegaard
  2009-03-04  7:16     ` martin f krafft
  1 sibling, 1 reply; 6+ messages in thread
From: Uwe Kleine-König @ 2009-03-03 19:42 UTC (permalink / raw)
  To: Jonas Smedegaard; +Cc: git, pasky, martin f krafft

On Tue, Mar 03, 2009 at 08:22:21PM +0100, Jonas Smedegaard wrote:
> On Tue, Mar 03, 2009 at 02:03:16PM +0100, martin f krafft wrote:
> >also sprach Jonas Smedegaard <dr@jones.dk> [2009.03.03.1237 +0100]:
> >> It seems to me that TopGit is incapable of handling this. That it can 
> >> only handle patchset against a single branch, and if the need arise 
> >> for restructuring an additional patchset for e.g. a stable or 
> >> oldstable branch, then quilt needs to be used manually anyway.
> >
> >Let me try to understand you: you want TopGit to maintain a single
> >feature branch against two different source branches? How should
> >that work? Could you elaborate a bit so that your needs become a bit
> >more obvious?
> 
> Not quite. I want TopGit to maintain multiple feature branches, 
> preferrably related.
> 
> With "related" I mean that I would like to be able to "fork" a chain of 
> interdependent feature branches.
> 
> TopGit easily support one chain of branches:
> 
> upstream + pristine-tar -> master -> build
> 
> I want TopGit to additionally support the following:
> 
> upstream + pristine-tar -> stable-master -> stable-build
> 
> upstream + pristine-tar -> oldstable-master -> oldstable-build
> 
> 
> E.g. in addition to TopGit branches t/fix_01 and t/feature_01 I would 
> want to fork those branches as t_stable/fix_01 and t_stable/feature_01.
> 
> 
> I know that I can create all those TopGit branches one by one, but I 
> would then need to explicitly declare a list of TopGit branches to apply 
> each time I want to (re)generate a quilt patchlist.
For my kernel development I use topgit topic branches that collect
topgit patch branches.  Take this dependency graph:

	linus/master <- t/armmisc/patch1 <- t/armmisc-master <- t/armmisc-pu
	         ^ ^----t/armmisc/patch2 <--'                   |
                 `------t/armmisc/patch3 <----------------------'

So t/armmisc-master collects patches that are ready for upstream, -pu
patches that need some more work.

With etch <- lenny <- squeeze <- sid you could do the same.  The only
Consider you have a security fix that is relevant for all
releases starting at lenny. Then you do

	tg create t/fixes-lenny/CVE-2009-abcd master-lenny
	... apply patch
	... fill .topmsg
	git commit

	git checkout t/fixes-lenny-master
	tg depend add t/fixes-lenny/CVE-2009-abcd

	tg create t/fixes-squeeze/CVE-2009-abcd master-squeeze t/fixes-etch/CVE-2009-abcd
	... no need to apply patch
	... cherry-pick .topmsg from t/fixes-lenny/CVE-2009-abcd
	git commit

	git checkout t/fixes-squeeze-master
	tg depend add t/fixes-squeeze/CVE-2009-abcd
	
And if you notice that etch needs the same fix, you can create
t/fixes-etch/CVE-2009-abcd based on master-etch and then do

	git checkout t/fixes-lenny/CVE-2009-abcd
	tg depend add t/fixes-etch/CVE-2009-abcd

tatata, I think that's it for packaging.

But this doesn't help me for my kernel problem, because here I don't
have that ordering on releases.  I want to manage patches on top of
linux-tip and the ARM tree, but none of these contains the other :-/

Best regards
Uwe

-- 
Pengutronix e.K.                              | Uwe Kleine-König            |
Industrial Linux Solutions                    | http://www.pengutronix.de/  |
Peiner Strasse 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686              | Fax:   +49-5121-206917-5555 |

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [TopGit] Multiple concurrent sets of patches
  2009-03-03 19:42     ` Uwe Kleine-König
@ 2009-03-03 22:07       ` Jonas Smedegaard
  0 siblings, 0 replies; 6+ messages in thread
From: Jonas Smedegaard @ 2009-03-03 22:07 UTC (permalink / raw)
  To: git; +Cc: Uwe Kleine-König

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Tue, Mar 03, 2009 at 08:42:32PM +0100, Uwe Kleine-König wrote:
>On Tue, Mar 03, 2009 at 08:22:21PM +0100, Jonas Smedegaard wrote:
>> On Tue, Mar 03, 2009 at 02:03:16PM +0100, martin f krafft wrote:
>> >also sprach Jonas Smedegaard <dr@jones.dk> [2009.03.03.1237 +0100]:
>> >> It seems to me that TopGit is incapable of handling this. That it 
>> >> can only handle patchset against a single branch, and if the need 
>> >> arise for restructuring an additional patchset for e.g. a stable 
>> >> or oldstable branch, then quilt needs to be used manually anyway.
>> >
>> >Let me try to understand you: you want TopGit to maintain a single 
>> >feature branch against two different source branches? How should 
>> >that work? Could you elaborate a bit so that your needs become a bit 
>> >more obvious?
>> 
>> Not quite. I want TopGit to maintain multiple feature branches, 
>> preferrably related.
>> 
>> With "related" I mean that I would like to be able to "fork" a chain 
>> of interdependent feature branches.
>> 
>> TopGit easily support one chain of branches:
>> 
>> upstream + pristine-tar -> master -> build
>> 
>> I want TopGit to additionally support the following:
>> 
>> upstream + pristine-tar -> stable-master -> stable-build
>> 
>> upstream + pristine-tar -> oldstable-master -> oldstable-build
>> 
>> 
>> E.g. in addition to TopGit branches t/fix_01 and t/feature_01 I would 
>> want to fork those branches as t_stable/fix_01 and t_stable/feature_01.
>> 
>> 
>> I know that I can create all those TopGit branches one by one, but I 
>> would then need to explicitly declare a list of TopGit branches to 
>> apply each time I want to (re)generate a quilt patchlist.
>For my kernel development I use topgit topic branches that collect 
>topgit patch branches.  Take this dependency graph:
>
>	linus/master <- t/armmisc/patch1 <- t/armmisc-master <- t/armmisc-pu
>	         ^ ^----t/armmisc/patch2 <--'                   |
>                 `------t/armmisc/patch3 <----------------------'
>
>So t/armmisc-master collects patches that are ready for upstream, -pu
>patches that need some more work.

My head is spinning - the dependency graph in my head was upside down 
compared to your ascii art here.

I think I understand it . Thanks!

I will try it out - I converted ghostscript last week to using TopGit as 
an excercise: good challenge, a nice bunch of patches (but nothing near 
as complex as kernel stuff, I know).


>	tg create t/fixes-squeeze/CVE-2009-abcd master-squeeze t/fixes-etch/CVE-2009-abcd
>	... no need to apply patch
>	... cherry-pick .topmsg from t/fixes-lenny/CVE-2009-abcd
>	git commit

Above puzzles me: Is cherry-picking .topmsg just a lazy way to write 
same description for parallel topicbranch, or is it a trick to cheat 
TopGit into believing that that branch never needs updating?


>But this doesn't help me for my kernel problem, because here I don't 
>have that ordering on releases.  I want to manage patches on top of 
>linux-tip and the ARM tree, but none of these contains the other :-/

I can only begin to imagine the complexities of dealing with parallel 
tracks of kernel patching... Good luck with that!


Thanks a lot for your insight,

  - Jonas

- -- 
* Jonas Smedegaard - idealist og Internet-arkitekt
* Tlf.: +45 40843136  Website: http://dr.jones.dk/

  [x] quote me freely  [ ] ask before reusing  [ ] keep private
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iEYEARECAAYFAkmtqg0ACgkQn7DbMsAkQLhMFACgkW1FYlWnEP8unk+wVgAkd0i+
UMwAoKT1mkxIRP6XmNKt+Rj3iJn2yUpM
=7x2Z
-----END PGP SIGNATURE-----

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [TopGit] Multiple concurrent sets of patches
  2009-03-03 19:22   ` Jonas Smedegaard
  2009-03-03 19:42     ` Uwe Kleine-König
@ 2009-03-04  7:16     ` martin f krafft
  1 sibling, 0 replies; 6+ messages in thread
From: martin f krafft @ 2009-03-04  7:16 UTC (permalink / raw)
  To: Jonas Smedegaard, git, pasky, u.kleine-koenig

[-- Attachment #1: Type: text/plain, Size: 1914 bytes --]

also sprach Jonas Smedegaard <dr@jones.dk> [2009.03.03.2022 +0100]:
> I know that I can create all those TopGit branches one by one, but
> I would then need to explicitly declare a list of TopGit branches
> to apply each time I want to (re)generate a quilt patchlist.

There are two ways to achieve what you want with TopGit. Uwe
outlined one way:

- create a new branch depending on all the patch branches you want
  to use. This is what I advocated for packaging in Debian's topgit
  0.3-1 package:
  http://git.debian.org/?p=collab-maint/topgit.git;a=blob;f=debian/README.source;hb=debian/topgit-0.3-1

- declare the list of patches to use, as you suggest. This is what
  the current tg2quilt.mk approach of Debian's topgit 0.5-1 package
  does.

In the context where you have a single debian/rules file to prepare
a quilt series as part of building your package, I think the latter
makes more sense, as it keeps information in debian/rules and
alleviates the user of repetetive steps.

However, in the special context of a security fix, the suggestion
illustrated by Uwe probably makes a lot more sense. One reason for
this is because it is not yet possible to use TopGit patch branches
of the past, meaning that you can only ever use the tip of each, and
that tg-update basically destroys the infrastructure needed to go
back in time. By creating a special depending branch for the
security fix, however, you are preserving the graph at the time,
which is the tag you were alluding to.

This is what I can add to this discussion. I don't think I have
actually fully understood the scope of the problem yet.

-- 
martin | http://madduck.net/ | http://two.sentenc.es/
 
"no work of art ever puts forward views.
 views belong to people
 who are not artists."
                                                        -- oscar wilde
 
spamtraps: madduck.bogus@madduck.net

[-- Attachment #2: Digital signature (see http://martin-krafft.net/gpg/) --]
[-- Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2009-03-04  7:18 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-03 11:37 [TopGit] Multiple concurrent sets of patches Jonas Smedegaard
2009-03-03 13:03 ` martin f krafft
2009-03-03 19:22   ` Jonas Smedegaard
2009-03-03 19:42     ` Uwe Kleine-König
2009-03-03 22:07       ` Jonas Smedegaard
2009-03-04  7:16     ` martin f krafft

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox