[file_utils] dirpacker: --machine-readable

The option --machine-readable allows to print the list of bins in a
machine-readable format.
This commit is contained in:
Matteo Cypriani 2014-06-01 21:43:27 -04:00
parent 235a22aba1
commit 718d4c5c95
2 changed files with 22 additions and 6 deletions

View File

@ -16,6 +16,10 @@ called a bin.
By default, dirpacker displays a list of bins and the files they By default, dirpacker displays a list of bins and the files they
would contain, along with the size of each file and some statistics. would contain, along with the size of each file and some statistics.
With the option --machine-readable, this list will be printed in a
machine-readable format: each line contains a bin's name, then a
tabulation, then a file that belongs to this bin.
With the option --move, a directory will be created for each volume and With the option --move, a directory will be created for each volume and
the files will be moved to the corresponding volume. the files will be moved to the corresponding volume.

View File

@ -53,12 +53,18 @@ class Bin:
def print(self): def print(self):
"""Displays the contents of the bin. """Displays the contents of the bin.
""" """
print("\n### {} ###\nList of files:".format(self.name())) if not options.machine_readable:
print("\n### {} ###\nList of files:".format(self.name()))
for filename, size in sorted(self.files.items()): for filename, size in sorted(self.files.items()):
print("{:12.2f} MiB\t{}".format(size, filename)) if options.machine_readable:
sizefree = options.maxbinsize - self.size print(self.name(), end="")
print("This bin's size: {:.2f} MiB".format(self.size)) else:
print("Unused: {:.2f} MiB".format(sizefree)) print("{:12.2f} MiB".format(size))
print("\t{}".format(filename))
if not options.machine_readable:
sizefree = options.maxbinsize - self.size
print("This bin's size: {:.2f} MiB".format(self.size))
print("Unused: {:.2f} MiB".format(sizefree))
def name(self): def name(self):
"""Returns the bin's name' """Returns the bin's name'
@ -136,6 +142,9 @@ arg_parser.add_argument("--prefix", action="store", default="bin_",
help="prefix of a bin's name (default: \"bin_\")") help="prefix of a bin's name (default: \"bin_\")")
arg_parser.add_argument("--move", action="store_true", arg_parser.add_argument("--move", action="store_true",
help="move input to per-volume directories") help="move input to per-volume directories")
arg_parser.add_argument("-m", "--machine-readable", action="store_true",
help="print the list of volumes in a machine-readable"
" format; implies --quiet")
arg_parser.add_argument("-v", "--verbose", action="store_true", default=True, arg_parser.add_argument("-v", "--verbose", action="store_true", default=True,
help="be verbose (this is the default)") help="be verbose (this is the default)")
arg_parser.add_argument("-q", "--quiet", action="store_false", dest="verbose", arg_parser.add_argument("-q", "--quiet", action="store_false", dest="verbose",
@ -144,6 +153,9 @@ arg_parser.add_argument("filenames", metavar="file", nargs="+",
help="files or directories to pack") help="files or directories to pack")
options = arg_parser.parse_args() options = arg_parser.parse_args()
if options.machine_readable:
options.verbose = False
### Preliminary statistics ### ### Preliminary statistics ###
@ -198,7 +210,7 @@ Actual unused space over the {} bins created: {:.2f} MiB"""
# Print the contents of the bins # Print the contents of the bins
if options.verbose: if options.verbose or options.machine_readable:
for b in bins: for b in bins:
b.print() b.print()