>>>>> "stevel" == Stephen Lau <stevel at sun.com> writes:
Mike> I wonder if symbolic links or lofs paths could give you Mike> problems. Test case: the user specifies "/home/kupfer/ws/foo", which Mike> is really a symbolic link to /net/somehost/export/kupfer/ws/foo. We Mike> want this to work on both somehost and on other hosts. Note that Mike> localrepo.root is generated using os.path.realpath(). stevel> I *think* that should work; I tried a couple of symlink tests stevel> (though not with the /net automounter)... it requires it to be stevel> run out of the root of the repository though, so as long as stevel> you're in it - it should just work. Since findunref is not documented, I guess it's only important that findunref work when invoked by nightly. I've partially worked through an example, and I still don't trust the code. Maybe I just don't understand the subrepo logic. (Or maybe my lack of Python experience is showing.) Suppose my environment file has CODEMGR_WS="/home/kupfer/ws/6570962", and that /home/kupfer/ws/6570962 is a symbolic link to where the workspace actually lives. (This is typical of how I set up my workspaces.) This means that findunref will get invoked with "/home/kupfer/ws/6570962/usr/src/../.." for the open tree and "/home/kupfer/ws/6570962/usr/src/../closed" for the closed tree. In walk_scm_hg, repo.root, which uses os.path.realpath, will be '/net/athyra/export/kupfer/6570962' for the open tree and '/net/athyra/export/kupfer/6570962/usr/closed' for the closed tree. ws, which comes from os.path.abspath, will be '/home/kupfer/ws/6570962' for the open tree and '/home/kupfer/ws/6570962/usr/closed' for the closed tree. So for both the open and closed trees, repo.root != ws, and we'll enter the subrepo logic. For the open tree, prefix will end up '//', and subrepo will end up '/home/kupfer/ws/6570962/' (ws.replace(prefix, ...) is a no-op). subtree will be '/home/kupfer/ws/6570962/usr/src'. For the closed tree, prefix will also end up '//', subrepo will end up '/home/kupfer/ws/6570962/usr/closed/', and subtree will end up '/home/kupfer/ws/6570962/usr/closed/'. Please check my logic: am I misunderstanding what will happen in walk_scm_hg? It seems awfully convoluted. Also, this code seems to imply that the paths in "files" are relative to the workspace root: files = repo.changectx(None).manifest().keys() if subtree: files = filter(lambda x: x.startswith(subtree), files) But subtree has turned into an absolute path. How can this work? More generally, what situation is the subrepo logic supposed to be handling? Everything else looks okay. mike