mirror of
https://github.com/dolthub/dolt.git
synced 2026-01-17 18:50:25 -06:00
254 lines
6.0 KiB
Bash
254 lines
6.0 KiB
Bash
#!/usr/bin/env bats
|
|
load $BATS_TEST_DIRNAME/helper/common.bash
|
|
|
|
setup() {
|
|
setup_common
|
|
TMPDIRS=$(pwd)/tmpdirs
|
|
mkdir -p $TMPDIRS/{rem1,bac1,repo1}
|
|
|
|
# repo1 -> rem1 -> repo2
|
|
cd $TMPDIRS/repo1
|
|
dolt init
|
|
dolt tag v1
|
|
dolt sql -q "create table t1 (a int)"
|
|
dolt add .
|
|
dolt commit -am "cm"
|
|
dolt branch feature
|
|
dolt remote add origin file://../rem1
|
|
dolt push origin main
|
|
cd $TMPDIRS
|
|
}
|
|
|
|
teardown() {
|
|
teardown_common
|
|
rm -rf $TMPDIRS
|
|
cd $BATS_TMPDIR
|
|
}
|
|
|
|
@test "backup: add named backup" {
|
|
cd repo1
|
|
dolt backup add bac1 file://../bac1
|
|
run dolt backup -v
|
|
[ "$status" -eq 0 ]
|
|
[ "${#lines[@]}" -eq 1 ]
|
|
[[ "$output" =~ "bac1" ]] || false
|
|
}
|
|
|
|
@test "backup: remove named backup" {
|
|
cd repo1
|
|
dolt backup add bac1 file://../bac1
|
|
run dolt backup -v
|
|
[ "$status" -eq 0 ]
|
|
[ "${#lines[@]}" -eq 1 ]
|
|
[[ "$output" =~ "bac1" ]] || false
|
|
|
|
dolt backup remove bac1
|
|
|
|
run dolt backup -v
|
|
[ "$status" -eq 0 ]
|
|
[ "${#lines[@]}" -eq 0 ]
|
|
[[ ! "$output" =~ "bac1" ]] || false
|
|
}
|
|
|
|
@test "backup: rm named backup" {
|
|
cd repo1
|
|
dolt backup add bac1 file://../bac1
|
|
run dolt backup -v
|
|
[ "$status" -eq 0 ]
|
|
[ "${#lines[@]}" -eq 1 ]
|
|
[[ "$output" =~ "bac1" ]] || false
|
|
|
|
dolt backup rm bac1
|
|
|
|
run dolt backup -v
|
|
[ "$status" -eq 0 ]
|
|
[ "${#lines[@]}" -eq 0 ]
|
|
[[ ! "$output" =~ "bac1" ]] || false
|
|
}
|
|
|
|
@test "backup: removing a backup with the same name as a remote does not impact remote tracking refs" {
|
|
cd repo1
|
|
dolt backup add origin file://../bac1
|
|
dolt backup remove origin
|
|
|
|
run dolt sql -q "show tables as of hashof('origin/main')" -r csv
|
|
[ "$status" -eq 0 ]
|
|
[ "${#lines[@]}" -eq 2 ]
|
|
[[ "${lines[0]}" =~ "Table" ]] || false
|
|
[[ "${lines[1]}" =~ "t1" ]] || false
|
|
}
|
|
|
|
@test "backup: sync master to backup" {
|
|
cd repo1
|
|
dolt backup add bac1 file://../bac1
|
|
dolt backup sync bac1
|
|
|
|
cd ..
|
|
run dolt backup restore file://./bac1 repo2
|
|
cd repo2
|
|
run dolt ls
|
|
[ "$status" -eq 0 ]
|
|
[ "${#lines[@]}" -eq 2 ]
|
|
[[ "$output" =~ "t1" ]] || false
|
|
}
|
|
|
|
@test "backup: sync feature to backup" {
|
|
cd repo1
|
|
dolt backup add bac1 file://../bac1
|
|
dolt backup sync bac1
|
|
|
|
cd ..
|
|
dolt backup restore file://./bac1 repo2
|
|
cd repo2
|
|
run dolt branch
|
|
[ "$status" -eq 0 ]
|
|
[ "${#lines[@]}" -eq 2 ]
|
|
[[ "$output" =~ "* main" ]] || false
|
|
[[ "$output" =~ "feature" ]] || false
|
|
}
|
|
|
|
@test "backup: sync tag to backup" {
|
|
cd repo1
|
|
dolt backup add bac1 file://../bac1
|
|
dolt backup sync bac1
|
|
|
|
cd ..
|
|
dolt backup restore file://./bac1 repo2
|
|
cd repo2
|
|
run dolt tag
|
|
[ "$status" -eq 0 ]
|
|
[ "${#lines[@]}" -eq 1 ]
|
|
[[ "$output" =~ "v1" ]] || false
|
|
}
|
|
|
|
@test "backup: sync remote ref to backup" {
|
|
cd repo1
|
|
dolt backup add bac1 file://../bac1
|
|
dolt backup sync bac1
|
|
|
|
cd ..
|
|
dolt backup restore file://./bac1 repo2
|
|
cd repo2
|
|
run dolt sql -q "show tables as of hashof('origin/main')" -r csv
|
|
[ "$status" -eq 0 ]
|
|
[ "${#lines[@]}" -eq 2 ]
|
|
[[ "$output" =~ "t1" ]] || false
|
|
}
|
|
|
|
@test "backup: sync working set to backup" {
|
|
cd repo1
|
|
dolt sql -q "create table t2 (a int)"
|
|
dolt add t2
|
|
dolt backup add bac1 file://../bac1
|
|
dolt backup sync bac1
|
|
|
|
cd ..
|
|
dolt backup restore file://./bac1 repo2
|
|
cd repo2
|
|
run dolt status
|
|
[ "$status" -eq 0 ]
|
|
[[ "$output" =~ "t2" ]] || false
|
|
}
|
|
|
|
@test "backup: no origin on restore" {
|
|
cd repo1
|
|
dolt backup add bac1 file://../bac1
|
|
dolt backup sync bac1
|
|
|
|
cd ..
|
|
run dolt backup restore file://./bac1 repo2
|
|
cd repo2
|
|
run dolt remote -v
|
|
[ "$status" -eq 0 ]
|
|
[ "${#lines[@]}" -eq 0 ]
|
|
[[ ! "$output" =~ "origin" ]] || false
|
|
}
|
|
|
|
@test "backup: backup already up to date" {
|
|
cd repo1
|
|
dolt backup add bac1 file://../bac1
|
|
dolt backup sync bac1
|
|
dolt backup sync bac1
|
|
}
|
|
|
|
@test "backup: no backup exists" {
|
|
cd repo1
|
|
run dolt backup sync bac1
|
|
[ "$status" -eq 1 ]
|
|
[[ ! "$output" =~ "panic" ]] || false
|
|
[[ "$output" =~ "unknown backup: 'bac1'" ]] || false
|
|
}
|
|
|
|
@test "backup: cannot override another client's backup" {
|
|
skip "todo implement backup lock file"
|
|
cd repo1
|
|
dolt backup add bac1 file://../bac1
|
|
dolt backup sync bac1
|
|
|
|
cd .. && mkdir repo2 && cd repo2
|
|
dolt init
|
|
dolt sql -q "create table s1 (a int)"
|
|
dolt add .
|
|
dolt commit -am "cm"
|
|
|
|
dolt backup add bac1 file://../bac1
|
|
dolt backup sync bac1
|
|
[ "$status" -eq 1 ]
|
|
[[ ! "$output" =~ "panic" ]] || false
|
|
[[ "$output" =~ "unknown backup: 'bac1'" ]] || false
|
|
}
|
|
|
|
@test "backup: cannot clone a backup" {
|
|
skip "todo implement backup lock file"
|
|
|
|
cd repo1
|
|
dolt backup add bac1 file://../bac1
|
|
dolt backup sync bac1
|
|
|
|
cd ..
|
|
dolt clone file://./bac1 repo2
|
|
[ "$status" -eq 1 ]
|
|
[[ ! "$output" =~ "panic" ]] || false
|
|
[[ "$output" =~ "cannot clone backup" ]] || false
|
|
}
|
|
|
|
@test "backup: cannot add backup with address of existing remote" {
|
|
cd repo1
|
|
dolt remote add rem1 file://../bac1
|
|
run dolt backup add bac1 file://../bac1
|
|
[ "$status" -eq 1 ]
|
|
[[ ! "$output" =~ "panic" ]] || false
|
|
[[ "$output" =~ "address conflict with a remote: 'rem1'" ]] || false
|
|
}
|
|
|
|
@test "backup: cannot add backup with address of existing backup" {
|
|
cd repo1
|
|
dolt backup add bac1 file://../bac1
|
|
run dolt backup add bac2 file://../bac1
|
|
[ "$status" -eq 1 ]
|
|
[[ ! "$output" =~ "panic" ]] || false
|
|
[[ "$output" =~ "address conflict with a remote: 'bac1'" ]] || false
|
|
}
|
|
|
|
@test "backup: cannot add remote with address of existing backup" {
|
|
cd repo1
|
|
dolt backup add bac1 file://../bac1
|
|
run dolt remote add rem1 file://../bac1
|
|
[ "$status" -eq 1 ]
|
|
[[ ! "$output" =~ "panic" ]] || false
|
|
[[ "$output" =~ "address conflict with a remote: 'bac1'" ]] || false
|
|
}
|
|
|
|
@test "backup: sync-url" {
|
|
cd repo1
|
|
dolt backup sync-url file://../bac1
|
|
|
|
cd ..
|
|
run dolt backup restore file://./bac1 repo2
|
|
cd repo2
|
|
run dolt ls
|
|
[ "$status" -eq 0 ]
|
|
[ "${#lines[@]}" -eq 2 ]
|
|
[[ "$output" =~ "t1" ]] || false
|
|
}
|