Skip to content

Commit 2d04cca

Browse files
authored
Merge pull request #4044 from apple/cherrypick-8a0fa4db39d8
[lldb] Add --exists flag to `settings set`
2 parents c55323a + e145762 commit 2d04cca

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

lldb/source/Commands/CommandObjectSettings.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ insert-before or insert-after.");
103103
case 'g':
104104
m_global = true;
105105
break;
106+
case 'e':
107+
m_exists = true;
108+
break;
106109
default:
107110
llvm_unreachable("Unimplemented option");
108111
}
@@ -113,6 +116,7 @@ insert-before or insert-after.");
113116
void OptionParsingStarting(ExecutionContext *execution_context) override {
114117
m_global = false;
115118
m_force = false;
119+
m_exists = false;
116120
}
117121

118122
llvm::ArrayRef<OptionDefinition> GetDefinitions() override {
@@ -121,7 +125,8 @@ insert-before or insert-after.");
121125

122126
// Instance variables to hold the values for command options.
123127
bool m_global = false;
124-
bool m_force;
128+
bool m_force = false;
129+
bool m_exists = false;
125130
};
126131

127132
void
@@ -220,13 +225,12 @@ insert-before or insert-after.");
220225
var_name, var_value);
221226
}
222227

223-
if (error.Fail()) {
228+
if (error.Fail() && !m_options.m_exists) {
224229
result.AppendError(error.AsCString());
225230
return false;
226-
} else {
227-
result.SetStatus(eReturnStatusSuccessFinishResult);
228231
}
229232

233+
result.SetStatus(eReturnStatusSuccessFinishResult);
230234
return result.Succeeded();
231235
}
232236

lldb/source/Commands/Options.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ let Command = "settings set" in {
2323
Desc<"Apply the new value to the global default value.">;
2424
def setset_force : Option<"force", "f">,
2525
Desc<"Force an empty value to be accepted as the default.">;
26+
def setset_exists : Option<"exists", "e">,
27+
Desc<"Set the setting if it exists, but do not cause the command to raise "
28+
"an error if it does not exist.">;
2629
}
2730

2831
let Command = "settings write" in {

lldb/test/API/commands/settings/TestSettings.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -779,3 +779,13 @@ def test_experimental_settings(self):
779779
# finally, confirm that trying to set a setting that does not exist still fails.
780780
# (SHOWING a setting that does not exist does not currently yield an error.)
781781
self.expect('settings set target.setting-which-does-not-exist true', error=True)
782+
783+
def test_settings_set_exists(self):
784+
cmdinterp = self.dbg.GetCommandInterpreter()
785+
786+
# An unknown option should succeed.
787+
self.expect('settings set -e foo bar')
788+
self.expect('settings set --exists foo bar')
789+
790+
# A known option should fail if its argument is invalid.
791+
self.expect("settings set auto-confirm bogus", error=True)

0 commit comments

Comments
 (0)