for(SVNProgressViewerIterator it = new SVNProgressViewerIterator(statuses.keySet(), progressProcessor); it.hasNext(); progressProcessor.checkCancelled()) {
for(SVNProgressViewerIterator it = new SVNProgressViewerIterator(statuses.keySet(), progressViewer); it.hasNext(); progressViewer.checkCancelled()) {
    static void doStatus(SVNWorkspace ws, ISVNDirectoryEntry parent, SVNStatusEditor editor, ISVNStatusHandler handler, String path, Collection externals, boolean descend,            boolean includeUnmodified, boolean includeIgnored, boolean descendInUnversioned, boolean descendFurtherInIgnored, SVNProgressProcessor progressProcessor) 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);	          progressProcessor.setProgress(1.0);            return;        }        SVNStatus dirStatus = (SVNStatus) statuses.remove("");        boolean isManagedInParent = (parent != null && parent.isManaged(entry.getName())) ||         		(parent == null && entry.isManaged());        if (dirStatus.getContentsStatus() == SVNStatus.EXTERNAL ||            (!descendInUnversioned && !isManagedInParent) ||            (!descendFurtherInIgnored && dirStatus.getContentsStatus() == SVNStatus.IGNORED)) {            handleStatus(handler, dirStatus, includeUnmodified, includeIgnored);	          progressProcessor.setProgress(1.0);            return;        }        // descend        if (descend && dirStatus.getContentsStatus() != SVNStatus.OBSTRUCTED) {	        for(SVNProgressViewerIterator it = new SVNProgressViewerIterator(statuses.keySet(), progressProcessor); it.hasNext(); progressProcessor.checkCancelled()) {                String name = (String) it.next();                SVNStatus status = (SVNStatus) statuses.get(name);                if (status == null) {                    if (!includeIgnored && (entry.asDirectory().getChild(name) == null && entry.asDirectory().isIgnored(name))) {                        // only unmanaged ignores should be skipped                        continue;                    }                    doStatus(ws, entry.asDirectory(), editor, handler, PathUtil.append(path, name), externals, true,                            includeUnmodified, includeIgnored, descendInUnversioned, descendFurtherInIgnored, new SVNProgressProcessor(it, progressProcessor));                }            }        }        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);            }        }        handleStatus(handler, dirStatus, includeUnmodified, includeIgnored);	      progressProcessor.setProgress(1.0);    }