From 2c1097a83b2a689bf2f58f2c9d24a47441460750 Mon Sep 17 00:00:00 2001 From: Alexander Schmolck Date: Tue, 11 Jul 2017 17:00:17 +0100 Subject: [PATCH] git: add missing deps for filter-branch etc (#27221) Several git commands are implemented as shell scripts that run awk, sed, grep and perl. There is some existing patching in the postinstall for perl to rewrite it to an absolute reference to pkgs.perl, but several other packages are both missing as a dependency and have no rewrite logic. In particular git filter-branch depends on sed and grep. Additionally, the perl logic also seds git-am, which is now a binary not a shell script anymore (see ), so this part was obsolete. I tested this by grepping all shell scripts for the relevant commands and then comparing the diffs of the new version to what is produced in master. All changes in the scripts seem good to me. --- .../git-and-tools/git/default.nix | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/pkgs/applications/version-management/git-and-tools/git/default.nix b/pkgs/applications/version-management/git-and-tools/git/default.nix index fd9aa94c543..981b57b44c1 100644 --- a/pkgs/applications/version-management/git-and-tools/git/default.nix +++ b/pkgs/applications/version-management/git-and-tools/git/default.nix @@ -1,5 +1,6 @@ { fetchurl, stdenv, curl, openssl, zlib, expat, perl, python, gettext, cpio -, gnugrep, gzip, openssh +, gnugrep, gnused, gawk, coreutils # needed at runtime by git-filter-branch etc +, gzip, openssh , asciidoc, texinfo, xmlto, docbook2x, docbook_xsl, docbook_xml_dtd_45 , libxslt, tcl, tk, makeWrapper, libiconv , svnSupport, subversionClient, perlLibs, smtpPerlLibs, gitwebPerlLibs @@ -104,11 +105,24 @@ stdenv.mkDerivation { --replace ' grep' ' ${gnugrep}/bin/grep' \ --replace ' egrep' ' ${gnugrep}/bin/egrep' - # Fix references to the perl binary. Note that the tab character - # in the patterns is important. - sed -i -e 's| perl -ne| ${perl}/bin/perl -ne|g' \ - -e 's| perl -e| ${perl}/bin/perl -e|g' \ - $out/libexec/git-core/{git-am,git-submodule} + # Fix references to the perl, sed, awk and various coreutil binaries used by + # shell scripts that git calls (e.g. filter-branch) + SCRIPT="$(cat <<'EOS' + BEGIN{ + @a=( + '${perl}/bin/perl', '${gnugrep}/bin/grep', '${gnused}/bin/sed', '${gawk}/bin/awk', + '${coreutils}/bin/cut', '${coreutils}/bin/basename', '${coreutils}/bin/dirname', + '${coreutils}/bin/wc', '${coreutils}/bin/tr' + ); + } + foreach $c (@a) { + $n=(split("/", $c))[-1]; + s|(?<=[^#][^/.-])\b''${n}(?=\s)|''${c}|g + } + EOS + )" + perl -0777 -i -pe "$SCRIPT" \ + $out/libexec/git-core/git-{sh-setup,filter-branch,merge-octopus,mergetool,quiltimport,request-pull,stash,submodule,subtree,web--browse} # Fix references to gettext. substituteInPlace $out/libexec/git-core/git-sh-i18n \