Merge branch 'stable-3.2' into stable-3.3

* stable-3.2:
  Apply minor fixes to README.md
  Adjust module name to gerrit.googlesource repo name

Change-Id: I024eca386a98836a05417a3c0a54862fccf0ae42
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cachedrefdb/CachedGitRepositoryManager.java b/src/main/java/com/googlesource/gerrit/plugins/cachedrefdb/CachedGitRepositoryManager.java
index 99b92a3..a273e70 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/cachedrefdb/CachedGitRepositoryManager.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/cachedrefdb/CachedGitRepositoryManager.java
@@ -51,6 +51,11 @@
     return repoManager.list();
   }
 
+  @Override
+  public Boolean canPerformGC() {
+    return repoManager.canPerformGC();
+  }
+
   @VisibleForTesting
   LocalDiskRepositoryManager getRepoManager() {
     return repoManager;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cachedrefdb/CachedRefDatabase.java b/src/main/java/com/googlesource/gerrit/plugins/cachedrefdb/CachedRefDatabase.java
index 7ad9ff6..04541bd 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/cachedrefdb/CachedRefDatabase.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/cachedrefdb/CachedRefDatabase.java
@@ -31,7 +31,7 @@
 
 class CachedRefDatabase extends RefDatabase {
   interface Factory {
-    CachedRefDatabase create(CachedRefRepository repo);
+    CachedRefDatabase create(CachedRefRepository repo, RefDatabase delegate);
   }
 
   private final RefByNameCacheWrapper refsCache;
@@ -47,12 +47,13 @@
       BatchRefUpdateWithCacheUpdate.Factory batchUpdateFactory,
       RefUpdateWithCacheUpdate.Factory updateFactory,
       RefRenameWithCacheUpdate.Factory renameFactory,
-      @Assisted CachedRefRepository repo) {
+      @Assisted CachedRefRepository repo,
+      @Assisted RefDatabase delegate) {
     this.refsCache = refsCache;
     this.batchUpdateFactory = batchUpdateFactory;
     this.updateFactory = updateFactory;
     this.renameFactory = renameFactory;
-    this.delegate = repo.getDelegate().getRefDatabase();
+    this.delegate = delegate;
     this.repo = repo;
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cachedrefdb/CachedRefRepository.java b/src/main/java/com/googlesource/gerrit/plugins/cachedrefdb/CachedRefRepository.java
index aef1463..91e9bb6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/cachedrefdb/CachedRefRepository.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/cachedrefdb/CachedRefRepository.java
@@ -14,6 +14,7 @@
 
 package com.googlesource.gerrit.plugins.cachedrefdb;
 
+import com.google.gerrit.server.git.DelegateRepository;
 import com.google.inject.Inject;
 import com.google.inject.assistedinject.Assisted;
 import java.io.File;
@@ -67,7 +68,7 @@
     this.projectName = projectName;
     this.updateFactory = updateFactory;
     this.renameFactory = renameFactory;
-    this.refDb = refDbFactory.create(this);
+    this.refDb = refDbFactory.create(this, repo.getRefDatabase());
   }
 
   @Override
@@ -77,278 +78,278 @@
 
   @Override
   public ListenerList getListenerList() {
-    return getDelegate().getListenerList();
+    return delegate.getListenerList();
   }
 
   @Override
   public void fireEvent(RepositoryEvent<?> event) {
-    getDelegate().fireEvent(event);
+    delegate.fireEvent(event);
   }
 
   @Override
   public File getDirectory() {
-    return getDelegate().getDirectory();
+    return delegate.getDirectory();
   }
 
   @Override
   public ObjectInserter newObjectInserter() {
-    return getDelegate().newObjectInserter();
+    return delegate.newObjectInserter();
   }
 
   @Override
   public ObjectReader newObjectReader() {
-    return getDelegate().newObjectReader();
+    return delegate.newObjectReader();
   }
 
   @Override
   public FS getFS() {
-    return getDelegate().getFS();
+    return delegate.getFS();
   }
 
   @Deprecated
   @Override
   public boolean hasObject(AnyObjectId objectId) {
-    return getDelegate().hasObject(objectId);
+    return delegate.hasObject(objectId);
   }
 
   @Override
   public ObjectLoader open(AnyObjectId objectId) throws MissingObjectException, IOException {
-    return getDelegate().open(objectId);
+    return delegate.open(objectId);
   }
 
   @Override
   public ObjectLoader open(AnyObjectId objectId, int typeHint)
       throws MissingObjectException, IncorrectObjectTypeException, IOException {
-    return getDelegate().open(objectId, typeHint);
+    return delegate.open(objectId, typeHint);
   }
 
   @Override
   public RefUpdate updateRef(String ref) throws IOException {
-    return updateFactory.create(refDb, this, getDelegate().updateRef(ref));
+    return updateFactory.create(refDb, this, delegate.updateRef(ref));
   }
 
   @Override
   public RefUpdate updateRef(String ref, boolean detach) throws IOException {
-    return updateFactory.create(refDb, this, getDelegate().updateRef(ref, detach));
+    return updateFactory.create(refDb, this, delegate.updateRef(ref, detach));
   }
 
   @Override
   public RefRename renameRef(String fromRef, String toRef) throws IOException {
     return renameFactory.create(
-        this, getDelegate().renameRef(fromRef, toRef), updateRef(fromRef), updateRef(toRef));
+        this, delegate.renameRef(fromRef, toRef), updateRef(fromRef), updateRef(toRef));
   }
 
   @Override
   public ObjectId resolve(String revstr)
       throws AmbiguousObjectException, IncorrectObjectTypeException, RevisionSyntaxException,
           IOException {
-    return getDelegate().resolve(revstr);
+    return delegate.resolve(revstr);
   }
 
   @Override
   public String simplify(String revstr) throws AmbiguousObjectException, IOException {
-    return getDelegate().simplify(revstr);
+    return delegate.simplify(revstr);
   }
 
   @Override
   public void incrementOpen() {
-    getDelegate().incrementOpen();
+    delegate.incrementOpen();
   }
 
   @Override
   public void close() {
-    getDelegate().close();
+    delegate.close();
   }
 
   @Override
   public String getFullBranch() throws IOException {
-    return getDelegate().getFullBranch();
+    return delegate.getFullBranch();
   }
 
   @Override
   public String getBranch() throws IOException {
-    return getDelegate().getBranch();
+    return delegate.getBranch();
   }
 
   @Override
   public Set<ObjectId> getAdditionalHaves() {
-    return getDelegate().getAdditionalHaves();
+    return delegate.getAdditionalHaves();
   }
 
   @Deprecated
   @Override
   public Map<String, Ref> getAllRefs() {
-    return getDelegate().getAllRefs();
+    return delegate.getAllRefs();
   }
 
   @Deprecated
   @Override
   public Map<String, Ref> getTags() {
-    return getDelegate().getTags();
+    return delegate.getTags();
   }
 
   @Deprecated
   @Override
   public Ref peel(Ref ref) {
-    return getDelegate().peel(ref);
+    return delegate.peel(ref);
   }
 
   @Override
   public Map<AnyObjectId, Set<Ref>> getAllRefsByPeeledObjectId() {
-    return getDelegate().getAllRefsByPeeledObjectId();
+    return delegate.getAllRefsByPeeledObjectId();
   }
 
   @Override
   public File getIndexFile() throws NoWorkTreeException {
-    return getDelegate().getIndexFile();
+    return delegate.getIndexFile();
   }
 
   @Override
   public RevCommit parseCommit(AnyObjectId id)
       throws IncorrectObjectTypeException, IOException, MissingObjectException {
-    return getDelegate().parseCommit(id);
+    return delegate.parseCommit(id);
   }
 
   @Override
   public DirCache readDirCache() throws NoWorkTreeException, CorruptObjectException, IOException {
-    return getDelegate().readDirCache();
+    return delegate.readDirCache();
   }
 
   @Override
   public DirCache lockDirCache() throws NoWorkTreeException, CorruptObjectException, IOException {
-    return getDelegate().lockDirCache();
+    return delegate.lockDirCache();
   }
 
   @Override
   public RepositoryState getRepositoryState() {
-    return getDelegate().getRepositoryState();
+    return delegate.getRepositoryState();
   }
 
   @Override
   public boolean isBare() {
-    return getDelegate().isBare();
+    return delegate.isBare();
   }
 
   @Override
   public File getWorkTree() throws NoWorkTreeException {
-    return getDelegate().getWorkTree();
+    return delegate.getWorkTree();
   }
 
   @Override
   public String shortenRemoteBranchName(String refName) {
-    return getDelegate().shortenRemoteBranchName(refName);
+    return delegate.shortenRemoteBranchName(refName);
   }
 
   @Override
   public String getRemoteName(String refName) {
-    return getDelegate().getRemoteName(refName);
+    return delegate.getRemoteName(refName);
   }
 
   @Override
   public String getGitwebDescription() throws IOException {
-    return getDelegate().getGitwebDescription();
+    return delegate.getGitwebDescription();
   }
 
   @Override
   public void setGitwebDescription(String description) throws IOException {
-    getDelegate().setGitwebDescription(description);
+    delegate.setGitwebDescription(description);
   }
 
   @Override
   public String readMergeCommitMsg() throws IOException, NoWorkTreeException {
-    return getDelegate().readMergeCommitMsg();
+    return delegate.readMergeCommitMsg();
   }
 
   @Override
   public void writeMergeCommitMsg(String msg) throws IOException {
-    getDelegate().writeMergeCommitMsg(msg);
+    delegate.writeMergeCommitMsg(msg);
   }
 
   @Override
   public String readCommitEditMsg() throws IOException, NoWorkTreeException {
-    return getDelegate().readCommitEditMsg();
+    return delegate.readCommitEditMsg();
   }
 
   @Override
   public void writeCommitEditMsg(String msg) throws IOException {
-    getDelegate().writeCommitEditMsg(msg);
+    delegate.writeCommitEditMsg(msg);
   }
 
   @Override
   public List<ObjectId> readMergeHeads() throws IOException, NoWorkTreeException {
-    return getDelegate().readMergeHeads();
+    return delegate.readMergeHeads();
   }
 
   @Override
   public void writeMergeHeads(List<? extends ObjectId> heads) throws IOException {
-    getDelegate().writeMergeHeads(heads);
+    delegate.writeMergeHeads(heads);
   }
 
   @Override
   public ObjectId readCherryPickHead() throws IOException, NoWorkTreeException {
-    return getDelegate().readCherryPickHead();
+    return delegate.readCherryPickHead();
   }
 
   @Override
   public ObjectId readRevertHead() throws IOException, NoWorkTreeException {
-    return getDelegate().readRevertHead();
+    return delegate.readRevertHead();
   }
 
   @Override
   public void writeCherryPickHead(ObjectId head) throws IOException {
-    getDelegate().writeCherryPickHead(head);
+    delegate.writeCherryPickHead(head);
   }
 
   @Override
   public void writeRevertHead(ObjectId head) throws IOException {
-    getDelegate().writeRevertHead(head);
+    delegate.writeRevertHead(head);
   }
 
   @Override
   public void writeOrigHead(ObjectId head) throws IOException {
-    getDelegate().writeOrigHead(head);
+    delegate.writeOrigHead(head);
   }
 
   @Override
   public ObjectId readOrigHead() throws IOException, NoWorkTreeException {
-    return getDelegate().readOrigHead();
+    return delegate.readOrigHead();
   }
 
   @Override
   public String readSquashCommitMsg() throws IOException {
-    return getDelegate().readSquashCommitMsg();
+    return delegate.readSquashCommitMsg();
   }
 
   @Override
   public void writeSquashCommitMsg(String msg) throws IOException {
-    getDelegate().writeSquashCommitMsg(msg);
+    delegate.writeSquashCommitMsg(msg);
   }
 
   @Override
   public List<RebaseTodoLine> readRebaseTodo(String path, boolean includeComments)
       throws IOException {
-    return getDelegate().readRebaseTodo(path, includeComments);
+    return delegate.readRebaseTodo(path, includeComments);
   }
 
   @Override
   public void writeRebaseTodoFile(String path, List<RebaseTodoLine> steps, boolean append)
       throws IOException {
-    getDelegate().writeRebaseTodoFile(path, steps, append);
+    delegate.writeRebaseTodoFile(path, steps, append);
   }
 
   @Override
   public Set<String> getRemoteNames() {
-    return getDelegate().getRemoteNames();
+    return delegate.getRemoteNames();
   }
 
   @Override
   public void autoGC(ProgressMonitor monitor) {
-    getDelegate().autoGC(monitor);
+    delegate.autoGC(monitor);
   }
 
   @Override
   public void create() throws IOException {
-    getDelegate().create();
+    delegate.create();
   }
 
   public String getProjectName() {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cachedrefdb/DelegateRepository.java b/src/main/java/com/googlesource/gerrit/plugins/cachedrefdb/DelegateRepository.java
deleted file mode 100644
index b0f831e..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/cachedrefdb/DelegateRepository.java
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright (C) 2021 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.googlesource.gerrit.plugins.cachedrefdb;
-
-import java.io.IOException;
-import org.eclipse.jgit.attributes.AttributesNodeProvider;
-import org.eclipse.jgit.lib.BaseRepositoryBuilder;
-import org.eclipse.jgit.lib.ObjectDatabase;
-import org.eclipse.jgit.lib.RefDatabase;
-import org.eclipse.jgit.lib.ReflogReader;
-import org.eclipse.jgit.lib.Repository;
-import org.eclipse.jgit.lib.StoredConfig;
-
-/**
- * For the time being copied from com.google.gerrit.server.git.DelegateRepository as it is package
- * protected in 'stable-3.2'. It can be dropped when change gets merged up to.
- */
-class DelegateRepository extends Repository {
-
-  private final Repository delegate;
-
-  DelegateRepository(Repository delegate) {
-    super(toBuilder(delegate));
-    this.delegate = delegate;
-  }
-
-  @Override
-  public void create(boolean bare) throws IOException {
-    delegate.create(bare);
-  }
-
-  @Override
-  public String getIdentifier() {
-    return delegate.getIdentifier();
-  }
-
-  @Override
-  public ObjectDatabase getObjectDatabase() {
-    return delegate.getObjectDatabase();
-  }
-
-  @Override
-  public RefDatabase getRefDatabase() {
-    return delegate.getRefDatabase();
-  }
-
-  @Override
-  public StoredConfig getConfig() {
-    return delegate.getConfig();
-  }
-
-  @Override
-  public AttributesNodeProvider createAttributesNodeProvider() {
-    return delegate.createAttributesNodeProvider();
-  }
-
-  @Override
-  public void scanForRepoChanges() throws IOException {
-    delegate.scanForRepoChanges();
-  }
-
-  @Override
-  public void notifyIndexChanged(boolean internal) {
-    delegate.notifyIndexChanged(internal);
-  }
-
-  @Override
-  public ReflogReader getReflogReader(String refName) throws IOException {
-    return delegate.getReflogReader(refName);
-  }
-
-  public Repository getDelegate() {
-    return delegate;
-  }
-
-  @SuppressWarnings("rawtypes")
-  private static BaseRepositoryBuilder toBuilder(Repository repo) {
-    if (!repo.isBare()) {
-      throw new IllegalArgumentException(
-          "non-bare repository is not supported: " + repo.getIdentifier());
-    }
-
-    return new BaseRepositoryBuilder<>().setFS(repo.getFS()).setGitDir(repo.getDirectory());
-  }
-}