リポジトリからインポートするか、リポジトリにプッシュする必要があるかを確認するために、git svnに関連するいくつかの機能があります。
私の問題は、この情報を収集するために私が書いた関数が遅すぎるということです。PS1
デフォルト値が表示されるように非同期にしたいのですが、関数によって生成されたデータが準備されたら印刷するようにしたいと思います。
私はプロンプトにこの情報を含めたいと思います。たとえば、git svn fetch
毎回プルすることなく引っ張る必要があるかどうかを知ることができるからです。
変更をプッシュする必要がある場合は、この関数を呼び出してPS1に↑を追加します。
function hasToPush {
(($1 == 0)) &&
(git svn dcommit --dry-run 2>/dev/null | grep -q "diff-tree" && echo "↑")
}
引く必要がある場合は、この関数を呼び出して↓を追加します。最初は2分ごとにインデックスを更新するために使用されるため、確認できます(($latest > $current))
。
function loopingGitSvnFetch {
sleep 120
git svn fetch &>/dev/null
}
loopingGitSvnFetch &
function hasToPull {
(($1 == 0)) && (
latest=$(git svn log | awk 'NR==2' | cut -d ' ' -f1 | tr -d 'r')
current=$2
(($latest > $current)) && echo "↓"
)
}
非同期にするために、次のように組み合わせてみました。
function async {
{
git diff-index --quiet --cached HEAD &>/dev/null
dirty=$(echo $?)
push=$(hasToPush $dirty)
gitsvn=$(git svn info 2> /dev/null | grep Revision)
gitsvn=${gitsvn#Revision: }
pull=$(hastoPull $dirty $gitsvn)
callback $push $pull
} &
}
しかし、これは同じ遅い動作を引き起こします。結果をファイルに入れて読んでみましたが、この方法は気に入らません。
PROMPT_COMMAND
.
PS1
私がどのように行動しているのか、何が間違っているのかを教えてください。よろしくお願いします。
PS:300人の担当者がasyncタグとps1タグを追加できますか?
編集する:
簡単なテストで.bashrcにこの行を追加しましたが、うまく動作しているようだったので、書き直すこと(以前の試みに戻る)が良いようです:)
while true;
do
discoverScmInfo &>~/.ps1
sleep 1
done &
PS1='$(customW)$(cat ~/.ps1)\$ '
私はそれを関数に入れて、呼び出す前にタスクがすでに実行されていることを確認します。申し訳ありません。結局、私が必要なのはそれを書き留めておくだけです。 :)
答え1
Re:1秒あたりのループの解決策:ホームディレクトリに書き込むのではなく、/ tmpのファイルに書き込むことができます。これでPS1=$(customW)$(< ~/.ps1)\$ '
保存されますcat
。
Re:元の質問:非同期アップデートを取得する方法PS1
:非同期書き込みを開始するにはPS1
:
PROMPT_COMMAND
データがあるかどうかを確認する関数に設定します。- その場合は、アップデートし
PS1
て設定を解除してください。PROMPT_COMMAND
- その場合は、アップデートし
- それ以外の場合は、
PS1
前の値またはプレースホルダの値が保持されます。
- それ以外の場合は、
/tmp
非同期IOの書き込みと読み取りにファイルを使用しますPROMPT_COMMAND
。
私はこれがうまくいくと思います。