James Moger
2013-06-28 676b72cdc1a4ee3896c59eb64324cf6d15b9bce8
Track fork's originRepository instead of parsing origin url (issue-190)
2 files modified
9 ■■■■ changed files
releases.moxie 1 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/GitBlit.java 8 ●●●● patch | view | raw | blame | history
releases.moxie
@@ -35,6 +35,7 @@
     - Fixed submodule diff display
    changes:
     - Persist originRepository (for forks) in the repository config instead of relying on parsing origin urls which are susceptible to filesystem relocation (issue 190)
     - Improved error logging for servlet containers which provide a null contextFolder (issue 199)
     - Improve Gerrit change ref decoration in the refs panel (issue 206)
     - Display full commit message on commitdiff page (issue-258)
src/main/java/com/gitblit/GitBlit.java
@@ -1948,6 +1948,7 @@
        
        if (config != null) {
            model.description = getConfig(config, "description", "");
            model.originRepository = getConfig(config, "originRepository", null);
            model.addOwners(ArrayUtils.fromString(getConfig(config, "owner", "")));
            model.useTickets = getConfig(config, "useTickets", false);
            model.useDocs = getConfig(config, "useDocs", false);
@@ -2003,7 +2004,7 @@
        model.sparkleshareId = JGitUtils.getSparkleshareId(r);
        r.close();
        
        if (model.origin != null && model.origin.startsWith("file://")) {
        if (StringUtils.isEmpty(model.originRepository) && model.origin != null && model.origin.startsWith("file://")) {
            // repository was cloned locally... perhaps as a fork
            try {
                File folder = new File(new URI(model.origin));
@@ -2412,6 +2413,7 @@
                            String origin = config.getString("remote", "origin", "url");
                            origin = origin.replace(repositoryName, repository.name);
                            config.setString("remote", "origin", "url", origin);
                            config.setString(Constants.CONFIG_GITBLIT, null, "originRepository", repository.name);
                            config.save();
                        } catch (Exception e) {
                            logger.error("Failed to update repository fork config for " + fork, e);
@@ -2420,11 +2422,12 @@
                    }
                }
                
                // remove this repository from any origin model's fork list
                // update this repository's origin's fork list
                if (!StringUtils.isEmpty(repository.originRepository)) {
                    RepositoryModel origin = repositoryListCache.get(repository.originRepository);
                    if (origin != null && !ArrayUtils.isEmpty(origin.forks)) {
                        origin.forks.remove(repositoryName);
                        origin.forks.add(repository.name);
                    }
                }
@@ -2473,6 +2476,7 @@
    public void updateConfiguration(Repository r, RepositoryModel repository) {
        StoredConfig config = r.getConfig();
        config.setString(Constants.CONFIG_GITBLIT, null, "description", repository.description);
        config.setString(Constants.CONFIG_GITBLIT, null, "originRepository", repository.originRepository);
        config.setString(Constants.CONFIG_GITBLIT, null, "owner", ArrayUtils.toString(repository.owners));
        config.setBoolean(Constants.CONFIG_GITBLIT, null, "useTickets", repository.useTickets);
        config.setBoolean(Constants.CONFIG_GITBLIT, null, "useDocs", repository.useDocs);