4

そこで、受信後のイベント用に Atlassian-Stash 内で bash スクリプトを作成しました。このスクリプトでは、コミットが行われた後、codecollaborator コード レビューを作成します。コード レビューを作成するには、コミット タイトル、コミット ユーザー、および変更の git SHA が必要であり、変更をコード レビューにアップロードします。これらの情報を取得するために、ディレクトリを --depth=1 (--depth=1 なしでも) に複製し、git log (オプション) を操作します。

私が見ている問題は、スクリプトを手動で実行すると問題なく動作することです。ただし、コミットが行われた後に実行すると、ディレクトリのクローンを作成した後に、それが git ディレクトリではないと言ってエラーが発生します。スクリプトの終了後にディレクトリに移動すると、git log (およびその他の git コマンド) を実行できます。

トラブルシューティングを試みたのは 1. アクセス許可の問題 (root として実行) であるため、アクセス許可の問題は見られません。2. bash -xv を使用してトラブルシューティングを行い、その時点まではすべて問題ないようです。3. $? でステータスチェックも行います。4. .git を git-backup に移動しようとしましたが、3 秒待って元に戻しましたが、同じ問題が発生しました。5. ls -ltra を実行して、すべてのファイルと .git ディレクトリがあることを確認しました。

今、私は選択肢がありません。誰もこの種の問題に遭遇したことがありますか?

私が何か間違ったことをしている、または何かを見逃している可能性がある場所を知っている人はいますか?

質問が意味をなさない場合、またはサンプル スクリプトが必要な場合は、お知らせください。

スクリプトとそのエラー出力を以下に追加します。

#!/bin/bash -xv

CCollabExe='/usr/local/bin/ccollab'
CCollabUrl='--url http://***:8080'
CCollabUser='--user ******'
CCollabPassword='--password ******'
CCollabConnection="${CCollabExe} ${CCollabUrl} ${CCollabUser} ${CCollabPassword}"
CCollabStuff='/home/stash/repositories/tmp'
CloneDir="${CCollabStuff}/ClonnedDir"
StashUser='******'
StashPass='******'
RepoURLlinkGit="http://${StashUser}:${StashPass}@******:7990/scm/t/test1.git"

unset SSH_ASKPASS

# Test function to check if a varibale is empty
CheckIfVarEmpty () {
  local Variable="$1"
  if [[ -z ${Variable} ]] ; then
     echo "Variable $1 '\${Variable}' is empty, exiting"
     echo "Lets try to go back in the git dir" && cd ${CloneDir} && git log -10
     cd /root && cd ${CloneDir}
     [[ -d .git ]] && cp -rp .git git-backup && rm -rf .git && echo "sleeping 3" && sleep 3 && mv git-backup .git
     git log -10
     exit 0
  fi
}

#Create a new CCollab temp dir, clone the directory and get commit title, user and SHA info
   rm -rf ${CCollabStuff} && mkdir ${CCollabStuff} && cd ${CCollabStuff}
   git clone ${RepoURLlinkGit} ${CloneDir}
   cd ${CloneDir}

# 以下は、エラーが発生した場所です。

   CommitTitle=$(git log  --pretty=format:"%s" -1)
   CheckIfVarEmpty ${CommitTitle}
   CommitUser=$(git log  --pretty=format:"%an" -1)
   CheckIfVarEmpty ${CommitUser}
   CommitSHA=$(git log  --pretty=format:"%h" -2)
   CheckIfVarEmpty ${CommitSHA}
   CommitSHA1=$(echo $CommitSHA | awk -F' ' '{ print $1 }')
   CommitSHA2=$(echo $CommitSHA | awk -F' ' '{ print $2 }')
   echo "=========="

エラー出力は次のとおりです。

remote:   rm -rf ${CCollabStuff} && mkdir ${CCollabStuff} && cd ${CCollabStuff}
remote: + rm -rf /home/stash/repositories/tmp
remote: + mkdir /home/stash/repositories/tmp
remote: + cd /home/stash/repositories/tmp
remote:   git clone ${RepoURLlinkGit} ${CloneDir}
remote: + git clone http://******:******@******:7990/scm/t/test1.git /home/stash/repositories/tmp/ClonnedDir
remote: Cloning into '/home/stash/repositories/tmp/ClonnedDir'...
remote:   cd ${CloneDir}
remote: + cd /home/stash/repositories/tmp/ClonnedDir
remote:   CommitTitle=$(git log  --pretty=format:"%s" -1)
remote: git log  --pretty=format:"%s" -1
remote: ++ git log --pretty=format:%s -1
remote: fatal: Not a git repository: '.'
4

1 に答える 1