--- 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."""
--- a/mercurial/localrepo.py Fri May 09 12:01:56 2014 +0200
+++ b/mercurial/localrepo.py Fri Mar 07 13:32:37 2014 -0800
@@ -1609,21 +1609,8 @@
added.append(fn)
removed = mf1.keys()
- if working and modified and not self.dirstate._checklink:
- # 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 modified:
- if ctx2.flags(f) == 'l':
- d = ctx2[f].data()
- if d == '' or len(d) >= 1024 or '\n' in d or util.binary(d):
- self.ui.debug('ignoring suspect symlink placeholder'
- ' "%s"\n' % f)
- continue
- sane.append(f)
- modified = sane
+ if working:
+ modified = ctx2._filtersuspectsymlink(modified)
r = modified, added, removed, deleted, unknown, ignored, clean