/**
* This file is licensed under the University of Illinois/NCSA Open Source License. See LICENSE.TXT for details.
*/
package edu.illinois.codingspectator.monitor.core.submission;
import java.io.File;
import org.eclipse.core.runtime.CoreException;
import org.tmatesoft.svn.core.SVNDepth;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNURL;
import org.tmatesoft.svn.core.wc.SVNClientManager;
import org.tmatesoft.svn.core.wc.SVNInfo;
import org.tmatesoft.svn.core.wc.SVNRevision;
import edu.illinois.codingspectator.efs.EFSFile;
/**
* Local Subversion operations
*
* @author Mohsen Vakilian
* @author nchen
*
*/
public class LocalSVNManager extends AbstractSVNManager {
protected final SVNClientManager cm;
public LocalSVNManager(String svnWorkingCopyDirectory) {
super(svnWorkingCopyDirectory);
cm= SVNClientManager.newInstance(null, null, null);
}
public boolean isWorkingDirectoryValid() {
try {
cm.getWCClient().doInfo(svnWorkingCopyDirectory, SVNRevision.WORKING);
} catch (SVNException e) {
return false;
}
return true;
}
public SVNInfo doInfo() throws SVNException {
return cm.getWCClient().doInfo(svnWorkingCopyDirectory, SVNRevision.WORKING);
}
public long getRevisionNumber() throws SVNException {
return doInfo().getRevision().getNumber();
}
public String getSVNWorkingCopyUsername() {
try {
SVNInfo info= doInfo();
return info.getAuthor();
} catch (SVNException e) {
// Do not log. This is a harmless operation. If nothing is available, we just default to ""
return "";
}
}
private static String extractUUIDFromFullPath(SVNURL fullPath) {
String path= fullPath.getPath();
int lastIndexOf= path.lastIndexOf('/');
return path.substring(lastIndexOf + 1);
}
public String getSVNWorkingCopyRepositoryUUID() {
try {
SVNInfo info= doInfo();
SVNURL fullPath= info.getURL();
return extractUUIDFromFullPath(fullPath);
} catch (SVNException e) {
// Do not log. This is a harmless operation. If nothing is available, we just default to ""
return "";
}
}
public void doCleanup() throws SVNException {
cm.getWCClient().doCleanup(svnWorkingCopyDirectory);
}
public void doAdd() throws SVNException {
cm.getWCClient().doAdd(svnWorkingCopyDirectory, true, false, false, SVNDepth.INFINITY, false, false);
}
private void removeSVNMetaData(File path) throws CoreException {
for (File child : path.listFiles()) {
if (child.isDirectory()) {
if (".svn".equals(child.getName())) {
new EFSFile(child.getAbsolutePath()).delete();
} else {
removeSVNMetaData(child);
}
}
}
}
public void removeSVNMetaData() throws CoreException {
removeSVNMetaData(svnWorkingCopyDirectory);
}
}