Compare commits

...

2 commits

Author SHA1 Message Date
263882fd42 Update readme to include better install instructions 2025-08-22 21:48:01 +02:00
412444eb6e 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.
2025-08-22 21:29:53 +02:00
3 changed files with 70 additions and 12 deletions

View file

@ -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

15
git-tidy → git_tidy.py Executable file → Normal file
View file

@ -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
# <https://www.gnu.org/licenses/>.
"""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])

View file

@ -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]