Holger Frey
5 years ago
6 changed files with 112 additions and 5 deletions
@ -1,7 +1,8 @@ |
|||||||
linux-helpers |
work-helpers |
||||||
============= |
============ |
||||||
|
|
||||||
Some helper scripts for the day to day work with Ubuntu in WSL2 |
Some helper scripts for the day to day work with Ubuntu in WSL2 |
||||||
|
|
||||||
|
|
||||||
- **xls2changelog**: reformat copied excel data to the safeguard changelog format |
- **xls2changelog**: reformat copied excel data to the safeguard changelog format |
||||||
|
- **sg_mbp_release**: collect and annotate all files used for a safeguard workbook release |
||||||
|
@ -0,0 +1,30 @@ |
|||||||
|
""" Sort the content of an list in a natural way |
||||||
|
|
||||||
|
> l = ["A2", "A10", "A1", "A3"] |
||||||
|
> sorted(l) |
||||||
|
['A1', 'A10', 'A2', 'A3'] |
||||||
|
> natural_sort(l) |
||||||
|
['A1', 'A2', 'A3', 'A10'] |
||||||
|
|
||||||
|
from http://www.codinghorror.com/blog/2007/12/sorting-for-humans-natural-sort-order.html |
||||||
|
""" |
||||||
|
|
||||||
|
import re |
||||||
|
|
||||||
|
|
||||||
|
_NATURAL_SORT_REGEX_DIGITS = re.compile("([0-9]+)") |
||||||
|
|
||||||
|
|
||||||
|
def _nartural_sort_convert(text): |
||||||
|
return int(text) if text.isdigit() else text.lower() |
||||||
|
|
||||||
|
|
||||||
|
def _nartural_sort_alphanum_key(text): |
||||||
|
return tuple( |
||||||
|
_nartural_sort_convert(part) |
||||||
|
for part in _NATURAL_SORT_REGEX_DIGITS.split(text) |
||||||
|
) |
||||||
|
|
||||||
|
|
||||||
|
def natural_sort(iterable): |
||||||
|
return sorted(iterable, key=_nartural_sort_alphanum_key) |
@ -0,0 +1,75 @@ |
|||||||
|
import click |
||||||
|
import shutil |
||||||
|
|
||||||
|
from pathlib import Path |
||||||
|
from datetime import datetime |
||||||
|
|
||||||
|
from ._natural_sort import natural_sort |
||||||
|
|
||||||
|
DEVELOPER_DRIVE = Path("/mnt/e/") |
||||||
|
PATH_ISSUES = DEVELOPER_DRIVE / "Safeguard-MBP-issues" |
||||||
|
PATH_WORKBOOKS = DEVELOPER_DRIVE / "Safeguard MBP Workbooks" |
||||||
|
PATH_WIN_DESKTOP = Path("/mnt/c/Users/Holgi/Desktop") |
||||||
|
|
||||||
|
TODAY = datetime.now().strftime("%y%m%d") |
||||||
|
|
||||||
|
|
||||||
|
def _folder_content(folder): |
||||||
|
nondotted = (i for i in folder.iterdir() if not i.stem.startswith(".")) |
||||||
|
return (i for i in nondotted if not i.stem.startswith("~")) |
||||||
|
|
||||||
|
|
||||||
|
def _files_in_folder(folder, suffix): |
||||||
|
files = (f for f in _folder_content(folder) if f.is_file()) |
||||||
|
return (f for f in files if f.suffix == suffix) |
||||||
|
|
||||||
|
|
||||||
|
def get_latest_version(parent=PATH_ISSUES): |
||||||
|
folders = (i for i in _folder_content(parent) if i.is_dir()) |
||||||
|
versions = natural_sort(f.name for f in folders if f.stem.lower().startswith("v")) |
||||||
|
return versions[-1] |
||||||
|
|
||||||
|
|
||||||
|
def copy_changelog(destination, date, latest): |
||||||
|
textfiles = _files_in_folder(PATH_ISSUES, ".txt") |
||||||
|
changelog = next(f for f in textfiles if f.stem.lower().startswith("change")) |
||||||
|
new_path = destination / f"{date}_CHANGELOG_{latest}.txt" |
||||||
|
print(changelog.name, "->", new_path) |
||||||
|
shutil.copyfile(changelog, new_path) |
||||||
|
|
||||||
|
|
||||||
|
def copy_workbook_changelogs(destination, date, latest): |
||||||
|
source = PATH_ISSUES / latest |
||||||
|
textfiles = _files_in_folder(source, ".txt") |
||||||
|
logs = (f for f in textfiles if f.stem.lower().startswith("change")) |
||||||
|
for log_file in logs: |
||||||
|
parts = log_file.stem.split("_") |
||||||
|
if parts[-1] == latest: |
||||||
|
new_path = destination / f"{date}_{log_file.name}" |
||||||
|
else: |
||||||
|
new_path = destination / f"{date}_{log_file.stem}_{latest}.txt" |
||||||
|
print(log_file.name, "->", new_path) |
||||||
|
shutil.copyfile(log_file, new_path) |
||||||
|
|
||||||
|
|
||||||
|
def copy_workbooks(destination, date, latest): |
||||||
|
for excel_file in _files_in_folder(PATH_WORKBOOKS, ".xlsx"): |
||||||
|
new_path = destination / f"{date}_{excel_file.stem}_{latest}.xlsx" |
||||||
|
print(excel_file.name, "->", new_path) |
||||||
|
shutil.copyfile(excel_file, new_path) |
||||||
|
|
||||||
|
|
||||||
|
@click.command() |
||||||
|
def cli(): |
||||||
|
latest = get_latest_version() |
||||||
|
|
||||||
|
new_folder_name = f"{TODAY} {latest}" |
||||||
|
new_folder_path = PATH_WIN_DESKTOP / new_folder_name |
||||||
|
if new_folder_path.exists(): |
||||||
|
raise IOError(f"Folder exists on desktop: {new_folder_name}") |
||||||
|
else: |
||||||
|
new_folder_path.mkdir() |
||||||
|
|
||||||
|
copy_workbooks(new_folder_path, TODAY, latest) |
||||||
|
copy_workbook_changelogs(new_folder_path, TODAY, latest) |
||||||
|
copy_changelog(new_folder_path, TODAY, latest) |
Loading…
Reference in new issue