From e7e1590919d04f8cf376131076c9b617640ef9d4 Mon Sep 17 00:00:00 2001 From: Edwin Eefting Date: Tue, 22 Feb 2022 17:18:15 +0100 Subject: [PATCH] can also be used on paths and files now --- zfs_autobackup/ZfsCheck.py | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/zfs_autobackup/ZfsCheck.py b/zfs_autobackup/ZfsCheck.py index de982e2..4a1290b 100644 --- a/zfs_autobackup/ZfsCheck.py +++ b/zfs_autobackup/ZfsCheck.py @@ -154,6 +154,29 @@ class ZfsCheck(CliBase): else: raise Exception("huh?") + def generate_path(self, input_generator=None): + + tree_hasher = TreeHasher(self.block_hasher) + + self.debug("Hashing tree: {}".format(self.args.target)) + if input_generator: + for i in tree_hasher.compare(self.args.target, input_generator): + yield i + else: + for i in tree_hasher.generate(self.args.target): + yield i + + def generate_file(self, input_generator=None): + + + self.debug("Hashing file: {}".format(self.args.target)) + if input_generator: + for i in self.block_hasher.compare(self.args.target, input_generator): + yield i + else: + for i in self.block_hasher.generate(self.args.target): + yield i + def generate(self, input_generator=None): """generate checksums or compare (and generate error messages)""" @@ -162,9 +185,12 @@ class ZfsCheck(CliBase): return self.generate_zfs_target(input_generator) elif os.path.isdir(self.args.target): self.verbose("Target {} is directory, checking recursively.".format(self.args.target)) - return self.check_path(input_generator) - elif os.path.isfile(self.args.target): + return self.generate_path(input_generator) + elif os.path.exists(self.args.target): self.verbose("Target {} is single file or blockdevice.".format(self.args.target)) + return self.generate_file(input_generator) + else: + raise Exception("Cant open {} ".format(self.args.target)) def input_parser(self, file_name): """parse input lines and generate items to use in compare functions""" @@ -186,10 +212,15 @@ class ZfsCheck(CliBase): else: print("{}\t{}".format(*i)) sys.stdout.flush() + + sys.exit(0) + #run as compare else: + errors=0 input_generator=self.input_parser(self.args.check) for i in self.generate(input_generator): + errors=errors+1 if len(i)==4: (file_name, chunk_nr, compare_hexdigest, actual_hexdigest)=i self.log.error("{}\t{}\t{}\t{}".format(file_name, chunk_nr, compare_hexdigest, actual_hexdigest)) @@ -197,6 +228,8 @@ class ZfsCheck(CliBase): (chunk_nr, compare_hexdigest, actual_hexdigest) = i self.log.error("{}\t{}\t{}".format(chunk_nr, compare_hexdigest, actual_hexdigest)) + sys.exit(min(255,errors)) + except Exception as e: self.error("Exception: " + str(e)) if self.args.debug: