diff options
Diffstat (limited to 'code-review-database')
-rw-r--r-- | code-review-database | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/code-review-database b/code-review-database new file mode 100644 index 0000000..642f9c4 --- /dev/null +++ b/code-review-database @@ -0,0 +1,74 @@ +#!/usr/bin/env bash + +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" + + # TODO: Change to upsert or equivalent + 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" + + create_merge_base "$(current_branch)" "$base" +} + +function get_merge_base () { + local head="$(current_branch)" + local default_base='master' + + if git config remote.origin.url > /dev/null; then + default_base='origin/master' + fi + + sqlite3 "$DATABASE" <<-SQL + BEGIN TRANSACTION; + + SELECT ifnull(max(base), '$default_base') + FROM merge_bases + WHERE head = '$head' + LIMIT 1; + + COMMIT; + SQL +} + +function current_branch () { + git rev-parse --abbrev-ref HEAD +} |