1*5bb742b1SMed Ismail Bennani #include "CommandObjectSession.h" 2*5bb742b1SMed Ismail Bennani #include "lldb/Interpreter/CommandInterpreter.h" 3*5bb742b1SMed Ismail Bennani #include "lldb/Interpreter/CommandReturnObject.h" 4*5bb742b1SMed Ismail Bennani 5*5bb742b1SMed Ismail Bennani using namespace lldb; 6*5bb742b1SMed Ismail Bennani using namespace lldb_private; 7*5bb742b1SMed Ismail Bennani 8*5bb742b1SMed Ismail Bennani class CommandObjectSessionSave : public CommandObjectParsed { 9*5bb742b1SMed Ismail Bennani public: 10*5bb742b1SMed Ismail Bennani CommandObjectSessionSave(CommandInterpreter &interpreter) 11*5bb742b1SMed Ismail Bennani : CommandObjectParsed(interpreter, "session save", 12*5bb742b1SMed Ismail Bennani "Save the current session transcripts to a file.\n" 13*5bb742b1SMed Ismail Bennani "If no file if specified, transcripts will be " 14*5bb742b1SMed Ismail Bennani "saved to a temporary file.", 15*5bb742b1SMed Ismail Bennani "session save [file]") { 16*5bb742b1SMed Ismail Bennani CommandArgumentEntry arg1; 17*5bb742b1SMed Ismail Bennani arg1.emplace_back(eArgTypePath, eArgRepeatOptional); 18*5bb742b1SMed Ismail Bennani m_arguments.push_back(arg1); 19*5bb742b1SMed Ismail Bennani } 20*5bb742b1SMed Ismail Bennani 21*5bb742b1SMed Ismail Bennani ~CommandObjectSessionSave() override = default; 22*5bb742b1SMed Ismail Bennani 23*5bb742b1SMed Ismail Bennani void 24*5bb742b1SMed Ismail Bennani HandleArgumentCompletion(CompletionRequest &request, 25*5bb742b1SMed Ismail Bennani OptionElementVector &opt_element_vector) override { 26*5bb742b1SMed Ismail Bennani CommandCompletions::InvokeCommonCompletionCallbacks( 27*5bb742b1SMed Ismail Bennani GetCommandInterpreter(), CommandCompletions::eDiskFileCompletion, 28*5bb742b1SMed Ismail Bennani request, nullptr); 29*5bb742b1SMed Ismail Bennani } 30*5bb742b1SMed Ismail Bennani 31*5bb742b1SMed Ismail Bennani protected: 32*5bb742b1SMed Ismail Bennani bool DoExecute(Args &args, CommandReturnObject &result) override { 33*5bb742b1SMed Ismail Bennani llvm::StringRef file_path; 34*5bb742b1SMed Ismail Bennani 35*5bb742b1SMed Ismail Bennani if (!args.empty()) 36*5bb742b1SMed Ismail Bennani file_path = args[0].ref(); 37*5bb742b1SMed Ismail Bennani 38*5bb742b1SMed Ismail Bennani if (m_interpreter.SaveTranscript(result, file_path.str())) 39*5bb742b1SMed Ismail Bennani result.SetStatus(eReturnStatusSuccessFinishNoResult); 40*5bb742b1SMed Ismail Bennani else 41*5bb742b1SMed Ismail Bennani result.SetStatus(eReturnStatusFailed); 42*5bb742b1SMed Ismail Bennani return result.Succeeded(); 43*5bb742b1SMed Ismail Bennani } 44*5bb742b1SMed Ismail Bennani }; 45*5bb742b1SMed Ismail Bennani 46*5bb742b1SMed Ismail Bennani CommandObjectSession::CommandObjectSession(CommandInterpreter &interpreter) 47*5bb742b1SMed Ismail Bennani : CommandObjectMultiword(interpreter, "session", 48*5bb742b1SMed Ismail Bennani "Commands controlling LLDB session.", 49*5bb742b1SMed Ismail Bennani "session <subcommand> [<command-options>]") { 50*5bb742b1SMed Ismail Bennani LoadSubCommand("save", 51*5bb742b1SMed Ismail Bennani CommandObjectSP(new CommandObjectSessionSave(interpreter))); 52*5bb742b1SMed Ismail Bennani // TODO: Move 'history' subcommand from CommandObjectCommands. 53*5bb742b1SMed Ismail Bennani } 54