view tests/test-commit.out @ 11769:ca6cebd8734e stable

dirstate: ignore symlinks when fs cannot handle them (issue1888) When the filesystem cannot handle the executable bit, we currently ignore it completely when looking for modified files. Similarly, it is impossible to set or clear the bit when the filesystem ignores it. This patch makes Mercurial treat symbolic links the same way. Symlinks are a little different since they manifest themselves as small files containing a filename (the symlink target). On Windows, these files show up as regular files, and on Linux and Mac they show up as real symlinks. Issue1888 presents a case where the symlink files are better ignored from the Windows side. A Linux client creates symlinks in a working copy which is shared over a network between Linux and Windows clients. The Samba server is helpful and defererences the symlink when the Windows client looks at it. This means that Mercurial on the Windows side sees file content instead of a file name in the symlink, and hence flags the link as modified. Ignoring the change would be much more helpful, similarly to how Mercurial does not report any changes when executable bits are ignored in a checkout on Windows. An initial checkout of a symbolic link on a file system that cannot handle symbolic links will still result in a regular file containing the target file name as its content. Sharing such a checkout with a Linux client will not turn the file into a symlink automatically, but 'hg revert' can fix that. After the revert, the Windows client will see the correct file content (provided by the Samba server when it follows the link on the Linux side) and otherwise ignore the change. Running 'hg perfstatus' 10 times gives these results: Before: After: min: 0.544703 min: 0.546549 med: 0.547592 med: 0.548881 avg: 0.549146 avg: 0.548549 max: 0.564112 max: 0.551504 The median time is increased about 0.24%.
author Martin Geisler <mg@aragost.com>
date Mon, 09 Aug 2010 15:31:56 +0200
parents b9e0ddb04c5c
children
line wrap: on
line source

% commit date test
abort: empty commit message
abort: impossible time zone offset: 4444444
abort: invalid date: '1\t15.1' 
abort: invalid date: 'foo bar' 
abort: date exceeds 32 bits: 111111111111
% commit added file that has been deleted
nothing changed
abort: bar: file not found!
adding dir/file
dir/file
committed changeset 2:d2a76177cb42
adding dir.file
abort: dir: no match under directory!
abort: bleh: no match under directory!
abort: dir2: no match under directory!
dir/file
committed changeset 3:1cd62a2d8db5
abort: does-not-exist: No such file or directory
abort: baz: file not tracked!
abort: quux: file not tracked!
dir/file
committed changeset 4:49176991390e
% partial subdir commit test
adding bar/bar
adding foo/foo
% subdir log 1
changeset:   0:6ef3cb06bb80
user:        test
date:        Mon Jan 12 13:46:40 1970 +0000
files:       foo/foo
description:
commit-subdir-1


% subdir log 2
changeset:   1:f2e51572cf5a
tag:         tip
user:        test
date:        Mon Jan 12 13:46:41 1970 +0000
files:       bar/bar
description:
commit-subdir-2


% full log
changeset:   1:f2e51572cf5a
tag:         tip
user:        test
date:        Mon Jan 12 13:46:41 1970 +0000
files:       bar/bar
description:
commit-subdir-2


changeset:   0:6ef3cb06bb80
user:        test
date:        Mon Jan 12 13:46:40 1970 +0000
files:       foo/foo
description:
commit-subdir-1


% dot and subdir commit test
% full log
changeset:   1:d9180e04fa8a
tag:         tip
user:        test
date:        Sat Jan 24 03:33:20 1970 +0000
files:       foo/plain-file
description:
commit-foo-dot


changeset:   0:80b572aaf098
user:        test
date:        Mon Jan 12 13:46:40 1970 +0000
files:       foo/plain-file
description:
commit-foo-subdir


% subdir log
changeset:   1:d9180e04fa8a
tag:         tip
user:        test
date:        Sat Jan 24 03:33:20 1970 +0000
summary:     commit-foo-dot

changeset:   0:80b572aaf098
user:        test
date:        Mon Jan 12 13:46:40 1970 +0000
summary:     commit-foo-subdir

adding a
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
created new head
merging a
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
% should fail because we are specifying a file name
abort: cannot partially commit a merge (do not specify files or patterns)
% should fail because we are specifying a pattern
abort: cannot partially commit a merge (do not specify files or patterns)
% should succeed
% test commit message content


HG: Enter commit message.  Lines beginning with 'HG:' are removed.
HG: Leave message empty to abort commit.
HG: --
HG: user: test
HG: branch 'default'
HG: added added
HG: changed changed
HG: removed removed
abort: empty commit message