This is for history where we specify two revs to diff, not just a commit against its parent.tags/v0.5.0
} | } | ||||
public static String getCommitDiff(Repository r, RevCommit commit, boolean outputHtml) { | public static String getCommitDiff(Repository r, RevCommit commit, boolean outputHtml) { | ||||
return getCommitDiff(r, commit, null, outputHtml); | |||||
return getCommitDiff(r, null, commit, null, outputHtml); | |||||
} | } | ||||
public static String getCommitDiff(Repository r, RevCommit commit, String path, boolean outputHtml) { | public static String getCommitDiff(Repository r, RevCommit commit, String path, boolean outputHtml) { | ||||
return getCommitDiff(r, null, commit, path, outputHtml); | |||||
} | |||||
public static String getCommitDiff(Repository r, RevCommit baseCommit, RevCommit commit, boolean outputHtml) { | |||||
return getCommitDiff(r, baseCommit, commit, null, outputHtml); | |||||
} | |||||
public static String getCommitDiff(Repository r, RevCommit baseCommit, RevCommit commit, String path, boolean outputHtml) { | |||||
try { | try { | ||||
final RevWalk rw = new RevWalk(r); | |||||
RevCommit parent = rw.parseCommit(commit.getParent(0).getId()); | |||||
RevTree parentTree = parent.getTree(); | |||||
RevTree baseTree; | |||||
if (baseCommit == null) { | |||||
final RevWalk rw = new RevWalk(r); | |||||
RevCommit parent = rw.parseCommit(commit.getParent(0).getId()); | |||||
rw.dispose(); | |||||
baseTree = parent.getTree(); | |||||
} else { | |||||
baseTree = baseCommit.getTree(); | |||||
} | |||||
RevTree commitTree = commit.getTree(); | RevTree commitTree = commit.getTree(); | ||||
final TreeWalk walk = new TreeWalk(r); | final TreeWalk walk = new TreeWalk(r); | ||||
walk.reset(); | walk.reset(); | ||||
walk.setRecursive(true); | walk.setRecursive(true); | ||||
walk.addTree(parentTree); | |||||
walk.addTree(baseTree); | |||||
walk.addTree(commitTree); | walk.addTree(commitTree); | ||||
walk.setFilter(TreeFilter.ANY_DIFF); | walk.setFilter(TreeFilter.ANY_DIFF); | ||||
df.setRepository(r); | df.setRepository(r); | ||||
df.setDiffComparator(cmp); | df.setDiffComparator(cmp); | ||||
df.setDetectRenames(true); | df.setDetectRenames(true); | ||||
List<DiffEntry> diffs = df.scan(parentTree, commitTree); | |||||
List<DiffEntry> diffs = df.scan(baseTree, commitTree); | |||||
if (path != null && path.length() > 0) { | if (path != null && path.length() > 0) { | ||||
for (DiffEntry diff : diffs) { | for (DiffEntry diff : diffs) { | ||||
if (diff.getNewPath().equalsIgnoreCase(path)) { | if (diff.getNewPath().equalsIgnoreCase(path)) { |
import com.gitblit.GitBlit; | import com.gitblit.GitBlit; | ||||
import com.gitblit.Keys; | import com.gitblit.Keys; | ||||
import com.gitblit.utils.StringUtils; | |||||
import com.gitblit.utils.TimeUtils; | import com.gitblit.utils.TimeUtils; | ||||
public class WicketUtils { | public class WicketUtils { | ||||
} | } | ||||
public static PageParameters newObjectParameter(String repositoryName, String objectId) { | public static PageParameters newObjectParameter(String repositoryName, String objectId) { | ||||
if (objectId == null || objectId.trim().length() == 0) { | |||||
if (StringUtils.isEmpty(objectId)) { | |||||
return newRepositoryParameter(repositoryName); | return newRepositoryParameter(repositoryName); | ||||
} | } | ||||
return new PageParameters("r=" + repositoryName + ",h=" + objectId); | return new PageParameters("r=" + repositoryName + ",h=" + objectId); | ||||
} | } | ||||
public static PageParameters newPathParameter(String repositoryName, String objectId, String path) { | public static PageParameters newPathParameter(String repositoryName, String objectId, String path) { | ||||
if (path == null || path.trim().length() == 0) { | |||||
if (StringUtils.isEmpty(path)) { | |||||
return newObjectParameter(repositoryName, objectId); | return newObjectParameter(repositoryName, objectId); | ||||
} | } | ||||
return new PageParameters("r=" + repositoryName + ",h=" + objectId + ",f=" + path); | return new PageParameters("r=" + repositoryName + ",h=" + objectId + ",f=" + path); | ||||
return new PageParameters("r=" + repositoryName + ",h=" + objectId + ",f=" + path + ",page=" + pageNumber); | return new PageParameters("r=" + repositoryName + ",h=" + objectId + ",f=" + path + ",page=" + pageNumber); | ||||
} | } | ||||
public static PageParameters newBlobDiffParameter(String repositoryName, String baseCommitId, String commitId, String path) { | |||||
return new PageParameters("r=" + repositoryName + ",h=" + commitId + ",f=" + path + ",hb=" + baseCommitId); | |||||
} | |||||
public static String getRepositoryName(PageParameters params) { | public static String getRepositoryName(PageParameters params) { | ||||
return params.getString("r", ""); | return params.getString("r", ""); | ||||
} | } | ||||
public static String getPath(PageParameters params) { | public static String getPath(PageParameters params) { | ||||
return params.getString("f", null); | return params.getString("f", null); | ||||
} | } | ||||
public static String getBaseObjectId(PageParameters params) { | |||||
return params.getString("hb", null); | |||||
} | |||||
public static int getPage(PageParameters params) { | public static int getPage(PageParameters params) { | ||||
return params.getInt("page", 1); // index from 1 | return params.getInt("page", 1); // index from 1 |
import org.eclipse.jgit.revwalk.RevCommit; | import org.eclipse.jgit.revwalk.RevCommit; | ||||
import com.gitblit.utils.JGitUtils; | import com.gitblit.utils.JGitUtils; | ||||
import com.gitblit.utils.StringUtils; | |||||
import com.gitblit.wicket.LinkPanel; | import com.gitblit.wicket.LinkPanel; | ||||
import com.gitblit.wicket.RepositoryPage; | import com.gitblit.wicket.RepositoryPage; | ||||
import com.gitblit.wicket.WicketUtils; | import com.gitblit.wicket.WicketUtils; | ||||
super(params); | super(params); | ||||
final String blobPath = WicketUtils.getPath(params); | final String blobPath = WicketUtils.getPath(params); | ||||
final String baseObjectId = WicketUtils.getBaseObjectId(params); | |||||
Repository r = getRepository(); | Repository r = getRepository(); | ||||
RevCommit commit = JGitUtils.getCommit(r, objectId); | RevCommit commit = JGitUtils.getCommit(r, objectId); | ||||
String diff = JGitUtils.getCommitDiff(r, commit, blobPath, true); | |||||
String diff; | |||||
if (StringUtils.isEmpty(baseObjectId)) { | |||||
// use first parent | |||||
diff = JGitUtils.getCommitDiff(r, commit, blobPath, true); | |||||
} else { | |||||
// base commit specified | |||||
RevCommit baseCommit = JGitUtils.getCommit(r, baseObjectId); | |||||
diff = JGitUtils.getCommitDiff(r, baseCommit, commit, blobPath, true); | |||||
} | |||||
add(new BookmarkablePageLink<Void>("patchLink", PatchPage.class, WicketUtils.newPathParameter(repositoryName, objectId, blobPath))); | add(new BookmarkablePageLink<Void>("patchLink", PatchPage.class, WicketUtils.newPathParameter(repositoryName, objectId, blobPath))); | ||||
add(new BookmarkablePageLink<Void>("commitLink", CommitPage.class, WicketUtils.newObjectParameter(repositoryName, objectId))); | add(new BookmarkablePageLink<Void>("commitLink", CommitPage.class, WicketUtils.newObjectParameter(repositoryName, objectId))); | ||||
add(new BookmarkablePageLink<Void>("commitDiffLink", CommitDiffPage.class, WicketUtils.newObjectParameter(repositoryName, objectId))); | add(new BookmarkablePageLink<Void>("commitDiffLink", CommitDiffPage.class, WicketUtils.newObjectParameter(repositoryName, objectId))); |
private boolean hasMore = false; | private boolean hasMore = false; | ||||
public HistoryPanel(String wicketId, final String repositoryName, String objectId, final String path, Repository r, int limit, int pageOffset) { | |||||
public HistoryPanel(String wicketId, final String repositoryName, final String objectId, final String path, Repository r, int limit, int pageOffset) { | |||||
super(wicketId); | super(wicketId); | ||||
boolean pageResults = limit <= 0; | boolean pageResults = limit <= 0; | ||||
int itemsPerPage = GitBlit.self().settings().getInteger(Keys.web.logPageCommitCount, 50); | int itemsPerPage = GitBlit.self().settings().getInteger(Keys.web.logPageCommitCount, 50); | ||||
// TODO links for folder | // TODO links for folder | ||||
item.add(new BookmarkablePageLink<Void>("view", CommitPage.class, WicketUtils.newObjectParameter(repositoryName, entry.getName()))); | item.add(new BookmarkablePageLink<Void>("view", CommitPage.class, WicketUtils.newObjectParameter(repositoryName, entry.getName()))); | ||||
item.add(new BookmarkablePageLink<Void>("commitdiff", CommitDiffPage.class, WicketUtils.newObjectParameter(repositoryName, entry.getName()))); | item.add(new BookmarkablePageLink<Void>("commitdiff", CommitDiffPage.class, WicketUtils.newObjectParameter(repositoryName, entry.getName()))); | ||||
item.add(new BookmarkablePageLink<Void>("difftocurrent", BlobDiffPage.class, WicketUtils.newPathParameter(repositoryName, entry.getName(), path)).setEnabled(counter > 0)); | |||||
item.add(new BookmarkablePageLink<Void>("difftocurrent", BlobDiffPage.class, WicketUtils.newBlobDiffParameter(repositoryName, entry.getName(), objectId, path)).setEnabled(counter > 0)); | |||||
WicketUtils.setAlternatingBackground(item, counter); | WicketUtils.setAlternatingBackground(item, counter); | ||||
counter++; | counter++; |