<s> """<STR_LIT>""" <EOL> from shutit_module import ShutItModule , ShutItException , ShutItFailException <EOL> import shutit_util <EOL> import urllib <EOL> import shutit_global <EOL> import os <EOL> import signal <EOL> import sys <EOL> import logging <EOL> from distutils import spawn <EOL> def stop_all ( shutit , run_order = - <NUM_LIT:1> ) : <EOL> """<STR_LIT>""" <EOL> cfg = shutit . cfg <EOL> if cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] >= <NUM_LIT:3> : <EOL> print ( '<STR_LIT>' + shutit_util . colour ( '<STR_LIT>' , '<STR_LIT>' ) ) <EOL> shutit_util . util_raw_input ( ) <EOL> for module_id in shutit_util . module_ids ( shutit , rev = True ) : <EOL> shutit_module_obj = shutit . shutit_map [ module_id ] <EOL> if run_order == - <NUM_LIT:1> or shutit_module_obj . run_order <= run_order : <EOL> if shutit_util . is_installed ( shutit , shutit_module_obj ) : <EOL> if not shutit_module_obj . stop ( shutit ) : <EOL> shutit . fail ( '<STR_LIT>' + module_id , shutit_pexpect_child = shutit . get_shutit_pexpect_session_from_id ( '<STR_LIT>' ) . shutit_pexpect_child ) <EOL> def start_all ( shutit , run_order = - <NUM_LIT:1> ) : <EOL> """<STR_LIT>""" <EOL> cfg = shutit . cfg <EOL> if cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] >= <NUM_LIT:3> : <EOL> print ( '<STR_LIT>' + shutit_util . colour ( '<STR_LIT>' , '<STR_LIT>' ) ) <EOL> shutit_util . util_raw_input ( ) <EOL> for module_id in shutit_util . module_ids ( shutit ) : <EOL> shutit_module_obj = shutit . shutit_map [ module_id ] <EOL> if run_order == - <NUM_LIT:1> or shutit_module_obj . run_order <= run_order : <EOL> if shutit_util . is_installed ( shutit , shutit_module_obj ) : <EOL> if not shutit_module_obj . start ( shutit ) : <EOL> shutit . fail ( '<STR_LIT>' + module_id , shutit_pexpect_child = shutit . get_shutit_pexpect_session_from_id ( '<STR_LIT>' ) . shutit_pexpect_child ) <EOL> def is_ready ( shutit , shutit_module_obj ) : <EOL> """<STR_LIT>""" <EOL> cfg = shutit . cfg <EOL> if shutit_module_obj . module_id in cfg [ '<STR_LIT>' ] [ cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] ] [ '<STR_LIT>' ] : <EOL> shutit . log ( '<STR_LIT>' , level = logging . DEBUG ) <EOL> return True <EOL> ready = shutit_module_obj . check_ready ( shutit ) <EOL> if ready : <EOL> cfg [ '<STR_LIT>' ] [ cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] ] [ '<STR_LIT>' ] . append ( shutit_module_obj . module_id ) <EOL> return True <EOL> else : <EOL> return False <EOL> def init_shutit_map ( shutit ) : <EOL> """<STR_LIT>""" <EOL> cfg = shutit . cfg <EOL> modules = shutit . shutit_modules <EOL> if len ( [ mod for mod in modules if mod . run_order > <NUM_LIT:0> ] ) < <NUM_LIT:1> : <EOL> shutit . log ( modules , level = logging . DEBUG ) <EOL> path = '<STR_LIT::>' . join ( cfg [ '<STR_LIT:host>' ] [ '<STR_LIT>' ] ) <EOL> shutit . log ( '<STR_LIT>' , code = <NUM_LIT:32> , level = logging . INFO ) <EOL> if path == '<STR_LIT>' : <EOL> shutit . fail ( '<STR_LIT>' ) <EOL> elif path == '<STR_LIT:.>' : <EOL> shutit . fail ( '<STR_LIT>' ) <EOL> else : <EOL> shutit . fail ( '<STR_LIT>' + path + '<STR_LIT>' ) <EOL> shutit . log ( '<STR_LIT>' , level = logging . DEBUG ) <EOL> if cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] >= <NUM_LIT:3> : <EOL> shutit . log ( '<STR_LIT>' , level = logging . DEBUG ) <EOL> for module in modules : <EOL> shutit . log ( module . module_id , level = logging . DEBUG ) <EOL> shutit . log ( '<STR_LIT:\n>' , level = logging . DEBUG ) <EOL> run_orders = { } <EOL> has_core_module = False <EOL> for module in modules : <EOL> assert isinstance ( module , ShutItModule ) <EOL> if module . module_id in shutit . shutit_map : <EOL> shutit . fail ( '<STR_LIT>' + module . module_id + '<STR_LIT>' ) <EOL> if module . run_order in run_orders : <EOL> shutit . fail ( '<STR_LIT>' + str ( module . run_order ) + '<STR_LIT>' + module . module_id + '<STR_LIT>' + run_orders [ module . run_order ] . module_id + '<STR_LIT>' ) <EOL> if module . run_order == <NUM_LIT:0> : <EOL> has_core_module = True <EOL> shutit . shutit_map [ module . module_id ] = run_orders [ module . run_order ] = module <EOL> if not has_core_module : <EOL> shutit . fail ( '<STR_LIT>' ) <EOL> if cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] >= <NUM_LIT:3> : <EOL> print ( shutit_util . colour ( '<STR_LIT>' , '<STR_LIT>' ) ) <EOL> shutit_util . util_raw_input ( ) <EOL> def conn_target ( shutit ) : <EOL> """<STR_LIT>""" <EOL> conn_module = None <EOL> cfg = shutit . cfg <EOL> for mod in shutit . conn_modules : <EOL> if mod . module_id == cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] : <EOL> conn_module = mod <EOL> break <EOL> if conn_module is None : <EOL> shutit . fail ( '<STR_LIT>' + cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] ) <EOL> if cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] >= <NUM_LIT:3> : <EOL> print ( '<STR_LIT>' + shutit . shutit_main_dir + '<STR_LIT>' + shutit_util . colour ( '<STR_LIT>' , '<STR_LIT>' ) ) <EOL> shutit_util . util_raw_input ( ) <EOL> conn_module . get_config ( shutit ) <EOL> conn_module . build ( shutit ) <EOL> def finalize_target ( shutit ) : <EOL> """<STR_LIT>""" <EOL> cfg = shutit . cfg <EOL> shutit . pause_point ( '<STR_LIT>' + shutit . shutit_main_dir + '<STR_LIT>' , print_input = False , level = <NUM_LIT:3> ) <EOL> for mod in shutit . conn_modules : <EOL> if mod . module_id == cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] : <EOL> conn_module = mod <EOL> break <EOL> conn_module . finalize ( shutit ) <EOL> def resolve_dependencies ( shutit , to_build , depender ) : <EOL> """<STR_LIT>""" <EOL> shutit . log ( '<STR_LIT>' , level = logging . DEBUG ) <EOL> cfg = shutit . cfg <EOL> for dependee_id in depender . depends_on : <EOL> dependee = shutit . shutit_map . get ( dependee_id ) <EOL> if ( dependee and dependee not in to_build <EOL> and cfg [ dependee_id ] [ '<STR_LIT>' ] ) : <EOL> to_build . append ( dependee ) <EOL> cfg [ dependee_id ] [ '<STR_LIT>' ] = True <EOL> return True <EOL> def check_dependee_exists ( depender , dependee , dependee_id ) : <EOL> """<STR_LIT>""" <EOL> cfg = shutit_global . shutit . cfg <EOL> if dependee == None : <EOL> return ( '<STR_LIT>' + dependee_id + '<STR_LIT>' + str ( cfg [ '<STR_LIT:host>' ] [ '<STR_LIT>' ] ) + '<STR_LIT>' + depender . module_id + '<STR_LIT>' ) <EOL> def check_dependee_build ( depender , dependee , dependee_id ) : <EOL> """<STR_LIT>""" <EOL> cfg = shutit_global . shutit . cfg <EOL> if not ( cfg [ dependee . module_id ] [ '<STR_LIT>' ] or <EOL> shutit_util . is_to_be_built_or_is_installed ( shutit_global . shutit , dependee ) ) : <EOL> return ( '<STR_LIT>' + depender . module_id + '<STR_LIT>' + dependee_id + '<STR_LIT>' ) <EOL> def check_dependee_order ( depender , dependee , dependee_id ) : <EOL> """<STR_LIT>""" <EOL> if dependee . run_order > depender . run_order : <EOL> return ( '<STR_LIT>' + depender . module_id + '<STR_LIT>' + str ( depender . run_order ) + '<STR_LIT>' + '<STR_LIT>' + dependee_id + '<STR_LIT>' + str ( dependee . run_order ) + '<STR_LIT>' + '<STR_LIT>' ) <EOL> def make_dep_graph ( depender ) : <EOL> """<STR_LIT>""" <EOL> digraph = '<STR_LIT>' <EOL> for dependee_id in depender . depends_on : <EOL> digraph = ( digraph + '<STR_LIT:">' + depender . module_id + '<STR_LIT>' + dependee_id + '<STR_LIT>' ) <EOL> return digraph <EOL> def check_deps ( shutit ) : <EOL> """<STR_LIT>""" <EOL> cfg = shutit . cfg <EOL> shutit . log ( '<STR_LIT>' , level = logging . DEBUG ) <EOL> shutit . pause_point ( '<STR_LIT>' , print_input = False , level = <NUM_LIT:3> ) <EOL> to_build = [ <EOL> shutit . shutit_map [ module_id ] for module_id in shutit . shutit_map <EOL> if module_id in cfg and cfg [ module_id ] [ '<STR_LIT>' ] <EOL> ] <EOL> for module in to_build : <EOL> resolve_dependencies ( shutit , to_build , module ) <EOL> def err_checker ( errs , triples ) : <EOL> """<STR_LIT>""" <EOL> new_triples = [ ] <EOL> for err , triple in zip ( errs , triples ) : <EOL> if not err : <EOL> new_triples . append ( triple ) <EOL> continue <EOL> found_errs . append ( err ) <EOL> return new_triples <EOL> found_errs = [ ] <EOL> triples = [ ] <EOL> for depender in to_build : <EOL> for dependee_id in depender . depends_on : <EOL> triples . append ( ( depender , shutit . shutit_map . get ( dependee_id ) , dependee_id ) ) <EOL> triples = err_checker ( [ check_dependee_exists ( depender , dependee , dependee_id ) for depender , dependee , dependee_id in triples ] , triples ) <EOL> triples = err_checker ( [ check_dependee_build ( depender , dependee , dependee_id ) for depender , dependee , dependee_id in triples ] , triples ) <EOL> triples = err_checker ( [ check_dependee_order ( depender , dependee , dependee_id ) for depender , dependee , dependee_id in triples ] , triples ) <EOL> if found_errs : <EOL> return [ ( err , ) for err in found_errs ] <EOL> shutit . log ( '<STR_LIT>' , level = logging . DEBUG ) <EOL> for module_id in shutit_util . module_ids ( shutit ) : <EOL> module = shutit . shutit_map [ module_id ] <EOL> if cfg [ module_id ] [ '<STR_LIT>' ] : <EOL> shutit . log ( module_id + '<STR_LIT:U+0020>' + str ( module . run_order ) , level = logging . DEBUG ) <EOL> shutit . log ( '<STR_LIT:\n>' , level = logging . DEBUG ) <EOL> return [ ] <EOL> def check_conflicts ( shutit ) : <EOL> """<STR_LIT>""" <EOL> cfg = shutit . cfg <EOL> shutit . log ( '<STR_LIT>' , level = logging . DEBUG ) <EOL> errs = [ ] <EOL> shutit . pause_point ( '<STR_LIT>' , print_input = False , level = <NUM_LIT:3> ) <EOL> for module_id in shutit_util . module_ids ( shutit ) : <EOL> if not cfg [ module_id ] [ '<STR_LIT>' ] : <EOL> continue <EOL> conflicter = shutit . shutit_map [ module_id ] <EOL> for conflictee in conflicter . conflicts_with : <EOL> conflictee_obj = shutit . shutit_map . get ( conflictee ) <EOL> if conflictee_obj == None : <EOL> continue <EOL> if ( ( cfg [ conflicter . module_id ] [ '<STR_LIT>' ] or <EOL> shutit_util . is_to_be_built_or_is_installed ( shutit , conflicter ) ) and <EOL> ( cfg [ conflictee_obj . module_id ] [ '<STR_LIT>' ] or <EOL> shutit_util . is_to_be_built_or_is_installed ( shutit , conflictee_obj ) ) ) : <EOL> errs . append ( ( '<STR_LIT>' + conflicter . module_id + '<STR_LIT>' + conflictee_obj . module_id , ) ) <EOL> return errs <EOL> def check_ready ( shutit , throw_error = True ) : <EOL> """<STR_LIT>""" <EOL> cfg = shutit . cfg <EOL> shutit . log ( '<STR_LIT>' , level = logging . DEBUG ) <EOL> errs = [ ] <EOL> shutit . pause_point ( '<STR_LIT>' , print_input = False , level = <NUM_LIT:3> ) <EOL> for module_id in shutit_util . module_ids ( shutit ) : <EOL> module = shutit . shutit_map [ module_id ] <EOL> shutit . log ( '<STR_LIT>' + module_id , level = logging . DEBUG ) <EOL> if cfg [ module_id ] [ '<STR_LIT>' ] and module . module_id not in cfg [ '<STR_LIT>' ] [ cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] ] [ '<STR_LIT>' ] and not shutit_util . is_installed ( shutit , module ) : <EOL> shutit . log ( '<STR_LIT>' + module_id , level = logging . DEBUG ) <EOL> shutit . login ( prompt_prefix = module_id , command = '<STR_LIT>' ) <EOL> revert_dir = os . getcwd ( ) <EOL> cfg [ '<STR_LIT>' ] [ cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] ] [ '<STR_LIT>' ] = os . path . dirname ( module . __module_file ) <EOL> shutit . chdir ( cfg [ '<STR_LIT>' ] [ cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] ] [ '<STR_LIT>' ] ) <EOL> if not is_ready ( shutit , module ) and throw_error : <EOL> errs . append ( ( module_id + '<STR_LIT>' , shutit . get_shutit_pexpect_session_from_id ( '<STR_LIT>' ) ) ) <EOL> shutit . logout ( ) <EOL> shutit . chdir ( revert_dir ) <EOL> return errs <EOL> def do_remove ( shutit , loglevel = logging . DEBUG ) : <EOL> """<STR_LIT>""" <EOL> cfg = shutit . cfg <EOL> shutit . log ( '<STR_LIT>' , level = loglevel ) <EOL> shutit . pause_point ( '<STR_LIT>' , print_input = False , level = <NUM_LIT:3> ) <EOL> for module_id in shutit_util . module_ids ( shutit ) : <EOL> module = shutit . shutit_map [ module_id ] <EOL> shutit . log ( '<STR_LIT>' + module_id , level = logging . DEBUG ) <EOL> if cfg [ module_id ] [ '<STR_LIT>' ] : <EOL> shutit . log ( '<STR_LIT>' + module_id , level = logging . DEBUG ) <EOL> shutit . login ( prompt_prefix = module_id , command = '<STR_LIT>' ) <EOL> if not module . remove ( shutit ) : <EOL> shutit . log ( shutit_util . print_modules ( shutit ) , level = logging . DEBUG ) <EOL> shutit . fail ( module_id + '<STR_LIT>' , shutit_pexpect_child = shutit . get_shutit_pexpect_session_from_id ( '<STR_LIT>' ) . pexpect_child ) <EOL> else : <EOL> if cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] in ( '<STR_LIT>' , '<STR_LIT>' ) : <EOL> shutit . send ( '<STR_LIT>' + cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] + '<STR_LIT>' + module . module_id + '<STR_LIT>' + cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] + '<STR_LIT>' + module . module_id + '<STR_LIT>' + cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] + '<STR_LIT>' + module . module_id + '<STR_LIT>' , loglevel = loglevel ) <EOL> if module . module_id in cfg [ '<STR_LIT>' ] [ cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] ] [ '<STR_LIT>' ] : <EOL> cfg [ '<STR_LIT>' ] [ cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] ] [ '<STR_LIT>' ] . remove ( module . module_id ) <EOL> cfg [ '<STR_LIT>' ] [ cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] ] [ '<STR_LIT>' ] . append ( module . module_id ) <EOL> shutit . logout ( ) <EOL> def build_module ( shutit , module , loglevel = logging . DEBUG ) : <EOL> """<STR_LIT>""" <EOL> cfg = shutit . cfg <EOL> shutit . log ( '<STR_LIT>' + module . module_id + '<STR_LIT>' + str ( module . run_order ) , level = logging . INFO ) <EOL> cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] = ( cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] + '<STR_LIT>' + module . module_id + '<STR_LIT>' + str ( module . run_order ) ) <EOL> if not module . build ( shutit ) : <EOL> shutit . fail ( module . module_id + '<STR_LIT>' , shutit_pexpect_child = shutit . get_shutit_pexpect_session_from_id ( '<STR_LIT>' ) . pexpect_child ) <EOL> else : <EOL> if cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] in ( '<STR_LIT>' , '<STR_LIT>' ) : <EOL> shutit . send ( '<STR_LIT>' + cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] + '<STR_LIT>' + module . module_id + '<STR_LIT>' + cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] + '<STR_LIT>' + module . module_id + '<STR_LIT>' + cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] + '<STR_LIT>' + module . module_id + '<STR_LIT>' , loglevel = loglevel ) <EOL> cfg [ '<STR_LIT>' ] [ cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] ] [ '<STR_LIT>' ] . append ( module . module_id ) <EOL> if module . module_id in cfg [ '<STR_LIT>' ] [ cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] ] [ '<STR_LIT>' ] : <EOL> cfg [ '<STR_LIT>' ] [ cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] ] [ '<STR_LIT>' ] . remove ( module . module_id ) <EOL> shutit . pause_point ( '<STR_LIT>' + module . module_id , print_input = True , level = <NUM_LIT:2> ) <EOL> cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] = ( cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] + '<STR_LIT>' + module . module_id ) <EOL> if cfg [ module . module_id ] [ '<STR_LIT>' ] or cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] >= <NUM_LIT:3> : <EOL> shutit . log ( shutit_util . build_report ( shutit , '<STR_LIT>' + module . module_id ) , level = logging . DEBUG ) <EOL> if ( not cfg [ module . module_id ] [ '<STR_LIT>' ] and cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] >= <NUM_LIT:2> ) : <EOL> print ( "<STR_LIT>" + "<STR_LIT>" + module . module_id + "<STR_LIT>" ) <EOL> cfg [ module . module_id ] [ '<STR_LIT>' ] = ( shutit_util . util_raw_input ( default = '<STR_LIT:y>' ) == '<STR_LIT:y>' ) <EOL> if cfg [ module . module_id ] [ '<STR_LIT>' ] or cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] : <EOL> shutit . log ( module . module_id + '<STR_LIT>' , level = logging . INFO ) <EOL> stop_all ( shutit , module . run_order ) <EOL> shutit . do_repository_work ( str ( module . module_id ) + '<STR_LIT:_>' + str ( module . run_order ) , password = cfg [ '<STR_LIT:host>' ] [ '<STR_LIT:password>' ] , docker_executable = cfg [ '<STR_LIT:host>' ] [ '<STR_LIT>' ] , force = True ) <EOL> start_all ( shutit , module . run_order ) <EOL> if cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] >= <NUM_LIT:2> : <EOL> print ( "<STR_LIT>" ) <EOL> if shutit_util . util_raw_input ( default = '<STR_LIT:y>' ) == '<STR_LIT:y>' : <EOL> cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] = <NUM_LIT:0> <EOL> def do_build ( shutit ) : <EOL> """<STR_LIT>""" <EOL> cfg = shutit . cfg <EOL> shutit . log ( '<STR_LIT>' , level = logging . DEBUG ) <EOL> shutit . log ( shutit_util . print_config ( cfg ) , level = logging . DEBUG ) <EOL> if cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] >= <NUM_LIT:3> : <EOL> print ( '<STR_LIT>' + shutit_util . colour ( '<STR_LIT>' , '<STR_LIT>' ) ) <EOL> shutit_util . util_raw_input ( ) <EOL> module_id_list = shutit_util . module_ids ( shutit ) <EOL> if cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] : <EOL> module_id_list_build_only = filter ( lambda x : cfg [ x ] [ '<STR_LIT>' ] , module_id_list ) <EOL> for module_id in module_id_list : <EOL> module = shutit . shutit_map [ module_id ] <EOL> shutit . log ( '<STR_LIT>' + module . module_id , level = logging . INFO ) <EOL> if cfg [ module . module_id ] [ '<STR_LIT>' ] : <EOL> if cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] not in module . ok_delivery_methods : <EOL> shutit . fail ( '<STR_LIT>' + module . module_id + '<STR_LIT>' + str ( module . ok_delivery_methods ) + '<STR_LIT>' ) <EOL> if shutit_util . is_installed ( shutit , module ) : <EOL> cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] = ( cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] + '<STR_LIT>' + module . module_id + '<STR_LIT>' + str ( module . run_order ) ) <EOL> else : <EOL> if cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] and module_id == module_id_list_build_only [ - <NUM_LIT:1> ] : <EOL> cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] = ( cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] + '<STR_LIT>' + module . module_id + '<STR_LIT>' + str ( module . run_order ) + '<STR_LIT>' ) <EOL> else : <EOL> revert_dir = os . getcwd ( ) <EOL> cfg [ '<STR_LIT>' ] [ cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] ] [ '<STR_LIT>' ] = os . path . dirname ( module . __module_file ) <EOL> shutit . chdir ( cfg [ '<STR_LIT>' ] [ cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] ] [ '<STR_LIT>' ] ) <EOL> shutit . login ( prompt_prefix = module_id , command = '<STR_LIT>' ) <EOL> build_module ( shutit , module ) <EOL> shutit . logout ( ) <EOL> shutit . chdir ( revert_dir ) <EOL> if shutit_util . is_installed ( shutit , module ) : <EOL> shutit . log ( '<STR_LIT>' , level = logging . DEBUG ) <EOL> if not module . start ( shutit ) : <EOL> shutit . fail ( module . module_id + '<STR_LIT>' , shutit_pexpect_child = shutit . get_shutit_pexpect_session_from_id ( '<STR_LIT>' ) . pexpect_child ) <EOL> def do_test ( shutit ) : <EOL> """<STR_LIT>""" <EOL> cfg = shutit . cfg <EOL> if not cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] : <EOL> shutit . log ( '<STR_LIT>' , level = logging . DEBUG ) <EOL> return <EOL> shutit . log ( '<STR_LIT>' , level = logging . DEBUG ) <EOL> if cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] >= <NUM_LIT:3> : <EOL> print '<STR_LIT>' + shutit_util . colour ( '<STR_LIT>' , '<STR_LIT>' ) <EOL> shutit_util . util_raw_input ( ) <EOL> stop_all ( shutit ) <EOL> start_all ( shutit ) <EOL> for module_id in shutit_util . module_ids ( shutit , rev = True ) : <EOL> if shutit_util . is_installed ( shutit , shutit . shutit_map [ module_id ] ) : <EOL> shutit . log ( '<STR_LIT>' + module_id , level = logging . DEBUG ) <EOL> shutit . login ( prompt_prefix = module_id , command = '<STR_LIT>' ) <EOL> if not shutit . shutit_map [ module_id ] . test ( shutit ) : <EOL> shutit . fail ( module_id + '<STR_LIT>' , shutit_pexpect_child = shutit . get_shutit_pexpect_session_from_id ( '<STR_LIT>' ) . pexpect_child ) <EOL> shutit . logout ( ) <EOL> def do_finalize ( shutit ) : <EOL> """<STR_LIT>""" <EOL> cfg = shutit . cfg <EOL> if cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] >= <NUM_LIT:3> : <EOL> print ( '<STR_LIT>' + shutit_util . colour ( '<STR_LIT>' , '<STR_LIT>' ) ) <EOL> shutit_util . util_raw_input ( ) <EOL> stop_all ( shutit ) <EOL> shutit . log ( '<STR_LIT>' , level = logging . DEBUG ) <EOL> if cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] >= <NUM_LIT:3> : <EOL> print ( '<STR_LIT>' + '<STR_LIT>' + shutit_util . colour ( '<STR_LIT>' , '<STR_LIT>' ) ) <EOL> shutit_util . util_raw_input ( ) <EOL> for module_id in shutit_util . module_ids ( shutit , rev = True ) : <EOL> if shutit_util . is_installed ( shutit , shutit . shutit_map [ module_id ] ) : <EOL> shutit . login ( prompt_prefix = module_id , command = '<STR_LIT>' ) <EOL> if not shutit . shutit_map [ module_id ] . finalize ( shutit ) : <EOL> shutit . fail ( module_id + '<STR_LIT>' , shutit_pexpect_child = shutit . get_shutit_pexpect_session_from_id ( '<STR_LIT>' ) . pexpect_child ) <EOL> shutit . logout ( ) <EOL> def setup_shutit_path ( cfg ) : <EOL> if not cfg [ '<STR_LIT:host>' ] [ '<STR_LIT>' ] : <EOL> return <EOL> res = shutit_util . util_raw_input ( prompt = '<STR_LIT>' ) <EOL> if res in [ '<STR_LIT:n>' , '<STR_LIT:N>' ] : <EOL> with open ( os . path . join ( cfg [ '<STR_LIT>' ] , '<STR_LIT>' ) , '<STR_LIT:a>' ) as f : <EOL> f . write ( '<STR_LIT>' ) <EOL> return <EOL> path_to_shutit = '<STR_LIT>' <EOL> for d in [ '<STR_LIT:.>' , '<STR_LIT:..>' , '<STR_LIT>' , '<STR_LIT>' ] : <EOL> path = os . path . abspath ( d + '<STR_LIT>' ) <EOL> if not os . path . isfile ( path ) : <EOL> continue <EOL> path_to_shutit = path <EOL> while path_to_shutit == '<STR_LIT>' : <EOL> d = shutit_util . util_raw_input ( prompt = '<STR_LIT>' ) <EOL> path = os . path . abspath ( d + '<STR_LIT>' ) <EOL> if not os . path . isfile ( path ) : <EOL> continue <EOL> path_to_shutit = path <EOL> if path_to_shutit != '<STR_LIT>' : <EOL> bashrc = os . path . expanduser ( '<STR_LIT>' ) <EOL> with open ( bashrc , "<STR_LIT:a>" ) as myfile : <EOL> myfile . write ( '<STR_LIT>' + os . path . dirname ( path_to_shutit ) + '<STR_LIT>' ) <EOL> shutit_util . util_raw_input ( prompt = '<STR_LIT>' ) <EOL> shutit_util . handle_exit ( ) <EOL> def main ( ) : <EOL> """<STR_LIT>""" <EOL> if sys . version_info . major == <NUM_LIT:2> : <EOL> if sys . version_info . minor < <NUM_LIT:7> : <EOL> shutit_global . shutit . fail ( '<STR_LIT>' ) <EOL> shutit = shutit_global . shutit <EOL> cfg = shutit . cfg <EOL> shutit . log ( '<STR_LIT>' , transient = True , newline = False ) <EOL> shutit_util . parse_args ( shutit ) <EOL> if cfg [ '<STR_LIT:action>' ] [ '<STR_LIT>' ] : <EOL> shutit_util . create_skeleton ( shutit ) <EOL> cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] = True <EOL> return <EOL> shutit . log ( '<STR_LIT>' , transient = True ) <EOL> shutit_util . load_configs ( shutit ) <EOL> if shutit_util . determine_interactive ( ) and spawn . find_executable ( '<STR_LIT>' ) is None : <EOL> setup_shutit_path ( cfg ) <EOL> shutit_util . load_mod_from_file ( shutit , os . path . join ( shutit . shutit_main_dir , '<STR_LIT>' ) ) <EOL> shutit_util . load_shutit_modules ( shutit ) <EOL> shutit . log ( '<STR_LIT>' , level = logging . INFO ) <EOL> if cfg [ '<STR_LIT:action>' ] [ '<STR_LIT>' ] : <EOL> shutit_util . list_modules ( shutit ) <EOL> shutit_util . handle_exit ( ) <EOL> init_shutit_map ( shutit ) <EOL> shutit_util . config_collection ( shutit ) <EOL> shutit . log ( '<STR_LIT>' , level = logging . INFO ) <EOL> conn_target ( shutit ) <EOL> shutit . log ( '<STR_LIT>' , level = logging . INFO ) <EOL> if cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] > <NUM_LIT:0> and cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] : <EOL> errs = do_interactive_modules ( shutit ) <EOL> else : <EOL> errs = [ ] <EOL> errs . extend ( check_deps ( shutit ) ) <EOL> if cfg [ '<STR_LIT:action>' ] [ '<STR_LIT>' ] : <EOL> digraph = '<STR_LIT>' <EOL> digraph += '<STR_LIT:\n>' . join ( [ make_dep_graph ( module ) for module_id , module in shutit . shutit_map . items ( ) if module_id in cfg and cfg [ module_id ] [ '<STR_LIT>' ] ] ) <EOL> digraph += '<STR_LIT>' <EOL> f = file ( cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] + '<STR_LIT>' , '<STR_LIT:w>' ) <EOL> f . write ( digraph ) <EOL> f . close ( ) <EOL> digraph_all = '<STR_LIT>' <EOL> digraph_all += '<STR_LIT:\n>' . join ( [ make_dep_graph ( module ) for module_id , module in shutit . shutit_map . items ( ) ] ) <EOL> digraph_all += '<STR_LIT>' <EOL> f = file ( cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] + '<STR_LIT>' , '<STR_LIT:w>' ) <EOL> f . write ( digraph_all ) <EOL> f . close ( ) <EOL> shutit . log ( '<STR_LIT>' + digraph_all ) <EOL> shutit . log ( '<STR_LIT>' ) <EOL> shutit . log ( '<STR_LIT>' ) <EOL> shutit . log ( '<STR_LIT>' + digraph ) <EOL> shutit . log ( '<STR_LIT>' + digraph ) <EOL> shutit . log ( '<STR_LIT>' ) <EOL> shutit . log ( '<STR_LIT>' ) <EOL> shutit_util . handle_exit ( ) <EOL> shutit_util . config_collection_for_built ( shutit ) <EOL> if cfg [ '<STR_LIT:action>' ] [ '<STR_LIT>' ] or cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] <= logging . DEBUG : <EOL> shutit . log ( shutit_util . print_config ( cfg , history = cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] ) ) <EOL> cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] = True <EOL> f = file ( cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] + '<STR_LIT>' , '<STR_LIT:w>' ) <EOL> f . write ( shutit_util . print_config ( cfg , history = cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] ) ) <EOL> f . close ( ) <EOL> shutit . log ( '<STR_LIT>' ) <EOL> shutit . log ( '<STR_LIT>' + cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] ) <EOL> shutit . log ( '<STR_LIT>' ) <EOL> shutit . log ( '<STR_LIT>' + cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] + '<STR_LIT>' + cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] + '<STR_LIT>' + cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] + '<STR_LIT>' ) <EOL> shutit . log ( '<STR_LIT>' ) <EOL> shutit . log ( '<STR_LIT>' + cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] + '<STR_LIT>' + cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] + '<STR_LIT>' + cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] + '<STR_LIT>' ) <EOL> shutit . log ( '<STR_LIT>' ) <EOL> shutit . log ( '<STR_LIT>' + cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] + '<STR_LIT:\n>' ) <EOL> shutit . log ( '<STR_LIT>' ) <EOL> if cfg [ '<STR_LIT:action>' ] [ '<STR_LIT>' ] : <EOL> return <EOL> errs . extend ( check_conflicts ( shutit ) ) <EOL> errs . extend ( check_ready ( shutit , throw_error = False ) ) <EOL> if errs : <EOL> shutit . log ( shutit_util . print_modules ( shutit ) , level = logging . ERROR ) <EOL> child = None <EOL> for err in errs : <EOL> shutit . log ( err [ <NUM_LIT:0> ] , level = logging . ERROR ) <EOL> if not child and len ( err ) > <NUM_LIT:1> : <EOL> child = err [ <NUM_LIT:1> ] <EOL> shutit . fail ( "<STR_LIT>" , shutit_pexpect_child = child ) <EOL> shutit . record_config ( ) <EOL> do_remove ( shutit ) <EOL> do_build ( shutit ) <EOL> do_test ( shutit ) <EOL> do_finalize ( shutit ) <EOL> finalize_target ( shutit ) <EOL> shutit . log ( shutit_util . build_report ( shutit , '<STR_LIT>' ) , level = logging . DEBUG ) <EOL> if cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] != '<STR_LIT>' : <EOL> shutit . log ( cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] , level = logging . INFO ) <EOL> if cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] >= <NUM_LIT:3> : <EOL> shutit . log ( '<STR_LIT:\n>' + '<STR_LIT>' + cfg [ '<STR_LIT:target>' ] [ '<STR_LIT:name>' ] + '<STR_LIT>' , code = '<STR_LIT>' , level = logging . DEBUG ) <EOL> cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] = True <EOL> shutit . log ( '<STR_LIT>' , level = logging . INFO ) <EOL> shutit_util . handle_exit ( <NUM_LIT:0> ) <EOL> def do_phone_home ( msg = None , question = '<STR_LIT>' ) : <EOL> """<STR_LIT>""" <EOL> if msg is None : <EOL> msg = { } <EOL> if shutit_global . cfg [ '<STR_LIT>' ] [ '<STR_LIT>' ] == <NUM_LIT:0> : <EOL> return <EOL> msg . update ( { '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT>' : os . getcwd ( ) , '<STR_LIT:user>' : os . environ . get ( '<STR_LIT>' , '<STR_LIT>' ) } ) <EOL> if question != '<STR_LIT>' and shutit_util . util_raw_input ( prompt = question + '<STR_LIT>' ) not in ( '<STR_LIT:y>' , '<STR_LIT:Y>' , '<STR_LIT>' ) : <EOL> return <EOL> try : <EOL> urllib . urlopen ( "<STR_LIT>" + urllib . urlencode ( msg ) ) <EOL> except Exception as e : <EOL> shutit_global . shutit . log ( '<STR_LIT>' + str ( e . message ) , level = logging . ERROR ) <EOL> def do_interactive_modules ( shutit ) : <EOL> cfg = shutit . cfg <EOL> errs = [ ] <EOL> while True : <EOL> shutit_util . list_modules ( shutit , long_output = False , sort_order = '<STR_LIT>' ) <EOL> module_id = shutit_util . util_raw_input ( prompt = '<STR_LIT>' ) <EOL> if module_id : <EOL> try : <EOL> _ = cfg [ module_id ] <EOL> except : <EOL> print '<STR_LIT>' <EOL> continue <EOL> cfg [ module_id ] [ '<STR_LIT>' ] = not cfg [ module_id ] [ '<STR_LIT>' ] <EOL> if not shutit_util . config_collection_for_built ( shutit , throw_error = False ) : <EOL> cfg [ module_id ] [ '<STR_LIT>' ] = not cfg [ module_id ] [ '<STR_LIT>' ] <EOL> shutit_util . util_raw_input ( prompt = '<STR_LIT>' ) <EOL> continue <EOL> if cfg [ module_id ] [ '<STR_LIT>' ] : <EOL> newcfg_list = [ ] <EOL> while True : <EOL> print shutit_util . print_config ( cfg , module_id = module_id ) <EOL> name = shutit_util . util_raw_input ( prompt = '<STR_LIT>' ) <EOL> if name : <EOL> doing_list = False <EOL> while True : <EOL> if doing_list : <EOL> val_type = shutit_util . util_raw_input ( prompt = '<STR_LIT>' ) <EOL> if val_type not in ( '<STR_LIT:b>' , '<STR_LIT:s>' , '<STR_LIT>' ) : <EOL> continue <EOL> else : <EOL> val_type = shutit_util . util_raw_input ( prompt = '<STR_LIT>' ) <EOL> if val_type not in ( '<STR_LIT:b>' , '<STR_LIT:s>' , '<STR_LIT:l>' , '<STR_LIT>' ) : <EOL> continue <EOL> if val_type == '<STR_LIT:s>' : <EOL> val = shutit_util . util_raw_input ( prompt = '<STR_LIT>' ) <EOL> if doing_list : <EOL> newcfg_list . append ( val ) <EOL> else : <EOL> break <EOL> elif val_type == '<STR_LIT:b>' : <EOL> val = shutit_util . util_raw_input ( prompt = '<STR_LIT>' ) <EOL> if doing_list : <EOL> if val == '<STR_LIT:t>' : <EOL> newcfg_list . append ( True ) <EOL> elif val == '<STR_LIT:f>' : <EOL> newcfg_list . append ( False ) <EOL> else : <EOL> print '<STR_LIT>' <EOL> continue <EOL> else : <EOL> break <EOL> elif val_type == '<STR_LIT:l>' : <EOL> doing_list = True <EOL> newcfg_list = [ ] <EOL> elif val_type == '<STR_LIT>' : <EOL> break <EOL> if doing_list : <EOL> cfg [ module_id ] [ name ] = newcfg_list <EOL> else : <EOL> cfg [ module_id ] [ name ] = val <EOL> else : <EOL> break <EOL> else : <EOL> pass <EOL> else : <EOL> break <EOL> return errs <EOL> def setup_signals ( ) : <EOL> signal . signal ( signal . SIGINT , shutit_util . ctrl_c_signal_handler ) <EOL> signal . signal ( signal . SIGQUIT , shutit_util . ctrl_quit_signal_handler ) <EOL> shutit_version = '<STR_LIT>' <EOL> if __name__ == '<STR_LIT:__main__>' : <EOL> setup_signals ( ) <EOL> main ( ) </s>
