#!/usr/bin/env python
import glob
import os
import subprocess
import sys
import time
import xml.etree.ElementTree as ET

new_jobs = set()
for g in glob.glob('build/jenkins/job/*'):
    new_jobs.add(os.path.basename(g))

if len(new_jobs) == 0:
    print "No new jobs?!?"
    sys.exit(1)

query = subprocess.check_output(['util/query.sh', 'api/xml?tree=jobs[name,description]'], )

existing_jobs = set()
tree = ET.fromstring(query)
for job in tree.findall('.//job'):
    name = job.find('name').text
    description_e = job.find('description')
    if description_e is None:
        continue
    description = description_e.text
    if description is None:
        continue
    if '$$job generated from ' in description:
        existing_jobs.add(name.strip())
if len(existing_jobs) == 0:
    print "No existing jobs?!?"
    sys.exit(1)

# We should have already uploaded all the new jobs
missing = new_jobs - existing_jobs
if len(missing) > 0:
    print "Missing jobs?!?"
    sys.exit(1)

to_delete = existing_jobs - new_jobs
if len(to_delete) > 0:
    print ""
    print ""
    print "Will delete the following jobs:"
    for jobname in to_delete:
        print "    %s" % jobname
    print "You have 5 seconds to abort"
    time.sleep(5)
    for jobname in to_delete:
        subprocess.check_call(['util/delete_job.sh', jobname])
