]> git.nbdom.net Git - nb.git/commitdiff
REPO-install as user
authorNicolas Boisselier <nicolas.boisselier@gmail.com>
Tue, 8 Oct 2024 09:37:17 +0000 (11:37 +0200)
committerNicolas Boisselier <nicolas.boisselier@gmail.com>
Tue, 8 Oct 2024 09:37:17 +0000 (11:37 +0200)
bin/nb-update

index 3df8a1948dfb1a0fce7bd3f91a760d29a8f47e1e..7f6d2443c57d5bdb33a4930ca6b9fcc5ac49f23a 100755 (executable)
@@ -10,8 +10,14 @@ NAME="$(basename "${0}")"
 TMP="/tmp/$NAME.$$"
 LOCK="/run/nb/$NAME.lock"
 [ -z "$UID" ] && UID="$(id -u)"
+
+DEBUG=0
+[ "$1" = "-debug" ] && DEBUG=1 && shift
+
 CLEANUP=0
-[ "$1" = "-cleanup" ] && CLEANUP=1
+[ "$1" = "-cleanup" ] && CLEANUP=1 && shift
+
+filter_name="$@"
 
 #####################################################################
 #
@@ -49,36 +55,24 @@ export GIT_SSH="$TMP"
 #
 # Repos
 #
-filter_name="$@"
 exec_user() {
        declare user="$1"
        shift
+       declare exec_user_cmd="$@"
 
        if [ "$USER" = "$user" ]; then
-               eval "$*"
+               [ "$DEBUG" = "1" ] && echo "DEBUG: exec_user: $exec_user_cmd" 1>&2
+               eval "$exec_user_cmd"
        elif [ "$USER" = "root" ]; then
-               su - $user -c "cd \"$(pwd)\" && $*"
+               [ "$DEBUG" = "1" ] && printf "DEBUG: exec_user: %s\n" "su - $user -c 'cd \"$(pwd)\" && $exec_user_cmd'" 1>&2
+               #echo zaza
+               su - $user -c "cd \"$(pwd)\" && $exec_user_cmd"
        else
-               echo "Wrong user current user=$USER repo user=$user"
+               echo "Wrong user current user=$USER repo user=$user" 1>&2
                return 1
        fi
 }
 
-_git_name() {
-# NB 17.04.23: Should replace other git_name in the future   
-# NB 17.04.23: git config --local remote.origin.url generate an error when not the same user
-       awk -F'= *' ' \
-match($0,/^\[([^]]+)\]/,m){ cat=match(m[1],/^remote .origin.$/) } \
-cat && /url =/{ \
- sub(/^[^:]+:/,"",$2); \
- sub(/^.*\//,"",$2); \
- sub(/(\/|\.git)$/,"",$2); \
- sub(/^.*\/$/,"",$2); \
- print $2; \
-} \
-' .git/config
-}
-
 for dir in $(nb_repos); do
 
        [ -d "$dir/.git" ] || continue
@@ -97,7 +91,8 @@ for dir in $(nb_repos); do
 
        # name from git not from path
        name=$(exec_user $user git_name) || continue
-       # NB 17.04.23 echo "$name"
+       #echo ">>$name"; continue
+
        if [ -z "$name" ]
        then
                echo "Can't read remote.origin.url from '$dir'"
@@ -107,13 +102,16 @@ for dir in $(nb_repos); do
 
        # args filter on name
        if [ -n "$filter_name" ]; then
+               #[ "$DEBUG" = "1" ] && echo "DEBUG: filter_name=$filter_name"
                match=0
-               for i in $@; do
+               for i in $filter_name; do
+                       #[ "$DEBUG" = "1" ] && echo "DEBUG: filter_name=$filter_name $i"
                        case "$name" in
-       $i) match=1; break ;;
-       #*) echo ">$i!=$name" ;;
+                               $i) match=1; break ;;
+                               #*) echo ">$i!=$name" ;;
                        esac
                done
+               #[ "$DEBUG" = "1" ] && echo "DEBUG: filter_name: match='$match' filter_name='$filter_name' name='$name'"
                [ "$match" = "1" ] || continue
        fi
 
@@ -150,15 +148,16 @@ for dir in $(nb_repos); do
        cmd="${cmd}GIT_SSH=$GIT_SSH cd \"$dir\" && git pull"
        [ "$CLEANUP" = "1" ] && cmd="$cmd && git gc"
 
-       if [ 1 = 1 ] && ! exec_user $user git_conn_check; then
+       # NB 08.10.24 if [ 1 = 1 ] && ! exec_user $user git_conn_check; then
+       if ! exec_user $user git_conn_check; then
                echo
-       elif [ "$USER" = "$user" ]; then
-               bash -c "$cmd"
-       elif [ "$USER" = "root" ]; then
-               su - $user -c "$cmd"
-       else
-               echo "Wrong user current user=$USER repo user=$user"
-               false
+       # NB 08.10.24 elif [ "$USER" = "$user" ]; then
+               # NB 08.10.24 bash -c "$cmd"
+       # NB 08.10.24 elif [ "$USER" = "root" ]; then
+               # NB 08.10.24 su - $user -c "$cmd"
+       # NB 08.10.24 else
+               # NB 08.10.24 echo "Wrong user current user=$USER repo user=$user"
+               # NB 08.10.24 false
        fi
        ex_cmd=$?
 
@@ -175,7 +174,8 @@ for dir in $(nb_repos); do
 
                [ -x bin/$name-install ] && cmd_root="$cmd_root && echo '  >$name-install' && bin/$name-install|sed 's/^/    /'"
                if [ "$cmd_root" != "true" ]; then
-                       eval "$cmd_root"
+                       # NB 08.10.24 eval "$cmd_root"
+                       exec_user $user "$cmd_root"
                        ex_cmd_root=$?
                        if [ "$ex_cmd_root" -gt "0" ]; then
                                ex_repo=$ex_cmd_root