public static SVNAdminArea open(File path, Level logLevel) throws SVNException { SVNErrorMessage error = null; int wcFormatVersion = -1; Collection enabledFactories = getSelector().getEnabledFactories(path, ourFactories, false); File adminDir = new Resource(path, SVNFileUtil.getAdminDirectoryName()); File entriesFile = new Resource(adminDir, "entries"); if (adminDir.isDirectory() && entriesFile.isFile()) { for (Iterator factories = enabledFactories.iterator(); factories.hasNext(); ) { SVNAdminAreaFactory factory = (SVNAdminAreaFactory) factories.next(); try { wcFormatVersion = factory.getVersion(path); if (wcFormatVersion > factory.getSupportedVersion()) { SVNErrorMessage err = SVNErrorMessage.create( SVNErrorCode.WC_UNSUPPORTED_FORMAT, "The path ''{0}'' appears to be part of a Subversion 1.7 or greater\n" + "working copy. Please upgrade your Subversion client to use this\n" + "working copy.", path); SVNErrorManager.error(err, SVNLogType.WC); } else if (wcFormatVersion < factory.getSupportedVersion()) { SVNErrorMessage err = SVNErrorMessage.create( SVNErrorCode.WC_UNSUPPORTED_FORMAT, "Working copy format of {0} is too old ({1}); please check out your working copy again", new Object[] {path, new Integer(wcFormatVersion)}); SVNErrorManager.error(err, SVNLogType.WC); } } catch (SVNException e) { if (error != null) { error.setChildErrorMessage(e.getErrorMessage()); } else { error = e.getErrorMessage(); } continue; } SVNAdminArea adminArea = factory.doOpen(path, wcFormatVersion); if (adminArea != null) { adminArea.setWorkingCopyFormatVersion(wcFormatVersion); return adminArea; } } } if (error == null) { if (path != null) { checkWCNG(path.getAbsoluteFile(), path); } error = SVNErrorMessage.create( SVNErrorCode.WC_NOT_DIRECTORY, "''{0}'' is not a working copy", path); } if (error.getErrorCode() == SVNErrorCode.WC_UNSUPPORTED_FORMAT) { error.setChildErrorMessage(null); } SVNErrorManager.error(error, logLevel, SVNLogType.WC); return null; }
private static boolean checkAdminAreaExists(File dir, String url, long revision) throws SVNException { File adminDir = new Resource(dir, SVNFileUtil.getAdminDirectoryName()); if (adminDir.exists() && !adminDir.isDirectory()) { SVNErrorMessage err = SVNErrorMessage.create( SVNErrorCode.WC_OBSTRUCTED_UPDATE, "''{0}'' is not a directory", dir); SVNErrorManager.error(err, SVNLogType.WC); } else if (!adminDir.exists()) { return false; } boolean wcExists = false; try { readFormatVersion(adminDir); wcExists = true; } catch (SVNException svne) { return false; } if (wcExists) { SVNWCAccess wcAccess = SVNWCAccess.newInstance(null); SVNAdminArea adminArea = null; SVNEntry entry = null; try { adminArea = wcAccess.open(dir, false, 0); entry = adminArea.getVersionedEntry(adminArea.getThisDirName(), false); } finally { wcAccess.closeAdminArea(dir); } if (!entry.isScheduledForDeletion()) { if (entry.getRevision() != revision) { SVNErrorMessage err = SVNErrorMessage.create( SVNErrorCode.WC_OBSTRUCTED_UPDATE, "Revision {0} doesn''t match existing revision {1} in ''{2}''", new Object[] {new Long(revision), new Long(entry.getRevision()), dir}); SVNErrorManager.error(err, SVNLogType.WC); } if (!url.equals(entry.getURL())) { SVNErrorMessage err = SVNErrorMessage.create( SVNErrorCode.WC_OBSTRUCTED_UPDATE, "URL ''{0}'' doesn''t match existing URL ''{1}'' in ''{2}''", new Object[] {url, entry.getURL(), dir}); SVNErrorManager.error(err, SVNLogType.WC); } } } return wcExists; }