#!/usr/bin/env python

import sys
import errno

from llvmlab.ci import action_fetch, action_ls, action_bisect, action_exec
from llvmlab.ci import action_test
from llvmlab import scripts


tool = scripts.Tool(locals())
main = tool.main

if __name__ == '__main__':
    rc = None
    # Execute the main function in a try block to catch EPIPE exceptions.
    try:
        rc = main(sys.argv)

        # Force a flush on the output pipe to ensure EPIPE shows up here (prior
        # to sys.stdout shutdown).
        sys.stdout.flush()
        sys.stderr.flush()
    except IOError as e:
        if e.errno != errno.EPIPE:
            raise
    sys.exit(0)
