private void includeExternalsChanges(SVNRepository repos, SvnCommitPacket packet, Map<File, String> externalsStorage, SvnCopyPair svnCopyPair) throws SVNException { for (File externalHolder : externalsStorage.keySet()) { String externalsPropString = (String) externalsStorage.get(externalHolder); SVNExternal[] externals = SVNExternal.parseExternals(externalHolder.getAbsolutePath(), externalsPropString); boolean introduceVirtualExternalChange = false; List<String> newExternals = new ArrayList<String>(); File externalWC = new File(externalHolder, externals[k].getPath()); SVNRevision externalsWCRevision = SVNRevision.UNDEFINED; SVNURL resolvedURL = externals[k].resolveURL(repos.getRepositoryRoot(true), ownerURL); String unresolvedURL = externals[k].getUnresolvedUrl(); if (unresolvedURL != null && !SVNPathUtil.isURL(unresolvedURL) && unresolvedURL.startsWith("../")) { unresolvedURL = SVNURLUtil.getRelativeURL(repos.getRepositoryRoot(true), resolvedURL, true); externalWC, resolvedURL, externals[k].getRevision(), externals[k].getPegRevision(), externals[k].getRawValue(), externalsWCRevision); if (revs != null && revs.length == 2 && !revs[0].equals(externals[k].getRevision())) { SVNExternal newExternal = new SVNExternal(externals[k].getPath(), unresolvedURL, revs[1], revs[0], true, externals[k].isPegRevisionExplicit(), externals[k].isNewFormat());
/** * @param modulePath The root of the current module that svn was checking out when it hits 'ext'. * Since we call svnkit multiple times in general case to check out from multiple locations, * we use this to make the path relative to the entire workspace, not just the particular module. */ public External(String modulePath, SVNExternal ext) { this.path = modulePath + '/' + ext.getPath(); this.url = ext.getResolvedURL().toDecodedString(); this.revision = ext.getRevision().getNumber(); }
public String getPegRevisionString() { return isPegRevisionExplicit() ? formatRevisionString("@", getPegRevision()) : null; }
public String getRevisionString() { return isRevisionExplicit() ? formatRevisionString("-r", getRevision()) : null; }
SVNExternal[] previous = oldValue != null ? SVNExternal.parseExternals(diffPath, oldValue) : null; SVNExternal[] current = newValue != null ? SVNExternal.parseExternals(diffPath, newValue) : null; Map oldParsedExternals = new LinkedHashMap(); Map newParsedExternals = new LinkedHashMap(); for (int i = 0; current != null && i < current.length; i++) { newParsedExternals.put(current[i].getPath(), current[i]); oldParsedExternals.put(previous[i].getPath(), previous[i]); externalDiff.ownerURL = fromURL.appendPath(diffPath, false); handleExternalItemChange(wcAccess, externalDiff.oldExternal.getPath(), externalDiff); externalDiff.ownerURL = fromURL.appendPath(diffPath, false); handleExternalItemChange(wcAccess, externalDiff.newExternal.getPath(), externalDiff);
String externalValue = externals.get(relativePath); SVNExternal[] exts = SVNExternal.parseExternals(dirPath, externalValue); SVNURL directoryUrl = fromUrl.appendPath(relativePath, false); for (int i = 0; i < exts.length; i++) { File externalDirectory = new File(dirPath, exts[i].getPath()); File parentDirectory = SVNFileUtil.getParentFile(externalDirectory); if (parentDirectory != null) { SVNFileUtil.ensureDirectoryExists(parentDirectory); exts[i].resolveURL(reposRootUrl, directoryUrl); SVNURL externalUrl = exts[i].getResolvedURL(); export.setSource(SvnTarget.fromURL(externalUrl, exts[i].getPegRevision())); export.setSingleTarget(SvnTarget.fromFile(externalDirectory)); export.setDepth(SVNDepth.INFINITY); export.setExpandKeywords(getOperation().isExpandKeywords()); export.setEolStyle(getOperation().getEolStyle()); export.setRevision(exts[i].getRevision()); export.setForce(true); export.setIgnoreExternals(false);
assert rootUrl != null && parentUrl != null; SVNURL newUrl = newItem.resolveURL(rootUrl, parentUrl); newUrl = SvnTarget.fromURL(newUrl).getURL(); SVNRevision externalRevision = newItem.getRevision(); SVNRevision externalPegRevision = newItem.getPegRevision(); externalRevision, externalPegRevision, newItem.getRawValue(), SVNRevision.UNDEFINED); Structure<RepositoryInfo> repositoryInfoStructure = getRepositoryAccess().createRepositoryFor(SvnTarget.fromURL(newUrl), newItem.getRevision(), newItem.getPegRevision(), null); repository = repositoryInfoStructure.get(RepositoryInfo.repository); externalRevnum = repositoryInfoStructure.lng(RepositoryInfo.revision);
final SVNExternal[] externals = SVNExternal.parseExternals(localAbsPathOrUrl, SVNPropertyValue.getPropertyAsString(externalsPropValue)); List<SVNExternal> itemsToPin; if (externalsToPin != null) { if (current != null && current.getUnresolvedUrl().equals(item.getUnresolvedUrl()) && current.getPath().equals(item.getPath())) { itemToPin = current; break; if (item.getPegRevision().getDate() != null) { externalPegRev = item.getPegRevision(); } else if (SVNRevision.isValidRevisionNumber(item.getPegRevision().getNumber())) { externalPegRev = item.getPegRevision(); } else { assert item.getPegRevision() == SVNRevision.HEAD || item.getPegRevision() == SVNRevision.UNDEFINED; SVNURL resolvedURL = item.resolveURL(reposRootUrl, localAbsPathOrUrl.getURL()); SVNRepository svnRepository = repositoryAccess.createRepository(resolvedURL, null, true); externalPegRev = SVNRevision.create(svnRepository.getLatestRevision()); } else { File externalAbsPath = SVNFileUtil.createFilePath(localAbsPathOrUrl.getFile(), item.getPath()); ISVNWCDb.SVNWCDbKind externalKind; try { SVNErrorMessage errorMessage = SVNErrorMessage.create(SVNErrorCode.WC_PATH_UNEXPECTED_STATUS, "Cannot pin external ''{0}'' defined in {1} at ''{2}'' because it is not checked out in the working copy at ''{3}''", item.getUnresolvedUrl(), SVNProperty.EXTERNALS, localAbsPathOrUrl.getFile(), externalAbsPath.getAbsolutePath(), SVNProperty.EXTERNALS); SVNErrorManager.error(errorMessage, SVNLogType.CLIENT); } else if (externalKind == ISVNWCDb.SVNWCDbKind.Dir) { SVNErrorMessage errorMessage = SVNErrorMessage.create(SVNErrorCode.WC_PATH_UNEXPECTED_STATUS, "Cannot pin external ''{0}'' defined in {1} at ''{2}'' because ''{3}'' has switched subtrees (switches cannot be represented in {4})", item.getUnresolvedUrl(), SVNProperty.EXTERNALS, localAbsPathOrUrl.getFile(), externalAbsPath.getAbsolutePath(), SVNProperty.EXTERNALS); SVNErrorManager.error(errorMessage, SVNLogType.CLIENT);
reportParsingError(owner, line); SVNExternal external = new SVNExternal(); int revisionToken = fetchRevision(external, owner, line, tokens); String token0 = (String) tokens.get(0); String token1 = (String) tokens.get(1);
private static String makeExternalDescription(SvnTarget localAbsPathOrUrl, SVNExternal item, SVNRevision externalPegRevision) throws SVNException { String parserRevisionString = item.getRevisionString(); String parserPegRevisionString = item.getPegRevisionString(); switch (item.getFormat()) { case 1: if (externalPegRevision == SVNRevision.UNDEFINED) { revisionString = parserRevisionString + " "; } else if (parserRevisionString != null && item.getRevision() != SVNRevision.HEAD) { revisionString = parserRevisionString + " "; } else { revisionString = "-r" + externalPegRevision.getNumber() + " "; return maybeQuote(item.getPath()) + " " + revisionString + maybeQuote(item.getRawURL()) + "\n"; case 2: if (externalPegRevision == SVNRevision.UNDEFINED) { revisionString = parserRevisionString + " "; } else if (parserRevisionString != null && item.getRevision() != SVNRevision.HEAD) { revisionString = parserRevisionString + " "; } else { } else if (parserPegRevisionString != null && item.getRevision() != SVNRevision.HEAD) { pegRevisionString = parserPegRevisionString; } else { return revisionString + maybeQuote(item.getRawURL() + pegRevisionString) + " " + maybeQuote(item.getPath()) + "\n"; default: SVNErrorMessage errorMessage = SVNErrorMessage.create(SVNErrorCode.CLIENT_INVALID_EXTERNALS_DESCRIPTION, "{0} property defined at ''{1}'' is using an unsupported syntax", SVNProperty.EXTERNALS, localAbsPathOrUrl.getFile());
private void listExternalItems(SVNRepository repository, SVNExternal[] externalItems, SVNURL externalParentUrl, SVNDepth depth, int entryFields, boolean fetchLocks, ISVNDirEntryHandler handler) throws SVNException { SVNURL rootUrl = repository.getRepositoryRoot(true); for (SVNExternal externalItem : externalItems) { SVNURL resolvedURL = externalItem.resolveURL(rootUrl, externalParentUrl); try { //TODO: peg revision repository.setLocation(resolvedURL, true); doList(repository, externalItem.getRevision().getNumber(), handler, fetchLocks, depth, entryFields, externalParentUrl, externalItem.getPath()); } catch (SVNException e) { if (e.getErrorMessage().getErrorCode() != SVNErrorCode.CANCELLED) { if (getOperation().getEventHandler() != null) { SVNEvent event = SVNEventFactory.createSVNEvent(new File(externalItem.getPath()), SVNNodeKind.UNKNOWN, null, -1, SVNEventAction.FAILED_EXTERNAL, SVNEventAction.FAILED_EXTERNAL, e.getErrorMessage(), null); getOperation().getEventHandler().handleEvent(event, UNKNOWN); } } else { throw e; } } } } }
public boolean compareExternals(SVNURL oldURL, SVNURL newURL) { return oldURL.equals(newURL) && oldExternal.getRevision().equals(newExternal.getRevision()) && oldExternal.getPegRevision().equals(newExternal.getPegRevision()); } }
private void relocateExternals(File localAbsPath, SVNExternal[] externals, SVNURL oldReposRootUrl, SVNURL newReposRootUrl) throws SVNException { for (int i = 0; i < externals.length; i++) { String rawUrl = externals[i].getUnresolvedUrl(); if (!(rawUrl.startsWith("../") || rawUrl.startsWith("^/"))) { continue; } File targetPath = SVNFileUtil.createFilePath(localAbsPath, externals[i].getPath()); try { SVNURL targetRepositoryRootUrl = getWcContext().getNodeReposInfo(targetPath).reposRootUrl; if (targetRepositoryRootUrl.equals(oldReposRootUrl)) { SvnWcDbRelocate.relocate(getWcContext(), targetPath, oldReposRootUrl, newReposRootUrl, this); } } catch (SVNException e) { if (e.getErrorMessage().getErrorCode() == SVNErrorCode.WC_PATH_NOT_FOUND) { continue; } } } }
if (SVNPathUtil.isURL(canonicalURL)) { myResolvedURL = SVNURL.parseURIEncoded(canonicalURL); return getResolvedURL(); return getResolvedURL(); return getResolvedURL(); } else if (myURL.startsWith("/")) { return getResolvedURL();
public static List<String> findTargetDuplications(SVNExternal[] externals) { List<String> paths = new ArrayList<String>(); for (int i = 0; i < externals.length; i++) { final SVNExternal external = externals[i]; String path = external.getPath(); for (int j = i + 1; j < externals.length; j++) { SVNExternal anotherExternal = externals[j]; String anotherPath = anotherExternal.getPath(); if (path.equals(anotherPath)) { paths.add(path); } } } return paths; }
private SVNExternal getExternal(ExternalItem external) { if (external == null) { return null; } return new SVNExternal(external.getTargetDir(), external.getUrl(), getSVNRevision(external.getPegRevision()), getSVNRevision(external.getRevision()), true, true, true); }
public int getFormat() { return isNewFormat() ? 2 : 1; }
SVNExternal[] previous = oldValue != null ? SVNExternal.parseExternals(diffPath, oldValue) : null; SVNExternal[] current = newValue != null ? SVNExternal.parseExternals(diffPath, newValue) : null; Map oldParsedExternals = new LinkedHashMap(); Map newParsedExternals = new LinkedHashMap(); newParsedExternals.put(current[i].getPath(), current[i]); oldParsedExternals.put(previous[i].getPath(), previous[i]); externalDiff.ownerURL = fromURL.appendPath(diffPath, false); handleExternalItemChange(wcAccess, externalDiff.oldExternal.getPath(), externalDiff); externalDiff.ownerURL = fromURL.appendPath(diffPath, false); handleExternalItemChange(wcAccess, externalDiff.newExternal.getPath(), externalDiff);
SVNExternal[] externals = SVNExternal.parseExternals(externalsParentAbsPath, externalsValuesString); for (SVNExternal external : externals) { File externalsAbsPath = SVNFileUtil.createFilePath(externalsParentAbsPath, external.getPath()); try { SVNURL resolvedUrl = external.resolveURL(externalsParentReposRootUrl, externalsParentUrl); long pegRevision = external.getPegRevision().getNumber(); long revision = external.getRevision().getNumber();
String externalDefinition = null; if (externalDiff.oldExternal != null && !externalDiff.isExport) { oldURL = externalDiff.oldExternal.resolveURL(externalDiff.rootURL, externalDiff.ownerURL); externalDefinition = externalDiff.oldExternal.getRawValue(); newURL = externalDiff.newExternal.resolveURL(externalDiff.rootURL, externalDiff.ownerURL); externalRevision = externalDiff.newExternal.getRevision(); externalPegRevision = externalDiff.newExternal.getPegRevision(); externalDefinition = externalDiff.newExternal.getRawValue();