diff options
author | Stéphane Cerveau <scerveau@collabora.com> | 2020-02-19 16:18:39 +0100 |
---|---|---|
committer | Stéphane Cerveau <scerveau@collabora.com> | 2020-02-19 21:53:05 +0100 |
commit | b9acfcace892d4b797454661dc87917d681d4e83 (patch) | |
tree | 5358918fbe47b5b1f5a3401b762dc8f350ef21f4 | |
parent | 631677589c0ef21711cad95c3c6e74e3a0142b17 (diff) |
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).
-rwxr-xr-x | git-update | 40 |
1 files changed, 31 insertions, 9 deletions
@@ -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 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): +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"]) |