copies: refactor symmetricdifference as _findlimit
We only need to track the lowest revision seen, which makes things simpler.
# same user, same group
trusted
global = /some/path
interpolated = /some/path/another/path
local = /another/path
untrusted
. . global = /some/path
. . interpolated = /some/path/another/path
. . local = /another/path
# same user, different group
trusted
global = /some/path
interpolated = /some/path/another/path
local = /another/path
untrusted
. . global = /some/path
. . interpolated = /some/path/another/path
. . local = /another/path
# different user, same group
Not trusting file .hg/hgrc from untrusted user abc, group bar
trusted
global = /some/path
untrusted
. . global = /some/path
. . interpolated = /some/path/another/path
. . local = /another/path
# different user, same group, but we trust the group
trusted
global = /some/path
interpolated = /some/path/another/path
local = /another/path
untrusted
. . global = /some/path
. . interpolated = /some/path/another/path
. . local = /another/path
# different user, different group
Not trusting file .hg/hgrc from untrusted user abc, group def
trusted
global = /some/path
untrusted
. . global = /some/path
. . interpolated = /some/path/another/path
. . local = /another/path
# different user, different group, but we trust the user
trusted
global = /some/path
interpolated = /some/path/another/path
local = /another/path
untrusted
. . global = /some/path
. . interpolated = /some/path/another/path
. . local = /another/path
# different user, different group, but we trust the group
trusted
global = /some/path
interpolated = /some/path/another/path
local = /another/path
untrusted
. . global = /some/path
. . interpolated = /some/path/another/path
. . local = /another/path
# different user, different group, but we trust the user and the group
trusted
global = /some/path
interpolated = /some/path/another/path
local = /another/path
untrusted
. . global = /some/path
. . interpolated = /some/path/another/path
. . local = /another/path
# we trust all users
# different user, different group
trusted
global = /some/path
interpolated = /some/path/another/path
local = /another/path
untrusted
. . global = /some/path
. . interpolated = /some/path/another/path
. . local = /another/path
# we trust all groups
# different user, different group
trusted
global = /some/path
interpolated = /some/path/another/path
local = /another/path
untrusted
. . global = /some/path
. . interpolated = /some/path/another/path
. . local = /another/path
# we trust all users and groups
# different user, different group
trusted
global = /some/path
interpolated = /some/path/another/path
local = /another/path
untrusted
. . global = /some/path
. . interpolated = /some/path/another/path
. . local = /another/path
# we don't get confused by users and groups with the same name
# different user, different group
Not trusting file .hg/hgrc from untrusted user abc, group def
trusted
global = /some/path
untrusted
. . global = /some/path
. . interpolated = /some/path/another/path
. . local = /another/path
# list of user names
# different user, different group, but we trust the user
trusted
global = /some/path
interpolated = /some/path/another/path
local = /another/path
untrusted
. . global = /some/path
. . interpolated = /some/path/another/path
. . local = /another/path
# list of group names
# different user, different group, but we trust the group
trusted
global = /some/path
interpolated = /some/path/another/path
local = /another/path
untrusted
. . global = /some/path
. . interpolated = /some/path/another/path
. . local = /another/path
# Can't figure out the name of the user running this process
# different user, different group
trusted
global = /some/path
interpolated = /some/path/another/path
local = /another/path
untrusted
. . global = /some/path
. . interpolated = /some/path/another/path
. . local = /another/path
# prints debug warnings
# different user, different group
Not trusting file .hg/hgrc from untrusted user abc, group def
trusted
Ignoring untrusted configuration option paths.interpolated = /some/path/another/path
Ignoring untrusted configuration option paths.local = /another/path
global = /some/path
untrusted
. . global = /some/path
.Ignoring untrusted configuration option paths.interpolated = /some/path/another/path
. interpolated = /some/path/another/path
.Ignoring untrusted configuration option paths.local = /another/path
. local = /another/path
# ui.readsections
quux
# read trusted, untrusted, new ui, trusted
Not trusting file foobar from untrusted user abc, group def
trusted:
Ignoring untrusted configuration option foobar.baz = quux
None
/some/path/another/path
untrusted:
quux
/some/path/another/path
# error handling
# file doesn't exist
# same user, same group
# different user, different group
# parse error
# different user, different group
Not trusting file .hg/hgrc from untrusted user abc, group def
Ignored: Failed to parse .hg/hgrc
File contains no section headers.
file: .hg/hgrc, line: 1
'foo = bar'
# same user, same group
raised Abort
# interpolation error
# same user, same group
# regular config:
trusted raised Abort
untrusted raised Abort
# different user, different group
Not trusting file .hg/hgrc from untrusted user abc, group def
trusted Ignored: Error in configuration section [foo] parameter 'bar':
bad interpolation variable reference '%('
None
untrusted raised Abort
# configitems:
trusted Ignored: Error in configuration section [foo]:
bad interpolation variable reference '%('
[]
untrusted raised Abort