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.
This commit is contained in:
Eelco Dolstra 2015-10-07 14:55:33 +02:00
parent e4abf8610b
commit f08449ccbd
2 changed files with 19 additions and 3 deletions

View file

@ -91,6 +91,18 @@ downloaded file in the Nix store is also printed.</para>
</varlistentry> </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> </variablelist>
</refsection> </refsection>

View file

@ -75,6 +75,8 @@ int main(int argc, char * * argv)
} }
else if (*arg == "--unpack") else if (*arg == "--unpack")
unpack = true; unpack = true;
else if (*arg == "--name")
name = getArg(*arg, arg, end);
else if (parseAutoArgs(arg, end, autoArgs_)) else if (parseAutoArgs(arg, end, autoArgs_))
; ;
else if (parseSearchPathArg(arg, end, searchPath)) else if (parseSearchPathArg(arg, end, searchPath))
@ -125,10 +127,12 @@ int main(int argc, char * * argv)
unpack = state.forceString(*attr->value) == "recursive"; unpack = state.forceString(*attr->value) == "recursive";
/* Extract the name. */ /* Extract the name. */
if (name.empty()) {
attr = v.attrs->find(state.symbols.create("name")); attr = v.attrs->find(state.symbols.create("name"));
if (attr != v.attrs->end()) if (attr != v.attrs->end())
name = state.forceString(*attr->value); name = state.forceString(*attr->value);
} }
}
/* Figure out a name in the Nix store. */ /* Figure out a name in the Nix store. */
if (name.empty()) if (name.empty())