James Moger
2012-02-25 40538c57dd574d831d044cda50a8999941dc0a24
src/com/gitblit/GitBlit.java
@@ -23,16 +23,19 @@
import java.io.InputStreamReader;
import java.lang.reflect.Field;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TimeZone;
import java.util.TreeSet;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executors;
@@ -103,7 +106,7 @@
public class GitBlit implements ServletContextListener {
   private static GitBlit gitblit;
   private final Logger logger = LoggerFactory.getLogger(GitBlit.class);
   private final ScheduledExecutorService scheduledExecutor = Executors.newScheduledThreadPool(5);
@@ -123,8 +126,6 @@
   private File repositoriesFolder;
   private boolean exportAll = true;
   private IUserService userService;
   private IStoredSettings settings;
@@ -134,6 +135,8 @@
   private ServerStatus serverStatus;
   private MailExecutor mailExecutor;
   private TimeZone timezone;
   public GitBlit() {
      if (gitblit == null) {
@@ -161,6 +164,23 @@
    */
   public static boolean isGO() {
      return self().settings instanceof FileSettings;
   }
   /**
    * Returns the preferred timezone for the Gitblit instance.
    *
    * @return a timezone
    */
   public static TimeZone getTimezone() {
      if (self().timezone == null) {
         String tzid = getString("web.timezone", null);
         if (StringUtils.isEmpty(tzid)) {
            self().timezone = TimeZone.getDefault();
            return self().timezone;
         }
         self().timezone = TimeZone.getTimeZone(tzid);
      }
      return self().timezone;
   }
   /**
@@ -642,7 +662,8 @@
    * @return list of all repositories
    */
   public List<String> getRepositoryList() {
      return JGitUtils.getRepositoryList(repositoriesFolder, exportAll,
      return JGitUtils.getRepositoryList(repositoriesFolder,
            settings.getBoolean(Keys.git.onlyAccessBareRepositories, false),
            settings.getBoolean(Keys.git.searchRepositoriesSubfolders, true));
   }
@@ -759,7 +780,8 @@
      RepositoryModel model = new RepositoryModel();
      model.name = repositoryName;
      model.hasCommits = JGitUtils.hasCommits(r);
      model.lastChange = JGitUtils.getLastChange(r, null);
      model.lastChange = JGitUtils.getLastChange(r);
      model.isBare = r.isBare();
      StoredConfig config = JGitUtils.readConfig(r);
      if (config != null) {
         model.description = getConfig(config, "description", "");
@@ -786,8 +808,8 @@
         model.mailingLists = new ArrayList<String>(Arrays.asList(config.getStringList(
               "gitblit", null, "mailingList")));
      }
      model.defaultHead = JGitUtils.getSymbolicHeadTarget(r);
      model.availableHeads = JGitUtils.getAvailableHeadTargets(r);
      model.HEAD = JGitUtils.getHEADRef(r);
      model.availableRefs = JGitUtils.getAvailableHeadTargets(r);
      r.close();
      return model;
   }
@@ -860,7 +882,7 @@
      if (repositoryMetricsCache.hasCurrent(model.name, model.lastChange)) {
         return new ArrayList<Metric>(repositoryMetricsCache.getObject(model.name));
      }
      List<Metric> metrics = MetricUtils.getDateMetrics(repository, null, true, null);
      List<Metric> metrics = MetricUtils.getDateMetrics(repository, null, true, null, getTimezone());
      repositoryMetricsCache.updateObject(model.name, model.lastChange, metrics);
      return new ArrayList<Metric>(metrics);
   }
@@ -984,15 +1006,14 @@
      if (r != null) {
         updateConfiguration(r, repository);
         // only update symbolic head if it changes
         String currentHead = JGitUtils.getSymbolicHeadTarget(r);
         if (!StringUtils.isEmpty(repository.defaultHead)  &&
               !repository.defaultHead.equals(currentHead)) {
         String currentRef = JGitUtils.getHEADRef(r);
         if (!StringUtils.isEmpty(repository.HEAD) && !repository.HEAD.equals(currentRef)) {
            logger.info(MessageFormat.format("Relinking {0} HEAD from {1} to {2}", 
                  repository.name, currentHead, repository.defaultHead));
            JGitUtils.setSymbolicHeadTarget(r, repository.defaultHead);
            // clear the cache
            clearRepositoryCache(repository.name);
                  repository.name, currentRef, repository.HEAD));
            if (JGitUtils.setHEADtoRef(r, repository.HEAD)) {
               // clear the cache
               clearRepositoryCache(repository.name);
            }
         }
         // close the repository object
@@ -1767,7 +1788,11 @@
      this.settings = settings;
      repositoriesFolder = getRepositoriesFolder();
      logger.info("Git repositories folder " + repositoriesFolder.getAbsolutePath());
      repositoryResolver = new FileResolver<Void>(repositoriesFolder, exportAll);
      repositoryResolver = new FileResolver<Void>(repositoriesFolder, true);
      logTimezone("JVM", TimeZone.getDefault());
      logTimezone(Constants.NAME, getTimezone());
      serverStatus = new ServerStatus(isGO());
      String realm = settings.getString(Keys.realm.userService, "users.properties");
      IUserService loginService = null;
@@ -1787,7 +1812,14 @@
      }
      if (startFederation) {
         configureFederation();
      }
      }
   }
   private void logTimezone(String type, TimeZone zone) {
      SimpleDateFormat df = new SimpleDateFormat("z Z");
      df.setTimeZone(zone);
      String offset = df.format(new Date());
      logger.info(type + " timezone is " + zone.getID() + " (" + offset + ")");
   }
   /**
@@ -1806,14 +1838,18 @@
         WebXmlSettings webxmlSettings = new WebXmlSettings(context);
         // 0.7.0 web.properties in the deployed war folder
         File overrideFile = new File(context.getRealPath("/WEB-INF/web.properties"));
         if (overrideFile.exists()) {
            webxmlSettings.applyOverrides(overrideFile);
         String webProps = context.getRealPath("/WEB-INF/web.properties");
         if (!StringUtils.isEmpty(webProps)) {
            File overrideFile = new File(webProps);
            if (overrideFile.exists()) {
               webxmlSettings.applyOverrides(overrideFile);
            }
         }
         // 0.8.0 gitblit.properties file located outside the deployed war
         // folder lie, for example, on RedHat OpenShift.
         overrideFile = getFileOrFolder("gitblit.properties");
         File overrideFile = getFileOrFolder("gitblit.properties");
         if (!overrideFile.getPath().equals("gitblit.properties")) {
            webxmlSettings.applyOverrides(overrideFile);
         }