すべてのvcsディレクトリを並行して同期したい。ディレクトリに移動し、特別なコマンドラインスクリプトを実行して、gitまたはmercurialリポジトリを同期します。プロセスが遅いので、並行させたいと思います。
しかし、並列スレッドが「現在のディレクトリ」をめぐって争うのは問題があるので、同時に異なるディレクトリで作業するには、いくつかのトリックが必要です。
現在の解決策:
def syncrepos(repos):
for r in repos.split("\n"):
if r:
print("------ repository: ", r)
thrd = ThreadingSync(r)
thrd.setDaemon(True)
thrd.start()
ここで、ThreadingSyncは
class ThreadingSync(threading.Thread):
def __init__(self, repo):
threading.Thread.__init__(self)
self.repo = repo
def run(self):
r = self.repo.split("-t")
path = (r[0]).strip()
if len(r) < 2:
vcs = VCS.git
else:
vcs = {
'git' : VCS.git,
'git git' : VCS.git_git,
'git hg' : VCS.git_mercurial,
'git svn' : VCS.git_subversion,
'git vv' : VCS.git_veracity,
'hg hg' : VCS.hg_hg}[(r[1]).strip()]
os.chdir(path)
if vcs == VCS.git:
checkGitModifications()
gitSync()
... etc
そしてgitSync
_
def gitSync():
pretty(cmd("git pull origin master"))
pretty(cmd("git fetch upstream master"))
pretty(cmd("git pull --rebase upstream master"))
pretty(cmd("git push -f origin master"))
確かにこれは完璧ではありませんが、それは私の仕事をします、そして私はそれをスピードアップしたいと思います。
リポジトリ/ディレクトリごとに1つのサブプロセスを生成する方法(os.chdirのThradセーフ実装)?