From aa61fc86db4f5ebf645ecf69c6f5ec36f2973e5a Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 21 Feb 2014 11:14:47 -0500
Subject: [PATCH] Add GO launch parameter to specify daily, rolling log file generation

---
 src/main/java/com/gitblit/manager/RepositoryManager.java |   40 ++++++++++++++++++++++++++++++----------
 1 files changed, 30 insertions(+), 10 deletions(-)

diff --git a/src/main/java/com/gitblit/manager/RepositoryManager.java b/src/main/java/com/gitblit/manager/RepositoryManager.java
index 4845e23..afa96b2 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,
@@ -156,6 +156,8 @@
 		configureMirrorExecutor();
 		configureJGit();
 		configureCommitCache();
+
+		confirmWriteAccess();
 
 		return this;
 	}
@@ -457,6 +459,8 @@
 	public void resetRepositoryListCache() {
 		logger.info("Repository cache manually reset");
 		repositoryListCache.clear();
+		repositorySizeCache.clear();
+		repositoryMetricsCache.clear();
 	}
 
 	/**
@@ -975,7 +979,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;
 				}
@@ -1644,7 +1648,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 +1656,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 +1684,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 +1758,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