Drush: commands/make/make.drush.inc Source File

  1. 7.x doxygen/html/make_8drush_8inc_source.html
  2. master doxygen/html/make_8drush_8inc_source.html
Go to the documentation of this file.
1 <?php
2 /**
3  * @file
4  * Drush Make commands.
5  */
6 
7 /**
8  * Default localization server for downloading translations.
9  */
10 define('MAKE_DEFAULT_L10N_SERVER', 'http://localize.drupal.org/l10n_server.xml');
11 
12 /**
13  * Make refuses to build makefiles whose api version is mismatched
14  * with make command.
15  */
16 define('MAKE_API', 2);
17 
18 include_once 'make.utilities.inc';
19 include_once 'make.download.inc';
20 include_once 'make.project.inc';
21 include_once 'generate.contents.make.inc';
22 
23 /**
24  * Implements hook_drush_command().
25  */
26 function make_drush_command() {
27  $items['make'] = array(
28  'bootstrap' => DRUSH_BOOTSTRAP_DRUSH,
29  'description' => 'Turns a makefile into a working Drupal codebase.',
30  'arguments' => array(
31  'makefile' => 'Filename of the makefile to use for this build.',
32  'build path' => 'The path at which to build the makefile.',
33  ),
34  'examples' => array(
35  'drush make example.make example' => 'Build the example.make makefile in the example directory.',
36  'drush make --no-core --contrib-destination=. installprofile.make' => 'Build an installation profile within an existing Drupal site',
37  'drush make http://example.com/example.make example' => 'Build the remote example.make makefile in the example directory.',
38  ),
39  'options' => array(
40  'version' => 'Print the make API version and exit.',
41  'concurrency' => array(
42  'description' => 'Set the number of concurrent projects that will be processed at the same time. The default is 1.',
43  'example-value' => '1',
44  ),
45  'contrib-destination' => 'Specify a path under which modules and themes should be placed. Defaults to sites/all for Drupal 6,7 and the corresponding directory in the Drupal root for Drupal 8 and above.',
46  'force-complete' => 'Force a complete build even if errors occur.',
47  'ignore-checksums' => 'Ignore md5 checksums for downloads.',
48  'md5' => array(
49  'description' => 'Output an md5 hash of the current build after completion. Use --md5=print to print to stdout.',
50  'example-value' => 'print',
51  'value' => 'optional',
52  ),
53  'make-update-default-url' => 'The default location to load the XML update information from.',
54  'no-build' => 'Do not build a codebase. Makes the `build path` argument optional.',
55  'no-cache' => 'Do not use the pm-download caching (defaults to cache enabled).',
56  'no-clean' => 'Leave temporary build directories in place instead of cleaning up after completion.',
57  'no-core' => 'Do not require a Drupal core project to be specified.',
58  'no-recursion' => 'Do not recurse into the makefiles of any downloaded projects; you can also set [do_recursion] = 0 on a per-project basis in the makefile.',
59  'no-patch-txt' => 'Do not write a PATCHES.txt file in the directory of each patched project.',
60  'no-gitinfofile' => 'Do not modify .info files when cloning from Git.',
61  'force-gitinfofile' => 'Force a modification of .info files when cloning from Git even if repository isn\'t hosted on Drupal.org.',
62  'no-gitprojectinfo' => 'Do not inject project info into .info files when cloning from Git.',
63  'prepare-install' => 'Prepare the built site for installation. Generate a properly permissioned settings.php and files directory.',
64  'tar' => 'Generate a tar archive of the build. The output filename will be [build path].tar.gz.',
65  'test' => 'Run a temporary test build and clean up.',
66  'translations' => 'Retrieve translations for the specified comma-separated list of language(s) if available for all projects.',
67  'working-copy' => 'Preserves VCS directories, like .git, for projects downloaded using such methods.',
68  'download-mechanism' => 'How to download files. Should be autodetected, but this is an override if it doesn\'t work. Options are "curl" and "make" (a native download method).',
69  'projects' => array(
70  'description' => 'Restrict the make to this comma-separated list of projects. To specify all projects, pass *.',
71  'example' => 'views,ctools',
72  ),
73  'libraries' => array(
74  'description' => 'Restrict the make to this comma-separated list of libraries. To specify all libraries, pass *.',
75  'example' => 'tinymce',
76  ),
77  'allow-override' => array(
78  'description' => 'Restrict the make options to this comma-separated list of options.',
79  'example' => 'all or none or working-copy or no-core, working-copy',
80  ),
81  'lock' => array(
82  'description' => 'Generate a makefile, based on the one passed in, with all versions resolved. Defaults to printing to the terminal, but an output file may be provided.',
83  'examples' => array(
84  'drush make example.make example --lock=example.lock' => 'Write the compiled version of example.make to example.lock.',
85  ),
86  ),
87  'lock-update' => array(
88  'description' => 'Generate an updated makefile, based on the one passed in, with all versions updated. Defaults to printing to the terminal, but an output file may be provided.',
89  'examples' => array(
90  'drush make example.make example --lock-update=example.lock' => 'Write the updated version of example.make to example.lock.',
91  ),
92  ),
93  ),
94  'engines' => array('release_info'),
95  'topics' => array('docs-make', 'docs-make-example'),
96  );
97 
98  $items['make-generate'] = array(
99  'bootstrap' => DRUSH_BOOTSTRAP_DRUPAL_FULL,
100  'description' => 'Generate a makefile from the current Drupal site.',
101  'examples' => array(
102  'drush generate-makefile example.make' => 'Generate a makefile with ALL projects versioned (should a project have a known version number)',
103  'drush generate-makefile example.make --exclude-versions' => 'Generate a makefile with NO projects versioned',
104  'drush generate-makefile example.make --exclude-versions=drupal,views,cck' => 'Generate a makefile with ALL projects versioned EXCEPT core, Views and CCK',
105  'drush generate-makefile example.make --include-versions=admin_menu,og,ctools (--exclude-versions)' => 'Generate a makefile with NO projects versioned EXCEPT Admin Menu, OG and CTools.',
106  ),
107  'options' => array(
108  'exclude-versions' => 'Exclude all version numbers (default is include all version numbers) or optionally specify a list of projects to exclude from versioning',
109  'include-versions' => 'Include a specific list of projects, while all other projects remain unversioned in the makefile (so implies --exclude-versions)',
110  ),
111  'engines' => array('release_info'),
112  'aliases' => array('generate-makefile'),
113  );
114 
115  // Hidden command to build a group of projects.
116  $items['make-process'] = array(
117  'hidden' => TRUE,
118  'arguments' => array(
119  'directory' => 'The temporary working directory to use',
120  ),
121  'options' => array(
122  'projects' => 'An array of projects generated by make_projects()',
123  'manifest' => 'An array of projects already being processed',
124  ),
125  'bootstrap' => DRUSH_BOOTSTRAP_DRUSH,
126  'engines' => array('release_info'),
127  );
128 
129  // Add docs topic.
130  $docs_dir = drush_get_context('DOC_PREFIX', DRUSH_BASE_PATH);
131  $items['docs-make'] = array(
132  'description' => 'Drush Make overview with examples',
133  'hidden' => TRUE,
134  'topic' => TRUE,
135  'bootstrap' => DRUSH_BOOTSTRAP_DRUSH,
136  'callback' => 'drush_print_file',
137  'callback arguments' => array($docs_dir . '/docs/make.txt'),
138  );
139  $items['docs-make-example'] = array(
140  'description' => 'Drush Make example makefile',
141  'hidden' => TRUE,
142  'topic' => TRUE,
143  'bootstrap' => DRUSH_BOOTSTRAP_DRUSH,
144  'callback' => 'drush_print_file',
145  'callback arguments' => array($docs_dir . '/examples/example.make'),
146  );
147  return $items;
148 }
149 
150 /**
151  * Implements hook_drush_help().
152  */
153 function make_drush_help($section) {
154  switch ($section) {
155  case 'drush:make':
156  return 'Turns a makefile into a Drupal codebase. For a full description of options and makefile syntax, see docs/make.txt and examples/example.make.';
157  case 'drush:make-generate':
158  return 'Generate a makefile from the current Drupal site, specifying project version numbers unless not known or otherwise specified. Unversioned projects will be interpreted later by drush make as "most recent stable release"';
159  }
160 }
161 
162 /**
163  * Command argument complete callback.
164  *
165  * @return array
166  * Strong glob of files to complete on.
167  */
168 function make_make_complete() {
169  return array(
170  'files' => array(
171  'directories' => array(
172  'pattern' => '*',
173  'flags' => GLOB_ONLYDIR,
174  ),
175  'make' => array(
176  'pattern' => '*.make',
177  ),
178  ),
179  );
180 }
181 
182 /**
183  * Drush callback; make based on the makefile.
184  */
185 function drush_make($makefile = NULL, $build_path = NULL) {
186  // If --version option is supplied, print it and bail.
187  if (drush_get_option('version', FALSE)) {
188  drush_print(dt('Drush make API version !version', array('!version' => MAKE_API)));
190  return;
191  }
192 
193  if (!drush_get_option('no-build', FALSE) && !($build_path = make_build_path($build_path))) {
194  return FALSE;
195  }
196 
197  $info = _make_parse_info_file($makefile);
198 
199  if (!drush_get_option('no-build', FALSE)) {
200  drush_log(dt('Beginning to build !makefile.', array('!makefile' => $makefile)), 'ok');
201 
202  $make_dir = realpath(dirname($makefile));
203  $core_version = str_replace('.x', '', $info['core'][0]);
204  $sitewide = drush_drupal_sitewide_directory($core_version);
205  if (make_projects(FALSE, drush_get_option('contrib-destination', $sitewide), $info, $build_path, $make_dir)) {
206  make_libraries(FALSE, drush_get_option('contrib-destination', $sitewide), $info, $build_path, $make_dir);
207 
208  if (drush_get_option('prepare-install')) {
209  make_prepare_install($build_path);
210  }
211  }
212  }
213 
214  if (drush_get_option('lock', FALSE)) {
215  make_generate_from_makefile(drush_get_option('lock'), $makefile);
216  }
217 
218  if (drush_get_option('lock-update', FALSE)) {
219  make_generate_from_makefile(drush_get_option('lock-update'), $makefile);
220  }
221 
222  return $info;
223 }
224 
225 /**
226  * Drush callback: hidden file to process an individual project.
227  */
228 function drush_make_process($directory) {
229  // Set the temporary directory.
230  make_tmp(TRUE, $directory);
231  $projects = drush_get_option('projects', array());
232 
233  $manifest = drush_get_option('manifest', array());
234 
235  foreach ($projects as $project) {
236  if ($instance = DrushMakeProject::getInstance($project['type'], $project)) {
237  $instance->setManifest($manifest);
238  $instance->make();
239  }
240  else {
241  make_error('PROJECT-TYPE', dt('Non-existent project type %type on project %project.', array('%type' => $project['type'], '%project' => $project['name'])));
242  }
243  }
244 }
245 
246 /**
247  * Implements drush_hook_post_COMMAND() for the make command.
248  */
249 function drush_make_post_make($makefile = NULL, $build_path = NULL) {
250  if (drush_get_option('version') || drush_get_option('no-build')) {
251  return;
252  }
253  if (!($build_path = make_build_path($build_path))) {
254  return;
255  }
256 
257  if ($option = drush_get_option('md5')) {
258  $md5 = make_md5();
259  if ($option === 'print') {
260  drush_print($md5);
261  }
262  else {
263  drush_log(dt('Build hash: %md5', array('%md5' => $md5)), 'ok');
264  }
265  }
266 
267  // Only take final build steps if not in testing mode.
268  if (!drush_get_option('test')) {
269  if (drush_get_option('tar')) {
270  make_tar($build_path);
271  }
272  else {
273  make_move_build($build_path);
274  }
275  }
276 
277  make_clean_tmp();
278 }
279 
280 /**
281  * Gather additional data on all projects specified in the make file.
282  */
283 function make_prepare_projects($recursion, $info, $contrib_destination = '', $build_path = '', $make_dir = '') {
284  $projects = array();
285  if (empty($info['projects'])) {
286  if (drush_get_option('no-core') || $recursion) {
287  return TRUE;
288  }
289  else {
290  drush_set_error('MAKE_NO_CORE', dt('No core project specified.'));
291  return FALSE;
292  }
293  }
294  $ignore_checksums = drush_get_option('ignore-checksums');
295  $translations = array();
296  if (isset($info['translations'])) {
297  $translations = $info['translations'];
298  }
299  if ($arg_translations = drush_get_option('translations', FALSE)) {
300  $translations = array_merge(explode(',', $arg_translations), $translations);
301  }
302  foreach ($info['projects'] as $key => $project) {
303  $md5 = '';
304  if (isset($project['md5'])) {
305  $md5 = $project['md5'];
306  }
307  // Merge the known data onto the project info.
308  $project += array(
309  'name' => $key,
310  'core' => $info['core'],
311  'translations' => $translations,
312  'build_path' => $build_path,
313  'contrib_destination' => $contrib_destination,
314  'version' => '',
315  'location' => drush_get_option('make-update-default-url', RELEASE_INFO_DEFAULT_URL),
316  'subdir' => '',
317  'directory_name' => '',
318  'make_directory' => $make_dir,
319  'options' => array(),
320  );
321  // If download components are specified, but not the download
322  // type, default to git.
323  if (isset($project['download']) && !isset($project['download']['type'])) {
324  $project['download']['type'] = 'git';
325  }
326  if (!isset($project['l10n_url']) && ($project['location'] == RELEASE_INFO_DEFAULT_URL)) {
327  $project['l10n_url'] = MAKE_DEFAULT_L10N_SERVER;
328  }
329 
330  // For convenience: define $request to be compatible with release_info
331  // engine.
332  // TODO: refactor to enforce 'make' to internally work with release_info
333  // keys.
334  $request = make_prepare_request($project);
335 
336  if ($project['location'] != RELEASE_INFO_DEFAULT_URL && !isset($project['type'])) {
337  // Set the cache option based on our '--no-cache' option.
338  $cache_before = drush_get_option('cache');
339  if (!drush_get_option('no-cache', FALSE)) {
340  drush_set_option('cache', TRUE);
341  }
342  $project_type = release_info_check_project($request, 'core');
343  // Restore the previous '--cache' option value.
344  drush_set_option('cache', $cache_before);
345  $project['download_type'] = ($project_type ? 'core' : 'contrib');
346  }
347  elseif (!empty($project['type'])) {
348  $project['download_type'] = ($project['type'] == 'core' ? 'core' : 'contrib');
349  }
350  else {
351  $project['download_type'] = ($project['name'] == 'drupal' ? 'core' : 'contrib');
352  }
353  $projects[$project['download_type']][$project['name']] = $project;
354  }
355 
356  $cores = !empty($projects['core']) ? count($projects['core']) : 0;
357 
358  if (drush_get_option('no-core')) {
359  unset($projects['core']);
360  }
361  elseif ($cores == 0 && !$recursion) {
362  drush_set_error('MAKE_NO_CORE', dt('No core project specified.'));
363  return FALSE;
364  }
365  elseif ($cores == 1 && $recursion) {
366  unset($projects['core']);
367  }
368  elseif ($cores > 1) {
369  drush_set_error('MAKE_MULTIPLE_CORES', dt('More than one core project specified.'));
370  return FALSE;
371  }
372 
373  foreach ($projects as $type => $type_projects) {
374  foreach ($type_projects as $project) {
375  if (make_project_needs_release_info($project)) {
376  // For convenience: define $request to be compatible with release_info
377  // engine.
378  // TODO: refactor to enforce 'make' to internally work with release_info
379  // keys.
380  $request = make_prepare_request($project, $type);
381  // Set the cache option based on our '--no-cache' option.
382  $cache_before = drush_get_option('cache');
383  if (!drush_get_option('no-cache', FALSE)) {
384  drush_set_option('cache', TRUE);
385  }
386  $release = release_info_fetch($request, '', 'ignore');
387  if ($release === FALSE) {
388  return FALSE;
389  }
390  // Restore the previous '--cache' option value.
391  drush_set_option('cache', $cache_before);
392  if (!isset($project['type'])) {
393  // Translate release_info key for project_type to drush make.
394  $project['type'] = $request['project_type'];
395  }
396  if (!isset($project['download'])) {
397  $project['download'] = array(
398  'type' => 'pm',
399  'full_version' => $release['version'],
400  'download_link' => $release['download_link'],
401  'status url' => $request['status url'],
402  );
403  }
404  }
405  if (!empty($md5)) {
406  $project['download']['md5'] = $md5;
407  }
408  if ($ignore_checksums) {
409  unset($project['download']['md5']);
410  }
411  $projects[($project['type'] == 'core' ? 'core' : 'contrib')][$project['name']] = $project;
412  }
413  }
414  if (!$recursion) {
415  $projects['contrib'] = isset($projects['contrib']) ? $projects['contrib'] : array();
416  drush_set_option('DRUSH_MAKE_PROJECTS', array_merge($projects['core'], $projects['contrib']));
417  }
418  return $projects;
419 }
420 
421 /**
422  * Process all projects specified in the make file.
423  */
424 function make_projects($recursion, $contrib_destination, $info, $build_path, $make_dir) {
425  $projects = make_prepare_projects($recursion, $info, $contrib_destination, $build_path, $make_dir);
426  // Core is built in place, rather than using make-process.
427  if (isset($projects['core'])) {
428  foreach ($projects['core'] as $project) {
429  if ($instance = DrushMakeProject::getInstance($project['type'], $project)) {
430  $project = $instance;
431  }
432  else {
433  make_error('PROJECT-TYPE', dt('Non-existent project type %type on project %project.', array('%type' => $project['type'], '%project' => $project['name'])));
434  }
435  // Set the cache option based on our '--no-cache' option.
436  $cache_before = drush_get_option('cache');
437  if (!drush_get_option('no-cache', FALSE)) {
438  drush_set_option('cache', TRUE);
439  }
440  $project->make();
441  // Restore the previous '--cache' option value.
442  drush_set_option('cache', $cache_before);
443  }
444  }
445 
446  // Process all projects concurrently using make-process.
447  if (isset($projects['contrib'])) {
448  $concurrency = drush_get_option('concurrency', 1);
449  // Generate $concurrency sub-processes to do the actual work.
450  $invocations = array();
451  $thread = 0;
452  foreach ($projects['contrib'] as $project) {
453  $thread = ++$thread % $concurrency;
454  // Ensure that we've set this sub-process up.
455  if (!isset($invocations[$thread])) {
456  $invocations[$thread] = array(
457  'args' => array(
458  make_tmp(),
459  ),
460  'options' => array(
461  'projects' => array(),
462  ),
463  'site' => array(),
464  );
465  }
466  // Add the project to this sub-process.
467  $invocations[$thread]['options']['projects'][] = $project;
468  // Add the manifest so recursive downloads do not override projects.
469  $invocations[$thread]['options']['manifest'] = array_keys($projects['contrib']);
470  }
471  if (!empty($invocations)) {
472  // Backend options.
473  $backend_options = array(
474  'concurrency' => $concurrency,
475  'method' => 'POST',
476  );
477 
478  $common_options = drush_redispatch_get_options();
479  // Merge in stdin options since we process makefiles recursively. See http://drupal.org/node/1510180.
480  $common_options = array_merge($common_options, drush_get_context('stdin'));
481  // Package handler should use 'wget'.
482  $common_options['package-handler'] = 'wget';
483 
484  // Avoid any prompts from CLI.
485  $common_options['yes'] = TRUE;
486 
487  // Use cache unless explicitly turned off.
488  if (!drush_get_option('no-cache', FALSE)) {
489  $common_options['cache'] = TRUE;
490  }
491  // Unless --verbose or --debug are passed, quiter backend output.
492  if (empty($common_options['verbose']) && empty($common_options['debug'])) {
493  $backend_options['#output-label'] = FALSE;
494  $backend_options['integrate'] = TRUE;
495  }
496  drush_backend_invoke_concurrent($invocations, $common_options, $backend_options, 'make-process', '@none');
497  }
498  }
499  return TRUE;
500 }
501 
502 /**
503  * Gather additional data on all libraries specified in the make file.
504  */
505 function make_prepare_libraries($recursion, $info, $contrib_destination = '', $build_path = '', $make_dir = '') {
506  if (empty($info['libraries'])) {
507  return;
508  }
509  $ignore_checksums = drush_get_option('ignore-checksums');
510  $libraries = array();
511  foreach ($info['libraries'] as $key => $library) {
512  if (!is_string($key) || !is_array($library)) {
513  // TODO Print a prettier message.
514  continue;
515  }
516  // Merge the known data onto the library info.
517  $library += array(
518  'name' => $key,
519  'core' => $info['core'],
520  'build_path' => $build_path,
521  'contrib_destination' => $contrib_destination,
522  'subdir' => '',
523  'directory_name' => $key,
524  'make_directory' => $make_dir,
525  );
526  if ($ignore_checksums) {
527  unset($library['download']['md5']);
528  }
529  $libraries[$key] = $library;
530  }
531  if (!$recursion) {
532  drush_set_option('DRUSH_MAKE_LIBRARIES', $info['libraries']);
533  }
534  return $libraries;
535 }
536 
537 /**
538  * Process all libraries specified in the make file.
539  */
540 function make_libraries($recursion, $contrib_destination, $info, $build_path, $make_dir) {
541  $libraries = make_prepare_libraries($recursion, $info, $contrib_destination, $build_path, $make_dir);
542  if (empty($libraries)) {
543  return;
544  }
545  foreach ($libraries as $key => $library) {
546  $class = DrushMakeProject::getInstance('library', $library);
547  $class->make();
548  }
549 }
550 
551 /**
552  * The path where the final build will be placed.
553  */
554 function make_build_path($build_path) {
555  static $saved_path;
556  if (isset($saved_path)) {
557  return $saved_path;
558  }
559 
560  // Determine the base of the build.
561  if (drush_get_option('tar')) {
562  $build_path = dirname($build_path) . '/' . basename($build_path, '.tar.gz') . '.tar.gz';
563  }
564  elseif (isset($build_path) && (!empty($build_path) || $build_path == '.')) {
565  $build_path = rtrim($build_path, '/');
566  }
567  // Allow tests to run without a specified base path.
568  elseif (drush_get_option('test') || drush_confirm(dt("Make new site in the current directory?"))) {
569  $build_path = '.';
570  }
571  else {
572  return drush_user_abort(dt('Build aborted.'));
573  }
574  if ($build_path != '.' && file_exists($build_path)) {
575  return drush_set_error('MAKE_PATH_EXISTS', dt('Base path %path already exists.', array('%path' => $build_path)));
576  }
577  $saved_path = $build_path;
578  return $build_path;
579 }
580 
581 /**
582  * Move the completed build into place.
583  */
584 function make_move_build($build_path) {
585  $tmp_path = make_tmp();
586  $ret = TRUE;
587  if ($build_path == '.') {
588  $info = drush_scan_directory($tmp_path . DIRECTORY_SEPARATOR . '__build__', '/./', array('.', '..'), 0, FALSE, 'filename', 0, TRUE);
589  foreach ($info as $file) {
590  $destination = $build_path . DIRECTORY_SEPARATOR . $file->basename;
591  if (file_exists($destination)) {
592  // To prevent the removal of top-level directories such as 'modules' or
593  // 'themes', descend in a level if the file exists.
594  // TODO: This only protects one level of directories from being removed.
595  $files = drush_scan_directory($file->filename, '/./', array('.', '..'), 0, FALSE);
596  foreach ($files as $file) {
597  $ret = $ret && drush_copy_dir($file->filename, $destination . DIRECTORY_SEPARATOR . $file->basename, FILE_EXISTS_MERGE);
598  }
599  }
600  else {
601  $ret = $ret && drush_copy_dir($file->filename, $destination);
602  }
603  }
604  }
605  else {
606  drush_mkdir(dirname($build_path));
607  $ret = drush_move_dir($tmp_path . DIRECTORY_SEPARATOR . '__build__', $tmp_path . DIRECTORY_SEPARATOR . basename($build_path), TRUE);
608  $ret = $ret && drush_copy_dir($tmp_path . DIRECTORY_SEPARATOR . basename($build_path), $build_path);
609  }
610 
611  // Copying to final destination resets write permissions. Re-apply.
612  if (drush_get_option('prepare-install')) {
613  $default = $build_path . '/sites/default';
614  chmod($default . '/settings.php', 0666);
615  chmod($default . '/files', 0777);
616  }
617 
618  if (!$ret) {
619  drush_set_error('MAKE_CANNOT_MOVE_BUILD', dt("Cannot move build into place."));
620  }
621  return $ret;
622 }
623 
624 /**
625  * Create a request array for use with release_info_fetch().
626  *
627  * @param array $project
628  * Project array.
629  * @param string $type
630  * 'contrib' or 'core'.
631  */
632 function make_prepare_request($project, $type = 'contrib') {
633  $request = array(
634  'name' => $project['name'],
635  'drupal_version' => $project['core'],
636  'status url' => $project['location'],
637  );
638  if ($project['version'] != '') {
639  $request['project_version'] = $project['version'];
640  $request['version'] = $type == 'core' ? $project['version'] : $project['core'] . '-' . $project['version'];
641  }
642  return $request;
643 }
644 
645 /**
646  * Determine if the release information is required for this
647  * project. When it is determined that it is, this potentially results
648  * in the use of pm-download to process the project.
649  *
650  * If the location of the project is not customized (uses d.o), and
651  * one of the following is true, then release information is required:
652  *
653  * - $project['type'] has not been specified
654  * - $project['download'] has not been specified
655  *
656  * @see make_projects()
657  */
659  return isset($project['location'])
660  // Only fetch release info if the project type is unknown OR if
661  // download attributes are unspecified.
662  && (!isset($project['type']) || !isset($project['download']));
663 }

File

doxygen/html/make_8drush_8inc_source.html
View source
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Drush: commands/make/make.drush.inc Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">Drush
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Pages</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_afac61274991793aa7e9133a8f4f291e.html">commands</a></li><li class="navelem"><a class="el" href="dir_71080c12e208a9908650860bfe2a57f6.html">make</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">make.drush.inc</div>  </div>
</div><!--header-->
<div class="contents">
<a href="make_8drush_8inc.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;&lt;?php<span class="comment"></span></div>
<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * @file</span></div>
<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Drush Make commands.</span></div>
<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * Default localization server for downloading translations.</span></div>
<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#affb301a79bb307bb27a39cf6f184dc91">   10</a></span>&#160;define(<span class="stringliteral">&#39;MAKE_DEFAULT_L10N_SERVER&#39;</span>, <span class="stringliteral">&#39;http://localize.drupal.org/l10n_server.xml&#39;</span>);</div>
<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * Make refuses to build makefiles whose api version is mismatched</span></div>
<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * with make command.</span></div>
<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#acb28b89b64f706ac1e26374bd68bf66c">   16</a></span>&#160;define(<span class="stringliteral">&#39;MAKE_API&#39;</span>, 2);</div>
<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;</div>
<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;include_once <span class="stringliteral">&#39;make.utilities.inc&#39;</span>;</div>
<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;include_once <span class="stringliteral">&#39;make.download.inc&#39;</span>;</div>
<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;include_once <span class="stringliteral">&#39;make.project.inc&#39;</span>;</div>
<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;include_once <span class="stringliteral">&#39;generate.contents.make.inc&#39;</span>;</div>
<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"> * Implements hook_drush_command().</span></div>
<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#ae35f71b98a1e675d8d2c920659baf262">   26</a></span>&#160;<span class="keyword">function</span> <a class="code" href="make_8drush_8inc.html#ae35f71b98a1e675d8d2c920659baf262">make_drush_command</a>() {</div>
<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;  $items[<span class="stringliteral">&#39;make&#39;</span>] = array(</div>
<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;    <span class="stringliteral">&#39;bootstrap&#39;</span> =&gt; <a class="code" href="lib_2Drush_2Boot_2bootstrap_8inc.html#aaa7e693dd78d632c3d0f5baa3ba2d200">DRUSH_BOOTSTRAP_DRUSH</a>,</div>
<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;    <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;Turns a makefile into a working Drupal codebase.&#39;</span>,</div>
<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;    <span class="stringliteral">&#39;arguments&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;      <span class="stringliteral">&#39;makefile&#39;</span> =&gt; <span class="stringliteral">&#39;Filename of the makefile to use for this build.&#39;</span>,</div>
<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;      <span class="stringliteral">&#39;build path&#39;</span> =&gt; <span class="stringliteral">&#39;The path at which to build the makefile.&#39;</span>,</div>
<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    ),</div>
<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;    <span class="stringliteral">&#39;examples&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;      <span class="stringliteral">&#39;drush make example.make example&#39;</span> =&gt; <span class="stringliteral">&#39;Build the example.make makefile in the example directory.&#39;</span>,</div>
<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;      <span class="stringliteral">&#39;drush make --no-core --contrib-destination=. installprofile.make&#39;</span> =&gt; <span class="stringliteral">&#39;Build an installation profile within an existing Drupal site&#39;</span>,</div>
<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;      <span class="stringliteral">&#39;drush make http://example.com/example.make example&#39;</span> =&gt; <span class="stringliteral">&#39;Build the remote example.make makefile in the example directory.&#39;</span>,</div>
<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;    ),</div>
<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    <span class="stringliteral">&#39;options&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;      <span class="stringliteral">&#39;version&#39;</span> =&gt; <span class="stringliteral">&#39;Print the make API version and exit.&#39;</span>,</div>
<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;      <span class="stringliteral">&#39;concurrency&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;        <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;Set the number of concurrent projects that will be processed at the same time. The default is 1.&#39;</span>,</div>
<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;        <span class="stringliteral">&#39;example-value&#39;</span> =&gt; <span class="charliteral">&#39;1&#39;</span>,</div>
<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;      ),</div>
<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;      <span class="stringliteral">&#39;contrib-destination&#39;</span> =&gt; <span class="stringliteral">&#39;Specify a path under which modules and themes should be placed. Defaults to sites/all for Drupal 6,7 and the corresponding directory in the Drupal root for Drupal 8 and above.&#39;</span>,</div>
<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;      <span class="stringliteral">&#39;force-complete&#39;</span> =&gt; <span class="stringliteral">&#39;Force a complete build even if errors occur.&#39;</span>,</div>
<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;      <span class="stringliteral">&#39;ignore-checksums&#39;</span> =&gt; <span class="stringliteral">&#39;Ignore md5 checksums for downloads.&#39;</span>,</div>
<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;      <span class="stringliteral">&#39;md5&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;        <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;Output an md5 hash of the current build after completion. Use --md5=print to print to stdout.&#39;</span>,</div>
<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;        <span class="stringliteral">&#39;example-value&#39;</span> =&gt; <span class="stringliteral">&#39;print&#39;</span>,</div>
<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;        <span class="stringliteral">&#39;value&#39;</span> =&gt; <span class="stringliteral">&#39;optional&#39;</span>,</div>
<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;      ),</div>
<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;      <span class="stringliteral">&#39;make-update-default-url&#39;</span> =&gt; <span class="stringliteral">&#39;The default location to load the XML update information from.&#39;</span>,</div>
<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;      <span class="stringliteral">&#39;no-build&#39;</span> =&gt; <span class="stringliteral">&#39;Do not build a codebase. Makes the `build path` argument optional.&#39;</span>,</div>
<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;      <span class="stringliteral">&#39;no-cache&#39;</span> =&gt; <span class="stringliteral">&#39;Do not use the pm-download caching (defaults to cache enabled).&#39;</span>,</div>
<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;      <span class="stringliteral">&#39;no-clean&#39;</span> =&gt; <span class="stringliteral">&#39;Leave temporary build directories in place instead of cleaning up after completion.&#39;</span>,</div>
<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;      <span class="stringliteral">&#39;no-core&#39;</span> =&gt; <span class="stringliteral">&#39;Do not require a Drupal core project to be specified.&#39;</span>,</div>
<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;      <span class="stringliteral">&#39;no-recursion&#39;</span> =&gt; <span class="stringliteral">&#39;Do not recurse into the makefiles of any downloaded projects; you can also set [do_recursion] = 0 on a per-project basis in the makefile.&#39;</span>,</div>
<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;      <span class="stringliteral">&#39;no-patch-txt&#39;</span> =&gt; <span class="stringliteral">&#39;Do not write a PATCHES.txt file in the directory of each patched project.&#39;</span>,</div>
<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;      <span class="stringliteral">&#39;no-gitinfofile&#39;</span> =&gt; <span class="stringliteral">&#39;Do not modify .info files when cloning from Git.&#39;</span>,</div>
<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;      <span class="stringliteral">&#39;force-gitinfofile&#39;</span> =&gt; <span class="stringliteral">&#39;Force a modification of .info files when cloning from Git even if repository isn\&#39;t hosted on Drupal.org.&#39;</span>,</div>
<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;      <span class="stringliteral">&#39;no-gitprojectinfo&#39;</span> =&gt; <span class="stringliteral">&#39;Do not inject project info into .info files when cloning from Git.&#39;</span>,</div>
<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;      <span class="stringliteral">&#39;prepare-install&#39;</span> =&gt; <span class="stringliteral">&#39;Prepare the built site for installation. Generate a properly permissioned settings.php and files directory.&#39;</span>,</div>
<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;      <span class="stringliteral">&#39;tar&#39;</span> =&gt; <span class="stringliteral">&#39;Generate a tar archive of the build. The output filename will be [build path].tar.gz.&#39;</span>,</div>
<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;      <span class="stringliteral">&#39;test&#39;</span> =&gt; <span class="stringliteral">&#39;Run a temporary test build and clean up.&#39;</span>,</div>
<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;      <span class="stringliteral">&#39;translations&#39;</span> =&gt; <span class="stringliteral">&#39;Retrieve translations for the specified comma-separated list of language(s) if available for all projects.&#39;</span>,</div>
<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;      <span class="stringliteral">&#39;working-copy&#39;</span> =&gt; <span class="stringliteral">&#39;Preserves VCS directories, like .git, for projects downloaded using such methods.&#39;</span>,</div>
<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;      <span class="stringliteral">&#39;download-mechanism&#39;</span> =&gt; <span class="stringliteral">&#39;How to download files. Should be autodetected, but this is an override if it doesn\&#39;t work. Options are &quot;curl&quot; and &quot;make&quot; (a native download method).&#39;</span>,</div>
<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;      <span class="stringliteral">&#39;projects&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;        <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;Restrict the make to this comma-separated list of projects. To specify all projects, pass *.&#39;</span>,</div>
<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;        <span class="stringliteral">&#39;example&#39;</span> =&gt; <span class="stringliteral">&#39;views,ctools&#39;</span>,</div>
<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;      ),</div>
<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;      <span class="stringliteral">&#39;libraries&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;        <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;Restrict the make to this comma-separated list of libraries. To specify all libraries, pass *.&#39;</span>,</div>
<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;        <span class="stringliteral">&#39;example&#39;</span> =&gt; <span class="stringliteral">&#39;tinymce&#39;</span>,</div>
<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;      ),</div>
<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;      <span class="stringliteral">&#39;allow-override&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;        <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;Restrict the make options to this comma-separated list of options.&#39;</span>,</div>
<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;        <span class="stringliteral">&#39;example&#39;</span> =&gt; <span class="stringliteral">&#39;all or none or working-copy or no-core, working-copy&#39;</span>,</div>
<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;      ),</div>
<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;      <span class="stringliteral">&#39;lock&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;        <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;Generate a makefile, based on the one passed in, with all versions resolved. Defaults to printing to the terminal, but an output file may be provided.&#39;</span>,</div>
<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;        <span class="stringliteral">&#39;examples&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;          <span class="stringliteral">&#39;drush make example.make example --lock=example.lock&#39;</span> =&gt; <span class="stringliteral">&#39;Write the compiled version of example.make to example.lock.&#39;</span>,</div>
<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;        ),</div>
<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;      ),</div>
<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;      <span class="stringliteral">&#39;lock-update&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;        <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;Generate an updated makefile, based on the one passed in, with all versions updated. Defaults to printing to the terminal, but an output file may be provided.&#39;</span>,</div>
<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;        <span class="stringliteral">&#39;examples&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;          <span class="stringliteral">&#39;drush make example.make example --lock-update=example.lock&#39;</span> =&gt; <span class="stringliteral">&#39;Write the updated version of example.make to example.lock.&#39;</span>,</div>
<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;        ),</div>
<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;      ),</div>
<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    ),</div>
<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    <span class="stringliteral">&#39;engines&#39;</span> =&gt; array(<span class="stringliteral">&#39;release_info&#39;</span>),</div>
<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    <span class="stringliteral">&#39;topics&#39;</span> =&gt; array(<span class="stringliteral">&#39;docs-make&#39;</span>, <span class="stringliteral">&#39;docs-make-example&#39;</span>),</div>
<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;  );</div>
<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;</div>
<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;  $items[<span class="stringliteral">&#39;make-generate&#39;</span>] = array(</div>
<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    <span class="stringliteral">&#39;bootstrap&#39;</span> =&gt; <a class="code" href="lib_2Drush_2Boot_2bootstrap_8inc.html#a6ea86b0ce6756b159a3fdef78fdff159">DRUSH_BOOTSTRAP_DRUPAL_FULL</a>,</div>
<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;Generate a makefile from the current Drupal site.&#39;</span>,</div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <span class="stringliteral">&#39;examples&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;      <span class="stringliteral">&#39;drush generate-makefile example.make&#39;</span> =&gt; <span class="stringliteral">&#39;Generate a makefile with ALL projects versioned (should a project have a known version number)&#39;</span>,</div>
<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;      <span class="stringliteral">&#39;drush generate-makefile example.make --exclude-versions&#39;</span> =&gt; <span class="stringliteral">&#39;Generate a makefile with NO projects versioned&#39;</span>,</div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;      <span class="stringliteral">&#39;drush generate-makefile example.make --exclude-versions=drupal,views,cck&#39;</span> =&gt; <span class="stringliteral">&#39;Generate a makefile with ALL projects versioned EXCEPT core, Views and CCK&#39;</span>,</div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;      <span class="stringliteral">&#39;drush generate-makefile example.make --include-versions=admin_menu,og,ctools (--exclude-versions)&#39;</span> =&gt; <span class="stringliteral">&#39;Generate a makefile with NO projects versioned EXCEPT Admin Menu, OG and CTools.&#39;</span>,</div>
<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    ),</div>
<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    <span class="stringliteral">&#39;options&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;      <span class="stringliteral">&#39;exclude-versions&#39;</span> =&gt; <span class="stringliteral">&#39;Exclude all version numbers (default is include all version numbers) or optionally specify a list of projects to exclude from versioning&#39;</span>,</div>
<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;      <span class="stringliteral">&#39;include-versions&#39;</span> =&gt; <span class="stringliteral">&#39;Include a specific list of projects, while all other projects remain unversioned in the makefile (so implies --exclude-versions)&#39;</span>,</div>
<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    ),</div>
<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    <span class="stringliteral">&#39;engines&#39;</span> =&gt; array(<span class="stringliteral">&#39;release_info&#39;</span>),</div>
<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    <span class="stringliteral">&#39;aliases&#39;</span> =&gt; array(<span class="stringliteral">&#39;generate-makefile&#39;</span>),</div>
<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;  );</div>
<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;</div>
<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;  <span class="comment">// Hidden command to build a group of projects.</span></div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;  $items[<span class="stringliteral">&#39;make-process&#39;</span>] = array(</div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    <span class="stringliteral">&#39;hidden&#39;</span> =&gt; TRUE,</div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;    <span class="stringliteral">&#39;arguments&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;      <span class="stringliteral">&#39;directory&#39;</span> =&gt; <span class="stringliteral">&#39;The temporary working directory to use&#39;</span>,</div>
<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    ),</div>
<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    <span class="stringliteral">&#39;options&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;      <span class="stringliteral">&#39;projects&#39;</span> =&gt; <span class="stringliteral">&#39;An array of projects generated by make_projects()&#39;</span>,</div>
<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;      <span class="stringliteral">&#39;manifest&#39;</span> =&gt; <span class="stringliteral">&#39;An array of projects already being processed&#39;</span>,</div>
<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    ),</div>
<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    <span class="stringliteral">&#39;bootstrap&#39;</span> =&gt; <a class="code" href="lib_2Drush_2Boot_2bootstrap_8inc.html#aaa7e693dd78d632c3d0f5baa3ba2d200">DRUSH_BOOTSTRAP_DRUSH</a>,</div>
<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;    <span class="stringliteral">&#39;engines&#39;</span> =&gt; array(<span class="stringliteral">&#39;release_info&#39;</span>),</div>
<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;  );</div>
<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;</div>
<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;  <span class="comment">// Add docs topic.</span></div>
<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;  $docs_dir = <a class="code" href="context_8inc.html#ad25559f8d7d753f636fbeac347c29fc5">drush_get_context</a>(<span class="stringliteral">&#39;DOC_PREFIX&#39;</span>, DRUSH_BASE_PATH);</div>
<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;  $items[<span class="stringliteral">&#39;docs-make&#39;</span>] = array(</div>
<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;Drush Make overview with examples&#39;</span>,</div>
<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    <span class="stringliteral">&#39;hidden&#39;</span> =&gt; TRUE,</div>
<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    <span class="stringliteral">&#39;topic&#39;</span> =&gt; TRUE,</div>
<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;    <span class="stringliteral">&#39;bootstrap&#39;</span> =&gt; <a class="code" href="lib_2Drush_2Boot_2bootstrap_8inc.html#aaa7e693dd78d632c3d0f5baa3ba2d200">DRUSH_BOOTSTRAP_DRUSH</a>,</div>
<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    <span class="stringliteral">&#39;callback&#39;</span> =&gt; <span class="stringliteral">&#39;drush_print_file&#39;</span>,</div>
<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    <span class="stringliteral">&#39;callback arguments&#39;</span> =&gt; array($docs_dir . <span class="stringliteral">&#39;/docs/make.txt&#39;</span>),</div>
<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;  );</div>
<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;  $items[<span class="stringliteral">&#39;docs-make-example&#39;</span>] = array(</div>
<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;Drush Make example makefile&#39;</span>,</div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    <span class="stringliteral">&#39;hidden&#39;</span> =&gt; TRUE,</div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    <span class="stringliteral">&#39;topic&#39;</span> =&gt; TRUE,</div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    <span class="stringliteral">&#39;bootstrap&#39;</span> =&gt; <a class="code" href="lib_2Drush_2Boot_2bootstrap_8inc.html#aaa7e693dd78d632c3d0f5baa3ba2d200">DRUSH_BOOTSTRAP_DRUSH</a>,</div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    <span class="stringliteral">&#39;callback&#39;</span> =&gt; <span class="stringliteral">&#39;drush_print_file&#39;</span>,</div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    <span class="stringliteral">&#39;callback arguments&#39;</span> =&gt; array($docs_dir . <span class="stringliteral">&#39;/examples/example.make&#39;</span>),</div>
<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;  );</div>
<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;  <span class="keywordflow">return</span> $items;</div>
<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;}</div>
<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;<span class="comment"> * Implements hook_drush_help().</span></div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00153"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#a29ad98dc75f44759be40f5c803d6df3a">  153</a></span>&#160;<span class="keyword">function</span> <a class="code" href="make_8drush_8inc.html#a29ad98dc75f44759be40f5c803d6df3a">make_drush_help</a>($section) {</div>
<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;  <span class="keywordflow">switch</span> ($section) {</div>
<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;    <span class="keywordflow">case</span> <span class="stringliteral">&#39;drush:make&#39;</span>:</div>
<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;      <span class="keywordflow">return</span> <span class="stringliteral">&#39;Turns a makefile into a Drupal codebase. For a full description of options and makefile syntax, see docs/make.txt and examples/example.make.&#39;</span>;</div>
<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    <span class="keywordflow">case</span> <span class="stringliteral">&#39;drush:make-generate&#39;</span>:</div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;      <span class="keywordflow">return</span> <span class="stringliteral">&#39;Generate a makefile from the current Drupal site, specifying project version numbers unless not known or otherwise specified. Unversioned projects will be interpreted later by drush make as &quot;most recent stable release&quot;&#39;</span>;</div>
<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;  }</div>
<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;}</div>
<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;<span class="comment"> * Command argument complete callback.</span></div>
<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;<span class="comment"> * @return array</span></div>
<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;<span class="comment"> *   Strong glob of files to complete on.</span></div>
<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00168"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#a52b2fdb12c49439bcd31dce405667803">  168</a></span>&#160;<span class="keyword">function</span> <a class="code" href="make_8drush_8inc.html#a52b2fdb12c49439bcd31dce405667803">make_make_complete</a>() {</div>
<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;  <span class="keywordflow">return</span> array(</div>
<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    <span class="stringliteral">&#39;files&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;      <span class="stringliteral">&#39;directories&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;        <span class="stringliteral">&#39;pattern&#39;</span> =&gt; <span class="charliteral">&#39;*&#39;</span>,</div>
<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;        <span class="stringliteral">&#39;flags&#39;</span> =&gt; GLOB_ONLYDIR,</div>
<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;      ),</div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;      <span class="stringliteral">&#39;make&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;        <span class="stringliteral">&#39;pattern&#39;</span> =&gt; <span class="stringliteral">&#39;*.make&#39;</span>,</div>
<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;      ),</div>
<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    ),</div>
<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;  );</div>
<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;}</div>
<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;<span class="comment"> * Drush callback; make based on the makefile.</span></div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00185"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#a64e3d2b9948951c3f141802f41658359">  185</a></span>&#160;<span class="keyword">function</span> <a class="code" href="make_8drush_8inc.html#a64e3d2b9948951c3f141802f41658359">drush_make</a>($makefile = NULL, $build_path = NULL) {</div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;  <span class="comment">// If --version option is supplied, print it and bail.</span></div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;version&#39;</span>, FALSE)) {</div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    <a class="code" href="group__outputfunctions.html#ga63acbb94925d6d2693e235e966bba740">drush_print</a>(<a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&#39;Drush make API version !version&#39;</span>, array(<span class="stringliteral">&#39;!version&#39;</span> =&gt; <a class="code" href="make_8drush_8inc.html#acb28b89b64f706ac1e26374bd68bf66c">MAKE_API</a>)));</div>
<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;    <a class="code" href="group__outputfunctions.html#ga03664ee5326159c3f8e6c97aa93c7981">drush_print_pipe</a>(<a class="code" href="make_8drush_8inc.html#acb28b89b64f706ac1e26374bd68bf66c">MAKE_API</a>);</div>
<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;  }</div>
<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;</div>
<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;no-build&#39;</span>, FALSE) &amp;&amp; !($build_path = <a class="code" href="make_8drush_8inc.html#ae117ecd8db6105b9778e7c6f5f74e40e">make_build_path</a>($build_path))) {</div>
<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;    <span class="keywordflow">return</span> FALSE;</div>
<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;  }</div>
<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;</div>
<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;  $info = <a class="code" href="make_8utilities_8inc.html#acb37b7739b2d486d1920a413676c42bf">_make_parse_info_file</a>($makefile);</div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;</div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;no-build&#39;</span>, FALSE)) {</div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;    <a class="code" href="group__logging.html#gad820f489a93518301794ada4ff7816b6">drush_log</a>(<a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&#39;Beginning to build !makefile.&#39;</span>, array(<span class="stringliteral">&#39;!makefile&#39;</span> =&gt; $makefile)), <span class="stringliteral">&#39;ok&#39;</span>);</div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;</div>
<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;    $make_dir = realpath(dirname($makefile));</div>
<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    $core_version = str_replace(<span class="stringliteral">&#39;.x&#39;</span>, <span class="stringliteral">&#39;&#39;</span>, $info[<span class="stringliteral">&#39;core&#39;</span>][0]);</div>
<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    $sitewide = <a class="code" href="includes_2environment_8inc.html#a6f651473a044c97c2a17e63e6455d08e">drush_drupal_sitewide_directory</a>($core_version);</div>
<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="make_8drush_8inc.html#a7f6c382e030da87fc401f133edd22f3b">make_projects</a>(FALSE, <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;contrib-destination&#39;</span>, $sitewide), $info, $build_path, $make_dir)) {</div>
<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;      <a class="code" href="make_8drush_8inc.html#ae70f3ae23a4dcbb5f8816636d2adb4c2">make_libraries</a>(FALSE, <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;contrib-destination&#39;</span>, $sitewide), $info, $build_path, $make_dir);</div>
<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;</div>
<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;      <span class="keywordflow">if</span> (<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;prepare-install&#39;</span>)) {</div>
<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;        <a class="code" href="make_8utilities_8inc.html#a7ac27f598c36208652191f40f08c2332">make_prepare_install</a>($build_path);</div>
<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;      }</div>
<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;    }</div>
<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;  }</div>
<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;</div>
<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;lock&#39;</span>, FALSE)) {</div>
<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;    <a class="code" href="generate_8contents_8make_8inc.html#ae22e86e5816853f66923925aa90164e1">make_generate_from_makefile</a>(<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;lock&#39;</span>), $makefile);</div>
<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;  }</div>
<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;</div>
<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;lock-update&#39;</span>, FALSE)) {</div>
<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;    <a class="code" href="generate_8contents_8make_8inc.html#ae22e86e5816853f66923925aa90164e1">make_generate_from_makefile</a>(<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;lock-update&#39;</span>), $makefile);</div>
<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;  }</div>
<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;</div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;  <span class="keywordflow">return</span> $info;</div>
<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;}</div>
<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;<span class="comment"> * Drush callback: hidden file to process an individual project.</span></div>
<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00228"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#ad9b2f2e15282d634a58229f30d819bde">  228</a></span>&#160;<span class="keyword">function</span> <a class="code" href="make_8drush_8inc.html#ad9b2f2e15282d634a58229f30d819bde">drush_make_process</a>($directory) {</div>
<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;  <span class="comment">// Set the temporary directory.</span></div>
<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;  <a class="code" href="make_8utilities_8inc.html#ab3c72a6d8be958f40fc0cbcca29a183b">make_tmp</a>(TRUE, $directory);</div>
<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;  $projects = <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;projects&#39;</span>, array());</div>
<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;</div>
<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;  $manifest = <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;manifest&#39;</span>, array());</div>
<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;</div>
<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;  <span class="keywordflow">foreach</span> ($projects as $project) {</div>
<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;    <span class="keywordflow">if</span> ($instance = <a class="code" href="classDrushMakeProject.html#afedb73c8a81625f02d8c25fb81df295d">DrushMakeProject::getInstance</a>($project[<span class="stringliteral">&#39;type&#39;</span>], $project)) {</div>
<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;      $instance-&gt;setManifest($manifest);</div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;      $instance-&gt;make();</div>
<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;    }</div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;    <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;      <a class="code" href="make_8utilities_8inc.html#aa2a78298291b42502718822ed5b59969">make_error</a>(<span class="stringliteral">&#39;PROJECT-TYPE&#39;</span>, <a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&#39;Non-existent project type %type on project %project.&#39;</span>, array(<span class="stringliteral">&#39;%type&#39;</span> =&gt; $project[<span class="stringliteral">&#39;type&#39;</span>], <span class="stringliteral">&#39;%project&#39;</span> =&gt; $project[<span class="stringliteral">&#39;name&#39;</span>])));</div>
<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    }</div>
<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;  }</div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;}</div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;<span class="comment"> * Implements drush_hook_post_COMMAND() for the make command.</span></div>
<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00249"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#adb3866751fd19344b00c069793f46322">  249</a></span>&#160;<span class="keyword">function</span> <a class="code" href="make_8drush_8inc.html#adb3866751fd19344b00c069793f46322">drush_make_post_make</a>($makefile = NULL, $build_path = NULL) {</div>
<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;version&#39;</span>) || <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;no-build&#39;</span>)) {</div>
<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;  }</div>
<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;  <span class="keywordflow">if</span> (!($build_path = <a class="code" href="make_8drush_8inc.html#ae117ecd8db6105b9778e7c6f5f74e40e">make_build_path</a>($build_path))) {</div>
<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;  }</div>
<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;</div>
<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;  <span class="keywordflow">if</span> ($option = <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;md5&#39;</span>)) {</div>
<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    $md5 = <a class="code" href="make_8utilities_8inc.html#abc341fc62b92a8eef00bf92aa24a90df">make_md5</a>();</div>
<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    <span class="keywordflow">if</span> ($option === <span class="stringliteral">&#39;print&#39;</span>) {</div>
<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;      <a class="code" href="group__outputfunctions.html#ga63acbb94925d6d2693e235e966bba740">drush_print</a>($md5);</div>
<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;    }</div>
<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;    <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;      <a class="code" href="group__logging.html#gad820f489a93518301794ada4ff7816b6">drush_log</a>(<a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&#39;Build hash: %md5&#39;</span>, array(<span class="stringliteral">&#39;%md5&#39;</span> =&gt; $md5)), <span class="stringliteral">&#39;ok&#39;</span>);</div>
<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;    }</div>
<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;  }</div>
<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;</div>
<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;  <span class="comment">// Only take final build steps if not in testing mode.</span></div>
<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;test&#39;</span>)) {</div>
<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;tar&#39;</span>)) {</div>
<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;      <a class="code" href="make_8utilities_8inc.html#ae5b2297055f24062509236670e55dc2a">make_tar</a>($build_path);</div>
<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;    }</div>
<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;    <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;      <a class="code" href="make_8drush_8inc.html#ae5eb2a2403d96afcef3d5f85ee7ae284">make_move_build</a>($build_path);</div>
<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;    }</div>
<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;  }</div>
<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;</div>
<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;  <a class="code" href="make_8utilities_8inc.html#ae13ed28f360182a4df0620a68d251fd6">make_clean_tmp</a>();</div>
<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;}</div>
<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;<span class="comment"> * Gather additional data on all projects specified in the make file.</span></div>
<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00283"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#ac8b7447fddc5e9edc48acd98aa680fe5">  283</a></span>&#160;<span class="keyword">function</span> <a class="code" href="make_8drush_8inc.html#ac8b7447fddc5e9edc48acd98aa680fe5">make_prepare_projects</a>($recursion, $info, $contrib_destination = <span class="stringliteral">&#39;&#39;</span>, $build_path = <span class="stringliteral">&#39;&#39;</span>, $make_dir = <span class="stringliteral">&#39;&#39;</span>) {</div>
<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;  $projects = array();</div>
<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;  <span class="keywordflow">if</span> (empty($info[<span class="stringliteral">&#39;projects&#39;</span>])) {</div>
<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;no-core&#39;</span>) || $recursion) {</div>
<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;      <span class="keywordflow">return</span> TRUE;</div>
<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;    }</div>
<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;    <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;      <a class="code" href="group__errorhandling.html#ga23fe9e1e8c1e5ade39256106044b6da4">drush_set_error</a>(<span class="stringliteral">&#39;MAKE_NO_CORE&#39;</span>, <a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&#39;No core project specified.&#39;</span>));</div>
<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;      <span class="keywordflow">return</span> FALSE;</div>
<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;    }</div>
<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;  }</div>
<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;  $ignore_checksums = <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;ignore-checksums&#39;</span>);</div>
<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;  $translations = array();</div>
<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;  <span class="keywordflow">if</span> (isset($info[<span class="stringliteral">&#39;translations&#39;</span>])) {</div>
<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;    $translations = $info[<span class="stringliteral">&#39;translations&#39;</span>];</div>
<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;  }</div>
<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;  <span class="keywordflow">if</span> ($arg_translations = <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;translations&#39;</span>, FALSE)) {</div>
<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;    $translations = array_merge(explode(<span class="charliteral">&#39;,&#39;</span>, $arg_translations), $translations);</div>
<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;  }</div>
<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;  <span class="keywordflow">foreach</span> ($info[<span class="stringliteral">&#39;projects&#39;</span>] as $key =&gt; $project) {</div>
<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    $md5 = <span class="stringliteral">&#39;&#39;</span>;</div>
<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;    <span class="keywordflow">if</span> (isset($project[<span class="stringliteral">&#39;md5&#39;</span>])) {</div>
<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;      $md5 = $project[<span class="stringliteral">&#39;md5&#39;</span>];</div>
<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;    }</div>
<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;    <span class="comment">// Merge the known data onto the project info.</span></div>
<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;    $project += array(</div>
<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;      <span class="stringliteral">&#39;name&#39;</span>                =&gt; $key,</div>
<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;      <span class="stringliteral">&#39;core&#39;</span>                =&gt; $info[<span class="stringliteral">&#39;core&#39;</span>],</div>
<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;      <span class="stringliteral">&#39;translations&#39;</span>        =&gt; $translations,</div>
<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;      <span class="stringliteral">&#39;build_path&#39;</span>          =&gt; $build_path,</div>
<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;      <span class="stringliteral">&#39;contrib_destination&#39;</span> =&gt; $contrib_destination,</div>
<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;      <span class="stringliteral">&#39;version&#39;</span>             =&gt; <span class="stringliteral">&#39;&#39;</span>,</div>
<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;      <span class="stringliteral">&#39;location&#39;</span>            =&gt; <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;make-update-default-url&#39;</span>, RELEASE_INFO_DEFAULT_URL),</div>
<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;      <span class="stringliteral">&#39;subdir&#39;</span>              =&gt; <span class="stringliteral">&#39;&#39;</span>,</div>
<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;      <span class="stringliteral">&#39;directory_name&#39;</span>      =&gt; <span class="stringliteral">&#39;&#39;</span>,</div>
<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;      <span class="stringliteral">&#39;make_directory&#39;</span>      =&gt; $make_dir,</div>
<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;      <span class="stringliteral">&#39;options&#39;</span>             =&gt; array(),</div>
<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;    );</div>
<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;    <span class="comment">// If download components are specified, but not the download</span></div>
<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;    <span class="comment">// type, default to git.</span></div>
<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;    <span class="keywordflow">if</span> (isset($project[<span class="stringliteral">&#39;download&#39;</span>]) &amp;&amp; !isset($project[<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;type&#39;</span>])) {</div>
<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;      $project[<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;type&#39;</span>] = <span class="stringliteral">&#39;git&#39;</span>;</div>
<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;    }</div>
<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;    <span class="keywordflow">if</span> (!isset($project[<span class="stringliteral">&#39;l10n_url&#39;</span>]) &amp;&amp; ($project[<span class="stringliteral">&#39;location&#39;</span>] == RELEASE_INFO_DEFAULT_URL)) {</div>
<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;      $project[<span class="stringliteral">&#39;l10n_url&#39;</span>] = <a class="code" href="make_8drush_8inc.html#affb301a79bb307bb27a39cf6f184dc91">MAKE_DEFAULT_L10N_SERVER</a>;</div>
<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;    }</div>
<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;</div>
<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;    <span class="comment">// For convenience: define $request to be compatible with release_info</span></div>
<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;    <span class="comment">// engine.</span></div>
<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;    <span class="comment">// TODO: refactor to enforce &#39;make&#39; to internally work with release_info</span></div>
<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;    <span class="comment">// keys.</span></div>
<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;    $request = <a class="code" href="make_8drush_8inc.html#a417d71dedd721df1232702d672ecde59">make_prepare_request</a>($project);</div>
<div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;</div>
<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;    <span class="keywordflow">if</span> ($project[<span class="stringliteral">&#39;location&#39;</span>] != RELEASE_INFO_DEFAULT_URL &amp;&amp; !isset($project[<span class="stringliteral">&#39;type&#39;</span>])) {</div>
<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;      <span class="comment">// Set the cache option based on our &#39;--no-cache&#39; option.</span></div>
<div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;      $cache_before = <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;cache&#39;</span>);</div>
<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;      <span class="keywordflow">if</span> (!<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;no-cache&#39;</span>, FALSE)) {</div>
<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;        <a class="code" href="context_8inc.html#aa4b55e2f6174c8b6efaa8f23a0f9e0af">drush_set_option</a>(<span class="stringliteral">&#39;cache&#39;</span>, TRUE);</div>
<div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;      }</div>
<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;      $project_type = <a class="code" href="updatexml_8inc.html#a1273e7da7133ada1987f4dde8859aad1">release_info_check_project</a>($request, <span class="stringliteral">&#39;core&#39;</span>);</div>
<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;      <span class="comment">// Restore the previous &#39;--cache&#39; option value.</span></div>
<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;      <a class="code" href="context_8inc.html#aa4b55e2f6174c8b6efaa8f23a0f9e0af">drush_set_option</a>(<span class="stringliteral">&#39;cache&#39;</span>, $cache_before);</div>
<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;      $project[<span class="stringliteral">&#39;download_type&#39;</span>] = ($project_type ? <span class="stringliteral">&#39;core&#39;</span> : <span class="stringliteral">&#39;contrib&#39;</span>);</div>
<div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;    }</div>
<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;    elseif (!empty($project[<span class="stringliteral">&#39;type&#39;</span>])) {</div>
<div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;      $project[<span class="stringliteral">&#39;download_type&#39;</span>] = ($project[<span class="stringliteral">&#39;type&#39;</span>] == <span class="stringliteral">&#39;core&#39;</span> ? <span class="stringliteral">&#39;core&#39;</span> : <span class="stringliteral">&#39;contrib&#39;</span>);</div>
<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;    }</div>
<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;    <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;      $project[<span class="stringliteral">&#39;download_type&#39;</span>] = ($project[<span class="stringliteral">&#39;name&#39;</span>] == <span class="stringliteral">&#39;drupal&#39;</span> ? <span class="stringliteral">&#39;core&#39;</span> : <span class="stringliteral">&#39;contrib&#39;</span>);</div>
<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;    }</div>
<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;    $projects[$project[<span class="stringliteral">&#39;download_type&#39;</span>]][$project[<span class="stringliteral">&#39;name&#39;</span>]] = $project;</div>
<div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;  }</div>
<div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;</div>
<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;  $cores = !empty($projects[<span class="stringliteral">&#39;core&#39;</span>]) ? count($projects[<span class="stringliteral">&#39;core&#39;</span>]) : 0;</div>
<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;</div>
<div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;no-core&#39;</span>)) {</div>
<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;    unset($projects[<span class="stringliteral">&#39;core&#39;</span>]);</div>
<div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;  }</div>
<div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;  elseif ($cores == 0 &amp;&amp; !$recursion) {</div>
<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;    <a class="code" href="group__errorhandling.html#ga23fe9e1e8c1e5ade39256106044b6da4">drush_set_error</a>(<span class="stringliteral">&#39;MAKE_NO_CORE&#39;</span>, <a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&#39;No core project specified.&#39;</span>));</div>
<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;    <span class="keywordflow">return</span> FALSE;</div>
<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;  }</div>
<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;  elseif ($cores == 1 &amp;&amp; $recursion) {</div>
<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;    unset($projects[<span class="stringliteral">&#39;core&#39;</span>]);</div>
<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;  }</div>
<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;  elseif ($cores &gt; 1) {</div>
<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;    <a class="code" href="group__errorhandling.html#ga23fe9e1e8c1e5ade39256106044b6da4">drush_set_error</a>(<span class="stringliteral">&#39;MAKE_MULTIPLE_CORES&#39;</span>, <a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&#39;More than one core project specified.&#39;</span>));</div>
<div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;    <span class="keywordflow">return</span> FALSE;</div>
<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;  }</div>
<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;</div>
<div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;  <span class="keywordflow">foreach</span> ($projects as $type =&gt; $type_projects) {</div>
<div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;    <span class="keywordflow">foreach</span> ($type_projects as $project) {</div>
<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;      <span class="keywordflow">if</span> (<a class="code" href="make_8drush_8inc.html#a74cf0e56045632e43fcc16ce438d18e7">make_project_needs_release_info</a>($project)) {</div>
<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;        <span class="comment">// For convenience: define $request to be compatible with release_info</span></div>
<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;        <span class="comment">// engine.</span></div>
<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;        <span class="comment">// TODO: refactor to enforce &#39;make&#39; to internally work with release_info</span></div>
<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;        <span class="comment">// keys.</span></div>
<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;        $request = <a class="code" href="make_8drush_8inc.html#a417d71dedd721df1232702d672ecde59">make_prepare_request</a>($project, $type);</div>
<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;        <span class="comment">// Set the cache option based on our &#39;--no-cache&#39; option.</span></div>
<div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;        $cache_before = <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;cache&#39;</span>);</div>
<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;        <span class="keywordflow">if</span> (!<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;no-cache&#39;</span>, FALSE)) {</div>
<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;          <a class="code" href="context_8inc.html#aa4b55e2f6174c8b6efaa8f23a0f9e0af">drush_set_option</a>(<span class="stringliteral">&#39;cache&#39;</span>, TRUE);</div>
<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;        }</div>
<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;        $release = <a class="code" href="updatexml_8inc.html#a7fe4c8cdddd122b232c8daf5484444f9">release_info_fetch</a>($request, <span class="stringliteral">&#39;&#39;</span>, <span class="stringliteral">&#39;ignore&#39;</span>);</div>
<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;        <span class="keywordflow">if</span> ($release === FALSE) {</div>
<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;          <span class="keywordflow">return</span> FALSE;</div>
<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;        }</div>
<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;        <span class="comment">// Restore the previous &#39;--cache&#39; option value.</span></div>
<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;        <a class="code" href="context_8inc.html#aa4b55e2f6174c8b6efaa8f23a0f9e0af">drush_set_option</a>(<span class="stringliteral">&#39;cache&#39;</span>, $cache_before);</div>
<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;        <span class="keywordflow">if</span> (!isset($project[<span class="stringliteral">&#39;type&#39;</span>])) {</div>
<div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;          <span class="comment">// Translate release_info key for project_type to drush make.</span></div>
<div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;          $project[<span class="stringliteral">&#39;type&#39;</span>] = $request[<span class="stringliteral">&#39;project_type&#39;</span>];</div>
<div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;        }</div>
<div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;        <span class="keywordflow">if</span> (!isset($project[<span class="stringliteral">&#39;download&#39;</span>])) {</div>
<div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;          $project[<span class="stringliteral">&#39;download&#39;</span>] = array(</div>
<div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;            <span class="stringliteral">&#39;type&#39;</span> =&gt; <span class="stringliteral">&#39;pm&#39;</span>,</div>
<div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;            <span class="stringliteral">&#39;full_version&#39;</span> =&gt; $release[<span class="stringliteral">&#39;version&#39;</span>],</div>
<div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;            <span class="stringliteral">&#39;download_link&#39;</span> =&gt; $release[<span class="stringliteral">&#39;download_link&#39;</span>],</div>
<div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;            <span class="stringliteral">&#39;status url&#39;</span> =&gt; $request[<span class="stringliteral">&#39;status url&#39;</span>],</div>
<div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;          );</div>
<div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;        }</div>
<div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;      }</div>
<div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;      <span class="keywordflow">if</span> (!empty($md5)) {</div>
<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;        $project[<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;md5&#39;</span>] = $md5;</div>
<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;      }</div>
<div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;      <span class="keywordflow">if</span> ($ignore_checksums) {</div>
<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;        unset($project[<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;md5&#39;</span>]);</div>
<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;      }</div>
<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;      $projects[($project[<span class="stringliteral">&#39;type&#39;</span>] == <span class="stringliteral">&#39;core&#39;</span> ? <span class="stringliteral">&#39;core&#39;</span> : <span class="stringliteral">&#39;contrib&#39;</span>)][$project[<span class="stringliteral">&#39;name&#39;</span>]] = $project;</div>
<div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;    }</div>
<div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;  }</div>
<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;  <span class="keywordflow">if</span> (!$recursion) {</div>
<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;    $projects[<span class="stringliteral">&#39;contrib&#39;</span>] = isset($projects[<span class="stringliteral">&#39;contrib&#39;</span>]) ? $projects[<span class="stringliteral">&#39;contrib&#39;</span>] : array();</div>
<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;    <a class="code" href="context_8inc.html#aa4b55e2f6174c8b6efaa8f23a0f9e0af">drush_set_option</a>(<span class="stringliteral">&#39;DRUSH_MAKE_PROJECTS&#39;</span>, array_merge($projects[<span class="stringliteral">&#39;core&#39;</span>], $projects[<span class="stringliteral">&#39;contrib&#39;</span>]));</div>
<div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;  }</div>
<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;  <span class="keywordflow">return</span> $projects;</div>
<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;}</div>
<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;<span class="comment"> * Process all projects specified in the make file.</span></div>
<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00424"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#a7f6c382e030da87fc401f133edd22f3b">  424</a></span>&#160;<span class="keyword">function</span> <a class="code" href="make_8drush_8inc.html#a7f6c382e030da87fc401f133edd22f3b">make_projects</a>($recursion, $contrib_destination, $info, $build_path, $make_dir) {</div>
<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;  $projects = <a class="code" href="make_8drush_8inc.html#ac8b7447fddc5e9edc48acd98aa680fe5">make_prepare_projects</a>($recursion, $info, $contrib_destination, $build_path, $make_dir);</div>
<div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;  <span class="comment">// Core is built in place, rather than using make-process.</span></div>
<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;  <span class="keywordflow">if</span> (isset($projects[<span class="stringliteral">&#39;core&#39;</span>])) {</div>
<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;    <span class="keywordflow">foreach</span> ($projects[<span class="stringliteral">&#39;core&#39;</span>] as $project) {</div>
<div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;      <span class="keywordflow">if</span> ($instance = <a class="code" href="classDrushMakeProject.html#afedb73c8a81625f02d8c25fb81df295d">DrushMakeProject::getInstance</a>($project[<span class="stringliteral">&#39;type&#39;</span>], $project)) {</div>
<div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;        $project = $instance;</div>
<div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;      }</div>
<div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;      <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;        <a class="code" href="make_8utilities_8inc.html#aa2a78298291b42502718822ed5b59969">make_error</a>(<span class="stringliteral">&#39;PROJECT-TYPE&#39;</span>, <a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&#39;Non-existent project type %type on project %project.&#39;</span>, array(<span class="stringliteral">&#39;%type&#39;</span> =&gt; $project[<span class="stringliteral">&#39;type&#39;</span>], <span class="stringliteral">&#39;%project&#39;</span> =&gt; $project[<span class="stringliteral">&#39;name&#39;</span>])));</div>
<div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;      }</div>
<div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;      <span class="comment">// Set the cache option based on our &#39;--no-cache&#39; option.</span></div>
<div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;      $cache_before = <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;cache&#39;</span>);</div>
<div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;      <span class="keywordflow">if</span> (!<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;no-cache&#39;</span>, FALSE)) {</div>
<div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;        <a class="code" href="context_8inc.html#aa4b55e2f6174c8b6efaa8f23a0f9e0af">drush_set_option</a>(<span class="stringliteral">&#39;cache&#39;</span>, TRUE);</div>
<div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;      }</div>
<div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;      $project-&gt;make();</div>
<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;      <span class="comment">// Restore the previous &#39;--cache&#39; option value.</span></div>
<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;      <a class="code" href="context_8inc.html#aa4b55e2f6174c8b6efaa8f23a0f9e0af">drush_set_option</a>(<span class="stringliteral">&#39;cache&#39;</span>, $cache_before);</div>
<div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;    }</div>
<div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;  }</div>
<div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;</div>
<div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;  <span class="comment">// Process all projects concurrently using make-process.</span></div>
<div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;  <span class="keywordflow">if</span> (isset($projects[<span class="stringliteral">&#39;contrib&#39;</span>])) {</div>
<div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;    $concurrency = <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;concurrency&#39;</span>, 1);</div>
<div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;    <span class="comment">// Generate $concurrency sub-processes to do the actual work.</span></div>
<div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;    $invocations = array();</div>
<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;    $thread = 0;</div>
<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;    <span class="keywordflow">foreach</span> ($projects[<span class="stringliteral">&#39;contrib&#39;</span>] as $project) {</div>
<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;      $thread = ++$thread % $concurrency;</div>
<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;      <span class="comment">// Ensure that we&#39;ve set this sub-process up.</span></div>
<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;      <span class="keywordflow">if</span> (!isset($invocations[$thread])) {</div>
<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;        $invocations[$thread] = array(</div>
<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;          <span class="stringliteral">&#39;args&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;            <a class="code" href="make_8utilities_8inc.html#ab3c72a6d8be958f40fc0cbcca29a183b">make_tmp</a>(),</div>
<div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;          ),</div>
<div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;          <span class="stringliteral">&#39;options&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;            <span class="stringliteral">&#39;projects&#39;</span> =&gt; array(),</div>
<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;          ),</div>
<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;          <span class="stringliteral">&#39;site&#39;</span> =&gt; array(),</div>
<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;        );</div>
<div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;      }</div>
<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;      <span class="comment">// Add the project to this sub-process.</span></div>
<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;      $invocations[$thread][<span class="stringliteral">&#39;options&#39;</span>][<span class="stringliteral">&#39;projects&#39;</span>][] = $project;</div>
<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;      <span class="comment">// Add the manifest so recursive downloads do not override projects.</span></div>
<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;      $invocations[$thread][<span class="stringliteral">&#39;options&#39;</span>][<span class="stringliteral">&#39;manifest&#39;</span>] = array_keys($projects[<span class="stringliteral">&#39;contrib&#39;</span>]);</div>
<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;    }</div>
<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;    <span class="keywordflow">if</span> (!empty($invocations)) {</div>
<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;      <span class="comment">// Backend options.</span></div>
<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;      $backend_options = array(</div>
<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;        <span class="stringliteral">&#39;concurrency&#39;</span> =&gt; $concurrency,</div>
<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;        <span class="stringliteral">&#39;method&#39;</span> =&gt; <span class="stringliteral">&#39;POST&#39;</span>,</div>
<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;      );</div>
<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;</div>
<div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;      $common_options = <a class="code" href="group__dispatching.html#ga9b1a98376983ee529fc868ef4280b12d">drush_redispatch_get_options</a>();</div>
<div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;      <span class="comment">// Merge in stdin options since we process makefiles recursively. See http://drupal.org/node/1510180.</span></div>
<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;      $common_options = array_merge($common_options, <a class="code" href="context_8inc.html#ad25559f8d7d753f636fbeac347c29fc5">drush_get_context</a>(<span class="stringliteral">&#39;stdin&#39;</span>));</div>
<div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;      <span class="comment">// Package handler should use &#39;wget&#39;.</span></div>
<div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;      $common_options[<span class="stringliteral">&#39;package-handler&#39;</span>] = <span class="stringliteral">&#39;wget&#39;</span>;</div>
<div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;</div>
<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;      <span class="comment">// Avoid any prompts from CLI.</span></div>
<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;      $common_options[<span class="stringliteral">&#39;yes&#39;</span>] = TRUE;</div>
<div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;</div>
<div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;      <span class="comment">// Use cache unless explicitly turned off.</span></div>
<div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;      <span class="keywordflow">if</span> (!<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;no-cache&#39;</span>, FALSE)) {</div>
<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;        $common_options[<span class="stringliteral">&#39;cache&#39;</span>] = TRUE;</div>
<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;      }</div>
<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;      <span class="comment">// Unless --verbose or --debug are passed, quiter backend output.</span></div>
<div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;      <span class="keywordflow">if</span> (empty($common_options[<span class="stringliteral">&#39;verbose&#39;</span>]) &amp;&amp; empty($common_options[<span class="stringliteral">&#39;debug&#39;</span>])) {</div>
<div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;        $backend_options[<span class="stringliteral">&#39;#output-label&#39;</span>] = FALSE;</div>
<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;        $backend_options[<span class="stringliteral">&#39;integrate&#39;</span>] = TRUE;</div>
<div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;      }</div>
<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;      <a class="code" href="backend_8inc.html#a7852d5448cd4ee3a2082eccd24d690e7">drush_backend_invoke_concurrent</a>($invocations, $common_options, $backend_options, <span class="stringliteral">&#39;make-process&#39;</span>, <span class="stringliteral">&#39;@none&#39;</span>);</div>
<div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;    }</div>
<div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;  }</div>
<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;  <span class="keywordflow">return</span> TRUE;</div>
<div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;}</div>
<div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;<span class="comment"> * Gather additional data on all libraries specified in the make file.</span></div>
<div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00505"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#a0c50fe5a34ad09671d175614fc27e485">  505</a></span>&#160;<span class="keyword">function</span> <a class="code" href="make_8drush_8inc.html#a0c50fe5a34ad09671d175614fc27e485">make_prepare_libraries</a>($recursion, $info, $contrib_destination = <span class="stringliteral">&#39;&#39;</span>, $build_path = <span class="stringliteral">&#39;&#39;</span>, $make_dir = <span class="stringliteral">&#39;&#39;</span>) {</div>
<div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;  <span class="keywordflow">if</span> (empty($info[<span class="stringliteral">&#39;libraries&#39;</span>])) {</div>
<div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;  }</div>
<div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;  $ignore_checksums = <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;ignore-checksums&#39;</span>);</div>
<div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;  $libraries = array();</div>
<div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;  <span class="keywordflow">foreach</span> ($info[<span class="stringliteral">&#39;libraries&#39;</span>] as $key =&gt; $library) {</div>
<div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;    <span class="keywordflow">if</span> (!is_string($key) || !is_array($library)) {</div>
<div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;      <span class="comment">// TODO Print a prettier message.</span></div>
<div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;      <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;    }</div>
<div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;    <span class="comment">// Merge the known data onto the library info.</span></div>
<div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;    $library += array(</div>
<div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;      <span class="stringliteral">&#39;name&#39;</span>                =&gt; $key,</div>
<div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;      <span class="stringliteral">&#39;core&#39;</span>                =&gt; $info[<span class="stringliteral">&#39;core&#39;</span>],</div>
<div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;      <span class="stringliteral">&#39;build_path&#39;</span>          =&gt; $build_path,</div>
<div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;      <span class="stringliteral">&#39;contrib_destination&#39;</span> =&gt; $contrib_destination,</div>
<div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;      <span class="stringliteral">&#39;subdir&#39;</span>              =&gt; <span class="stringliteral">&#39;&#39;</span>,</div>
<div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;      <span class="stringliteral">&#39;directory_name&#39;</span>      =&gt; $key,</div>
<div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;      <span class="stringliteral">&#39;make_directory&#39;</span>      =&gt; $make_dir,</div>
<div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;    );</div>
<div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;    <span class="keywordflow">if</span> ($ignore_checksums) {</div>
<div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;      unset($library[<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;md5&#39;</span>]);</div>
<div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;    }</div>
<div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;    $libraries[$key] = $library;</div>
<div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;  }</div>
<div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;  <span class="keywordflow">if</span> (!$recursion) {</div>
<div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;    <a class="code" href="context_8inc.html#aa4b55e2f6174c8b6efaa8f23a0f9e0af">drush_set_option</a>(<span class="stringliteral">&#39;DRUSH_MAKE_LIBRARIES&#39;</span>, $info[<span class="stringliteral">&#39;libraries&#39;</span>]);</div>
<div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;  }</div>
<div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;  <span class="keywordflow">return</span> $libraries;</div>
<div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;}</div>
<div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;<span class="comment"> * Process all libraries specified in the make file.</span></div>
<div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00540"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#ae70f3ae23a4dcbb5f8816636d2adb4c2">  540</a></span>&#160;<span class="keyword">function</span> <a class="code" href="make_8drush_8inc.html#ae70f3ae23a4dcbb5f8816636d2adb4c2">make_libraries</a>($recursion, $contrib_destination, $info, $build_path, $make_dir) {</div>
<div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;  $libraries = <a class="code" href="make_8drush_8inc.html#a0c50fe5a34ad09671d175614fc27e485">make_prepare_libraries</a>($recursion, $info, $contrib_destination, $build_path, $make_dir);</div>
<div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;  <span class="keywordflow">if</span> (empty($libraries)) {</div>
<div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;  }</div>
<div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;  <span class="keywordflow">foreach</span> ($libraries as $key =&gt; $library) {</div>
<div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;    $class = <a class="code" href="classDrushMakeProject.html#afedb73c8a81625f02d8c25fb81df295d">DrushMakeProject::getInstance</a>(<span class="stringliteral">&#39;library&#39;</span>, $library);</div>
<div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;    $class-&gt;make();</div>
<div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;  }</div>
<div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;}</div>
<div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;<span class="comment"> * The path where the final build will be placed.</span></div>
<div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00554"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#ae117ecd8db6105b9778e7c6f5f74e40e">  554</a></span>&#160;<span class="keyword">function</span> <a class="code" href="make_8drush_8inc.html#ae117ecd8db6105b9778e7c6f5f74e40e">make_build_path</a>($build_path) {</div>
<div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;  <span class="keyword">static</span> $saved_path;</div>
<div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;  <span class="keywordflow">if</span> (isset($saved_path)) {</div>
<div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;    <span class="keywordflow">return</span> $saved_path;</div>
<div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;  }</div>
<div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;</div>
<div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;  <span class="comment">// Determine the base of the build.</span></div>
<div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;tar&#39;</span>)) {</div>
<div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;    $build_path = dirname($build_path) . <span class="charliteral">&#39;/&#39;</span> . basename($build_path, <span class="stringliteral">&#39;.tar.gz&#39;</span>) . <span class="stringliteral">&#39;.tar.gz&#39;</span>;</div>
<div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;  }</div>
<div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;  elseif (isset($build_path) &amp;&amp; (!empty($build_path) || $build_path == <span class="charliteral">&#39;.&#39;</span>)) {</div>
<div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;    $build_path = rtrim($build_path, <span class="charliteral">&#39;/&#39;</span>);</div>
<div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;  }</div>
<div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;  <span class="comment">// Allow tests to run without a specified base path.</span></div>
<div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;  elseif (<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;test&#39;</span>) || <a class="code" href="group__userinput.html#gaa4169b83ff9dc4222af95d376b21268b">drush_confirm</a>(<a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&quot;Make new site in the current directory?&quot;</span>))) {</div>
<div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;    $build_path = <span class="charliteral">&#39;.&#39;</span>;</div>
<div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;  }</div>
<div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;  <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="group__errorhandling.html#ga366aaafdf8c774a58653c64a65b6d91c">drush_user_abort</a>(<a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&#39;Build aborted.&#39;</span>));</div>
<div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;  }</div>
<div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;  <span class="keywordflow">if</span> ($build_path != <span class="charliteral">&#39;.&#39;</span> &amp;&amp; file_exists($build_path)) {</div>
<div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="group__errorhandling.html#ga23fe9e1e8c1e5ade39256106044b6da4">drush_set_error</a>(<span class="stringliteral">&#39;MAKE_PATH_EXISTS&#39;</span>, <a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&#39;Base path %path already exists.&#39;</span>, array(<span class="stringliteral">&#39;%path&#39;</span> =&gt; $build_path)));</div>
<div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;  }</div>
<div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;  $saved_path = $build_path;</div>
<div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;  <span class="keywordflow">return</span> $build_path;</div>
<div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;}</div>
<div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;<span class="comment"> * Move the completed build into place.</span></div>
<div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00584"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#ae5eb2a2403d96afcef3d5f85ee7ae284">  584</a></span>&#160;<span class="keyword">function</span> <a class="code" href="make_8drush_8inc.html#ae5eb2a2403d96afcef3d5f85ee7ae284">make_move_build</a>($build_path) {</div>
<div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;  $tmp_path = <a class="code" href="make_8utilities_8inc.html#ab3c72a6d8be958f40fc0cbcca29a183b">make_tmp</a>();</div>
<div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;  $ret = TRUE;</div>
<div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;  <span class="keywordflow">if</span> ($build_path == <span class="charliteral">&#39;.&#39;</span>) {</div>
<div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;    $info = <a class="code" href="group__filesystemfunctions.html#ga1c545390a8890f6ea47385f79fbe2e82">drush_scan_directory</a>($tmp_path . DIRECTORY_SEPARATOR . <span class="stringliteral">&#39;__build__&#39;</span>, <span class="stringliteral">&#39;/./&#39;</span>, array(<span class="charliteral">&#39;.&#39;</span>, <span class="stringliteral">&#39;..&#39;</span>), 0, FALSE, <span class="stringliteral">&#39;filename&#39;</span>, 0, TRUE);</div>
<div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;    <span class="keywordflow">foreach</span> ($info as $file) {</div>
<div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;      $destination = $build_path . DIRECTORY_SEPARATOR . $file-&gt;basename;</div>
<div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;      <span class="keywordflow">if</span> (file_exists($destination)) {</div>
<div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;        <span class="comment">// To prevent the removal of top-level directories such as &#39;modules&#39; or</span></div>
<div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;        <span class="comment">// &#39;themes&#39;, descend in a level if the file exists.</span></div>
<div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;        <span class="comment">// TODO: This only protects one level of directories from being removed.</span></div>
<div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;        $files = <a class="code" href="group__filesystemfunctions.html#ga1c545390a8890f6ea47385f79fbe2e82">drush_scan_directory</a>($file-&gt;filename, <span class="stringliteral">&#39;/./&#39;</span>, array(<span class="charliteral">&#39;.&#39;</span>, <span class="stringliteral">&#39;..&#39;</span>), 0, FALSE);</div>
<div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;        <span class="keywordflow">foreach</span> ($files as $file) {</div>
<div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;          $ret = $ret &amp;&amp; <a class="code" href="group__filesystemfunctions.html#ga1d86ac8e2e56a75acb0abcdc8e0dcf09">drush_copy_dir</a>($file-&gt;filename, $destination . DIRECTORY_SEPARATOR . $file-&gt;basename, FILE_EXISTS_MERGE);</div>
<div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;        }</div>
<div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;      }</div>
<div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;      <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;        $ret = $ret &amp;&amp; <a class="code" href="group__filesystemfunctions.html#ga1d86ac8e2e56a75acb0abcdc8e0dcf09">drush_copy_dir</a>($file-&gt;filename, $destination);</div>
<div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;      }</div>
<div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;    }</div>
<div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;  }</div>
<div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;  <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;    <a class="code" href="group__filesystemfunctions.html#ga6027285d97028ad3299d3aa262be8c2f">drush_mkdir</a>(dirname($build_path));</div>
<div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;    $ret = <a class="code" href="group__filesystemfunctions.html#gaac7379e8cfa2163a874542fc021bf521">drush_move_dir</a>($tmp_path . DIRECTORY_SEPARATOR . <span class="stringliteral">&#39;__build__&#39;</span>, $tmp_path . DIRECTORY_SEPARATOR . basename($build_path), TRUE);</div>
<div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;    $ret = $ret &amp;&amp; <a class="code" href="group__filesystemfunctions.html#ga1d86ac8e2e56a75acb0abcdc8e0dcf09">drush_copy_dir</a>($tmp_path . DIRECTORY_SEPARATOR . basename($build_path), $build_path);</div>
<div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;  }</div>
<div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;</div>
<div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;  <span class="comment">// Copying to final destination resets write permissions. Re-apply.</span></div>
<div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;prepare-install&#39;</span>)) {</div>
<div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;    $default = $build_path . <span class="stringliteral">&#39;/sites/default&#39;</span>;</div>
<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;    chmod($default . <span class="stringliteral">&#39;/settings.php&#39;</span>, 0666);</div>
<div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;    chmod($default . <span class="stringliteral">&#39;/files&#39;</span>, 0777);</div>
<div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;  }</div>
<div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;</div>
<div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;  <span class="keywordflow">if</span> (!$ret) {</div>
<div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;    <a class="code" href="group__errorhandling.html#ga23fe9e1e8c1e5ade39256106044b6da4">drush_set_error</a>(<span class="stringliteral">&#39;MAKE_CANNOT_MOVE_BUILD&#39;</span>, <a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&quot;Cannot move build into place.&quot;</span>));</div>
<div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;  }</div>
<div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;  <span class="keywordflow">return</span> $ret;</div>
<div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;}</div>
<div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;<span class="comment"> * Create a request array for use with release_info_fetch().</span></div>
<div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;<span class="comment"> * @param array $project</span></div>
<div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;<span class="comment"> *   Project array.</span></div>
<div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;<span class="comment"> * @param string $type</span></div>
<div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;<span class="comment"> *   &#39;contrib&#39; or &#39;core&#39;.</span></div>
<div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00632"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#a417d71dedd721df1232702d672ecde59">  632</a></span>&#160;<span class="keyword">function</span> <a class="code" href="make_8drush_8inc.html#a417d71dedd721df1232702d672ecde59">make_prepare_request</a>($project, $type = <span class="stringliteral">&#39;contrib&#39;</span>) {</div>
<div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;  $request = array(</div>
<div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;    <span class="stringliteral">&#39;name&#39;</span> =&gt; $project[<span class="stringliteral">&#39;name&#39;</span>],</div>
<div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;    <span class="stringliteral">&#39;drupal_version&#39;</span> =&gt; $project[<span class="stringliteral">&#39;core&#39;</span>],</div>
<div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;    <span class="stringliteral">&#39;status url&#39;</span> =&gt; $project[<span class="stringliteral">&#39;location&#39;</span>],</div>
<div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;  );</div>
<div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;  <span class="keywordflow">if</span> ($project[<span class="stringliteral">&#39;version&#39;</span>] != <span class="stringliteral">&#39;&#39;</span>) {</div>
<div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;    $request[<span class="stringliteral">&#39;project_version&#39;</span>] = $project[<span class="stringliteral">&#39;version&#39;</span>];</div>
<div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;    $request[<span class="stringliteral">&#39;version&#39;</span>] = $type == <span class="stringliteral">&#39;core&#39;</span> ? $project[<span class="stringliteral">&#39;version&#39;</span>] : $project[<span class="stringliteral">&#39;core&#39;</span>] . <span class="charliteral">&#39;-&#39;</span> . $project[<span class="stringliteral">&#39;version&#39;</span>];</div>
<div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;  }</div>
<div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;  <span class="keywordflow">return</span> $request;</div>
<div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;}</div>
<div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;<span class="comment"> * Determine if the release information is required for this</span></div>
<div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;<span class="comment"> * project. When it is determined that it is, this potentially results</span></div>
<div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;<span class="comment"> * in the use of pm-download to process the project.</span></div>
<div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;<span class="comment"> * If the location of the project is not customized (uses d.o), and</span></div>
<div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;<span class="comment"> * one of the following is true, then release information is required:</span></div>
<div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;<span class="comment"> * - $project[&#39;type&#39;] has not been specified</span></div>
<div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;<span class="comment"> * - $project[&#39;download&#39;] has not been specified</span></div>
<div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;<span class="comment"> * @see make_projects()</span></div>
<div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00658"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#a74cf0e56045632e43fcc16ce438d18e7">  658</a></span>&#160;<span class="keyword">function</span> <a class="code" href="make_8drush_8inc.html#a74cf0e56045632e43fcc16ce438d18e7">make_project_needs_release_info</a>($project) {</div>
<div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;  <span class="keywordflow">return</span> isset($project[<span class="stringliteral">&#39;location&#39;</span>])</div>
<div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;    <span class="comment">// Only fetch release info if the project type is unknown OR if</span></div>
<div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;    <span class="comment">// download attributes are unspecified.</span></div>
<div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;    &amp;&amp; (!isset($project[<span class="stringliteral">&#39;type&#39;</span>]) || !isset($project[<span class="stringliteral">&#39;download&#39;</span>]));</div>
<div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;}</div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Oct 8 2014 09:04:54 for Drush by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</small></address>
</body>
</html>