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.
|
|
|
#!/usr/bin/env python
|
|
|
|
"""show dirty git repos"""
|
|
|
|
|
|
|
|
from __future__ import division, print_function
|
|
|
|
|
|
|
|
from colorama import Fore
|
|
|
|
|
|
|
|
import contextlib
|
|
|
|
import os
|
|
|
|
import subprocess
|
|
|
|
|
|
|
|
|
|
|
|
def git_directories(startdir):
|
|
|
|
for dirpath, dirnames, _ in os.walk(startdir):
|
|
|
|
if '.sync' in dirpath:
|
|
|
|
continue
|
|
|
|
if '.git/modules' in dirpath:
|
|
|
|
# FIXME
|
|
|
|
continue
|
|
|
|
if set(['info', 'objects', 'refs']).issubset(set(dirnames)):
|
|
|
|
yield dirpath
|
|
|
|
|
|
|
|
|
|
|
|
@contextlib.contextmanager
|
|
|
|
def working_directory(directory):
|
|
|
|
saved_cwd = os.getcwd()
|
|
|
|
os.chdir(directory)
|
|
|
|
yield
|
|
|
|
os.chdir(saved_cwd)
|
|
|
|
|
|
|
|
|
|
|
|
for git_directory in git_directories('.'):
|
|
|
|
work_tree_directory = git_directory[:-4]
|
|
|
|
with working_directory(work_tree_directory):
|
|
|
|
try:
|
|
|
|
out = subprocess.check_output(['git', 'status', '-s'], stderr=subprocess.STDOUT)
|
|
|
|
if len(out) > 0:
|
|
|
|
print('== {}\n{}'.format(work_tree_directory, out.decode('utf-8')))
|
|
|
|
except subprocess.CalledProcessError as e:
|
|
|
|
print((Fore.RED + 'git status is unhappy with {}' + Fore.RESET)
|
|
|
|
.format(work_tree_directory))
|
|
|
|
print(e.output)
|