From 59b5fa4e22a473e6814e1dd0af273883ccafe4f2 Mon Sep 17 00:00:00 2001
From: Stardrad Yin <yin8086@gmail.com>
Date: Sat, 08 Mar 2014 01:46:57 -0500
Subject: [PATCH] add Chinese strings
---
src/main/java/com/gitblit/manager/RepositoryManager.java | 100 +++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 86 insertions(+), 14 deletions(-)
diff --git a/src/main/java/com/gitblit/manager/RepositoryManager.java b/src/main/java/com/gitblit/manager/RepositoryManager.java
index 4845e23..1e91798 100644
--- a/src/main/java/com/gitblit/manager/RepositoryManager.java
+++ b/src/main/java/com/gitblit/manager/RepositoryManager.java
@@ -63,12 +63,9 @@
import com.gitblit.Constants.FederationStrategy;
import com.gitblit.Constants.PermissionType;
import com.gitblit.Constants.RegistrantType;
-import com.gitblit.GCExecutor;
import com.gitblit.GitBlitException;
import com.gitblit.IStoredSettings;
import com.gitblit.Keys;
-import com.gitblit.LuceneExecutor;
-import com.gitblit.MirrorExecutor;
import com.gitblit.models.ForkModel;
import com.gitblit.models.Metric;
import com.gitblit.models.RefModel;
@@ -77,6 +74,9 @@
import com.gitblit.models.SearchResult;
import com.gitblit.models.TeamModel;
import com.gitblit.models.UserModel;
+import com.gitblit.service.GarbageCollectorService;
+import com.gitblit.service.LuceneService;
+import com.gitblit.service.MirrorService;
import com.gitblit.utils.ArrayUtils;
import com.gitblit.utils.ByteFormat;
import com.gitblit.utils.CommitCache;
@@ -118,11 +118,11 @@
private final File repositoriesFolder;
- private LuceneExecutor luceneExecutor;
+ private LuceneService luceneExecutor;
- private GCExecutor gcExecutor;
+ private GarbageCollectorService gcExecutor;
- private MirrorExecutor mirrorExecutor;
+ private MirrorService mirrorExecutor;
public RepositoryManager(
IRuntimeManager runtimeManager,
@@ -157,6 +157,8 @@
configureJGit();
configureCommitCache();
+ confirmWriteAccess();
+
return this;
}
@@ -167,6 +169,7 @@
gcExecutor.close();
mirrorExecutor.close();
+ closeAll();
return this;
}
@@ -447,6 +450,7 @@
private void clearRepositoryMetadataCache(String repositoryName) {
repositorySizeCache.remove(repositoryName);
repositoryMetricsCache.remove(repositoryName);
+ CommitCache.instance().clear(repositoryName);
}
/**
@@ -457,6 +461,9 @@
public void resetRepositoryListCache() {
logger.info("Repository cache manually reset");
repositoryListCache.clear();
+ repositorySizeCache.clear();
+ repositoryMetricsCache.clear();
+ CommitCache.instance().clear();
}
/**
@@ -794,6 +801,9 @@
model.description = getConfig(config, "description", "");
model.originRepository = getConfig(config, "originRepository", null);
model.addOwners(ArrayUtils.fromString(getConfig(config, "owner", "")));
+ model.acceptNewPatchsets = getConfig(config, "acceptNewPatchsets", true);
+ model.acceptNewTickets = getConfig(config, "acceptNewTickets", true);
+ model.requireApproval = getConfig(config, "requireApproval", settings.getBoolean(Keys.tickets.requireApproval, false));
model.useIncrementalPushTags = getConfig(config, "useIncrementalPushTags", false);
model.incrementalPushTagPrefix = getConfig(config, "incrementalPushTagPrefix", null);
model.allowForks = getConfig(config, "allowForks", true);
@@ -975,7 +985,7 @@
settings.getStrings(Keys.git.searchExclusions));
for (String repository : repositories) {
RepositoryModel model = getRepositoryModel(userProject + "/" + repository);
- if (model.originRepository.equalsIgnoreCase(origin)) {
+ if (model.originRepository != null && model.originRepository.equalsIgnoreCase(origin)) {
// user has a fork
return model.name;
}
@@ -1078,12 +1088,49 @@
}
/**
+ * Returns true if the repository is idle (not being accessed).
+ *
+ * @param repository
+ * @return true if the repository is idle
+ */
+ @Override
+ public boolean isIdle(Repository repository) {
+ try {
+ // Read the use count.
+ // An idle use count is 2:
+ // +1 for being in the cache
+ // +1 for the repository parameter in this method
+ Field useCnt = Repository.class.getDeclaredField("useCnt");
+ useCnt.setAccessible(true);
+ int useCount = ((AtomicInteger) useCnt.get(repository)).get();
+ return useCount == 2;
+ } catch (Exception e) {
+ logger.warn(MessageFormat
+ .format("Failed to reflectively determine use count for repository {0}",
+ repository.getDirectory().getPath()), e);
+ }
+ return false;
+ }
+
+ /**
+ * Ensures that all cached repository are completely closed and their resources
+ * are properly released.
+ */
+ @Override
+ public void closeAll() {
+ for (String repository : getRepositoryList()) {
+ close(repository);
+ }
+ }
+
+ /**
* Ensure that a cached repository is completely closed and its resources
* are properly released.
*
* @param repositoryName
*/
- private void closeRepository(String repositoryName) {
+ @Override
+ public void close(String repositoryName) {
Repository repository = getRepository(repositoryName);
if (repository == null) {
return;
@@ -1108,7 +1155,7 @@
repositoryName), e);
}
if (uses > 0) {
- logger.info(MessageFormat
+ logger.debug(MessageFormat
.format("{0}.useCnt={1}, calling close() {2} time(s) to close object and ref databases",
repositoryName, uses, uses));
for (int i = 0; i < uses; i++) {
@@ -1246,7 +1293,7 @@
"Failed to rename ''{0}'' because ''{1}'' already exists.",
repositoryName, repository.name));
}
- closeRepository(repositoryName);
+ close(repositoryName);
File folder = new File(repositoriesFolder, repositoryName);
File destFolder = new File(repositoriesFolder, repository.name);
if (destFolder.exists()) {
@@ -1362,6 +1409,15 @@
config.setString(Constants.CONFIG_GITBLIT, null, "description", repository.description);
config.setString(Constants.CONFIG_GITBLIT, null, "originRepository", repository.originRepository);
config.setString(Constants.CONFIG_GITBLIT, null, "owner", ArrayUtils.toString(repository.owners));
+ config.setBoolean(Constants.CONFIG_GITBLIT, null, "acceptNewPatchsets", repository.acceptNewPatchsets);
+ config.setBoolean(Constants.CONFIG_GITBLIT, null, "acceptNewTickets", repository.acceptNewTickets);
+ if (settings.getBoolean(Keys.tickets.requireApproval, false) == repository.requireApproval) {
+ // use default
+ config.unset(Constants.CONFIG_GITBLIT, null, "requireApproval");
+ } else {
+ // override default
+ config.setBoolean(Constants.CONFIG_GITBLIT, null, "requireApproval", repository.requireApproval);
+ }
config.setBoolean(Constants.CONFIG_GITBLIT, null, "useIncrementalPushTags", repository.useIncrementalPushTags);
if (StringUtils.isEmpty(repository.incrementalPushTagPrefix) ||
repository.incrementalPushTagPrefix.equals(settings.getString(Keys.git.defaultIncrementalPushTagPrefix, "r"))) {
@@ -1471,7 +1527,7 @@
@Override
public boolean deleteRepository(String repositoryName) {
try {
- closeRepository(repositoryName);
+ close(repositoryName);
// clear the repository cache
clearRepositoryMetadataCache(repositoryName);
@@ -1644,7 +1700,7 @@
}
protected void configureLuceneIndexing() {
- luceneExecutor = new LuceneExecutor(settings, this);
+ luceneExecutor = new LuceneService(settings, this);
int period = 2;
scheduledExecutor.scheduleAtFixedRate(luceneExecutor, 1, period, TimeUnit.MINUTES);
logger.info("Lucene will process indexed branches every {} minutes.", period);
@@ -1652,7 +1708,7 @@
protected void configureGarbageCollector() {
// schedule gc engine
- gcExecutor = new GCExecutor(settings, this);
+ gcExecutor = new GarbageCollectorService(settings, this);
if (gcExecutor.isReady()) {
logger.info("Garbage Collector (GC) will scan repositories every 24 hours.");
Calendar c = Calendar.getInstance();
@@ -1680,7 +1736,7 @@
}
protected void configureMirrorExecutor() {
- mirrorExecutor = new MirrorExecutor(settings, this);
+ mirrorExecutor = new MirrorService(settings, this);
if (mirrorExecutor.isReady()) {
int mins = TimeUtils.convertFrequencyToMinutes(settings.getString(Keys.git.mirrorPeriod, "30 mins"));
if (mins < 5) {
@@ -1754,4 +1810,20 @@
daysToCache, commitCount, repoCount, TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - start)));
}
}
+
+ protected void confirmWriteAccess() {
+ if (runtimeManager.isServingRepositories()) {
+ try {
+ File file = File.createTempFile(".test-", ".txt", getRepositoriesFolder());
+ file.delete();
+ } catch (Exception e) {
+ logger.error("");
+ logger.error(Constants.BORDER2);
+ logger.error("Please check filesystem permissions!");
+ logger.error("FAILED TO WRITE TO REPOSITORIES FOLDER!!", e);
+ logger.error(Constants.BORDER2);
+ logger.error("");
+ }
+ }
+ }
}
--
Gitblit v1.9.1