summaryrefslogtreecommitdiff
path: root/test/symlinks.test
diff options
context:
space:
mode:
authorcashmere <cashmere@autistici.org>2026-09-04 09:05:24 +0200
committercashmere <cashmere@autistici.org>2026-09-04 09:05:24 +0200
commit4f49b16079b27d7ce633619e4cddfdf2bffbc952 (patch)
treec296c1e7f3c3e2f6859c6d3a1b1b208779b89679 /test/symlinks.test
downloadrelic-4f49b16079b27d7ce633619e4cddfdf2bffbc952.tar.gz
initial commitHEADmaster
Diffstat (limited to 'test/symlinks.test')
-rw-r--r--test/symlinks.test111
1 files changed, 111 insertions, 0 deletions
diff --git a/test/symlinks.test b/test/symlinks.test
new file mode 100644
index 0000000..446c741
--- /dev/null
+++ b/test/symlinks.test
@@ -0,0 +1,111 @@
+#
+# Copyright (c) 2016 D. Richard Hipp
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the Simplified BSD License (also
+# known as the "2-Clause License" or "FreeBSD License".)
+#
+# This program is distributed in the hope that it will be useful,
+# but without any warranty; without even the implied warranty of
+# merchantability or fitness for a particular purpose.
+#
+# Author contact information:
+# drh@hwaci.com
+# http://www.hwaci.com/drh/
+#
+############################################################################
+#
+# Symbolic link tests.
+#
+
+set path [file dirname [info script]]
+
+if {$is_windows} {
+ puts "Symlinks are not supported on Windows."
+ test_cleanup_then_return
+}
+
+require_no_open_checkout
+
+###############################################################################
+
+test_setup; set rootDir [file normalize [pwd]]
+
+# Using tempHomePath, allow-symlinks will always be off at this point.
+fossil set allow-symlinks on
+
+fossil test-th-eval --open-config {repository}
+set repository [normalize_result]
+
+if {[string length $repository] == 0} {
+ puts "Detection of the open repository file failed."
+ test_cleanup_then_return
+}
+
+#######################################
+# Use symbolic link to a directory... #
+#######################################
+
+file mkdir [file join $rootDir subdirA]
+exec ln -s [file join $rootDir subdirA] symdirA
+
+###############################################################################
+
+write_file [file join $rootDir subdirA f1.txt] "f1"
+write_file [file join $rootDir subdirA f2.txt] "f2"
+
+test symlinks-dir-1 {[file exists [file join $rootDir subdirA f1.txt]] eq 1}
+test symlinks-dir-2 {[file exists [file join $rootDir symdirA f1.txt]] eq 1}
+test symlinks-dir-3 {[file exists [file join $rootDir subdirA f2.txt]] eq 1}
+test symlinks-dir-4 {[file exists [file join $rootDir symdirA f2.txt]] eq 1}
+
+fossil add [file join $rootDir symdirA f1.txt]
+test symlinks-skip-dir-traversal {[normalize_result] eq \
+"SKIP symdirA/f1.txt"}
+
+fossil commit -m "c1" -expectError
+
+test symlinks-empty-commit {[normalize_result] eq \
+"nothing has changed; use --allow-empty to override"}
+
+###############################################################################
+
+fossil ls
+test symlinks-dir-5 {[normalize_result] eq ""}
+
+###############################################################################
+
+fossil extras
+test symlinks-dir-6 {[normalize_result] eq \
+"subdirA/f1.txt\nsubdirA/f2.txt\nsymdirA"}
+
+###############################################################################
+
+fossil close
+file delete [file join $rootDir subdirA f1.txt]
+
+test symlinks-dir-7 {[file exists [file join $rootDir subdirA f1.txt]] eq 0}
+test symlinks-dir-8 {[file exists [file join $rootDir symdirA f1.txt]] eq 0}
+test symlinks-dir-9 {[file exists [file join $rootDir subdirA f2.txt]] eq 1}
+test symlinks-dir-10 {[file exists [file join $rootDir symdirA f2.txt]] eq 1}
+
+###############################################################################
+
+fossil open --force $repository
+set code [catch {file readlink [file join $rootDir symdirA]} result]
+
+test symlinks-dir-11 {$code == 0}
+test symlinks-dir-12 {$result eq [file join $rootDir subdirA]}
+test symlinks-dir-13 {[file exists [file join $rootDir subdirA f1.txt]] eq 0}
+test symlinks-dir-14 {[file exists [file join $rootDir symdirA f1.txt]] eq 0}
+test symlinks-dir-15 {[file exists [file join $rootDir subdirA f2.txt]] eq 1}
+test symlinks-dir-16 {[file exists [file join $rootDir symdirA f2.txt]] eq 1}
+
+###############################################################################
+#
+# TODO: Add tests for symbolic links as files here, including tests with the
+# "allow-symlinks" setting on and off.
+#
+###############################################################################
+
+test_cleanup