handleStatus(handler, dirStatus, includeUnmodified, includeIgnored);
    static void doStatus(SVNWorkspace ws, ISVNDirectoryEntry parent, SVNStatusEditor editor, ISVNStatusHandler handler, String path, Collection externals, boolean descend,            boolean includeUnmodified, boolean includeIgnored, boolean descendInUnversioned) throws SVNException {        externals = externals == null ? new HashSet() : externals;                ISVNEntry entry = ws.locateEntry(path, true);        if (entry != null && entry.isDirectory()) {            externals = SVNExternal.create(entry.asDirectory(), externals);        }        Map statuses = localStatus(ws, parent, path, null, externals, !descend);        if (editor != null) {             statuses = editor.completeStatus(statuses, path, descend);        }        // fill in remote information from editor.                if (!entry.isDirectory()) {            // ignore ignored, unchanged...            handleStatus(handler, (SVNStatus) statuses.get(entry.getName()), includeUnmodified, includeIgnored);            return;        }        SVNStatus dirStatus = (SVNStatus) statuses.remove("");        if (dirStatus.getContentsStatus() == SVNStatus.EXTERNAL || (!descendInUnversioned && !entry.isManaged())) {            handleStatus(handler, dirStatus, includeUnmodified, includeIgnored);            return;        }        // descend        handleStatus(handler, dirStatus, includeUnmodified, includeIgnored);        if (descend && dirStatus.getContentsStatus() != SVNStatus.OBSTRUCTED) {            for(Iterator names = statuses.keySet().iterator(); names.hasNext();) {                String name = (String) names.next();                SVNStatus status = (SVNStatus) statuses.get(name);                if (status == null) {                    if (!includeIgnored && entry.asDirectory().isIgnored(name)) {                        continue;                    }                    doStatus(ws, entry.asDirectory(), editor, handler, PathUtil.append(path, name), externals, true,                             includeUnmodified, includeIgnored, descendInUnversioned);                }            }        }                for(Iterator names = statuses.keySet().iterator(); names.hasNext();) {            String name = (String) names.next();            SVNStatus status = (SVNStatus) statuses.get(name);            if (status != null) {                handleStatus(handler, status, includeUnmodified, includeIgnored);            }        }            }