diff --git a/src/nix/command.cc b/src/nix/command.cc index 986953fd8..c8d91737d 100644 --- a/src/nix/command.cc +++ b/src/nix/command.cc @@ -5,6 +5,21 @@ namespace nix { Commands * RegisterCommand::commands = 0; +void Command::printHelp(const string & programName, std::ostream & out) +{ + Args::printHelp(programName, out); + + auto exs = examples(); + if (!exs.empty()) { + out << "\n"; + out << "Examples:\n"; + for (auto & ex : exs) + out << "\n" + << " " << ex.description << "\n" // FIXME: wrap + << " $ " << ex.command << "\n"; + } +} + MultiCommand::MultiCommand(const Commands & _commands) : commands(_commands) { diff --git a/src/nix/command.hh b/src/nix/command.hh index a6adb5f65..34affc43d 100644 --- a/src/nix/command.hh +++ b/src/nix/command.hh @@ -11,6 +11,18 @@ struct Command : virtual Args virtual std::string name() = 0; virtual void prepare() { }; virtual void run() = 0; + + struct Example + { + std::string description; + std::string command; + }; + + typedef std::list Examples; + + virtual Examples examples() { return Examples(); } + + void printHelp(const string & programName, std::ostream & out) override; }; class Store; diff --git a/src/nix/verify.cc b/src/nix/verify.cc index da1567808..fdbc2b0fd 100644 --- a/src/nix/verify.cc +++ b/src/nix/verify.cc @@ -36,6 +36,20 @@ struct CmdVerify : StorePathsCommand return "verify the integrity of store paths"; } + Examples examples() override + { + return { + Example{ + "To verify the entire Nix store:", + "nix verify --all" + }, + Example{ + "To check whether each path in the closure of Firefox has at least 2 signatures:", + "nix verify -r -n2 --no-contents $(type -p firefox)" + }, + }; + } + void run(ref store, Paths storePaths) override { restoreAffinity(); // FIXME