From f9b7f189982bacbb55bcf30796f24d205ccd551a Mon Sep 17 00:00:00 2001
From: Eric Blake <eblake@redhat.com>
Date: Wed, 24 Feb 2010 09:48:16 -0700
Subject: [PATCH] bootstrap: allow older git

git 1.6.4 is too new to be universally available yet.

* build-aux/bootstrap (GNULIB_SRCDIR): Add fallback if git is
older than 1.6.4.  Requested by the libvirt project.

Signed-off-by: Eric Blake <eblake@redhat.com>
---
 ChangeLog           |  6 ++++++
 build-aux/bootstrap | 20 ++++++++++++++++++--
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 501c26737a..8aef62aadf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2010-02-24  Eric Blake  <eblake@redhat.com>
+
+	bootstrap: allow older git
+	* build-aux/bootstrap (GNULIB_SRCDIR): Add fallback if git is
+	older than 1.6.4.  Requested by the libvirt project.
+
 2010-02-23  Eric Blake  <eblake@redhat.com>
 
 	warn-on-use: work with old autoconf
diff --git a/build-aux/bootstrap b/build-aux/bootstrap
index bd23856193..875e751fa7 100755
--- a/build-aux/bootstrap
+++ b/build-aux/bootstrap
@@ -431,12 +431,28 @@ case ${GNULIB_SRCDIR--} in
   GNULIB_SRCDIR=$gnulib_path
   ;;
 *)
-  # Use GNULIB_SRCDIR as a reference.  Assumes git 1.6.4 or newer.
+  # Use GNULIB_SRCDIR as a reference.
   if test -d "$GNULIB_SRCDIR"/.git && \
         git_modules_config submodule.gnulib.url >/dev/null; then
     echo "$0: getting gnulib files..."
-    git submodule update --init --reference "$GNULIB_SRCDIR" \
+    if git submodule --help|grep reference > /dev/null; then
+      # Prefer the one-liner available in git 1.6.4 or newer.
+      git submodule update --init --reference "$GNULIB_SRCDIR" \
         "$gnulib_path" || exit $?
+    else
+      # This fallback allows at least git 1.5.5.
+      if test -f "$gnulib_path"/gnulib-tool; then
+        # Since file already exists, assume submodule init already complete.
+        git submodule update || exit $?
+      else
+        # Older git can't clone into an empty directory.
+        rmdir "$gnulib_path" 2>/dev/null
+        git clone --reference "$GNULIB_SRCDIR" \
+          "$(git_modules_config submodule.gnulib.url)" "$gnulib_path" \
+          && git submodule init && git submodule update \
+          || exit $?
+      fi
+    fi
     GNULIB_SRCDIR=$gnulib_path
   fi
   ;;
-- 
2.30.2