Browse Source

Set author as tooltip of "last change" on repositories page (issue-238)

tags/v1.3.0
James Moger 10 years ago
parent
commit
5c5b7a8659

+ 1
- 0
releases.moxie View File

- Support header color customizations (issue 209) - Support header color customizations (issue 209)
- Support username substitution in web.otherUrls (issue 213) - 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) - 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) - 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) - Added WindowsUserService to authenticate users against Windows accounts (issue-250)
- Global and per-repository setting to exclude authors from metrics (issue-251) - Global and per-repository setting to exclude authors from metrics (issue-251)

+ 7
- 2
src/main/java/com/gitblit/GitBlit.java View File

import com.gitblit.utils.FederationUtils; import com.gitblit.utils.FederationUtils;
import com.gitblit.utils.HttpUtils; import com.gitblit.utils.HttpUtils;
import com.gitblit.utils.JGitUtils; import com.gitblit.utils.JGitUtils;
import com.gitblit.utils.JGitUtils.LastChange;
import com.gitblit.utils.JsonUtils; import com.gitblit.utils.JsonUtils;
import com.gitblit.utils.MetricUtils; import com.gitblit.utils.MetricUtils;
import com.gitblit.utils.ObjectCache; import com.gitblit.utils.ObjectCache;
model.hasCommits = JGitUtils.hasCommits(r); 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) { if (!model.skipSizeCalculation) {
ByteFormat byteFormat = new ByteFormat(); ByteFormat byteFormat = new ByteFormat();
model.size = byteFormat.format(calculateSize(model)); model.size = byteFormat.format(calculateSize(model));
model.name = repositoryName; model.name = repositoryName;
} }
model.hasCommits = JGitUtils.hasCommits(r); 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); model.projectPath = StringUtils.getFirstPathElement(repositoryName);
StoredConfig config = r.getConfig(); StoredConfig config = r.getConfig();

+ 1
- 0
src/main/java/com/gitblit/models/RepositoryModel.java View File

public String description; public String description;
public List<String> owners; public List<String> owners;
public Date lastChange; public Date lastChange;
public String lastChangeAuthor;
public boolean hasCommits; public boolean hasCommits;
public boolean showRemoteBranches; public boolean showRemoteBranches;
public boolean useTickets; public boolean useTickets;

+ 28
- 11
src/main/java/com/gitblit/utils/JGitUtils.java View File

} }
return false; 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 * @param repository
* @return
* @return a LastChange object
*/ */
public static Date getLastChange(Repository repository) {
public static LastChange getLastChange(Repository repository) {
if (!hasCommits(repository)) { if (!hasCommits(repository)) {
// null repository // null repository
if (repository == null) { if (repository == null) {
return new Date(0);
return new LastChange();
} }
// fresh repository // fresh repository
return new Date(repository.getDirectory().lastModified());
return new LastChange(repository.getDirectory().lastModified());
} }
List<RefModel> branchModels = getLocalBranches(repository, true, -1); List<RefModel> branchModels = getLocalBranches(repository, true, -1);
if (branchModels.size() > 0) { if (branchModels.size() > 0) {
// find most recent branch update // find most recent branch update
Date lastChange = new Date(0);
LastChange lastChange = new LastChange();
for (RefModel branchModel : branchModels) { 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; return lastChange;
} }
// default to the repository folder modification date // default to the repository folder modification date
return new Date(repository.getDirectory().lastModified());
return new LastChange(repository.getDirectory().lastModified());
} }
/** /**

+ 1
- 1
src/main/java/com/gitblit/wicket/pages/OverviewPage.java View File

add(ownersView); add(ownersView);
add(WicketUtils.createTimestampLabel("repositoryLastChange", add(WicketUtils.createTimestampLabel("repositoryLastChange",
JGitUtils.getLastChange(r), getTimeZone(), getTimeUtils()));
JGitUtils.getLastChange(r).when, getTimeZone(), getTimeUtils()));
add(new Label("repositorySize", model.size)); add(new Label("repositorySize", model.size));
if (metricsTotal == null) { if (metricsTotal == null) {

+ 1
- 1
src/main/java/com/gitblit/wicket/pages/SummaryPage.java View File

add(ownersView); add(ownersView);
add(WicketUtils.createTimestampLabel("repositoryLastChange", add(WicketUtils.createTimestampLabel("repositoryLastChange",
JGitUtils.getLastChange(r), getTimeZone(), getTimeUtils()));
JGitUtils.getLastChange(r).when, getTimeZone(), getTimeUtils()));
add(new Label("repositorySize", getRepositoryModel().size)); add(new Label("repositorySize", getRepositoryModel().size));
if (metricsTotal == null) { if (metricsTotal == null) {
add(new Label("branchStats", "")); add(new Label("branchStats", ""));

+ 3
- 0
src/main/java/com/gitblit/wicket/panels/RepositoriesPanel.java View File

Label lastChangeLabel = new Label("repositoryLastChange", lastChange); Label lastChangeLabel = new Label("repositoryLastChange", lastChange);
row.add(lastChangeLabel); row.add(lastChangeLabel);
WicketUtils.setCssClass(lastChangeLabel, getTimeUtils().timeAgoCss(entry.lastChange)); 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 showOwner = user != null && entry.isOwner(user.username);
boolean myPersonalRepository = showOwner && entry.isUsersPersonalRepository(user.username); boolean myPersonalRepository = showOwner && entry.isUsersPersonalRepository(user.username);

+ 3
- 3
src/test/java/com/gitblit/tests/JGitUtilsTest.java View File

@Test @Test
public void testLastCommit() throws Exception { public void testLastCommit() throws Exception {
assertEquals(new Date(0), JGitUtils.getLastChange(null));
assertEquals(new Date(0), JGitUtils.getLastChange(null).when);
Repository repository = GitBlitSuite.getHelloworldRepository(); Repository repository = GitBlitSuite.getHelloworldRepository();
assertTrue(JGitUtils.getCommit(repository, null) != null); assertTrue(JGitUtils.getCommit(repository, null) != null);
Date date = JGitUtils.getLastChange(repository);
Date date = JGitUtils.getLastChange(repository).when;
repository.close(); repository.close();
assertNotNull("Could not get last repository change date!", date); assertNotNull("Could not get last repository change date!", date);
} }
assertNull(JGitUtils.getFirstCommit(repository, null)); assertNull(JGitUtils.getFirstCommit(repository, null));
assertEquals(folder.lastModified(), JGitUtils.getFirstChange(repository, null) assertEquals(folder.lastModified(), JGitUtils.getFirstChange(repository, null)
.getTime()); .getTime());
assertEquals(folder.lastModified(), JGitUtils.getLastChange(repository).getTime());
assertEquals(folder.lastModified(), JGitUtils.getLastChange(repository).when.getTime());
assertNull(JGitUtils.getCommit(repository, null)); assertNull(JGitUtils.getCommit(repository, null));
repository.close(); repository.close();
RepositoryCache.close(repository); RepositoryCache.close(repository);

Loading…
Cancel
Save