[PATCH 1 of 2] test symlinks on symlink-capable os but non-capable filesystem (issue1149)

Dov Feldstern dfeldstern at fastimap.com
Thu Jul 31 14:50:15 CDT 2008


# HG changeset patch
# User Dov Feldstern <dfeldstern at fastimap.com>
# Date 1217533279 -10800
# Node ID 1a42f2a5dcdb22ecc291918076cec1481a329c5e
# Parent  8dc510c4caee437631e47ec9be891279abeffc33
test symlinks on symlink-capable os but non-capable filesystem (issue1149)

The "real" way to test this is to mount a non-symlink-capable filesystem, and
try working on it; however, I don't know how to mount filesystems as a
non-priveleged user from within the testing framework. So instead, os.symlink
is overridden to raise the exception that would be raised on such a filesystem.

diff -r 8dc510c4caee -r 1a42f2a5dcdb tests/test-symlink-os-yes-fs-no.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-symlink-os-yes-fs-no.py	Thu Jul 31 22:41:19 2008 +0300
@@ -0,0 +1,17 @@
+import os, sys
+from mercurial import hg, ui
+
+TESTDIR = os.environ["TESTDIR"]
+
+# only makes sense to test on os which supports symlinks
+if not hasattr(os, "symlink"):
+    sys.exit(80) # SKIPPED_STATUS defined in run-tests.py
+
+# this is what symlink would do on a non-symlink file system
+def symlink_failure(src, dst):
+    raise OSError, (1, "Operation not permitted")
+os.symlink = symlink_failure
+
+# now try cloning a repo which contains symlinks
+u = ui.ui()
+hg.clone(u, os.path.join(TESTDIR, 'test-no-symlinks.hg'), 'test1')
diff -r 8dc510c4caee -r 1a42f2a5dcdb tests/test-symlink-os-yes-fs-no.py.out
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-symlink-os-yes-fs-no.py.out	Thu Jul 31 22:41:19 2008 +0300
@@ -0,0 +1,7 @@
+requesting all changes
+adding changesets
+adding manifests
+adding file changes
+added 1 changesets with 4 changes to 4 files
+updating working directory
+4 files updated, 0 files merged, 0 files removed, 0 files unresolved


More information about the Mercurial-devel mailing list