Re: Recipes vs. Looms vs. pipelines
On Tue, 2010-01-05 at 10:30 -0600, John Arbash Meinel wrote: > If you have a purely 'stack' model, and have: > - - feature2 > - - feature1 > - - upstream > > If someone wants just 'feature2' they have to cherrypick or get feature1. Only if we have merged feature1 stuff into feature2; and its quite possible to skip doing that while preserving a stack description - remember that each revision has dag info, so we don't need a dag at the list of branches level. > The changes for loom itself, are stuff like 'up-thread' from feature1 => > feature2 is just a 'switch'. But up-thread from feature2 => integration > (or feature1) requires a merge from both feature1 and feature2 (probably > committing inbetween.) I think I filed a bug, but I plan to reduce the noop commits massively here. -Rob signature.asc Description: This is a digitally signed message part -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Robert Collins wrote: > On Tue, 2009-12-15 at 11:15 -0600, John Arbash Meinel wrote: >> >> Which (IMO) is something that pushes for having a real DAG in the loom >> state, rather than just a stack model. As it means you can push *just >> this thread* into upstream, and have them merge it, without them >> having >> to merge all of your other changes. Otherwise the loom is just there >> to >> help you develop the patch. And then you throw away all the history >> once >> the patch gets applied to upstream. > > I'm not quite sure what you mean by this. The relationship between > threads being DAG | sequence won't affect what merges are needed. > > -Rob If you have a purely 'stack' model, and have: - - feature2 - - feature1 - - upstream If someone wants just 'feature2' they have to cherrypick or get feature1. If you had a DAG with: - - integration => feature1, feature2 - - feature2 => upstream - - feature1 => upstream - - upstream Then someone can just 'bzr merge feature2' and get only those changes. The changes for loom itself, are stuff like 'up-thread' from feature1 => feature2 is just a 'switch'. But up-thread from feature2 => integration (or feature1) requires a merge from both feature1 and feature2 (probably committing inbetween.) John =:-> -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (Cygwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAktDaS0ACgkQJdeBCYSNAAO0pQCcD9Q8vzI22axn1ZPC75rcP/Cy dfYAn0jKCN9ceXc2zXuMw25F3sl1xTAj =HtNK -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
2010/1/4 Aaron Bentley : > Barry Warsaw wrote: >> Correct me if I'm wrong, but reconfigure-pipeline is actually pretty close to >> what I want, I think. 'bzr reconfigure-pipeline' will create a ./pipes >> directory in the current working tree, and all new pipes will go there. If >> this was named .bzr/pipes instead I think that would be perfect. > > That is right. If you find any problems with this, please report them > as bugs. > >> I did a quick and dirty hack which seems to DTRT. > > I saw that, and I'm 95% certain I'll land it as-is. It's possible I'll > add an option to restore the previous behaviour. My original motivation > for using a location outside the .bzr was to avoid too much "magic". I > was on a "pipes are just branches" kick. > OMG yes please. I've nuked my pipes quite a few times by running bzr clean-tree --ignored because upstream distclean targets were broken. -- With best regards Dmitrijs Ledkovs (for short Dima), Ледков Дмитрий Юрьевич () ascii ribbon campaign - against html e-mail /\ www.asciiribbon.org - against proprietary attachments -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
On Tue, 2009-12-15 at 11:15 -0600, John Arbash Meinel wrote: > > > Which (IMO) is something that pushes for having a real DAG in the loom > state, rather than just a stack model. As it means you can push *just > this thread* into upstream, and have them merge it, without them > having > to merge all of your other changes. Otherwise the loom is just there > to > help you develop the patch. And then you throw away all the history > once > the patch gets applied to upstream. I'm not quite sure what you mean by this. The relationship between threads being DAG | sequence won't affect what merges are needed. -Rob signature.asc Description: This is a digitally signed message part -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
Barry Warsaw wrote: > Correct me if I'm wrong, but reconfigure-pipeline is actually pretty close to > what I want, I think. 'bzr reconfigure-pipeline' will create a ./pipes > directory in the current working tree, and all new pipes will go there. If > this was named .bzr/pipes instead I think that would be perfect. That is right. If you find any problems with this, please report them as bugs. > I did a quick and dirty hack which seems to DTRT. I saw that, and I'm 95% certain I'll land it as-is. It's possible I'll add an option to restore the previous behaviour. My original motivation for using a location outside the .bzr was to avoid too much "magic". I was on a "pipes are just branches" kick. I should mention that, as a launchpad developer, you probably have a bunch of configuration in ~/.bazaar/locations.conf that uses the "appendpath" configuration policy to set your public, submit, pull and push locations. Have a look with "bzr info" to see if any of those locations have gone haywire. (https://bugs.launchpad.net/bzr-pipeline/+bug/416962 is related to the appendpath issue.) > Hacking reconfigure to set up .bzr/pipes when run in a lightweight checkout > might be a good idea too, but I don't think I'll tackle that one. I think that most of the time, if there's a lightweight checkout, the user has already decided to put their branches somewhere else. So I think there may not be any demand for this. Aaron -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA256 Resurrecting a thread from a few weeks ago... On Dec 17, 2009, at 01:26 PM, Aaron Bentley wrote: >Barry Warsaw wrote: >> I like this because there are >> no extra directories to worry about, and I can delete the loom >> directory in one rm-rf and be completely done with it. > >This is actually co-location of trees with their branches. You can >accomplish this with lightweight checkouts by putting the branch inside >the .bzr directory of the branch. > >$ bzr init foo >Created a standalone tree (format: 2a) > >$ bzr checkout foo bar >$ mkdir bar/.bzr/branches >$ mv foo bar/.bzr/branches/ >$ cd bar >$ bzr switch --force .bzr/branches/foo >Tree is up to date at revision 0. >Switched to branch: /home/abentley/sandbox/bar/.bzr/branches/foo/ > >Obviously, this is more steps than it should be, but it would be easy to >turn into a reconfigure operation. Correct me if I'm wrong, but reconfigure-pipeline is actually pretty close to what I want, I think. 'bzr reconfigure-pipeline' will create a ./pipes directory in the current working tree, and all new pipes will go there. If this was named .bzr/pipes instead I think that would be perfect. I did a quick and dirty hack which seems to DTRT. https://bugs.edge.launchpad.net/bzr-pipeline/+bug/503006 https://code.edge.launchpad.net/~barry/bzr-pipeline/dotfile It does mean that instead of doing a lightweight checkout to start with, I would use a straight up 'bzr branch foo bar' then reconfigure. I could live with that. Maybe a better name for that would be 'init-pipes'. I'll just add that as the sixth essential pipeline alias. :) Hacking reconfigure to set up .bzr/pipes when run in a lightweight checkout might be a good idea too, but I don't think I'll tackle that one. - -Barry -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (GNU/Linux) iQIcBAEBCAAGBQJLQhQKAAoJEBJutWOnSwa/w88QALxj61jvNuYI18lwRh86uked u/cSpGWFd7cd1lffmw8loFim8tfjUUBLHglMmmlyrIsl/6RCPGk7OhF6vymWWpSZ M1nQEJeUTK4XVzuwPynD5yq0YTNsH45YbNo+WZmAMghC9jFwFq4LM8vhVWf+uULa hwcCYwBYGQYncUTah9kllyjqpATX7Xk4H6tUy3H7EbTzFHoT6ma0WS4WOy62OPrr cqT4qBj0gFeWpcxq12T0Vhgzgvg0vvyh93YrM+A4CKB2jr754GhR+5f0H7oUp9ud 67w+RDzIQkyyWKWbHpyxDWe+VZY3O2jJm4/q431jiWKowEqCjQMxnxbBpq8xJVwE 3jgm0uEK4Vty+aBvDJKZPHOHJqvf1vw+nulps2qnzEzEWkjvKYL1gb2cJ+zcIPaV 5SsmuCsRG7x1UWUBDEbvNW8KuYMeCDqPVLEM3FssJuhu19FyF06FTG/QMDLM49GE JfwCXIvY1Dbujf3j7SHDMGCkOs3AVaBd0mx4UvLXtairklWpq0UPDWIo4ApxeOSm l2TDhpjLl4HbcZSAtcVeI0ezpd/VWK543BcfHs/zDYtgoY6vJQSCog1yuz7+Nf5M S/jqS1kjn1J+T2VApbuXxCR3FuftBHr5VEazC1LfIGVzSL/oyrYxsp8QChh2OnvI SV7HWknL1w2PBD5JSMcQ =Hz3A -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
> "jam" == John Arbash Meinel writes: >> The last times I had to merge trunk in these cases was... long >> ago and mainly had to do with branches left dormant too long. >> >> Vincent >> jam> Interesting. I have to do it all the time because of NEWS issues... In the integration branch, me too, that's why I tend to *not* merge trunk until the pqm submission and that works most of the time. Vincent -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Vincent Ladeuil wrote: >> "Aaron" == Aaron Bentley writes: > > > > Aaron> That is fine with me, but do you have any comments on > Aaron> the original issue? > > Aaron> The original discussion was about "down-thread; pull; up-thread -a" > Aaron> feeling more natural than "pull -d submit:; merge; commit;". It > wasn't > Aaron> about the advantages of stacks when you have multiple lines of > Aaron> development, it was about the loom workflow feeling more natural > even > Aaron> when you only had one line of development. > > That's not how I understood it, but I've been wrong before :-D > > So yes, I find the loom workflow feeling more natural. > > But that's not really relevant (to me and IME) when there is a > single line of dev. That's mainly because in that case I > generally don't merge trunk until the submission. And in that > case I do the merge and resolve the conflicts in my integration > branch. > > The last times I had to merge trunk in these cases was... long > ago and mainly had to do with branches left dormant too long. > > Vincent > Interesting. I have to do it all the time because of NEWS issues... John =:-> -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (Cygwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAksrvIQACgkQJdeBCYSNAAN5zgCfSJnwo5NZCI2U34igOI6917x6 jXAAoJOEoxXf7Z465dGjQdEbCJRqXiYG =wUVX -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
> "Aaron" == Aaron Bentley writes: Aaron> That is fine with me, but do you have any comments on Aaron> the original issue? Aaron> The original discussion was about "down-thread; pull; up-thread -a" Aaron> feeling more natural than "pull -d submit:; merge; commit;". It wasn't Aaron> about the advantages of stacks when you have multiple lines of Aaron> development, it was about the loom workflow feeling more natural even Aaron> when you only had one line of development. That's not how I understood it, but I've been wrong before :-D So yes, I find the loom workflow feeling more natural. But that's not really relevant (to me and IME) when there is a single line of dev. That's mainly because in that case I generally don't merge trunk until the submission. And in that case I do the merge and resolve the conflicts in my integration branch. The last times I had to merge trunk in these cases was... long ago and mainly had to do with branches left dormant too long. Vincent -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
> "jam" == John Arbash Meinel writes: jam> Vincent Ladeuil wrote: >> I knew it was going to be a long day :) >> >> So I made an mistake in my argumentation. Hurrah ! I was wrong, I >> learned something new ! That was a good day finally :) Thanks to >> Aaron and John for that. jam> Sorry to make it feel like it was an attack. I honestly jam> did want to understand why you felt it was different. Well, no worries. Replying to the *other* part of the mail would have helped though. This reply is full of gems. >> >> Why I thought the merge was done in the other direction is still >> a bit of a mystery[1]... but irrelevant to the discussion. jam> ^- I think there is a missing footnote here :) Hehe, damn, I left that, never left any typo for jam :0D Ok, so the I thought a bit about it and I think it was because in my head I see the branch I'm working on at the left and everything I'm merging into it on the right. Then I put the loom on the left... or something like that and I get confused :) Nothing relevant to the discussion. But your 'bzr qlog trunk vila jam' is quite close, except the columns are reversed in my head which qlog can't produce. >> >> So what I meant is shown below (you can paste the following in >> bzrlib/tests/test_script.py and run >> bzr selftest -s bt.test_script.TestGraphs). jam> Easier to just cut off the $ and run in a real shell, but both work. I take that as a compliment :D The side point was to show that it was easily turned into a test, so anybody feel welcome to write such tests :) The main advantage is that you don't need to cleanup or take cleanup into account like you have when when writing it as a shell script. And... it's easy to organize/run (selftest -s)/commit (thanks bzr), etc (including dogfooding is good). >> >> Gee, 13 and 14 commands respectively for the simplest example :-( >> >> My point was (and is still) that the difference when using a loom >> is that there is a point where you get a better control on how >> the trunk is merged in each thread because the trunk is brought >> "by the bottom", 'up-thread --auto' stops in case of conflicts >> for a good reason. jam> So that is true, but it would be identical if you used 2 jam> feature branches. And in fact, if I was trying to jam> separate features like that, *I* would try to do it as: Indeed, but using a loom is simpler. jam> bzr init trunk jam> bzr commit -m "trunk" --unchanged trunk jam> bzr branch trunk vila jam> bzr branch trunk jam jam> bzr commit -m "vila1" vila jam> bzr commit -m "jam1" jam --unchanged jam> bzr commit -m "trunk2" --unchanged trunk ..and having that as a test makes it trivial to fix: def test_with_feature_branches(self): self.run_script(""" $ bzr init trunk $ bzr commit -m "trunk" --unchanged trunk $ bzr branch trunk vila $ bzr branch trunk jam $ cd vila $ bzr commit -m "vila1" --unchanged $ cd ../jam $ bzr commit -m "jam1" --unchanged $ cd ../trunk $ bzr commit -m "trunk2" --unchanged $ bzr qlog jam vila trunk $ bzr qlog trunk vila jam """) jam> bzr qlog trunk vila jam jam> # Note that this is my argument for a DAG based loom/pipeline. As at jam> # this point, you can decide your dependencies, and do More and more people are agreeing here. It was my first idea as an ideal tool then I tried to mix looms with pipelines at the top, then wondered if hammer-merging can be enough and I'm back to either loom or loom/pipelines... But I think mentioning the various ways they are used and the associated rough edges is a great way to progress. jam> cd vila jam> bzr merge ../trunk; bzr commit -m "merge trunk to vila" jam> cd ../jam jam> # either jam> bzr merge ../trunk; bzr commit -m "merge trunk to jam" jam> # or jam> bzr merge ../vila; bzr commit -m "merge vila(+trunk) to jam" jam> You probably want to visualize this with: jam> bzr qlog jam vila trunk jam> Though jam> bzr qlog trunk vila jam jam> Looks interesting. Definitely and very close to my mysterious weird mental representation. jam> Of course, separate branches play nicer with 'qlog' jam> today, but I don't see any reason why qlog couldn't show jam> the same graph and labels for threads that it shows for jam> branches. jam> Anyway, it depends on how much the 'vila' features are jam> necessary for the 'jam' features, vs how independent jam> they are. Yes. And things can get even more complicated. So without a good UI and I fear a GUI is required, there are big usability issues here. >> >> The graphs are different because more information is preserved in >> the loom case, that's basically the same argumentation about >> rebase or not rebase, these additional commits may seem spurious >> but that's a different debate. >> >> Putting
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Barry Warsaw wrote: > On Dec 18, 2009, at 09:06 AM, John Arbash Meinel wrote: > > JAM, you've made some very interesting observations! > >> I'll be honest, though. I'm starting to wonder if we really do want to >> preserve the extra history. I certainly have made comments that we don't >> want to write a system that makes a glorified "patch". Though honestly, >> what you really care about landing in upstream is a "change". In loom >> terminology, you really do only care about "bzr diff -rthread:" as that >> is what is going to be reviewed upstream. > > I think that's absolutely right. Note though, that it's not until I'm ready > to publish my work that I'd be ready to collapse things down. IOW, while the > work is still in progress, I do care about each revision. When I'm ready to > push though, I think those individual revisions are much less interesting. Of > course, this "collapsing" might happen more than once during the lifetime of a > branch (e.g. hey-can-you-help-me-with-this, ready-for-review, > i've-responded-to-your-review, ready-to-land). So we do this in the bzr project by using the "left parent is more important" model. Specifically, the collapse occurs because: "bzr merge; bzr commit; bzr log -n1" will only show you the merge commits, which have effectively collapsed the changes into individual bytes. And interestingly, this is sort of what you have with loom if you re-ordered the parents. (If up-thread --auto did what vila originally thought it did.) I think if we did that parent swapping on each up-thread, it would probably mess up the development flow. However, you could have a fairly simple command that could do that. John =:-> -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (Cygwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAksro+8ACgkQJdeBCYSNAAN+/gCgtrOqVsIFm+xs1tBA0pqbZx99 SU8AoLIzmhWQUCGSD1C2IOfSJ7Z2iK6P =8Hcd -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Barry Warsaw wrote: > On Dec 17, 2009, at 01:26 PM, Aaron Bentley wrote: > >>> Maybe I want to >>> decide whether the work I had to do to land the code needs extra >>> review. With a loom, there's no problem finding this. With a >>> non-loom it's much more difficult especially if you've got several >>> trunk merges interspersed. >> Sure, I can see the virtue of a stack-based approach if you want to view >> the work separately. But this doesn't help me understand why you would >> want trunk as the base thread. > > What happens if I update my trunk? Nothing bad, IME. > In the loom-based approach, my bottom > thread won't be updated until I explicitly take that step. In the branch > based approach, all my branches will "see" the update. "See" in what sense? If you mean that they will diff against the wrong version, they won't if you use -r submit: or -r ancestor: >>> Updating the bottom thread and up-threading --auto falls into this. >>> It's usually a trivial, inconsequential afterthought. Most changes >>> on trunk don't affect my work, so I don't care about them. I'm >>> merging trunk to be diligent. The fact that I can mentally segregate >>> that to the bottom thread helps me ignore it completely in the common >>> case, even if the end result is the same. >> I don't see how this lets you mentally segregate it to the bottom >> thread. up-thread --auto affects all threads. > > Right, but it's the difference between thinking about it like: "oh, I'm just > tracking trunk changes" to "I'm weaving in the trunk changes with my current > work". I dunno, maybe I need to change my mental model, but to me there's a > very distinct difference. I think of "pull" as the "tracking" command and "merge" as the "weaving into my work" command. It almost sounds like you're thinking of the pull into trunk as "merging trunk". Is that accurate? >> This is actually co-location of trees with their branches. You can >> accomplish this with lightweight checkouts by putting the branch inside >> the .bzr directory of the branch. > >> $ bzr init foo >> Created a standalone tree (format: 2a) > >> $ bzr checkout foo bar >> $ mkdir bar/.bzr/branches >> $ mv foo bar/.bzr/branches/ >> $ cd bar >> $ bzr switch --force .bzr/branches/foo >> Tree is up to date at revision 0. >> Switched to branch: /home/abentley/sandbox/bar/.bzr/branches/foo/ > > Thanks, that helps a lot. I will definitely give this a shot for the next > branch I'm working on. Cool. Note that the checkout command should actually be "bzr checkout - --lightweight bar". (I have "checkout" aliased to "checkout - --lightweight --hardlink".) Aaron -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAksroukACgkQ0F+nu1YWqI3hVgCfTH+c6mPS5956vzj4OdRqfGX2 788An1cXGPmGyYqx0MuYAPi9FWoDZIaR =idZj -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA256 On Dec 18, 2009, at 09:06 AM, John Arbash Meinel wrote: JAM, you've made some very interesting observations! >I'll be honest, though. I'm starting to wonder if we really do want to >preserve the extra history. I certainly have made comments that we don't >want to write a system that makes a glorified "patch". Though honestly, >what you really care about landing in upstream is a "change". In loom >terminology, you really do only care about "bzr diff -rthread:" as that >is what is going to be reviewed upstream. I think that's absolutely right. Note though, that it's not until I'm ready to publish my work that I'd be ready to collapse things down. IOW, while the work is still in progress, I do care about each revision. When I'm ready to push though, I think those individual revisions are much less interesting. Of course, this "collapsing" might happen more than once during the lifetime of a branch (e.g. hey-can-you-help-me-with-this, ready-for-review, i've-responded-to-your-review, ready-to-land). >I am starting to think that history should be "immutable" but with the >possibility of annotating it. Consider a commit: > "Remove foo and bar making it 10x faster." >That you could later annotate with: > "Note: This was a *bad* idea, as it broke OS X and Windows and..." +1 >It would be nice to have that note at least referenced when looking at >the original commit. > >As for preserving everything... There is an argument for keeping the >signal to noise ratio high enough that things stay useful. Yep, although one person's signal is another person's noise. :) - -Barry -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (GNU/Linux) iQIcBAEBCAAGBQJLK1aLAAoJEBJutWOnSwa/XHQP/2qaP2vXAOzTrIn6fHROGY2m 50e060p4NWICG5tAJmIH5hmD1oP/PtCtzmLMJNGKlZ/xovk8v5ej9Wo8KtmRoqfC pTApaaVY4aYGNorKLxgX78bHReaGXuEiHrl1R/+aFelyvknl2fv5u1AhCzDWJCJn a+o2+wDYLCU4ugYCQ6vxM2FY9AElZ2Mkt/IPXjxgZhMuNcbMDm+70eFLZS+xzhfX Kx1tvHJnNfwP5JNwssyavCoy7wsAqfr+RFYVg9i6gZJCQAyl3cp8UMf77lCmCqjZ jz8cb2eKdVM9BlNLGTunqruhtwf5jhLXA3Zl/PQ9ZXadzC8WpthVOUYH3eW7knDJ Q+d1m1ToyXitTYwPUhuiBfwRDzeOonqNVBg6hVnREDk+r2TWZIQ7G7koO+Evhhro WobkZ4II9J1JF9in6/7ArhTmmGM+MyxEpnDKxCOnd3c+3WYxuIqqzgZdJc5DJlc7 /GwluYqQAlQwiFIl5WCGy4DuYFz4RySSHreFULzROmKWucrXUet+58w43qaE1F+A /K1pvGr7KDxin8YXQpLjG0TCRomLOHLqfr0XIq6q/hfJjVQs+QVF8T5E+Lsy9Xw1 V4b9TLdp/qRPpyo3UeRgWvH2GvQzj3NeRCtxmcr0OUR0SCAEUADxXCXAf49nKBzo jYGLAClvuQYEEWG8Mz7u =Bh0A -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA256 On Dec 17, 2009, at 01:26 PM, Aaron Bentley wrote: >> Maybe I want to >> decide whether the work I had to do to land the code needs extra >> review. With a loom, there's no problem finding this. With a >> non-loom it's much more difficult especially if you've got several >> trunk merges interspersed. > >Sure, I can see the virtue of a stack-based approach if you want to view >the work separately. But this doesn't help me understand why you would >want trunk as the base thread. What happens if I update my trunk? In the loom-based approach, my bottom thread won't be updated until I explicitly take that step. In the branch based approach, all my branches will "see" the update. >I have thought about implementing a diff that ignores changes introduced >by merges. It's just a matter of tuits. That would definitely help. >> Updating the bottom thread and up-threading --auto falls into this. >> It's usually a trivial, inconsequential afterthought. Most changes >> on trunk don't affect my work, so I don't care about them. I'm >> merging trunk to be diligent. The fact that I can mentally segregate >> that to the bottom thread helps me ignore it completely in the common >> case, even if the end result is the same. > >I don't see how this lets you mentally segregate it to the bottom >thread. up-thread --auto affects all threads. Right, but it's the difference between thinking about it like: "oh, I'm just tracking trunk changes" to "I'm weaving in the trunk changes with my current work". I dunno, maybe I need to change my mental model, but to me there's a very distinct difference. >This is actually co-location of trees with their branches. You can >accomplish this with lightweight checkouts by putting the branch inside >the .bzr directory of the branch. > >$ bzr init foo >Created a standalone tree (format: 2a) > >$ bzr checkout foo bar >$ mkdir bar/.bzr/branches >$ mv foo bar/.bzr/branches/ >$ cd bar >$ bzr switch --force .bzr/branches/foo >Tree is up to date at revision 0. >Switched to branch: /home/abentley/sandbox/bar/.bzr/branches/foo/ Thanks, that helps a lot. I will definitely give this a shot for the next branch I'm working on. >Obviously, this is more steps than it should be, but it would be easy to >turn into a reconfigure operation. +1 >> I should note thought that there's a wart in looms related to this: >> export-loom. If I have to share my loom threads with others (e.g. a >> merge proposal), I have to export it into separate branches. > >You can also use import-loom to convert it to a pipeline, which will >preserve ordering information, so it can be used by lp-submit. Neat! - -Barry -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (GNU/Linux) iQIcBAEBCAAGBQJLK1Q5AAoJEBJutWOnSwa/Q74QAIr197c6mo81Y/BkO9V8F/ZK VRGxJdt2zmWa2TuZvytYtyxzw7lprxE7UqaOdrWLjrcNRtMsnHLXfVs6in+25mar zPhk214fiw0TGs6nvWq3m24SNB2WewgcxuXUe02t9jea899J+ObbllcFsHGuLOQF PAr1hWK9z5osw9uJFcO0YfeedQSQ4oX/HZpA2HlljVFzym3W2Ai5rUxZintV283g lpRJiRJbj5GA6Y7kuuWQF6l2Rv/bRrgF4YKg/GGi+CdG475sappCYnPJMKbYuOil QxXC0poT8k1enIwTFikaV04xSyg7CJF3vBZeQBjZ9ClXeADhzz02ZQ41EpB39UdW 4khzinw9TiZEf459w6LDR6iiqUh/lXSVdeA0h3Y00lRSzKsd1iUCiosMPKwuFpcA ZFuKIVlxCIzosGFrnfM8RT1JF6hFE+h6rga86aGs92JOUBUBJ9U5KtHZo5CPxuUx tiRAf/mNcm/Iozu1Km57xxfy9hDAHGK7QF/Mh7dCk3aM/MP3zeCdR/qtVlamfX3d me+o+iIUq4X1TgLGVlf9NcQTRAJmhjYYPYbaYFXYxu8PznJU5bQbVz82K+Ip8kGe F1mfDmP6cf38uMvkAc6eAwKQHfpxTyPl+ururJ5jWA/L8+YHUk3rMluzRrkbk7eG VggG9AkGT5lFsixDNlIv =CsJg -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Vincent Ladeuil wrote: > My point was (and is still) that the difference when using a loom > is that there is a point where you get a better control on how > the trunk is merged in each thread because the trunk is brought > "by the bottom", 'up-thread --auto' stops in case of conflicts > for a good reason. I understand and agree. > Putting that back in the udd context means that you get a chance > to resolve the conflicts from upstream (there shouldn't be any > since we do a pull and we can do that because we preserved the > starting point) before resolving the conflicts from each patch, > the conflicts from debian and finally the conflicts from ubuntu. That is fine with me, but do you have any comments on the original issue? The original discussion was about "down-thread; pull; up-thread -a" feeling more natural than "pull -d submit:; merge; commit;". It wasn't about the advantages of stacks when you have multiple lines of development, it was about the loom workflow feeling more natural even when you only had one line of development. Aaron -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAksrnckACgkQ0F+nu1YWqI0w/gCfSF7+/2l/ov+k/YbHkOfmcOFL u8oAnAiWnxLELt4x6yWQHa+N7oPuIWwO =XuGF -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Vincent Ladeuil wrote: > I knew it was going to be a long day :) > > So I made an mistake in my argumentation. Hurrah ! I was wrong, I > learned something new ! That was a good day finally :) Thanks to > Aaron and John for that. Sorry to make it feel like it was an attack. I honestly did want to understand why you felt it was different. > > Why I thought the merge was done in the other direction is still > a bit of a mystery[1]... but irrelevant to the discussion. ^- I think there is a missing footnote here :) > > So what I meant is shown below (you can paste the following in > bzrlib/tests/test_script.py and run > bzr selftest -s bt.test_script.TestGraphs). Easier to just cut off the $ and run in a real shell, but both work. > > More than two threads needs to be involved of course. > ... > > Gee, 13 and 14 commands respectively for the simplest example :-( > > My point was (and is still) that the difference when using a loom > is that there is a point where you get a better control on how > the trunk is merged in each thread because the trunk is brought > "by the bottom", 'up-thread --auto' stops in case of conflicts > for a good reason. So that is true, but it would be identical if you used 2 feature branches. And in fact, if I was trying to separate features like that, *I* would try to do it as: bzr init trunk bzr commit -m "trunk" --unchanged trunk bzr branch trunk vila bzr branch trunk jam bzr commit -m "vila1" vila bzr commit -m "jam1" jam --unchanged bzr commit -m "trunk2" --unchanged trunk bzr qlog trunk vila jam # Note that this is my argument for a DAG based loom/pipeline. As at # this point, you can decide your dependencies, and do cd vila bzr merge ../trunk; bzr commit -m "merge trunk to vila" cd ../jam # either bzr merge ../trunk; bzr commit -m "merge trunk to jam" # or bzr merge ../vila; bzr commit -m "merge vila(+trunk) to jam" You probably want to visualize this with: bzr qlog jam vila trunk Though bzr qlog trunk vila jam Looks interesting. Of course, separate branches play nicer with 'qlog' today, but I don't see any reason why qlog couldn't show the same graph and labels for threads that it shows for branches. Anyway, it depends on how much the 'vila' features are necessary for the 'jam' features, vs how independent they are. > > The graphs are different because more information is preserved in > the loom case, that's basically the same argumentation about > rebase or not rebase, these additional commits may seem spurious > but that's a different debate. > > Putting that back in the udd context means that you get a chance > to resolve the conflicts from upstream (there shouldn't be any > since we do a pull and we can do that because we preserved the > starting point) before resolving the conflicts from each patch, > the conflicts from debian and finally the conflicts from ubuntu. > Sure. Though it is the same if you use pipelines or split your commits into feature branches manually. I'll be honest, though. I'm starting to wonder if we really do want to preserve the extra history. I certainly have made comments that we don't want to write a system that makes a glorified "patch". Though honestly, what you really care about landing in upstream is a "change". In loom terminology, you really do only care about "bzr diff -rthread:" as that is what is going to be reviewed upstream. I guess the argument is for improved annotations. Though if you were diligent to create threads for each logical step, then you would have them. *And* they wouldn't be cluttered with "I'm done for tonight, restarting tomorrow". I used to think that all history should be immutable and preserved. However, I save all my emails, and usually I can't find what I want because I have to sift through 1000s of bogus ones. (Yes this is also an argument for improved search...) I am starting to think that history should be "immutable" but with the possibility of annotating it. Consider a commit: "Remove foo and bar making it 10x faster." That you could later annotate with: "Note: This was a *bad* idea, as it broke OS X and Windows and..." It would be nice to have that note at least referenced when looking at the original commit. As for preserving everything... There is an argument for keeping the signal to noise ratio high enough that things stay useful. Anyway, things have digressed far from the original comments. >Vincent > > P.S.: I don't attach the 40kB screenshots to preserve > electrons. If you don't have qbzr installed you can replace 'bzr > qlog' by 'bzr viz' (if you have bzr-gtk installed). And if you > have neither, well, I can send you the screenshots :0) > > John =:-> -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (Cygwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAksrmnkACgkQJdeBCYSNAANcdQCgjB2Z4JKIkQOJ0SjG7vg1bLv0 R3oAnRML3TzF/fr9/SJQM9TlUG7n/lmT =CcCN -END PGP SIGNATURE-
Re: Recipes vs. Looms vs. pipelines
I knew it was going to be a long day :) So I made an mistake in my argumentation. Hurrah ! I was wrong, I learned something new ! That was a good day finally :) Thanks to Aaron and John for that. Why I thought the merge was done in the other direction is still a bit of a mystery[1]... but irrelevant to the discussion. So what I meant is shown below (you can paste the following in bzrlib/tests/test_script.py and run bzr selftest -s bt.test_script.TestGraphs). More than two threads needs to be involved of course. class TestGraphs(script.TestCaseWithTransportAndScript): def test_with_loom(self): self.run_script(""" $ bzr init loom $ cd loom $ bzr nick trunk $ bzr loomify $ bzr commit -m trunk1 --unchanged $ bzr create-thread vila $ bzr commit -m vila1 --unchanged $ bzr create-thread jam $ bzr commit -m jam1 --unchanged # New upstream version $ bzr down-thread trunk $ bzr commit -m trunk2 --unchanged # Bring in new upstream $ bzr up-thread --auto $ bzr qlog """) def test_with_branches(self): self.run_script(""" $ bzr init trunk $ cd trunk $ bzr commit -m trunk1 --unchanged $ cd .. $ bzr branch trunk vilajam $ cd vilajam $ bzr commit -m vila1 --unchanged $ bzr commit -m jam1 --unchanged # New upstream version $ cd ../trunk $ bzr commit -m trunk2 --unchanged # Bring in new upstream $ cd ../vilajam $ bzr merge ../trunk $ bzr commit -m 'Merge trunk into branch' $ bzr qlog """) Gee, 13 and 14 commands respectively for the simplest example :-( My point was (and is still) that the difference when using a loom is that there is a point where you get a better control on how the trunk is merged in each thread because the trunk is brought "by the bottom", 'up-thread --auto' stops in case of conflicts for a good reason. The graphs are different because more information is preserved in the loom case, that's basically the same argumentation about rebase or not rebase, these additional commits may seem spurious but that's a different debate. Putting that back in the udd context means that you get a chance to resolve the conflicts from upstream (there shouldn't be any since we do a pull and we can do that because we preserved the starting point) before resolving the conflicts from each patch, the conflicts from debian and finally the conflicts from ubuntu. Vincent P.S.: I don't attach the 40kB screenshots to preserve electrons. If you don't have qbzr installed you can replace 'bzr qlog' by 'bzr viz' (if you have bzr-gtk installed). And if you have neither, well, I can send you the screenshots :0) -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Vincent Ladeuil wrote: >> "jam" == John Arbash Meinel writes: > > jam> Nope. You still have to merge it into your top thread and commit > that. > jam> So the history in the top thread is the same. > > Hmmm, for me, history == graph, the graphs are different, so the > histories are different. > > trunk -- my changes -- trunk merged >\ new trunk / > > trunk -- new trunk -- trunk merged >\ my changes / > > Different graphs. Same resulting trees. > > Another key difference between pulling trunk in the base thread > is that, when I use several threads and I do up-thread --auto, I > resolve the conflicts for each thread, in several steps > (partitioning the conflicts), which is generally easier and > cleaner. And again, since there are now several commits, I hope > we can more easily agree that the histories are even more > different ! > > Vincent > Maybe you and I are using different versions of bzr-loom. I just did this: bzr init test cd test bzr nick base bzr loomify bzr commit -m one --unchanged bzr create-thread next bzr commit -m next --unchanged bzr down-thread bzr commit -m "base two" --unchanged bzr up-thread --auto And it merged 'base two' into the 'next' thread, in the same way I would have done it, if I had done "bzr merge ../base; bzr commit". See the attached qlog screenshot. That clearly looks (to me) like trunk -- my changes -- trunk merged \ new trunk / John =:-> -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (Cygwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAksqlEIACgkQJdeBCYSNAANSZgCdHXv3j01+4oRENZjYJoFk+Mfq XYAAoJnW68qF2tA98dHonog1/xTlpic9 =MuYD -END PGP SIGNATURE- <>-- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Barry Warsaw wrote: > On Dec 16, 2009, at 3:15 PM, Aaron Bentley wrote: > It's all nice and neat and I can very easily find > exactly the changes between any two of those tasks. So, to have a fair comparison with a branch-based approach, let's consider a loom with two threads, one the base thread and one your actual development. In the loom case, you do "bzr diff -r thread:" to view the difference. In the branch case, you do "bzr diff -r submit:" to view the difference. I think the two are equally easy. > Maybe I want to > decide whether the work I had to do to land the code needs extra > review. With a loom, there's no problem finding this. With a > non-loom it's much more difficult especially if you've got several > trunk merges interspersed. Sure, I can see the virtue of a stack-based approach if you want to view the work separately. But this doesn't help me understand why you would want trunk as the base thread. I have thought about implementing a diff that ignores changes introduced by merges. It's just a matter of tuits. > Updating the bottom thread and up-threading --auto falls into this. > It's usually a trivial, inconsequential afterthought. Most changes > on trunk don't affect my work, so I don't care about them. I'm > merging trunk to be diligent. The fact that I can mentally segregate > that to the bottom thread helps me ignore it completely in the common > case, even if the end result is the same. I don't see how this lets you mentally segregate it to the bottom thread. up-thread --auto affects all threads. > Supporting the type of workflow I describe above in > core bzr would be a win. It's all about fitting the model I have for > developing software, which really boils down to: tell me what I > changed As above, I think the branch-base workflow does tell you what you changed. >, ignore what other people changed unless it affects my > change - -r submit: does this > and help me organize my changes into tasks. At that point, you want a stack, but it doesn't need to have a trunk thread. >>> One of the other things that just rubs me wrong about pipelines >>> is that they require lightweight checkouts. I can't explain it, >>> but lightweight checkouts have just never felt "right" to me. >> A loom essentially has a lightweight checkout-- it's just >> implemented differently. It is a working tree that you use "bzr >> switch" to switch between different named heads. > > But it feels heavyweight because my branches are right there in the > directory containing my working tree. If bzr-pipeline used heavyweight checkouts, you would still need to have branches somewhere else. It would just mean that the tree would have a copy of whatever branch you were currently working on. > I like this because there are > no extra directories to worry about, and I can delete the loom > directory in one rm-rf and be completely done with it. This is actually co-location of trees with their branches. You can accomplish this with lightweight checkouts by putting the branch inside the .bzr directory of the branch. $ bzr init foo Created a standalone tree (format: 2a) $ bzr checkout foo bar $ mkdir bar/.bzr/branches $ mv foo bar/.bzr/branches/ $ cd bar $ bzr switch --force .bzr/branches/foo Tree is up to date at revision 0. Switched to branch: /home/abentley/sandbox/bar/.bzr/branches/foo/ Obviously, this is more steps than it should be, but it would be easy to turn into a reconfigure operation. > I should note thought that there's a wart in looms related to this: > export-loom. If I have to share my loom threads with others (e.g. a > merge proposal), I have to export it into separate branches. You can also use import-loom to convert it to a pipeline, which will preserve ordering information, so it can be used by lp-submit. Aaron -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAksqd7kACgkQ0F+nu1YWqI0otQCcCVk0ODm2GSmQKaehK/FJE5Ib APsAn2YerKa4onpSqHhLjLlxcWhyBvHX =lyKu -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
> "jam" == John Arbash Meinel writes: jam> Nope. You still have to merge it into your top thread and commit that. jam> So the history in the top thread is the same. Hmmm, for me, history == graph, the graphs are different, so the histories are different. trunk -- my changes -- trunk merged \ new trunk / trunk -- new trunk -- trunk merged \ my changes / Different graphs. Same resulting trees. Another key difference between pulling trunk in the base thread is that, when I use several threads and I do up-thread --auto, I resolve the conflicts for each thread, in several steps (partitioning the conflicts), which is generally easier and cleaner. And again, since there are now several commits, I hope we can more easily agree that the histories are even more different ! Vincent -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Vincent Ladeuil wrote: >> "Aaron" == Aaron Bentley writes: > Aaron> In both cases, you are merging the same revision into > Aaron> the top thread. > > No. In both cases, you are merging from a mirror of trunk into the top thread. In the loom case, the mirror is the bottom thread. In the non-loom case, it is ../devel. If we assume that the mirrors are not stale when you merge, or are equally stale, then they will have the same tip revision as one another. Therefore, you are merging the same revision either way. > Aaron> In the loom case, you are using "up-thread -a" to > Aaron> merge from your base-thread mirror. > > Which has been updated by the pull. So up-thread --auto will > create new revisions by merging each thread on top of that, the > trunk starting as the left-hand parent No, trunk's tip will be a right-hand parent in the top thread and the last_revision in the bottom thread. Aaron -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAksqbaYACgkQ0F+nu1YWqI23gwCfS8b6RIDqqgE9IKzYw+imHDBk 6gYAn08LkqZj1DDMBl4s4EZZelazsH+a =6B/a -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
> "Aaron" == Aaron Bentley writes: Aaron> Vincent Ladeuil wrote: >>> "jam" == John Arbash Meinel writes: jam> Actually, those produce the exact same history. >> >> No. >> No. A base thread for trunk were I can pull and feature thread on >> top is enough. >> >> In one case I *pull* trunk in the base thread while in the other >> I *merge* trunk in the top thread. Aaron> In both cases, you are merging the same revision into Aaron> the top thread. No. Aaron> In the loom case, you are using "up-thread -a" to Aaron> merge from your base-thread mirror. Which has been updated by the pull. So up-thread --auto will create new revisions by merging each thread on top of that, the trunk starting as the left-hand parent Aaron> In the non-loom case, you are using "merge;commit" to Aaron> merge directly from trunk. Yes on top of the existing commits where the trunk will now be a right-hand parent. Aaron> How can the history be different if you're merging the Aaron> same revision into the same line-of-development? I'm not merging the same revision and I'm not merging in the same line-of-development either. Besides I strongly expect the histories to be different as the two operations *are* different and don't carry the same intent. Vincent -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
On Dec 17, 2009, at 8:40 AM, Vincent Ladeuil wrote: >> "barry" == Barry Warsaw writes: > > > >barry> loomnon-loom >barry> >barry> bzr down-thread rocketfuel bzr merge ../devel >barry> bzr pullbzr commit -m'Merge rocketfuel' >barry> bzr up-thread --auto > > Nice, I never put words on that but I share the feeling. In my > mental model the "loom way" is: let's restart what I'm doing > based on today's trunk, whereas the "non-loom" way is: let's see > what happen if I bring trunk into my branch. Yes. I think you've gotten pretty close to the mental model I have. -Barry -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
On Dec 16, 2009, at 4:58 PM, Aaron Bentley wrote: > There are a lot of similarities. Some more differences are: > - - automatic storing/restoring of uncommitted changes with switch-pipe. > - - uncommitted changes in another pipe can be merged. These are very definitely advantages of pipes. > I think that there are significant improvements to the command set: > > In loom, up-thread and down-thread are asymmetric. The analogue of > down-thread is switch-pipe, and the analogue of up-thread --auto is pump. > > The command for removing a pipe is called "remove-pipe", whereas the > command for removing a thread is called "combine-thread". > > pipeline has lp-submit to submit a merge proposal for a pipe to > Launchpad. It is impossible to submit a merge proposal for a thread to > launchpad, because threads aren't addressable. > > pipeline provides pipe-patches, to export the pipeline as a series of > patches. Ultimately what both pipes and looms gives me is a way to organize the subtasks I have to perform when developing a piece of software. They let me answer questions and produce output based on those subtasks instead of the more-granular revisions. Both looms and pipelines feel like bolt-ons to support this kind task-based workflow, so pulling those features and supporting those use-cases in core bzr would be a good long-term goal. -Barry -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
On Dec 16, 2009, at 4:12 PM, John Arbash Meinel wrote: > If we are discussing "what is an ideal tool to be building", creating > something that makes it easier to create a patch file doesn't seem ideal. Wholeheartedly agree. Patches are dead things, branches are alive. -Barry -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
On Dec 16, 2009, at 3:15 PM, Aaron Bentley wrote: >> I do miss this when working on non-loom branches, but of course a 'bzr merge >> ../devel' is the moral equivalent. It doesn't /feel/ the same though: >> >> loomnon-loom >> >> bzr down-thread rocketfuel bzr merge ../devel >> bzr pullbzr commit -m'Merge rocketfuel' >> bzr up-thread --auto > > I don't understand. The non-loom form is faster and requires fewer > commands. Why do you prefer the loom form? > > The pipeline version is even fewer commands: > > bzr pump --from-submit I know. I said it was difficult to explain! ;) I think Vincent came the closest to describing why the loom approach feels better than the non-loom (leaving out pipelines for the moment). With the loom approach, I can much better organize my thoughts and tasks. I have the thing I started with unchanged at the bottom. I have my initial work next. I have the results of my review next. Then I have any additional work I had to do to actually land the thing. It's all nice and neat and I can very easily find exactly the changes between any two of those tasks. Maybe I want to decide whether the work I had to do to land the code needs extra review. With a loom, there's no problem finding this. With a non-loom it's much more difficult especially if you've got several trunk merges interspersed. Updating the bottom thread and up-threading --auto falls into this. It's usually a trivial, inconsequential afterthought. Most changes on trunk don't affect my work, so I don't care about them. I'm merging trunk to be diligent. The fact that I can mentally segregate that to the bottom thread helps me ignore it completely in the common case, even if the end result is the same. > Also, note that you don't need "../devel" in most cases. Yep, that was mostly just for example purposes. >> See above for the specific answer: normal branches in fact do not feel as >> natural to me > > Okay, so just to telegraph this, you actually feel there are > deficiencies with a branch-based workflow. This is something that we > should try to fix in core bzr, and if we do, that should also fix pipelines. Yep, see above. Supporting the type of workflow I describe above in core bzr would be a win. It's all about fitting the model I have for developing software, which really boils down to: tell me what I changed, ignore what other people changed unless it affects my change, and help me organize my changes into tasks. >> One of the other things that just rubs me wrong about pipelines is that they >> require lightweight checkouts. I can't explain it, but lightweight checkouts >> have just never felt "right" to me. > > A loom essentially has a lightweight checkout-- it's just implemented > differently. It is a working tree that you use "bzr switch" to switch > between different named heads. But it feels heavyweight because my branches are right there in the directory containing my working tree. I like this because there are no extra directories to worry about, and I can delete the loom directory in one rm-rf and be completely done with it. I do this when my changes have landed. I should note thought that there's a wart in looms related to this: export-loom. If I have to share my loom threads with others (e.g. a merge proposal), I have to export it into separate branches. This is a bit ugly, but it's manageable because I export all my looms to a separate parent directory that I can easily delete once I'm done with it, and it's very easy for me to identify which loom directory the export is associated with (by name). So while I'm not crazy about this step, it's not a feature killer for me. -Barry -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Conflict resolution workflow (was Re: Recipes vs. Looms vs. pipelines)
BTW, this thread reminds me of a workflow wart that I'd like to get some advice on. Let's say I have a branch or loom or whatever, and I merge in all updates on the trunk that have happened since I started my branch. I get conflicts. I have to resolve these conflicts, but doing so may entail not insignificant amount of work. I'm sitting in a branch with lots of uncommitted changes due to the merge. I can't commit that until I've resolved the conflicts, but once I do, I have no way to know what part of that work came from the trunk merge and what part of the work came from my resolution of the conflicts. I would like to split this task into two parts. I want a revision that is the results of the merge of trunk, and a separate revision that includes just my changes to resolve the conflict. With that it would be much easier to identify, diff, review, and modify just the changes I had to make to resolve the conflict. It's entirely possible that I didn't resolve the conflict correctly the first time. Does bzr have tools to help me with this? -Barry -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Vincent Ladeuil wrote: >> "jam" == John Arbash Meinel writes: > > jam> Vincent Ladeuil wrote: > >>> "barry" == Barry Warsaw writes: > >> > >> > >> > barry> loomnon-loom > barry> > barry> bzr down-thread rocketfuel bzr merge ../devel > barry> bzr pullbzr commit -m'Merge rocketfuel' > barry> bzr up-thread --auto > >> > No. down-thread , pull, up-thread is the same as "bzr merge" - --auto will do a commit for you. How is the history different? > > jam> What you are describing "verbally" sounds a lot more > jam> like the rebase workflow. Where you bring in trunk at > jam> the 'bottom' of your changes and put them all on top. > > Yes, except for the history-lost part of rebase. > > jam> I guess if you have more than 1 feature thread the > jam> history might be different. > > No. A base thread for trunk were I can pull and feature thread on > top is enough. > > In one case I *pull* trunk in the base thread while in the other > I *merge* trunk in the top thread. That's enough to build > different histories. > > Vincent > Nope. You still have to merge it into your top thread and commit that. So the history in the top thread is the same. John -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (Cygwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAksqW+wACgkQJdeBCYSNAAOzfgCgqWTkgef1gU5kR3/qhsoHpTEy J8MAoLqfzEw5RQFPcm7hc+7UAFJMLBQF =TXoG -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Vincent Ladeuil wrote: >> "jam" == John Arbash Meinel writes: > jam> Actually, those produce the exact same history. > > No. > No. A base thread for trunk were I can pull and feature thread on > top is enough. > > In one case I *pull* trunk in the base thread while in the other > I *merge* trunk in the top thread. In both cases, you are merging the same revision into the top thread. In the loom case, you are using "up-thread -a" to merge from your base-thread mirror. In the non-loom case, you are using "merge;commit" to merge directly from trunk. How can the history be different if you're merging the same revision into the same line-of-development? Aaron -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAksqVmsACgkQ0F+nu1YWqI08ZACfbX3aEa0CbN6K1ZMSlfKJ7VXe vU4AnRcDaG2P7yTife2cY3hwodwuOm7q =5hNb -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
> "jam" == John Arbash Meinel writes: jam> Vincent Ladeuil wrote: >>> "barry" == Barry Warsaw writes: >> >> >> barry> loomnon-loom barry> barry> bzr down-thread rocketfuel bzr merge ../devel barry> bzr pullbzr commit -m'Merge rocketfuel' barry> bzr up-thread --auto >> >> Nice, I never put words on that but I share the feeling. In my >> mental model the "loom way" is: let's restart what I'm doing >> based on today's trunk, whereas the "non-loom" way is: let's see >> what happen if I bring trunk into my branch. >> >> Or said otherwise: one inject the new trunk from the bottom when >> the other inject it from the top. >> >> Of course the resulting tree is the same, but since they produce >> different histories, the resulting branches tend to behave a bit >> differently too when you start landing part of your work on the >> trunk and that you re-inject the trunk >> >> Vincent >> jam> Actually, those produce the exact same history. No. jam> What you are describing "verbally" sounds a lot more jam> like the rebase workflow. Where you bring in trunk at jam> the 'bottom' of your changes and put them all on top. Yes, except for the history-lost part of rebase. jam> I guess if you have more than 1 feature thread the jam> history might be different. No. A base thread for trunk were I can pull and feature thread on top is enough. In one case I *pull* trunk in the base thread while in the other I *merge* trunk in the top thread. That's enough to build different histories. Vincent -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Vincent Ladeuil wrote: >> "barry" == Barry Warsaw writes: > > > > barry> loomnon-loom > barry> > barry> bzr down-thread rocketfuel bzr merge ../devel > barry> bzr pullbzr commit -m'Merge rocketfuel' > barry> bzr up-thread --auto > > Nice, I never put words on that but I share the feeling. In my > mental model the "loom way" is: let's restart what I'm doing > based on today's trunk, whereas the "non-loom" way is: let's see > what happen if I bring trunk into my branch. > > Or said otherwise: one inject the new trunk from the bottom when > the other inject it from the top. > > Of course the resulting tree is the same, but since they produce > different histories, the resulting branches tend to behave a bit > differently too when you start landing part of your work on the > trunk and that you re-inject the trunk > > Vincent > Actually, those produce the exact same history. What you are describing "verbally" sounds a lot more like the rebase workflow. Where you bring in trunk at the 'bottom' of your changes and put them all on top. I guess if you have more than 1 feature thread the history might be different. John =:-> -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (Cygwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAksqPicACgkQJdeBCYSNAANyCQCgyvIfx6PE4Azt6+DvWjCPLMkX u7EAn3UkUWCADEhMvOS8sUVd8DhAgoFJ =9WGm -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
> "barry" == Barry Warsaw writes: barry> loomnon-loom barry> barry> bzr down-thread rocketfuel bzr merge ../devel barry> bzr pullbzr commit -m'Merge rocketfuel' barry> bzr up-thread --auto Nice, I never put words on that but I share the feeling. In my mental model the "loom way" is: let's restart what I'm doing based on today's trunk, whereas the "non-loom" way is: let's see what happen if I bring trunk into my branch. Or said otherwise: one inject the new trunk from the bottom when the other inject it from the top. Of course the resulting tree is the same, but since they produce different histories, the resulting branches tend to behave a bit differently too when you start landing part of your work on the trunk and that you re-inject the trunk Vincent -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Aaron Bentley wrote: > John Arbash Meinel wrote: >> AIUI, being able to share pipelines is not one of your goals. > > Pipelines can already be shared with the sync-pipeline command. They can, but you don't really collaborate on-the-pipeline in the same way that you *could* collaborate on-the-loom. Consider that the 'recipe' concept takes it to the extreme, where you just have a text file describing how to combine everything. > >>> With looms, you get a huge proliferation of threads. I think the only >>> real difference is that threads tend to be less visible than branches. >> True, though this is significant in itself. (possibly solved by >> colocated branches, but visibility of branches is a genuine UI issue.) > > Agreed. > >> Creating something that makes it easier to get a change integrated into >> upstream, and then reflected back in your workspace seems a lot better >> statement. > > Okay, I can agree with that. > >> You can get close if we made cherrypicking really smart, but I'm not >> sure how smart you can make it, or really what that design looks like. > > Even something only as smart as 'tla replay' would be a great improvement. So if we wanted to hack something in today, we could create a 'bzr cherrypick' plugin that just records the revisions being pulled across as revision properties, and then adds a 'bzr cherrypick-replay' that would be, essentially, tla replay. It can then grab 'find_unique_ancestors' and look for ones that are actually merged, and then replay accordingly. One could replay the early revs that aren't merged, to create a new BASE that has all the rest, and then 3-way merge from there. It would at least be a way to experiment with it. Note also that you can get 'rejected' revisions in this system as well. And if the existing ancestry + rejected ancestry + merged ancestry ended up as a full merge, it could mark it as such. I think part of the issue is figuring out how to communicate from the time you did merge/cherrypick until the time you run 'bzr commit' what happened. (temp file somewhere on disk describing what happened.) > >> A >> DAG based loom/pipeline is something relatively easy to articulate. As >> it is what I do today with a pure-branch based flow without the >> 'up-thread'/'pump' helpers. > > Right, and in this vein, package branches start to look a lot like > integration branches. > > Aaron Yep. John =:-> -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (Cygwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAkspaIUACgkQJdeBCYSNAAONUACeKZE7XWKoL82v45w8rH0dXZ3q qIUAn3ELtM4YaJtVJMe24cGpuvIcCPQ0 =29XE -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 John Arbash Meinel wrote: > AIUI, being able to share pipelines is not one of your goals. Pipelines can already be shared with the sync-pipeline command. >> With looms, you get a huge proliferation of threads. I think the only >> real difference is that threads tend to be less visible than branches. > > True, though this is significant in itself. (possibly solved by > colocated branches, but visibility of branches is a genuine UI issue.) Agreed. > Creating something that makes it easier to get a change integrated into > upstream, and then reflected back in your workspace seems a lot better > statement. Okay, I can agree with that. > You can get close if we made cherrypicking really smart, but I'm not > sure how smart you can make it, or really what that design looks like. Even something only as smart as 'tla replay' would be a great improvement. > A > DAG based loom/pipeline is something relatively easy to articulate. As > it is what I do today with a pure-branch based flow without the > 'up-thread'/'pump' helpers. Right, and in this vein, package branches start to look a lot like integration branches. Aaron -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAkspWuIACgkQ0F+nu1YWqI3WLgCfXd7JjOvz3d4leL5RnWtYMvRi 3pkAnRIZbPl4XQWOiXR78AT/xgLH3mLS =a49E -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 James Westby wrote: > I realise that there are other advantages, but choosing pipelines just > because they use real branches for the "threads," wouldn't be a wise > choice in my eyes. It's not something that can't fit in to the model > of looms, so we can always add it there. Right, it's not a trump card. But in my view, adding configuration data to threads basically makes them colocated branches, and having two kinds of branches that work very differently is unnecessarily complicated. > From my little understanding, I get the impression that pipelines are > more for organising your local work, rather than for collaboration > on a set of changes, which is why I haven't given them the attention > until now. However, it sounds like that may be more of an artifact of > not having co-located branches than part of the design. I wanted to focus on making pipelines a really good way of organizing local work. At the same time, I had noticed that people seemed to find the loom methods of collaboration confusing, saying thinks like "But *when* should I record?", and "why doesn't push work?". So I decided to do syncing using an unversioned list of pipes rather than a loom-style snapshot, and to provide a new "sync-pipeline" command instead of overriding push and pull. > I have just read http://wiki.bazaar.canonical.com/BzrPipeline, and > I feel like I understand the workflow a little better now. To my > reading it differs little from loom though, different analogy, > "push" rather than "pull" Actually, "sync-pipeline" rather than "push" or "pull". >, branches not proto-branches. Am I missing > something? There are a lot of similarities. Some more differences are: - - automatic storing/restoring of uncommitted changes with switch-pipe. - - uncommitted changes in another pipe can be merged. I think that there are significant improvements to the command set: In loom, up-thread and down-thread are asymmetric. The analogue of down-thread is switch-pipe, and the analogue of up-thread --auto is pump. The command for removing a pipe is called "remove-pipe", whereas the command for removing a thread is called "combine-thread". pipeline has lp-submit to submit a merge proposal for a pipe to Launchpad. It is impossible to submit a merge proposal for a thread to launchpad, because threads aren't addressable. pipeline provides pipe-patches, to export the pipeline as a series of patches. Aaron -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAkspWAkACgkQ0F+nu1YWqI14zgCeLFoRPzBRVSGqq+sIb/WfAafg enoAn1etdoa6S87JY9VcvWonSzd7UT3t =yEOz -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Aaron Bentley wrote: > John Arbash Meinel wrote: >> Aaron Bentley wrote: >> I would mention that for packaging, I think you really do want to have >> 'upstream' as the first thread, which doesn't work with the pipeline >> model, since a given branch can only participate in one pipeline. > > With looms, this works because the loom thread is a mirror of upstream. > The analogue with pipeline is to have a mirror of upstream in the pipeline. > >> Going further, that also is a fairly significant difference between the >> *goals* of looms versus pipelines. > > You didn't actually name differences in the goals, so it's hard to > respond to this. AIUI, being able to share pipelines is not one of your goals. > >> Namely, I think "recipes" wants to be >> able to share a branch as part of the build process. Otherwise you end >> up with a huge proliferation of branches. (I want to build Foo with all >> these Ubuntu patches, and just add my one patch at the end.) > > With looms, you get a huge proliferation of threads. I think the only > real difference is that threads tend to be less visible than branches. True, though this is significant in itself. (possibly solved by colocated branches, but visibility of branches is a genuine UI issue.) ... >> Thinking about the 'ideal' workflow, I don't think having a tool that >> lets you get to the point where you can create a nice patch and apply >> it, is the ideal end goal of packaging and UDD. > > I'm not sure what you mean here. Without a DAG, if you want out-of-order selection of changes, then you need cherrypicking. This is often done as a diff + patch. (Or bzr merge with a range, but that is effectively a slightly smarter diff + patch.) If we are discussing "what is an ideal tool to be building", creating something that makes it easier to create a patch file doesn't seem ideal. Creating something that makes it easier to get a change integrated into upstream, and then reflected back in your workspace seems a lot better statement. So having the stack broken, which allows upstream to 'bzr merge' just one thread/pipe/branch without getting the other unwanted changes, which then comes in through your upstream branch, and bubbles up naturally (without conflicting from duplicate changes, etc.) You can get close if we made cherrypicking really smart, but I'm not sure how smart you can make it, or really what that design looks like. A DAG based loom/pipeline is something relatively easy to articulate. As it is what I do today with a pure-branch based flow without the 'up-thread'/'pump' helpers. > >> I suppose the other alternative is to do better cherrypicking support in >> bzr, though they are a bit orthogonal. (You'll always want better >> cherrypicking support, as you won't always have factored everything out >> cleanly at first, etc.) > > +1 on better cherrypicking support. > > Aaron I find the biggest problem being defining what "better" really means. In terms of data representation, and actual effect. We can say "we should be able to do better than this", but the details are really quite difficult. John =:-> -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (Cygwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAkspTVQACgkQJdeBCYSNAANsMQCeKBHvJH8XjvoUlv5Und51c5eB 8xYAn0HlMqKazzdYCJ7US43G31dVUCG2 =FGP8 -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Barry Warsaw wrote: > On Dec 16, 2009, at 02:20 PM, Aaron Bentley wrote: > >> Barry Warsaw wrote: >>> When I'm developing bug fix or feature branches, I >>> always like to have the devel branch as the bottom thread in my loom. Note >>> too though that I want control over when I update the bottom thread >>> independently of when I update the devel branch. >> What advantages does that gives you? Do you find you miss those when >> working on non-loom branches? > > It allows me to very easily merge changes that are happening all the time on > devel with my feature or bug fix, but on my schedule. I don't understand what the advantage of a loom over a branch is. The merge should be just as easy with a branch. A branch should also allow you to do it on your schedule. > I might update the > Launchpad devel branch while I'm in the middle of my bug fix, for various > reasons (e.g. I'm working on more than one branch at a time, I want to see how > "pristine" trunk works, etc.). When my branch is ready for review, I want to > pull in devel's updates and merge them up my stack. Again, I don't understand how this is any different with a branch. > I do miss this when working on non-loom branches, but of course a 'bzr merge > ../devel' is the moral equivalent. It doesn't /feel/ the same though: > > loomnon-loom > > bzr down-thread rocketfuel bzr merge ../devel > bzr pullbzr commit -m'Merge rocketfuel' > bzr up-thread --auto I don't understand. The non-loom form is faster and requires fewer commands. Why do you prefer the loom form? The pipeline version is even fewer commands: bzr pump --from-submit Also, note that you don't need "../devel" in most cases. >>> This is something that feels more natural to me in looms than in pipelines. >> bzr-pipeline is meant to allow you to use your normal development habits >> as much as possible. In fact, a normal branch is also a pipeline with a >> single pipe. When you are normally working on a normal branch, the lack >> of an upstream pipe should feel perfectly natural, so why does it feel >> less natural when you add a second pipe? > > See above for the specific answer: normal branches in fact do not feel as > natural to me Okay, so just to telegraph this, you actually feel there are deficiencies with a branch-based workflow. This is something that we should try to fix in core bzr, and if we do, that should also fix pipelines. > One of the other things that just rubs me wrong about pipelines is that they > require lightweight checkouts. I can't explain it, but lightweight checkouts > have just never felt "right" to me. A loom essentially has a lightweight checkout-- it's just implemented differently. It is a working tree that you use "bzr switch" to switch between different named heads. Aaron -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAkspP/IACgkQ0F+nu1YWqI2HgwCdEWc5NOPfFBlCAHNdKJb1IlpM hL4An3Z7zpe4XBFKTxeZZfFOuwlScuVX =/Vx0 -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA256 On Dec 16, 2009, at 02:21 PM, Aaron Bentley wrote: >Barry Warsaw wrote: >> We talked in other threads about hiding those pipeline >> branches so they don't look like siblings in my shared repo directory. That >> would help a lot. > >That's already possible. Is there something holding you back? Not really. I remember you mentioning that this is possible now, so I'll make sure to give pipelines another try with this in mind. Thanks, - -Barry -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (GNU/Linux) iQIcBAEBCAAGBQJLKTkRAAoJEBJutWOnSwa/I7AQAJ2Q1e2rbMwONcta1ibkYJKV RoSz9l6yw51IUd/mkBkul1SE2aiNAYK1ectwa059iaRx5hVqfUr4246ebo0/6vRc Q9AQHgc0tBHf+fT8Q12tTpbiPBUSqGqvZsZi23vqBNZggwy3PWOU/coqEoGdX2uK ij+S0+nwYgjWqEI6Rw/xuSTL4OddvCEwRNeqZfNZJMWDpsI/CS7R6Dl9IYWGmOlf V5t5xijbZsHnViVwOodtqWs+ru/RQ/BYm6ScjFGYS21tpzinFCE23t0MucpElh5e jmEPlpFHO4oykKBWyWETswxsleLWlaRyd57FrRR/m5SYe/BMoADDSnVF6Ar7+1d/ y0iixHo9lVE4PRFjorp3VtF1k3gyCnqo10HQozXfWglRwP2oPRUGVILrJrZJ8zsv 2lJg8zFNEVhQZPle8JtaMoemwQsLA8bD2nQvX1gaqX+t35inaITyqTl/lqKtLRxU JapIMz4ywXMsqqMiFinBAJoaIB7v5h8slIH2WK5LoKmpRMRmGtz0CIl11XGY9+Wn WjjjThyDoPjjpmgMsycw9OkeApIyUXzkerOeeGtLvGlSjFSq1pHpbSXuzEsOuqny h2kdXbWIBJ4raZSwaNAHQlhS1ujwUNfSVnlZ1xIS0LwZ2OptHMcm/0q9EQXPNjSF t+m654brwT4vyg5CwF0s =IODu -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA256 On Dec 16, 2009, at 02:20 PM, Aaron Bentley wrote: >Barry Warsaw wrote: >> When I'm developing bug fix or feature branches, I >> always like to have the devel branch as the bottom thread in my loom. Note >> too though that I want control over when I update the bottom thread >> independently of when I update the devel branch. > >What advantages does that gives you? Do you find you miss those when >working on non-loom branches? It allows me to very easily merge changes that are happening all the time on devel with my feature or bug fix, but on my schedule. I might update the Launchpad devel branch while I'm in the middle of my bug fix, for various reasons (e.g. I'm working on more than one branch at a time, I want to see how "pristine" trunk works, etc.). When my branch is ready for review, I want to pull in devel's updates and merge them up my stack. I do miss this when working on non-loom branches, but of course a 'bzr merge ../devel' is the moral equivalent. It doesn't /feel/ the same though: loomnon-loom - bzr down-thread rocketfuel bzr merge ../devel bzr pullbzr commit -m'Merge rocketfuel' bzr up-thread --auto >> This is something that feels more natural to me in looms than in pipelines. > >bzr-pipeline is meant to allow you to use your normal development habits >as much as possible. In fact, a normal branch is also a pipeline with a >single pipe. When you are normally working on a normal branch, the lack >of an upstream pipe should feel perfectly natural, so why does it feel >less natural when you add a second pipe? See above for the specific answer: normal branches in fact do not feel as natural to me, though I often forgo looms for expediency when I'm working on a simple or quick fix. It's a decision I have to make upfront and I don't always get it right (for example, the branch becomes more complex than I expected, or I get distracted in the middle of it for a few days). One of the other things that just rubs me wrong about pipelines is that they require lightweight checkouts. I can't explain it, but lightweight checkouts have just never felt "right" to me. - -Barry -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (GNU/Linux) iQIcBAEBCAAGBQJLKTi/AAoJEBJutWOnSwa/HDwP/3xil6KGRLm/TC8Nc2zG6sM1 OO1T+wsk6ITgrCkEWhKHB4QTemv3G9kppPxIbYPyYpc8KQUpnk5bJ/JRr6ntHeLV UiNB55FiPHidE2EmcaIwUrmUvJFHaugOnsng0oTzGgpLsiznott1pzPx+zkZ6EYd ouPHIOPzEQUe3O3Y7cVu6NhVKxN011qXcFoH5+DY3DICT1e65WLkw/lCD6dfuJ1p Tr2lyZYZulGDHt059wlMK0eSYSz8xtOrJhrJj/pd05rFNdB/WO8J5nkqxiEr3k6u UnJR+NlFeDTw+wG6caGHq8/7IBm08OiKfb/Ib3VtCrK88WefRce8dV9ZnggB0lvP tuSyTUYG5fcnHTVC8GZ+UzwqxvkLGd2XtSJiGwWR8f9EnBDrgxz4afN+9tEDZRCf 6QO9PVYvGUA2ZAlo1cdjFMd9v2rMCddhhgyIRsKrYFkFbj7zWUgD/prTGdzr1VBH tsYPJIi8PmImkqSAi9FkCTMWsaSLaH7RiJPSUgolQaIH98X8MwWEfKWeSVzGy6oS BsieKx8dpCZSeIzuP4z9x8lt7xpQeEMKsAz41vH1fuVtAjpjTH+WXt0T5FqVUerg LRO5uYnQYUwtSq4dTFjU+33VCz3CCXdaaNjHb5HE94a2EFl1ZnEIvCKV3E6cnxP5 ldr/7dBH85H1PcAzmRIg =e04o -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Barry Warsaw wrote: > We talked in other threads about hiding those pipeline > branches so they don't look like siblings in my shared repo directory. That > would help a lot. That's already possible. Is there something holding you back? Aaron -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAkspM0cACgkQ0F+nu1YWqI0M3gCeO8Bck9/YDO1oKsqMwbYYrrRJ 1AUAn0uFulWsGC/55ALbP2v7fTENco3S =75S5 -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Barry Warsaw wrote: > When I'm developing bug fix or feature branches, I > always like to have the devel branch as the bottom thread in my loom. Note > too though that I want control over when I update the bottom thread > independently of when I update the devel branch. What advantages does that gives you? Do you find you miss those when working on non-loom branches? > This is something that feels more natural to me in looms than in pipelines. bzr-pipeline is meant to allow you to use your normal development habits as much as possible. In fact, a normal branch is also a pipeline with a single pipe. When you are normally working on a normal branch, the lack of an upstream pipe should feel perfectly natural, so why does it feel less natural when you add a second pipe? Aaron -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAkspMuAACgkQ0F+nu1YWqI3aUwCfQ0XdB0FiJJ4WMtlxjaWFvvs9 PfwAn2id3LPcOsZvtILPczLpM4Ga2R2C =mK3N -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
On Dec 16, 2009, at 01:28 PM, Aaron Bentley wrote: >With looms, you get a huge proliferation of threads. I think the only >real difference is that threads tend to be less visible than branches. For me, that was a big difference and one of the reasons I currently favor looms over pipelines. We talked in other threads about hiding those pipeline branches so they don't look like siblings in my shared repo directory. That would help a lot. -Barry signature.asc Description: PGP signature -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
On Dec 15, 2009, at 11:15 AM, John Arbash Meinel wrote: >I would mention that for packaging, I think you really do want to have >'upstream' as the first thread, which doesn't work with the pipeline >model, since a given branch can only participate in one pipeline. Not just for packaging. When I'm developing bug fix or feature branches, I always like to have the devel branch as the bottom thread in my loom. Note too though that I want control over when I update the bottom thread independently of when I update the devel branch. This is something that feels more natural to me in looms than in pipelines. >Which (IMO) is something that pushes for having a real DAG in the loom >state, rather than just a stack model. As it means you can push *just >this thread* into upstream, and have them merge it, without them having >to merge all of your other changes. Otherwise the loom is just there to >help you develop the patch. And then you throw away all the history once >the patch gets applied to upstream. I'm being more convinced of this as these discussions proceed. Having a DAG would, I think, resolve some of the trickier branches I've developed with looms. I agree with James that the ui is difficult though. -Barry signature.asc Description: PGP signature -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 John Arbash Meinel wrote: > Aaron Bentley wrote: > I would mention that for packaging, I think you really do want to have > 'upstream' as the first thread, which doesn't work with the pipeline > model, since a given branch can only participate in one pipeline. With looms, this works because the loom thread is a mirror of upstream. The analogue with pipeline is to have a mirror of upstream in the pipeline. > Going further, that also is a fairly significant difference between the > *goals* of looms versus pipelines. You didn't actually name differences in the goals, so it's hard to respond to this. > Namely, I think "recipes" wants to be > able to share a branch as part of the build process. Otherwise you end > up with a huge proliferation of branches. (I want to build Foo with all > these Ubuntu patches, and just add my one patch at the end.) With looms, you get a huge proliferation of threads. I think the only real difference is that threads tend to be less visible than branches. > Which (IMO) is something that pushes for having a real DAG in the loom > state, rather than just a stack model. > You'd run into the same issue with pipelines, since they are also a > simple stack. This is something that's been requested for pipelines as well. I have similar concerns to the ones James expressed about a DAG being harder to work with, but I'm still considering it. > Thinking about the 'ideal' workflow, I don't think having a tool that > lets you get to the point where you can create a nice patch and apply > it, is the ideal end goal of packaging and UDD. I'm not sure what you mean here. > I suppose the other alternative is to do better cherrypicking support in > bzr, though they are a bit orthogonal. (You'll always want better > cherrypicking support, as you won't always have factored everything out > cleanly at first, etc.) +1 on better cherrypicking support. Aaron -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAkspJrkACgkQ0F+nu1YWqI1NKwCeKA78u8SYEwnWXy0WhDdJIEWf nvAAn0zWvmkTUWGXOwcz5/2lQENbi/WM =B5Us -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
On Tue Dec 15 16:54:14 + 2009 Aaron Bentley wrote: > -BEGIN PGP SIGNED MESSAGE- > Hash: SHA1 > > James Westby wrote: > > There are discussions about whether the "stack" model presented > > by loom is the best, as it entagles threads that don't necessarily > > have a dependency. There are alternative models proposed, including > > a full DAG as implemented by TopGit. My fear is that they are > > too complicated for people to easily grasp, and that they are > > not the best way to solve the problems they aim to. > > > Looms on the other hand currently have no parent pointers > > per-thread. > > If you want something that implements the stack model and provides > parent pointers, we have that in bzr-pipeline. It doesn't provide the > same single-glob approach as loom, but that is mainly because bzr > doesn't yet provide colocated branches. We do want to add that support, > so maybe now is a good time to do it. > > > Looms are currently available in the bzr-loom plugin, but it > > is generally agreed that this needs some polish to be really > > usable. > > bzr-pipeline is definitely already usable. I use it daily, and it has > other fans, like rockstar and thumper. It is also under active development. > > > Looms also allow for versioning at the loom level, as well > > as at the revision level. This means that it is possible > > to merge a loom as a whole, including operations that > > add and delete threads. This is crucial to building a > > packaging system on top of them. > > These features are enbryonic in loom, and they could be added to > bzr-pipeline. Hi Aaron, Thanks for bring up pipelines, I haven't investigated them sufficiently before now. I realise that there are other advantages, but choosing pipelines just because they use real branches for the "threads," wouldn't be a wise choice in my eyes. It's not something that can't fit in to the model of looms, so we can always add it there. Having said that, I would be wrong to dismiss pipelines without a fair comparison, so let's do that. >From my little understanding, I get the impression that pipelines are more for organising your local work, rather than for collaboration on a set of changes, which is why I haven't given them the attention until now. However, it sounds like that may be more of an artifact of not having co-located branches than part of the design. I have just read http://wiki.bazaar.canonical.com/BzrPipeline, and I feel like I understand the workflow a little better now. To my reading it differs little from loom though, different analogy, "push" rather than "pull", branches not proto-branches. Am I missing something? That would then give points in favour of pipelines: * currently more actively maintained * real branches * more daily users (?) And in favour of looms: * currently able to make lp:ubuntu/foo a loom (co-located branches would nullify this) * Merging across the set is partly implemented. Is there anything else you would add? Thanks, James -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Aaron Bentley wrote: ... >> Looms are currently available in the bzr-loom plugin, but it >> is generally agreed that this needs some polish to be really >> usable. > > bzr-pipeline is definitely already usable. I use it daily, and it has > other fans, like rockstar and thumper. It is also under active development. > >> Looms also allow for versioning at the loom level, as well >> as at the revision level. This means that it is possible >> to merge a loom as a whole, including operations that >> add and delete threads. This is crucial to building a >> packaging system on top of them. > > These features are enbryonic in loom, and they could be added to > bzr-pipeline. > > Aaron I would mention that for packaging, I think you really do want to have 'upstream' as the first thread, which doesn't work with the pipeline model, since a given branch can only participate in one pipeline. Going further, that also is a fairly significant difference between the *goals* of looms versus pipelines. Namely, I think "recipes" wants to be able to share a branch as part of the build process. Otherwise you end up with a huge proliferation of branches. (I want to build Foo with all these Ubuntu patches, and just add my one patch at the end.) Which (IMO) is something that pushes for having a real DAG in the loom state, rather than just a stack model. As it means you can push *just this thread* into upstream, and have them merge it, without them having to merge all of your other changes. Otherwise the loom is just there to help you develop the patch. And then you throw away all the history once the patch gets applied to upstream. You'd run into the same issue with pipelines, since they are also a simple stack. Thinking about the 'ideal' workflow, I don't think having a tool that lets you get to the point where you can create a nice patch and apply it, is the ideal end goal of packaging and UDD. I suppose the other alternative is to do better cherrypicking support in bzr, though they are a bit orthogonal. (You'll always want better cherrypicking support, as you won't always have factored everything out cleanly at first, etc.) John =:-> -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (Cygwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAksnxEYACgkQJdeBCYSNAAP/WwCgp39aN7bi3oSbfobEPR/KJwNl XP0AnjDDNWwt0eVV1JEWI64QxGWQXYQi =dBBa -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel
Re: Recipes vs. Looms vs. pipelines
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 James Westby wrote: > There are discussions about whether the "stack" model presented > by loom is the best, as it entagles threads that don't necessarily > have a dependency. There are alternative models proposed, including > a full DAG as implemented by TopGit. My fear is that they are > too complicated for people to easily grasp, and that they are > not the best way to solve the problems they aim to. > Looms on the other hand currently have no parent pointers > per-thread. If you want something that implements the stack model and provides parent pointers, we have that in bzr-pipeline. It doesn't provide the same single-glob approach as loom, but that is mainly because bzr doesn't yet provide colocated branches. We do want to add that support, so maybe now is a good time to do it. > Looms are currently available in the bzr-loom plugin, but it > is generally agreed that this needs some polish to be really > usable. bzr-pipeline is definitely already usable. I use it daily, and it has other fans, like rockstar and thumper. It is also under active development. > Looms also allow for versioning at the loom level, as well > as at the revision level. This means that it is possible > to merge a loom as a whole, including operations that > add and delete threads. This is crucial to building a > packaging system on top of them. These features are enbryonic in loom, and they could be added to bzr-pipeline. Aaron -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAksnvzIACgkQ0F+nu1YWqI2c3QCfTIYP4JAbYm2GzmRHvtTCRcTx KOIAmgOyOKNshnArCZZFkUPxcyQbMUXt =UxX7 -END PGP SIGNATURE- -- ubuntu-distributed-devel mailing list ubuntu-distributed-devel@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-distributed-devel