On Mon, Oct 3, 2016 at 1:36 PM, Jeff King <peff@xxxxxxxx> wrote: > We recursively expand alternates repositories, so that if A > borrows from B which borrows from C, A can see all objects. > > For the root object database, we allow relative paths, so A > can point to B as "../B/objects". However, we currently do > not allow relative paths when recursing, so B must use an > absolute path to reach C. > > That is an ancient protection from c2f493a (Transitively > read alternatives, 2006-05-07) that tries to avoid adding > the same alternate through two different paths. Since > 5bdf0a8 (sha1_file: normalize alt_odb path before comparing > and storing, 2011-09-07), we use a normalized absolute path > for each alt_odb entry. > > This means that in most cases the protection is no longer > necessary; we will detect the duplicate no matter how we got > there (but see below). And it's a good idea to get rid of > it, as it creates an unnecessary complication when setting > up recursive alternates (B has to know that A is going to > borrow from it and make sure to use an absolute path). > I think this makes sense. We already normalize a path, and if the normalization is too complicated, then we (now) fail nicely so we should always have an absolute path to the store. > Note that our normalization doesn't actually look at the > filesystem, so it can still be fooled by crossing symbolic > links. But that's also true of absolute paths, so it's not a > good reason to disallow only relative paths (it's > potentially a reason to switch to real_path(), but that's a > separate and non-trivial change). Hmm, ya using real_path would fix that but I definitely agree that's not trivial and can be done in the future if we think it is or becomes necessary.