From b9acfcace892d4b797454661dc87917d681d4e83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Cerveau?= Date: Wed, 19 Feb 2020 16:18:39 +0100 Subject: [PATCH] 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). --- git-update | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/git-update b/git-update index 0138fd95a3..8c223d3f72 100755 --- a/git-update +++ b/git-update @@ -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"])