From 82c973b2e92e45cc91820dc9d471c16f3e27c0ab Mon Sep 17 00:00:00 2001 From: Mirek Kratochvil Date: Sat, 11 Oct 2025 14:36:18 +0200 Subject: [PATCH] initial --- format.sh | 2 ++ patchodon.py | 100 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100755 format.sh create mode 100755 patchodon.py diff --git a/format.sh b/format.sh new file mode 100755 index 0000000..fd6c6a6 --- /dev/null +++ b/format.sh @@ -0,0 +1,2 @@ +#!/bin/sh +black -l80 --unstable . diff --git a/patchodon.py b/patchodon.py new file mode 100755 index 0000000..9ee5565 --- /dev/null +++ b/patchodon.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python3 + +import sys, os +import argparse +import requests + +VERSION = "0.1.0" + + +def main(): + ap = argparse.ArgumentParser( + prog=sys.argv[0], + epilog="patchodon.py version " + VERSION + " is a free software.", + description="Generate metadata from a single document change.", + ) + + cmds = ap.add_subparsers(required=True, dest="command") + + if "POST command": + post = cmds.add_parser("post") + if "API token sources": + group = post.add_mutually_exclusive_group() + group.add_argument( + "--debug-api-token", + help=( + "specify the API token (not very secure, good for debugging" + " only)" + ), + ) + group.add_argument( + "-e", + "--env-api-token", + action="store_true", + help="get the API token from environment PATCHODON_API_TOKEN", + ) + + post.add_argument( + "-i", "--instance-url", help="mastodon instance URL to post to" + ) + post.add_argument( + "-r", "--recipient", help="recipient to tag in the initial post" + ) + post.add_argument( + "patchfile", + nargs="*", + help=( + "filenames of the patch series; taken from stdin if none are" + " specified (useful for piping the output of git-format-patch" + " into patchodon)" + ), + ) + + if "GET command": + get = cmds.add_parser("get") + get.add_argument( + "patch_url", + help=( + "root URL of the status where the patch was posted (the status" + " should contain the patch hash)" + ), + ) + if "output possibilities": + group = get.add_mutually_exclusive_group() + group.add_argument( + "-a", + "--am", + help=( + "apply the patches immediately with git-am instead of" + " storing them in a directory" + ), + ) + group.add_argument( + "-C", + "--out-dir", + help=( + "output the patches into a given directory (by default, `.'" + ), + ) + get.add_argument( + "--overwrite", + action="store_true", + help="overwrite existing patch files instead of renaming", + ) + + ap.add_argument( + "-c", + "--config", + help=( + "specify a custom config INI file (it can specify a section" + " [patchodon] with keys instance_url and api_token), defaults to" + " `$HOME/.patchodon.ini'; specify /dev/null to avoid reading" + " configs" + ), + ) + args = ap.parse_args() + print(args) + + +if __name__ == "__main__": + main()