aboutsummaryrefslogtreecommitdiffstats
path: root/code-review-start
diff options
context:
space:
mode:
authorTeddy Wing2019-06-05 22:57:01 +0200
committerTeddy Wing2019-06-05 23:02:07 +0200
commitc04c1454794b455564dfd8bbf73d8c0c40baa5bd (patch)
tree493f4da2847a581926cfb89e3addcda67b09df23 /code-review-start
parentad72a83486b4e2c000c788e0494dc52237fcdcdb (diff)
downloadcode-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-xcode-review-start68
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"