##// END OF EJS Templates
largefiles: access to specific fields only if largefiles enabled (issue4547)...
largefiles: access to specific fields only if largefiles enabled (issue4547) Even if largefiles extension is enabled in a repository, "repo" object, which isn't "largefiles.reposetup()"-ed, is passed to overridden functions in the cases below unexpectedly, because extensions are enabled for each repositories strictly. (1) clone without -U: (2) pull with -U: (3) pull with --rebase: combination of "enabled@src", "disabled@dst" and "not-required@src" cause this situation. largefiles requirement @src @dst @src result -------- -------- --------------- -------------------- enabled disabled not-required aborted unexpectedly required requirement error (intentional) -------- -------- --------------- -------------------- enabled enabled * success -------- -------- --------------- -------------------- disabled enabled * success (only for "pull") -------- -------- --------------- -------------------- disabled disabled not-required success required requirement error (intentional) -------- -------- --------------- -------------------- (4) update/revert with a subrepo disabling largefiles In these cases, overridden functions cause accessing to largefiles specific fields of not "largefiles.reposetup()"-ed "repo" object, and execution is aborted. - (1), (2), (4) cause accessing to "_lfstatuswriters" in "getstatuswriter()" invoked via "updatelfiles()" - (3) causes accessing to "_lfcommithooks" in "overriderebase()" For safe accessing to these fields, this patch examines whether passed "repo" object is "largefiles.reposetup()"-ed or not before accessing to them. This patch chooses examining existence of newly introduced "_largefilesenabled" instead of "_lfcommithooks" and "_lfstatuswriters" directly, because the former is better name for the generic "largefiles is enabled in this repo" mark than the latter. In the future, all other overridden functions should avoid largefiles specific processing for efficiency, and "_largefilesenabled" is better also for such purpose. BTW, "lfstatus" can't be used for such purpose, because some code paths set it forcibly regardless of existence of it in specified "repo" object.

File last commit:

r22047:8fb6844a default
r24158:d414c28d stable
Show More
test-permissions.t
72 lines | 1.2 KiB | text/troff | Tads3Lexer
/ tests / test-permissions.t
Matt Mackall
tests: change some #ifs to #requires
r22047 #require unix-permissions no-root
Mads Kiilerich
tests: use 'hghave unix-permissions' for tests that really use chmod...
r15443
Adrian Buehlmann
combine tests
r12279 $ hg init t
$ cd t
$ echo foo > a
$ hg add a
$ hg commit -m "1"
$ hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
1 files, 1 changesets, 1 total revisions
$ chmod -r .hg/store/data/a.i
Matt Mackall
tests: cleanup exit code handling in unified tests
r12365 $ hg verify
Adrian Buehlmann
combine tests
r12279 checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
Mads Kiilerich
tests: remove redundant globs...
r12640 abort: Permission denied: $TESTTMP/t/.hg/store/data/a.i
Matt Mackall
tests: cleanup exit code handling in unified tests
r12365 [255]
Adrian Buehlmann
combine tests
r12279
$ chmod +r .hg/store/data/a.i
Matt Mackall
tests: cleanup exit code handling in unified tests
r12365 $ hg verify
Adrian Buehlmann
combine tests
r12279 checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
1 files, 1 changesets, 1 total revisions
$ chmod -w .hg/store/data/a.i
$ echo barber > a
Matt Mackall
tests: cleanup exit code handling in unified tests
r12365 $ hg commit -m "2"
Adrian Buehlmann
combine tests
r12279 trouble committing a!
Mads Kiilerich
tests: remove redundant globs...
r12640 abort: Permission denied: $TESTTMP/t/.hg/store/data/a.i
Matt Mackall
tests: cleanup exit code handling in unified tests
r12365 [255]
Adrian Buehlmann
combine tests
r12279
$ chmod -w .
$ hg diff --nodates
diff -r 2a18120dc1c9 a
--- a/a
+++ b/a
@@ -1,1 +1,1 @@
-foo
+barber
$ chmod +w .
$ chmod +w .hg/store/data/a.i
$ mkdir dir
$ touch dir/a
$ hg status
M a
? dir/a
$ chmod -rx dir
$ hg status
dir: Permission denied
M a
Reenable perm to allow deletion:
$ chmod +rx dir
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913 $ cd ..