#!/usr/bin/env python
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.

import os
import rdoinfo
import sh
import shutil
import sys

if len(sys.argv) > 1:
    UC_RELEASE = sys.argv[1]
else:
    UC_RELEASE = 'wallaby-uc'


def update_puppet_uc():
    if os.path.exists(os.path.join(".", "modules")):
        shutil.rmtree("./modules")

    info = rdoinfo.parse_info_file('rdo.yml')

    puppet_info = []
    for package in info['packages']:
        if package['name'].startswith('puppet'):
            puppet_info.append([package['name'], package['upstream']])

    for package in puppet_info:
        url = package[1]
        if 'openstack' in url:  # Do not bump OpenStack modules
            continue
        module = package[0]
        gitpath = os.path.join("modules", module)
        sh.git.clone(url, gitpath)
        git = sh.git.bake(_cwd=gitpath, _tty_out=False)
        try:
            rev_list = str(git('rev-list', '--tags', '--max-count=1')).strip()
            tag = str(git.describe('--tags', rev_list)).strip()
            with open('upper-constraints.txt', 'a') as fp:
                fp.write("%s===%s\n" % (module, tag))
        except Exception:
            continue
        shutil.rmtree(gitpath)

    update_uc = sh.Command('./update-uc.py')
    update_uc(UC_RELEASE)

if __name__ == '__main__':
    update_puppet_uc()
