xpit
Source: git.vandorp.lu/xpit
Summary
xpit is a cross-platform issue tracker implemented in Python.
The reason I created xpit is because the issue tracker is a large source of friction when migrating to a different VCS or hosting provider (or moving to self-hosted). Relying on a platform's issue tracker effectively creates a vendor lock-in with that specific platform. Since we're already using version control, we might as well store the issue tracker inside the repo and let the VCS handle the rest. xpit is designed to be text- and line-based and thus compatible with virtually any VCS.
Overview
xpit is designed to adhere to the Unix philosophy, so the interface is deliberately kept entirely text-based and compatible with common Unix operating system tools like grep, awk, sort, etc.
xpit create
Usage: xpit create [options]
Examples:
xpit create
xpit create -u Bob -i secret_bob_alias -r 20260101_120000:20260101_140000 -x
xpit create -e_ -t "Startup slow" -l performance,startup -d "The window takes 200ms to open."
Options:
-d, --description <str>
The post body.
Defaults to 'Description goes here...'
-x, --disable-inline-annotations
Disable the explanatory ; annotations in newly created posts' headers.
-e, --editor <str>
Which editor to open the issue in.
Pass '_' (underscore) to not open an editor.
If not specified, the editor is chosen in the following order:
1. $XPIT_EDITOR
2. $GIT_EDITOR
3. $EDITOR
4. $VISUAL
5.
windows: "notepad"
other: "vi"
-i, --identity <str>
Label for keypair used for unique identification and signature.
This is used to uniquely identify a user.
Keys are stored in '~/.config/xpit/identities/'.
Defaults to 'default'.
-l, --labels <str>
Comma-separated list of labels applicable to this issue.
Not compatible with --reply-to.
Empty by default.
-r, --reply-to <ISSUE_ID>[:LOCAL_ID]
Reply to an issue or a specific reply within an issue.
-P, --skip-prompt
Skip interactive prompts for missing fields (title, description, labels).
Only applies when using `-e_` (no automatic editor).
-t, --title <str>
The issue's title.
Not compatible with --reply-to.
Defaults to 'Title'.
-u, --username <str>
The username to use for the issue.
If not specified, uses `getpass.getuser()`.
-h, --help
Print this help text.
xpit list
Usage: xpit list [options]
Examples:
xpit list -d , -f TITLE,POST_COUNT
Options:
-d, --delimiter <str>
Delimiter used to separate the fields.
Defaults to '|' (pipe).
-f, --fields <FIELD,...>
Defaults to 'ID,POST_COUNT,TITLE,status,labels'.
Guaranteed fields:
ID - ID of the issue
TITLE - Title of the issue
AUTHOR - Author of the issue
POST_COUNT - Total number of posts in the issue, including the initial post
PATH_ABS - absolute path to issue.md file
PATH_REL - relative path to issue.md file
Other fields are optional and parsed in issues' INI headers.
The fields are printed in order and the same field can be printed more than once.
-h, --help
Print this help text.