ProgressEvent (final String line) { if (line.length() < 5) return null; final char first = line.charAt(0); if (' ' != first && ! ourActions.contains(first)) return null; final StatusType contentsStatus = CommandUtil.getStatusType(first); final char second = line.charAt(1); final StatusType propertiesStatus = CommandUtil.getStatusType(second); final char lock = line.charAt(2); // dont know what to do with stolen lock info if (' ' != lock && 'B' != lock) return null; final char treeConflict = line.charAt(3); if (' ' != treeConflict && 'C' != treeConflict) return null; final boolean haveTreeConflict = 'C' == treeConflict; final String path = line.substring(4).trim(); if (StringUtil.isEmptyOrSpaces(path)) return null; final File file = SvnUtil.resolvePath(myBase, path); if (StatusType.STATUS_OBSTRUCTED.equals(contentsStatus)) { // obstructed return new ProgressEvent(file, -1, contentsStatus, propertiesStatus, EventAction.UPDATE_SKIP_OBSTRUCTION, null, null); } EventAction action; EventAction expectedAction; if (StatusType.STATUS_ADDED.equals(contentsStatus)) { expectedAction = EventAction.UPDATE_ADD; } else if (StatusType.STATUS_DELETED.equals(contentsStatus)) { expectedAction = EventAction.UPDATE_DELETE; } else { expectedAction = EventAction.UPDATE_UPDATE; } action = expectedAction; if (haveTreeConflict) { action = EventAction.TREE_CONFLICT; } return new ProgressEvent(file, -1, contentsStatus, propertiesStatus, action, null, null); }