emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master d3edc09: Port ‘./autogen.sh git’ to non-clones


From: Paul Eggert
Subject: [Emacs-diffs] master d3edc09: Port ‘./autogen.sh git’ to non-clones
Date: Thu, 14 Apr 2016 01:19:37 +0000

branch: master
commit d3edc09c3f4fdce24d4f66c5a94302cae5d26980
Author: Paul Eggert <address@hidden>
Commit: Paul Eggert <address@hidden>

    Port ‘./autogen.sh git’ to non-clones
    
    Problem reported by Angelo Graziosi in:
    http://lists.gnu.org/archive/html/emacs-devel/2016-04/msg00341.html
    * autogen.sh (do_git): Default to false when the arg is ‘all’ but
    there is no ‘.git’.
    (git_common_dir, hooks): New vars.
    (git_config, tailored_hooks, sample_hooks): Use them.
---
 autogen.sh |   26 +++++++++++++++++---------
 1 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/autogen.sh b/autogen.sh
index 2e10a77..cd0accd 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -112,7 +112,8 @@ for arg; do
       --help)
        exec echo "$0: usage: $0 [all|autoconf|git]";;
       all)
-       do_autoconf=true do_git=true;;
+       do_autoconf=true
+       test -e .git && do_git=true;;
       autoconf)
        do_autoconf=true;;
       git)
@@ -260,7 +261,8 @@ git_config ()
                echo 'Configuring local git repository...'
                case $cp_options in
                  --backup=*)
-                   cp $cp_options --force .git/config .git/config || exit;;
+                   config=$git_common_dir/config
+                   cp $cp_options --force -- "$config" "$config" || exit;;
                esac
            fi
            echo "git config $name '$value'"
@@ -272,6 +274,13 @@ git_config ()
 
 ## Configure Git, if requested.
 
+# Get location of Git's common configuration directory.  For older Git
+# versions this is just '.git'.  Newer Git versions support worktrees.
+
+test -e .git && git_common_dir=`git rev-parse --git-common-dir 2>/dev/null` ||
+  git_common_dir=.git
+hooks=$git_common_dir/hooks
+
 # Check hashes when transferring objects among repositories.
 
 git_config transfer.fsckObjects true
@@ -296,12 +305,11 @@ tailored_hooks=
 sample_hooks=
 
 for hook in commit-msg pre-commit; do
-    cmp build-aux/git-hooks/$hook .git/hooks/$hook >/dev/null 2>&1 ||
+    cmp -- build-aux/git-hooks/$hook "$hooks/$hook" >/dev/null 2>&1 ||
        tailored_hooks="$tailored_hooks $hook"
 done
 for hook in applypatch-msg pre-applypatch; do
-    src=.git/hooks/$hook.sample
-    cmp "$src" .git/hooks/$hook >/dev/null 2>&1 ||
+    cmp -- "$hooks/$hook.sample" "$hooks/$hook" >/dev/null 2>&1 ||
        sample_hooks="$sample_hooks $hook"
 done
 
@@ -311,15 +319,15 @@ if test -n "$tailored_hooks$sample_hooks"; then
 
        if test -n "$tailored_hooks"; then
            for hook in $tailored_hooks; do
-               dst=.git/hooks/$hook
-               cp $cp_options build-aux/git-hooks/$hook "$dst" || exit
-               chmod a-w "$dst" || exit
+               dst=$hooks/$hook
+               cp $cp_options -- build-aux/git-hooks/$hook "$dst" || exit
+               chmod -- a-w "$dst" || exit
            done
        fi
 
        if test -n "$sample_hooks"; then
            for hook in $sample_hooks; do
-               cp $cp_options .git/hooks/$hook.sample .git/hooks/$hook || exit
+               cp $cp_options -- "$hooks/$hook.sample" "$hooks/$hook" || exit
                chmod a-w .git/hooks/$hook || exit
            done
        fi



reply via email to

[Prev in Thread] Current Thread [Next in Thread]