123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- #!/usr/bin/env python
- # Copyright (c) 2010 The Chromium Authors. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- """Display active git branches and code changes in a chromiumos workspace."""
- from __future__ import print_function
- import gclient_utils
- import os
- import re
- import subprocess
- import sys
- def show_dir(full_name, relative_name, color):
- """Display active work in a single git repo."""
- def show_name():
- """Display the directory name."""
- if color:
- sys.stdout.write('========= %s[44m%s[37m%s%s[0m ========\n' %
- (chr(27), chr(27), relative_name, chr(27)))
- else:
- sys.stdout.write('========= %s ========\n' % relative_name)
- lines_printed = 0
- cmd = ['git', 'branch', '-v']
- if color:
- cmd.append('--color')
- branch = subprocess.Popen(cmd,
- cwd=full_name,
- stdout=subprocess.PIPE).communicate()[0].rstrip()
- if len(branch.splitlines()) > 1:
- if lines_printed == 0:
- show_name()
- lines_printed += 1
- print(branch)
- status = subprocess.Popen(['git', 'status'],
- cwd=full_name,
- stdout=subprocess.PIPE).communicate()[0].rstrip()
- if len(status.splitlines()) > 2:
- if lines_printed == 0:
- show_name()
- if lines_printed == 1:
- print('---------------')
- print(status)
- def main():
- """Take no arguments."""
- color = False
- if os.isatty(1):
- color = True
- base = os.path.basename(os.getcwd())
- root, entries = gclient_utils.GetGClientRootAndEntries()
- # which entries map to a git repos?
- raw = [k for k, v in entries.items() if v and not re.search('svn', v)]
- raw.sort()
- # We want to use the full path for testing, but we want to use the relative
- # path for display.
- fulldirs = map(lambda(p): os.path.normpath(os.path.join(root, p)), raw)
- reldirs = map(lambda(p): re.sub('^' + base, '.', p), raw)
- for full_path, relative_path in zip(fulldirs, reldirs):
- show_dir(full_path, relative_path, color)
- if __name__ == '__main__':
- main()
|