# HG changeset patch
# User Jun Wu <quark@fb.com>
# Date 2017-03-29 19:26:46
# Node ID 456efd1b51fd3fa1ea36a3defb536577fb1cb05e
# Parent  bf64449b27792347c839af789685a6097ef8e38d

hardlink: duplicate hardlink detection for copying files and directories

A later patch will change one of them so they diverge.

diff --git a/mercurial/util.py b/mercurial/util.py
--- a/mercurial/util.py
+++ b/mercurial/util.py
@@ -1126,14 +1126,13 @@ def copyfiles(src, dst, hardlink=None, p
     """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)
-
     gettopic = lambda: hardlink and _('linking') or _('copying')
-    topic = gettopic()
 
     if os.path.isdir(src):
+        if hardlink is None:
+            hardlink = (os.stat(src).st_dev ==
+                        os.stat(os.path.dirname(dst)).st_dev)
+        topic = gettopic()
         os.mkdir(dst)
         for name, kind in osutil.listdir(src):
             srcname = os.path.join(src, name)
@@ -1144,6 +1143,11 @@ def copyfiles(src, dst, hardlink=None, p
             hardlink, n = copyfiles(srcname, dstname, hardlink, progress=nprog)
             num += n
     else:
+        if hardlink is None:
+            hardlink = (os.stat(src).st_dev ==
+                        os.stat(os.path.dirname(dst)).st_dev)
+        topic = gettopic()
+
         if hardlink:
             try:
                 oslink(src, dst)