public void go(final FilePath rootPath, final SVNDepth depth) throws SVNException { final MyItem root = new MyItem(myProject, rootPath, depth, myPartner.createStatusClient(), false); myQueue.add(root); while (!myQueue.isEmpty()) { myPartner.checkCanceled(); final MyItem item = myQueue.removeFirst(); final FilePath path = item.getPath(); final File ioFile = path.getIOFile(); if (path.isDirectory()) { myHandler.setCurrentItem(item); try { item.getClient(ioFile) .doStatus( ioFile, SVNRevision.WORKING, item.getDepth(), false, false, true, false, myHandler, null); myHandler.checkIfCopyRootWasReported(); } catch (SVNException e) { if (e.getErrorMessage().getErrorCode() == SVNErrorCode.WC_NOT_DIRECTORY) { final VirtualFile virtualFile = path.getVirtualFile(); if (virtualFile != null) { if (myPartner.isExcluded(virtualFile)) return; // self is unversioned myReceiver.processUnversioned(virtualFile); processRecursively(virtualFile, item.getDepth()); } } else { throw e; } } } else { if (item.isIsInnerCopyRoot()) { // this means that the status of parent directory had already been checked and is // unversioned; // to avoid SVN exception on status query to unversioned directory; and since we already // know then that the file // status is "unversioned" -> just register the unversioned file if (path.getVirtualFile() != null) { myReceiver.processUnversioned(path.getVirtualFile()); } } else { // just file final SVNStatus status = item.getClient().doStatus(ioFile, false, false); myReceiver.process(path, status); } } } }
private void processRecursively(final VirtualFile vFile, final SVNDepth prevDepth) { if (SVNDepth.EMPTY.equals(prevDepth)) return; if (myPartner.isIgnoredIdeaLevel(vFile)) { myReceiver.processIgnored(vFile); return; } final SVNDepth newDepth = SVNDepth.INFINITY.equals(prevDepth) ? SVNDepth.INFINITY : SVNDepth.EMPTY; final SVNStatusClient childClient = myPartner.createStatusClient(); final VirtualFile[] children = vFile.getChildren(); for (VirtualFile child : children) { final FilePath filePath = VcsUtil.getFilePath(child.getPath(), child.isDirectory()); // recursiveness is used ONLY for search of working copies that have unversioned files above final MyItem childItem = new MyItem(myProject, filePath, newDepth, childClient, true); myQueue.add(childItem); } }