package bluej.groupwork.svn;
import java.io.File;
import java.util.Collections;
import java.util.Iterator;
import java.util.Set;
import org.tigris.subversion.javahl.ClientException;
import org.tigris.subversion.javahl.Depth;
import org.tigris.subversion.javahl.PropertyData;
import org.tigris.subversion.javahl.SVNClientInterface;
import org.tigris.subversion.javahl.Status;
import org.tigris.subversion.javahl.StatusCallback;
import bluej.groupwork.TeamworkCommandAborted;
import bluej.groupwork.TeamworkCommandError;
import bluej.groupwork.TeamworkCommandResult;
import bluej.utility.Debug;
| A subversion command to commit files.
|
| @author Davin McCall
|
public class SvnCommitAllCommand
extends SvnCommand{
protected Set<File> newFiles;
protected Set<File> binaryNewFiles;
protected Set<File> deletedFiles;
protected Set<File> files;
protected String commitComment;
public SvnCommitAllCommand(SvnRepository repository, Set<File> newFiles, Set<File> binaryNewFiles,
Set<File> deletedFiles, Set<File> files, String commitComment)
{
super(repository);
this.newFiles = newFiles;
this.binaryNewFiles = binaryNewFiles;
this.deletedFiles = deletedFiles;
this.files = files;
this.commitComment = commitComment;
}
protected TeamworkCommandResult doCommand()
{
SVNClientInterface client = getClient();
class StatusRef
{
Status status;
};
try {
Iterator<File> i = newFiles.iterator();
while (i.hasNext()){
File newFile = (File) i.next();
final StatusRef statusRef = new StatusRef();
client.status(newFile.getAbsolutePath(), Depth.empty, false, true, true, false, null,
new StatusCallback() {
@Override
public void doStatus(Status status)
{
statusRef.status = status;
}
});
Status status = statusRef.status;
if (! status.isManaged()) {
client.add(newFile.getAbsolutePath(), Depth.empty, false, false, true);
if (! newFile.isDirectory()) {
client.propertySet(newFile.getAbsolutePath(), PropertyData.EOL_STYLE,
"native", Depth.empty, null, false, null);
}
}
}
i = binaryNewFiles.iterator();
while (i.hasNext()){
File newFile = (File) i.next();
final StatusRef statusRef = new StatusRef();
client.status(newFile.getAbsolutePath(), Depth.empty, false, true, true, false, null,
new StatusCallback() {
@Override
public void doStatus(Status status)
{
statusRef.status = status;
}
});
Status status = statusRef.status;
if (! status.isManaged()) {
client.add(newFile.getAbsolutePath(), Depth.empty, false, false, true);
if (! newFile.isDirectory()) {
client.propertySet(newFile.getAbsolutePath(), PropertyData.MIME_TYPE,
"application/octet-stream", Depth.empty, null, false, null);
}
}
}
i = deletedFiles.iterator();
while (i.hasNext()){
File newFile = (File) i.next();
client.remove(new String[] {newFile.getAbsolutePath()
}, "", true, false, Collections.emptyMap());
}
String [] commitFiles = new String[files.size()];
i = files.iterator();
for (int j = 0; j < commitFiles.length; j++) {
File file = (File) i.next();
commitFiles[j] = file.getAbsolutePath();
}
client.commit(commitFiles, commitComment, Depth.empty, false, false, null, Collections.emptyMap());
deleteFilesLocally(deletedFiles);
if (! isCancelled()) {
return new TeamworkCommandResult();
}
}
catch (ClientException ce) {
if (! isCancelled()) {
Debug.reportError("Subversion commit all exception", ce);
return new TeamworkCommandError(ce.getMessage(), ce.getLocalizedMessage());
}
}
return new TeamworkCommandAborted();
}
| Remove files and directories in a file set.
| @param filesSet set with the files to be removed.
|
private void deleteFilesLocally(Set<File> filesSet)
{
Iterator<File> i = filesSet.iterator();
while (i.hasNext()){
File file = i.next();
if (file.exists()) {
if (file.isDirectory()) {
for (File c : file.listFiles()) {
deleteDirectory(c);
}
}
file.delete();
}
}
}
| Method to remove files and directories recursively.
| @param f file to be deleted.
|
private void deleteDirectory(File f)
{
if (f.exists() && f.isDirectory()) {
for (File c : f.listFiles()) {
deleteDirectory(c);
}
f.delete();
}
else if (f.exists() && f.isFile()){
f.delete();
}
}
}
top,
use,
map,
class SvnCommitAllCommand
. SvnCommitAllCommand
. doCommand
top,
use,
map,
class SvnCommitAllCommand . StatusRef
. doStatus
. doStatus
. deleteFilesLocally
. deleteDirectory
220 neLoCode
+ 6 LoComm