diff options
author | Teddy Wing | 2019-06-05 22:57:01 +0200 |
---|---|---|
committer | Teddy Wing | 2019-06-05 23:02:07 +0200 |
commit | c04c1454794b455564dfd8bbf73d8c0c40baa5bd (patch) | |
tree | 493f4da2847a581926cfb89e3addcda67b09df23 /code-review-start | |
parent | ad72a83486b4e2c000c788e0494dc52237fcdcdb (diff) | |
download | code-review-c04c1454794b455564dfd8bbf73d8c0c40baa5bd.tar.bz2 |
Add draft of 'code-review-start'
This command will store the desired merge base for the current branch,
defaulting to "origin/master". In so doing, subsequent `code-review`
subcommands will have access to this and be able to default to a merge
base branch instead of:
* Having users specify one manually at the command line for each
`code-review` subcommand
* Having a default merge base branch that's not desired by users
I figure I can hopefully get away with not sanitizing SQL input because
I don't think you can use apostrophes in Git branch names. Otherwise
I'll probably have to port this to another language with a SQLite
library, as it doesn't seem possible to easily sanitize inputs in Bash.
Diffstat (limited to 'code-review-start')
-rwxr-xr-x | code-review-start | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/code-review-start b/code-review-start new file mode 100755 index 0000000..c5c4ad6 --- /dev/null +++ b/code-review-start @@ -0,0 +1,68 @@ +#!/usr/bin/env bash + +# TODO: save base branch (default to origin/master) paired with current branch. +# Subsequent code-review commands should use this base branch. + +# TODO: think about renaming this to "init" if there's no corresponding "end" +# subcommand. + + +GIT_ROOT="$(git rev-parse --show-toplevel)" +DATABASE="${GIT_ROOT}/.git/info/code-review.sqlite" + +function create_database () { + sqlite3 "$DATABASE" <<-SQL + BEGIN TRANSACTION; + + CREATE TABLE IF NOT EXISTS merge_bases ( + id INTEGER PRIMARY KEY, + head TEXT NOT NULL, + base TEXT NOT NULL + ); + + COMMIT; + SQL +} + +function create_database_if_not_exists () { + if [ ! -f "$DATABASE" ]; then + create_database + fi +} + +function create_merge_base () { + local head="$1" + local base="$2" + + sqlite3 "$DATABASE" <<-SQL + BEGIN TRANSACTION; + + INSERT INTO merge_bases + (head, base) + VALUES + ( + '$head', + '$base' + ); + + COMMIT; + SQL +} + +function create_merge_base_from_current () { + local base="$1" + local current_branch=$(git rev-parse --abbrev-ref HEAD) + + create_merge_base "$current_branch" "$base" +} + + +create_database_if_not_exists + + +merge_base='origin/master' +if [ $# -eq 1 ]; then + merge_base="$1" +fi + +create_merge_base_from_current "$merge_base" |