From c04c1454794b455564dfd8bbf73d8c0c40baa5bd Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Wed, 5 Jun 2019 22:57:01 +0200 Subject: 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. --- code-review-start | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100755 code-review-start 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" -- cgit v1.2.3