summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Schmolck <a.schmolck+git@gmail.com>2017-07-11 17:00:17 +0100
committerzimbatm <zimbatm@zimbatm.com>2017-07-11 17:00:17 +0100
commit2c1097a83b2a689bf2f58f2c9d24a47441460750 (patch)
treea03c972f1284a05d32ff96fd761b00211ff3368e
parentc725924dfd2c686f269b4a7668f52e11a92f2e46 (diff)
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 <github.com/git/git/blob/master/builtin/am.c>), 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.
-rw-r--r--pkgs/applications/version-management/git-and-tools/git/default.nix26
1 files 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 fd9aa94c5435..981b57b44c1a 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 \