@ -43,6 +43,8 @@
package org.eclipse.jgit.api ;
package org.eclipse.jgit.api ;
import java.io.IOException ;
import java.io.IOException ;
import java.util.LinkedList ;
import java.util.List ;
import org.eclipse.jgit.api.errors.GitAPIException ;
import org.eclipse.jgit.api.errors.GitAPIException ;
import org.eclipse.jgit.api.errors.JGitInternalException ;
import org.eclipse.jgit.api.errors.JGitInternalException ;
@ -52,6 +54,7 @@ import org.eclipse.jgit.lib.IndexDiff;
import org.eclipse.jgit.lib.Repository ;
import org.eclipse.jgit.lib.Repository ;
import org.eclipse.jgit.treewalk.FileTreeIterator ;
import org.eclipse.jgit.treewalk.FileTreeIterator ;
import org.eclipse.jgit.treewalk.WorkingTreeIterator ;
import org.eclipse.jgit.treewalk.WorkingTreeIterator ;
import org.eclipse.jgit.treewalk.filter.PathFilterGroup ;
/ * *
/ * *
* A class used to execute a { @code Status } command . It has setters for all
* A class used to execute a { @code Status } command . It has setters for all
@ -65,6 +68,7 @@ import org.eclipse.jgit.treewalk.WorkingTreeIterator;
* /
* /
public class StatusCommand extends GitCommand < Status > {
public class StatusCommand extends GitCommand < Status > {
private WorkingTreeIterator workingTreeIt ;
private WorkingTreeIterator workingTreeIt ;
private List < String > paths = null ;
/ * *
/ * *
* @param repo
* @param repo
@ -73,6 +77,36 @@ public class StatusCommand extends GitCommand<Status> {
super ( repo ) ;
super ( repo ) ;
}
}
/ * *
* Show only the status of files which match the given paths . The path must
* either name a file or a directory exactly . All paths are always relative
* to the repository root . If a directory is specified all files recursively
* underneath that directory are matched . If this method is called multiple
* times then the status of those files is reported which match at least one
* of the given paths . Note that regex expressions or wildcards are not
* supported .
*
* @param path
* a path is relative to the top level of the repository
* @return { @code this }
* /
public StatusCommand addPath ( String path ) {
if ( paths = = null )
paths = new LinkedList < String > ( ) ;
paths . add ( path ) ;
return this ;
}
/ * *
* Returns the paths filtering this status .
*
* @return the paths for which the status is shown or < code > null < / code > if
* the complete status for the whole repo is shown .
* /
public List < String > getPaths ( ) {
return paths ;
}
/ * *
/ * *
* Executes the { @code Status } command with all the options and parameters
* Executes the { @code Status } command with all the options and parameters
* collected by the setter methods of this class . Each instance of this
* collected by the setter methods of this class . Each instance of this
@ -88,6 +122,8 @@ public class StatusCommand extends GitCommand<Status> {
try {
try {
IndexDiff diff = new IndexDiff ( repo , Constants . HEAD , workingTreeIt ) ;
IndexDiff diff = new IndexDiff ( repo , Constants . HEAD , workingTreeIt ) ;
if ( paths ! = null )
diff . setFilter ( PathFilterGroup . createFromStrings ( paths ) ) ;
diff . diff ( ) ;
diff . diff ( ) ;
return new Status ( diff ) ;
return new Status ( diff ) ;
} catch ( IOException e ) {
} catch ( IOException e ) {