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