Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions cmake/CliFboss2.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -766,6 +766,8 @@ add_library(fboss2_config_lib
fboss/cli/fboss2/commands/config/session/CmdConfigSessionCommit.cpp
fboss/cli/fboss2/commands/config/session/CmdConfigSessionDiff.h
fboss/cli/fboss2/commands/config/session/CmdConfigSessionDiff.cpp
fboss/cli/fboss2/commands/config/session/CmdConfigSessionRebase.h
fboss/cli/fboss2/commands/config/session/CmdConfigSessionRebase.cpp
fboss/cli/fboss2/session/ConfigSession.h
fboss/cli/fboss2/session/ConfigSession.cpp
fboss/cli/fboss2/session/Git.h
Expand Down
2 changes: 2 additions & 0 deletions fboss/cli/fboss2/BUCK
Original file line number Diff line number Diff line change
Expand Up @@ -931,6 +931,7 @@ cpp_library(
"commands/config/rollback/CmdConfigRollback.cpp",
"commands/config/session/CmdConfigSessionCommit.cpp",
"commands/config/session/CmdConfigSessionDiff.cpp",
"commands/config/session/CmdConfigSessionRebase.cpp",
"session/ConfigSession.cpp",
"session/Git.cpp",
"utils/InterfaceList.cpp",
Expand Down Expand Up @@ -992,6 +993,7 @@ cpp_library(
"commands/config/rollback/CmdConfigRollback.h",
"commands/config/session/CmdConfigSessionCommit.h",
"commands/config/session/CmdConfigSessionDiff.h",
"commands/config/session/CmdConfigSessionRebase.h",
"session/ConfigSession.h",
"session/Git.h",
"utils/InterfaceList.h",
Expand Down
5 changes: 5 additions & 0 deletions fboss/cli/fboss2/CmdHandlerImplConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

// Current linter doesn't properly handle the template functions which need the
// following headers
// NOLINTBEGIN(misc-include-cleaner)
// @lint-ignore-every CLANGTIDY facebook-unused-include-check
#include "fboss/cli/fboss2/commands/config/CmdConfigAppliedInfo.h"
#include "fboss/cli/fboss2/commands/config/CmdConfigReload.h"
Expand Down Expand Up @@ -85,6 +86,8 @@
#include "fboss/cli/fboss2/commands/config/rollback/CmdConfigRollback.h"
#include "fboss/cli/fboss2/commands/config/session/CmdConfigSessionCommit.h"
#include "fboss/cli/fboss2/commands/config/session/CmdConfigSessionDiff.h"
#include "fboss/cli/fboss2/commands/config/session/CmdConfigSessionRebase.h"
// NOLINTEND(misc-include-cleaner)

namespace facebook::fboss {

Expand Down Expand Up @@ -112,6 +115,8 @@ template void
CmdHandler<CmdConfigSessionCommit, CmdConfigSessionCommitTraits>::run();
template void
CmdHandler<CmdConfigSessionDiff, CmdConfigSessionDiffTraits>::run();
template void
CmdHandler<CmdConfigSessionRebase, CmdConfigSessionRebaseTraits>::run();
template void CmdHandler<CmdConfigQos, CmdConfigQosTraits>::run();
template void
CmdHandler<CmdConfigQosBufferPool, CmdConfigQosBufferPoolTraits>::run();
Expand Down
7 changes: 7 additions & 0 deletions fboss/cli/fboss2/CmdListConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@
#include "fboss/cli/fboss2/commands/config/rollback/CmdConfigRollback.h"
#include "fboss/cli/fboss2/commands/config/session/CmdConfigSessionCommit.h"
#include "fboss/cli/fboss2/commands/config/session/CmdConfigSessionDiff.h"
#include "fboss/cli/fboss2/commands/config/session/CmdConfigSessionRebase.h"

namespace facebook::fboss {

Expand Down Expand Up @@ -637,6 +638,12 @@ const CommandTree& kConfigCommandTree() {
"Show diff between configs (session vs live, session vs revision, or revision vs revision)",
commandHandler<CmdConfigSessionDiff>,
argTypeHandler<CmdConfigSessionDiffTraits>,
},
{
"rebase",
"Rebase session changes onto current HEAD",
commandHandler<CmdConfigSessionRebase>,
argTypeHandler<CmdConfigSessionRebaseTraits>,
}},
},

Expand Down
3 changes: 3 additions & 0 deletions fboss/cli/fboss2/cli_metadata.thrift
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,7 @@ struct ConfigSessionMetadata {
// List of CLI commands executed in this session, in chronological order.
// Each entry is the full command string (e.g., "config interface eth1/1/1 mtu 9000").
2: list<string> commands;
// Git commit SHA that this session is based on. Used to detect if someone
// else committed changes while this session was in progress.
3: string base;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* Copyright (c) 2004-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
*/

#include "fboss/cli/fboss2/commands/config/session/CmdConfigSessionRebase.h"
#include <iostream>
#include <ostream>
#include "fboss/cli/fboss2/session/ConfigSession.h"
#include "fboss/cli/fboss2/utils/HostInfo.h"

namespace facebook::fboss {

CmdConfigSessionRebaseTraits::RetType CmdConfigSessionRebase::queryClient(
const HostInfo& /* hostInfo */) {
auto& session = ConfigSession::getInstance();
session.rebase(); // raises a runtime_error if we fail
return "Session successfully rebased onto current HEAD. You can now commit.";
}

void CmdConfigSessionRebase::printOutput(const RetType& logMsg) {
std::cout << logMsg << std::endl;
}

} // namespace facebook::fboss
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/*
* Copyright (c) 2004-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
*/

#pragma once

#include <string>
#include <variant>
#include "fboss/cli/fboss2/CmdHandler.h"
#include "fboss/cli/fboss2/utils/CmdUtilsCommon.h"
#include "fboss/cli/fboss2/utils/HostInfo.h"

namespace facebook::fboss {

struct CmdConfigSessionRebaseTraits : public WriteCommandTraits {
static constexpr utils::ObjectArgTypeId ObjectArgTypeId =
utils::ObjectArgTypeId::OBJECT_ARG_TYPE_ID_NONE;
using ObjectArgType = std::monostate; // no arg
using RetType = std::string;
};

class CmdConfigSessionRebase
: public CmdHandler<CmdConfigSessionRebase, CmdConfigSessionRebaseTraits> {
public:
using ObjectArgType = CmdConfigSessionRebaseTraits::ObjectArgType;
using RetType = CmdConfigSessionRebaseTraits::RetType;

RetType queryClient(const HostInfo& hostInfo);

void printOutput(const RetType& logMsg);
};

} // namespace facebook::fboss
Loading
Loading