mirror of
https://github.com/rocky-linux/os-autoinst-distri-rocky.git
synced 2024-11-23 05:31:29 +00:00
102 lines
3.7 KiB
Python
102 lines
3.7 KiB
Python
|
#!/bin/python3
|
||
|
|
||
|
# Copyright (C) 2020 Red Hat
|
||
|
#
|
||
|
# This file is part of os-autoinst-distri-fedora.
|
||
|
#
|
||
|
# os-autoinst-distri-fedora is free software; you can redistribute it
|
||
|
# and/or modify it under the terms of the GNU General Public License
|
||
|
# as published by the Free Software Foundation, either version 2 of
|
||
|
# the License, or (at your option) any later version.
|
||
|
#
|
||
|
# This program is distributed in the hope that it will be useful,
|
||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
# GNU General Public License for more details.
|
||
|
#
|
||
|
# You should have received a copy of the GNU General Public License
|
||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
#
|
||
|
# Author: Adam Williamson <awilliam@redhat.com>
|
||
|
|
||
|
"""This is a helper script for moving needles to appropriate subdirectories, by examining their
|
||
|
filenames and looking for existing needles with similar filenames. It's convenient if you have
|
||
|
to update a bunch of needles for a font change, or something, and don't want to figure out where
|
||
|
each one goes by hand.
|
||
|
"""
|
||
|
|
||
|
import argparse
|
||
|
import datetime
|
||
|
import glob
|
||
|
import os
|
||
|
import shutil
|
||
|
import sys
|
||
|
|
||
|
def process_needles(date, move=False):
|
||
|
"""Main function that does all the work. date is the date to look
|
||
|
for needles from (as a string in YYYYMMDD format), move (boolean)
|
||
|
is whether to actually move them or just do a dry run.
|
||
|
"""
|
||
|
# we assume all non-template JSON files in the current directory
|
||
|
# are needles
|
||
|
needles = glob.glob('*json')
|
||
|
needles = [needle for needle in needles if not needle.startswith('templates')]
|
||
|
for needle in needles:
|
||
|
cands = []
|
||
|
# strip off the date
|
||
|
name = str(needle).replace(f"-{date}.json", "")
|
||
|
# now look for any other directory that has needle(s) starting
|
||
|
# with the stripped name
|
||
|
for (root, dirs, files) in os.walk('.'):
|
||
|
if any(file.startswith(name) for file in files) and root != '.':
|
||
|
cands.append(root)
|
||
|
# if we found exactly one potential target dir, go ahead
|
||
|
if len(cands) == 1:
|
||
|
print(f"Move {needle} to {cands[0]}")
|
||
|
if move:
|
||
|
shutil.move(needle, cands[0])
|
||
|
sshot = needle.replace('json', 'png')
|
||
|
shutil.move(sshot, cands[0])
|
||
|
# if we found more than one, just explain
|
||
|
elif len(cands) > 1:
|
||
|
print(f"Multiple candidates found for {needle}!")
|
||
|
for (idx, cand) in enumerate(cands, 1):
|
||
|
print(f"{str(idx)}: {cand}")
|
||
|
|
||
|
def parse_args(args):
|
||
|
"""Parse arguments with argparse."""
|
||
|
parser = argparse.ArgumentParser(
|
||
|
description=(
|
||
|
"Helper script for moving needles to appropriate subdirectories."
|
||
|
)
|
||
|
)
|
||
|
parser.add_argument(
|
||
|
"-d", "--date", help="Date to work with, in YYYYMMDD format. Script will look for needle "
|
||
|
"files with this date in their name and strip it to form the base name to look for other "
|
||
|
"instances of). If not specified, script will use today's date in the local timezone",
|
||
|
default=datetime.date.today().strftime("%Y%m%d")
|
||
|
)
|
||
|
parser.add_argument(
|
||
|
"-m", "--move", help="If set, actually move files; if not set, do a dry run and only "
|
||
|
"report what files would be moved", action="store_true"
|
||
|
)
|
||
|
return parser.parse_args(args)
|
||
|
|
||
|
def run(args):
|
||
|
"""Parse args and call main function with appropriate options."""
|
||
|
args = parse_args(args)
|
||
|
process_needles(args.date, args.move)
|
||
|
|
||
|
def main():
|
||
|
"""Main loop."""
|
||
|
try:
|
||
|
run(args=sys.argv[1:])
|
||
|
except KeyboardInterrupt:
|
||
|
sys.stderr.write("Interrupted, exiting...\n")
|
||
|
sys.exit(1)
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
main()
|
||
|
|
||
|
# vim: set textwidth=100 ts=8 et sw=4:
|