* Problems using new Linux-2.4 bitkeeper repository.
@ 2002-03-15 2:38 James Bottomley
2002-03-15 4:55 ` Jeff Garzik
0 siblings, 1 reply; 23+ messages in thread
From: James Bottomley @ 2002-03-15 2:38 UTC (permalink / raw)
To: lm; +Cc: linux-kernel
How do those of us who've been using the
http://gkernel.bitkeeper.net/marcelo-2.4
for development resync against the kernel24.bkbits.net tree? It looks like
the changes from 2.4.18-pre8 onwards all have different patch IDs in the new
tree; so when I try to do a pull from my current repository I get tons of
conflicts, if I try to do a receive of just the patch set I get a resync error:
takepatch: can't find parent ID
jgarzik@mandrakesoft.com|ChangeSet|20020225230300|18879
in RESYNC/SCCS/s.ChangeSet
The thought of taking everything back to the common ancestor and then trying
to apply the changes one at a time and adding the change logs by hand isn't
that appealing (I have 3 2.4 repositories, some with upwards of 10 additional
change sets in them).
James
^ permalink raw reply [flat|nested] 23+ messages in thread* Re: Problems using new Linux-2.4 bitkeeper repository. 2002-03-15 2:38 Problems using new Linux-2.4 bitkeeper repository James Bottomley @ 2002-03-15 4:55 ` Jeff Garzik 2002-03-16 16:08 ` James Bottomley 0 siblings, 1 reply; 23+ messages in thread From: Jeff Garzik @ 2002-03-15 4:55 UTC (permalink / raw) To: James Bottomley; +Cc: lm, linux-kernel James Bottomley wrote: >How do those of us who've been using the > >http://gkernel.bitkeeper.net/marcelo-2.4 > >for development resync against the kernel24.bkbits.net tree? > Through the magic of BK :) Just do a 'bk pull' on my marcelo-2.4 tree. Since it is based on the original linux-2.4 tree just like Marcelo's tree, I was able to merge from my 2.4 line to his 2.4 line. Jeff ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Problems using new Linux-2.4 bitkeeper repository. 2002-03-15 4:55 ` Jeff Garzik @ 2002-03-16 16:08 ` James Bottomley 2002-03-16 16:28 ` Jeff Garzik 0 siblings, 1 reply; 23+ messages in thread From: James Bottomley @ 2002-03-16 16:08 UTC (permalink / raw) To: Jeff Garzik; +Cc: James Bottomley, lm, linux-kernel jgarzik@mandrakesoft.com said: > Through the magic of BK :) > Just do a 'bk pull' on my marcelo-2.4 tree. Since it is based on the > original linux-2.4 tree just like Marcelo's tree, I was able to merge > from my 2.4 line to his 2.4 line. Well, I tried this, but it just gave me a slew of initial rename conflicts. It could be something to do with the fact that my base development is still on 2.4.18 (so the ancestors are easier to manage). I finally solved it by writing a script to backport a bitkeeper change set to an earlier ancestor while preserving the change logs. This is going to be helpful taking change sets between 2.4 and 2.5 anyway. Thanks, James ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Problems using new Linux-2.4 bitkeeper repository. 2002-03-16 16:08 ` James Bottomley @ 2002-03-16 16:28 ` Jeff Garzik 2002-03-16 16:30 ` Larry McVoy 0 siblings, 1 reply; 23+ messages in thread From: Jeff Garzik @ 2002-03-16 16:28 UTC (permalink / raw) To: James Bottomley; +Cc: lm, linux-kernel James Bottomley wrote: >jgarzik@mandrakesoft.com said: > >>Through the magic of BK :) >> > >>Just do a 'bk pull' on my marcelo-2.4 tree. Since it is based on the >>original linux-2.4 tree just like Marcelo's tree, I was able to merge >>from my 2.4 line to his 2.4 line. >> > >Well, I tried this, but it just gave me a slew of initial rename conflicts. > This is normal, you just need to accept the remote changes for all those new/renamed files. BitKeeper doesn't support doing this automatically for all files, so I had to highlight the expected BitKeeper response in another window, and then click <paste> on my mouse around 300 times... (~300 new files) Jeff ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Problems using new Linux-2.4 bitkeeper repository. 2002-03-16 16:28 ` Jeff Garzik @ 2002-03-16 16:30 ` Larry McVoy 2002-03-16 16:41 ` Jeff Garzik 0 siblings, 1 reply; 23+ messages in thread From: Larry McVoy @ 2002-03-16 16:30 UTC (permalink / raw) To: Jeff Garzik; +Cc: James Bottomley, lm, linux-kernel On Sat, Mar 16, 2002 at 11:28:46AM -0500, Jeff Garzik wrote: > >Well, I tried this, but it just gave me a slew of initial rename conflicts. > > > > This is normal, you just need to accept the remote changes for all those > new/renamed files. BitKeeper doesn't support doing this automatically > for all files, so I had to highlight the expected BitKeeper response in > another window, and then click <paste> on my mouse around 300 times... > (~300 new files) Yuck. So you knew without any doubt what it was that you wanted? How? If this is a common case, I can add an option to the resolver, but it strikes me that there must be some other problem here. What are those 300 files? -- --- Larry McVoy lm at bitmover.com http://www.bitmover.com/lm ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Problems using new Linux-2.4 bitkeeper repository. 2002-03-16 16:30 ` Larry McVoy @ 2002-03-16 16:41 ` Jeff Garzik 2002-03-16 16:52 ` Larry McVoy 0 siblings, 1 reply; 23+ messages in thread From: Jeff Garzik @ 2002-03-16 16:41 UTC (permalink / raw) To: Larry McVoy; +Cc: James Bottomley, linux-kernel Larry McVoy wrote: >On Sat, Mar 16, 2002 at 11:28:46AM -0500, Jeff Garzik wrote: > >>>Well, I tried this, but it just gave me a slew of initial rename conflicts. >>> >>This is normal, you just need to accept the remote changes for all those >>new/renamed files. BitKeeper doesn't support doing this automatically >>for all files, so I had to highlight the expected BitKeeper response in >>another window, and then click <paste> on my mouse around 300 times... >>(~300 new files) >> > >Yuck. So you knew without any doubt what it was that you wanted? How? >If this is a common case, I can add an option to the resolver, but it >strikes me that there must be some other problem here. What are those >300 files? > I started with Linus's linux-2.4 repo and so did Marcelo. We independently checked in 2.4.recent patches (including proper renametool use), which included the ia64 and mips merges, which added a ton of files. When you do a 'bk pull' from Marcelo's linux-2.4 into my old marcelo-2.4 repo, you have to individually tell BitKeeper that you really do want to trust Marcelo's copy over my own, for each of the ~300 new files that were added between Linus's linux-2.4 repo creation and 2 days ago. So I highlighted "rl\ny\n" in another window, and wore out my middle mouse button... Renames could have been handled similarly, but there were few renames, so I just typed "r\ny\n" manually maybe 10 or 20 times. One could argue that a "rla" or "lla" command would be useful when resolving a conflict between two new files, telling BitKeeper to accept remote (or local) additions in this case _and_ all succeeding cases. One could also argue that BitKeeper needs to be twacked on the head because it is not detecting that the file-creates and file-renames are 100% the same, content-wise. Jeff ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Problems using new Linux-2.4 bitkeeper repository. 2002-03-16 16:41 ` Jeff Garzik @ 2002-03-16 16:52 ` Larry McVoy 2002-03-16 17:06 ` Jeff Garzik 2002-03-16 17:17 ` James Bottomley 0 siblings, 2 replies; 23+ messages in thread From: Larry McVoy @ 2002-03-16 16:52 UTC (permalink / raw) To: Jeff Garzik; +Cc: Larry McVoy, James Bottomley, linux-kernel On Sat, Mar 16, 2002 at 11:41:27AM -0500, Jeff Garzik wrote: > I started with Linus's linux-2.4 repo and so did Marcelo. We > independently checked in 2.4.recent patches (including proper renametool > use), which included the ia64 and mips merges, which added a ton of > files. OK, so there is the root cause. It's time to talk about duplicate changes. You know how Linus hates bad csets in the history and doesn't want them there? Well, I hate duplicate csets and don't want them there. There are lots of reasons. One reason is that it means revtool is a lot less useful for debugging. If you are trying to track down the change which caused a bug but it is obscured by a duplicate patch, you just got hosed. Another reason is file creates. Suppose you and Marcelo both created a file called "foo". You pull, there is a file conflict, you remove one of the two files. It isn't actually removed, it's just moved to BitKeeper/deleted. Time passes and you or someone else is fixing bugs in a pre-merged copy of the tree and you are updating "foo". You later pull that bugfix into the merged tree and the bugfix happily is applied to the *deleted* copy of the file, since the changes follow the "inode", not the pathname. Bummer, you are now scratching your head wondering where your bugfix went. There are things we can do in BK to deal with this, but they are not easy and are going to take several months, is my guess. I'd like to see if you can work around this by avoiding duplicate patches. If you can, do so, you will save yourself lots of grief. If you get into a duplicate patch situation, you are far better off to pick one tree or the other tree as the official tree, and cherrypick the changes that the unofficial tree has and place them in the official tree. Then toss the unofficial tree. I can make you a "bk portpatch" command which does this, we have that already, it needs a bit of updating to catch the comments. You really want to listen to this, I'm trying to head you off from screwing up the history. If you get 300 renames like this, it's almost always a duplicate patch scenario. -- --- Larry McVoy lm at bitmover.com http://www.bitmover.com/lm ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Problems using new Linux-2.4 bitkeeper repository. 2002-03-16 16:52 ` Larry McVoy @ 2002-03-16 17:06 ` Jeff Garzik 2002-03-16 17:14 ` Larry McVoy 2002-03-16 17:17 ` James Bottomley 1 sibling, 1 reply; 23+ messages in thread From: Jeff Garzik @ 2002-03-16 17:06 UTC (permalink / raw) To: Larry McVoy; +Cc: James Bottomley, linux-kernel Larry McVoy wrote: >On Sat, Mar 16, 2002 at 11:41:27AM -0500, Jeff Garzik wrote: > >>I started with Linus's linux-2.4 repo and so did Marcelo. We >>independently checked in 2.4.recent patches (including proper renametool >>use), which included the ia64 and mips merges, which added a ton of >>files. >> > >OK, so there is the root cause. It's time to talk about duplicate changes. > [...] >There are things we can do in BK to deal with this, but they are not easy >and are going to take several months, is my guess. I'd like to see if you >can work around this by avoiding duplicate patches. If you can, do so, >you will save yourself lots of grief. > [...] >You really want to listen to this, I'm trying to head you off from screwing >up the history. If you get 300 renames like this, it's almost always a >duplicate patch scenario. > I know why it happened, silly. This was just an example of a real world example that actually happened, where BK sucked ass :) Marcelo's BK tree did not exist when I created my marcelo-2.4 tree. marcelo-2.4 repo existed for a while and people started using it. Once Marcelo appeared with his "official" BK tree, people naturally want to migrate. There were two migration paths: (1) export everything to GNU patches, or (2) click the mouse 300 times. So, knowing that duplicate patches are a bad thing helps not in the least here... Jeff ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Problems using new Linux-2.4 bitkeeper repository. 2002-03-16 17:06 ` Jeff Garzik @ 2002-03-16 17:14 ` Larry McVoy 2002-03-16 17:25 ` Jeff Garzik 2002-03-17 10:49 ` David Woodhouse 0 siblings, 2 replies; 23+ messages in thread From: Larry McVoy @ 2002-03-16 17:14 UTC (permalink / raw) To: Jeff Garzik; +Cc: Larry McVoy, James Bottomley, linux-kernel On Sat, Mar 16, 2002 at 12:06:10PM -0500, Jeff Garzik wrote: > This was just an example of a real world example that actually happened, > where BK sucked ass :) Think file systems. Think 2 file systems. Think creating duplicate inodes in the same place. Now those 2 file systems are merged into a third, the duplicates removed. The original 2 still both exist and are both being updated. > Marcelo's BK tree did not exist when I created my marcelo-2.4 tree. > marcelo-2.4 repo existed for a while and people started using it. Once > Marcelo appeared with his "official" BK tree, people naturally want to > migrate. There were two migration paths: (1) export everything to GNU > patches, or (2) click the mouse 300 times. There is a 3rd: factor out the duplicates and and export/import only the ones that Marcelo didn't have, then dump your tree and use his. -- --- Larry McVoy lm at bitmover.com http://www.bitmover.com/lm ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Problems using new Linux-2.4 bitkeeper repository. 2002-03-16 17:14 ` Larry McVoy @ 2002-03-16 17:25 ` Jeff Garzik 2002-03-16 17:38 ` Larry McVoy 2002-03-17 10:49 ` David Woodhouse 1 sibling, 1 reply; 23+ messages in thread From: Jeff Garzik @ 2002-03-16 17:25 UTC (permalink / raw) To: Larry McVoy; +Cc: James Bottomley, linux-kernel Larry McVoy wrote: >On Sat, Mar 16, 2002 at 12:06:10PM -0500, Jeff Garzik wrote: > >>This was just an example of a real world example that actually happened, >>where BK sucked ass :) >> > >Think file systems. Think 2 file systems. Think creating duplicate inodes >in the same place. Now those 2 file systems are merged into a third, the >duplicates removed. The original 2 still both exist and are both being >updated. > Like I said, I know why BK is going what it is doing. That doesn't change the fact that peoples options are very poor in this case. >>Marcelo's BK tree did not exist when I created my marcelo-2.4 tree. >> marcelo-2.4 repo existed for a while and people started using it. Once >>Marcelo appeared with his "official" BK tree, people naturally want to >>migrate. There were two migration paths: (1) export everything to GNU >>patches, or (2) click the mouse 300 times. >> > >There is a 3rd: factor out the duplicates and and export/import only the >ones that Marcelo didn't have, then dump your tree and use his. > That's what I meant by option #1... you yelled at me, rightly, when I first tried to send BK patches to Linus, because I used 'bk export'. If you have to leave the BK system entirely for certain cases of merging, that's really a failing of the system. So, I chastise you back for even suggesting 'export' :) Basically you need out of order changes to do it right... I think a fair question would be, is this scenario going to occur often? I don't know. But I'll bet you -will- see it come up again in kernel development. Why? We are exercising the distributed nature of the BitKeeper system. The system currently punishes Joe in Alaska and Mikhail in Russia if they independently apply the same GNU patch, and then later on wind up attempting to converge trees. Do you see what I'm getting at? In a widely distributed SCM system for an open source project, chances are -good- that some random two or more people will independently apply the same patch. Jeff ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Problems using new Linux-2.4 bitkeeper repository. 2002-03-16 17:25 ` Jeff Garzik @ 2002-03-16 17:38 ` Larry McVoy 2002-03-16 17:51 ` Jeff Garzik 2002-03-16 18:05 ` Jeff Garzik 0 siblings, 2 replies; 23+ messages in thread From: Larry McVoy @ 2002-03-16 17:38 UTC (permalink / raw) To: Jeff Garzik; +Cc: Larry McVoy, James Bottomley, linux-kernel > I think a fair question would be, is this scenario going to occur often? > I don't know. But I'll bet you -will- see it come up again in kernel > development. Why? We are exercising the distributed nature of the > BitKeeper system. The system currently punishes Joe in Alaska and > Mikhail in Russia if they independently apply the same GNU patch, and > then later on wind up attempting to converge trees. Indeed. So speak in file systems, because a BK package is basically a file system, with multiple distributed instances, all of which may be out of sync. The problems show up when the same patch is applied N times and then comes together. The inodes collide. Right now, you think that's the problem, and want BK to fix it. We can fix that. But that's not the real problem. The real problem is N sets of diffs being applied and then merged. The revision history ends up with the data inserted N times. I'm not sure what to do about it. I can handle the duplicate inode case more gracefully but it's a heavy duty rewack. We could play games where we detect the same patch inserted multiple times and refuse to merge them. Hmm. Hmm. Not sure that helps. -- --- Larry McVoy lm at bitmover.com http://www.bitmover.com/lm ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Problems using new Linux-2.4 bitkeeper repository. 2002-03-16 17:38 ` Larry McVoy @ 2002-03-16 17:51 ` Jeff Garzik 2002-03-16 18:31 ` Christer Weinigel 2002-03-16 18:05 ` Jeff Garzik 1 sibling, 1 reply; 23+ messages in thread From: Jeff Garzik @ 2002-03-16 17:51 UTC (permalink / raw) To: Larry McVoy; +Cc: James Bottomley, linux-kernel Larry McVoy wrote: >>I think a fair question would be, is this scenario going to occur often? >> I don't know. But I'll bet you -will- see it come up again in kernel >>development. Why? We are exercising the distributed nature of the >>BitKeeper system. The system currently punishes Joe in Alaska and >>Mikhail in Russia if they independently apply the same GNU patch, and >>then later on wind up attempting to converge trees. >> > >Indeed. So speak in file systems, because a BK package is basically a file >system, with multiple distributed instances, all of which may be out of >sync. The problems show up when the same patch is applied N times and >then comes together. The inodes collide. Right now, you think that's >the problem, and want BK to fix it. We can fix that. But that's not >the real problem. The real problem is N sets of diffs being applied >and then merged. The revision history ends up with the data inserted N >times. > >I'm not sure what to do about it. I can handle the duplicate inode case >more gracefully but it's a heavy duty rewack. > Hence my suggestion for a short term solution that's immediately useful -- allowing some way to answer "local changes take precedence 100% of the time" or "remote changes ..." with a single command. That was my hack solution that I thought would people might find useful when stuck with the duplicate-patch situation. In the command line merge tool, when merging a file-create, "rla" would cause the current file conflict, and all future file-create conflicts, to be "won" by the remote side -- essentially creating the effect of typing "rl" 300 times. Apply similar logic to the file-rename merge case. I think the merge command I used in 100% of the cases, during that merge, was 'r'. If you are stuck with the duplicate patch case, as happened here, I just want to see the pain eased a bit :) IMO you can put off the hard problem if you make the UI a bit better. Jeff ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Problems using new Linux-2.4 bitkeeper repository. 2002-03-16 17:51 ` Jeff Garzik @ 2002-03-16 18:31 ` Christer Weinigel 0 siblings, 0 replies; 23+ messages in thread From: Christer Weinigel @ 2002-03-16 18:31 UTC (permalink / raw) To: jgarzik; +Cc: lm, linux-kernel Jeff Garzik <jgarzik@mandrakesoft.com> wrote: > Hence my suggestion for a short term solution that's immediately useful > -- allowing some way to answer "local changes take precedence 100% of > the time" or "remote changes ..." with a single command. That was my > hack solution that I thought would people might find useful when stuck > with the duplicate-patch situation. > > In the command line merge tool, when merging a file-create, "rla" would > cause the current file conflict, and all future file-create conflicts, > to be "won" by the remote side -- essentially creating the effect of > typing "rl" 300 times. > Apply similar logic to the file-rename merge case. I think the merge > command I used in 100% of the cases, during that merge, was 'r'. One variant of this would be to automatically use the remote file as long as the file contents are the same. That way, if I apply a patch locally and Marcello/Linus later apply the same patch and put it into the official tree, I can use the official version. This would probably handle most of the conflicts I have seen so far. If there are any "real" conflicts, I can handle them manually. /Christer -- "Just how much can I get away with and still go to heaven?" ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Problems using new Linux-2.4 bitkeeper repository. 2002-03-16 17:38 ` Larry McVoy 2002-03-16 17:51 ` Jeff Garzik @ 2002-03-16 18:05 ` Jeff Garzik 2002-03-16 19:01 ` Larry McVoy 1 sibling, 1 reply; 23+ messages in thread From: Jeff Garzik @ 2002-03-16 18:05 UTC (permalink / raw) To: Larry McVoy; +Cc: linux-kernel Larry McVoy wrote: >>I think a fair question would be, is this scenario going to occur often? >> I don't know. But I'll bet you -will- see it come up again in kernel >>development. Why? We are exercising the distributed nature of the >>BitKeeper system. The system currently punishes Joe in Alaska and >>Mikhail in Russia if they independently apply the same GNU patch, and >>then later on wind up attempting to converge trees. >> > >Indeed. So speak in file systems, because a BK package is basically a file >system, with multiple distributed instances, all of which may be out of >sync. The problems show up when the same patch is applied N times and >then comes together. The inodes collide. Right now, you think that's >the problem, and want BK to fix it. We can fix that. But that's not >the real problem. The real problem is N sets of diffs being applied >and then merged. The revision history ends up with the data inserted N >times. > Another thought, that I'm betting you laugh at me for even suggesting :) Don't insert the data N times. Give the user the option to say that one or more changesets are actually the same one. In filesystem speak, unlink a file B which is a user-confirmed duplicate of file A, and re-create file B as a symlink to file A. Or just unlink file B without the symlink, whichever metaphor suits you better. :) Yes it is "altering history"... but... OTOH the user has just told BitKeeper, in no uncertain terms, that he is altering history only to make it more correct. From a user interface perspective, the user would pick one of N changeset comments to be considered the "real" one. Jeff ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Problems using new Linux-2.4 bitkeeper repository. 2002-03-16 18:05 ` Jeff Garzik @ 2002-03-16 19:01 ` Larry McVoy 2002-03-16 19:44 ` Jeff Garzik 0 siblings, 1 reply; 23+ messages in thread From: Larry McVoy @ 2002-03-16 19:01 UTC (permalink / raw) To: Jeff Garzik; +Cc: Larry McVoy, linux-kernel On Sat, Mar 16, 2002 at 01:05:26PM -0500, Jeff Garzik wrote: > Larry McVoy wrote: > > >>I think a fair question would be, is this scenario going to occur often? > >> I don't know. But I'll bet you -will- see it come up again in kernel > >>development. Why? We are exercising the distributed nature of the > >>BitKeeper system. The system currently punishes Joe in Alaska and > >>Mikhail in Russia if they independently apply the same GNU patch, and > >>then later on wind up attempting to converge trees. > >> > > > >Indeed. So speak in file systems, because a BK package is basically a file > >system, with multiple distributed instances, all of which may be out of > >sync. The problems show up when the same patch is applied N times and > >then comes together. The inodes collide. Right now, you think that's > >the problem, and want BK to fix it. We can fix that. But that's not > >the real problem. The real problem is N sets of diffs being applied > >and then merged. The revision history ends up with the data inserted N > >times. > > > > Another thought, that I'm betting you laugh at me for even suggesting :) > > Don't insert the data N times. Give the user the option to say that one > or more changesets are actually the same one. In filesystem speak, > unlink a file B which is a user-confirmed duplicate of file A, and > re-create file B as a symlink to file A. Or just unlink file B without > the symlink, whichever metaphor suits you better. :) > > Yes it is "altering history"... but... OTOH the user has just told > BitKeeper, in no uncertain terms, that he is altering history only to > make it more correct. You need to put on the distributed-think hat. The problem is never what I do in any one instance, we can do all sorts of useful things in that instance. The problem is doing them in such a way so that synchronization with repositories which are both ahead and behind works. So if you repull from whereever you just pulled from, the system needs to remember that some cset is a duplicate and has been eliminated. And if you pull in the opposite direction, the past events, including duplicate removal, propagate. *All* of this stuff is trivial if you don't care about passing it on, if your repository is a backwater dead end. But that's not the case. So you have to decide that you want the events to propagate and if you do, then we can do something about it. I'm starting to get psyched about this, I think I see a picture that works, I need to chew on it for a bit though. -- --- Larry McVoy lm at bitmover.com http://www.bitmover.com/lm ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Problems using new Linux-2.4 bitkeeper repository. 2002-03-16 19:01 ` Larry McVoy @ 2002-03-16 19:44 ` Jeff Garzik 0 siblings, 0 replies; 23+ messages in thread From: Jeff Garzik @ 2002-03-16 19:44 UTC (permalink / raw) To: Larry McVoy; +Cc: linux-kernel Larry McVoy wrote: >>Yes it is "altering history"... but... OTOH the user has just told >>BitKeeper, in no uncertain terms, that he is altering history only to >>make it more correct. >> >*All* of this stuff is trivial if you don't care about passing it on, if >your repository is a backwater dead end. But that's not the case. >So you have to decide that you want the events to propagate and if you >do, then we can do something about it. > Re-read my message, assuming I have a clue :) This fits just fine into the distribute BK system, across any number of pushes and pulls. I -would- want to pass on the fact that I merged multiple changesets into a single one... Think about this example: * I merge a GNU patch into tree A, creating cset 1.111. * Marcelo merges the same GNU patch into tree B, creating cset 1.222. * Time passes. People clone repos off of both trees. * I 'bk pull' from tree B. Through the merge process, this creates a brand new "symlink cset", 1.333, which propagates the notion that my cset 1.111 is a complete copy of 1.222, so we should just read the data and revision history from 1.222. * Now, I 'bk push' some changes to Marcelo. This pushes, among other things, the magic symlink cset 1.333. It does not push 1.111, since 1.333 was the change to the local repo that told it not to. Think of this like "cset -x" except smarter. "cset -x", as I understand it, creates a new cset which is essentially the reverse of the specified cset. Our symlink cset says to BitKeeper (a) not bother with patch-and-unpatch if both 1.111 and 1.222 are found to be missing downstream, and (b) if 1.111 but 1.222 are present downstream, to remove the data associated with 1.111, turning it into a symlink to 1.222. This fits perfectly well into the BK distributed system, and works across any number of bk pushes and pulls. Basically, "symlink csets" would show up in 'bk changes', much like merge csets show up in 'bk changes' now. And you are no longer inserting the data N times. The symlink csets take care of that. And further, for people scattered all over the world with 1.111 cset, the 1.333 cset will slowly worm its way across the world, acting like a janitor and cleaning up BK repositories with duplicated patches :) Isn't that neat? :) (assuming that 1.333 cset is propagated out to the world, of course) >I'm starting to get psyched about this, I think I see a picture that >works, I need to chew on it for a bit though. > whichever works :) Jeff, who really should sleep now :) ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Problems using new Linux-2.4 bitkeeper repository. 2002-03-16 17:14 ` Larry McVoy 2002-03-16 17:25 ` Jeff Garzik @ 2002-03-17 10:49 ` David Woodhouse 2002-03-17 15:54 ` Larry McVoy 2002-03-17 16:23 ` David Woodhouse 1 sibling, 2 replies; 23+ messages in thread From: David Woodhouse @ 2002-03-17 10:49 UTC (permalink / raw) To: Jeff Garzik; +Cc: Larry McVoy, James Bottomley, linux-kernel jgarzik@mandrakesoft.com said: > The system currently punishes Joe in Alaska and Mikhail in Russia if > they independently apply the same GNU patch, and then later on wind > up attempting to converge trees. I tried to work round this by applying some patches which I require but which Linus hasn't yet taken _only_ in my working tree, not actually committing them. But then BK wouldn't even let me pull from Linus' tree any more, because I had locked and modified files. That also seems to be a fundamental flaw. -- dwmw2 ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Problems using new Linux-2.4 bitkeeper repository. 2002-03-17 10:49 ` David Woodhouse @ 2002-03-17 15:54 ` Larry McVoy 2002-03-17 16:23 ` David Woodhouse 1 sibling, 0 replies; 23+ messages in thread From: Larry McVoy @ 2002-03-17 15:54 UTC (permalink / raw) To: David Woodhouse; +Cc: Jeff Garzik, Larry McVoy, James Bottomley, linux-kernel On Sun, Mar 17, 2002 at 10:49:34AM +0000, David Woodhouse wrote: > But then BK wouldn't even let me pull from Linus' tree any more, because I > had locked and modified files. That also seems to be a fundamental flaw. BK works that way on purpose. If we merge changes into your local changes, there is no automatic way to "unmerge". It is way to easy to do a pull, do the merge, and then realize you lost work in the merge because you told it to do the wrong thing. Short summary: commit your changes before you pull and you'll be fine. -- --- Larry McVoy lm at bitmover.com http://www.bitmover.com/lm ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Problems using new Linux-2.4 bitkeeper repository. 2002-03-17 10:49 ` David Woodhouse 2002-03-17 15:54 ` Larry McVoy @ 2002-03-17 16:23 ` David Woodhouse 2002-03-17 18:15 ` Larry McVoy 2002-03-17 18:34 ` David Woodhouse 1 sibling, 2 replies; 23+ messages in thread From: David Woodhouse @ 2002-03-17 16:23 UTC (permalink / raw) To: Larry McVoy; +Cc: Jeff Garzik, James Bottomley, linux-kernel lm@bitmover.com said: > BK works that way on purpose. If we merge changes into your local > changes, there is no automatic way to "unmerge". It is way to easy to > do a pull, do the merge, and then realize you lost work in the merge > because you told it to do the wrong thing. > Short summary: commit your changes before you pull and you'll be fine. If it was changes that deserved a changelog, I'd have committed them. But it's typically one-line hacks to make it compile, which I know will be obsoleted by 'correct' fixes in Linus' tree later. I don't want them (and the subsequent merges and conflicting new files) cluttering up my tree, especially as AFAICT BK won't let me undo the change later if I commit any changes after it - even if the later changes are _completely_ unrelated. Btw, the citool is cute but would be cuter if - the diffs were '-up' format - showing the function that the hunk is in. - You could select a hunk and say "omit this change from what's committed" Again, the latter is because some stuff really does live as local hacks in a build tree and never deserves the honour of a changelog entry. Another thing I have a distinct feeling I'm going to want is tracking functions across files. I sometimes shuffle functions between files for portability - selective compilation is nicer with your Linux-specific functions in one file and eCos-specific functions in another than with a litter of ifdefs. If Linus' tree gets a patch to a file that I moved, BK can work it out. If Linus' tree gets a patch to a _function_ that I moved to a different file while leaving the rest of the original file in place, AFAICT not even the merge tool deals with that nicely. Did I miss an option to 'apply this diff hunk to a different file'? -- dwmw2 ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Problems using new Linux-2.4 bitkeeper repository. 2002-03-17 16:23 ` David Woodhouse @ 2002-03-17 18:15 ` Larry McVoy 2002-03-17 18:34 ` David Woodhouse 1 sibling, 0 replies; 23+ messages in thread From: Larry McVoy @ 2002-03-17 18:15 UTC (permalink / raw) To: David Woodhouse; +Cc: Larry McVoy, Jeff Garzik, James Bottomley, linux-kernel On Sun, Mar 17, 2002 at 04:23:21PM +0000, David Woodhouse wrote: > > lm@bitmover.com said: > > BK works that way on purpose. If we merge changes into your local > > changes, there is no automatic way to "unmerge". It is way to easy to > > do a pull, do the merge, and then realize you lost work in the merge > > because you told it to do the wrong thing. > > > Short summary: commit your changes before you pull and you'll be fine. > > If it was changes that deserved a changelog, I'd have committed them. But > it's typically one-line hacks to make it compile, which I know will be > obsoleted by 'correct' fixes in Linus' tree later. Then you get to save them as diffs, unedit the files, and put them back after the merge. > Btw, the citool is cute but would be cuter if > - the diffs were '-up' format - showing the function that the hunk is in. citool is a tcl program, how about you hack it in? Look for $diffsOpts, that's what you'll need to modify. You need to get the diffs parsing code to do the right thing with -up style diffs though. > - You could select a hunk and say "omit this change from what's committed" Get bk-2.1.5. We added multiple options to the edit button, try the fmtool option and learn how to use it. You can trivially walk the code and pick and choose which diffs you want. > Another thing I have a distinct feeling I'm going to want is tracking > functions across files. I sometimes shuffle functions between files for > portability - selective compilation is nicer with your Linux-specific > functions in one file and eCos-specific functions in another than with a > litter of ifdefs. If Linus' tree gets a patch to a file that I moved, BK can > work it out. If Linus' tree gets a patch to a _function_ that I moved to a > different file while leaving the rest of the original file in place, AFAICT > not even the merge tool deals with that nicely. Did I miss an option to > 'apply this diff hunk to a different file'? We don't have this feature. We've talked about it, but that's all we've done. -- --- Larry McVoy lm at bitmover.com http://www.bitmover.com/lm ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Problems using new Linux-2.4 bitkeeper repository. 2002-03-17 16:23 ` David Woodhouse 2002-03-17 18:15 ` Larry McVoy @ 2002-03-17 18:34 ` David Woodhouse 2002-03-18 15:25 ` Tom Rini 1 sibling, 1 reply; 23+ messages in thread From: David Woodhouse @ 2002-03-17 18:34 UTC (permalink / raw) To: Larry McVoy; +Cc: Jeff Garzik, James Bottomley, linux-kernel lm@bitmover.com said: > Then you get to save them as diffs, unedit the files, and put them > back after the merge. I can do better than that. If I save them as diffs, I don't get to use your cute merge tools. I could commit them with a throwaway changelog, do the pull and use the merge tools, then copy the resulting files, undo both the pull and the previous merge, do the pull again and then lock the files and drop the previously-saved copies into place. It's a bit contrived though - it would be nice if BK would do something like that for me instead of just bailing out when files are modified. Asking me if I'm really sure I want to continue is fine. Aborting unconditionally less so. > citool is a tcl program, how about you hack it in? Look for > $diffsOpts, that's what you'll need to modify. You need to get the > diffs parsing code to do the right thing with -up style diffs though. Er, actually I can't get 'bk diffs -up' to give output the same as (GNU) 'diff -up' either. What I was after was stuff like: @@ -331,6 +331,7 @@ int jffs2_decompress(unsigned char compr > We don't have this feature. We've talked about it, but that's all > we've done. Which? Actually tracking functions that move between files, or the hack in the merge tool? I appreciate that the former is a _lot_ harder to achieve. -- dwmw2 ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Problems using new Linux-2.4 bitkeeper repository. 2002-03-17 18:34 ` David Woodhouse @ 2002-03-18 15:25 ` Tom Rini 0 siblings, 0 replies; 23+ messages in thread From: Tom Rini @ 2002-03-18 15:25 UTC (permalink / raw) To: David Woodhouse; +Cc: Larry McVoy, Jeff Garzik, James Bottomley, linux-kernel On Sun, Mar 17, 2002 at 06:34:29PM +0000, David Woodhouse wrote: > > lm@bitmover.com said: > > Then you get to save them as diffs, unedit the files, and put them > > back after the merge. > > I can do better than that. If I save them as diffs, I don't get to use your > cute merge tools. I could commit them with a throwaway changelog, do the > pull and use the merge tools, then copy the resulting files, undo both the > pull and the previous merge, do the pull again and then lock the files and > drop the previously-saved copies into place. Well, what we're doing in PPC-land is we've got one tree, 'linuxppc-2.5' which is linux-2.5 + for-linus-ppc* trees + hacks/fixes for current problems. So when we do any work you make a clone of a linux-2.5 tree to work in, a clone of the linuxppc-2.5 tree (to pull your work tree into and then test). Once things are good in the linux-2.5-work tree, you pull that into a for-linus tree and tell linus to merge that. -- Tom Rini (TR1265) http://gate.crashing.org/~trini/ ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Problems using new Linux-2.4 bitkeeper repository. 2002-03-16 16:52 ` Larry McVoy 2002-03-16 17:06 ` Jeff Garzik @ 2002-03-16 17:17 ` James Bottomley 1 sibling, 0 replies; 23+ messages in thread From: James Bottomley @ 2002-03-16 17:17 UTC (permalink / raw) To: Larry McVoy, Jeff Garzik, Larry McVoy, James Bottomley, linux-kernel lm@bitmover.com said: > If you get into a duplicate patch situation, you are far better off to > pick one tree or the other tree as the official tree, and cherrypick > the changes that the unofficial tree has and place them in the > official tree. Then toss the unofficial tree. I can make you a "bk > portpatch" command which does this, we have that already, it needs a > bit of updating to catch the comments. That's essentially what I had to write to move my trees over, so an official one would be extremely useful. I do have the piece which catches the comments if you want it. jgarzik@mandrakesoft.com said: > So, knowing that duplicate patches are a bad thing helps not in the > least here... If bitkeeper had a way of replacing duplicate patches, this would be extremely useful. All I really needed to do was replace the keys in the changelog from the garzik tree with the mareclo one to get my changes moved over. I think essentially this could be done with a bk send|bk receive as long as I can tell bitkeeper that it needs a substitute set of keys when applying the bkpatch. James ^ permalink raw reply [flat|nested] 23+ messages in thread
end of thread, other threads:[~2002-03-18 15:26 UTC | newest] Thread overview: 23+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2002-03-15 2:38 Problems using new Linux-2.4 bitkeeper repository James Bottomley 2002-03-15 4:55 ` Jeff Garzik 2002-03-16 16:08 ` James Bottomley 2002-03-16 16:28 ` Jeff Garzik 2002-03-16 16:30 ` Larry McVoy 2002-03-16 16:41 ` Jeff Garzik 2002-03-16 16:52 ` Larry McVoy 2002-03-16 17:06 ` Jeff Garzik 2002-03-16 17:14 ` Larry McVoy 2002-03-16 17:25 ` Jeff Garzik 2002-03-16 17:38 ` Larry McVoy 2002-03-16 17:51 ` Jeff Garzik 2002-03-16 18:31 ` Christer Weinigel 2002-03-16 18:05 ` Jeff Garzik 2002-03-16 19:01 ` Larry McVoy 2002-03-16 19:44 ` Jeff Garzik 2002-03-17 10:49 ` David Woodhouse 2002-03-17 15:54 ` Larry McVoy 2002-03-17 16:23 ` David Woodhouse 2002-03-17 18:15 ` Larry McVoy 2002-03-17 18:34 ` David Woodhouse 2002-03-18 15:25 ` Tom Rini 2002-03-16 17:17 ` James Bottomley
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox