@@ -1029,24 +1029,36 @@ def log(self, args):
10291029 print_log_entries (logEntries , args .type )
10301030 time .sleep (2 )
10311031
1032- def log_from_now (self , app_name , deployment_name , type_ ):
1033- last_time = datetime .now () - timedelta (seconds = 10 )
1034- while True :
1035- logEntries = []
1036- try :
1037- logEntries = self .api .read_log (
1038- app_name ,
1039- deployment_name ,
1040- type_ ,
1041- last_time = last_time )
1042- except GoneError :
1043- raise InputErrorException ('WrongApplication' )
1032+ def log_lines_look_successful (self , log_lines , containers , version ):
1033+ container_lines = 0
1034+ for line in log_lines :
1035+ if line == 'Deployed version: %s' % version :
1036+ container_lines += 1
1037+ if container_lines == containers and line == "Routing requests to new version" :
1038+ return True
1039+ return False
10441040
1045- if len (logEntries ) > 0 :
1046- last_time = datetime .fromtimestamp (float (logEntries [- 1 ]["time" ]))
1047- print_log_entries (logEntries , type_ )
1041+ def is_deploy_successful (self , app_name , deployment_name , ts , containers , version ):
1042+ print "version:" , version
1043+ printed_lines = 0
1044+ log_start_time = datetime .fromtimestamp (ts ) - timedelta (seconds = 1 )
1045+ start_time = ts
1046+ while time .time () < start_time + 130 :
1047+ log_entries = self .api .read_log (
1048+ app_name ,
1049+ deployment_name ,
1050+ 'deploy' ,
1051+ last_time = log_start_time )
1052+
1053+ print_log_entries (log_entries [printed_lines :], 'deploy' )
1054+ printed_lines = len (log_entries )
1055+
1056+ log_lines = [line ['message' ] for line in log_entries ]
1057+ if self .log_lines_look_successful (log_lines , containers , version ):
1058+ return True
10481059
10491060 time .sleep (1 )
1061+ return False
10501062
10511063 def _get_or_create_deployment (self , app_name , deployment_name , clear_cache ):
10521064 try :
@@ -1123,6 +1135,7 @@ def push(self, args):
11231135
11241136 If no deployment exists we automatically create one.
11251137
1138+ If --ship is provided, also deploy the deployment and open it in a browser.
11261139
11271140 """
11281141 if not check_installed_rcs ('bzr' ) and not check_installed_rcs ('git' ):
@@ -1148,13 +1161,14 @@ def push(self, args):
11481161 self .redeploy (deployment )
11491162
11501163 if args .ship :
1151- print
1152- print "Deploying newest version. Press Ctrl+C to open {} in your browser." .format (deployment ['name' ])
1164+ ts = time .time ()
11531165 self .redeploy (deployment )
1166+ deployment = self .api .read_deployment (app_name , deployment_name )
11541167
1155- try :
1156- self .log_from_now (app_name , deployment_name , 'deploy' )
1157- except KeyboardInterrupt :
1168+ if not self .is_deploy_successful (app_name , deployment_name , ts , deployment ['min_boxes' ], deployment ['version' ]):
1169+ sys .exit (1 )
1170+
1171+ if sys .stdout .isatty ():
11581172 print
11591173 print "Opening in browser..."
11601174 self ._open (self ._get_deployment_url (deployment ))
0 commit comments