Mercurial > hg
comparison mercurial/util.py @ 38380:63e6f5ae84bc
copystore: use progress helper
Differential Revision: https://phab.mercurial-scm.org/D3781
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Sun, 17 Jun 2018 22:57:34 -0700 |
parents | 565074cc9ac6 |
children | da2a7d8354b2 |
comparison
equal
deleted
inserted
replaced
38379:3a7c33a2cc5e | 38380:63e6f5ae84bc |
---|---|
1629 oldstat.stat[stat.ST_MTIME] + 1) & 0x7fffffff | 1629 oldstat.stat[stat.ST_MTIME] + 1) & 0x7fffffff |
1630 os.utime(dest, (advanced, advanced)) | 1630 os.utime(dest, (advanced, advanced)) |
1631 except shutil.Error as inst: | 1631 except shutil.Error as inst: |
1632 raise error.Abort(str(inst)) | 1632 raise error.Abort(str(inst)) |
1633 | 1633 |
1634 def copyfiles(src, dst, hardlink=None, progress=lambda t, pos: None): | 1634 def copyfiles(src, dst, hardlink=None, progress=None): |
1635 """Copy a directory tree using hardlinks if possible.""" | 1635 """Copy a directory tree using hardlinks if possible.""" |
1636 num = 0 | 1636 num = 0 |
1637 | 1637 |
1638 gettopic = lambda: hardlink and _('linking') or _('copying') | 1638 def settopic(): |
1639 if progress: | |
1640 progress.topic = _('linking') if hardlink else _('copying') | |
1639 | 1641 |
1640 if os.path.isdir(src): | 1642 if os.path.isdir(src): |
1641 if hardlink is None: | 1643 if hardlink is None: |
1642 hardlink = (os.stat(src).st_dev == | 1644 hardlink = (os.stat(src).st_dev == |
1643 os.stat(os.path.dirname(dst)).st_dev) | 1645 os.stat(os.path.dirname(dst)).st_dev) |
1644 topic = gettopic() | 1646 settopic() |
1645 os.mkdir(dst) | 1647 os.mkdir(dst) |
1646 for name, kind in listdir(src): | 1648 for name, kind in listdir(src): |
1647 srcname = os.path.join(src, name) | 1649 srcname = os.path.join(src, name) |
1648 dstname = os.path.join(dst, name) | 1650 dstname = os.path.join(dst, name) |
1649 def nprog(t, pos): | 1651 hardlink, n = copyfiles(srcname, dstname, hardlink, progress) |
1650 if pos is not None: | |
1651 return progress(t, pos + num) | |
1652 hardlink, n = copyfiles(srcname, dstname, hardlink, progress=nprog) | |
1653 num += n | 1652 num += n |
1654 else: | 1653 else: |
1655 if hardlink is None: | 1654 if hardlink is None: |
1656 hardlink = (os.stat(os.path.dirname(src)).st_dev == | 1655 hardlink = (os.stat(os.path.dirname(src)).st_dev == |
1657 os.stat(os.path.dirname(dst)).st_dev) | 1656 os.stat(os.path.dirname(dst)).st_dev) |
1658 topic = gettopic() | 1657 settopic() |
1659 | 1658 |
1660 if hardlink: | 1659 if hardlink: |
1661 try: | 1660 try: |
1662 oslink(src, dst) | 1661 oslink(src, dst) |
1663 except (IOError, OSError): | 1662 except (IOError, OSError): |
1664 hardlink = False | 1663 hardlink = False |
1665 shutil.copy(src, dst) | 1664 shutil.copy(src, dst) |
1666 else: | 1665 else: |
1667 shutil.copy(src, dst) | 1666 shutil.copy(src, dst) |
1668 num += 1 | 1667 num += 1 |
1669 progress(topic, num) | 1668 if progress: |
1670 progress(topic, None) | 1669 progress.increment() |
1671 | 1670 |
1672 return hardlink, num | 1671 return hardlink, num |
1673 | 1672 |
1674 _winreservednames = { | 1673 _winreservednames = { |
1675 'con', 'prn', 'aux', 'nul', | 1674 'con', 'prn', 'aux', 'nul', |