Skip to content
This repository has been archived by the owner on Sep 20, 2020. It is now read-only.

Commit

Permalink
Browser: Add support for path limiting based on selected files
Browse files Browse the repository at this point in the history
Signed-off-by: Jonas Fonseca <fonseca@diku.dk>
  • Loading branch information
jonas committed Aug 27, 2009
1 parent abe4bce commit f378327
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 7 deletions.
5 changes: 2 additions & 3 deletions src/org/nbgit/ui/browser/BrowserAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,14 @@ public void run() {
return;
}

File[] roots = context.getRootFiles().toArray(new File[0]);
BrowserModel model = new BrowserModel();
BrowserModel model = new BrowserModel(context.getRootFiles());
BrowserTopComponent view = new BrowserTopComponent(model);
view.setDisplayName(title);
view.open();
view.requestActive();

BrowserController controller = new BrowserController(view, model);
controller.show(Git.getInstance().getRepository(roots[0]), "HEAD");
controller.show("HEAD");
}
});
}
Expand Down
10 changes: 6 additions & 4 deletions src/org/nbgit/ui/browser/BrowserController.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@
import org.openide.util.NbBundle;
import org.spearce.jgit.lib.ObjectId;
import org.spearce.jgit.lib.PersonIdent;
import org.spearce.jgit.lib.Repository;
import org.spearce.jgit.revplot.PlotWalk;
import org.spearce.jgit.revwalk.RevCommit;
import org.spearce.jgit.revwalk.RevObject;
Expand All @@ -62,16 +61,19 @@ public BrowserController(BrowserTopComponent browser, BrowserModel model) {
browser.addPropertyChangeListener(this);
}

public void show(final Repository repo, final String revision) {
public void show(final String revision) {
SwingUtilities.invokeLater(new Runnable() {

public void run() {
model.getCommitList().clear();
PlotWalk walk = null;
try {
ObjectId start = repo.resolve(revision);
walk = new PlotWalk(repo);
ObjectId start = model.getRepository().resolve(revision);
walk = new PlotWalk(model.getRepository());
walk.sort(RevSort.BOUNDARY, true);
if (model.hasPaths()) {
walk.setTreeFilter(model.createPathFilter());
}
walk.markStart(walk.parseCommit(start));
model.getCommitList().source(walk);
model.getCommitList().fillTo(Integer.MAX_VALUE);
Expand Down
37 changes: 37 additions & 0 deletions src/org/nbgit/ui/browser/BrowserModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,18 +35,55 @@
*/
package org.nbgit.ui.browser;

import java.io.File;
import java.util.HashSet;
import java.util.Set;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;
import javax.swing.text.SimpleAttributeSet;
import org.nbgit.Git;
import org.spearce.jgit.lib.Repository;
import org.spearce.jgit.revwalk.RevCommitList;
import org.spearce.jgit.treewalk.filter.PathFilterGroup;
import org.spearce.jgit.treewalk.filter.TreeFilter;

public class BrowserModel {

public static final String CONTENT_ID = "ID";
private final Document document = new PlainDocument();
private final Repository repository;
private final Set<String> paths = new HashSet<String>();

private RevCommitList commitList;

public BrowserModel(Set<File> fileSet) {
File[] files = fileSet.toArray(new File[fileSet.size()]);
File root = Git.getInstance().getTopmostManagedParent(files[0]);
repository = Git.getInstance().getRepository(root);
for (File file : files) {
file = file.getAbsoluteFile();
// If the work directory root is included disable path limiting.
if (file.getPath().length() == root.getPath().length()) {
paths.clear();
break;
}
paths.add(Repository.stripWorkDir(root, file));
}
}

public Repository getRepository() {
return repository;
}

public boolean hasPaths() {
return !paths.isEmpty();
}

public TreeFilter createPathFilter() {
return PathFilterGroup.createFromStrings(paths);
}

public Document getDocument() {
return document;
}
Expand Down

0 comments on commit f378327

Please sign in to comment.