Monticello dependency handling
Avi Bryant
avi at beta4.com
Sat Feb 14 02:37:05 UTC 2004
On Feb 13, 2004, at 6:16 PM, Avi Bryant wrote:
> I'm not sure I agree. I would definitely want to at least save the
> information about the specific dependencies - otherwise there's no way
> to roll the whole thing back to a particular state ("what was Bert
> thinking when he wrote this code? Oh, I see, it's because he was
> working against *that* version of this other package..."). I haven't
> thought this through, but maybe one way to do it would be to record
> dependencies in both directions? So, if I make a major change to when
> going from B3D-Morphic ar.32 to avi.33, which lets me totally
> reorganize B3D-Kernel, when I save B3D-Kernel-avi.33, it will know
> that it was saved with B3D-Morphic-avi.33 dependent on it. Then when
> I load B3D-Morphic-ar.32, it'll look at B3D-Kernel-avi.33, see the
> reverse dependency, and decide this is too new for it. On the other
> hand if Bert meanwhile produces B3D-Kernel-bf.33, without even having
> B3D-Morphic loaded (or having ar.32 loaded), it won't have that
> particular reverse dependency, and so B3D-Morphic-ar.32 will be ok
> with using it.
This wasn't very clear. Let me try again:
- When you save a new version of a package, it records the current
versions of any dependents (packages that depend on it) that it knows
about (there may be some that are not currently loaded). It also
records the current versions of all of its dependencies.
- When you load version N of package A, it will go through the
packages named in its dependencies, and look for the latest version
that has version N as a dependent (let us call this version X of
package B). Any versions of B later than X that have a version of A >
N as a dependent will be ignored. If there is any version of B later
than X that does not have any version of A as a dependent (it was saved
when A was not loaded), the user will be asked if they would prefer to
use that one. Failing any such version X it will look for the exact
version specified in version N's dependency list.
One problem with this scheme is that currently there is only minimal
metadata available from remote repositories (the filename). This works
if you're looking for a specific version but is no good when doing
searches like this. We need to fix this, pronto, either by introducing
a metadata protocol that smart repositories like SqueakSource
understand, or by treating repositories as feeds into a local cache and
downloading everything in them at regular intervals.
More information about the Squeak-dev
mailing list
|