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.
This commit is contained in:
Eelco Dolstra 2013-04-22 15:55:01 +02:00
parent 6ee8bca8ee
commit f2aaed44aa
2 changed files with 19 additions and 24 deletions

View file

@ -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;

View file

@ -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; \
} && \