James Moger
2015-02-11 5ec94c4282ed3630b7b4cd0fb5db62c20ce46d9d
src/main/java/com/gitblit/manager/RepositoryManager.java
@@ -91,6 +91,8 @@
import com.gitblit.utils.ObjectCache;
import com.gitblit.utils.StringUtils;
import com.gitblit.utils.TimeUtils;
import com.google.inject.Inject;
import com.google.inject.Singleton;
/**
 * Repository manager creates, updates, deletes and caches git repositories.  It
@@ -99,6 +101,7 @@
 * @author James Moger
 *
 */
@Singleton
public class RepositoryManager implements IRepositoryManager {
   private final Logger logger = LoggerFactory.getLogger(getClass());
@@ -121,7 +124,7 @@
   private final IUserManager userManager;
   private final File repositoriesFolder;
   private File repositoriesFolder;
   private LuceneService luceneExecutor;
@@ -129,6 +132,7 @@
   private MirrorService mirrorExecutor;
   @Inject
   public RepositoryManager(
         IRuntimeManager runtimeManager,
         IPluginManager pluginManager,
@@ -138,11 +142,11 @@
      this.runtimeManager = runtimeManager;
      this.pluginManager = pluginManager;
      this.userManager = userManager;
      this.repositoriesFolder = runtimeManager.getFileOrFolder(Keys.git.repositoriesFolder, "${baseFolder}/git");
   }
   @Override
   public RepositoryManager start() {
      repositoriesFolder = runtimeManager.getFileOrFolder(Keys.git.repositoriesFolder, "${baseFolder}/git");
      logger.info("Repositories folder : {}", repositoriesFolder.getAbsolutePath());
      // initialize utilities
@@ -622,6 +626,27 @@
         }
      }
      return r;
   }
   /**
    * Returns the list of all repository models.
    *
    * @return list of all repository models
    */
   @Override
   public List<RepositoryModel> getRepositoryModels() {
      long methodStart = System.currentTimeMillis();
      List<String> list = getRepositoryList();
      List<RepositoryModel> repositories = new ArrayList<RepositoryModel>();
      for (String repo : list) {
         RepositoryModel model = getRepositoryModel(repo);
         if (model != null) {
            repositories.add(model);
         }
      }
      long duration = System.currentTimeMillis() - methodStart;
      logger.info(MessageFormat.format("{0} repository models loaded in {1} msecs", duration));
      return repositories;
   }
   /**
@@ -1825,9 +1850,10 @@
   protected void configureLuceneIndexing() {
      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);
      String frequency = settings.getString(Keys.web.luceneFrequency, "2 mins");
      int mins = TimeUtils.convertFrequencyToMinutes(frequency, 2);
      scheduledExecutor.scheduleAtFixedRate(luceneExecutor, 1, mins,  TimeUnit.MINUTES);
      logger.info("Lucene will process indexed branches every {} minutes.", mins);
   }
   protected void configureGarbageCollector() {
@@ -1862,10 +1888,7 @@
   protected void configureMirrorExecutor() {
      mirrorExecutor = new MirrorService(settings, this);
      if (mirrorExecutor.isReady()) {
         int mins = TimeUtils.convertFrequencyToMinutes(settings.getString(Keys.git.mirrorPeriod, "30 mins"));
         if (mins < 5) {
            mins = 5;
         }
         int mins = TimeUtils.convertFrequencyToMinutes(settings.getString(Keys.git.mirrorPeriod, "30 mins"), 5);
         int delay = 1;
         scheduledExecutor.scheduleAtFixedRate(mirrorExecutor, delay, mins,  TimeUnit.MINUTES);
         logger.info("Mirror service will fetch updates every {} minutes.", mins);
@@ -1883,7 +1906,6 @@
      cfg.setPackedGitLimit(settings.getFilesize(Keys.git.packedGitLimit, cfg.getPackedGitLimit()));
      cfg.setDeltaBaseCacheLimit(settings.getFilesize(Keys.git.deltaBaseCacheLimit, cfg.getDeltaBaseCacheLimit()));
      cfg.setPackedGitOpenFiles(settings.getFilesize(Keys.git.packedGitOpenFiles, cfg.getPackedGitOpenFiles()));
      cfg.setStreamFileThreshold(settings.getFilesize(Keys.git.streamFileThreshold, cfg.getStreamFileThreshold()));
      cfg.setPackedGitMMAP(settings.getBoolean(Keys.git.packedGitMmap, cfg.isPackedGitMMAP()));
      try {
@@ -1892,7 +1914,6 @@
         logger.debug(MessageFormat.format("{0} = {1,number,0}", Keys.git.packedGitLimit, cfg.getPackedGitLimit()));
         logger.debug(MessageFormat.format("{0} = {1,number,0}", Keys.git.deltaBaseCacheLimit, cfg.getDeltaBaseCacheLimit()));
         logger.debug(MessageFormat.format("{0} = {1,number,0}", Keys.git.packedGitOpenFiles, cfg.getPackedGitOpenFiles()));
         logger.debug(MessageFormat.format("{0} = {1,number,0}", Keys.git.streamFileThreshold, cfg.getStreamFileThreshold()));
         logger.debug(MessageFormat.format("{0} = {1}", Keys.git.packedGitMmap, cfg.isPackedGitMMAP()));
      } catch (IllegalArgumentException e) {
         logger.error("Failed to configure JGit parameters!", e);
@@ -1900,12 +1921,14 @@
      try {
         // issue-486/ticket-151: UTF-9 & UTF-18
         // issue-560/ticket-237: 'UTF8'
         Field field = RawParseUtils.class.getDeclaredField("encodingAliases");
         field.setAccessible(true);
         Map<String, Charset> encodingAliases = (Map<String, Charset>) field.get(null);
         encodingAliases.put("'utf8'", RawParseUtils.UTF8_CHARSET);
         encodingAliases.put("utf-9", RawParseUtils.UTF8_CHARSET);
         encodingAliases.put("utf-18", RawParseUtils.UTF8_CHARSET);
         logger.info("Alias UTF-9 & UTF-18 encodings as UTF-8 in JGit");
         logger.info("Alias 'UTF8', UTF-9 & UTF-18 encodings as UTF-8 in JGit");
      } catch (Throwable t) {
         logger.error("Failed to inject UTF-9 & UTF-18 encoding aliases into JGit", t);
      }
@@ -1948,21 +1971,19 @@
   }
   protected void confirmWriteAccess() {
      if (runtimeManager.isServingRepositories()) {
         try {
            if (!getRepositoriesFolder().exists()) {
               getRepositoriesFolder().mkdirs();
            }
            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("");
      try {
         if (!getRepositoriesFolder().exists()) {
            getRepositoriesFolder().mkdirs();
         }
         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("");
      }
   }
}