#!/usr/bin/env python3 """ Put the supermodules's remote, status and commit into .gitsuper """ import sys import os from pathlib import Path import subprocess from configparser import ConfigParser from functools import partial root = Path(os.getcwd()) supermod = Path(root, '..') modfile_fn = root / '.gitsuper' get_output = partial(subprocess.check_output, universal_newlines=True) def for_module(cf, mod, section=None): os.chdir(mod) remote = get_output(['git', 'remote', 'get-url', 'origin']).strip() status = get_output(['git', 'submodule', 'status']).strip() commit = get_output(['git', 'rev-parse', 'HEAD']).strip() section = section or 'submodule.{}'.format(mod.name) cf.add_section(section) cf.set(section, 'remote', remote) if status: cf.set(section, 'status', status) cf.set(section, 'commit', commit) cf = ConfigParser() for_module(cf, supermod, 'supermodule') os.chdir(supermod) for s in [Path(s) for s in get_output(['git', 'submodule', '--quiet', 'foreach', 'pwd']).split()]: for_module(cf, s) cf.write(open(modfile_fn, 'wt'))