can also be used on paths and files now

This commit is contained in:
Edwin Eefting 2022-02-22 17:18:15 +01:00
parent 0d882ec031
commit e7e1590919

View File

@ -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: