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 ...@@ -249,8 +249,17 @@ senf::console::Executor::traverseNode(ParseCommandInfo::TokensRange const & path
path.begin(), path.begin(),
boost::prior(path.end())), boost::prior(path.end())),
dir); 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()); 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_) if (policy_)
policy_( base, name ); policy_( base, name );
return dir.back().lock()->get(name); return dir.back().lock()->get(name);
......
...@@ -231,7 +231,7 @@ BOOST_AUTO_UNIT_TEST(executorPolicy) ...@@ -231,7 +231,7 @@ BOOST_AUTO_UNIT_TEST(executorPolicy)
BOOST_AUTO_UNIT_TEST(executorAuto) 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::root().mkdir("dir2").doc("Helptext").add("test",&testCommand);
senf::console::Executor executor; senf::console::Executor executor;
...@@ -247,6 +247,22 @@ BOOST_AUTO_UNIT_TEST(executorAuto) ...@@ -247,6 +247,22 @@ BOOST_AUTO_UNIT_TEST(executorAuto)
BOOST_CHECK_EQUAL( executor.cwdPath(), "/dir2" ); BOOST_CHECK_EQUAL( executor.cwdPath(), "/dir2" );
BOOST_CHECK_EQUAL( os.str(), "" ); 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; std::stringstream os;
...@@ -257,7 +273,7 @@ BOOST_AUTO_UNIT_TEST(executorAuto) ...@@ -257,7 +273,7 @@ BOOST_AUTO_UNIT_TEST(executorAuto)
commands.clear(); commands.clear();
senf::console::root().remove("dir1"); senf::console::root().remove("tdir1");
senf::console::root().remove("dir2"); 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