/* * ==================================================================== * Copyright (c) 2004-2010 TMate Software Ltd. All rights reserved. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://svnkit.com/license.html. * If newer versions of this license are posted there, you may use a * newer version instead, at your option. * ==================================================================== */ package org.tmatesoft.svn.core.internal.wc17.db; import java.io.File; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.internal.db.SVNSqlJetDb.Mode; import org.tmatesoft.svn.core.internal.util.SVNPathUtil; import org.tmatesoft.svn.core.internal.wc.SVNFileUtil; import org.tmatesoft.svn.core.internal.wc.admin.SVNWCAccess; /** * This structure records all the information that we need to deal with a given * working copy directory. * * @author TMate Software Ltd. */ public class SVNWCDbDir { /** The absolute path to this working copy directory. */ private File localAbsPath; /** What wcroot does this directory belong to? */ private SVNWCDbRoot wcRoot; /** The parent directory's per-dir information. */ private SVNWCDbDir parent; /** Hold onto the old-style access baton that corresponds to this PDH. */ private SVNWCAccess admAccess; public SVNWCDbDir(File localAbsPath) { this.localAbsPath = localAbsPath; } public File getLocalAbsPath() { return localAbsPath; } public SVNWCDbRoot getWCRoot() { return wcRoot; } public SVNWCDbDir getParent() { return parent; } public SVNWCAccess getAdmAccess() { return admAccess; } public void setLocalAbsPath(File localAbsPath) { this.localAbsPath = localAbsPath; } public void setWCRoot(SVNWCDbRoot wcRoot) { this.wcRoot = wcRoot; } public void setParent(SVNWCDbDir parent) { this.parent = parent; } public static boolean isUsable(SVNWCDbDir pdh) { return pdh != null && pdh.getWCRoot() != null && pdh.getWCRoot().getFormat() >= ISVNWCDb.WC_FORMAT_17 && pdh.getWCRoot().getFormat() <= ISVNWCDb.WC_FORMAT_18; } public File computeRelPath() { final String relativePath = SVNPathUtil.getRelativePath(wcRoot.getAbsPath().toString(), localAbsPath.toString()); return SVNFileUtil.createFilePath(relativePath); } public void flushEntries(File localAbspath) throws SVNException { if (admAccess != null) { admAccess.close(); } if (localAbspath != null && localAbspath.equals(this.localAbsPath) && !localAbspath.equals(wcRoot.getAbsPath())) { SVNWCDbDir parentPdh = wcRoot.getDb().navigateToParent(this, Mode.ReadOnly); if (parentPdh != null && parentPdh.getAdmAccess() != null) { parentPdh.getAdmAccess().close(); } } } }