#!/usr/bin/env python3
"""IPython release script.

This should ONLY be run at real release time.
"""
from __future__ import print_function

import os
from glob import glob
from pathlib import Path
from subprocess import call
import sys

from toollib import (get_ipdir, cd, execfile, sh, archive,
         archive_user, archive_dir)

# Get main ipython dir, this will raise if it doesn't pass some checks
ipdir = get_ipdir()
tooldir = ipdir / 'tools'
distdir = ipdir / 'dist'

# Where I keep static backups of each release
ipbackupdir = Path('~/ipython/backup').expanduser()
if not ipbackupdir.exists():
    ipbackupdir.mkdir(parents=True, exist_ok=True)

# Start in main IPython dir
cd(ipdir)

# Load release info
version = None
execfile(Path('IPython','core','release.py'), globals())

# Build site addresses for file uploads
release_site = '%s/release/%s' % (archive, version)
backup_site =  '%s/backup/' % archive

# Start actual release process
print()
print('Releasing IPython')
print('=================')
print()
print('Version:', version)
print()
print('Source IPython directory:', ipdir)
print()

# Perform local backup, go to tools dir to run it.
cd(tooldir)

if 'upload' in sys.argv:
    cd(distdir)

    # do not upload OS specific files like .DS_Store
    to_upload = glob('*.whl')+glob('*.tar.gz')

    # Make target dir if it doesn't exist
    print('1. Uploading IPython to archive.ipython.org')
    sh('ssh %s "mkdir -p %s/release/%s" ' % (archive_user, archive_dir, version))
    sh('scp *.tar.gz *.whl %s' % release_site)

    print('2. Uploading backup files...')
    cd(ipbackupdir)
    sh('scp `ls -1tr *tgz | tail -1` %s' % backup_site)

    print('3. Uploading to PyPI using twine')
    cd(distdir)
    call(['twine', 'upload', '--verbose'] + to_upload)

else:
    # Build, but don't upload

    # Make backup tarball
    sh('python make_tarball.py')
    sh('mv ipython-*.tgz %s' % ipbackupdir)

    # Build release files
    sh('./build_release')

    cd(ipdir)

    print("`./release upload` to upload source distribution on PyPI and ipython archive")
    sys.exit(0)



