package org.tmatesoft.svn.core.internal.wc2.ng;
import java.io.File;
import java.util.Arrays;
import org.tmatesoft.svn.core.SVNErrorCode;
import org.tmatesoft.svn.core.SVNErrorMessage;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNNodeKind;
import org.tmatesoft.svn.core.internal.wc.SVNErrorManager;
import org.tmatesoft.svn.core.internal.wc.SVNEventFactory;
import org.tmatesoft.svn.core.internal.wc17.SVNWCContext;
import org.tmatesoft.svn.core.wc.SVNEventAction;
import org.tmatesoft.svn.core.wc2.SvnTarget;
import org.tmatesoft.svn.core.wc2.SvnUpdate;
import org.tmatesoft.svn.util.SVNLogType;
public class SvnNgUpdate extends SvnNgAbstractUpdate<long[], SvnUpdate> {
@Override
protected long[] run(SVNWCContext context) throws SVNException {
long[] result = new long[getOperation().getTargets().size()];
File[] targets = new File[getOperation().getTargets().size()];
Arrays.fill(result, SVNWCContext.INVALID_REVNUM);
int j = 0;
for (SvnTarget target : getOperation().getTargets()) {
if (target.isURL()) {
SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.ILLEGAL_TARGET, "''{0}'' is not a local path");
SVNErrorManager.error(err, SVNLogType.WC);
}
targets[j++] = target.getFile();
}
for (int i = 0; i < targets.length; i++) {
checkCancelled();
try {
result[i] = update(getWcContext(), targets[i], getOperation().getRevision(), getOperation().getDepth(), getOperation().isDepthIsSticky(),
getOperation().isIgnoreExternals(), getOperation().isAllowUnversionedObstructions(),
getOperation().isTreatAddsAsModifications(), getOperation().isMakeParents(), false, false);
} catch (SVNException e) {
if (e.getErrorMessage().getErrorCode() != SVNErrorCode.WC_NOT_WORKING_COPY) {
throw e;
}
handleEvent(SVNEventFactory.createSVNEvent(targets[i], SVNNodeKind.NONE, null, -1, SVNEventAction.SKIP, null, null, null));
handleEvent(SVNEventFactory.createSVNEvent(targets[i], SVNNodeKind.NONE, null, -1, SVNEventAction.UPDATE_COMPLETED, null, null, null));
}
}
sleepForTimestamp();
return result;
}
}