Skip to content
Snippets Groups Projects
Commit 3c79c686 authored by g0dil's avatar g0dil
Browse files

Scheduler/Console: Make '..' work in Console (closes: #14754)

parent 8e0777d6
No related branches found
No related tags found
No related merge requests found
......@@ -249,8 +249,17 @@ senf::console::Executor::traverseNode(ParseCommandInfo::TokensRange const & path
path.begin(),
boost::prior(path.end())),
dir);
// For auto-cd support we need to check against '.' and '..' here too
Token const & tok (*boost::prior(path.end()));
if (tok == WordToken("..")) {
if (dir.size() > 1)
dir.pop_back();
return *dir.back().lock();
}
DirectoryNode & base (*dir.back().lock());
std::string const & name (complete(base, boost::prior(path.end())->value()));
if (tok == WordToken("."))
return base;
std::string const & name (complete(base, tok.value()));
if (policy_)
policy_( base, name );
return dir.back().lock()->get(name);
......
......@@ -231,7 +231,7 @@ BOOST_AUTO_UNIT_TEST(executorPolicy)
BOOST_AUTO_UNIT_TEST(executorAuto)
{
senf::console::root().mkdir("dir1").mkdir("dir3");
senf::console::root().mkdir("tdir1").mkdir("dir3");
senf::console::root().mkdir("dir2").doc("Helptext").add("test",&testCommand);
senf::console::Executor executor;
......@@ -247,6 +247,22 @@ BOOST_AUTO_UNIT_TEST(executorAuto)
BOOST_CHECK_EQUAL( executor.cwdPath(), "/dir2" );
BOOST_CHECK_EQUAL( os.str(), "" );
}
{
std::stringstream os;
parser.parse("..", &setCommand);
executor(os, commands.back());
BOOST_CHECK_EQUAL( executor.cwdPath(), "/" );
BOOST_CHECK_EQUAL( os.str(), "" );
}
{
std::stringstream os;
parser.parse("d", &setCommand);
executor(os, commands.back());
BOOST_CHECK_EQUAL( executor.cwdPath(), "/dir2" );
BOOST_CHECK_EQUAL( os.str(), "" );
}
{
std::stringstream os;
......@@ -257,7 +273,7 @@ BOOST_AUTO_UNIT_TEST(executorAuto)
commands.clear();
senf::console::root().remove("dir1");
senf::console::root().remove("tdir1");
senf::console::root().remove("dir2");
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment