from fabric.api import *

import os

from utils import set_env, upload_env, no_daemon, PROJECT_ROOT, next_version, git_branch

PATH = os.path.abspath(os.path.join(PROJECT_ROOT, '..', 'opscode-corpsite'))

@task
def release(version=None):
    if env.oc_env == 'preprod':
        abort('Corpsite preprod lives on master')
    with lcd(PATH):
        # Check if there is new stuff
        local('git up')
        with settings(hide('running', 'stdout', 'warnings'), warn_only=True):
            diff = local('git diff release..master', capture=True)
    if diff.strip():
        # Release and master are different, issue a release
        if not version:
            version = next_version(PATH)
        with lcd(PATH), git_branch('release'):
            local('git merge --no-ff master')
            local('git tag -a rel-%s -m "Release %s"'%(version, version))
            local('git push')
            local('git push --tags')
        set_env('corpsite-www-revision', 'rel-%s'%version)
        upload_env()

@roles('nanoc-builder')
@task
def upgrade():
    sudo('chef-client')

@task(default=True)
def deploy(version=None):
    with no_daemon('nanoc-builder'):
        if env.oc_env == '...':
            execute(release, version)
        execute(upgrade)