1
0
mirror of https://github.com/IEEE-SB-Passau/pelican-deployment-system.git synced 2017-09-06 16:35:38 +02:00

rework submodule updating, they suck really!

This commit is contained in:
2016-06-20 01:16:16 +02:00
parent 27e3d65a01
commit df8b8e915b
2 changed files with 31 additions and 6 deletions

View File

@@ -144,11 +144,9 @@ class DeploymentRunner:
def _update_build_repo_submodules(self, repo): def _update_build_repo_submodules(self, repo):
log.info("%s build_repo: update submodules", self.name) log.info("%s build_repo: update submodules", self.name)
# we must update the urls if changed! results = repo.submodule_sync_update_init_recursive_force()
result = repo.submodule("sync", "--recursive") for r in results:
log_git(result) log_git(r)
result = repo.submodule("update", "--init", "--force", "--recursive")
log_git(result)
def build(self, abort_running=False, wait=False, ignore_pull_error=False): def build(self, abort_running=False, wait=False, ignore_pull_error=False):
with self._build_lock: with self._build_lock:

View File

@@ -15,7 +15,7 @@
import os import os
import errno import errno
import shlex import shlex
from collections import namedtuple from collections import namedtuple, deque
from subprocess import Popen, PIPE from subprocess import Popen, PIPE
CmdResult = namedtuple("CmdResult", "cmd status stdout stderr") CmdResult = namedtuple("CmdResult", "cmd status stdout stderr")
@@ -69,6 +69,33 @@ class Repo:
res = self.config("--get", key) res = self.config("--get", key)
return res.stdout.rstrip("\r\n") return res.stdout.rstrip("\r\n")
def submodule_sync_update_init_recursive_force(self):
results = []
todo = deque()
todo.extend(self._get_submod_paths())
while todo:
curr = todo.popleft()
if not os.path.exists(os.path.join(self.repo_dir, curr)):
continue # that happens, strangely...
results.append(self.cmd(self.git_cmd, "-C", curr,
"submodule", "sync"))
results.append(self.cmd(self.git_cmd, "-C", curr,
"submodule", "update", "--init", "--force"))
todo.extend(os.path.join(curr, p) for p in
self._get_submod_paths(curr))
return results
def _get_submod_paths(self, submod="."):
if not os.path.exists(os.path.join(self.repo_dir, submod,
".gitmodules")):
return ()
result = self.cmd(self.git_cmd, "-C", submod, "config", "--file",
".gitmodules", "--get-regexp", "submodule\..*\.path")
return tuple(p.split(maxsplit=1)[1] for p in result.stdout.splitlines())
def log_git_result(result, out_logger=None, err_logger=None, status_logger=None): def log_git_result(result, out_logger=None, err_logger=None, status_logger=None):
if status_logger: if status_logger:
err_logger('%s exit status: %s', result.cmd, result.status) err_logger('%s exit status: %s', result.cmd, result.status)