br.com.jarch.svn.CommitSvn Maven / Gradle / Ivy
The newest version!
package br.com.jarch.svn;
import org.tmatesoft.svn.core.SVNCommitInfo;
import org.tmatesoft.svn.core.SVNDepth;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.wc.*;
import java.io.File;
import java.net.URL;
import java.util.*;
class CommitSvn extends BaseSvn {
private final List listaFileConflit = new ArrayList<>();
private final Set listFileIgnoreUser = new HashSet<>();
private final List listFile = new ArrayList<>();
private final List listRevision = new ArrayList<>();
private final transient ISVNStatusHandler isvnStatusHandler = status -> {
String mensagem = status.getNodeStatus().toString().toUpperCase() + ": " + status.getFile().getAbsolutePath();
System.out.println(mensagem);
boolean commitArquivo = true;
if (listFileIgnoreUser.contains(status.getFile().getName())) {
commitArquivo = false;
mensagem = "IGNORADO: " + status.getFile();
} else if (status.getNodeStatus().equals(SVNStatusType.STATUS_NORMAL) || status.getNodeStatus().equals(SVNStatusType.STATUS_INCOMPLETE)) {
commitArquivo = false;
} else if (status.isConflicted()) {
listaFileConflit.add(status.getFile().getPath() + "\n");
mensagem = "CONFLITO: " + status.getFile();
} else if (SvnUtil.ignoraCommitArquivoOuPasta(status.getFile())) {
mensagem = "IGNORADO: " + status.getFile();
commitArquivo = false;
} else if (SVNStatusType.STATUS_UNVERSIONED.equals(status.getNodeStatus())) {
getWCClient().doAdd(status.getFile(), true, false, false, SVNDepth.EMPTY, false, false);
mensagem = "ADD: " + status.getFile();
} else if (SVNStatusType.MISSING.equals(status.getNodeStatus()) || SVNStatusType.STATUS_MISSING.equals(status.getNodeStatus())) {
getWCClient().doDelete(status.getFile(), true, false, false);
mensagem = "DELETE_PHISICAL: " + status.getFile();
}
logUtil.formatMiddle(log, mensagem);
if (commitArquivo)
listFile.add(status.getFile());
};
private final transient ISVNEventHandler eventHandlerCommit = new ISVNEventHandler() {
@Override
public void checkCancelled() {
// Não utilizado
}
@Override
public void handleEvent(SVNEvent svnEvent, double arg1) {
if (svnEvent.getFile() != null) {
String mensagem = "COMMIT: " + svnEvent.getFile();
logUtil.formatMiddle(log, mensagem);
}
}
};
public CommitSvn(List log, String login, String senha) {
super(log, login, senha);
}
public void commit(URL urlRepositorio, File pastaTrabalho, Collection listaArquivoIgnora,
String comentario) throws Exception {
if (!existeRepositorio(urlRepositorio))
throw new Exception("Repositório " + urlRepositorio + " NÃO Localizado ");
if (!pastaTrabalho.exists())
throw new Exception("Pasta trabalho " + pastaTrabalho.getAbsolutePath() + " NÃO Localizado ");
if (listaArquivoIgnora != null)
listFileIgnoreUser.addAll(listaArquivoIgnora);
URL urlWorkingCopy = getRepositorio(pastaTrabalho);
if (!urlWorkingCopy.toURI().equals(urlRepositorio.toURI())) {
throw new Exception(String.format("Working Copy %s não está apontando para URL %s", pastaTrabalho,
urlRepositorio));
}
logUtil.formatBegin(log, "COMMIT");
logUtil.formatMiddle(log, "FOLDER: " + pastaTrabalho.getAbsolutePath() + " URL: " + urlWorkingCopy);
do {
listFile.clear();
verificaConflito(pastaTrabalho);
File[] arrayFile;
if (listFile.isEmpty()) {
arrayFile = new File[]{pastaTrabalho};
} else {
arrayFile = new File[listFile.size()];
int i = 0;
for (File file : listFile)
arrayFile[i++] = file;
}
try {
SVNCommitClient svnCommitClient = getCommitClient();
svnCommitClient.setEventHandler(eventHandlerCommit);
SVNCommitInfo svnCommitInfo = svnCommitClient.doCommit(arrayFile, false, comentario, null, null, false,
true, SVNDepth.INFINITY);
if (svnCommitInfo.getNewRevision() > -1)
listRevision.add(svnCommitInfo.getNewRevision());
} catch (SVNException svnException) {
if (svnException.getMessage().contains("is out of date")) {
UpdateSvn updateSvn = new UpdateSvn(log, login, senha);
updateSvn.update(urlRepositorio, pastaTrabalho);
continue;
}
throw new Exception(svnException.getMessage());
}
} while (!listFile.isEmpty());
logUtil.formatMiddle(log, "REVISÃO(ÕES): " + listRevision);
logUtil.formatEnd(log, "COMMIT");
}
public void verificaConflito(File pastaTrabalho) throws Exception {
if (!pastaTrabalho.exists()) {
throw new Exception("Pasta trabalho " + pastaTrabalho.getAbsolutePath() + " NÃO Localizado ");
}
listaFileConflit.clear();
getStatusClient().doStatus(pastaTrabalho, SVNRevision.HEAD, SVNDepth.INFINITY, false, false, false, false,
isvnStatusHandler, listaFileConflit);
if (!listaFileConflit.isEmpty())
throw new Exception("Existe(m) arquivo(s) em conflito em " + listaFileConflit);
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy