X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=vendor%2Fdrush%2Fdrush%2Fexamples%2Fsync_via_http.drush.inc;fp=vendor%2Fdrush%2Fdrush%2Fexamples%2Fsync_via_http.drush.inc;h=cf44d2132db083287f2bd4e8ee5d37c4f5f9218e;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hp=0000000000000000000000000000000000000000;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad;p=yaffs-website diff --git a/vendor/drush/drush/examples/sync_via_http.drush.inc b/vendor/drush/drush/examples/sync_via_http.drush.inc new file mode 100644 index 000000000..cf44d2132 --- /dev/null +++ b/vendor/drush/drush/examples/sync_via_http.drush.inc @@ -0,0 +1,126 @@ + '/srv/www/drupal', + * 'uri' => 'staging.site.com', + * 'source-command-specific' => array( + * 'sql-sync' => array( + * 'http-sync' => 'https://staging.site.com/protected-directory/site-database-dump.sql', + * 'http-sync-user' => 'wwwadmin', + * 'http-sync-password' => 'secretsecret', + * ), + * ), + * ); + * @endcode + * + * To use this feature, copy the 'source-command-specific' + * item from the example alias above, place it in your staging + * site aliases, and custom the access credentials as + * necessary. You must also copy the sync_via_http.drush.inc + * file to a location where Drush will find it, such as + * $HOME/.drush. See `drush topic docs-commands` for more + * information. + * + * IMPORTANT NOTE: This example does not cause the sql dump + * to be performed; it is presumed that the dump file already + * exists at the provided URL. For a full solution, a web page + * that initiated an sql-dump (or perhaps a local sql-sync followed + * by an sql-sanitize and then an sql-dump) would be necessary. + */ + +/** + * Implements hook_drush_help_alter(). + * + * When a hook extends a command with additional options, it must + * implement help alter and declare the option(s). Doing so will add + * the option to the help text for the modified command, and will also + * allow the new option to be specified on the command line. Without + * this, Drush will fail with an error when a user attempts to use + * the option. + */ +function sync_via_http_drush_help_alter(&$command) { + if ($command['command'] == 'sql-sync') { + $command['options']['http-sync'] = "Copy the database via http instead of rsync. Value is the url that the existing database dump can be found at."; + $command['sub-options']['http-sync']['http-sync-user'] = "Username for the protected directory containing the sql dump."; + $command['sub-options']['http-sync']['http-sync-password'] = "Password for the same directory."; + } +} + +/** + * Implements drush_hook_pre_COMMAND(). + * + * During the pre hook, determine if the http-sync option has been + * specified. If it has been, then disable the normal ssh + rsync + * dump-and-transfer that sql-sync usually does, and transfer the + * database dump via an http download. + */ +function drush_sync_via_http_pre_sql_sync($source = NULL, $destination = NULL) { + $sql_dump_download_url = drush_get_option('http-sync'); + if (!empty($sql_dump_download_url)) { + $user = drush_get_option('http-sync-user', FALSE); + $password = drush_get_option('http-sync-password', FALSE); + $source_dump_file = _drush_sync_via_http_download_file($sql_dump_download_url, $user, $password); + if ($source_dump_file === FALSE) { + return drush_set_error('DRUSH_CANNOT_DOWNLOAD', dt("The URL !url could not be downloaded.", array('!url' => $sql_dump_download_url))); + } + drush_set_option('target-dump', $source_dump_file); + drush_set_option('no-dump', TRUE); + drush_set_option('no-sync', TRUE); + } +} + +/** + * Downloads a files. + * + * Optionaly uses user authentication, using either wget or curl, as available. + */ +function _drush_sync_via_http_download_file($url, $user = FALSE, $password = FALSE, $destination = FALSE, $overwrite = TRUE) { + static $use_wget; + if ($use_wget === NULL) { + $use_wget = drush_shell_exec('which wget'); + } + + $destination_tmp = drush_tempnam('download_file'); + if ($use_wget) { + if ($user && $password) { + drush_shell_exec("wget -q --timeout=30 --user=%s --password=%s -O %s %s", $user, $password, $destination_tmp, $url); + } + else { + drush_shell_exec("wget -q --timeout=30 -O %s %s", $destination_tmp, $url); + } + } + else { + if ($user && $password) { + drush_shell_exec("curl -s -L --connect-timeout 30 --user %s:%s -o %s %s", $user, $password, $destination_tmp, $url); + } + else { + drush_shell_exec("curl -s -L --connect-timeout 30 -o %s %s", $destination_tmp, $url); + } + } + if (!drush_get_context('DRUSH_SIMULATE')) { + if (!drush_file_not_empty($destination_tmp) && $file = @file_get_contents($url)) { + @file_put_contents($destination_tmp, $file); + } + if (!drush_file_not_empty($destination_tmp)) { + // Download failed. + return FALSE; + } + } + if ($destination) { + drush_move_dir($destination_tmp, $destination, $overwrite); + return $destination; + } + return $destination_tmp; +}