James Moger
2014-05-22 889bb73008ba5539edc1b19b678d1e850dc6e56c
src/main/java/com/gitblit/manager/RepositoryManager.java
@@ -421,8 +421,9 @@
         // update the fork origin repository with this repository clone
         if (!StringUtils.isEmpty(model.originRepository)) {
            if (repositoryListCache.containsKey(model.originRepository)) {
               RepositoryModel origin = repositoryListCache.get(model.originRepository);
            String originKey = model.originRepository.toLowerCase();
            if (repositoryListCache.containsKey(originKey)) {
               RepositoryModel origin = repositoryListCache.get(originKey);
               origin.addFork(model.name);
            }
         }
@@ -451,6 +452,20 @@
      repositorySizeCache.remove(repositoryName);
      repositoryMetricsCache.remove(repositoryName);
      CommitCache.instance().clear(repositoryName);
   }
   /**
    * Reset all caches for this repository.
    *
    * @param repositoryName
    * @since 1.5.1
    */
   @Override
   public void resetRepositoryCache(String repositoryName) {
      removeFromCachedRepositoryList(repositoryName);
      clearRepositoryMetadataCache(repositoryName);
      // force a reload of the repository data (ticket-82, issue-433)
      getRepositoryModel(repositoryName);
   }
   /**
@@ -534,8 +549,9 @@
            // rebuild fork networks
            for (RepositoryModel model : repositoryListCache.values()) {
               if (!StringUtils.isEmpty(model.originRepository)) {
                  if (repositoryListCache.containsKey(model.originRepository)) {
                     RepositoryModel origin = repositoryListCache.get(model.originRepository);
                  String originKey = model.originRepository.toLowerCase();
                  if (repositoryListCache.containsKey(originKey)) {
                     RepositoryModel origin = repositoryListCache.get(originKey);
                     origin.addFork(model.name);
                  }
               }
@@ -668,7 +684,8 @@
      // http://stackoverflow.com/questions/17183110
      repositoryName = repositoryName.replace("%7E", "~").replace("%7e", "~");
      if (!repositoryListCache.containsKey(repositoryName)) {
      String repositoryKey = repositoryName.toLowerCase();
      if (!repositoryListCache.containsKey(repositoryKey)) {
         RepositoryModel model = loadRepositoryModel(repositoryName);
         if (model == null) {
            return null;
@@ -678,7 +695,7 @@
      }
      // cached model
      RepositoryModel model = repositoryListCache.get(repositoryName.toLowerCase());
      RepositoryModel model = repositoryListCache.get(repositoryKey);
      if (gcExecutor.isCollectingGarbage(model.name)) {
         // Gitblit is busy collecting garbage, use our cached model
@@ -943,26 +960,31 @@
    */
   @Override
   public String getFork(String username, String origin) {
      if (StringUtils.isEmpty(origin)) {
         return null;
      }
      String userProject = ModelUtils.getPersonalPath(username);
      if (settings.getBoolean(Keys.git.cacheRepositoryList, true)) {
         String originKey = origin.toLowerCase();
         String userPath = userProject + "/";
         // collect all origin nodes in fork network
         Set<String> roots = new HashSet<String>();
         roots.add(origin);
         RepositoryModel originModel = repositoryListCache.get(origin);
         roots.add(originKey);
         RepositoryModel originModel = repositoryListCache.get(originKey);
         while (originModel != null) {
            if (!ArrayUtils.isEmpty(originModel.forks)) {
               for (String fork : originModel.forks) {
                  if (!fork.startsWith(userPath)) {
                     roots.add(fork);
                     roots.add(fork.toLowerCase());
                  }
               }
            }
            if (originModel.originRepository != null) {
               roots.add(originModel.originRepository);
               originModel = repositoryListCache.get(originModel.originRepository);
               String ooKey = originModel.originRepository.toLowerCase();
               roots.add(ooKey);
               originModel = repositoryListCache.get(ooKey);
            } else {
               // break
               originModel = null;
@@ -973,7 +995,7 @@
            if (repository.startsWith(userPath)) {
               RepositoryModel model = repositoryListCache.get(repository);
               if (!StringUtils.isEmpty(model.originRepository)) {
                  if (roots.contains(model.originRepository)) {
                  if (roots.contains(model.originRepository.toLowerCase())) {
                     // user has a fork in this graph
                     return model.name;
                  }
@@ -1013,7 +1035,7 @@
         // find the root, cached
         RepositoryModel model = repositoryListCache.get(repository.toLowerCase());
         while (model.originRepository != null) {
            model = repositoryListCache.get(model.originRepository);
            model = repositoryListCache.get(model.originRepository.toLowerCase());
         }
         ForkModel root = getForkModelFromCache(model.name);
         return root;
@@ -1344,7 +1366,7 @@
            // update this repository's origin's fork list
            if (!StringUtils.isEmpty(repository.originRepository)) {
               RepositoryModel origin = repositoryListCache.get(repository.originRepository);
               RepositoryModel origin = repositoryListCache.get(repository.originRepository.toLowerCase());
               if (origin != null && !ArrayUtils.isEmpty(origin.forks)) {
                  origin.forks.remove(repositoryName);
                  origin.forks.add(repository.name);