diff -r 5b85a5bc5bbb -r 2ddfac2f163e mercurial/util.py --- a/mercurial/util.py Mon Mar 23 23:04:51 2015 -0700 +++ b/mercurial/util.py Thu Mar 19 10:24:22 2015 -0400 @@ -739,20 +739,27 @@ except shutil.Error, inst: raise Abort(str(inst)) -def copyfiles(src, dst, hardlink=None): - """Copy a directory tree using hardlinks if possible""" +def copyfiles(src, dst, hardlink=None, progress=lambda t, pos: None): + """Copy a directory tree using hardlinks if possible.""" + num = 0 if hardlink is None: hardlink = (os.stat(src).st_dev == os.stat(os.path.dirname(dst)).st_dev) + if hardlink: + topic = _('linking') + else: + topic = _('copying') - num = 0 if os.path.isdir(src): os.mkdir(dst) for name, kind in osutil.listdir(src): srcname = os.path.join(src, name) dstname = os.path.join(dst, name) - hardlink, n = copyfiles(srcname, dstname, hardlink) + def nprog(t, pos): + if pos is not None: + return progress(t, pos + num) + hardlink, n = copyfiles(srcname, dstname, hardlink, progress=nprog) num += n else: if hardlink: @@ -764,6 +771,8 @@ else: shutil.copy(src, dst) num += 1 + progress(topic, num) + progress(topic, None) return hardlink, num