commit: 31ae597d8dbe927729df0af181a1312fbbe84130 Author: Jauhien Piatlicki <jauhien <AT> gentoo <DOT> org> AuthorDate: Sun Aug 16 22:03:21 2015 +0000 Commit: Jauhien Piatlicki <jauhien <AT> gentoo <DOT> org> CommitDate: Sun Aug 16 22:29:47 2015 +0000 URL: https://gitweb.gentoo.org/proj/g-sorcery.git/commit/?id=31ae597d
[g_sorcery/git_syncer] detect changes of branch and remote URL g_sorcery/git_syncer/git_syncer.py | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/g_sorcery/git_syncer/git_syncer.py b/g_sorcery/git_syncer/git_syncer.py index 0f6c58e..abde034 100644 --- a/g_sorcery/git_syncer/git_syncer.py +++ b/g_sorcery/git_syncer/git_syncer.py @@ -12,6 +12,8 @@ """ import os +import shutil +import subprocess from g_sorcery.compatibility import TemporaryDirectory @@ -46,8 +48,11 @@ class GITSyncer(Syncer): branch = "master" if os.path.exists(path): - #TODO: allow changing of remotes/branches - self.pull(path) + if self.branch_not_changed(path, branch) and self.remote_url_not_changed(path, db_uri): + self.pull(path) + else: + shutil.rmtree(path) + self.clone(db_uri, branch, path) else: self.clone(db_uri, branch, path) @@ -65,3 +70,19 @@ class GITSyncer(Syncer): def pull(self, path): if os.system("cd " + path + " && git pull"): raise SyncError("sync failed (pulling): " + path) + + + def branch_not_changed(self, path, branch): + try: + result = subprocess.check_output(["git", "rev-parse", "--abbrev-ref", "HEAD"], cwd=path).rstrip().decode("utf-8") + except Exception: + return False + return result == branch + + + def remote_url_not_changed(self, path, url): + try: + result = subprocess.check_output(["git", "config", "--get", "remote.origin.url"], cwd=path).rstrip().decode("utf-8") + except Exception: + return False + return result == url