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.