Paul Martin
2016-03-27 795ce2765773156da868720303a6b2638d14820b
Friendly URL for EditFile Page #974

+ Prevent Edit of old doc version
5 files modified
50 ■■■■ changed files
src/main/java/com/gitblit/utils/JGitUtils.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/GitBlitWebApp.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/GitBlitWebApp.properties 7 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/EditFilePage.html 4 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/EditFilePage.java 20 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/utils/JGitUtils.java
@@ -2727,5 +2727,22 @@
        }
        return success;
    }
    /**
     * Returns true if the commit identified by commitId is at the tip of it's branch.
     *
     * @param repository
     * @param commitId
     * @return true if the given commit is the tip
     */
    public static boolean isTip(Repository repository, String commitId) {
        try {
            RefModel tip = getBranch(repository, commitId);
            return (tip != null);
        } catch (Exception e) {
            LOGGER.error("Failed to determine isTip", e);
        }
        return false;
    }
}
src/main/java/com/gitblit/wicket/GitBlitWebApp.java
@@ -59,6 +59,7 @@
import com.gitblit.wicket.pages.ComparePage;
import com.gitblit.wicket.pages.DocPage;
import com.gitblit.wicket.pages.DocsPage;
import com.gitblit.wicket.pages.EditFilePage;
import com.gitblit.wicket.pages.EditMilestonePage;
import com.gitblit.wicket.pages.EditRepositoryPage;
import com.gitblit.wicket.pages.EditTicketPage;
@@ -230,6 +231,7 @@
        // setup the markup document urls
        mount("/docs", DocsPage.class, "r", "h");
        mount("/doc", DocPage.class, "r", "h", "f");
        mount("/editfile", EditFilePage.class, "r", "h", "f");
        // federation urls
        mount("/proposal", ReviewProposalPage.class, "t");
src/main/java/com/gitblit/wicket/GitBlitWebApp.properties
@@ -770,4 +770,9 @@
gb.filestoreStats = Filestore contains {0} files with a total size of {1}.  ({2} remaining)
gb.statusChangedOn = status changed on
gb.statusChangedBy = status changed by
gb.filestoreHelp = How to use the Filestore?
gb.filestoreHelp = How to use the Filestore?
gb.editFile = edit file
gb.continueEditing = Continue Editing
gb.commitChanges = Commit Changes
gb.fileNotMergeable = Unable to commit {0}.  This file can not be automatically merged.
gb.fileCommitted = Successfully committed {0}.
src/main/java/com/gitblit/wicket/pages/EditFilePage.html
@@ -34,8 +34,8 @@
                <textarea style="width:100%; resize:none" wicket:id="commitMessage"></textarea>
              </div>
              <div class="modal-footer">
                <a href="#" data-dismiss="modal" class="btn">Continue editing</a>
                <a href="#" onclick="commitChanges()" class="btn btn-primary">Commit changes</a>
                <a href="#" data-dismiss="modal" class="btn"><wicket:message key="gb.continueEditing"></wicket:message></a>
                <a href="#" onclick="commitChanges()" class="btn btn-primary"><wicket:message key="gb.commitChanges"></wicket:message></a>
              </div>
            </div>
        </form>
src/main/java/com/gitblit/wicket/pages/EditFilePage.java
@@ -17,6 +17,7 @@
import java.io.IOException;
import java.text.MessageFormat;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -51,7 +52,7 @@
import com.gitblit.wicket.MarkupProcessor.MarkupDocument;
import com.gitblit.wicket.WicketUtils;
@CacheControl(LastModified.BOOT)
@CacheControl(LastModified.REPOSITORY)
public class EditFilePage extends RepositoryPage {
    public EditFilePage(final PageParameters params) {
@@ -96,9 +97,9 @@
        Fragment fragment;
        String displayedCommitId = commit.getId().getName();
        MarkupDocument markupDoc = processor.parse(repositoryName, displayedCommitId, documentPath, markupText);
        logger.info("Loading Edit File page: " + displayedCommitId);
        logger.trace("Loading Edit File page: " + displayedCommitId);
        if (currentUser.canEdit(getRepositoryModel())) {
        if (currentUser.canEdit(getRepositoryModel()) && JGitUtils.isTip(getRepository(), objectId.toString())) {
            
            final Model<String> documentContent = new Model<String>(markupDoc.markup);
            final Model<String> commitMessage = new Model<String>("Document update");
@@ -112,7 +113,6 @@
                @Override
                protected void onSubmit() {
                    final Repository repository = getRepository();
                    final String document = documentContent.getObject();
                    final String message = commitMessage.getObject();
@@ -125,7 +125,7 @@
                    try {            
                        ObjectId docAtLoad = getRepository().resolve(commitIdAtLoad.getObject());
                        
                        logger.info("Commiting Edit File page: " + commitIdAtLoad.getObject());
                        logger.trace("Commiting Edit File page: " + commitIdAtLoad.getObject());
                        
                        DirCache index = DirCache.newInCore();
                        DirCacheBuilder builder = index.builder();
@@ -156,12 +156,12 @@
                    }
                
                    if (success == false) {
                        EditFilePage.this.error("Unable to commit document " + path, false);
                        getSession().error(MessageFormat.format(getString("gb.fileNotMergeable"),path));
                        return;
                    }
                    
                    getSession().info(MessageFormat.format(getString("gb.fileCommitted"),path));
                    setResponsePage(EditFilePage.class, params);
                    return;
                }
            };
@@ -197,12 +197,12 @@
        fragment.add(new ExternalLink("rawLink", rawUrl));
        add(fragment);
    }
    @Override
    protected String getPageName() {
        return getString("gb.docs");
        return getString("gb.editFile");
    }
    @Override
@@ -212,7 +212,7 @@
    @Override
    protected Class<? extends BasePage> getRepoNavPageClass() {
        return DocsPage.class;
        return EditFilePage.class;
    }