peto268
2014-04-26 99b43dffe86b635e97f625157083cee37ee921bf
Added option to disable deleting of non empty repositories through the user interface
3 files modified
63 ■■■■ changed files
src/main/distrib/data/gitblit.properties 5 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/panels/ProjectRepositoryPanel.java 30 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/panels/RepositoriesPanel.java 28 ●●●● patch | view | raw | blame | history
src/main/distrib/data/gitblit.properties
@@ -766,6 +766,11 @@
# SINCE 0.5.0
web.allowCookieAuthentication = true
# Allow deleting of non empty repositories through the user interface.
#
# SINCE 1.6.0
web.allowDeletingNonEmptyRepositories = true
# Config file for storing project metadata
#
# SINCE 1.2.0
src/main/java/com/gitblit/wicket/panels/ProjectRepositoryPanel.java
@@ -145,20 +145,36 @@
                    @Override
                    public void onClick() {
                        if (app().repositories().deleteRepositoryModel(entry)) {
                        // refresh the model
                        RepositoryModel model = app().repositories().getRepositoryModel(entry.name);
                        if (isDeleteAllowed(model) &&
                                app().repositories().deleteRepositoryModel(model)) {
                            // redirect to the owning page
                            if (entry.isPersonalRepository()) {
                                setResponsePage(getPage().getClass(), WicketUtils.newUsernameParameter(entry.projectPath.substring(1)));
                            if (model.isPersonalRepository()) {
                                setResponsePage(getPage().getClass(), WicketUtils.newUsernameParameter(model.projectPath.substring(1)));
                            } else {
                                setResponsePage(getPage().getClass(), WicketUtils.newProjectParameter(entry.projectPath));
                                setResponsePage(getPage().getClass(), WicketUtils.newProjectParameter(model.projectPath));
                            }
                        } else {
                            error(MessageFormat.format(getString("gb.repositoryDeleteFailed"), entry));
                            error(MessageFormat.format(getString("gb.repositoryDeleteFailed"), model));
                        }
                    }
                    @Override
                    public boolean isEnabled() {
                        return isDeleteAllowed(entry);
                    }
                    private boolean isDeleteAllowed(
                            final RepositoryModel model) {
                        return app().settings().getBoolean(Keys.web.allowDeletingNonEmptyRepositories, true)
                                || !model.hasCommits;
                    }
                };
                deleteLink.add(new JavascriptEventConfirmation("onclick", MessageFormat.format(
                        localizer.getString("gb.deleteRepository", parent), entry)));
                if (deleteLink.isEnabled()) {
                    deleteLink.add(new JavascriptEventConfirmation("onclick", MessageFormat.format(
                            localizer.getString("gb.deleteRepository", parent), entry)));
                }
                repositoryLinks.add(deleteLink);
            }
        } else {
src/main/java/com/gitblit/wicket/panels/RepositoriesPanel.java
@@ -334,20 +334,36 @@
                        @Override
                        public void onClick() {
                            if (app().repositories().deleteRepositoryModel(entry)) {
                            // refresh the model
                            RepositoryModel model = app().repositories().getRepositoryModel(entry.name);
                            if (isDeleteAllowed(model) &&
                                    app().repositories().deleteRepositoryModel(model)) {
                                if (dp instanceof SortableRepositoriesProvider) {
                                    info(MessageFormat.format(getString("gb.repositoryDeleted"), entry));
                                    ((SortableRepositoriesProvider) dp).remove(entry);
                                    info(MessageFormat.format(getString("gb.repositoryDeleted"), model));
                                    ((SortableRepositoriesProvider) dp).remove(model);
                                } else {
                                    setResponsePage(getPage().getClass(), getPage().getPageParameters());
                                }
                            } else {
                                error(MessageFormat.format(getString("gb.repositoryDeleteFailed"), entry));
                                error(MessageFormat.format(getString("gb.repositoryDeleteFailed"), model));
                            }
                        }
                        @Override
                        public boolean isEnabled() {
                            return isDeleteAllowed(entry);
                        }
                        private boolean isDeleteAllowed(
                                final RepositoryModel model) {
                            return app().settings().getBoolean(Keys.web.allowDeletingNonEmptyRepositories, true)
                                    || !model.hasCommits;
                        }
                    };
                    deleteLink.add(new JavascriptEventConfirmation("onclick", MessageFormat.format(
                            getString("gb.deleteRepository"), entry)));
                    if (deleteLink.isEnabled()) {
                        deleteLink.add(new JavascriptEventConfirmation("onclick", MessageFormat.format(
                                getString("gb.deleteRepository"), entry)));
                    }
                    repositoryLinks.add(deleteLink);
                    row.add(repositoryLinks);
                } else if (showOwner) {