var searchIndex = {}; searchIndex["ubiquity"] = {"doc":"The syncing process consists of three stages.\nFirst you call `ubiquity::detect::find_updates` with a few of arguments\nwhich tell Ubiquity where to look for changed files. It will return a list of files that differ between replicas.","items":[[0,"detect","ubiquity","Detects differences between replicas",null,null],[3,"Difference","ubiquity::detect","An instance of this struct represents the files/folders differ.\nThere may be a suggested action to be taken.",null,null],[12,"path","","The path at which the difference occurred",0,null],[12,"roots","","The roots of the syncing operation",0,null],[12,"previous_state","","The previous state that may be present from the archive",0,null],[12,"current_state","","The current state of the files",0,null],[3,"DetectionResult","","The result of update detection",null,null],[12,"differences","","",1,null],[12,"statistics","","",1,null],[3,"SearchDirectories","","The list of directories to be searched.",null,null],[12,"directories","","",2,null],[12,"recurse","","",2,null],[3,"DetectionStatistics","","Basic statistics about the accuracy of archives during the detection process.",null,null],[12,"archive_hits","","The number of times the archives were up to date and reported no change.",3,null],[12,"archive_additions","","The number of times the archives had to be added to.",3,null],[3,"EmptyProgressCallback","","An empty implementation of `ProgressCallback`",null,null],[5,"find_updates","","This mammoth function detects all differences between the two replicas,\ninside the provided search directories.",null,{"inputs":[{"name":"archive"},{"name":"searchdirectories"},{"name":"syncinfo"},{"name":"p"}],"output":{"name":"result"}}],[8,"ProgressCallback","","Progress reporting for the update detection process.",null,null],[10,"reading_directory","","Called when a new directory is being searched.",4,null],[11,"clone","","",0,null],[11,"fmt","","",0,null],[11,"absolute_path_for_root","","",0,null],[11,"clone","","",2,null],[11,"fmt","","",2,null],[11,"from_root","","Builds a value that searches everything inside the root.",2,{"inputs":[],"output":{"name":"searchdirectories"}}],[11,"new","","",2,{"inputs":[{"name":"vec"},{"name":"bool"}],"output":{"name":"self"}}],[11,"fmt","","",3,null],[11,"new","","",3,{"inputs":[],"output":{"name":"self"}}],[11,"reading_directory","","",5,null],[0,"reconcile","ubiquity","Makes suggestions on how to resolve differences between replicas",null,null],[4,"Operation","ubiquity::reconcile","The result of `reconciliation`.",null,null],[13,"PropagateFromMaster","","the provided replica was correct",6,null],[13,"ItemChangedOnMultipleReplicas","","the item was changed on multiple replicas and we don't know which",6,null],[13,"ItemDiffersBetweenReplicasAndNoArchive","","the item differs, but there was no previous state in the archives so we don't know which replica is 'correct'",6,null],[5,"guess_operation","","Determines which replica (if any), has the most up-to-date copy of the item.",null,{"inputs":[{"name":"difference"}],"output":{"name":"operation"}}],[11,"clone","","",6,null],[11,"fmt","","",6,null],[0,"propagate","ubiquity","Propagates changes from a master replica to all others",null,null],[3,"EmptyProgressCallback","ubiquity::propagate","A zero-sized struct with an empty implementation of ProgressCallback",null,null],[3,"ToCheck","","The amount of files left to check.",null,null],[12,"remaining","","",7,null],[12,"total","","",7,null],[3,"DefaultPropagationOptions","","A zero-sized struct with a simple implementation of PropagationOptions.",null,null],[5,"propagate","","Propagates a change from `master` to every other replica.",null,{"inputs":[{"name":"difference"},{"name":"usize"},{"name":"archive"},{"name":"t"},{"name":"p"}],"output":{"name":"result"}}],[11,"rsync_progress","","",8,null],[11,"fmt","","",7,null],[8,"ProgressCallback","","Handles progress updates for the propagation step.",null,null],[10,"rsync_progress","","Transfer progress from rsync",9,null],[8,"PropagationOptions","","PropagationOptions allow the client to customize how files are transferred/deleted.",null,null],[10,"should_remove","","return false to cancel deleting a directory",10,null],[10,"remove_file","","return `SyncError::Cancelled` to cancel deleting the file,\notherwise delete the file/move it to the trash.\nThis must return an error if the file was not removed successfully.",10,null],[10,"remove_dir_all","","Delete the directory and its contents\nThis must return an error if the directory was not removed successfully.\nIgnoring errors will mean that Ubiquity writes to the archive files when\nthe replicas are still out of sync, resulting in an inconsistent state.",10,null],[11,"should_remove","","",11,null],[11,"remove_file","","",11,null],[11,"remove_dir_all","","",11,null],[0,"archive","ubiquity","Handles the serialization and deserialization of archive data",null,null],[3,"Archive","ubiquity::archive","The `Archive` struct stores the state of the replicas after the last syncing operation.\nIt is used to detect differences to replicas more quickly, and must be kept up to date after propagating changes.",null,null],[12,"directory","","",12,null],[3,"ArchiveFile","","Abstracts over operations on a single archive file.\nRemember each 'file' in the archive represents an entire directory (not recursive) in the replicas.",null,null],[3,"ArchiveEntries","","Stores all the archive entries for a specific directory",null,null],[4,"ReadError","","Various errors explaining why an archive file couldn't be read",null,null],[13,"InvalidArchiveVersion","","",13,null],[13,"IoError","","",13,null],[13,"DeserializeError","","",13,null],[4,"WriteError","","Various errors explaining why an archive file couldn't be written to",null,null],[13,"IoError","","",14,null],[13,"SerializeError","","",14,null],[6,"HashedPath","","",null,null],[11,"fmt","","",12,null],[11,"new","","Initializes a directory at the provided path and gets ready to start reading/writing archive data.",12,{"inputs":[{"name":"pathbuf"}],"output":{"name":"result"}}],[11,"for_directory","","Constructs an `ArchiveFile` representing the entire `directory` in the replicas.",12,null],[11,"for_hashed_directory","","Constructs an `ArchiveFile` from a hashed directory, representing an entire directory in the replicas.",12,null],[11,"hash","","",12,{"inputs":[{"name":"path"}],"output":{"name":"hashedpath"}}],[11,"remove_all","","Remove all entries from this file.\nThis just slightly more efficient than writing an empty Vec.",15,null],[11,"read","","Reads the archive entries into a Vec\nThis may acquire (or wait for) a lock,\nensuring that multiple threads/processes aren't reading/writing to/from the same archive file.",15,null],[11,"write","","Writes entries to disk",15,null],[11,"fmt","","",15,null],[11,"drop","","",15,null],[11,"fmt","","",16,null],[11,"empty","","",16,{"inputs":[],"output":{"name":"self"}}],[11,"iter","","Returns an iterator over the entries.",16,null],[11,"get","","",16,null],[11,"insert","","",16,null],[11,"prune_deleted","","",16,null],[11,"is_dirty","","",16,null],[11,"fmt","","",13,null],[11,"from","","",13,{"inputs":[{"name":"deserializeerror"}],"output":{"name":"self"}}],[11,"from","","",13,{"inputs":[{"name":"error"}],"output":{"name":"self"}}],[11,"fmt","","",14,null],[11,"from","","",14,{"inputs":[{"name":"serializeerror"}],"output":{"name":"self"}}],[11,"from","","",14,{"inputs":[{"name":"error"}],"output":{"name":"self"}}],[0,"state","ubiquity","Core structures for representing the state of the filesystem",null,null],[3,"ArchiveEntryExists","ubiquity::state","",null,null],[4,"ArchiveEntryPerReplica","","Mirrors the state of a path on the filesystem.",null,null],[13,"Empty","","",17,null],[13,"Directory","","",17,null],[13,"File","","",17,null],[13,"Symlink","","",17,null],[11,"eq","","",17,null],[11,"ne","","",17,null],[11,"fmt","","",17,null],[11,"clone","","",17,null],[11,"from_roots","","Creates an array of ArchiveEntryPerReplica instances that reflect the current state of `path` inside `roots`.",17,null],[11,"equal_ty","","Returns true if the entries are equal in type but not necessarily in content.",17,{"inputs":[{"name":"archiveentryperreplica"},{"name":"archiveentryperreplica"}],"output":{"name":"bool"}}],[11,"is_file_or_symlink","","Returns true if the entry is a file or a symlink",17,null],[11,"entry_exists","","Returns true if the entry is present (ie: it is not empty)",17,null],[11,"from","","",17,{"inputs":[{"name":"path"}],"output":{"name":"archiveentryperreplica"}}],[11,"eq","","",18,null],[11,"ne","","",18,null],[11,"fmt","","",18,null],[11,"clone","","",18,null],[0,"config","ubiquity","Configuration for the whole system",null,null],[3,"SyncInfo","ubiquity::config","The configuration for the sync business.",null,null],[12,"roots","","",19,null],[12,"ignore","","",19,null],[12,"compare_file_contents","","",19,null],[3,"Ignore","","Determines which files should be ignored when detecting updates.",null,null],[12,"regexes","","",20,null],[12,"paths","","",20,null],[6,"ReplicaIndex","","A type representing an index into a list of replicas.",null,null],[8,"PathLen","","Internal trait which encapsulates the length of a `GenericArray<PathBuf>`",null,null],[8,"ArchiveLen","","Internal trait which encapsulates the length of a `GenericArray<ArchiveEntryPerReplica>`",null,null],[11,"fmt","","",19,null],[11,"fmt","","",20,null],[11,"nothing","","An `Ignore` struct that ignores nothing",20,{"inputs":[],"output":{"name":"self"}}],[11,"new","","",19,{"inputs":[{"name":"genericarray"}],"output":{"name":"self"}}],[0,"error","ubiquity","Error handling",null,null],[4,"SyncError","ubiquity::error","The many causes for an error during the synchronization process",null,null],[13,"PathModified","","",21,null],[13,"IoError","","",21,null],[13,"RootDoesntExist","","",21,null],[13,"AbsolutePathProvided","","",21,null],[13,"ArchiveReadError","","",21,null],[13,"ArchiveWriteError","","",21,null],[13,"Cancelled","","The requested operation was cancelled before it could be completed.",21,null],[13,"WalkDirError","","",21,null],[8,"DescribeIoError","","",null,null],[10,"describe","","",22,null],[11,"fmt","","",21,null],[11,"from","","",21,{"inputs":[{"name":"error"}],"output":{"name":"self"}}],[11,"from","","",21,null],[11,"from","","",21,{"inputs":[{"name":"readerror"}],"output":{"name":"self"}}],[11,"from","","",21,{"inputs":[{"name":"writeerror"}],"output":{"name":"self"}}],[11,"from","","",21,{"inputs":[{"name":"walkdirerror"}],"output":{"name":"self"}}],[11,"fmt","","",21,null]],"paths":[[3,"Difference"],[3,"DetectionResult"],[3,"SearchDirectories"],[3,"DetectionStatistics"],[8,"ProgressCallback"],[3,"EmptyProgressCallback"],[4,"Operation"],[3,"ToCheck"],[3,"EmptyProgressCallback"],[8,"ProgressCallback"],[8,"PropagationOptions"],[3,"DefaultPropagationOptions"],[3,"Archive"],[4,"ReadError"],[4,"WriteError"],[3,"ArchiveFile"],[3,"ArchiveEntries"],[4,"ArchiveEntryPerReplica"],[3,"ArchiveEntryExists"],[3,"SyncInfo"],[3,"Ignore"],[4,"SyncError"],[8,"DescribeIoError"]]}; initSearch(searchIndex);