James Moger
2014-05-07 4a275239523965a3c8f6cbf0a1c8529fce58806d
Fix case-sensitivity error in determining fork network
2 files modified
32 ■■■■■ changed files
releases.moxie 1 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/manager/RepositoryManager.java 31 ●●●●● patch | view | raw | blame | history
releases.moxie
@@ -16,6 +16,7 @@
    - Fix forcing default locale to en or LANG_CC for web ui (ticket-51)
    - Fix inconsistency with repository ownership permission checking (ticket-52)
    - Prevent submission from New|Edit ticket page with empty titles (ticket-53)
    - Fix case-sensitivity error in determining fork network (issue-420, ticket-62)
    - Fix transport determination for SSH urls served on port 22 (issue-421, ticket-63)
    changes:
    - improve French translation (pr-176)
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);