SVNDebugLog.getDefaultLog().info("reporing: " + dirPath + "/" + entry.getName());
    private void reportEntries(ISVNReporter reporter, SVNAdminArea adminArea, String dirPath, long dirRevision, boolean reportAll, boolean recursive) throws SVNException {        SVNWCAccess wcAccess = myInfo.getWCAccess();        SVNExternalInfo[] externals = myInfo.addExternals(adminArea, adminArea.getProperties(adminArea.getThisDirName()).getPropertyValue(SVNProperty.EXTERNALS));        for (int i = 0; externals != null && i < externals.length; i++) {            externals[i].setOldExternal(externals[i].getNewURL(), externals[i].getNewRevision());        }        for (Iterator e = adminArea.entries(true); e.hasNext();) {            SVNEntry entry = (SVNEntry) e.next();            if (adminArea.getThisDirName().equals(entry.getName())) {                continue;            }            String path = "".equals(dirPath) ? entry.getName() : SVNPathUtil.append(dirPath, entry.getName());            if (entry.isDeleted() || entry.isAbsent()) {                if (!reportAll) {                    reporter.deletePath(path);                }                continue;            }            if (entry.isScheduledForAddition()) {                continue;            }            SVNDebugLog.getDefaultLog().info("reporing: " + dirPath + "/" + entry.getName());            File file = adminArea.getFile(entry.getName());            SVNFileType fileType = SVNFileType.getType(file);            boolean missing = fileType == SVNFileType.NONE;            String parentURL = adminArea.getEntry(adminArea.getThisDirName(), true).getURL();            String expectedURL = SVNPathUtil.append(parentURL, SVNEncodingUtil.uriEncode(entry.getName()));            if (entry.isFile()) {                if (missing && !entry.isScheduledForDeletion() && !entry.isScheduledForReplacement()) {                    restoreFile(adminArea, entry.getName());                }                String url = entry.getURL();                if (reportAll) {                    if (!url.equals(expectedURL)) {                        SVNURL svnURL = SVNURL.parseURIEncoded(url);                        reporter.linkPath(svnURL, path, entry.getLockToken(), entry.getRevision(), false);                    } else {                        reporter.setPath(path, entry.getLockToken(), entry.getRevision(), false);                    }                } else if (!entry.isScheduledForReplacement() && !url.equals(expectedURL)) {                    // link path                    SVNURL svnURL = SVNURL.parseURIEncoded(url);                    reporter.linkPath(svnURL, path, entry.getLockToken(), entry.getRevision(), false);                } else if (entry.getRevision() != dirRevision || entry.getLockToken() != null) {                    reporter.setPath(path, entry.getLockToken(), entry.getRevision(), false);                }            } else if (entry.isDirectory() && recursive) {                if (missing) {                    if (!reportAll) {                        reporter.deletePath(path);                    }                    continue;                }                SVNAdminArea childArea = wcAccess.retrieve(adminArea.getFile(entry.getName()));                SVNEntry childEntry = childArea.getEntry(childArea.getThisDirName(), true);                String url = childEntry.getURL();                if (reportAll) {                    if (!url.equals(expectedURL)) {                        SVNURL svnURL = SVNURL.parseURIEncoded(url);                        reporter.linkPath(svnURL, path, childEntry.getLockToken(), childEntry.getRevision(), childEntry.isIncomplete());                    } else {                        reporter.setPath(path, childEntry.getLockToken(), childEntry.getRevision(), childEntry.isIncomplete());                    }                } else if (!url.equals(expectedURL)) {                    SVNURL svnURL = SVNURL.parseURIEncoded(url);                    reporter.linkPath(svnURL, path, childEntry.getLockToken(), childEntry.getRevision(), childEntry.isIncomplete());                } else if (childEntry.getLockToken() != null || childEntry.getRevision() != dirRevision || childEntry.isIncomplete()) {                    reporter.setPath(path, childEntry.getLockToken(), childEntry.getRevision(), childEntry.isIncomplete());                }                reportEntries(reporter, childArea, path, childEntry.getRevision(), childEntry.isIncomplete(), recursive);            }        }    }