@@ -77,11 +77,82 @@ function drush_provision_drupal_provision_migrate($platform, $new_name = NULL) {
7777 $ options = array ();
7878 $ options ['uri ' ] = d ()->uri ;
7979
80+ // If the site is migrated between platforms and not just renamed,
81+ // we should update the info collected about source and target platform first.
82+ // Note that we have to exclude Hostmaster platform from this extra verify.
83+ if (d ()->profile != 'hostmaster ' ) {
84+ if (!is_null (d ($ platform )->name ) && (d ($ platform )->name != d ()->platform ->name )) {
85+ provision_backend_invoke ('@hostmaster ' , 'hosting-task ' , array (d ()->platform ->name , 'verify ' ), array ('force ' => TRUE ));
86+ sleep (5 ); // A small trick to avoid high load and race conditions.
87+ provision_backend_invoke ('@hostmaster ' , 'hosting-task ' , array (d ($ platform )->name , 'verify ' ), array ('force ' => TRUE ));
88+ sleep (5 ); // A small trick to avoid high load and race conditions.
89+ }
90+ }
91+
8092 if (!is_null ($ new_name ) && ($ new_name != d ()->name )) {
8193 $ options = d ()->options ;
8294 $ options ['uri ' ] = ltrim ($ new_name , '@ ' );
8395 $ hash_name = drush_get_option ('#name ' ) ? '#name ' : 'name ' ;
8496 $ options [$ hash_name ] = $ new_name ;
97+ $ new_aliases = array ();
98+ $ old_aliases = (is_array ($ options ['aliases ' ])) ? $ options ['aliases ' ] : FALSE ;
99+ $ pre_old_uri = ltrim (d ()->uri , '@ ' );
100+ $ pre_new_uri = ltrim ($ new_name , '@ ' );
101+ $ raw_old_uri = preg_replace ('/^www\./ ' , '' , $ pre_old_uri );
102+ $ raw_new_uri = preg_replace ('/^www\./ ' , '' , $ pre_new_uri );
103+ $ www_old_uri = "www. " . $ raw_old_uri ;
104+ $ www_new_uri = "www. " . $ raw_new_uri ;
105+ if (is_array ($ old_aliases ) && !empty ($ old_aliases )) {
106+ foreach ($ old_aliases as $ alias ) {
107+ drush_log (dt ("DEBUG RENAME old_aliases is @this " , array ('@this ' => $ alias )));
108+ if (!preg_match ("/^www\./ " , $ pre_old_uri ) && preg_match ("/^www\./ " , $ pre_new_uri )) {
109+ $ new_aliases [] = str_replace ($ www_old_uri , $ raw_new_uri , $ alias );
110+ }
111+ elseif (preg_match ("/^www\./ " , $ pre_old_uri ) && !preg_match ("/^www\./ " , $ pre_new_uri )) {
112+ $ new_aliases [] = str_replace ($ raw_old_uri , $ www_new_uri , $ alias );
113+ }
114+ elseif (!preg_match ("/^www\./ " , $ pre_old_uri ) && !preg_match ("/^www\./ " , $ pre_new_uri )) {
115+ $ new_aliases [] = str_replace ($ www_old_uri , $ www_new_uri , $ alias );
116+ }
117+ elseif (preg_match ("/^www\./ " , $ pre_old_uri ) && preg_match ("/^www\./ " , $ pre_new_uri )) {
118+ $ new_aliases [] = str_replace ($ raw_old_uri , $ raw_new_uri , $ alias );
119+ }
120+ }
121+ $ unique_aliases = array_unique ($ new_aliases ); // Make sure there are no duplicates.
122+ $ options ['aliases ' ] = array (); // Reset original aliases array.
123+ $ options ['aliases ' ] = $ unique_aliases ; // Use rewritten aliases array.
124+ if (!is_null (d ($ platform )->name ) && (d ($ platform )->name == d ()->platform ->name )) {
125+ drush_set_option ('rename_only ' , TRUE );
126+ foreach ($ new_aliases as $ alias ) {
127+ drush_log (dt ("DEBUG RENAME new_aliases is @this " , array ('@this ' => $ alias )));
128+ }
129+ foreach ($ unique_aliases as $ alias ) {
130+ drush_log (dt ("DEBUG RENAME unique_aliases is @this " , array ('@this ' => $ alias )));
131+ }
132+ }
133+ drush_set_option ('aliases ' , $ unique_aliases );
134+ }
135+ else {
136+ $ detected_aliases = provision_drupal_find_aliases ();
137+ foreach ($ detected_aliases as $ alias ) {
138+ drush_log (dt ("DEBUG RENAME detected_aliases is @this " , array ('@this ' => $ alias )));
139+ }
140+ drush_set_option ('aliases ' , $ detected_aliases );
141+ }
142+ // Warning: do not try to re-verify the original site here
143+ // even with backend-only verify, because it would create
144+ // (and never delete) duplicate vhost with old domain
145+ // and all aliases included - see issue #1067702.
146+ }
147+ else {
148+ // We have to exclude Hostmaster site from any extra verify steps.
149+ if (d ()->profile != 'hostmaster ' ) {
150+ // We should update also the info collected about the site before running migrate task.
151+ // Doing this is safe only when the site is migrated with the same name - see issue #1067702.
152+ $ local_uri_verify = '@ ' . d ()->uri ;
153+ provision_backend_invoke ('@hostmaster ' , 'hosting-task ' , array ($ local_uri_verify , 'verify ' ), array ('force ' => TRUE ));
154+ sleep (5 ); // A small trick to avoid high load and race conditions.
155+ }
85156 }
86157 $ options ['platform ' ] = $ platform ;
87158 $ options ['root ' ] = d ($ platform )->root ;
@@ -140,17 +211,43 @@ function drush_provision_drupal_post_provision_migrate($platform, $new_name = NU
140211 d ()->service ('http ' )->sync (d ()->site_path );
141212 }
142213
143-
144-
145214 if (!is_null ($ new_name ) && ($ new_name != d ()->name )) {
146- // remove the existing alias
215+ // Use correct context for cleanup operations.
216+ $ source_name = drush_get_option ('source_name ' );
217+ drush_log (dt ("DEBUG RENAME source_name is @this " , array ('@this ' => $ source_name )));
218+ // Remove the existing drush alias.
147219 $ config = new Provision_Config_Drushrc_Alias (d ()->name );
148220 $ config ->unlink ();
149-
221+ // Delete the old site directory.
222+ _provision_recursive_delete (d ($ source_name )->site_path );
223+ d ()->service ('http ' )->sync (d ($ source_name )->site_path );
224+ // Remove old site name aliases.
225+ _provision_drupal_delete_aliases ();
150226 // Remove the symlink in the clients directory.
151227 _provision_client_delete_symlink ();
152228 }
153229
154- // Load the config file of the newly migrated site and return it to hosting.
155- provision_reload_config ('site ' , drush_get_option ('new_site_path ' , d ()->site_path ) . '/drushrc.php ' );
230+ $ rename_only = drush_get_option ('rename_only ' );
231+ if ($ rename_only ) {
232+ // We run this extra tricky backend verify to avoid issue #1004526.
233+ if (d ()->profile != 'hostmaster ' ) {
234+ drush_log (dt ("DEBUG RENAME new_uri is @this " , array ('@this ' => $ new_name )));
235+ $ deploy_replace_site = drush_get_option ('deploy_replace_site ' );
236+ drush_log (dt ("DEBUG RENAME deploy_replace_site is @this " , array ('@this ' => $ deploy_replace_site )));
237+ $ final_aliases = drush_get_option ('aliases ' );
238+ foreach ($ final_aliases as $ alias ) {
239+ drush_log (dt ("DEBUG RENAME final_aliases is @this " , array ('@this ' => $ alias )));
240+ }
241+ provision_reload_config ('site ' , drush_get_option ('new_site_path ' , d ($ new_name )->site_path ) . '/drushrc.php ' );
242+ d ($ new_name )->aliases = drush_set_option ('aliases ' , $ final_aliases );
243+ d ($ new_name )->write_alias ();
244+ drush_set_option ('aliases ' , drush_get_option ('aliases ' ), 'site ' );
245+ drush_set_option ('provision_save_config ' , false );
246+ provision_backend_invoke ($ new_name , 'provision-verify ' );
247+ }
248+ }
249+ else {
250+ // Load the config file of the newly migrated site and return it to hosting.
251+ provision_reload_config ('site ' , drush_get_option ('new_site_path ' , d ()->site_path ) . '/drushrc.php ' );
252+ }
156253}
0 commit comments