mirror of
https://github.com/NixOS/nix.git
synced 2025-12-07 09:31:01 +01:00
Merge remote-tracking branch 'detsys/detsys-main' into lazy-trees-tmp
This commit is contained in:
commit
a6faa69fc8
109 changed files with 1219 additions and 546 deletions
|
|
@ -647,4 +647,25 @@ nlohmann::json MultiCommand::toJSON()
|
|||
return res;
|
||||
}
|
||||
|
||||
Strings::iterator MultiCommand::rewriteArgs(Strings & args, Strings::iterator pos)
|
||||
{
|
||||
if (command)
|
||||
return command->second->rewriteArgs(args, pos);
|
||||
|
||||
if (aliasUsed || pos == args.end()) return pos;
|
||||
auto arg = *pos;
|
||||
auto i = aliases.find(arg);
|
||||
if (i == aliases.end()) return pos;
|
||||
auto & info = i->second;
|
||||
if (info.status == AliasStatus::Deprecated) {
|
||||
warn("'%s' is a deprecated alias for '%s'",
|
||||
arg, concatStringsSep(" ", info.replacement));
|
||||
}
|
||||
pos = args.erase(pos);
|
||||
for (auto j = info.replacement.rbegin(); j != info.replacement.rend(); ++j)
|
||||
pos = args.insert(pos, *j);
|
||||
aliasUsed = true;
|
||||
return pos;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -393,8 +393,30 @@ public:
|
|||
|
||||
nlohmann::json toJSON() override;
|
||||
|
||||
enum struct AliasStatus {
|
||||
/** Aliases that don't go away */
|
||||
AcceptedShorthand,
|
||||
/** Aliases that will go away */
|
||||
Deprecated,
|
||||
};
|
||||
|
||||
/** An alias, except for the original syntax, which is in the map key. */
|
||||
struct AliasInfo {
|
||||
AliasStatus status;
|
||||
std::vector<std::string> replacement;
|
||||
};
|
||||
|
||||
/**
|
||||
* A list of aliases (remapping a deprecated/shorthand subcommand
|
||||
* to something else).
|
||||
*/
|
||||
std::map<std::string, AliasInfo> aliases;
|
||||
|
||||
Strings::iterator rewriteArgs(Strings & args, Strings::iterator pos) override;
|
||||
|
||||
protected:
|
||||
std::string commandName = "";
|
||||
bool aliasUsed = false;
|
||||
};
|
||||
|
||||
Strings argvToStrings(int argc, char * * argv);
|
||||
|
|
|
|||
|
|
@ -26,6 +26,11 @@ static inline bool getInterrupted();
|
|||
*/
|
||||
void setInterruptThrown();
|
||||
|
||||
/**
|
||||
* @note Does nothing on Windows
|
||||
*/
|
||||
static inline bool isInterrupted();
|
||||
|
||||
/**
|
||||
* @note Does nothing on Windows
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -85,17 +85,22 @@ static inline bool getInterrupted()
|
|||
return unix::_isInterrupted;
|
||||
}
|
||||
|
||||
static inline bool isInterrupted()
|
||||
{
|
||||
using namespace unix;
|
||||
return _isInterrupted || (interruptCheck && interruptCheck());
|
||||
}
|
||||
|
||||
/**
|
||||
* Throw `Interrupted` exception if the process has been interrupted.
|
||||
*
|
||||
* Call this in long-running loops and between slow operations to terminate
|
||||
* them as needed.
|
||||
*/
|
||||
void inline checkInterrupt()
|
||||
inline void checkInterrupt()
|
||||
{
|
||||
using namespace unix;
|
||||
if (_isInterrupted || (interruptCheck && interruptCheck()))
|
||||
_interrupted();
|
||||
if (isInterrupted())
|
||||
unix::_interrupted();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -22,7 +22,12 @@ inline void setInterruptThrown()
|
|||
/* Do nothing for now */
|
||||
}
|
||||
|
||||
void inline checkInterrupt()
|
||||
static inline bool isInterrupted()
|
||||
{
|
||||
/* Do nothing for now */
|
||||
}
|
||||
|
||||
inline void checkInterrupt()
|
||||
{
|
||||
/* Do nothing for now */
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue