git-update: provides a check status option

Add --check-status to git-update python script
to provide the list of subprojects with their
git status (branch and state).
This commit is contained in:
Stéphane Cerveau 2020-02-19 16:18:39 +01:00
parent 631677589c
commit b9acfcace8

View file

@ -50,7 +50,7 @@ def ensure_revision_if_necessary(repo_dir, revision):
return revision
def update_subprojects(repos_commits, no_interaction=False):
def update_subprojects(manifest, no_interaction=False, check_status=False):
subprojects_dir = os.path.join(SCRIPTDIR, "subprojects")
for repo_name in os.listdir(subprojects_dir):
repo_dir = os.path.normpath(os.path.join(SCRIPTDIR, subprojects_dir, repo_name))
@ -58,13 +58,32 @@ def update_subprojects(repos_commits, no_interaction=False):
continue
revision, args = repos_commits.get(repo_name, [None, []])
if not update_repo(repo_name, repo_dir, revision, no_interaction, args):
return False
if not update_repo(repo_name, repo_dir, revision, no_interaction, args, check_status=check_status):
return False
return True
def repo_status(commit_message):
status = "clean"
for message in commit_message:
if message.startswith('??'):
status = "%sclean but untracked files%s" % (Colors.WARNING,Colors.ENDC)
elif message.startswith(' M'):
status = "%shas local modificationss%s" % (Colors.WARNING,Colors.ENDC)
break;
return status
def update_repo(repo_name, repo_dir, revision, no_interaction, fetch_args=[], recurse_i=0):
def check_repo_status(repo_name, worktree_dir):
branch_message = git("status", repository_path=worktree_dir).split("\n")
commit_message = git("status", "--porcelain", repository_path=worktree_dir).split("\n")
print(u"%s%s%s - %s - %s" % (Colors.HEADER, repo_name, Colors.ENDC,
branch_message[0].strip(), repo_status(commit_message)))
return True
def update_repo(repo_name, repo_dir, revision, no_interaction, fetch_args=[], recurse_i=0, check_status=False):
if check_status:
return check_repo_status(repo_name, repo_dir)
revision = ensure_revision_if_necessary(repo_dir, revision)
git("config", "rebase.autoStash", "true", repository_path=repo_dir)
try:
@ -149,6 +168,10 @@ if __name__ == "__main__":
default=False,
action='store_true',
help="Do not allow interaction with the user.")
parser.add_argument("--check-status",
default=False,
action='store_true',
help="Check repositories status only.")
parser.add_argument("--manifest",
default=None,
help="Use a android repo manifest to sync repositories"
@ -168,13 +191,12 @@ if __name__ == "__main__":
repos_commits = {}
revision, args = repos_commits.get('gst-build', [None, []])
if not update_repo('gst-build', SCRIPTDIR, revision, options.no_interaction, args):
if not update_repo('gst-build', SCRIPTDIR, None, options.no_interaction, args, check_status=options.check_status):
exit(1)
if not update_subprojects(repos_commits, options.no_interaction):
if not update_subprojects(options.manifest, options.no_interaction, check_status=options.check_status):
exit(1)
update_cargo(options.builddir)
if not options.check_status:
update_cargo(options.builddir)
if options.builddir:
ninja = accept_command(["ninja", "ninja-build"])