merge with stable
authorMatt Mackall <mpm@selenic.com>
Thu, 10 Nov 2011 15:55:26 -0600
changeset 15477 9d774a10e954
parent 15476 7c06e9c35f2f (current diff)
parent 15475 85cba926cb59 (diff)
child 15479 1bb0a5b02da9
merge with stable
--- a/hgext/largefiles/lfcommands.py	Thu Nov 10 15:40:34 2011 -0600
+++ b/hgext/largefiles/lfcommands.py	Thu Nov 10 15:55:26 2011 -0600
@@ -437,7 +437,11 @@
             (not os.path.exists(abslfile) or
              expecthash != lfutil.hashfile(abslfile))):
             if not lfutil.copyfromcache(repo, expecthash, lfile):
-                return None # don't try to set the mode or update the dirstate
+                # use normallookup() to allocate entry in largefiles dirstate,
+                # because lack of it misleads lfiles_repo.status() into
+                # recognition that such cache missing files are REMOVED.
+                lfdirstate.normallookup(lfile)
+                return None # don't try to set the mode
             ret = 1
         mode = os.stat(absstandin).st_mode
         if mode != os.stat(abslfile).st_mode:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-largefiles-cache.t	Thu Nov 10 15:55:26 2011 -0600
@@ -0,0 +1,70 @@
+Create user cache directory
+
+  $ USERCACHE=`pwd`/cache; export USERCACHE
+  $ cat <<EOF >> ${HGRCPATH}
+  > [extensions]
+  > hgext.largefiles=
+  > [largefiles]
+  > usercache=${USERCACHE}
+  > EOF
+  $ mkdir -p ${USERCACHE}
+
+Create source repo, and commit adding largefile.
+
+  $ hg init src
+  $ cd src
+  $ echo large > large
+  $ hg add --large large
+  $ hg commit -m 'add largefile'
+  $ cd ..
+
+Discard all cached largefiles in USERCACHE
+
+  $ rm -rf ${USERCACHE}
+
+Create mirror repo, and pull from source without largefile: 
+"pull" is used instead of "clone" for suppression of (1) updating to
+tip (= cahcing largefile from source repo), and (2) recording source
+repo as "default" path in .hg/hgrc.
+
+  $ hg init mirror
+  $ cd mirror
+  $ hg pull ../src
+  pulling from ../src
+  requesting all changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files
+  (run 'hg update' to get a working copy)
+
+Update working directory to "tip", which requires largefile("large"),
+but there is no cache file for it.  So, hg must treat it as
+"missing"(!) file.
+
+  $ hg update
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  getting changed largefiles
+  large: Can't get file locally
+  (no default or default-push path set in hgrc)
+  0 largefiles updated, 0 removed
+  $ hg status
+  ! large
+
+Update working directory to null: this cleanup .hg/largefiles/dirstate
+
+  $ hg update null
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  getting changed largefiles
+  0 largefiles updated, 0 removed
+
+Update working directory to tip, again.
+
+  $ hg update
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  getting changed largefiles
+  large: Can't get file locally
+  (no default or default-push path set in hgrc)
+  0 largefiles updated, 0 removed
+  $ hg status
+  ! large