Do not auto-create .taskrc when stdout is not a TTY

This avoids prompting or automatically creating such a file, both of
which are unexpected when performing command-line completion.

Fixes #3751.
This commit is contained in:
Dustin J. Mitchell 2025-05-28 19:09:49 -04:00
parent f6824e90a1
commit 9bf51422a1
No known key found for this signature in database

View file

@ -1173,6 +1173,13 @@ void Context::staticInitialization() {
void Context::createDefaultConfig() {
// Do we need to create a default rc?
if (rc_file._data != "" && !rc_file.exists()) {
// If stdout is not a file, we are probably executing in a completion context and should not
// prompt (as the user won't see it) or modify the config (as completion functions are typically
// read-only).
if (!isatty(STDOUT_FILENO)) {
throw std::string("Cannot proceed without rc file.");
}
if (config.getBoolean("confirmation") &&
!confirm(format("A configuration file could not be found in {1}\n\nWould you like a sample "
"{2} created, so Taskwarrior can proceed?",