diff mercurial/context.py @ 21393:a45af4da0421

localrepo: move symlink logic to workingctx
author Sean Farley <sean.michael.farley@gmail.com>
date Fri, 07 Mar 2014 13:32:37 -0800
parents 25d6fdc0294a
children f251b92d9ed9
line wrap: on
line diff
--- a/mercurial/context.py	Fri May 09 12:01:56 2014 +0200
+++ b/mercurial/context.py	Fri Mar 07 13:32:37 2014 -0800
@@ -1178,6 +1178,25 @@
             finally:
                 wlock.release()
 
+    def _filtersuspectsymlink(self, files):
+        if not files or self._repo.dirstate._checklink:
+            return files
+
+        # Symlink placeholders may get non-symlink-like contents
+        # via user error or dereferencing by NFS or Samba servers,
+        # so we filter out any placeholders that don't look like a
+        # symlink
+        sane = []
+        for f in files:
+            if self.flags(f) == 'l':
+                d = self[f].data()
+                if d == '' or len(d) >= 1024 or '\n' in d or util.binary(d):
+                    self._repo.ui.debug('ignoring suspect symlink placeholder'
+                                        ' "%s"\n' % f)
+                    continue
+            sane.append(f)
+        return sane
+
 class committablefilectx(basefilectx):
     """A committablefilectx provides common functionality for a file context
     that wants the ability to commit, e.g. workingfilectx or memfilectx."""