From bcc96a388f77dd275b85ef8c368f005c8aac2552 Mon Sep 17 00:00:00 2001 From: Gerhard Hoffmann Date: Fri, 26 May 2023 15:01:48 +0200 Subject: [PATCH] Restructered clone_customer_repository() and cd_customer_repository(). Fixed cd_home() to return explicitly to the customer repository, not only to -. --- git_helpers | 159 ++++++++++++++++++++++++++++------------------------ 1 file changed, 85 insertions(+), 74 deletions(-) diff --git a/git_helpers b/git_helpers index d774652..1b896b7 100755 --- a/git_helpers +++ b/git_helpers @@ -82,92 +82,104 @@ git_customer_branch () { # clone_customer_repository () { local func="${FUNCNAME[0]}" - if [ "$PWD" = "$WORKING_DIRECTORY" ]; then - mkdir -p "./$WORKSPACE_DIR" - # check if the directory is empty. If so, clone the - # customer repository - if ! find ./$WORKSPACE_DIR -mindepth 1 -maxdepth 1 | read; then - log_debug "$func:${LINENO} cloning ${1} ..." - if cd "./$WORKSPACE_DIR" - then - exec_git_command git clone "$1" - if [ $? -eq 0 ]; then - log_debug "$func:${LINENO} cloning ${1} done" - GIT_CLONE_EXECUTED=1 - # after cloning, cd into repository, and re-initialize, - # setting the work-tree as "/". This has the effect that - # a "git pull" will automatically fetched files in the - # corresponding sytem-folders. - if cd ${CUSTOMER_ID_BASE_DIR}; then - # configure hooks directory - exec_git_command git config core.hooksPath .githooks - exec_git_command git checkout "$LOCAL_BRANCH" - if [[ $? -eq 0 ]]; then - log_debug "$func:${LINENO} checked out local branch $LOCAL_BRANCH" - exec_git_command git config core.worktree "/" - if [[ $? -eq 0 ]]; then - log_debug "$func:${LINENO} configured worktree" - exec_git_command git fetch --all - if [[ $? -eq 0 ]]; then - log_debug "$func:${LINENO} fetch repository" - exec_git_command git reset --hard "$LOCAL_BRANCH" - if [[ $? -eq 0 ]]; then - log_debug "$func:${LINENO} reset --hard $LOCAL_BRANCH" - CLONE_CUSTOMER_REPOSITORY=true - log_debug "$func:${LINENO} re-init of ${1} done" - cd_home; return 0 - fi - fi - fi - fi - fi - fi - cd_home; return 1 - fi - else - # the directory is not empty, so we assume the - # customer-repository has been cloned already - if ! [[ -d "./${WORKSPACE_DIR}/$CUSTOMER_ID" ]]; then - log_fatal "$func:${LINENO} $PWD $WORKSPACE_DIR/$CUSTOMER_ID"\ - "wrong repository: $(ls -d './${WORKSPACE_DIR}/*')" - else - local __m="./${WORKSPACE_DIR}/$CUSTOMER_ID exists" - log_debug "$func:${LINENO} $__m" - return 0 - fi + if [ "$PWD" != "$WORKING_DIRECTORY" ]; then + log_fatal "$func:${LINENO} PD != WD ($PWD != $WORKING_DIRECTORY)" + fi + + mkdir -p "./$WORKSPACE_DIR" + # check if the directory is empty. If so, clone the + # customer repository + if ! find ./$WORKSPACE_DIR -mindepth 1 -maxdepth 1 | read; then + log_info "$func:${LINENO} cloning ${1} ..." + if ! cd "./$WORKSPACE_DIR"; then + update_psa_clone_error # message to ISMAS + log_fatal "$func:${LINENO} can not change to $WORKSPACE_DIR" fi + if ! exec_git_command git clone "$1"; then + update_psa_clone_error # message to ISMAS + log_fatal "$func:${LINENO} can not clone $1" + fi + ########################## CLONING DONE ############################ + log_debug "$func:${LINENO} cloning ${1} done" + # after cloning, cd into repository, and re-initialize, + # setting the work-tree as "/". This has the effect that + # a "git pull" will automatically fetched files in the + # corresponding sytem-folders. + ####################### CD INTO REPOSITORY ########################## + if ! cd ${CUSTOMER_ID_BASE_DIR}; then + update_psa_clone_error # message to ISMAS + log_fatal "$func:${LINENO} can not change to $CUSTOMER_ID_BASE_DIR" + fi + log_debug "$func:${LINENO} cd into $CUSTOMER_ID_BASE_DIR" + ##################### CONFIGURE HOOKS DIRECTORY ###################### + if ! exec_git_command git config core.hooksPath .githooks; then + update_psa_clone_error # message to ISMAS + log_fatal "$func:${LINENO} can not configure hooks directory" + fi + ###################### CHECKOUT LOCAL BRANCH ######################### + if ! exec_git_command git checkout "$LOCAL_BRANCH"; then + update_psa_clone_error # message to ISMAS + log_fatal "$func:${LINENO} can not checkout $LOCAL_BRANCH" + fi + log_debug "$func:${LINENO} checked out local branch $LOCAL_BRANCH" + ######################## CONFIGURE WORKTREE ########################## + if ! exec_git_command git config core.worktree "/"; then + update_psa_clone_error # message to ISMAS + log_fatal "$func:${LINENO} can not configure worktree '/'" + fi + log_debug "$func:${LINENO} configured worktree '/'" + ########################### FETCH ALL ################################# + if ! exec_git_command git fetch --all; then + update_psa_clone_error # message to ISMAS + log_fatal "$func:${LINENO} can not fetch --all for $LOCAL_BRANCH" + fi + log_debug "$func:${LINENO} fetch repository" + ########################## RE-INIT REPOSITORY ######################## + if ! exec_git_command git reset --hard "$LOCAL_BRANCH"; then + update_psa_clone_error # message to ISMAS + log_fatal "$func:${LINENO} re-init of $LOCAL_BRANCH failed" + fi + log_debug "$func:${LINENO} reset --hard $LOCAL_BRANCH" + INITIAL_CLONE=true + log_debug "$func:${LINENO} re-init of ${1} done" + update_psa_clone_customer_repository + else + # the directory is not empty, so we assume the + # customer-repository has been cloned already + if ! [[ -d "./${WORKSPACE_DIR}/$CUSTOMER_ID" ]]; then + log_fatal "$func:${LINENO} $PWD $WORKSPACE_DIR/$CUSTOMER_ID"\ + "wrong repository: $(ls -d './${WORKSPACE_DIR}/*')" + fi + local __m="./${WORKSPACE_DIR}/$CUSTOMER_ID exists" + log_info "$func:${LINENO} $__m, no clone necessary" fi - update_psa_clone_error # message to ISMAS - return $? + cd_home } # clone_customer_repository -> # https://git.mimbach49.de/GerhardHoffmann/customer_281.git cd_customer_repository () { local func="${FUNCNAME[0]}" - # has to be called in WORKING_DIRECTORY - cd "$WORKING_DIRECTORY" - if [ "$PWD" = "${WORKING_DIRECTORY}" ]; then - repository_dir="./$WORKSPACE_DIR/$CUSTOMER_ID" - if ! [[ -d "$repository_dir" ]]; then - log_crit "$func:${LINENO}: $repository_dir does not exist!" - return 1 - fi - - if ! { cd $repository_dir; } ; then - log_crit "$func:${LINENO}: cannot cd to $repository_dir!" - return 1 - fi - log_debug "$func:${LINENO}: cd to $repository_dir!" - return 0 + if [ "$PWD" != "$WORKING_DIRECTORY" ]; then + log_fatal "$func:${LINENO} PD != WD ($PWD != $WORKING_DIRECTORY)" fi - return 1 + + if ! [[ -d "$CUSTOMER_ID_BASE_DIR" ]]; then + log_fatal "$func:${LINENO}: $CUSTOMER_ID_BASE_DIR does not exist!" + fi + + if ! cd "$CUSTOMER_ID_BASE_DIR"; then + log_fatal "$func:${LINENO}: cannot cd to $CUSTOMER_ID_BASE_DIR !!!" + fi + + log_debug "$func:${LINENO}: cd to $CUSTOMER_ID_BASE_DIR" + return 0 } cd_home () { - if cd - &>/dev/null ; then + if cd "$WORKING_DIRECTORY" &>/dev/null ; then return 0 fi return 1 @@ -187,8 +199,7 @@ pull_customer_repository () { # changed files or opkg-commands to execute. # If 'git pull' has fetched new data, then there are lines starting with # DOWNLOAD or EXECUTE. - grep -E -q "^[[:space:]]*(DOWNLOAD|EXECUTE)" "$GIT_UPDATE_LOG" - if [ $? -eq 0 ]; then + if grep -qE "^[[:space:]]*(DOWNLOAD|EXECUTE)" "$GIT_UPDATE_LOG"; then log_info "$func:${LINENO}: new data fetched from repository" cd_home; return 0 fi