summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStéphane Cerveau <scerveau@collabora.com>2020-02-19 16:18:39 +0100
committerStéphane Cerveau <scerveau@collabora.com>2020-02-19 21:53:05 +0100
commitb9acfcace892d4b797454661dc87917d681d4e83 (patch)
tree5358918fbe47b5b1f5a3401b762dc8f350ef21f4
parent631677589c0ef21711cad95c3c6e74e3a0142b17 (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-xgit-update40
1 files changed, 31 insertions, 9 deletions
diff --git a/git-update b/git-update
index 0138fd9..8c223d3 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 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"])