Report submodule status when not valid work-tree (#19474)

miryoku-merge-master
Joel Challis 3 years ago committed by GitHub
parent 0f5500182c
commit 3a5a4c708f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -119,10 +119,8 @@ def check_submodules():
""" """
for submodule in submodules.status().values(): for submodule in submodules.status().values():
if submodule['status'] is None: if submodule['status'] is None:
cli.log.error('Submodule %s has not yet been cloned!', submodule['name'])
return CheckStatus.ERROR return CheckStatus.ERROR
elif not submodule['status']: elif not submodule['status']:
cli.log.warning('Submodule %s is not up to date!', submodule['name'])
return CheckStatus.WARNING return CheckStatus.WARNING
return CheckStatus.OK return CheckStatus.OK

@ -142,7 +142,7 @@ def doctor(cli):
if sub_ok == CheckStatus.OK: if sub_ok == CheckStatus.OK:
cli.log.info('Submodules are up to date.') cli.log.info('Submodules are up to date.')
else: else:
if yesno('Would you like to clone the submodules?', default=True): if git_check_repo() and yesno('Would you like to clone the submodules?', default=True):
submodules.update() submodules.update()
sub_ok = check_submodules() sub_ok = check_submodules()

@ -21,15 +21,17 @@ def status():
status is None when the submodule doesn't exist, False when it's out of date, and True when it's current status is None when the submodule doesn't exist, False when it's out of date, and True when it's current
""" """
submodules = {} submodules = {}
git_cmd = cli.run(['git', 'submodule', 'status'], timeout=30) gitmodule_config = cli.run(['git', 'config', '-f', '.gitmodules', '-l'], timeout=30)
for line in gitmodule_config.stdout.splitlines():
for line in git_cmd.stdout.split('\n'): key, value = line.split('=', maxsplit=2)
if not line: if key.endswith('.path'):
continue submodules[value] = {'name': value, 'status': None}
git_cmd = cli.run(['git', 'submodule', 'status'], timeout=30)
for line in git_cmd.stdout.splitlines():
status = line[0] status = line[0]
githash, submodule = line[1:].split()[:2] githash, submodule = line[1:].split()[:2]
submodules[submodule] = {'name': submodule, 'githash': githash} submodules[submodule]['githash'] = githash
if status == '-': if status == '-':
submodules[submodule]['status'] = None submodules[submodule]['status'] = None
@ -41,10 +43,7 @@ def status():
raise ValueError('Unknown `git submodule status` sha-1 prefix character: "%s"' % status) raise ValueError('Unknown `git submodule status` sha-1 prefix character: "%s"' % status)
submodule_logs = cli.run(['git', 'submodule', '-q', 'foreach', 'git --no-pager log --no-show-signature --pretty=format:"$sm_path%x01%h%x01%ad%x01%s%x0A" --date=iso -n1']) submodule_logs = cli.run(['git', 'submodule', '-q', 'foreach', 'git --no-pager log --no-show-signature --pretty=format:"$sm_path%x01%h%x01%ad%x01%s%x0A" --date=iso -n1'])
for log_line in submodule_logs.stdout.split('\n'): for log_line in submodule_logs.stdout.splitlines():
if not log_line:
continue
r = log_line.split('\x01') r = log_line.split('\x01')
submodule = r[0] submodule = r[0]
submodules[submodule]['shorthash'] = r[1] if len(r) > 1 else '' submodules[submodule]['shorthash'] = r[1] if len(r) > 1 else ''
@ -52,10 +51,7 @@ def status():
submodules[submodule]['last_log_message'] = r[3] if len(r) > 3 else '' submodules[submodule]['last_log_message'] = r[3] if len(r) > 3 else ''
submodule_tags = cli.run(['git', 'submodule', '-q', 'foreach', '\'echo $sm_path `git describe --tags`\'']) submodule_tags = cli.run(['git', 'submodule', '-q', 'foreach', '\'echo $sm_path `git describe --tags`\''])
for log_line in submodule_tags.stdout.split('\n'): for log_line in submodule_tags.stdout.splitlines():
if not log_line:
continue
r = log_line.split() r = log_line.split()
submodule = r[0] submodule = r[0]
submodules[submodule]['describe'] = r[1] if len(r) > 1 else '' submodules[submodule]['describe'] = r[1] if len(r) > 1 else ''

Loading…
Cancel
Save