diff --git a/java/com/google/gerrit/acceptance/BUILD b/java/com/google/gerrit/acceptance/BUILD index ef9f4e6faa..768c340e50 100644 --- a/java/com/google/gerrit/acceptance/BUILD +++ b/java/com/google/gerrit/acceptance/BUILD @@ -126,6 +126,7 @@ java_library2( "//java/com/google/gerrit/server/git/receive", "//java/com/google/gerrit/server/restapi", "//java/com/google/gerrit/server/schema", + "//java/com/google/gerrit/server/util/git", "//java/com/google/gerrit/server/util/time", "//java/com/google/gerrit/sshd", "//lib:args4j", diff --git a/java/com/google/gerrit/acceptance/StandaloneSiteTest.java b/java/com/google/gerrit/acceptance/StandaloneSiteTest.java index eac3b0a8e6..933c4e104a 100644 --- a/java/com/google/gerrit/acceptance/StandaloneSiteTest.java +++ b/java/com/google/gerrit/acceptance/StandaloneSiteTest.java @@ -30,6 +30,7 @@ import com.google.gerrit.server.config.SitePaths; import com.google.gerrit.server.util.ManualRequestContext; import com.google.gerrit.server.util.OneOffRequestContext; import com.google.gerrit.server.util.RequestContext; +import com.google.gerrit.server.util.git.DelegateSystemReader; import com.google.gerrit.testing.ConfigSuite; import com.google.inject.Injector; import com.google.inject.Module; @@ -134,22 +135,7 @@ public abstract class StandaloneSiteTest { private static SystemReader setFakeSystemReader(File tempDir) { SystemReader oldSystemReader = SystemReader.getInstance(); SystemReader.setInstance( - new SystemReader() { - @Override - public String getHostname() { - return oldSystemReader.getHostname(); - } - - @Override - public String getenv(String variable) { - return oldSystemReader.getenv(variable); - } - - @Override - public String getProperty(String key) { - return oldSystemReader.getProperty(key); - } - + new DelegateSystemReader(oldSystemReader) { @Override public FileBasedConfig openUserConfig(Config parent, FS fs) { return new FileBasedConfig(parent, new File(tempDir, "user.config"), FS.detect()); @@ -159,16 +145,6 @@ public abstract class StandaloneSiteTest { public FileBasedConfig openSystemConfig(Config parent, FS fs) { return new FileBasedConfig(parent, new File(tempDir, "system.config"), FS.detect()); } - - @Override - public long getCurrentTime() { - return oldSystemReader.getCurrentTime(); - } - - @Override - public int getTimezone(long when) { - return oldSystemReader.getTimezone(when); - } }); return oldSystemReader; } diff --git a/java/com/google/gerrit/server/git/SystemReaderInstaller.java b/java/com/google/gerrit/server/git/SystemReaderInstaller.java index 104321074e..b6cc108bdf 100644 --- a/java/com/google/gerrit/server/git/SystemReaderInstaller.java +++ b/java/com/google/gerrit/server/git/SystemReaderInstaller.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.git; import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.server.config.SitePaths; +import com.google.gerrit.server.util.git.DelegateSystemReader; import com.google.inject.Inject; import com.google.inject.Singleton; import org.eclipse.jgit.lib.Config; @@ -47,41 +48,11 @@ public class SystemReaderInstaller implements LifecycleListener { private SystemReader customReader() { SystemReader current = SystemReader.getInstance(); - return new SystemReader() { - @Override - public String getHostname() { - return current.getHostname(); - } - - @Override - public String getenv(String variable) { - return current.getenv(variable); - } - - @Override - public String getProperty(String key) { - return current.getProperty(key); - } - - @Override - public FileBasedConfig openUserConfig(Config parent, FS fs) { - return current.openUserConfig(parent, fs); - } - + return new DelegateSystemReader(current) { @Override public FileBasedConfig openSystemConfig(Config parent, FS fs) { return new FileBasedConfig(parent, site.jgit_config.toFile(), FS.DETECTED); } - - @Override - public long getCurrentTime() { - return current.getCurrentTime(); - } - - @Override - public int getTimezone(long when) { - return current.getTimezone(when); - } }; } } diff --git a/java/com/google/gerrit/server/notedb/AbstractChangeNotes.java b/java/com/google/gerrit/server/notedb/AbstractChangeNotes.java index 9c8bc1bda3..9cc1c84e25 100644 --- a/java/com/google/gerrit/server/notedb/AbstractChangeNotes.java +++ b/java/com/google/gerrit/server/notedb/AbstractChangeNotes.java @@ -153,6 +153,7 @@ public abstract class AbstractChangeNotes { return self(); } + @Nullable protected ObjectId readRef(Repository repo) throws IOException { Ref ref = repo.getRefDatabase().exactRef(getRefName()); return ref != null ? ref.getObjectId() : null; diff --git a/java/com/google/gerrit/server/util/git/DelegateSystemReader.java b/java/com/google/gerrit/server/util/git/DelegateSystemReader.java new file mode 100644 index 0000000000..67e8dec41d --- /dev/null +++ b/java/com/google/gerrit/server/util/git/DelegateSystemReader.java @@ -0,0 +1,63 @@ +// Copyright (C) 2019 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.google.gerrit.server.util.git; + +import org.eclipse.jgit.lib.Config; +import org.eclipse.jgit.storage.file.FileBasedConfig; +import org.eclipse.jgit.util.FS; +import org.eclipse.jgit.util.SystemReader; + +public class DelegateSystemReader extends SystemReader { + private final SystemReader delegate; + + public DelegateSystemReader(SystemReader delegate) { + this.delegate = delegate; + } + + @Override + public String getHostname() { + return delegate.getHostname(); + } + + @Override + public String getenv(String variable) { + return delegate.getenv(variable); + } + + @Override + public String getProperty(String key) { + return delegate.getProperty(key); + } + + @Override + public FileBasedConfig openUserConfig(Config parent, FS fs) { + return delegate.openUserConfig(parent, fs); + } + + @Override + public FileBasedConfig openSystemConfig(Config parent, FS fs) { + return delegate.openSystemConfig(parent, fs); + } + + @Override + public long getCurrentTime() { + return delegate.getCurrentTime(); + } + + @Override + public int getTimezone(long when) { + return delegate.getTimezone(when); + } +} diff --git a/java/com/google/gerrit/server/util/time/BUILD b/java/com/google/gerrit/server/util/time/BUILD index c7cd89ec78..710a6b18c4 100644 --- a/java/com/google/gerrit/server/util/time/BUILD +++ b/java/com/google/gerrit/server/util/time/BUILD @@ -4,6 +4,7 @@ java_library( visibility = ["//visibility:public"], deps = [ "//java/com/google/gerrit/common:annotations", + "//java/com/google/gerrit/server/util/git", "//lib:guava", "//lib/jgit/org.eclipse.jgit:jgit", ], diff --git a/java/com/google/gerrit/server/util/time/TimeUtil.java b/java/com/google/gerrit/server/util/time/TimeUtil.java index b9d2d8af98..639d0a6589 100644 --- a/java/com/google/gerrit/server/util/time/TimeUtil.java +++ b/java/com/google/gerrit/server/util/time/TimeUtil.java @@ -17,12 +17,10 @@ package com.google.gerrit.server.util.time; import com.google.common.annotations.VisibleForTesting; import com.google.gerrit.common.UsedAt; import com.google.gerrit.common.UsedAt.Project; +import com.google.gerrit.server.util.git.DelegateSystemReader; import java.sql.Timestamp; import java.time.Instant; import java.util.function.LongSupplier; -import org.eclipse.jgit.lib.Config; -import org.eclipse.jgit.storage.file.FileBasedConfig; -import org.eclipse.jgit.util.FS; import org.eclipse.jgit.util.SystemReader; /** Static utility methods for dealing with dates and times. */ @@ -76,47 +74,15 @@ public class TimeUtil { SystemReader.setInstance(null); } - private static class GerritSystemReader extends SystemReader { - SystemReader delegate; - - GerritSystemReader(SystemReader delegate) { - this.delegate = delegate; - } - - @Override - public String getHostname() { - return delegate.getHostname(); - } - - @Override - public String getenv(String variable) { - return delegate.getenv(variable); - } - - @Override - public String getProperty(String key) { - return delegate.getProperty(key); - } - - @Override - public FileBasedConfig openUserConfig(Config parent, FS fs) { - return delegate.openUserConfig(parent, fs); - } - - @Override - public FileBasedConfig openSystemConfig(Config parent, FS fs) { - return delegate.openSystemConfig(parent, fs); + static class GerritSystemReader extends DelegateSystemReader { + GerritSystemReader(SystemReader reader) { + super(reader); } @Override public long getCurrentTime() { return currentMillisSupplier.getAsLong(); } - - @Override - public int getTimezone(long when) { - return delegate.getTimezone(when); - } } private TimeUtil() {}