#+TITLE: Shackle Shell #+AUTHOR: Justin Wernick A shell for restricting access on a version control server. This is intended as a replacement for [[https://git-scm.com/docs/git-shell][Git Shell]], but with a few opinionated differences: - Additional commands, like creating new repos, are built in. No extension with shell scripts. - Strict enforcement of a specified directory structure. Git push / pull commands only work for these paths. New repos are created in these paths. - Private git repos are created in =~/git//.git= - Shared git repos are created in =~/git//.git= - Better interactive UX than Git Shell, including: - Command history (limited to the current session). - Emacs-style shortcuts (eg =Ctrl+a= to move cursor to the beginning of line). - Docs available for all commands, available in the shell itself. - (coming soon!) Support for other other version control systems. * Getting Started ** Usage # TODO ** Installation # TODO * Development Guide # TODO * Roadmap / Issue Tracker TODO list ** MVP - [X] interactive command prompt - [X] non-interactive commands can be run with -c - [X] exit command - [X] git init of private repo - [X] responds to unknown commands - [X] Isolation of workdir between tests - [X] git fetch with git upload-pack - [X] git push with git receive-pack - [X] proper shell argument lexing, with quote stuff - [X] history (only within same session) - [X] don't quit interactive shell sessions if there's an error - [X] help command - [X] restrict repos to only acceptable paths - [X] clone / pull - [X] push - [X] git init of shared repos - [X] create the shared repo in the right place - [X] use the right file permissions and config - [X] don't allow this to be a group the user isn't in - [X] allow pull and push from shared repos - [X] listing of repos - [X] set repo descriptions - [X] init new repo - [X] change an existing repo - [X] Change ~git-init~ name to just be ~init~. Later, the ~git~ part will be an option which defaults to git. - [X] set the main branch of a repo - [X] help docs on all the commands ** Post-MVP - [X] proper licensing - [ ] functions correctly when the git path isn't created yet - [ ] git archive with git upload-archive - [ ] git config management around protected branches - [ ] move a repo to a different group - [ ] housekeeping git tasks (git fsck, git gc) - [ ] pijul fetch and pijul push - [ ] pijul support on other commands - [ ] project website * License Licensed under [[./LICENSE][MIT License]].