diff --git a/hgext/largefiles/reposetup.py b/hgext/largefiles/reposetup.py --- a/hgext/largefiles/reposetup.py +++ b/hgext/largefiles/reposetup.py @@ -174,8 +174,11 @@ def reposetup(ui, repo): for lfile in tocheck: standin = lfutil.standin(lfile) if standin in ctx1: - if ctx1[standin].data().strip() != \ - lfutil.hashfile(self.wjoin(lfile)): + abslfile = self.wjoin(lfile) + if ((ctx1[standin].data().strip() != + lfutil.hashfile(abslfile)) or + (('x' in ctx1.flags(standin)) != + bool(lfutil.getexecutable(abslfile)))): modified.append(lfile) elif listclean: clean.append(lfile) diff --git a/tests/test-largefiles-update.t b/tests/test-largefiles-update.t --- a/tests/test-largefiles-update.t +++ b/tests/test-largefiles-update.t @@ -552,4 +552,31 @@ in the target context. R largeX $ hg status -A --rev '.^1' largeX +#if execbit + +Test that "hg status" against revisions other than parent notices exec +bit changes of largefiles. + + $ hg update -q -C 4 + +(the case that large2 doesn't have exec bit in the target context but +in the working context) + + $ chmod +x large2 + $ hg status -A --rev 0 large2 + M large2 + $ hg commit -m 'chmod +x large2' + +(the case that large2 has exec bit in the target context but not in +the working context) + + $ echo dummy > dummy + $ hg add dummy + $ hg commit -m 'revision for separation' + $ chmod -x large2 + $ hg status -A --rev '.^1' large2 + M large2 + +#endif + $ cd ..