From 412444eb6e4dbe75c76afde7419adffe212b59f5 Mon Sep 17 00:00:00 2001 From: James Smith Date: Fri, 22 Aug 2025 21:01:53 +0200 Subject: [PATCH 1/2] Flesh out pyproject.toml to allow properly installing Mostly because I'd like to be able to install it with uv, so it's entirely for selfish reasons. --- git-tidy => git_tidy.py | 15 ++++++++++--- pyproject.toml | 49 +++++++++++++++++++++++++++++++++++++---- 2 files changed, 57 insertions(+), 7 deletions(-) rename git-tidy => git_tidy.py (93%) mode change 100755 => 100644 diff --git a/git-tidy b/git_tidy.py old mode 100755 new mode 100644 similarity index 93% rename from git-tidy rename to git_tidy.py index 951dd08..820ac80 --- a/git-tidy +++ b/git_tidy.py @@ -1,21 +1,26 @@ #!/usr/bin/env python3 - +# Copyright 2023-2025 James Smith # git-tidy 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 3 of the # License, or (at your option) any later version. - # git-tidy 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 git-tidy. If not, see # . """git-tidy utility.""" +import argparse import subprocess import sys from typing import List, Tuple, Union +try: + from importlib.metadata import version +except ImportError: + # Python < 3.8 + from importlib_metadata import version + common_default_branches = [ "main", "master", @@ -127,6 +132,10 @@ def get_default_branch() -> str: def main(): """Main function.""" + parser = argparse.ArgumentParser(description="A time-saving device for a developer using git.") + parser.add_argument("--version", action="version", version=f"git-tidy {version('git-tidy-python')}") + parser.parse_args() + default_branch = get_default_branch() print(f"Switching to {default_branch}") run(["git", "checkout", default_branch]) diff --git a/pyproject.toml b/pyproject.toml index 7c77a5d..4ed51b9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,13 +1,54 @@ -[tool.black] +[build-system] +requires = ["setuptools>=45", "setuptools-scm[toml]>=6.2", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "git-tidy-python" +dynamic = ["version"] +description = "A time-saving device for a developer using git." +authors = [ + {name = "James Smith"} +] +readme = "README.md" +license = {text = "GPL-3.0-or-later"} +requires-python = ">=3.8" +dependencies = [] +keywords = ["git", "cli", "developer-tools", "automation", "branch-management"] +classifiers = [ + "Development Status :: 4 - Beta", + "Environment :: Console", + "Intended Audience :: Developers", + "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Software Development :: Version Control :: Git", + "Topic :: Utilities" +] + +[project.scripts] +git-tidy = "git_tidy:main" + +[tool.setuptools] +py-modules = ["git_tidy"] + +[tool.ruff] line-length = 120 -include = '\.pyi?$' exclude =''' /( - | \.git - | \.mypy_cache + | \.git + | \.mypy_cache )/ ''' [tool.isort] profile = "black" line_length = 120 + +[tool.setuptools_scm] From 263882fd427a6f9a4bdfc4d409a4ffdcc2b165db Mon Sep 17 00:00:00 2001 From: James Smith Date: Fri, 22 Aug 2025 21:48:01 +0200 Subject: [PATCH 2/2] Update readme to include better install instructions --- README.md | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 01f82b0..fab9e60 100644 --- a/README.md +++ b/README.md @@ -14,20 +14,29 @@ git fetch --all --prune # prune is to delete unnecessary remote refs git merge origin/main main --ff-only git branch --merged | grep -v main | xargs git branch -d ``` - with some extra convenience and (I hope) safety features. ## Using -The actual script is named `git-tidy`. After cloning, you can copy (or symlink) -it to somewhere on your path (I use `~/bin/`). +The actual script is named `git_tidy.py`. After cloning, you can copy (or symlink) +it to somewhere on your path (e.g. `~/bin/git-tidy`). + +Alternatively, you can use a package manager such as +[`uv`](https://docs.astral.sh/uv/concepts/tools/). My personal preference is +this, as `uv` will place the tool on the PATH for you and you can get straight +to using it. + +```bash +uv tool install https://codeberg.org/james-smith-za/git-tidy-python.git +``` Then when you `cd` to your git repository, you can type ```bash git tidy ``` and it'll do its thing! Only the Python standard library is used, no additional -packages are required. +packages are required. I have tested (manually) with Python 3.8 through to +3.13, so I would imagine that future versions should work just fine. ## Background @@ -36,7 +45,6 @@ redo this program in Go at some point, which will make it easier to distribute for people who don't have Python installed by default (i.e. Windows users). But I'm not sure when I'll get to that. - ## TODO I'd like to actually get a set of unit-tests in place, but I'm not sure how to