James Moger
2013-07-03 5c5b7a8659851abc6ce1654414ceeef2e7f9c803
Set author as tooltip of "last change" on repositories page (issue-238)
8 files modified
63 ■■■■ changed files
releases.moxie 1 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/GitBlit.java 9 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/models/RepositoryModel.java 1 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/utils/JGitUtils.java 39 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/OverviewPage.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/SummaryPage.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/panels/RepositoriesPanel.java 3 ●●●●● patch | view | raw | blame | history
src/test/java/com/gitblit/tests/JGitUtilsTest.java 6 ●●●● patch | view | raw | blame | history
releases.moxie
@@ -60,6 +60,7 @@
     - Support header color customizations (issue 209)
     - Support username substitution in web.otherUrls (issue 213)
     - Option to force client-side basic authentication instead of form-based authentication if web.authenticateViewPages=true (issue 222)
     - Set author as tooltip of last change column in the repositories panel (issue-238)
     - Setting to automatically create an user account based on an authenticated user principal from the servlet container (issue-246)
     - Added WindowsUserService to authenticate users against Windows accounts (issue-250)
     - Global and per-repository setting to exclude authors from metrics (issue-251)
src/main/java/com/gitblit/GitBlit.java
@@ -121,6 +121,7 @@
import com.gitblit.utils.FederationUtils;
import com.gitblit.utils.HttpUtils;
import com.gitblit.utils.JGitUtils;
import com.gitblit.utils.JGitUtils.LastChange;
import com.gitblit.utils.JsonUtils;
import com.gitblit.utils.MetricUtils;
import com.gitblit.utils.ObjectCache;
@@ -1669,7 +1670,9 @@
                model.hasCommits = JGitUtils.hasCommits(r);
            }
            model.lastChange = JGitUtils.getLastChange(r);
            LastChange lc = JGitUtils.getLastChange(r);
            model.lastChange = lc.when;
            model.lastChangeAuthor = lc.who;
            if (!model.skipSizeCalculation) {
                ByteFormat byteFormat = new ByteFormat();
                model.size = byteFormat.format(calculateSize(model));
@@ -1973,7 +1976,9 @@
            model.name = repositoryName;
        }
        model.hasCommits = JGitUtils.hasCommits(r);
        model.lastChange = JGitUtils.getLastChange(r);
        LastChange lc = JGitUtils.getLastChange(r);
        model.lastChange = lc.when;
        model.lastChangeAuthor = lc.who;
        model.projectPath = StringUtils.getFirstPathElement(repositoryName);
        
        StoredConfig config = r.getConfig();
src/main/java/com/gitblit/models/RepositoryModel.java
@@ -46,6 +46,7 @@
    public String description;
    public List<String> owners;
    public Date lastChange;
    public String lastChangeAuthor;
    public boolean hasCommits;
    public boolean showRemoteBranches;
    public boolean useTickets;
