if (!dstEntry.isScheduledForReplacement()) {
dstEntry.setRevision(0);
}
}
SVNLog log = dstParentArea.getLog();
dstParentArea.saveEntries(false);
dstParentArea.saveVersionedProperties(log, true);
log.save();
dstParentArea.runLogs();
} else if (srcEntry.isDirectory()) {
SVNAdminArea srcArea = wcAccess.open(src, false, 0);
srcEntry = srcArea.getEntry(srcArea.getThisDirName(), false);
if (dstEntry == null) {
dstEntry = dstParentArea.addEntry(dst.getName());
}
SVNAdminArea dstArea = wcAccess.open(dst, true, SVNWCAccess.INFINITE_DEPTH);
SVNVersionedProperties srcProps = srcArea.getProperties(srcArea.getThisDirName());
SVNVersionedProperties dstProps = dstArea.getProperties(dstArea.getThisDirName());
SVNEntry dstParentEntry = dstParentArea.getEntry(dstParentArea.getThisDirName(), false);
String srcURL = srcEntry.getURL();
String srcCFURL = srcEntry.getCopyFromURL();
String dstURL = dstParentEntry.getURL();
String repositoryRootURL = dstParentEntry.getRepositoryRoot();
long srcRevision = srcEntry.getRevision();
long srcCFRevision = srcEntry.getCopyFromRevision();
dstURL = SVNPathUtil.append(dstURL, SVNEncodingUtil.uriEncode(dst.getName()));
if (srcEntry.isScheduledForAddition() && srcEntry.isCopied()) {
srcProps.copyTo(dstProps);
dstEntry.scheduleForAddition();
dstEntry.setKind(SVNNodeKind.DIR);
dstEntry.setCopied(true);
dstEntry.setCopyFromRevision(srcCFRevision);
dstEntry.setCopyFromURL(srcCFURL);
SVNEntry dstThisEntry = dstArea.getEntry(dstArea.getThisDirName(), false);
dstThisEntry.scheduleForAddition();
dstThisEntry.setKind(SVNNodeKind.DIR);
dstThisEntry.setCopyFromRevision(srcCFRevision);
dstThisEntry.setCopyFromURL(srcCFURL);
dstThisEntry.setRevision(srcRevision);
dstThisEntry.setCopied(true);
SVNLog log = dstArea.getLog();
dstArea.saveVersionedProperties(log, true);
dstParentArea.saveEntries(false);
log.save();
dstArea.runLogs();
// update URL in children.
dstArea.updateURL(dstURL, true);
dstParentArea.saveEntries(true);
} else if (!srcEntry.isCopied() && !srcEntry.isScheduledForAddition()) {
// versioned (deleted, replaced, or normal).
srcProps.copyTo(dstProps);
dstEntry.scheduleForAddition();
dstEntry.setKind(SVNNodeKind.DIR);
dstEntry.setCopied(true);
dstEntry.setCopyFromRevision(srcRevision);
dstEntry.setCopyFromURL(srcURL);
// update URL, CF-URL and CF-REV in children.
SVNEntry dstThisEntry = dstArea.getEntry(dstArea.getThisDirName(), false);
dstThisEntry.scheduleForAddition();
dstThisEntry.setKind(SVNNodeKind.DIR);
dstThisEntry.setCopied(true);
dstThisEntry.scheduleForAddition();
dstThisEntry.setKind(SVNNodeKind.DIR);
dstThisEntry.setCopyFromRevision(srcRevision);
dstThisEntry.setCopyFromURL(srcURL);
dstThisEntry.setURL(dstURL);
dstThisEntry.setRepositoryRoot(repositoryRootURL);
SVNLog log = dstArea.getLog();
dstArea.saveVersionedProperties(log, true);
dstArea.saveEntries(false);
log.save();
dstArea.runLogs();
updateCopiedDirectory(dstArea, dstArea.getThisDirName(), dstURL, repositoryRootURL, null, -1);
dstArea.saveEntries(true);
dstParentArea.saveEntries(true);