From fdf412cca95be6fcc0099745f97c0fe2350122d5 Mon Sep 17 00:00:00 2001 From: neingeist Date: Sat, 27 Jun 2015 15:17:00 +0200 Subject: [PATCH] add git-fsck-all --- git-fsck-all | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100755 git-fsck-all diff --git a/git-fsck-all b/git-fsck-all new file mode 100755 index 0000000..69b5af9 --- /dev/null +++ b/git-fsck-all @@ -0,0 +1,36 @@ +#!/usr/bin/env python +""" +find all git repositories (and git working directories) starting from the +current directory and perform a 'git fsck' on them. +""" + +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 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('.'): + with working_directory(git_directory): + print('\n{}:'.format(os.getcwd())) + ret = subprocess.call(['git', 'fsck']) + if ret != 0: + print((Fore.RED + 'git fsck is unhappy with {}' + Fore.RESET) + .format(git_directory))