James Moger
2014-05-07 4a275239523965a3c8f6cbf0a1c8529fce58806d
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);
            }
         }
@@ -534,8 +535,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);
                  }
               }
@@ -943,26 +945,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 +980,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 +1020,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 +1351,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);