about summary refs log tree commit diff
path: root/pkgs/applications/version-management/git-and-tools
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2013-04-22 15:55:01 +0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2013-04-22 15:55:01 +0200
commitf2aaed44aa4424f332aa359460148ee2bdaaf0ab (patch)
tree9bb71df41ab87003aac810c92ec7dd5213ea9e73 /pkgs/applications/version-management/git-and-tools
parent6ee8bca8ee983416738720880a566c1203b7d25f (diff)
downloadnixlib-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.nix30
-rw-r--r--pkgs/applications/version-management/git-and-tools/git/symlinks-in-bin.patch13
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; \
+ 	} && \