* Re: : Networking [not found] <20050425214326.512b006e.davem@davemloft.net> @ 2005-04-26 7:57 ` Andrew Morton 2005-04-26 14:59 ` Linus Torvalds ` (2 more replies) 0 siblings, 3 replies; 13+ messages in thread From: Andrew Morton @ 2005-04-26 7:57 UTC (permalink / raw) To: David S. Miller; +Cc: torvalds, git "David S. Miller" <davem@davemloft.net> wrote: > > Linus, please pull from: > > rsync://rsync.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.git So I tried to apply my new get-mm-patches-from-git methodology on this and came unstuck. -mm kernels consist of a series of patches against the most recent release (2.6.12-rc3 today): linus.patch (Linus' changes since 2.6.12-rc3) git-net.patch (Davem's changes wrt Linus's latest tree) etc... The algorithm is: a) Set up the git repo mkdir git26 git init rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git (Futz around in `git log' output to identify the v2.6.12-rc3 commit, do `git tag v2.6.12-rc3 a2755a80f40e5794ddc20e00f781af9d6320fafb') b) Add davem's repo: git addremote git-net rsync://rsync.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.git c) To generate -mm's linus.patch (patch against 2.6.12-rc3): git pull origin git diff -r v2.6.12-rc3 > ../25/patches/linus.patch d) To generate davem's tree (patch against linus's current tree (ie: patch against 2.6.12-rc3+linus.patch)): git pull git-net MERGE_BASE=$(merge-base $(cat .git/heads/origin ) $(cat .git/heads/git-net)) git diff -r $MERGE_BASE:$(cat .git/heads/git-net) > ../25/patches/git-net.patch e) Repeat d) for all known git trees. But git-net.patch has a bunch of bluetooth stuff in it which is already in Linus's tree. And git-net.patch modifies net/sched/simple.c, which doesn't appear in either 2.6.12-rc3 or in current -linus. Doing step d) by hand: bix:/usr/src/git26> cat .git/heads/origin b453257f057b834fdf9f4a6ad6133598b79bd982 bix:/usr/src/git26> cat .git/heads/git-net 5523662c4cd585b892811d7bb3e25d9a787e19b3 bix:/usr/src/git26> merge-base b453257f057b834fdf9f4a6ad6133598b79bd982 5523662c4cd585b892811d7bb3e25d9a787e19b3 25ee7e3832951cf5896b194f6cd929a44863f419 bix:/usr/src/git26> cat-file commit 25ee7e3832951cf5896b194f6cd929a44863f419 tree 5b6486ded5188e41ac9bc81ad4a5e2bd746f7ede parent 056de2fa12febe02597f971eb6ea8f2cc9c9b06e author Adrian Bunk <bunk@stusta.de> 1114442294 -0700 committer Linus Torvalds <torvalds@ppc970.osdl.org> 1114442294 -0700 [PATCH] fs/aio.c: make some code static This patch makes some needlessly global code static. Signed-off-by: Adrian Bunk <bunk@stusta.de> Acked-by: Benjamin LaHaise <bcrl@kvack.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org> That seems to be a reasonable gca. It's the last thing which Linus added prior to merging the ARM patches, which presumably weren't in Dave's tree. So let's try to grab davem's diff wrt that gca: bix:/usr/src/git26> git diff -r 25ee7e3832951cf5896b194f6cd929a44863f419:5523662c4cd585b892811d7bb3e25d9a787e19b3 | diffstat drivers/net/tg3.c | 73 ++++++++++++++------------- net/bluetooth/af_bluetooth.c | 1 net/bluetooth/bnep/sock.c | 1 net/bluetooth/cmtp/capi.c | 1 net/bluetooth/cmtp/core.c | 1 net/bluetooth/cmtp/sock.c | 1 net/bluetooth/hci_conn.c | 1 net/bluetooth/hci_core.c | 1 net/bluetooth/hci_event.c | 1 net/bluetooth/hci_sock.c | 1 net/bluetooth/hidp/core.c | 1 net/bluetooth/hidp/sock.c | 1 net/bluetooth/l2cap.c | 1 net/bluetooth/rfcomm/sock.c | 1 net/bluetooth/sco.c | 1 net/core/rtnetlink.c | 1 net/core/scm.c | 1 net/core/sock.c | 1 net/ipv4/af_inet.c | 1 net/ipv4/ip_output.c | 2 net/ipv4/netfilter/ip_conntrack_ftp.c | 4 - net/ipv4/netfilter/ip_conntrack_standalone.c | 7 -- net/ipv4/tcp_input.c | 1 net/ipv6/af_inet6.c | 1 net/netlink/af_netlink.c | 1 net/sched/simple.c | 18 ------ net/unix/af_unix.c | 1 27 files changed, 46 insertions(+), 80 deletions(-) And that's the bad patch. What did I do wrong? Can someone suggest a better approach? Thanks. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: : Networking 2005-04-26 7:57 ` : Networking Andrew Morton @ 2005-04-26 14:59 ` Linus Torvalds 2005-04-26 15:40 ` Daniel Barkalow 2005-04-26 17:19 ` Jan Harkes 2005-04-26 18:33 ` Petr Baudis 2 siblings, 1 reply; 13+ messages in thread From: Linus Torvalds @ 2005-04-26 14:59 UTC (permalink / raw) To: Andrew Morton; +Cc: David S. Miller, git On Tue, 26 Apr 2005, Andrew Morton wrote: > > So I tried to apply my new get-mm-patches-from-git methodology on this and > came unstuck. Yes. You cannot just apply patches, since that will inevitably fail if there is any overlap. Which there quite often is. For this to work in general, you really have to merge the different git trees, and generate patches from _that_. > a) Set up the git repo > > mkdir git26 > git init rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git Yes. In the long run, you really should need to do this just once, since if there is one thing git should be good at, it's just keeping tons of random collections of objects around. The only thing you should be a bit careful about is to remember what the "heads" at different points were. In particular, you want to remember where you merged with me last was. I've started tagging my releases with the git tag facility (_not_ the pasky one, but I think pasky will start picking up on that soon enough), so finding a specific release will be easy, but if you ever do a non-release merge you'll just have to tag it yourself. > b) Add davem's repo: > > git addremote git-net rsync://rsync.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.git > > c) To generate -mm's linus.patch (patch against 2.6.12-rc3): > > git pull origin > git diff -r v2.6.12-rc3 > ../25/patches/linus.patch You should now also remember the HEAD at this point. That's your "base" for any future patches, since you expect other patches to apply on top of that. I think cogito remembers it in the "origin" thing, but you should check. Save it away in (for example) .git/last-diff-head: cat .git/HEAD > .git/last-diff-head > d) To generate davem's tree (patch against linus's current tree (ie: patch > against 2.6.12-rc3+linus.patch)): > > git pull git-net Yes. This should have merged the two (assuming "git pull" does what I think it does). > MERGE_BASE=$(merge-base $(cat .git/heads/origin ) $(cat .git/heads/git-net)) > git diff -r $MERGE_BASE:$(cat .git/heads/git-net) > ../25/patches/git-net.patch No. Now you ended up looking at the last common ancestor of the thing you merged, and you _should_ have looked at what the difference was _before_ the merge. So assuming it does remember it in "origin", you should just have done git diff -r $(cat .git/last-diff-head):$(cat .git/HEAD) which basically says "diff between the tree at the time of my last diff, and the result of the merge". Then you just update your last-diff-head to reflect that: cat .git/HEAD > .git/last-diff-head and you go on: > e) Repeat d) for all known git trees. Yup. Linus ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: : Networking 2005-04-26 14:59 ` Linus Torvalds @ 2005-04-26 15:40 ` Daniel Barkalow 2005-04-26 18:15 ` Petr Baudis 0 siblings, 1 reply; 13+ messages in thread From: Daniel Barkalow @ 2005-04-26 15:40 UTC (permalink / raw) To: Linus Torvalds; +Cc: Andrew Morton, David S. Miller, git On Tue, 26 Apr 2005, Linus Torvalds wrote: > On Tue, 26 Apr 2005, Andrew Morton wrote: > > > > The only thing you should be a bit careful about is to remember what the > "heads" at different points were. In particular, you want to remember > where you merged with me last was. I've started tagging my releases with > the git tag facility (_not_ the pasky one, but I think pasky will start > picking up on that soon enough), so finding a specific release will be > easy, but if you ever do a non-release merge you'll just have to tag it > yourself. Your tag system is in the "cogito-0.8" release, plus a pasky-style way of keeping track of what tags you have in your repository. > > d) To generate davem's tree (patch against linus's current tree (ie: patch > > against 2.6.12-rc3+linus.patch)): > > > > git pull git-net > > Yes. This should have merged the two (assuming "git pull" does what I > think it does). I think git pull only downloads the contents of the repo and saves the new head in a separate file. You're left to do the merge yourself, in case what you actually wanted to do was just read the patches in the remote repo without merging them. You probably need a "git merge git-net" here, and things will be in the state that Linus expects. -Daniel *This .sig left intentionally blank* ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: : Networking 2005-04-26 15:40 ` Daniel Barkalow @ 2005-04-26 18:15 ` Petr Baudis 0 siblings, 0 replies; 13+ messages in thread From: Petr Baudis @ 2005-04-26 18:15 UTC (permalink / raw) To: Daniel Barkalow; +Cc: Linus Torvalds, Andrew Morton, David S. Miller, git Dear diary, on Tue, Apr 26, 2005 at 05:40:08PM CEST, I got a letter where Daniel Barkalow <barkalow@iabervon.org> told me that... > On Tue, 26 Apr 2005, Linus Torvalds wrote: > > > On Tue, 26 Apr 2005, Andrew Morton wrote: > > > > > > > The only thing you should be a bit careful about is to remember what the > > "heads" at different points were. In particular, you want to remember > > where you merged with me last was. I've started tagging my releases with > > the git tag facility (_not_ the pasky one, but I think pasky will start > > picking up on that soon enough), so finding a specific release will be > > easy, but if you ever do a non-release merge you'll just have to tag it > > yourself. > > Your tag system is in the "cogito-0.8" release, plus a pasky-style way of > keeping track of what tags you have in your repository. It came in with merge with Linus, but there's no support in the Cogito toolkit for it whatsoever. I'm personally unlikely to get any time for doing it (or much anything else; but this is probably the priority now) until Sunday evening. :-( > > > d) To generate davem's tree (patch against linus's current tree (ie: patch > > > against 2.6.12-rc3+linus.patch)): > > > > > > git pull git-net > > > > Yes. This should have merged the two (assuming "git pull" does what I > > think it does). > > I think git pull only downloads the contents of the repo and saves the new > head in a separate file. You're left to do the merge yourself, in case > what you actually wanted to do was just read the patches in the remote > repo without merging them. > > You probably need a "git merge git-net" here, and things will be in the > state that Linus expects. Yes. git pull only pulls the stuff, doesn't merge it (that is, unless it is tracked branch; but I think this isn't the case; this was cleaned up in cogito-0.8 and cg-pull now always only pulls, cg-update pulls+merges). -- Petr "Pasky" Baudis Stuff: http://pasky.or.cz/ C++: an octopus made by nailing extra legs onto a dog. -- Steve Taylor ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: : Networking 2005-04-26 7:57 ` : Networking Andrew Morton 2005-04-26 14:59 ` Linus Torvalds @ 2005-04-26 17:19 ` Jan Harkes 2005-04-26 18:33 ` Petr Baudis 2 siblings, 0 replies; 13+ messages in thread From: Jan Harkes @ 2005-04-26 17:19 UTC (permalink / raw) To: git Forgot to cc: git@vger when I sent this originally. On Tue, Apr 26, 2005 at 12:57:25AM -0700, Andrew Morton wrote: > 27 files changed, 46 insertions(+), 80 deletions(-) > > And that's the bad patch. Both Linus and DaveM merged the same patch from Al Viro, but they are ofcourse different commits. So both branches have diverged and would need to be merged, where someone decides if Linus's commit or Dave's commit should be used. > What did I do wrong? > > Can someone suggest a better approach? Well, I looked at the history, and if I skip the Viro patch in davem's branch by hand I get, $ git diff -r 25ee7e3832951cf5896b194f6cd929a44863f419:088dd3a45fdb8fb726cd50575856562c4f6f1c3e | diffstat drivers/net/tg3.c | 73 ++++++++++++++------------- net/ipv4/ip_output.c | 2 net/ipv4/netfilter/ip_conntrack_ftp.c | 4 - net/ipv4/netfilter/ip_conntrack_standalone.c | 7 -- net/ipv4/tcp_input.c | 1 net/sched/simple.c | 18 ------ 6 files changed, 46 insertions(+), 59 deletions(-) So now, how to do this without picking through the logs. I figured the patchutils stuff might have a solution for this. So I got the diffs on Linus's branch wrt to the gca, and from Dave's branch wrt to the gca. $ git diff -r 25ee7e3832951cf5896b194f6cd929a44863f419:b453257f057b834fdf9f4a6ad6133598b79bd982 > git-linus.patch $ git diff -r 25ee7e3832951cf5896b194f6cd929a44863f419:5523662c4cd585b892811d7bb3e25d9a787e19b3 > git-net.patch $ interdiff --no-revert-omitted -p1 git-linus.patch git-net.patch | diffstat drivers/net/tg3.c | 73 ++++++++++++++------------- net/ipv4/ip_output.c | 2 net/ipv4/netfilter/ip_conntrack_ftp.c | 4 - net/ipv4/netfilter/ip_conntrack_standalone.c | 7 -- net/ipv4/tcp_input.c | 1 net/sched/simple.c | 18 ------ 6 files changed, 46 insertions(+), 59 deletions(-) That looks like it matched. Jan ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: : Networking 2005-04-26 7:57 ` : Networking Andrew Morton 2005-04-26 14:59 ` Linus Torvalds 2005-04-26 17:19 ` Jan Harkes @ 2005-04-26 18:33 ` Petr Baudis 2005-04-26 18:56 ` Andrew Morton 2 siblings, 1 reply; 13+ messages in thread From: Petr Baudis @ 2005-04-26 18:33 UTC (permalink / raw) To: Andrew Morton; +Cc: David S. Miller, torvalds, git Dear diary, on Tue, Apr 26, 2005 at 09:57:25AM CEST, I got a letter where Andrew Morton <akpm@osdl.org> told me that... > c) To generate -mm's linus.patch (patch against 2.6.12-rc3): > > git pull origin > git diff -r v2.6.12-rc3 > ../25/patches/linus.patch (Mainly for people not familiar with git-pasky - this merged origin to the working tree since it was tracked branch - that's what origin is by default after git init.) > d) To generate davem's tree (patch against linus's current tree (ie: patch > against 2.6.12-rc3+linus.patch)): > > git pull git-net > MERGE_BASE=$(merge-base $(cat .git/heads/origin ) $(cat .git/heads/git-net)) > git diff -r $MERGE_BASE:$(cat .git/heads/git-net) > ../25/patches/git-net.patch This is the bad way; I think this suffers of basically the same problems as my ancient merging by "forward-patching". You should probably do a regular merge: git pull git-net git merge git-net git diff -p The last command will show diff between current tree and the first parent; that amounts the merged patch in this case. -- Petr "Pasky" Baudis Stuff: http://pasky.or.cz/ C++: an octopus made by nailing extra legs onto a dog. -- Steve Taylor ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: : Networking 2005-04-26 18:33 ` Petr Baudis @ 2005-04-26 18:56 ` Andrew Morton 2005-04-26 19:13 ` Linus Torvalds 0 siblings, 1 reply; 13+ messages in thread From: Andrew Morton @ 2005-04-26 18:56 UTC (permalink / raw) To: Petr Baudis; +Cc: davem, torvalds, git Petr Baudis <pasky@ucw.cz> wrote: > > > d) To generate davem's tree (patch against linus's current tree (ie: patch > > against 2.6.12-rc3+linus.patch)): > > > > git pull git-net > > MERGE_BASE=$(merge-base $(cat .git/heads/origin ) $(cat .git/heads/git-net)) > > git diff -r $MERGE_BASE:$(cat .git/heads/git-net) > ../25/patches/git-net.patch > > This is the bad way; I think this suffers of basically the same problems > as my ancient merging by "forward-patching". You should probably do a > regular merge: > > git pull git-net > git merge git-net > git diff -p > > The last command will show diff between current tree and the first > parent; that amounts the merged patch in this case. Bear in mind that there will be 20 or 30 different trees which I'll need the diffs for, not just the one git-net. I don't know if it'll be successful continually merging all those trees together. The way I did this with bk was to have a separate repo for each tree, but I don't think I'll want 30-40 separate git trees. My little methodology worked nicely for git-ia64. Jan Harkes has pointed out that the problem here is that Linus and Dave both applied the same patch from Al and that interdiff was able to fix it up: $ git diff -r 25ee7e3832951cf5896b194f6cd929a44863f419:b453257f057b834fdf9f4a6ad6133598b79bd982 > git-linus.patch $ git diff -r 25ee7e3832951cf5896b194f6cd929a44863f419:5523662c4cd585b892811d7bb3e25d9a787e19b3 > git-net.patch $ interdiff --no-revert-omitted -p1 git-linus.patch git-net.patch | diffstat drivers/net/tg3.c | 73 ++++++++++++++------------- net/ipv4/ip_output.c | 2 net/ipv4/netfilter/ip_conntrack_ftp.c | 4 - net/ipv4/netfilter/ip_conntrack_standalone.c | 7 -- net/ipv4/tcp_input.c | 1 net/sched/simple.c | 18 ------ 6 files changed, 46 insertions(+), 59 deletions(-) So hm. I guess git did what it was supposed to do here, and that a `git merge' would have removed the common patch. But if I take the approach of merging all those subsystem trees I do wonder if things will come unstuck... ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: : Networking 2005-04-26 18:56 ` Andrew Morton @ 2005-04-26 19:13 ` Linus Torvalds 2005-04-26 19:51 ` Andrew Morton 0 siblings, 1 reply; 13+ messages in thread From: Linus Torvalds @ 2005-04-26 19:13 UTC (permalink / raw) To: Andrew Morton; +Cc: Petr Baudis, davem, git On Tue, 26 Apr 2005, Andrew Morton wrote: > > I don't know if it'll be successful continually merging all those trees > together. The way I did this with bk was to have a separate repo for each > tree, but I don't think I'll want 30-40 separate git trees. You really don't. With git, the only thing you need is one object store, and some way to _track_ those 30-40 separate git trees (and "track" really means "remember a single SHA1 name for their top-of-tree"). Then you can merge any combination of the 40 in the same tree. You'll get confused easily, but if you do this all with tools, it shouldn't be too bad. > So hm. I guess git did what it was supposed to do here, and that a `git > merge' would have removed the common patch. But if I take the approach of > merging all those subsystem trees I do wonder if things will come > unstuck... Well, git isn't as good at merging as BK is, and your usage sure as hell would be a horrible worst-case example, but it might actually work fine. Git merges are _cheap_ (with a capital C, and probably H as well) when they work out, and quite frankly, so far they have always worked out for me. But yeah, you'd be doing some pretty aggressive merging, using a tool that is two weeks old. It might work. I'd be interested to know ;) Linus ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: : Networking 2005-04-26 19:13 ` Linus Torvalds @ 2005-04-26 19:51 ` Andrew Morton 2005-04-26 20:11 ` Linus Torvalds 0 siblings, 1 reply; 13+ messages in thread From: Andrew Morton @ 2005-04-26 19:51 UTC (permalink / raw) To: Linus Torvalds; +Cc: pasky, davem, git Linus Torvalds <torvalds@osdl.org> wrote: > > > > On Tue, 26 Apr 2005, Andrew Morton wrote: > > > > I don't know if it'll be successful continually merging all those trees > > together. The way I did this with bk was to have a separate repo for each > > tree, but I don't think I'll want 30-40 separate git trees. > > You really don't. With git, the only thing you need is one object store, > and some way to _track_ those 30-40 separate git trees (and "track" really > means "remember a single SHA1 name for their top-of-tree"). Petr's wrappers do all that head tracking OK (which is why I'm using a combo of those and of lower-level gittiness). They do handy remote repo tracking too. > Then you can merge any combination of the 40 in the same tree. > > You'll get confused easily, but if you do this all with tools, it > shouldn't be too bad. > > > So hm. I guess git did what it was supposed to do here, and that a `git > > merge' would have removed the common patch. But if I take the approach of > > merging all those subsystem trees I do wonder if things will come > > unstuck... > > Well, git isn't as good at merging as BK is, and your usage sure as hell > would be a horrible worst-case example, but it might actually work fine. > Git merges are _cheap_ (with a capital C, and probably H as well) when > they work out, and quite frankly, so far they have always worked out for > me. > > But yeah, you'd be doing some pretty aggressive merging, using a tool that > is two weeks old. It might work. I'd be interested to know ;) Hm. For now I might try what I have plus Jan's fancy interdiff command to remove duped patches. We'll see. I obtained a copy of Tony's ia64 diff quite happily - it didn't have any duplicates. (It's fairly common for two subsystem maintainers to apply the same patch. With bk I was resolving that by just smashing the patches on top of each other, ignoring the rejects and refreshing the topmost patch. That approach actually resolved this linus-vs-davem dupe as well. But the duped patch was so damn BIG that it threw me. And I wasn't feeling gitty enough to go hunting about looking for the particular patch(es) which caused the problem) ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: : Networking 2005-04-26 19:51 ` Andrew Morton @ 2005-04-26 20:11 ` Linus Torvalds 2005-04-26 20:35 ` Bram Cohen 0 siblings, 1 reply; 13+ messages in thread From: Linus Torvalds @ 2005-04-26 20:11 UTC (permalink / raw) To: Andrew Morton; +Cc: pasky, davem, git On Tue, 26 Apr 2005, Andrew Morton wrote: > > With bk I was resolving that by just smashing the patches on top of each > other, ignoring the rejects and refreshing the topmost patch. That > approach actually resolved this linus-vs-davem dupe as well. Oh, wow. I didn't realize that your scripts were quite _that_ stupid, and didn't actually take advantage of any automatic merges at all. If so, git should trivially do everything that BK ever did for you. Which is not saying a lot ;) Linus ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: : Networking 2005-04-26 20:11 ` Linus Torvalds @ 2005-04-26 20:35 ` Bram Cohen 2005-04-28 3:55 ` Ryan Anderson 0 siblings, 1 reply; 13+ messages in thread From: Bram Cohen @ 2005-04-26 20:35 UTC (permalink / raw) To: Linus Torvalds; +Cc: Andrew Morton, pasky, davem, git Linus Torvalds wrote: > On Tue, 26 Apr 2005, Andrew Morton wrote: > > > > With bk I was resolving that by just smashing the patches on top of each > > other, ignoring the rejects and refreshing the topmost patch. That > > approach actually resolved this linus-vs-davem dupe as well. > > Oh, wow. I didn't realize that your scripts were quite _that_ stupid, and > didn't actually take advantage of any automatic merges at all. > > If so, git should trivially do everything that BK ever did for you. Which > is not saying a lot ;) No version control system will do a particularly good job of merging content which got passed around outside of the system. They can be made to sort-of handle some simple cases well, but fundamentally too much information is getting dropped. The solution is to get everyone using the same version control system, which is actually quite a workable solution if (a) the version control system in question is quite nice, and (b) there isn't some deep political reason why many people will never agree to use it. -Bram ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: : Networking 2005-04-26 20:35 ` Bram Cohen @ 2005-04-28 3:55 ` Ryan Anderson 2005-04-28 4:43 ` Daniel Barkalow 0 siblings, 1 reply; 13+ messages in thread From: Ryan Anderson @ 2005-04-28 3:55 UTC (permalink / raw) To: Bram Cohen; +Cc: Linus Torvalds, Andrew Morton, pasky, davem, git On Tue, Apr 26, 2005 at 01:35:55PM -0700, Bram Cohen wrote: > Linus Torvalds wrote: > > > On Tue, 26 Apr 2005, Andrew Morton wrote: > > > > > > With bk I was resolving that by just smashing the patches on top of each > > > other, ignoring the rejects and refreshing the topmost patch. That > > > approach actually resolved this linus-vs-davem dupe as well. > > > > Oh, wow. I didn't realize that your scripts were quite _that_ stupid, and > > didn't actually take advantage of any automatic merges at all. > > > > If so, git should trivially do everything that BK ever did for you. Which > > is not saying a lot ;) > > No version control system will do a particularly good job of merging > content which got passed around outside of the system. They can be made to > sort-of handle some simple cases well, but fundamentally too much > information is getting dropped. One thing to keep in mind, about the way Linux development works (and honestly, the way I think "git" development is currently working) is that one of the things the version control system has to provide an easy method to do is to abandon history that is messy. For example, I'm adding a new driver, "foobar". It uses the fancy quantum-bus, which is fairly new to the kernel. The bus driver is new, and I go off, work in my private tree for a month, fixing all kinds of quantum-entanglement related bugs, and committing as I go. I get everything working, and submit my driver. The quantum-bus maintainer replies and says, "Hey, I reworked the API so that you don't need to worry about all this quantum-entanglement stuff anymore, just call compensate_for_heisenberg() before doing the DMA." I swear for a day or two, and rework my driver, and resubmit it. Now, all that history I had, with the duplicated imlementation, and useless code is in my tree. The current (as I understand it) policy is, "We don't want that history." This means that the developer will build a new tree (maybe), export his patch and reimport it into a clean tree, making a much simpler history graph. What Andrew is doing isn't too far from this, in concept, it's just a lot more complicated because he's pulling something insane, like 27 seperate trees, plus several hundred stand alone patches. So, there's a *deliberate* desire to drop history and move some content around outside of version control. Now, the desire to pull a bunch of seperate trees, merge them, produce a diff that roughly pertains to what came in from each tree, and collect that as a patch series may be strange, but it seems to be working really well at the moment, for Linux development. > The solution is to get everyone using the same version control system, > which is actually quite a workable solution if (a) the version control > system in question is quite nice, and (b) there isn't some deep political > reason why many people will never agree to use it. Git (well, cogito, really) seems to be getting there awfully fast - I'm rather impressed with the speed of it, and annoyed that I haven't had the time to build up a test suite for merging! -- Ryan Anderson sometimes Pug Majere ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: : Networking 2005-04-28 3:55 ` Ryan Anderson @ 2005-04-28 4:43 ` Daniel Barkalow 0 siblings, 0 replies; 13+ messages in thread From: Daniel Barkalow @ 2005-04-28 4:43 UTC (permalink / raw) To: Ryan Anderson Cc: Bram Cohen, Linus Torvalds, Andrew Morton, pasky, davem, git On Wed, 27 Apr 2005, Ryan Anderson wrote: > Now, all that history I had, with the duplicated imlementation, and > useless code is in my tree. > > The current (as I understand it) policy is, "We don't want that > history." This means that the developer will build a new tree (maybe), > export his patch and reimport it into a clean tree, making a much > simpler history graph. I've been doing just this. I actually import it in pieces, with a commit between each, so it's just like I applied the patch series I'm about to send out. It actually works beautifully, and, someday, I'll have the series up on my site so that a maintainer can just pull it. Honestly, I'm not interested long-term in my buggy history, even locally; I'm interested in the clean history in which I make a series of self-contained, logical modifications and they get merged upstream. > What Andrew is doing isn't too far from this, in concept, it's just a > lot more complicated because he's pulling something insane, like 27 > seperate trees, plus several hundred stand alone patches. > > So, there's a *deliberate* desire to drop history and move some content > around outside of version control. I think it's more a desire to drop history as it actually happened, and replace it with history as it should have happened. The one thing I would like is the ability to provide merging help to poor souls who got part of the messy history without preserving that history. I think having the head of the clean series have a bunch of lines: "replaces <sha1>", where people aren't supposed to have or want that commit, but if they've merged it, they should know that the clean series includes its content. -Daniel *This .sig left intentionally blank* ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2005-04-28 4:38 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20050425214326.512b006e.davem@davemloft.net>
2005-04-26 7:57 ` : Networking Andrew Morton
2005-04-26 14:59 ` Linus Torvalds
2005-04-26 15:40 ` Daniel Barkalow
2005-04-26 18:15 ` Petr Baudis
2005-04-26 17:19 ` Jan Harkes
2005-04-26 18:33 ` Petr Baudis
2005-04-26 18:56 ` Andrew Morton
2005-04-26 19:13 ` Linus Torvalds
2005-04-26 19:51 ` Andrew Morton
2005-04-26 20:11 ` Linus Torvalds
2005-04-26 20:35 ` Bram Cohen
2005-04-28 3:55 ` Ryan Anderson
2005-04-28 4:43 ` Daniel Barkalow
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox