mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-25 16:33:15 +00:00
stdenv: introduce baseHash() to replace stripHash()
stripHash uses a global variable to communicate it's computation results, but it's not necessary. You can just pipe to stdout in a subshell. A function mostly behaves like just another command. baseHash() also introduces a suffix-stripping capability since it's something the users of the function tend to use.
This commit is contained in:
parent
7060eaf0bb
commit
e71a5cb878
@ -1191,32 +1191,36 @@ echo @foo@
|
||||
<replaceable>file</replaceable>.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry xml:id='fun-baseHash'>
|
||||
<term>
|
||||
<function>baseHash</function>
|
||||
<replaceable>path</replaceable>
|
||||
<replaceable>suffix</replaceable>
|
||||
</term>
|
||||
<listitem><para>Strips the directory and hash part of a store
|
||||
path, storing the name part in the environment variable
|
||||
<literal>strippedName</literal>. If <literal>suffix</literal> is also
|
||||
provided, the suffix will also be removed. For example:</para>
|
||||
|
||||
<programlisting>
|
||||
baseHash "/nix/store/9s9r019176g7cvn2nvcw41gsp862y6b4-coreutils-8.24"
|
||||
# prints coreutils-8.24
|
||||
</programlisting>
|
||||
|
||||
<programlisting>
|
||||
baseHash "/nix/store/0016702zbydafsr20n9l1dcw7x2bf6jj-arraysugar-0.1.0.gem" .gem
|
||||
# prints arraysugar-0.1.0
|
||||
</programlisting>
|
||||
</listitem>
|
||||
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry xml:id='fun-stripHash'>
|
||||
<term><function>stripHash</function>
|
||||
<replaceable>path</replaceable></term>
|
||||
<listitem><para>Strips the directory and hash part of a store
|
||||
path, storing the name part in the environment variable
|
||||
<literal>strippedName</literal>. For example:
|
||||
|
||||
<programlisting>
|
||||
stripHash "/nix/store/9s9r019176g7cvn2nvcw41gsp862y6b4-coreutils-8.24"
|
||||
# prints coreutils-8.24
|
||||
echo $strippedName
|
||||
</programlisting>
|
||||
|
||||
If you wish to store the result in another variable, then the
|
||||
following idiom may be useful:
|
||||
|
||||
<programlisting>
|
||||
name="/nix/store/9s9r019176g7cvn2nvcw41gsp862y6b4-coreutils-8.24"
|
||||
someVar=$(stripHash $name; echo $strippedName)
|
||||
</programlisting>
|
||||
|
||||
</para></listitem>
|
||||
<listitem><para>Deprecated. Use baseHash instead.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
|
||||
</variablelist>
|
||||
|
||||
</section>
|
||||
|
@ -12,7 +12,7 @@ for i in $scripts; do
|
||||
if test "$(echo $i | cut -c1-2)" = "=>"; then
|
||||
subDir=$(echo $i | cut -c3-)
|
||||
else
|
||||
dst=$out/$subDir/$((stripHash $i; echo $strippedName) | sed 's/\.in//')
|
||||
dst=$out/$subDir/$(baseHash $i | sed 's/\.in//')
|
||||
doSub $i $dst
|
||||
chmod +x $dst # !!!
|
||||
fi
|
||||
@ -23,7 +23,7 @@ for i in $substFiles; do
|
||||
if test "$(echo $i | cut -c1-2)" = "=>"; then
|
||||
subDir=$(echo $i | cut -c3-)
|
||||
else
|
||||
dst=$out/$subDir/$((stripHash $i; echo $strippedName) | sed 's/\.in//')
|
||||
dst=$out/$subDir/$(baseHash $i | sed 's/\.in//')
|
||||
doSub $i $dst
|
||||
fi
|
||||
done
|
||||
|
@ -531,8 +531,7 @@ rec {
|
||||
|
||||
# Hacky: RPM looks for <basename>.spec inside the tarball, so
|
||||
# strip off the hash.
|
||||
stripHash "$src"
|
||||
srcName="$strippedName"
|
||||
srcName=$(baseHash "$src")
|
||||
cp "$src" "$srcName" # `ln' doesn't work always work: RPM requires that the file is owned by root
|
||||
|
||||
export HOME=/tmp/home
|
||||
|
@ -41,7 +41,7 @@ stdenv.mkDerivation rec {
|
||||
sourceRoot = "./";
|
||||
|
||||
unpackCmd = ''
|
||||
ttfName=$(basename $(stripHash $curSrc; echo $strippedName))
|
||||
ttfName=$(baseHash $curSrc)
|
||||
cp $curSrc ./$ttfName
|
||||
'';
|
||||
|
||||
|
@ -3,5 +3,4 @@ source $stdenv/setup
|
||||
mkdir -p $out/xml/dtd/docbook-ebnf
|
||||
cd $out/xml/dtd/docbook-ebnf
|
||||
cp -p $dtd dbebnf.dtd
|
||||
stripHash $catalog
|
||||
cp -p $catalog $strippedName
|
||||
cp -p $catalog $(baseHash $catalog)
|
||||
|
@ -484,8 +484,7 @@ dumpVars() {
|
||||
}
|
||||
|
||||
|
||||
# Utility function: return the base name of the given path, with the
|
||||
# prefix `HASH-' removed, if present.
|
||||
# DEPRECATED, use baseHash - 2016-06-23
|
||||
stripHash() {
|
||||
strippedName=$(basename $1);
|
||||
if echo "$strippedName" | grep -q '^[a-z0-9]\{32\}-'; then
|
||||
@ -493,6 +492,14 @@ stripHash() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Print NAME with any leading directory components and hash removed.
|
||||
# If specified, also remove a trailing SUFFIX.
|
||||
#
|
||||
# Usage: baseHash NAME [SUFFIX]
|
||||
# Usage: baseName -a [-s SUFFIX] NAME...
|
||||
baseHash() {
|
||||
basename "$@" | sed -s 's/^[a-z0-9]\{32\}-//g'
|
||||
}
|
||||
|
||||
unpackCmdHooks+=(_defaultUnpack)
|
||||
_defaultUnpack() {
|
||||
|
@ -4,6 +4,6 @@ mkdir -p $out
|
||||
|
||||
for ((i = 1; i <= $nrFrames; i++)); do
|
||||
echo "producing frame $i...";
|
||||
targetName=$out/$(basename $(stripHash $dotGraph; echo $strippedName) .dot)-f-$i.dot
|
||||
targetName=$out/$(baseHash $dotGraph .dot)-f-$i.dot
|
||||
cpp -DFRAME=$i < $dotGraph > $targetName
|
||||
done
|
||||
|
@ -185,7 +185,7 @@ rec {
|
||||
if test -d $postscript; then
|
||||
input=$(ls $postscript/*.ps)
|
||||
else
|
||||
input=$(stripHash $postscript; echo $strippedName)
|
||||
input=$(baseHash $postscript)
|
||||
ln -s $postscript $input
|
||||
fi
|
||||
|
||||
|
@ -4,7 +4,7 @@ mkdir -p $out
|
||||
|
||||
dot2pdf() {
|
||||
sourceFile=$1
|
||||
targetName=$out/$(basename $(stripHash $sourceFile; echo $strippedName) .dot).pdf
|
||||
targetName=$out/$(baseHash $sourceFile .dot).pdf
|
||||
echo "converting $sourceFile to $targetName..."
|
||||
export FONTCONFIG_FILE=$fontsConf
|
||||
dot -Tpdf $sourceFile > $targetName
|
||||
|
@ -4,7 +4,7 @@ mkdir -p $out
|
||||
|
||||
dot2ps() {
|
||||
sourceFile=$1
|
||||
targetName=$out/$(basename $(stripHash $sourceFile; echo $strippedName) .dot).ps
|
||||
targetName=$out/$(baseHash $sourceFile .dot).ps
|
||||
echo "converting $sourceFile to $targetName..."
|
||||
dot -Tps $sourceFile > $targetName
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ cd $startDir
|
||||
|
||||
lhstex() {
|
||||
sourceFile=$1
|
||||
targetName=$out/$(basename $(stripHash $sourceFile; echo $strippedName) .lhs).tex
|
||||
targetName=$out/$(baseHash $sourceFile .lhs).tex
|
||||
echo "converting $sourceFile to $targetName..."
|
||||
lhs2TeX -o "$targetName" $flags "$sourceFile"
|
||||
}
|
||||
|
@ -16,11 +16,11 @@ for i in $extraFiles; do
|
||||
if test -d $i; then
|
||||
ln -s $i/* .
|
||||
else
|
||||
ln -s $i $(stripHash $i; echo $strippedName)
|
||||
ln -s $i $(baseHash $i)
|
||||
fi
|
||||
done
|
||||
|
||||
rootName=$(basename $(stripHash "$rootFile"; echo $strippedName))
|
||||
rootName=$(baseHash "$rootFile")
|
||||
|
||||
rootNameBase=$(echo "$rootName" | sed 's/\..*//')
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user