aboutsummaryrefslogtreecommitdiffstats
path: root/code-review-database
diff options
context:
space:
mode:
Diffstat (limited to 'code-review-database')
-rw-r--r--code-review-database74
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
+}