[fractal/fractal-next] pre-commit: Export logic to separate script



commit a53b20bfab37bcc25d1ed3650bcede4be6727e4b
Author: Kévin Commaille <zecakeh tedomum fr>
Date:   Fri Jan 14 17:06:00 2022 +0100

    pre-commit: Export logic to separate script

 hooks/pre-commit.hook | 74 +++++++++++++++++++--------------------------------
 scripts/checks.sh     | 55 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 82 insertions(+), 47 deletions(-)
---
diff --git a/hooks/pre-commit.hook b/hooks/pre-commit.hook
index 452a415a..66f888ac 100755
--- a/hooks/pre-commit.hook
+++ b/hooks/pre-commit.hook
@@ -1,57 +1,37 @@
 #!/bin/sh
-# Source: https://gitlab.gnome.org/GNOME/fractal/blob/master/hooks/pre-commit.hook
-
-install_rustfmt() {
-    if ! which rustup &> /dev/null; then
-        curl https://sh.rustup.rs -sSf  | sh -s -- -y
-        export PATH=$PATH:$HOME/.cargo/bin
-        if ! which rustup &> /dev/null; then
-            echo "Failed to install rustup. Performing the commit without style checking."
-            exit 0
-        fi
-    fi
-
-    if ! rustup component list|grep rustfmt &> /dev/null; then
-        echo "Installing rustfmt…"
-        rustup component add rustfmt
-    fi
-}
-
-if ! which cargo >/dev/null 2>&1 || ! cargo fmt --help >/dev/null 2>&1; then
-    echo "Unable to check Fractal’s code style, because rustfmt could not be run."
-
-    if [ ! -t 1 ]; then
-        # No input is possible
-        echo "Performing commit."
-        exit 0
-    fi
+# Depends on: scripts/checks.sh
 
+echo "-- Pre-commit checks --"
+echo "To ignore these checks next time, run: git commit --no-verify"
+echo ""
+if scripts/checks.sh; then
     echo ""
-    echo "y: Install rustfmt via rustup"
-    echo "n: Don't install rustfmt and perform the commit"
-    echo "Q: Don't install rustfmt and abort the commit"
-
+    echo "Pre-commit checks result: ok"
+elif [[ $? -eq 2 ]]; then
+    echo "A missing dependency was found"
+    echo ""
+    echo "y: Skip checks and proceed with commit"
+    echo "N: Abort commit"
     echo ""
     while true
     do
-        echo -n "Install rustfmt via rustup? [y/n/Q]: "; read yn < /dev/tty
+        echo -n "Skip the pre-commit checks? [y/N]: "; read yn < /dev/tty
         case $yn in
-            [Yy]* ) install_rustfmt; break;;
-            [Nn]* ) echo "Performing commit."; exit 0;;
-            [Qq]* | "" ) echo "Aborting commit."; exit -1 >/dev/null 2>&1;;
-            * ) echo "Invalid input";;
+            [Yy]* )
+                echo "Skipping checks…"
+                exit 0
+                ;;
+            [Nn]* | "" )
+                echo "Aborting commit"
+                exit  1
+                ;;
+            * ) 
+                echo "Invalid input"
+                ;;
         esac
     done
-
-fi
-
-echo "--Checking style--"
-cargo fmt --all -- --check
-if test $? != 0; then
-    echo "--Checking style fail--"
-    echo "Please fix the above issues, either manually or by running: cargo fmt --all"
-
-    exit -1
 else
-    echo "--Checking style pass--"
-fi
+    echo "Pre-commit checks result: fail"
+    echo "Aborting commit"
+    exit 1
+fi
\ No newline at end of file
diff --git a/scripts/checks.sh b/scripts/checks.sh
new file mode 100755
index 00000000..4996edf8
--- /dev/null
+++ b/scripts/checks.sh
@@ -0,0 +1,55 @@
+#!/bin/sh
+# Source: https://gitlab.gnome.org/GNOME/fractal/blob/master/hooks/pre-commit.hook
+
+install_rustfmt() {
+    if ! which rustup &> /dev/null; then
+        curl https://sh.rustup.rs -sSf  | sh -s -- -y
+        export PATH=$PATH:$HOME/.cargo/bin
+        if ! which rustup &> /dev/null; then
+            echo "Failed to install rustup."
+            exit 2
+        fi
+    fi
+
+    if ! rustup component list|grep rustfmt &> /dev/null; then
+        echo "Installing rustfmt…"
+        rustup component add rustfmt
+    fi
+}
+
+if ! which cargo >/dev/null 2>&1 || ! cargo fmt --help >/dev/null 2>&1; then
+    echo "Unable to check Fractal’s code style, because rustfmt could not be run."
+
+    if [ ! -t 1 ]; then
+        # No input is possible
+        echo "Performing commit."
+        exit 0
+    fi
+
+    echo ""
+    echo "y: Install rustfmt via rustup"
+    echo "N: Don't install rustfmt"
+
+    echo ""
+    while true
+    do
+        echo -n "Install rustfmt? [y/N]: "; read yn < /dev/tty
+        case $yn in
+            [Yy]* ) install_rustfmt; break;;
+            [Nn]* | "" ) exit 2 >/dev/null 2>&1;;
+            * ) echo "Invalid input";;
+        esac
+    done
+
+fi
+
+echo "--Checking style--"
+cargo fmt --all -- --check
+if test $? != 0; then
+    echo "--Checking style fail--"
+    echo "Please fix the above issues, either manually or by running: cargo fmt --all"
+
+    exit 1
+else
+    echo "--Checking style pass--"
+fi


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