public LinkedList<DiffFile> diff(int r1, int r2, String path) throws IOException {
        if (path.endsWith("\\")) {
            path = path.substring(0, path.length()-1);
        }
        
        LinkedList<DiffFile> ret = new LinkedList<>();
        
        String cmd = "cmd.exe /c d: & cd \"" + folder + "\" & svn diff --summarize -r " + r1 + ":" + r2 + (path != null ? (" " + path) : "");
        
        System.out.println("processing: " + cmd);
        Process p = Runtime.getRuntime().exec(cmd);
        
        try {
            int i = p.waitFor();
            System.out.println("process state: " + i);
        } catch (InterruptedException ex) {
            ex.printStackTrace();
            return null;
        }
        
        BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line = reader.readLine();
        
        while (line != null) {
            System.out.println(">> " + line);
            
            String fileName = line.substring(8);
            String atts = line.substring(0, 8);
            DiffFile.Status status = null;
            
            if (atts.contains("A")) {
                status = DiffFile.Status.ADDED;
            } else if (atts.contains("D")) {
                status = DiffFile.Status.DELETED;
            } else if (atts.contains("M")) {
                status = DiffFile.Status.MODIFIED;
            }
            
            if (status != null) {
                ret.addLast(new DiffFile(fileName, status));
                System.out.println(ret.getLast().toString());
            } else {
                System.err.println("unknown status for file \"" + fileName + "\"");
            }
            
            line = reader.readLine();
        }
        
        System.out.println("processing finished");
        
        return ret;
    }