From 856467fb59340b5b408a6996c2699158ee555834 Mon Sep 17 00:00:00 2001 From: Marco D'Aleo Date: Sat, 8 Nov 2025 08:55:43 +0000 Subject: [PATCH] Move README file to root of repository, minor improvements on core script --- resrm/README.md | 0 .../src/resrm/__pycache__/cli.cpython-313.pyc | Bin 201 -> 201 bytes .../resrm/__pycache__/core.cpython-313.pyc | Bin 15838 -> 14968 bytes resrm/src/resrm/core.py | 32 ++++-------------- 4 files changed, 6 insertions(+), 26 deletions(-) delete mode 100644 resrm/README.md diff --git a/resrm/README.md b/resrm/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/resrm/src/resrm/__pycache__/cli.cpython-313.pyc b/resrm/src/resrm/__pycache__/cli.cpython-313.pyc index efefec203db809c0145bb6fe820a613e4edc47a2..edc56b0c51b410ff3ff51a48eda5beb4d1880c65 100644 GIT binary patch delta 19 ZcmX@fc#@I(GcPX}0}w1{;Gf974*)XA1jhgX delta 19 ZcmX@fc#@I(GcPX}0}veg%QumG9{@O41>OJv diff --git a/resrm/src/resrm/__pycache__/core.cpython-313.pyc b/resrm/src/resrm/__pycache__/core.cpython-313.pyc index 85de009ebc561591f65e42c188f946bbf4f12097..8e178df94877daaa4d4d9e8367b058423e54660c 100644 GIT binary patch delta 2269 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 diff --git a/resrm/src/resrm/core.py b/resrm/src/resrm/core.py index cbaaf87..11c30f8 100644 --- a/resrm/src/resrm/core.py +++ b/resrm/src/resrm/core.py @@ -11,7 +11,6 @@ Basic usage: resrm -l # list trash entries (neat table) resrm --restore # restore by short-id (8 chars) or exact basename resrm --empty # empty trash entries (permanent) - resrm --complete-restore # machine-friendly list for completion (internal) """ from __future__ import annotations @@ -52,10 +51,6 @@ def get_trash_paths() -> tuple[Path, Path]: TRASH_DIR, META_FILE = get_trash_paths() - - -TRASH_DIR, META_FILE = get_trash_paths() - DATEFMT = "%Y-%m-%d %H:%M" def load_meta() -> List[Dict]: @@ -77,10 +72,14 @@ def short_id(fullid: str) -> str: return fullid[:8] def human_time(ts: str) -> str: - # ts is ISO format + """ + Convert ISO timestamp string from metadata to a human-readable format. + """ try: - return ts[:19] # YYYY-MM-DDTHH:MM:SS + dt = datetime.datetime.fromisoformat(ts) + return dt.strftime(DATEFMT) except Exception: + # Fallback: just return the raw string return ts def entry_display(entry: Dict, width: int = 80) -> str: @@ -265,18 +264,6 @@ def move_to_trash(path: Path, interactive: bool, force: bool, recursive: bool, p print(f"Removed '{path}' -> trash id {short_id(uid)}") -def complete_restore(prefix: str): - # prints suggestions line by line for shell completion - out = [] - for e in meta: - name = Path(e["orig_path"]).name - if name.startswith(prefix) or short_id(e["id"]).startswith(prefix): - out.append(name) - out.append(short_id(e["id"])) - # unique and print - for x in sorted(set(out)): - print(x) - def main(argv: Optional[List[str]] = None): if argv is None: argv = sys.argv[1:] @@ -289,7 +276,6 @@ def main(argv: Optional[List[str]] = None): parser.add_argument("--restore", nargs=1, help="restore by id or basename") parser.add_argument("-l", action="store_true", help="list trash") parser.add_argument("--empty", action="store_true", help="empty the trash permanently") - parser.add_argument("--complete-restore", nargs=1, help=argparse.SUPPRESS) parser.add_argument("--help", action="store_true", help="show help") args = parser.parse_args(argv) @@ -298,12 +284,6 @@ def main(argv: Optional[List[str]] = None): print(__doc__) return - # internal completion hook - if args.complete_restore: - prefix = args.complete_restore[0] or "" - complete_restore(prefix) - return - if args.l: list_trash() return