Always set VisibleRefFilter on UploadPack

There was an optimization to not add VisibleRefFilter if all refs of
the project were visible to the calling user, because in this case it
is not needed to evaluate all rules. This optimization is unneeded
because a similar optimization exists within VisibleRefFilter.
VisibleRefFilter checks if all refs except refs/meta/config are
visible to the calling user and if yes only one separate permission
check for refs/meta/config is done.

Removing the optimization for the case where all refs are visible to
the calling user makes this case only slightly slower, since there is
only one additional permission check for the refs/meta/config branch
now. On the other hand the case where a user can see all refs except
refs/meta/config is a little faster now, since the check if all refs
are visible is removed.

By having VisibleRefFilter invoked always, we can now use it to add
magic refs to the advertised ref set, which is e.g. required to
support a magic refs/users/self ref (implemented in the follow-up
change).

Change-Id: Ic8f29b41f3abf23f99b59260956d543f815253cc
Signed-off-by: Edwin Kempin <ekempin@google.com>
This commit is contained in:
Edwin Kempin
2016-05-02 12:53:49 +02:00
parent 221415d298
commit b961a7d03d
4 changed files with 10 additions and 15 deletions

View File

@@ -259,11 +259,8 @@ class InProcessProtocol extends TestProtocol<Context> {
UploadPack up = new UploadPack(repo);
up.setPackConfig(transferConfig.getPackConfig());
up.setTimeout(transferConfig.getTimeout());
if (!ctl.allRefsAreVisible()) {
up.setAdvertiseRefsHook(new VisibleRefFilter(
tagCache, changeCache, repo, ctl, dbProvider.get(), true));
}
up.setAdvertiseRefsHook(new VisibleRefFilter(
tagCache, changeCache, repo, ctl, dbProvider.get(), true));
List<PreUploadHook> hooks = Lists.newArrayList(preUploadHooks);
hooks.add(uploadValidatorsFactory.create(
ctl.getProject(), repo, "localhost-test"));