You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			80 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
#!/usr/bin/env python3
 | 
						|
# 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 = [os.path.normpath(os.path.join(root, p)) for p in raw]
 | 
						|
    reldirs = [re.sub('^' + base, '.', p) for p in raw]
 | 
						|
 | 
						|
    for full_path, relative_path in zip(fulldirs, reldirs):
 | 
						|
        show_dir(full_path, relative_path, color)
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    main()
 |