Skip to content

Commit d7d2b15

Browse files
author
Tim
committed
Fix rebase abort explicit transaction state
1 parent db62caf commit d7d2b15

3 files changed

Lines changed: 72 additions & 0 deletions

File tree

src/doltlite.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3968,6 +3968,14 @@ static void doltliteRebaseInteractiveAbort(
39683968
** doesn't leak stale values. */
39693969
rebaseDiscardWorkingBranch(db, zOrigBranch, zWorking);
39703970

3971+
rc = doltliteVcSealBranchStyleTxn(db);
3972+
if( rc!=SQLITE_OK ){
3973+
sqlite3_free(zOrigBranch);
3974+
sqlite3_free(zWorking);
3975+
sqlite3_result_error_code(context, rc);
3976+
return;
3977+
}
3978+
39713979
sqlite3_free(zOrigBranch);
39723980
sqlite3_free(zWorking);
39733981
sqlite3_result_text(context, "Interactive rebase aborted", -1, SQLITE_STATIC);

test/doltlite_savepoint.sh

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -678,6 +678,33 @@ run_test "rebase_abort_savepoint_reopen_no_plan_table" \
678678
"SELECT count(*) FROM sqlite_master WHERE type='table' AND name='dolt_rebase';" \
679679
"0" "$DB7e"
680680

681+
DB7e1=/tmp/test_savepoint7e1_$$.db; rm -f "$DB7e1"
682+
echo "CREATE TABLE t(id INTEGER PRIMARY KEY, v INT); INSERT INTO t VALUES(1,1); SELECT dolt_add('-A'); SELECT dolt_commit('-m','init'); SELECT dolt_checkout('-b','feat'); INSERT INTO t VALUES(2,2); SELECT dolt_add('-A'); SELECT dolt_commit('-m','f1'); SELECT dolt_checkout('main'); INSERT INTO t VALUES(10,10); SELECT dolt_add('-A'); SELECT dolt_commit('-m','m1'); SELECT dolt_checkout('feat'); SELECT dolt_rebase('-i','main'); BEGIN; SELECT dolt_rebase('--abort'); COMMIT;" | $DOLTLITE "$DB7e1" > /dev/null 2>&1
683+
run_test "rebase_abort_explicit_txn_reopen_main" \
684+
"SELECT active_branch();" \
685+
"main" "$DB7e1"
686+
run_test "rebase_abort_explicit_txn_reopen_no_rebase_branch" \
687+
"SELECT count(*) FROM dolt_branches WHERE name='dolt_rebase_feat';" \
688+
"0" "$DB7e1"
689+
run_test "rebase_abort_explicit_txn_reopen_main_rows" \
690+
"SELECT count(*) FROM t;" \
691+
"2" "$DB7e1"
692+
693+
DB7e2=/tmp/test_savepoint7e2_$$.db; rm -f "$DB7e2"
694+
echo "CREATE TABLE t(id INTEGER PRIMARY KEY, v INT); INSERT INTO t VALUES(1,1); SELECT dolt_add('-A'); SELECT dolt_commit('-m','init'); SELECT dolt_checkout('-b','feat'); UPDATE t SET v=2 WHERE id=1; SELECT dolt_add('-A'); SELECT dolt_commit('-m','f1'); SELECT dolt_checkout('main'); UPDATE t SET v=3 WHERE id=1; SELECT dolt_add('-A'); SELECT dolt_commit('-m','m1'); SELECT dolt_checkout('feat'); SELECT dolt_rebase('-i','main'); SELECT dolt_conflicts_resolve('--theirs','t'); BEGIN; SELECT dolt_rebase('--abort'); COMMIT;" | $DOLTLITE "$DB7e2" > /dev/null 2>&1
695+
run_test "rebase_abort_after_resolve_explicit_txn_reopen_main" \
696+
"SELECT active_branch();" \
697+
"main" "$DB7e2"
698+
run_test "rebase_abort_after_resolve_explicit_txn_reopen_no_rebase_branch" \
699+
"SELECT count(*) FROM dolt_branches WHERE name='dolt_rebase_feat';" \
700+
"0" "$DB7e2"
701+
run_test "rebase_abort_after_resolve_explicit_txn_reopen_no_conflicts" \
702+
"SELECT count(*) FROM dolt_conflicts;" \
703+
"0" "$DB7e2"
704+
run_test "rebase_abort_after_resolve_explicit_txn_reopen_main_value" \
705+
"SELECT v FROM t WHERE id=1;" \
706+
"3" "$DB7e2"
707+
681708
DB7f=/tmp/test_savepoint7f_$$.db; rm -f "$DB7f"
682709
echo "CREATE TABLE t(id INTEGER PRIMARY KEY, v INT); INSERT INTO t VALUES(1,1); SELECT dolt_add('-A'); SELECT dolt_commit('-m','init'); SELECT dolt_checkout('-b','feat'); INSERT INTO t VALUES(2,2); SELECT dolt_add('-A'); SELECT dolt_commit('-m','f1'); SELECT dolt_checkout('main'); INSERT INTO t VALUES(10,10); SELECT dolt_add('-A'); SELECT dolt_commit('-m','m1'); SELECT dolt_checkout('feat'); SAVEPOINT sp1; SELECT dolt_rebase('-i','main'); SELECT dolt_rebase('--continue'); ROLLBACK TO sp1;" | $DOLTLITE "$DB7f" > /dev/null 2>&1
683710
run_test "rebase_continue_top_savepoint_reopen_main" \

test/vc_oracle_rebase_test.sh

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,43 @@ SELECT dolt_rebase('--abort');
529529
ROLLBACK TO sp1;
530530
"
531531

532+
oracle_reopen "interactive_abort_explicit_txn_reopen" "
533+
$INTERACTIVE_SETUP
534+
SELECT dolt_rebase('-i', 'main');
535+
BEGIN;
536+
SELECT dolt_rebase('--abort');
537+
COMMIT;
538+
" "
539+
SELECT CONCAT('LOG|B|', active_branch());
540+
SELECT CONCAT('LOG|W|', count(*)) FROM dolt_branches WHERE name='dolt_rebase_feat';
541+
SELECT CONCAT('LOG|T|', count(*)) FROM t;
542+
SELECT CONCAT('LOG|L|', count(*)-1) FROM dolt_log;
543+
"
544+
545+
oracle_reopen "interactive_abort_after_resolve_explicit_txn_reopen" "
546+
CREATE TABLE t(id INTEGER PRIMARY KEY, v INT);
547+
INSERT INTO t VALUES (1, 1);
548+
SELECT dolt_add('-A'); SELECT dolt_commit('-m', 'init');
549+
SELECT dolt_checkout('-b', 'feat');
550+
UPDATE t SET v = 2 WHERE id = 1;
551+
SELECT dolt_add('-A'); SELECT dolt_commit('-m', 'f1');
552+
SELECT dolt_checkout('main');
553+
UPDATE t SET v = 3 WHERE id = 1;
554+
SELECT dolt_add('-A'); SELECT dolt_commit('-m', 'm1');
555+
SELECT dolt_checkout('feat');
556+
SELECT dolt_rebase('-i', 'main');
557+
SELECT dolt_conflicts_resolve('--theirs', 't');
558+
BEGIN;
559+
SELECT dolt_rebase('--abort');
560+
COMMIT;
561+
" "
562+
SELECT CONCAT('LOG|B|', active_branch());
563+
SELECT CONCAT('LOG|W|', count(*)) FROM dolt_branches WHERE name='dolt_rebase_feat';
564+
SELECT CONCAT('LOG|C|', count(*)) FROM dolt_conflicts;
565+
SELECT CONCAT('LOG|V|', v) FROM t WHERE id = 1;
566+
SELECT CONCAT('LOG|L|', count(*)-1) FROM dolt_log;
567+
"
568+
532569
# --continue is an error when not in an interactive rebase.
533570
oracle_error "continue_without_active" "
534571
CREATE TABLE t(id INTEGER PRIMARY KEY);

0 commit comments

Comments
 (0)