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

This commit is contained in:
Joel Challis 2023-01-02 22:00:29 +00:00 committed by GitHub
parent 0f5500182c
commit 3a5a4c708f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 17 deletions

View file

@ -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

View file

@ -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()

View file

@ -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 = {}
gitmodule_config = cli.run(['git', 'config', '-f', '.gitmodules', '-l'], timeout=30)
for line in gitmodule_config.stdout.splitlines():
key, value = line.split('=', maxsplit=2)
if key.endswith('.path'):
submodules[value] = {'name': value, 'status': None}
git_cmd = cli.run(['git', 'submodule', 'status'], timeout=30) git_cmd = cli.run(['git', 'submodule', 'status'], timeout=30)
for line in git_cmd.stdout.splitlines():
for line in git_cmd.stdout.split('\n'):
if not line:
continue
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 ''