This commit is contained in:
James Cor
2022-07-12 15:53:21 -07:00
parent 01c2721b23
commit 5747fa51ba
3 changed files with 110 additions and 21 deletions

View File

@@ -190,20 +190,29 @@ func (cmd SqlCmd) Exec(ctx context.Context, commandStr string, args []string, dE
return HandleVErrAndExitCode(verr, usage)
}
// Handle doltcfg directory
var cfgDirPath string
var dataDir string
dataDirSpecified := false
if multiDbDir, ok := apr.GetValue(MultiDBDirFlag); ok {
cli.PrintErrln("WARNING: --multi-db-dir is deprecated, use --data-dir instead")
dataDir = multiDbDir
dataDirSpecified = true
}
if dataDirPath, ok := apr.GetValue(DataDirFlag); ok {
dataDir = dataDirPath
dataDirSpecified = true
}
cfgDir, hasCfg := apr.GetValue(CfgDirFlag)
if hasCfg {
// doltcfg directory specified; create at path if DNE, else add it to mrEnv
path := filepath.Join(dataDir, cfgDir)
cfgDir, cfgDirSpecified := apr.GetValue(CfgDirFlag)
if cfgDirSpecified {
if exists, _ := dEnv.FS.Exists(cfgDir); !exists {
if err := dEnv.FS.MkDirs(cfgDir); err != nil {
absPath, _ := dEnv.FS.Abs(cfgDir)
return HandleVErrAndExitCode(errhand.VerboseErrorFromError(fmt.Errorf("couldn't create directory at %s", absPath)), usage)
}
}
cfgDirPath = cfgDir
} else if dataDirSpecified {
path := filepath.Join(dataDir, DefaultCfgDirName)
if exists, _ := dEnv.FS.Exists(path); !exists {
if err := dEnv.FS.MkDirs(path); err != nil {
absPath, _ := dEnv.FS.Abs(path)
@@ -218,7 +227,7 @@ func (cmd SqlCmd) Exec(ctx context.Context, commandStr string, args []string, dE
cfgDirPath = path
}
// Look in current directory for doltcfg, create one here if none found so far
// Look in data directory (which is necessarily current directory) for doltcfg, create one here if none found
path = filepath.Join(dataDir, DefaultCfgDirName)
if exists, isDir := dEnv.FS.Exists(path); exists && isDir {
if len(cfgDirPath) != 0 {
@@ -241,7 +250,7 @@ func (cmd SqlCmd) Exec(ctx context.Context, commandStr string, args []string, dE
}
}
// If no privilege filepath specified, default to cfg directory
// If no privilege filepath specified, default to doltcfg directory
privsFp, hasPrivsFp := apr.GetValue(PrivsFilePathFlag)
if !hasPrivsFp {
privsFp, err = dEnv.FS.Abs(filepath.Join(cfgDirPath, DefaultPrivsName))

View File

@@ -270,16 +270,7 @@ func getCommandLineServerConfig(dEnv *env.DoltEnv, apr *argparser.ArgParseResult
serverConfig.withLogLevel(LogLevel(logLevel))
}
if dataDir, ok := apr.GetValue(commands.DataDirFlag); ok {
dbNamesAndPaths, err := env.DBNamesAndPathsFromDir(dEnv.FS, dataDir)
if err != nil {
return nil, errors.New("failed to read databases in path specified by --data-dir. error: " + err.Error())
}
serverConfig.withDBNamesAndPaths(dbNamesAndPaths).withDataDir(dataDir)
}
dataDirSpecified := false
if dataDir, ok := apr.GetValue(commands.MultiDBDirFlag); ok {
dbNamesAndPaths, err := env.DBNamesAndPathsFromDir(dEnv.FS, dataDir)
cli.PrintErrln("WARNING: --multi-db-dir is deprecated, use --data-dir instead")
@@ -289,13 +280,32 @@ func getCommandLineServerConfig(dEnv *env.DoltEnv, apr *argparser.ArgParseResult
}
serverConfig.withDBNamesAndPaths(dbNamesAndPaths).withDataDir(dataDir)
dataDirSpecified = true
}
if dataDir, ok := apr.GetValue(commands.DataDirFlag); ok {
dbNamesAndPaths, err := env.DBNamesAndPathsFromDir(dEnv.FS, dataDir)
if err != nil {
return nil, errors.New("failed to read databases in path specified by --data-dir. error: " + err.Error())
}
serverConfig.withDBNamesAndPaths(dbNamesAndPaths).withDataDir(dataDir)
dataDirSpecified = true
}
// TODO: make sure absolute paths also work
var cfgDirPath string
dataDir := serverConfig.DataDir()
cfgDir, ok := apr.GetValue(commands.CfgDirFlag)
if ok {
// doltcfg directory specified; create at path if DNE, else add it to mrEnv
cfgDir, cfgDirSpecified := apr.GetValue(commands.CfgDirFlag)
if cfgDirSpecified {
if exists, _ := dEnv.FS.Exists(cfgDir); !exists {
if err := dEnv.FS.MkDirs(cfgDir); err != nil {
return nil, err
}
}
cfgDirPath = cfgDir
} else if dataDirSpecified {
path := filepath.Join(dataDir, cfgDir)
if exists, _ := dEnv.FS.Exists(path); !exists {
if err := dEnv.FS.MkDirs(path); err != nil {
@@ -310,7 +320,7 @@ func getCommandLineServerConfig(dEnv *env.DoltEnv, apr *argparser.ArgParseResult
cfgDirPath = path
}
// Look in current directory for doltcfg, create one here if none found so far
// Look in data directory (which is necessarily current directory) for doltcfg, create one here if none found
path = filepath.Join(dataDir, commands.DefaultCfgDirName)
if exists, isDir := dEnv.FS.Exists(path); exists && isDir {
if len(cfgDirPath) != 0 {

View File

@@ -207,6 +207,76 @@ teardown() {
rm -rf inner_db
}
@test "sql: dolt sql -q specify data directory dolt repo" {
# remove files
rm -rf datadir
rm -rf new_repo
# initialize data directory and inner dbs
mkdir datadir
cd datadir
mkdir db1
cd db1
dolt init
cd ..
mkdir db2
cd db2
dolt init
cd ..
mkdir db3
cd db3
dolt init
cd ..
cd ..
# initialize new repo
mkdir new_repo
cd new_repo
run dolt sql --data-dir=$BATS_TEST_DIRNAME/datadir -q "show databases"
[ $status -eq 0 ]
[[ $output =~ "db1" ]] || false
[[ $output =~ "db2" ]] || false
[[ $output =~ "db3" ]] || false
run dolt sql --data-dir=$BATS_TEST_DIRNAME/datadir -q "create user new_user"
[ $status -eq 0 ]
run dolt sql --data-dir=$BATS_TEST_DIRNAME/datadir -q "use db1; select user from mysql.user"
[ $status -eq 0 ]
[[ $output =~ "new_user" ]] || false
run dolt sql --data-dir=$BATS_TEST_DIRNAME/datadir -q "use db2; select user from mysql.user"
[ $status -eq 0 ]
[[ $output =~ "new_user" ]] || false
run dolt sql --data-dir=$BATS_TEST_DIRNAME/datadir -q "use db3; select user from mysql.user"
[ $status -eq 0 ]
[[ $output =~ "new_user" ]] || false
# check that correct files exist
cd ..
run ls -a
[[ $output =~ "datadir" ]] || false
[[ $output =~ "new_repo" ]] || false
! [[ $output =~ ".doltcfg" ]] || false
run ls datadir
[[ $output =~ ".doltcfg" ]] || false
run ls datadir/.doltcfg
[[ $output =~ "privileges.db" ]] || false
# remove files
rm -rf new_repo
rm -rf datadir
}
@test "sql: dolt sql -q specify data directory, cfg directory, and privilege file" {
# remove files
rm -rf .doltcfg