#!/usr/bin/env python
"""Script to build dmgs for buildbot builds

Example
-------
%(prog)s "nipy-dist/nipy*-0.4.0-py*mpkg"

Note quotes around the globber first argument to protect it from shell
globbing.
"""
import os
from os.path import join as pjoin, isfile, isdir
import shutil
from glob import glob
from functools import partial
from subprocess import check_call
import warnings

from argparse import ArgumentParser, RawDescriptionHelpFormatter

my_call = partial(check_call, shell=True)

BUILDBOT_LOGIN = "buildbot@nipy.bic.berkeley.edu"
BUILDBOT_HTML = "nibotmi/public_html/"

def main():
    parser = ArgumentParser(description=__doc__,
                            formatter_class=RawDescriptionHelpFormatter)
    parser.add_argument('globber', type=str,
                        help='glob to search for build mpkgs')
    parser.add_argument('--out-path', type=str, default='mpkg-dist',
                        help='path for output files (default="mpkg-dist")',
                        metavar='OUTPATH')
    parser.add_argument('--clobber', action='store_true',
                        help='Delete OUTPATH if exists')
    args = parser.parse_args()
    globber = args.globber
    out_path = args.out_path
    address = "{0}:{1}{2}".format(BUILDBOT_LOGIN, BUILDBOT_HTML, globber)
    if isdir(out_path):
        if not args.clobber:
            raise RuntimeError('Path {0} exists and "clobber" not set'.format(
                out_path))
        shutil.rmtree(out_path)
    os.mkdir(out_path)
    cwd = os.path.abspath(os.getcwd())
    os.chdir(out_path)
    try:
        my_call('scp -r {0} .'.format(address))
        found_mpkgs = sorted(glob('*.mpkg'))
        for mpkg in found_mpkgs:
            pkg_name, ext = os.path.splitext(mpkg)
            assert ext == '.mpkg'
            my_call('sudo reown_mpkg {0} root admin'.format(mpkg))
            os.mkdir(pkg_name)
            pkg_moved = pjoin(pkg_name, mpkg)
            os.rename(mpkg, pkg_moved)
            readme = pjoin(pkg_moved, 'Contents', 'Resources', 'ReadMe.txt')
            if isfile(readme):
                shutil.copy(readme, pkg_name)
            else:
                warnings.warn("Could not find readme with " + readme)
            my_call('sudo hdiutil create {0}.dmg -srcfolder ./{0}/ -ov'.format(pkg_name))
    finally:
        os.chdir(cwd)


if __name__ == '__main__':
    main()
