.git-hooks/README |    2 -
 g                 |   64 ++++++++++++++++++++++++++++++++++++++++--------------
 2 files changed, 49 insertions(+), 17 deletions(-)

New commits:
commit 9afc6b22e225e8a6ec50c1cbb4d966585d15dbfd
Author:     Juergen Funk <juergen.funk...@cib.de>
AuthorDate: Wed Feb 22 12:15:06 2023 +0100
Commit:     Thorsten Behrens <thorsten.behr...@allotropia.de>
CommitDate: Wed Mar 1 10:44:25 2023 +0000

    git-hooks: overwrite the windows-links not with linux-links
    
    Always when you call build or logerrit, then the windows-links
    overwrite with linux-links, but when you using GIT for Windows
    you need the windows-links.
    This patch made a check it is using GIT for Windows, and check what
    for link it is, when wrong link, it output the .git-hooks/README
    
    Improve the check for links, when a link is set not need to set
    the link anymore
    
    In .git-hooks/README improve the FOR with delete of the wrong link
    
    look here for GIT for Windows:
    
https://wiki.documentfoundation.org/Development/BuildingOnWindows/de#Cygwin_and_git
    
    Change-Id: I9f6ef9aca316058ef74cb2b2d107236f03a2e2ee
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147458
    Tested-by: Jenkins
    Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de>

diff --git a/.git-hooks/README b/.git-hooks/README
index 93b00ee01c3b..5ef9e8e45a48 100644
--- a/.git-hooks/README
+++ b/.git-hooks/README
@@ -7,7 +7,7 @@ To install manually, run:
 When you using GIT for Windows, you need Windows links
 Open a Dos-Box with admin rights then
   cd .git/hooks
-  FOR /F " usebackq " %i IN (`dir /b ..\..\.git-hooks`) DO mklink %i 
..\..\.git-hooks\%i
+  FOR /F " usebackq " %i IN (`dir /b ..\..\.git-hooks`) DO del /as /f %i & 
mklink %i ..\..\.git-hooks\%i
 
 There are two groups of these hooks: client side and server side.
 
diff --git a/g b/g
index b018561c6775..a9a879f5d907 100755
--- a/g
+++ b/g
@@ -42,7 +42,7 @@ refresh_submodule_hooks()
                 continue
             fi
             hook="${repo?}/.git/hooks/${hook_name##*/}"
-            if [ ! -e "${hook?}" ] || [ -L "${hook?}" ] ; then
+            if [ ! -e "${hook?}" ] || [ ! -L "${hook?}" ] ; then
                 rm -f "${hook?}"
                 ln -sf "${hook_name}" "${hook?}"
             fi
@@ -53,7 +53,7 @@ refresh_submodule_hooks()
                 continue
             fi
             hook="${repo?}/.git/hooks/${hook_name##*/}"
-            if [ ! -e "${hook?}" ] || [ -L "${hook?}" ] ; then
+            if [ ! -e "${hook?}" ] || [ ! -L "${hook?}" ] ; then
                 rm -f "${hook?}"
                 ln -sf "${hook_name}" "${hook?}"
             fi
@@ -64,7 +64,7 @@ refresh_submodule_hooks()
                 continue
             fi
             hook=".git/modules/${repo?}/hooks/${hook_name##*/}"
-            if [ ! -e "${hook?}" ] || [ -L "${hook?}" ] ; then
+            if [ ! -e "${hook?}" ] || [ ! -L "${hook?}" ] ; then
                 rm -f "${hook?}"
                 ln -sf "${hook_name}" "${hook?}"
             fi
@@ -75,7 +75,7 @@ refresh_submodule_hooks()
                 continue
             fi
             hook=".git/modules/${repo?}/hooks/${hook_name##*/}"
-            if [ ! -e "${hook?}" ] || [ -L "${hook?}" ] ; then
+            if [ ! -e "${hook?}" ] || [ ! -L "${hook?}" ] ; then
                 rm -f "${hook?}"
                 ln -sf "${hook_name}" "${hook?}"
             fi
@@ -89,22 +89,44 @@ refresh_all_hooks()
     local repo
     local hook_name
     local hook
+    local winlnk
+    local lnkfile=".git/hooks/pre-commit"
 
     pushd "${COREDIR?}" > /dev/null
-    # There's no ".git" e.g. in a secondary worktree
-    if [ -d ".git" ]; then
-        for hook_name in "${COREDIR?}/.git-hooks"/* ; do
-            hook=".git/hooks/${hook_name##*/}"
-            if [ ! -e "${hook?}" ] || [ -L "${hook?}" ] ; then
-                rm -f "${hook?}"
-                ln -sf "${hook_name}" "${hook?}"
-            fi
+
+    if [ $WINGIT -eq 1 ]; then
+        winlnk=0
+        if [ -e "${lnkfile}" ] && [ -L "${lnkfile}" ] ; then
+            # if linux-links or windows-links?
+            # dos dir output windows link:
+            # 04.09.2020  10:54    <SYMLINK>      pre-commit 
[..\..\.git-hooks\pre-commit]
+            # dos dir output linux link:
+            # file not found
+            winlnk=$(cmd /C "DIR ${lnkfile//'/'/'\'}" 2>&1)
+            winlnk=$(echo "$winlnk" | grep -icE "<SYMLINK>.*${lnkfile##*/} \[")
+        fi
+
+        if [ $winlnk -eq 0 ]; then
+            echo "You using GIT for Windows, but the hook-links not right, 
change with mklink"
+            cat .git-hooks/README
+        fi
+    else
+        # There's no ".git" e.g. in a secondary worktree
+        if [ -d ".git" ]; then
+            for hook_name in "${COREDIR?}/.git-hooks"/* ; do
+                hook=".git/hooks/${hook_name##*/}"
+                if [ ! -e "${hook?}" ] || [ ! -L "${hook?}" ] ; then
+                    rm -f "${hook?}"
+                    ln -sf "${hook_name}" "${hook?}"
+                fi
+            done
+        fi
+
+        for repo in ${SUBMODULES_ALL?} ; do
+            refresh_submodule_hooks "$repo"
         done
     fi
 
-    for repo in ${SUBMODULES_ALL?} ; do
-        refresh_submodule_hooks "$repo"
-    done
     popd > /dev/null
 
 }
@@ -294,7 +316,9 @@ if [ "$#" -eq "0" ] ; then
     usage
 fi
 
-if [ ! "$(type -p git)" ]; then
+gitfile="$(type -p git)"
+
+if [ ! "${gitfile}" ]; then
     echo "Cannot find the git binary! Is git installed and is in PATH?"
     exit 1
 fi
@@ -323,6 +347,14 @@ REPORT_REPOS=1
 REPORT_COMMANDS=0
 REPORT_COMPACT=0
 DO_HOOK_REFRESH=false
+WINGIT=
+
+# it is 'GIT for Windows'
+WINGIT=$(echo $gitfile | grep -c cygdrive)
+if [ $WINGIT -eq 1 ]; then
+    gitfile=$(git --version)
+    WINGIT=$(echo $gitfile | grep -ic windows)
+fi
 
 while [ "${COMMAND:0:1}" = "-" ] ; do
     case "$COMMAND" in

Reply via email to