From patchwork Sat Aug 31 19:18:09 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [1,of,3] localrepo.status: ignore empty symlink placeholders From: Siddharth Agarwal X-Patchwork-Id: 2292 Message-Id: <47ca48b126a916927160.1377976689@dev1091.prn1.facebook.com> To: mercurial-devel@selenic.com Date: Sat, 31 Aug 2013 12:18:09 -0700 # HG changeset patch # User Siddharth Agarwal # Date 1377969366 25200 # Sat Aug 31 10:16:06 2013 -0700 # Node ID 47ca48b126a91692716003fc904b27be519bcdcf # Parent d61b5370569659bd54a6de324655a0bb11d2af73 localrepo.status: ignore empty symlink placeholders A symlink's target should never be empty in normal use. Solaris and some BSDs do allow empty symlinks to be created (with varying semantics on dereference), but a symlink placeholder that started off as empty is either - going to be empty, in which case ignoring it is fine, since it's unchanged, or - going to not be empty, in which case this check is irrelevant. diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -1561,7 +1561,7 @@ for f in modified: if ctx2.flags(f) == 'l': d = ctx2[f].data() - if len(d) >= 1024 or '\n' in d or util.binary(d): + 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 diff --git a/tests/test-symlink-placeholder.t b/tests/test-symlink-placeholder.t --- a/tests/test-symlink-placeholder.t +++ b/tests/test-symlink-placeholder.t @@ -41,6 +41,13 @@ a (no-eol) $ hg --config extensions.n=$TESTTMP/nolink.py st --debug +Empty placeholder: + + $ rm b + $ touch b + $ hg --config extensions.n=$TESTTMP/nolink.py st --debug + ignoring suspect symlink placeholder "b" + Write binary data to the placeholder: >>> open('b', 'w').write('this is a binary\0')