Messages in this thread | | | From | (Larry McVoy) | Subject | Re: The history of the Linux OS | Date | Mon, 23 Nov 1998 15:56:23 -0800 |
| |
Simon Kenyon <simon@koala.ie> asks: : i have 1.1.1 : i put it in rcs : THEN i get 1.1.47 : so i put that in rcs : NOW i get 1.1.x where 1 < x < 47 : : how do i insert that inbetween 1.1.1 and 1.1.47? : : can bitmover help?
Of course. You can also teach CVS to do this but it would be a pretty big rewrite and you'd end up with BitKeeper anyway.
Here is how you solve this problem:
Think of each file as a graph, with each node as a delta. Make an invariant which is that the parent of a node never changes. Only add stuff to your file if the parent node is in your file.
So here's the way BitKeeper implements this:
Each node has a unique key which is a string with the following fields from the delta entry: user hostname date (including minutes west of GMT) pathname
When you send out the 1.1.47 diffs, it includes the key for 1.1.46. When you try and apply these diffs into your file, the application program (it's called takepatch) will fail if it doesn't find the 1.1.46 node.
This generalizes to handling branches, etc. It's very simple graph manipulations. The place where everyone screws up can always be described as a violation of the parent/child invariant.
You may not like that you can't apply 1.1.47 as a child of 1.1.1 but that's the way it has to work. Anyone who tells you differently is just telling you what you want to hear.
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |