def __init__(self, root): assert isinstance(root, Path) self.root = root self.mdd = _metadata_path(root) self.keydb = KeyDB(_keys_path(root)) self.udd = Path(self.keydb.read('udd')) self.snapdb = KeyDBFactory(KeyDBWindow("snaps", self.keydb), encode_snapshot, decode_snapshot) self.remotedb = KeyDBFactory(KeyDBWindow("remotes", self.keydb), encode_volume, decode_volume) self.reverser = reverser() exclude_file = Path('.farmignore', self.root) self.exclude = [str(self.mdd)] try: with exclude_file.open('r') as exclude_fd: for pattern in exclude_fd.readlines(): pattern = str(Path(pattern.strip(), root)) self.exclude.append(pattern) except IOError as e: if e.errno == NoSuchFile: pass else: raise e