diff -r d90e3faf96a9 -r e6b0de02a02e hgext/largefiles/overrides.py --- a/hgext/largefiles/overrides.py Sun Mar 01 14:21:54 2015 -0500 +++ b/hgext/largefiles/overrides.py Sun Mar 01 18:35:29 2015 -0500 @@ -313,19 +313,25 @@ return tostandin(kindpat[1]) if m._cwd: - if os.path.isabs(m._cwd): - # TODO: handle largefile magic when invoked from other cwd - return matchandpats - back = (m._cwd.count('/') + 1) * '../' + hglf = lfutil.shortname + back = util.pconvert(m.rel(hglf)[:-len(hglf)]) def tostandin(f): # The file may already be a standin, so trucate the back - # escaping and test before mangling it. This avoids turning + # prefix and test before mangling it. This avoids turning # 'glob:../.hglf/foo*' into 'glob:../.hglf/../.hglf/foo*'. if f.startswith(back) and lfutil.splitstandin(f[len(back):]): return f - return back + lfutil.standin(m._cwd + '/' + f) + # An absolute path is from outside the repo, so truncate the + # path to the root before building the standin. Otherwise cwd + # is somewhere in the repo, relative to root, and needs to be + # prepended before building the standin. + if os.path.isabs(m._cwd): + f = f[len(back):] + else: + f = m._cwd + '/' + f + return back + lfutil.standin(f) pats.update(fixpats(f, tostandin) for f in p) else: