diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2013-04-22 15:55:01 +0200 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2013-04-22 15:55:01 +0200 |
commit | f2aaed44aa4424f332aa359460148ee2bdaaf0ab (patch) | |
tree | 9bb71df41ab87003aac810c92ec7dd5213ea9e73 /pkgs/applications/version-management/git-and-tools | |
parent | 6ee8bca8ee983416738720880a566c1203b7d25f (diff) | |
download | nixlib-f2aaed44aa4424f332aa359460148ee2bdaaf0ab.tar nixlib-f2aaed44aa4424f332aa359460148ee2bdaaf0ab.tar.gz nixlib-f2aaed44aa4424f332aa359460148ee2bdaaf0ab.tar.bz2 nixlib-f2aaed44aa4424f332aa359460148ee2bdaaf0ab.tar.lz nixlib-f2aaed44aa4424f332aa359460148ee2bdaaf0ab.tar.xz nixlib-f2aaed44aa4424f332aa359460148ee2bdaaf0ab.tar.zst nixlib-f2aaed44aa4424f332aa359460148ee2bdaaf0ab.zip |
git: Properly use symlinks instead of hard links
Git's Makefile has a NO_INSTALL_HARDLINKS flag to produce symlinks instead of hard links. However, it still produces hard links between $out/bin and $out/libexec, hence the patch. Also, update Git to 1.8.2.1.
Diffstat (limited to 'pkgs/applications/version-management/git-and-tools')
-rw-r--r-- | pkgs/applications/version-management/git-and-tools/git/default.nix | 30 | ||||
-rw-r--r-- | pkgs/applications/version-management/git-and-tools/git/symlinks-in-bin.patch | 13 |
2 files changed, 19 insertions, 24 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 47f38335c303..58071d86d4e5 100644 --- a/pkgs/applications/version-management/git-and-tools/git/default.nix +++ b/pkgs/applications/version-management/git-and-tools/git/default.nix @@ -10,7 +10,7 @@ let - version = "1.8.2"; + version = "1.8.2.1"; svn = subversionClient.override { perlBindings = true; }; @@ -21,10 +21,10 @@ stdenv.mkDerivation { src = fetchurl { url = "http://git-core.googlecode.com/files/git-${version}.tar.gz"; - sha256 = "1rhkya4kfs7iayasgj3bk8zg1pfk3h7wqhfy9d6aaqjgzb75pwy2"; + sha1 = "ad9f833e509ba31c83efe336fd3599e89a39394b"; }; - patches = [ ./docbook2texi.patch ]; + patches = [ ./docbook2texi.patch ./symlinks-in-bin.patch ]; buildInputs = [curl openssl zlib expat gettext cpio makeWrapper] ++ stdenv.lib.optionals withManual [ asciidoc texinfo xmlto docbook2x @@ -41,6 +41,8 @@ stdenv.mkDerivation { # so that `SPARSE_FLAGS' corresponds to the current architecture... #doCheck = true; + installFlags = "NO_INSTALL_HARDLINKS=1"; + postInstall = '' notSupported() { @@ -116,27 +118,7 @@ stdenv.mkDerivation { notSupported "$out/$prog" \ "reinstall with config git = { guiSupport = true; } set" done - '') - - # Don't know why hardlinks aren't created. git installs the same executable - # multiple times into $out so replace duplicates by symlinks because I - # haven't tested whether the nix distribution system can handle hardlinks. - # This reduces the size of $out from 115MB down to 13MB on x86_64-linux! - + '' - declare -A seen - shopt -s globstar - for f in "$out/"**; do - if [ -L "$f" ]; then continue; fi - test -f "$f" || continue - sum=$(md5sum "$f"); - sum=''\${sum/ */} - if [ -z "''\${seen["$sum"]}" ]; then - seen["$sum"]="$f" - else - rm "$f"; ln -v -s "''\${seen["$sum"]}" "$f" - fi - done - ''; + ''); enableParallelBuilding = true; diff --git a/pkgs/applications/version-management/git-and-tools/git/symlinks-in-bin.patch b/pkgs/applications/version-management/git-and-tools/git/symlinks-in-bin.patch new file mode 100644 index 000000000000..29d537db25f9 --- /dev/null +++ b/pkgs/applications/version-management/git-and-tools/git/symlinks-in-bin.patch @@ -0,0 +1,13 @@ +diff -ru -x '*~' git-1.8.2.1-orig/Makefile git-1.8.2.1/Makefile +--- git-1.8.2.1-orig/Makefile 2013-04-08 00:52:04.000000000 +0200 ++++ git-1.8.2.1/Makefile 2013-04-22 15:46:42.906026940 +0200 +@@ -2319,8 +2319,7 @@ + { test "$$bindir/" = "$$execdir/" || \ + for p in git$X $(filter $(install_bindir_programs),$(ALL_PROGRAMS)); do \ + $(RM) "$$execdir/$$p" && \ +- test -z "$(NO_INSTALL_HARDLINKS)$(NO_CROSS_DIRECTORY_HARDLINKS)" && \ +- ln "$$bindir/$$p" "$$execdir/$$p" 2>/dev/null || \ ++ ln -s "$$bindir/$$p" "$$execdir/$$p" 2>/dev/null || \ + cp "$$bindir/$$p" "$$execdir/$$p" || exit; \ + done; \ + } && \ |