저장소에서 가져오거나 저장소로 푸시해야 하는지 확인하기 위해 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
내가 어떻게 행동하고 있는지, 내가 뭘 잘못하고 있는지 좀 알려줄 수 있나요 ? 미리 감사드립니다.
추신: 300명의 담당자가 async 및 ps1 태그를 추가할 수 있습니까?
편집하다:
간단한 테스트로 .bashrc에 이 줄을 추가했는데 제대로 작동하는 것 같았기 때문에 다시 작성하는 것(이전 시도로 되돌림)이 좋은 것 같았습니다 :)
while true;
do
discoverScmInfo &>~/.ps1
sleep 1
done &
PS1='$(customW)$(cat ~/.ps1)\$ '
나는 그것을 함수에 넣고 호출하기 전에 작업이 이미 실행 중인지 확인합니다. 죄송합니다. 결국 제가 필요한 것은 그것을 적어 두는 것뿐입니다. :)
답변1
Re: 초당 루프에 대한 솔루션: 홈 디렉터리에 쓰는 대신 /tmp에 있는 파일에 쓸 수 있습니다. 그러면 PS1=$(customW)$(< ~/.ps1)\$ '
저장될 것입니다 cat
.
Re: 원래 질문: 비동기 업데이트를 얻는 방법 PS1
: 비동기 쓰기를 시작하려면 PS1
:
PROMPT_COMMAND
데이터가 있는지 확인하는 함수로 설정합니다 .- 그렇다면 업데이트
PS1
하고 설정을 해제하세요.PROMPT_COMMAND
- 그렇다면 업데이트
- 그렇지 않은 경우
PS1
이전 값이나 자리 표시자 값이 유지됩니다.
- 그렇지 않은 경우
/tmp
비동기 IO 쓰기 및 읽기에 파일을 사용합니다 PROMPT_COMMAND
.
나는 이것이 효과가 있다고 생각합니다.