#!/usr/bin/env python

import argparse
import logging
import os
import sys

import portage


def pkgdir_merge(src, dest):
    dest_bintree = portage.binarytree(pkgdir=dest, settings=portage.settings)
    src_bintree = portage.binarytree(pkgdir=src, settings=portage.settings)

    for cpv in src_bintree.dbapi.cpv_all():
        logging.info('processing package: %s', cpv)
        pkg_path = src_bintree.getname(cpv)
        dest_bintree.inject(cpv, filename=pkg_path)


def main():
    parser = argparse.ArgumentParser(
        formatter_class=argparse.RawDescriptionHelpFormatter,
        description="  \n{}".format("  A tool to merge two directories of portage binary packages together"))

    parser.add_argument(
        'src',
        action='store',
        nargs=1,
        metavar="SRC",
        help="Source package directory"
    )

    parser.add_argument(
        'dest',
        action='store',
        nargs=1,
        metavar="DEST",
        help="Destination package directory"
    )

    parser.add_argument(
        '-v', '--verbose',
        dest='verbosity',
        action='count',
        help='verbose logging (each occurence increases verbosity)',
        default=0,
    )

    args = parser.parse_args()

    logging.basicConfig(
        level=(logging.getLogger().getEffectiveLevel() - 10 * args.verbosity),
        format='[%(levelname)s] %(message)s',
    )

    pkgdir_merge(args.src[0], args.dest[0])

    return os.EX_OK


if __name__ == '__main__':
	sys.exit(main())
