#!/usr/bin/env bash # Copyright (c) 2019, 2023 Teddy Wing # # This file is part of Code Review. # # Code Review is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Code Review is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Code Review. If not, see . 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; UPDATE merge_bases SET base = '$base' WHERE head = '$head'; INSERT INTO merge_bases (head, base) SELECT '$head', '$base' WHERE (SELECT changes() = 0); 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 [ -n "$CODE_REVIEW_BASE" ]; then echo "$CODE_REVIEW_BASE"... return 0 fi 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 } create_database_if_not_exists