aboutsummaryrefslogtreecommitdiff
path: root/src/nix-hash/nix-hash.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/nix-hash/nix-hash.cc')
-rw-r--r--src/nix-hash/nix-hash.cc83
1 files changed, 41 insertions, 42 deletions
diff --git a/src/nix-hash/nix-hash.cc b/src/nix-hash/nix-hash.cc
index af3dda4ad..b08f0b0b1 100644
--- a/src/nix-hash/nix-hash.cc
+++ b/src/nix-hash/nix-hash.cc
@@ -3,17 +3,10 @@
#include <iostream>
-
using namespace nix;
-void printHelp()
-{
- showManPage("nix-hash");
-}
-
-
-void run(Strings args)
+int main(int argc, char * * argv)
{
HashType ht = htMD5;
bool flat = false;
@@ -23,42 +16,48 @@ void run(Strings args)
Strings ss;
- for (Strings::iterator i = args.begin();
- i != args.end(); i++)
- {
- if (*i == "--flat") flat = true;
- else if (*i == "--base32") base32 = true;
- else if (*i == "--truncate") truncate = true;
- else if (*i == "--type") {
- ++i;
- if (i == args.end()) throw UsageError("`--type' requires an argument");
- ht = parseHashType(*i);
- if (ht == htUnknown)
- throw UsageError(format("unknown hash type `%1%'") % *i);
+ return handleExceptions(argv[0], [&]() {
+ initNix();
+
+ parseCmdLine(argc, argv, [&](Strings::iterator & arg, const Strings::iterator & end) {
+ if (*arg == "--help")
+ showManPage("nix-hash");
+ else if (*arg == "--version")
+ printVersion("nix-hash");
+ else if (*arg == "--flat") flat = true;
+ else if (*arg == "--base32") base32 = true;
+ else if (*arg == "--truncate") truncate = true;
+ else if (*arg == "--type") {
+ string s = getArg(*arg, arg, end);
+ ht = parseHashType(s);
+ if (ht == htUnknown)
+ throw UsageError(format("unknown hash type `%1%'") % s);
+ }
+ else if (*arg == "--to-base16") op = opTo16;
+ else if (*arg == "--to-base32") op = opTo32;
+ else if (*arg != "" && arg->at(0) == '-')
+ return false;
+ else
+ ss.push_back(*arg);
+ return true;
+ });
+
+ if (op == opHash) {
+ for (auto & i : ss) {
+ Hash h = flat ? hashFile(ht, i) : hashPath(ht, i).first;
+ if (truncate && h.hashSize > 20) h = compressHash(h, 20);
+ std::cout << format("%1%\n") %
+ (base32 ? printHash32(h) : printHash(h));
+ }
}
- else if (*i == "--to-base16") op = opTo16;
- else if (*i == "--to-base32") op = opTo32;
- else ss.push_back(*i);
- }
- if (op == opHash) {
- foreach (Strings::iterator, i, ss) {
- Hash h = flat ? hashFile(ht, *i) : hashPath(ht, *i).first;
- if (truncate && h.hashSize > 20) h = compressHash(h, 20);
- std::cout << format("%1%\n") %
- (base32 ? printHash32(h) : printHash(h));
+ else {
+ for (auto & i : ss) {
+ Hash h = parseHash16or32(ht, i);
+ std::cout << format("%1%\n") %
+ (op == opTo16 ? printHash(h) : printHash32(h));
+ }
}
- }
-
- else {
- foreach (Strings::iterator, i, ss) {
- Hash h = parseHash16or32(ht, *i);
- std::cout << format("%1%\n") %
- (op == opTo16 ? printHash(h) : printHash32(h));
- }
- }
+ });
}
-
-string programId = "nix-hash";
-