Mercurial > hg
annotate tests/readlink.py @ 31209:dd2364f5180a
localrepo: handle rename with hardlinks properly
In "aftertrans", we rename "journal.*" to "undo.*". We expect "journal.*"
files to disappear after renaming.
However, if "journal.foo" and "undo.foo" refer to a same file (hardlink),
rename may be a no-op, leaving both files on disk, according to Linux
manpage [1]:
If oldpath and newpath are existing hard links referring to the same
file, then rename() does nothing, and returns a suc‐ cess status.
The POSIX specification [2] is not very clear about what to do.
To be safe, remove "undo.*" before the rename so "journal.*" cannot be left
on disk.
[1]: http://man7.org/linux/man-pages/man2/rename.2.html
[2]: http://pubs.opengroup.org/onlinepubs/9699919799/
author | Jun Wu <quark@fb.com> |
---|---|
date | Thu, 02 Mar 2017 21:49:30 -0800 |
parents | 6a98f9408a50 |
children | c102b704edb5 |
rev | line source |
---|---|
5683
396c7010b0cd
Use common readlink.py instead of own implementations per test script.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
396c7010b0cd
Use common readlink.py instead of own implementations per test script.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
2 |
29485
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29175
diff
changeset
|
3 from __future__ import absolute_import, print_function |
29175
7bcfb9090c86
readlink: use print_function
timeless <timeless@mozdev.org>
parents:
25660
diff
changeset
|
4 |
29485
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29175
diff
changeset
|
5 import errno |
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29175
diff
changeset
|
6 import os |
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29175
diff
changeset
|
7 import sys |
5683
396c7010b0cd
Use common readlink.py instead of own implementations per test script.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
8 |
396c7010b0cd
Use common readlink.py instead of own implementations per test script.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
9 for f in sys.argv[1:]: |
396c7010b0cd
Use common readlink.py instead of own implementations per test script.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
10 try: |
29175
7bcfb9090c86
readlink: use print_function
timeless <timeless@mozdev.org>
parents:
25660
diff
changeset
|
11 print(f, '->', os.readlink(f)) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
10282
diff
changeset
|
12 except OSError as err: |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
5683
diff
changeset
|
13 if err.errno != errno.EINVAL: |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
5683
diff
changeset
|
14 raise |
29175
7bcfb9090c86
readlink: use print_function
timeless <timeless@mozdev.org>
parents:
25660
diff
changeset
|
15 print(f, '->', f, 'not a symlink') |
5683
396c7010b0cd
Use common readlink.py instead of own implementations per test script.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
16 |
396c7010b0cd
Use common readlink.py instead of own implementations per test script.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
17 sys.exit(0) |