2012-01-01 21:10:25 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< ? php 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								class  Mage_Task_BuiltIn_Releases_Rollback 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    extends  Mage_Task_TaskAbstract 
							 
						 
					
						
							
								
									
										
										
										
											2012-02-04 19:31:42 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    implements  Mage_Task_Releases_BuiltIn 
							 
						 
					
						
							
								
									
										
										
										
											2012-01-01 21:10:25 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    private  $_release  =  null ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-21 05:23:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-01-01 21:10:25 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    public  function  getName () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        return  'Rollback release [built-in]' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    public  function  setRelease ( $releaseId ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        $this -> _release  =  $releaseId ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        return  $this ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-21 05:23:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-01-01 21:10:25 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    public  function  getRelease () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        return  $this -> _release ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-21 05:23:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-01-01 21:10:25 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    public  function  run () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-21 05:23:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        if  ( $this -> getConfig () -> release ( 'enabled' ,  false )  ==  true )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            $releasesDirectory  =  $this -> getConfig () -> release ( 'directory' ,  'releases' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            $symlink  =  $this -> getConfig () -> release ( 'symlink' ,  'current' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-01-01 21:10:25 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								            $output  =  '' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            $result  =  $this -> _runRemoteCommand ( 'ls -1 '  .  $releasesDirectory ,  $output ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            $releases  =  ( $output  ==  '' )  ?  array ()  :  explode ( PHP_EOL ,  $output ); 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-21 05:23:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-01-01 21:10:25 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								            if  ( count ( $releases )  ==  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-21 05:23:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                Mage_Console :: output ( 'Release are not available for <dark_gray>'  .  $this -> getConfig () -> getHost ()  .  '</dark_gray> ... <red>FAIL</red>' ); 
							 
						 
					
						
							
								
									
										
										
										
											2012-01-01 21:10:25 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                rsort ( $releases ); 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-21 05:23:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-01-01 21:10:25 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								                $releaseIsAvailable  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                if  ( $this -> getRelease ()  ==  '' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    $releaseId  =  $releases [ 0 ]; 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-21 05:23:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                    $releaseIsAvailable  =  true ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-01-01 21:10:25 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                }  else  if  ( $this -> getRelease ()  <=  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    $index  =  $this -> getRelease ()  *  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    if  ( isset ( $releases [ $index ]))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        $releaseId  =  $releases [ $index ]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        $releaseIsAvailable  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    if  ( in_array ( $this -> getRelease (),  $releases ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        $releaseId  =  $this -> getRelease (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        $releaseIsAvailable  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-21 05:23:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-01-01 21:10:25 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								                if  ( ! $releaseIsAvailable )  { 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-21 05:23:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                    Mage_Console :: output ( 'Release <dark_gray>'  .  $this -> getRelease ()  .  '</dark_gray> is invalid or unavailable for <dark_gray>'  .  $this -> getConfig () -> getHost ()  .  '</dark_gray> ... <red>FAIL</red>' ); 
							 
						 
					
						
							
								
									
										
										
										
											2012-01-01 21:10:25 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                }  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-21 05:23:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                    Mage_Console :: output ( 'Rollback release on <dark_gray>'  .  $this -> getConfig () -> getHost ()  .  '</dark_gray>' ); 
							 
						 
					
						
							
								
									
										
										
										
											2012-01-01 21:10:25 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								                    $rollbackTo  =  $releasesDirectory  .  '/'  .  $releaseId ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-21 05:23:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-01-01 21:10:25 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								                    // Tasks
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    $tasks  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    $completedTasks  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-21 05:23:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                    $tasksToRun  =  $this -> getConfig () -> getTasks (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    $this -> getConfig () -> setReleaseId ( $releaseId ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-01-01 21:10:25 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								                    if  ( count ( $tasksToRun )  ==  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        Mage_Console :: output ( '<light_purple>Warning!</light_purple> <dark_gray>No </dark_gray><light_cyan>Deployment</light_cyan> <dark_gray>tasks defined.</dark_gray>' ,  2 ); 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-21 05:23:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                        Mage_Console :: output ( 'Deployment to <dark_gray>'  .  $this -> getConfig () -> getHost ()  .  '</dark_gray> skipped!' ,  1 ,  3 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-01-01 21:10:25 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								                    }  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-24 00:33:10 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                        foreach  ( $tasksToRun  as  $taskData )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                            $task  =  Mage_Task_Factory :: get ( $taskData ,  $this -> getConfig (),  true ,  'deploy' ); 
							 
						 
					
						
							
								
									
										
										
										
											2012-01-04 02:25:42 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                            $task -> init (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                            Mage_Console :: output ( 'Running <purple>'  .  $task -> getName ()  .  '</purple> ... ' ,  2 ,  false ); 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-21 05:23:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-01-04 02:25:42 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                            if  ( $task  instanceOf  Mage_Task_Releases_RollbackAware )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                                $tasks ++ ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                                $result  =  $task -> run (); 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-21 05:23:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-01-04 02:25:42 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                                if  ( $result  ==  true )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                                    Mage_Console :: output ( '<green>OK</green>' ,  0 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                                    $completedTasks ++ ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                                }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                                    Mage_Console :: output ( '<red>FAIL</red>' ,  0 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                            }  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-21 05:23:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                                Mage_Console :: output ( '<yellow>SKIPPED</yellow>' ,  0 ); 
							 
						 
					
						
							
								
									
										
										
										
											2012-01-01 21:10:25 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								                            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    } 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-21 05:23:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-01-01 21:10:25 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								                    // Changing Release
 
							 
						 
					
						
							
								
									
										
										
										
											2012-01-04 02:25:42 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                    Mage_Console :: output ( 'Running <purple>Rollback Release [id='  .  $releaseId  .  ']</purple> ... ' ,  2 ,  false ); 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-21 05:23:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-01-01 21:10:25 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								                    $userGroup  =  '' ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-10-24 23:52:29 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                    $resultFetch  =  $this -> _runRemoteCommand ( 'ls -ld '  .  $rollbackTo  .  ' | awk \'{print \$3":"\$4}\'' ,  $userGroup ); 
							 
						 
					
						
							
								
									
										
										
										
											2012-01-01 21:10:25 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								                    $command  =  'rm -f '  .  $symlink 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                             .  ' && ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                             .  'ln -sf '  .  $rollbackTo  .  ' '  .  $symlink 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                             .  ' && ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                             .  'chown -h '  .  $userGroup  .  ' '  .  $symlink ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    $result  =  $this -> _runRemoteCommand ( $command ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    if  ( $result )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        Mage_Console :: output ( '<green>OK</green>' ,  0 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        $completedTasks ++ ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        Mage_Console :: output ( '<red>FAIL</red>' ,  0 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    } 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-21 05:23:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-01-01 21:10:25 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								                    if  ( $completedTasks  ==  $tasks )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        $tasksColor  =  'green' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        $tasksColor  =  'red' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    } 
							 
						 
					
						
							
								
									
										
										
										
											2012-09-21 05:23:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    Mage_Console :: output ( 'Release rollback on <dark_gray>'  .  $this -> getConfig () -> getHost ()  .  '</dark_gray> compted: <'  .  $tasksColor  .  '>'  .  $completedTasks  .  '/'  .  $tasks  .  '</'  .  $tasksColor  .  '> tasks done.' ,  1 ,  3 ); 
							 
						 
					
						
							
								
									
										
										
										
											2012-01-01 21:10:25 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            return  $result ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								}