From f08449ccbd2009b858aae18341aedf3d0829b91a Mon Sep 17 00:00:00 2001
From: Eelco Dolstra <eelco.dolstra@logicblox.com>
Date: Wed, 7 Oct 2015 14:55:33 +0200
Subject: [PATCH] nix-prefetch-url: Add --name option

This allows overriding the name component of the resulting Nix store
path, which is necessary if the base name of the URI contains
"illegal" characters.
---
 doc/manual/command-ref/nix-prefetch-url.xml | 12 ++++++++++++
 src/nix-prefetch-url/nix-prefetch-url.cc    | 10 +++++++---
 2 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/doc/manual/command-ref/nix-prefetch-url.xml b/doc/manual/command-ref/nix-prefetch-url.xml
index e1f0c8e54..016d8863a 100644
--- a/doc/manual/command-ref/nix-prefetch-url.xml
+++ b/doc/manual/command-ref/nix-prefetch-url.xml
@@ -91,6 +91,18 @@ downloaded file in the Nix store is also printed.</para>
 
   </varlistentry>
 
+  <varlistentry><term><option>--name</option></term>
+
+    <listitem><para>Override the name of the file in the Nix store. By
+    default, this is
+    <literal><replaceable>hash</replaceable>-<replaceable>basename</replaceable></literal>,
+    where <replaceable>basename</replaceable> is the last component of
+    <replaceable>url</replaceable>. Overriding the name is necessary
+    when <replaceable>basename</replaceable> contains characters that
+    are not allowed in Nix store paths.</para></listitem>
+
+  </varlistentry>
+
 </variablelist>
 
 </refsection>
diff --git a/src/nix-prefetch-url/nix-prefetch-url.cc b/src/nix-prefetch-url/nix-prefetch-url.cc
index a3932d6be..0a8166da4 100644
--- a/src/nix-prefetch-url/nix-prefetch-url.cc
+++ b/src/nix-prefetch-url/nix-prefetch-url.cc
@@ -75,6 +75,8 @@ int main(int argc, char * * argv)
             }
             else if (*arg == "--unpack")
                 unpack = true;
+            else if (*arg == "--name")
+                name = getArg(*arg, arg, end);
             else if (parseAutoArgs(arg, end, autoArgs_))
                 ;
             else if (parseSearchPathArg(arg, end, searchPath))
@@ -125,9 +127,11 @@ int main(int argc, char * * argv)
                 unpack = state.forceString(*attr->value) == "recursive";
 
             /* Extract the name. */
-            attr = v.attrs->find(state.symbols.create("name"));
-            if (attr != v.attrs->end())
-                name = state.forceString(*attr->value);
+            if (name.empty()) {
+                attr = v.attrs->find(state.symbols.create("name"));
+                if (attr != v.attrs->end())
+                    name = state.forceString(*attr->value);
+            }
         }
 
         /* Figure out a name in the Nix store. */
-- 
GitLab