Files
dolt/bats/docs.bats
2021-02-15 11:14:00 -08:00

840 lines
28 KiB
Bash

#!/usr/bin/env bats
load $BATS_TEST_DIRNAME/helper/common.bash
setup() {
setup_common
}
teardown() {
assert_feature_version
teardown_common
}
@test "dolt status and ls to view supported docs on dolt init" {
echo license-text > LICENSE.md
echo readme-text > README.md
run ls
[[ "$output" =~ "LICENSE.md" ]] || false
[[ "$output" =~ "README.md" ]] || false
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "On branch master" ]] || false
[[ "$output" =~ "Untracked files" ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*LICENSE.md) ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*README.md) ]] || false
run cat LICENSE.md
[ "$output" = "license-text" ]
run cat README.md
[ "$output" = "readme-text" ]
touch INVALID.md
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "On branch master" ]] || false
[[ "$output" =~ "Untracked files" ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*LICENSE.md) ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*README.md) ]] || false
[[ ! "$output" =~ "INVALID.md" ]] || false
}
@test "dolt add . and dolt commit dolt docs" {
echo testing123 > LICENSE.md
echo testing456 > README.md
run dolt add dolt_docs
[ "$status" -eq 1 ]
[[ "$output" =~ "'dolt_docs' is not a valid table name" ]] || false
dolt add .
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "On branch master" ]] || false
[[ "$output" =~ "Changes to be committed:" ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*LICENSE.md) ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*README.md) ]] || false
run dolt commit -m "adding license and readme"
[ "$status" -eq 0 ]
[[ "$output" =~ "adding license and readme" ]] || false
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "nothing to commit, working tree clean" ]] || false
rm LICENSE.md
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "Changes not staged for commit:" ]] || false
[[ "$output" =~ deleted:[[:space:]]*LICENSE.md ]] || false
dolt add .
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "Changes to be committed:" ]] || false
[[ "$output" =~ ([[:space:]]*deleted:[[:space:]]*LICENSE.md) ]] || false
dolt commit -m "delete license"
run ls
[[ ! "$output" =~ "LICENSE.md" ]] || false
}
@test "dolt add . and dolt commit dolt docs with another table" {
echo license-text > LICENSE.md
echo readme-text > README.md
dolt add .
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "On branch master" ]] || false
[[ "$output" =~ "Changes to be committed:" ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*LICENSE.md) ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*README.md) ]] || false
dolt sql <<SQL
CREATE TABLE test (
pk BIGINT NOT NULL COMMENT 'tag:0',
c1 BIGINT COMMENT 'tag:1',
c2 BIGINT COMMENT 'tag:2',
c3 BIGINT COMMENT 'tag:3',
c4 BIGINT COMMENT 'tag:4',
c5 BIGINT COMMENT 'tag:5',
PRIMARY KEY (pk)
);
SQL
dolt add test
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "Changes to be committed:" ]] || false
[[ "$output" =~ ([[:space:]]*new table:[[:space:]]*test) ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*LICENSE.md) ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*README.md) ]] || false
dolt commit -m "adding license and readme, and test table"
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "On branch master" ]] || false
[[ "$output" =~ "nothing to commit, working tree clean" ]] || false
}
@test "dolt add LICENSE.md stages license" {
echo "new license" > LICENSE.md
echo "new readme" > README.md
dolt add LICENSE.md
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "On branch master" ]] || false
[[ "$output" =~ "Changes to be committed:" ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*LICENSE.md) ]] || false
[[ "$output" =~ "Untracked files:" ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*README.md) ]] || false
run dolt commit -m "license commit"
[ "$status" -eq 0 ]
[[ "$output" =~ "license commit" ]] || false
}
@test "dolt add README.md stages readme" {
echo "new license" > LICENSE.md
echo "new readme" > README.md
dolt add README.md
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "On branch master" ]] || false
[[ "$output" =~ "Changes to be committed:" ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*README.md) ]] || false
[[ "$output" =~ "Untracked files:" ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*LICENSE.md) ]] || false
run dolt commit -m "readme commit"
[ "$status" -eq 0 ]
[[ "$output" =~ "readme commit" ]] || false
}
@test "dolt add doesn't add files that are not LICENSE.md or README.md" {
touch README.md
touch LICENSE.md
touch invalid
run dolt add README.md invalid
[ "$status" -eq 1 ]
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "Untracked files" ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*README.md) ]] || false
[[ ! "$output" =~ "invalid" ]] || false
run dolt add invalid LICENSE.md
[ "$status" -eq 1 ]
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "Untracked files" ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*LICENSE.md) ]] || false
[[ ! "$output" =~ "invalid" ]] || false
run dolt add invalid README.md LICENSE.md
[ "$status" -eq 1 ]
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "Untracked files" ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*LICENSE.md) ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*README.md) ]] || false
}
@test "dolt reset --hard should move doc files to untracked files when there are no doc values on the head commit" {
echo readme-content > README.md
echo license-content > LICENSE.md
dolt reset --hard
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "Untracked files" ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*LICENSE.md) ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*README.md) ]] || false
run ls
[[ "$output" =~ "LICENSE.md" ]] || false
[[ "$output" =~ "README.md" ]] || false
dolt add .
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "Changes to be committed:" ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*LICENSE.md) ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*README.md) ]] || false
dolt reset --hard
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "Untracked files" ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*LICENSE.md) ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*README.md) ]] || false
}
@test "dolt reset --hard should update doc files on the fs when doc values exist on the head commit" {
echo license-text > LICENSE.md
echo readme-text > README.md
dolt add .
dolt commit -m "first docs commit"
echo updated readme > README.md
dolt status
dolt reset --hard
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "nothing to commit, working tree clean" ]] || false
run cat README.md
[ "$output" = readme-text ]
echo newLicenseText > LICENSE.md
dolt sql <<SQL
CREATE TABLE test (
pk BIGINT NOT NULL COMMENT 'tag:0',
c1 BIGINT COMMENT 'tag:1',
c2 BIGINT COMMENT 'tag:2',
c3 BIGINT COMMENT 'tag:3',
c4 BIGINT COMMENT 'tag:4',
c5 BIGINT COMMENT 'tag:5',
PRIMARY KEY (pk)
);
SQL
dolt add test LICENSE.md
dolt reset --hard
run dolt status
[ "$status" -eq 0 ]
[ "$status" -eq 0 ]
[[ "$output" =~ "nothing to commit, working tree clean" ]] || false
run cat LICENSE.md
[ "$output" = "license-text" ]
}
@test "dolt reset . should remove docs from staging area" {
echo ~license~ > LICENSE.md
echo ~readme~ > README.md
dolt add .
dolt reset .
run dolt status
[ "$status" -eq 0 ]
[[ ! "$output" =~ "Changes to be committed:" ]] || false
[[ "$output" =~ "Untracked files:" ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*LICENSE.md) ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*README.md) ]] || false
dolt add .
dolt commit -m "initial doc commit"
echo ~new-text~ > README.md
dolt add .
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "Changes to be committed:" ]] || false
[[ "$output" =~ ([[:space:]]*modified:[[:space:]]*README.md) ]] || false
run dolt reset .
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "Changes not staged for commit:" ]] || false
[[ "$output" =~ ([[:space:]]*modified:[[:space:]]*README.md) ]] || false
run cat README.md
[[ "$output" =~ "~new-text~" ]]
}
@test "dolt reset --soft should remove docs from staging area" {
echo ~license~ > LICENSE.md
echo ~readme~ > README.md
dolt add .
dolt reset --soft
run dolt status
[ "$status" -eq 0 ]
[[ ! "$output" =~ "Changes to be committed:" ]] || false
[[ "$output" =~ "Untracked files:" ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*LICENSE.md) ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*README.md) ]] || false
dolt add .
dolt commit -m "initial doc commit"
echo ~new-text~ > README.md
dolt add .
dolt reset --soft
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "Changes not staged for commit:" ]] || false
[[ "$output" =~ ([[:space:]]*modified:[[:space:]]*README.md) ]] || false
run cat README.md
[[ "$output" =~ "~new-text~" ]]
}
@test "dolt reset should remove docs from staging area" {
echo ~license~ > LICENSE.md
echo ~readme~ > README.md
dolt add .
dolt reset
run dolt status
[ "$status" -eq 0 ]
[[ ! "$output" =~ "Changes to be committed:" ]] || false
[[ "$output" =~ "Untracked files:" ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*LICENSE.md) ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*README.md) ]] || false
dolt add .
dolt commit -m "initial doc commit"
echo ~new-text~ > README.md
dolt add .
dolt reset
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "Changes not staged for commit:" ]] || false
[[ "$output" =~ ([[:space:]]*modified:[[:space:]]*README.md) ]] || false
run cat README.md
[[ "$output" =~ "~new-text~" ]]
}
@test "dolt reset <doc> should remove doc from staging area" {
echo "license" > LICENSE.md
echo "readme" > README.md
dolt add LICENSE.md
run dolt reset dolt_docs
[ "$status" -eq 1 ]
[[ "$output" =~ "'dolt_docs' is not a valid table name" ]] || false
dolt reset LICENSE.md
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "Untracked files:" ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*LICENSE.md) ]] || false
dolt add .
run dolt reset LICENSE.md invalid
[ "$status" -eq 1 ]
[[ "$output" =~ "Invalid Table(s)" ]] || false
[[ "$output" =~ "invalid" ]] || false
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "Changes to be committed:" ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*LICENSE.md) ]] || false
dolt reset README.md
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "Changes to be committed:" ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*LICENSE.md) ]] || false
dolt commit -m "initial license commit"
echo new > LICENSE.md
dolt add .
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "Changes to be committed:" ]] || false
[[ "$output" =~ ([[:space:]]*modified:[[:space:]]*LICENSE.md) ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*README.md) ]] || false
dolt reset README.md LICENSE.md
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "Changes not staged for commit:" ]] || false
[[ "$output" =~ ([[:space:]]*modified:[[:space:]]*LICENSE.md) ]] || false
[[ "$output" =~ "Untracked files:" ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*README.md) ]] || false
}
@test "dolt reset <table> <doc> resets tables and docs from staging area" {
echo readme > README.md
echo license > LICENSE.md
dolt add .
dolt sql <<SQL
CREATE TABLE test (
pk BIGINT NOT NULL COMMENT 'tag:0',
c1 BIGINT COMMENT 'tag:1',
c2 BIGINT COMMENT 'tag:2',
c3 BIGINT COMMENT 'tag:3',
c4 BIGINT COMMENT 'tag:4',
c5 BIGINT COMMENT 'tag:5',
PRIMARY KEY (pk)
);
SQL
dolt add test
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "Changes to be committed:" ]] || false
[[ "$output" =~ ([[:space:]]*new table:[[:space:]]*test) ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*LICENSE.md) ]] || false
[[ "$output" =~ ([[:space:]]*new doc:[[:space:]]*README.md) ]] || false
dolt reset test LICENSE.md README.md
run dolt status
[[ ! "$output" =~ "Changes to be committed:" ]] || false
[[ "$output" =~ "Untracked files:" ]] || false
[[ "$output" =~ (new table:[[:space:]]*test) ]] || false
[[ "$output" =~ (new doc:[[:space:]]*LICENSE.md) ]] || false
[[ "$output" =~ (new doc:[[:space:]]*README.md) ]] || false
}
@test "dolt checkout <doc> should save the staged docs to the filesystem if the doc has already been added" {
echo "this is my license" > LICENSE.md
echo "this is my readme" > README.md
dolt add .
dolt checkout LICENSE.md
run cat LICENSE.md
[[ "$output" =~ "this is my license" ]] || false
run cat README.md
[[ "$output" =~ "this is my readme" ]] || false
echo "testing-modified-doc" > LICENSE.md
dolt checkout LICENSE.md
run cat LICENSE.md
[[ "$output" =~ "this is my license" ]] || false
run cat README.md
[[ "$output" =~ "this is my readme" ]] || false
}
@test "dolt checkout <doc> should save the head docs to the filesystem when the doc exists on the head, and has not been staged" {
echo "this is my license" > LICENSE.md
echo "this is my readme" > README.md
dolt add .
dolt commit -m "committing license"
echo "this is new" > LICENSE.md
dolt checkout LICENSE.md
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "nothing to commit, working tree clean" ]] || false
run cat LICENSE.md
[[ "$output" =~ "this is my license" ]] || false
run cat README.md
[[ "$output" =~ "this is my readme" ]] || false
}
@test "dolt checkout <doc> should delete the doc from filesystem if it doesn't exist on staged or head roots" {
echo "readme" > README.md
echo "license" > LICENSE.md
dolt checkout README.md
run dolt status
[ "$status" -eq 0 ]
[[ ! "$output" =~ "README.md" ]] || false
run ls
[[ ! "$output" =~ "README.md" ]] || false
[[ "$output" =~ "LICENSE.md" ]] || false
}
@test "dolt checkout <doc> <table> should checkout both doc and table" {
echo "a license" > LICENSE.md
echo "a readme" > README.md
dolt sql <<SQL
CREATE TABLE test1 (
pk BIGINT NOT NULL COMMENT 'tag:0',
c1 BIGINT COMMENT 'tag:1',
c2 BIGINT COMMENT 'tag:2',
c3 BIGINT COMMENT 'tag:3',
c4 BIGINT COMMENT 'tag:4',
c5 BIGINT COMMENT 'tag:5',
PRIMARY KEY (pk)
);
SQL
dolt status
dolt checkout LICENSE.md test1
run dolt status
[[ ! "$output" =~ "LICENSE.md" ]] || false
[[ ! "$output" =~ "test1" ]] || false
[[ "$output" =~ "README.md" ]] || false
run ls
[[ ! "$output" =~ "LICENSE.md" ]] || false
[[ "$output" =~ "README.md" ]] || false
run cat README.md
[[ "$output" =~ "a readme" ]] || false
echo "new readme" > README.md
dolt sql <<SQL
CREATE TABLE test2 (
pk BIGINT NOT NULL COMMENT 'tag:0',
c1 BIGINT COMMENT 'tag:1',
c2 BIGINT COMMENT 'tag:2',
c3 BIGINT COMMENT 'tag:3',
c4 BIGINT COMMENT 'tag:4',
c5 BIGINT COMMENT 'tag:5',
PRIMARY KEY (pk)
);
SQL
dolt add .
dolt sql -q "insert into test2 (pk) values (100)"
echo New text in readme > README.md
dolt checkout test2 README.md
run cat README.md
[[ "$output" =~ "new readme" ]] || false
run dolt table select test2
[[ ! "$output" =~ "100" ]] || false
}
@test "dolt checkout <doc> <invalid_arg> should return an error and leave doc unchanged" {
echo original readme text > README.md
echo original license text > LICENSE.md
dolt add .
dolt commit -m "initial doc commit"
echo updated license > LICENSE.md
run dolt checkout LICENSE.md invalid
[ "$status" -eq 1 ]
[[ "$output" =~ "'invalid' did not match any table(s) known to dolt." ]] || false
run cat LICENSE.md
[[ "$output" =~ "updated license" ]] || false
run cat README.md
[[ "$output" =~ "original readme text" ]] || false
}
@test "dolt checkout <branch> should save docs to the file system, leaving any untracked files" {
echo readme > README.md
echo license > LICENSE.md
dolt add LICENSE.md
dolt commit -m "license commit"
dolt checkout -b test-branch
run cat README.md
[[ "$output" =~ "readme" ]] || false
run cat LICENSE.md
[[ "$output" =~ "license" ]] || false
echo new-license > LICENSE.md
rm README.md
dolt add .
dolt commit -m "updated license"
dolt checkout master
run cat LICENSE.md
[[ "$output" =~ "license" ]] || false
run ls
[[ ! "$output" =~ "README.md" ]] || false
dolt checkout test-branch
run ls
[[ "$output" =~ "LICENSE.md" ]] || false
[[ ! "$output" =~ "README.md" ]] || false
run cat LICENSE.md
[[ "$output" =~ "new-license" ]] || false
}
@test "dolt checkout <branch>, assuming no conflicts, should preserve changes in the working set (on the filesystem)" {
echo readme > README.md
echo license > LICENSE.md
dolt add LICENSE.md README.md
dolt commit -m "initial license and readme commit"
echo updated-readme > README.md
dolt checkout -b test-branch
run dolt status
[[ "$output" =~ "README.md" ]] || false
run cat README.md
[[ "$output" =~ "updated-readme" ]] || false
run cat LICENSE.md
[[ "$output" =~ "license" ]] || false
dolt add README.md
dolt commit -m "commit of updated-readme"
echo "another new README!" > README.md
dolt checkout master
run dolt status
[[ "$output" =~ "README.md" ]] || false
run cat README.md
[[ "$output" =~ "another new README!" ]] || false
}
@test "dolt diff shows diffs between working root and file system docs" {
# 2 added docs
echo "testing readme" > README.md
echo "testing license" > LICENSE.md
run dolt diff
[ "$status" -eq 0 ]
[[ "$output" =~ "diff --dolt a/LICENSE.md b/LICENSE.md" ]] || false
[[ "$output" =~ "diff --dolt a/README.md b/README.md" ]] || false
[[ "$output" =~ "added doc" ]] || false
dolt add .
run dolt diff
[ "$status" -eq 0 ]
[ "$output" = "" ]
dolt commit -m "docs"
# 1 modified doc, 1 other doc on working root with no changes
echo "a new readme" > README.md
run dolt diff
[ "$status" -eq 0 ]
[[ "$output" =~ "diff --dolt a/README.md b/README.md" ]] || false
[[ "$output" =~ "--- a/README.md" ]] || false
[[ "$output" =~ "+++ b/README.md" ]] || false
[[ "$output" =~ "- testing readme" ]] || false
[[ "$output" =~ "+ a new readme" ]] || false
[[ ! "$output" =~ "LICENSE.md" ]] || false
dolt add .
dolt commit -m "modified README.md"
# 1 deleted doc, 1 other doc on working root with no changes
rm LICENSE.md
run dolt diff
[ "$status" -eq 0 ]
[[ "$output" =~ "diff --dolt a/LICENSE.md b/LICENSE.md" ]] || false
[[ "$output" =~ "- testing license" ]] || false
[[ "$output" =~ "deleted doc" ]] || false
[[ ! "$output" =~ "README.md" ]] || false
dolt add .
dolt commit -m "deleted LICENSE.md"
# 1 modified doc, no other docs on working root
echo "A new README.md " > README.md
run dolt diff
[ "$status" -eq 0 ]
[[ "$output" =~ "diff --dolt a/README.md b/README.md" ]] || false
[[ "$output" =~ "--- a/README.md" ]] || false
[[ "$output" =~ "+++ b/README.md" ]] || false
[[ ! "$output" =~ "LICENSE.md" ]] || false
}
@test "dolt diff <doc> shows diff of one <doc> between working root and file system docs" {
echo "testing readme" > README.md
echo "testing license" > LICENSE.md
run dolt diff README.md
[ "$status" -eq 0 ]
[[ "$output" =~ "diff --dolt a/README.md b/README.md" ]] || false
[[ "$output" =~ "added doc" ]] || false
[[ ! "$output" =~ "LICENSE.md" ]] || false
run dolt diff LICENSE.md
[ "$status" -eq 0 ]
[[ "$output" =~ "diff --dolt a/LICENSE.md b/LICENSE.md" ]] || false
[[ "$output" =~ "added doc" ]] || false
[[ ! "$output" =~ "README.md" ]] || false
dolt add .
dolt commit -m "docs"
echo "a new readme" > README.md
echo "a new license" > LICENSE.md
run dolt diff README.md
[ "$status" -eq 0 ]
[[ "$output" =~ "diff --dolt a/README.md b/README.md" ]] || false
[[ "$output" =~ "--- a/README.md" ]] || false
[[ "$output" =~ "+++ b/README.md" ]] || false
[[ "$output" =~ "- testing readme" ]] || false
[[ "$output" =~ "+ a new readme" ]] || false
[[ ! "$output" =~ "LICENSE.md" ]] || false
run dolt diff LICENSE.md
[ "$status" -eq 0 ]
[[ "$output" =~ "diff --dolt a/LICENSE.md b/LICENSE.md" ]] || false
[[ "$output" =~ "--- a/LICENSE.md" ]] || false
[[ "$output" =~ "+++ b/LICENSE.md" ]] || false
[[ "$output" =~ "- testing license" ]] || false
[[ "$output" =~ "+ a new license" ]] || false
[[ ! "$output" =~ "README.md" ]] || false
rm README.md
rm LICENSE.md
run dolt diff LICENSE.md
[ "$status" -eq 0 ]
[[ "$output" =~ "diff --dolt a/LICENSE.md b/LICENSE.md" ]] || false
[[ "$output" =~ "- testing license" ]] || false
[[ "$output" =~ "deleted doc" ]] || false
[[ ! "$output" =~ "README" ]] || false
run dolt diff README.md
[ "$status" -eq 0 ]
[[ "$output" =~ "diff --dolt a/README.md b/README.md" ]] || false
[[ "$output" =~ "- testing readme" ]] || false
[[ "$output" =~ "deleted doc" ]] || false
[[ ! "$output" =~ "LICENSE" ]] || false
}
@test "dolt table commands do not allow write operations on dolt_docs" {
echo "a readme" > README.md
echo "a license" > LICENSE.md
dolt add .
dolt commit -m "First commit of docs"
run dolt table cp dolt_docs another_table
[ "$status" -eq 0 ]
run dolt table export dolt_docs test.csv
[ "$status" -eq 0 ]
run dolt table import dolt_docs -c `batshelper 1pk5col-ints.csv`
[ "$status" -eq 1 ]
[[ "$output" =~ "reserved" ]] || false
run dolt table mv dolt_docs new
[ "$status" -eq 1 ]
[[ "$output" =~ "system table" ]] || false
run dolt table rm dolt_docs
[ "$status" -eq 1 ]
[[ "$output" =~ "system table" ]] || false
}
@test "dolt schema command does not show dolt_docs" {
echo "a readme" > README.md
echo "a license" > LICENSE.md
dolt add .
dolt commit -m "First commit of docs"
run dolt schema import -c --pks=pk dolt_docs `batshelper 1pk5col-ints.csv`
[ "$status" -eq 1 ]
[[ "$output" =~ "reserved" ]] || false
run dolt schema show dolt_docs
[ "$status" -eq 1 ]
[[ "$output" =~ "not found" ]] || false
run dolt schema show
[ "$status" -eq 0 ]
[[ "$output" =~ "No tables in working set" ]] || false
dolt table import -c -s `batshelper employees-sch.sql` employees `batshelper employees-tbl.json`
run dolt schema show
[ "$status" -eq 0 ]
[[ "$output" =~ "employees @ working" ]] || false
[[ ! "$output" =~ "dolt_docs" ]] || false
}
@test "dolt ls should not show dolt_docs table" {
echo "a readme" > README.md
echo "a license" > LICENSE.md
run dolt ls
[ "$status" -eq 0 ]
[[ ! "$output" =~ "dolt_docs" ]] || false
dolt add .
run dolt ls
[ "$status" -eq 0 ]
[[ ! "$output" =~ "dolt_docs" ]] || false
dolt commit -m "First commit of docs"
run dolt ls
[ "$status" -eq 0 ]
[[ ! "$output" =~ "dolt_docs" ]] || false
}
@test "dolt sql operation on dolt_docs" {
echo "a readme" > README.md
echo "a license" > LICENSE.md
run dolt sql -q "show tables"
[ "$status" -eq 0 ]
[[ ! "$output" =~ "dolt_docs" ]] || false
run dolt sql -q "CREATE TABLE dolt_docs (doc_name TEXT, doc_text LONGTEXT, PRIMARY KEY(doc_name))"
[ "$status" -eq 1 ]
[[ "$output" =~ "reserved" ]] || false
dolt add .
dolt commit -m "initial doc commits"
run dolt sql -q "show tables"
[ "$status" -eq 0 ]
[[ ! "$output" =~ "dolt_docs" ]] || false
run dolt sql -q "INSERT INTO dolt_docs VALUES ('new_doc', 'new_text')"
[ "$status" -eq 1 ]
[[ "$output" =~ "table doesn't support" ]] || false
run dolt sql -q "DELETE FROM dolt_docs WHERE doc_name='REAMDE.md'"
[ "$status" -eq 1 ]
[[ "$output" =~ "table doesn't support" ]] || false
run dolt sql -q "UPDATE dolt_docs SET doc_name='new_doc' WHERE doc_name='README.md'"
[ "$status" -eq 1 ]
[[ "$output" =~ "table doesn't support" ]] || false
run dolt sql -q "SELECT * FROM dolt_docs" -r csv
[ "$status" -eq 0 ]
[[ "$output" =~ "doc_name,doc_text" ]] || false
[[ "$output" =~ "README.md" ]] || false
[[ "$output" =~ "LICENSE.md" ]] || false
run dolt sql -q "ALTER TABLE dolt_docs ADD a int"
[ "$status" -eq 1 ]
[[ "$output" =~ "cannot be altered" ]] || false
run dolt sql -q "RENAME TABLE dolt_docs TO new_table"
[ "$status" -eq 1 ]
[[ "$output" =~ "system tables cannot be dropped or altered" ]] || false
}
@test "dolt branch/merge with conflicts for docs" {
echo "a readme" > README.md
echo "a license" > LICENSE.md
dolt add .
dolt commit -m "Committing initial docs"
dolt branch test-a
dolt branch test-b
dolt checkout test-a
echo test-a branch > README.md
dolt add .
dolt commit -m "Changed README.md on test-a branch"
dolt checkout test-b
run cat README.md
[[ $output =~ "a readme" ]] || false
[[ ! $output =~ "test-a branch" ]] || false
echo test-b branch > README.md
dolt add .
dolt commit -m "Changed README.md on test-a branch"
dolt checkout master
# On successful FF merge, docs match the new working root
run dolt merge test-a
[ "$status" -eq 0 ]
[[ $output =~ "Fast-forward" ]] || false
run cat README.md
[[ "$output" =~ "test-a branch" ]] || false
# A merge with conflicts does not change the working root.
# If the conflicts are resolved with --ours, the working root and the docs on the filesystem remain the same.
run dolt merge test-b
[ "$status" -eq 0 ]
[[ $output =~ "CONFLICT" ]] || false
run cat README.md
[[ "$output" =~ "test-a branch" ]] || false
run dolt conflicts cat dolt_docs
[ "$status" -eq 0 ]
[[ $output =~ "test-a branch" ]] || false
[[ $output =~ "test-b branch" ]] || false
dolt conflicts resolve dolt_docs --ours
run cat README.md
[[ ! $output =~ "test-b branch" ]] || false
[[ $output =~ "test-a branch" ]] || false
# Only allow `dolt add dolt_docs` when dolt_docs is in conflict
dolt add dolt_docs
dolt commit -m "Resolved docs conflict with --ours"
# If the conflicts are resolved with --theirs, the working root and the docs on the filesystem are updated.
dolt branch test-a-again
dolt branch test-b-again
dolt checkout test-a-again
echo test-a-again branch > README.md
dolt add .
dolt commit -m "Changed README.md on test-a-again branch"
dolt checkout test-b-again
echo test-b-again branch > README.md
dolt add .
dolt commit -m "Changed README.md on test-b-again branch"
dolt checkout master
dolt merge test-a-again
dolt merge test-b-again
dolt conflicts resolve dolt_docs --theirs
run cat README.md
[[ ! $output =~ "test-a-again branch" ]] || false
[[ $output =~ "test-b-again branch" ]] || false
dolt add .
dolt commit -m "merge test-b-again with fixed conflicts"
# A merge with auto-resolved conflicts updates the working root. The docs should match the new working root.
dolt checkout test-b-again
echo test-b-one-more-time > README.md
dolt add .
dolt commit -m "test-b-one-more-time"
dolt checkout master
dolt merge test-b-again
run cat README.md
[[ "$output" =~ "one-more-time" ]] || false
run dolt status
echo "output = $output"
[[ "$output" =~ "All conflicts fixed" ]] || false
[[ "$output" =~ "Changes to be committed:" ]] || false
[[ "$output" =~ "README.md" ]] || false
}