src/main/java/com/gitblit/utils/JGitUtils.java
@@ -439,39 +439,56 @@
        }
        return false;
    }
    /**
     * Encapsulates the result of cloning or pulling from a repository.
     */
    public static class LastChange {
        public Date when;
        public String who;
        LastChange() {
            when = new Date(0);
        }
        LastChange(long lastModified) {
            this.when = new Date(lastModified);
        }
    }
    /**
     * Returns the date of the most recent commit on a branch. If the repository
     * does not exist Date(0) is returned. If it does exist but is empty, the
     * last modified date of the repository folder is returned.
     * Returns the date and author of the most recent commit on a branch. If the
     * repository does not exist Date(0) is returned. If it does exist but is
     * empty, the last modified date of the repository folder is returned.
     * 
     * @param repository
     * @return
     * @return a LastChange object
     */
    public static Date getLastChange(Repository repository) {
    public static LastChange getLastChange(Repository repository) {
        if (!hasCommits(repository)) {
            // null repository
            if (repository == null) {
                return new Date(0);
                return new LastChange();
            }
            // fresh repository
            return new Date(repository.getDirectory().lastModified());
            return new LastChange(repository.getDirectory().lastModified());
        }
        List<RefModel> branchModels = getLocalBranches(repository, true, -1);
        if (branchModels.size() > 0) {
            // find most recent branch update
            Date lastChange = new Date(0);
            LastChange lastChange = new LastChange();
            for (RefModel branchModel : branchModels) {
                if (branchModel.getDate().after(lastChange)) {
                    lastChange = branchModel.getDate();
                if (branchModel.getDate().after(lastChange.when)) {
                    lastChange.when = branchModel.getDate();
                    lastChange.who = branchModel.getAuthorIdent().getName();
                }
            }
            return lastChange;
        }
        
        // default to the repository folder modification date
        return new Date(repository.getDirectory().lastModified());
        return new LastChange(repository.getDirectory().lastModified());
    }
    /**
src/main/java/com/gitblit/wicket/pages/OverviewPage.java
@@ -98,7 +98,7 @@
        add(ownersView);
        
        add(WicketUtils.createTimestampLabel("repositoryLastChange",
                JGitUtils.getLastChange(r), getTimeZone(), getTimeUtils()));
                JGitUtils.getLastChange(r).when, getTimeZone(), getTimeUtils()));
        add(new Label("repositorySize", model.size));
        
        if (metricsTotal == null) {
src/main/java/com/gitblit/wicket/pages/SummaryPage.java
@@ -116,7 +116,7 @@
        add(ownersView);
        
        add(WicketUtils.createTimestampLabel("repositoryLastChange",
                JGitUtils.getLastChange(r), getTimeZone(), getTimeUtils()));
                JGitUtils.getLastChange(r).when, getTimeZone(), getTimeUtils()));
        add(new Label("repositorySize", getRepositoryModel().size));
        if (metricsTotal == null) {
            add(new Label("branchStats", ""));
src/main/java/com/gitblit/wicket/panels/RepositoriesPanel.java
@@ -322,6 +322,9 @@
                Label lastChangeLabel = new Label("repositoryLastChange", lastChange);
                row.add(lastChangeLabel);
                WicketUtils.setCssClass(lastChangeLabel, getTimeUtils().timeAgoCss(entry.lastChange));
                if (!StringUtils.isEmpty(entry.lastChangeAuthor)) {
                    WicketUtils.setHtmlTooltip(lastChangeLabel, getString("gb.author") + ": " + entry.lastChangeAuthor);
                }
                boolean showOwner = user != null && entry.isOwner(user.username);
                boolean myPersonalRepository = showOwner && entry.isUsersPersonalRepository(user.username);
src/test/java/com/gitblit/tests/JGitUtilsTest.java
@@ -118,11 +118,11 @@
    @Test
    public void testLastCommit() throws Exception {
        assertEquals(new Date(0), JGitUtils.getLastChange(null));
        assertEquals(new Date(0), JGitUtils.getLastChange(null).when);
        Repository repository = GitBlitSuite.getHelloworldRepository();
        assertTrue(JGitUtils.getCommit(repository, null) != null);
        Date date = JGitUtils.getLastChange(repository);
        Date date = JGitUtils.getLastChange(repository).when;
        repository.close();
        assertNotNull("Could not get last repository change date!", date);
    }
@@ -140,7 +140,7 @@
            assertNull(JGitUtils.getFirstCommit(repository, null));
            assertEquals(folder.lastModified(), JGitUtils.getFirstChange(repository, null)
                    .getTime());
            assertEquals(folder.lastModified(), JGitUtils.getLastChange(repository).getTime());
            assertEquals(folder.lastModified(), JGitUtils.getLastChange(repository).when.getTime());
            assertNull(JGitUtils.getCommit(repository, null));
            repository.close();
            RepositoryCache.close(repository);