##// END OF EJS Templates
copyfile: add a option callback for failed hardlinking...
marmoute -
r48238:d756fc11 default
parent child Browse files
Show More
@@ -1910,7 +1910,13 b' def checksignature(func, depth=1):'
1910 1910
1911 1911
1912 1912 def copyfile(
1913 src, dest, hardlink=False, copystat=False, checkambig=False, nb_bytes=None
1913 src,
1914 dest,
1915 hardlink=False,
1916 copystat=False,
1917 checkambig=False,
1918 nb_bytes=None,
1919 no_hardlink_cb=None,
1914 1920 ):
1915 1921 """copy a file, preserving mode and optionally other stat info like
1916 1922 atime/mtime
@@ -1937,6 +1943,8 b' def copyfile('
1937 1943 except OSError:
1938 1944 fstype = None
1939 1945 if fstype not in _hardlinkfswhitelist:
1946 if no_hardlink_cb is not None:
1947 no_hardlink_cb()
1940 1948 hardlink = False
1941 1949 if hardlink:
1942 1950 try:
@@ -1945,8 +1953,10 b' def copyfile('
1945 1953 m = "the `nb_bytes` argument is incompatible with `hardlink`"
1946 1954 raise error.ProgrammingError(m)
1947 1955 return
1948 except (IOError, OSError):
1949 pass # fall back to normal copy
1956 except (IOError, OSError) as exc:
1957 if exc.errno != errno.EEXIST and no_hardlink_cb is not None:
1958 no_hardlink_cb()
1959 # fall back to normal copy
1950 1960 if os.path.islink(src):
1951 1961 os.symlink(os.readlink(src), dest)
1952 1962 # copytime is ignored for symlinks, but in general copytime isn't needed
General Comments 0
You need to be logged in to leave comments. Login now