I have a project version-controlled by the Mercurial (project main
). The project references (uses) some files from another project (sub
) by a symbolic link in the main
pointing to a file in sub
. The symbolic link is added to the main
's repository.
The problem is that Mercurial doesn't detect changes made to the target file at sub
, not marking the symlink as 'M' (modified).
The situation is shown in the following example:
Create, init and commit initial repos:
$ mkdir crap
$ cd crap
$ mkdir main sub
$ cd sub
$ nano sub.txt
$ hg init
$ hg add sub.txt
$ cd ../main/
$ nano main.txt
$ ln -s ../sub/sub.txt ./sub.txt
$ ls -la
total 24
drwxrwxr-x 2 ruslan ruslan 4096 Jan 15 12:51 .
drwxrwxr-x 4 ruslan ruslan 4096 Jan 15 12:48 ..
-rw-rw-r-- 1 ruslan ruslan 20 Jan 15 12:51 main.txt
lrwxrwxrwx 1 ruslan ruslan 14 Jan 15 12:51 sub.txt -> ../sub/sub.txt
$ hg init
$ hg add main.txt sub.txt
$ hg commit -m "First"
$ cd ../sub
$ hg commit -m "Sub First"
$ hg status ./sub -A
C sub/sub.txt
$ hg status ./main -A
C main/main.txt
C main/sub.txt
now modify and commit the target in sub
:
$ nano ./sub/sub.txt
$ hg status ./sub -A
M sub/sub.txt
$ hg commit ./sub -m "Modified"
$ hg status ./sub -A
C sub/sub.txt
now status of the main
shows that the symlink that references the target is not marked as 'M':
$ hg status ./main -A
C main/main.txt
C main/sub.txt
modifying the sub
again without the commit shows 'M' in sub
but not in main
:
$ nano ./sub/sub.txt
$ hg status ./sub
M sub/sub.txt
$ hg status ./main -A
C main/main.txt
C main/sub.txt
How can I properly make Mercurial detect changes in symlinks' targets?
You can't. For security reasons, Mercurial never traverses symbolic links.