Re: BitBucket: GPL-ed KitBeeper clone

Daniel Phillips
2003-03-12T13:33:29Z

On Wed 12 Mar 03 06:44, Horst von Brand wrote:
> There is no universal "before" and "after", even within one repository;

Sure there is, e.g., by incrementing master transaction number on the
repository database.

> there might be changes that can't be ordered. I.e., changes to files foo
> and bar are independent, and might have happened in any order for the same
> result. Same for all non-overlapping changes.

I think what you're saying is that the repository may be ordered in more than
one way at the same time. Transaction serial number is just one way.
Whatever else is recorded in the repository, at least there ought to be a
serial number on every transaction, a simple unstructured counter. With just
this serial number you already have a way to roll back the entire repository
to any point in the past, provided all repository transactions are reversible.

For dependencies between changes, rather than any fixed ordering, it's better
to record the actual precedence information, i.e., "a before b", where a and
b are id numbers of changes (I think everybody agrees changes are first class
objects). These precedence relations can be determined automatically: if two
changes do not occur in the same file, there is no certainly no precedence
relation. If two changes overlap the same text, then there is a precedence
relation. If two changes do not overlap, there may or may not be a
precedence relation, depending on whether the changes are exact deltas or
deltas-with-context, and if the latter, whether the context is unambiguous.

Once you have the precedence relations, there are all kinds of useful things
you can do with them.

Regards,

Daniel