largefiles: add examination of exec bit in "hg status --rev REV" case
Before this patch, "hg status --rev REV" doesn't list largefiles up
with "M" mark, even if exec bit of them is changed, because
"lfilesrepo.status" doesn't examine exec bit in such case.
--- a/hgext/largefiles/reposetup.py Tue Oct 28 01:14:11 2014 +0900
+++ b/hgext/largefiles/reposetup.py Tue Oct 28 01:14:12 2014 +0900
@@ -174,8 +174,11 @@
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)
--- a/tests/test-largefiles-update.t Tue Oct 28 01:14:11 2014 +0900
+++ b/tests/test-largefiles-update.t Tue Oct 28 01:14:12 2014 +0900
@@ -552,4 +552,31 @@
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 ..