#!/usr/bin/env python

import hashlib
import os
import re
import shutil
import subprocess as sp

from string import Template
from zipfile import ZipFile

brew_formula_template = Template("""
# This file was generated by release.py
require 'formula'
class Pup < Formula
  homepage 'https://github.com/EricChiang/pup'
  version '${version}'

  if Hardware.is_64_bit?
    url 'https://github.com/EricChiang/pup/releases/download/v${version}/pup_darwin_amd64.zip'
    sha1 '${darwin_amd64_sha1}'
  else
    url 'https://github.com/EricChiang/pup/releases/download/v${version}/pup_darwin_386.zip'
    sha1 '${darwin_386_sha1}'
  end

  def install
    bin.install 'pup'
  end
end
""".strip())

version_re = re.compile(r'\nvar VERSION string = \"([0-9\.]+)\"\n') 

if __name__ == "__main__":
    with open("pup.go", "r") as f:
        version = version_re.findall(f.read())
    
    assert len(version) == 1, "[-] Failed to find current version %s" % (version,)
    version = version[0]
    print "[+] Version found:", version 

    if os.path.isdir("./dist"):
        print "[+] Directory 'dist' exists. Removing it."
        shutil.rmtree("./dist")

    print "[+] Cross-compiling pup."
    sp.check_call(["gox", "-output", "dist/{{.Dir}}_{{.OS}}_{{.Arch}}"])
  
    print "[+] Zipping executables."
    sha1sums = {}
    for fi in os.listdir("./dist"):
        exe = os.path.join("dist", "pup")
        zipname = os.path.join("dist", fi)
        if fi.endswith(".exe"):
            exe += ".exe"
            zipname = zipname.rstrip(".exe")
        zipname += ".zip"
        os.rename(os.path.join("dist", fi), exe)
        with ZipFile(zipname, "w") as z:
            z.write(exe, os.path.basename(exe))
        os.remove(exe)
        h = hashlib.sha1()
        with open(zipname, "r") as z:
            h.update(z.read())
        sha1sum = h.hexdigest()
        print "[+] %s: %s" % (sha1sum, zipname,) 
        sha1sums[zipname] = sha1sum

    t = brew_formula_template.substitute(
      version=version,
      darwin_amd64_sha1 = sha1sums["dist/pup_darwin_amd64.zip"],
      darwin_386_sha1 = sha1sums["dist/pup_darwin_386.zip"],
    )
    print "[+] Updating brew formula."
    with open("pup.rb", "w") as f:
        f.write(t)
