public RepositoryState GetLocalState() { var remoteFiles = Directory.FileExists(treeFilePath) ? ParseTreeFile().Select(f => f.Path) : new string[0]; var addedFiles = new List <string>(); var modifiedFiles = new List <string>(); var allLocalFiles = new List <string>(); DoForAllLocalFiles(file => { allLocalFiles.Add(file); if (!remoteFiles.Contains(file)) { addedFiles.Add(file); } else if (Directory.IsModified(file)) { modifiedFiles.Add(file); } }); var deletedFiles = remoteFiles.Except(allLocalFiles); return(new RepositoryState() { AddedFiles = addedFiles.ToArray(), ModifiedFiles = modifiedFiles.ToArray(), DeletedFiles = deletedFiles.ToArray() }); }