summaryrefslogtreecommitdiff
path: root/tests/test-largefiles-cache.t
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-largefiles-cache.t')
-rw-r--r--tests/test-largefiles-cache.t125
1 files changed, 125 insertions, 0 deletions
diff --git a/tests/test-largefiles-cache.t b/tests/test-largefiles-cache.t
new file mode 100644
index 0000000..ae6631c
--- /dev/null
+++ b/tests/test-largefiles-cache.t
@@ -0,0 +1,125 @@
+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)
+ caching new largefiles
+ 0 largefiles cached
+
+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
+ $ cd ..
+
+#if unix-permissions
+
+Portable way to print file permissions:
+
+ $ cat > ls-l.py <<EOF
+ > #!/usr/bin/env python
+ > import sys, os
+ > path = sys.argv[1]
+ > print '%03o' % (os.lstat(path).st_mode & 0777)
+ > EOF
+ $ chmod +x ls-l.py
+
+Test that files in .hg/largefiles inherit mode from .hg/store, not
+from file in working copy:
+
+ $ cd src
+ $ chmod 750 .hg/store
+ $ chmod 660 large
+ $ echo change >> large
+ $ hg commit -m change
+ $ ../ls-l.py .hg/largefiles/e151b474069de4ca6898f67ce2f2a7263adf8fea
+ 640
+
+Test permission of with files in .hg/largefiles created by update:
+
+ $ cd ../mirror
+ $ rm -r "$USERCACHE" .hg/largefiles # avoid links
+ $ chmod 750 .hg/store
+ $ hg pull ../src --update -q
+ $ ../ls-l.py .hg/largefiles/e151b474069de4ca6898f67ce2f2a7263adf8fea
+ 640
+
+Test permission of files created by push:
+
+ $ hg serve -R ../src -d -p $HGPORT --pid-file hg.pid \
+ > --config "web.allow_push=*" --config web.push_ssl=no
+ $ cat hg.pid >> $DAEMON_PIDS
+
+ $ echo change >> large
+ $ hg commit -m change
+
+ $ rm -r "$USERCACHE"
+
+ $ hg push -q http://localhost:$HGPORT/
+
+ $ ../ls-l.py ../src/.hg/largefiles/b734e14a0971e370408ab9bce8d56d8485e368a9
+ 640
+
+ $ cd ..
+
+#endif