mercurial/util.py
changeset 47445 d756fc11cfb9
parent 47417 9ea525216edb
child 47446 09ff5d532a25
equal deleted inserted replaced
47444:2f4ca4807033 47445:d756fc11cfb9
  1908     b'zfs',
  1908     b'zfs',
  1909 }
  1909 }
  1910 
  1910 
  1911 
  1911 
  1912 def copyfile(
  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     """copy a file, preserving mode and optionally other stat info like
  1921     """copy a file, preserving mode and optionally other stat info like
  1916     atime/mtime
  1922     atime/mtime
  1917 
  1923 
  1918     checkambig argument is used with filestat, and is useful only if
  1924     checkambig argument is used with filestat, and is useful only if
  1935         try:
  1941         try:
  1936             fstype = getfstype(os.path.dirname(dest))
  1942             fstype = getfstype(os.path.dirname(dest))
  1937         except OSError:
  1943         except OSError:
  1938             fstype = None
  1944             fstype = None
  1939         if fstype not in _hardlinkfswhitelist:
  1945         if fstype not in _hardlinkfswhitelist:
       
  1946             if no_hardlink_cb is not None:
       
  1947                 no_hardlink_cb()
  1940             hardlink = False
  1948             hardlink = False
  1941     if hardlink:
  1949     if hardlink:
  1942         try:
  1950         try:
  1943             oslink(src, dest)
  1951             oslink(src, dest)
  1944             if nb_bytes is not None:
  1952             if nb_bytes is not None:
  1945                 m = "the `nb_bytes` argument is incompatible with `hardlink`"
  1953                 m = "the `nb_bytes` argument is incompatible with `hardlink`"
  1946                 raise error.ProgrammingError(m)
  1954                 raise error.ProgrammingError(m)
  1947             return
  1955             return
  1948         except (IOError, OSError):
  1956         except (IOError, OSError) as exc:
  1949             pass  # fall back to normal copy
  1957             if exc.errno != errno.EEXIST and no_hardlink_cb is not None:
       
  1958                 no_hardlink_cb()
       
  1959             # fall back to normal copy
  1950     if os.path.islink(src):
  1960     if os.path.islink(src):
  1951         os.symlink(os.readlink(src), dest)
  1961         os.symlink(os.readlink(src), dest)
  1952         # copytime is ignored for symlinks, but in general copytime isn't needed
  1962         # copytime is ignored for symlinks, but in general copytime isn't needed
  1953         # for them anyway
  1963         # for them anyway
  1954         if nb_bytes is not None:
  1964         if nb_bytes is not None: