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" | 
