# HG changeset patch # User Matt Harbison # Date 2015-04-04 23:31:40 # Node ID 8dc2533f03ef35b82020cc5c09f55058208ea496 # Parent a0b47885a1c5fa71d48c2d615949b79f4eeef4e6 largefiles: introduce lfutil.findstorepath() The handful of direct uses of lfutil.storepath() merely need a single path to read from or write to the largefile, whether or not it exists. Most callers that care about the file existing call lfutil.findfile(), in order to fallback from the store to the user cache. localstore._verify() doesn't call lfutil.findfile(). This prevents redirecting the store to the share source because the largefiles for existing repos may not be in the source's store, so verification may fail. It can't be changed to call findfile(), because findfile() links the file from the usercache to the local store[1], and because it returns None instead of a path if the file doesn't exist. For now, this method is just a cover for lfutil.storepath(), but it will be filled out in an upcoming patch. [1] Maybe we shouldn't care? But on a filesystem that doesn't support hardlinks, then verify will take a lot longer, and start to consume disk space. diff --git a/hgext/largefiles/lfutil.py b/hgext/largefiles/lfutil.py --- a/hgext/largefiles/lfutil.py +++ b/hgext/largefiles/lfutil.py @@ -170,6 +170,13 @@ def instore(repo, hash): def storepath(repo, hash): return repo.join(longname, hash) +def findstorepath(repo, hash): + '''Search through the local store path(s) to find the file for the given + hash. If the file is not found, its path in the primary store is returned. + The return value is a tuple of (path, exists(path)). + ''' + return (storepath(repo, hash), instore(repo, hash)) + def copyfromcache(repo, hash, filename): '''Copy the specified largefile from the repo or system cache to filename in the repository. Return true on success or false if the