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 
9 
10 /**
11  * Default localization server for downloading translations.
12  */
13 define('MAKE_DEFAULT_L10N_SERVER', 'http://ftp.drupal.org/files/translations/l10n_server.xml');
14 
15 /**
16  * Make refuses to build makefiles whose api version is mismatched
17  * with make command.
18  */
19 define('MAKE_API', 2);
20 
21 include_once 'make.utilities.inc';
22 include_once 'make.download.inc';
23 include_once 'make.project.inc';
24 include_once 'generate.contents.make.inc';
25 
26 /**
27  * Implements hook_drush_help().
28  */
29 function make_drush_help($section) {
30  switch ($section) {
31  case 'meta:make:title':
32  return dt('Make commands');
33  case 'meta:make:summary':
34  return dt('Manage Drupal codebases using manifests of projects and libraries.');
35  case 'drush:make':
36  return dt('Turns a makefile into a Drupal codebase. For a full description of options and makefile syntax, see docs/make.txt and examples/example.make.');
37  case 'drush:make-generate':
38  return dt('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"');
39  }
40 }
41 
42 /**
43  * Implements hook_drush_command().
44  */
45 function make_drush_command() {
46  $projects = array(
47  'description' => 'Restrict the make to this comma-separated list of projects. To specify all projects, pass *.',
48  'example-value' => 'views,ctools',
49  );
50  $libraries = array(
51  'description' => 'Restrict the make to this comma-separated list of libraries. To specify all libraries, pass *.',
52  'example-value' => 'tinymce',
53  );
54 
55  $items['make'] = array(
56  'bootstrap' => DRUSH_BOOTSTRAP_NONE,
57  'description' => 'Turns a makefile into a working Drupal codebase.',
58  'arguments' => array(
59  'makefile' => 'Filename of the makefile to use for this build.',
60  'build path' => 'The path at which to build the makefile.',
61  ),
62  'examples' => array(
63  'drush make example.make example' => 'Build the example.make makefile in the example directory.',
64  'drush make --no-core --contrib-destination=. installprofile.make' => 'Build an installation profile within an existing Drupal site',
65  'drush make http://example.com/example.make example' => 'Build the remote example.make makefile in the example directory.',
66  'drush make example.make --no-build --lock=example.lock' => 'Write a new makefile to example.lock. All project versions will be resolved.',
67  ),
68  'options' => array(
69  'version' => 'Print the make API version and exit.',
70  'concurrency' => array(
71  'description' => 'Set the number of concurrent projects that will be processed at the same time. The default is 1.',
72  'example-value' => '1',
73  ),
74  '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.',
75  'force-complete' => 'Force a complete build even if errors occur.',
76  'ignore-checksums' => 'Ignore md5 checksums for downloads.',
77  'md5' => array(
78  'description' => 'Output an md5 hash of the current build after completion. Use --md5=print to print to stdout.',
79  'example-value' => 'print',
80  'value' => 'optional',
81  ),
82  'make-update-default-url' => 'The default location to load the XML update information from.',
83  'no-build' => 'Do not build a codebase. Makes the `build path` argument optional.',
84  'no-cache' => 'Do not use the pm-download caching (defaults to cache enabled).',
85  'no-clean' => 'Leave temporary build directories in place instead of cleaning up after completion.',
86  'no-core' => 'Do not require a Drupal core project to be specified.',
87  '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.',
88  'no-patch-txt' => 'Do not write a PATCHES.txt file in the directory of each patched project.',
89  'no-gitinfofile' => 'Do not modify .info files when cloning from Git.',
90  'force-gitinfofile' => 'Force a modification of .info files when cloning from Git even if repository isn\'t hosted on Drupal.org.',
91  'no-gitprojectinfo' => 'Do not inject project info into .info files when cloning from Git.',
92  'overwrite' => 'Overwrite existing directories. Default is to merge.',
93  'prepare-install' => 'Prepare the built site for installation. Generate a properly permissioned settings.php and files directory.',
94  'tar' => 'Generate a tar archive of the build. The output filename will be [build path].tar.gz.',
95  'test' => 'Run a temporary test build and clean up.',
96  'translations' => 'Retrieve translations for the specified comma-separated list of language(s) if available for all projects.',
97  'working-copy' => 'Preserves VCS directories, like .git, for projects downloaded using such methods.',
98  '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).',
99  'projects' => $projects,
100  'libraries' => $libraries,
101  'allow-override' => array(
102  'description' => 'Restrict the make options to a comma-separated list. Defaults to unrestricted.',
103  ),
104  'lock' => array(
105  '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.',
106  'example-value' => 'example.make.lock',
107  ),
108  'shallow-clone' => array(
109  'description' => 'For makefile entries which use git for downloading, this option will utilize shallow clones where possible (ie. by using the git-clone\'s depth=1 option). If the "working-copy" option is not desired, this option will significantly speed up makes which involve modules stored in very large git repos. In fact, if "working-copy" option is enabled, this option cannot be used.',
110  ),
111  'bundle-lockfile' => array(
112  'description' => 'Generate a lockfile for this build and copy it into the codebase (at sites/all/drush/platform.lock). An alternate path (relative to the Drupal root) can also be specified',
113  'example-value' => 'sites/all/drush/example.make.lock',
114  ),
115  'format' => array(
116  'description' => 'The format for generated lockfiles. Options are "yaml" or "ini". Defaults to "yaml".',
117  'example-value' => 'ini',
118  ),
119  'core-quick-drupal' => array(
120  'description' => 'Return project info for use by core-quick-drupal.',
121  'hidden' => TRUE,
122  ),
123  'includes' => 'A list of makefiles to include at build-time.',
124  'overrides' => 'A list of makefiles to that can override values in other makefiles.',
125  ),
126  'engines' => array('release_info'),
127  'topics' => array('docs-make', 'docs-make-example'),
128  );
129 
130  $items['make-generate'] = array(
131  'bootstrap' => DRUSH_BOOTSTRAP_DRUPAL_FULL,
132  'description' => 'Generate a makefile from the current Drupal site.',
133  'examples' => array(
134  'drush generate-makefile example.make' => 'Generate a makefile with ALL projects versioned (should a project have a known version number)',
135  'drush generate-makefile example.make --exclude-versions' => 'Generate a makefile with NO projects versioned',
136  'drush generate-makefile example.make --exclude-versions=drupal,views,cck' => 'Generate a makefile with ALL projects versioned EXCEPT core, Views and CCK',
137  '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.',
138  ),
139  'options' => array(
140  'exclude-versions' => 'Exclude all version numbers (default is include all version numbers) or optionally specify a list of projects to exclude from versioning',
141  'include-versions' => 'Include a specific list of projects, while all other projects remain unversioned in the makefile (so implies --exclude-versions)',
142  'format' => array(
143  'description' => 'The format for generated makefile. Options are "yaml" or "ini". Defaults to "yaml".',
144  'example-value' => 'ini',
145  ),
146  ),
147  'engines' => array('release_info'),
148  'aliases' => array('generate-makefile'),
149  );
150 
151  $items['make-convert'] = array(
152  'bootstrap' => DRUSH_BOOTSTRAP_NONE,
153  'description' => 'Convert a legacy makefile into another format. Defaults to converting .make => .make.yml.',
154  'arguments' => array(
155  'makefile' => 'Filename of the makefile to convert.',
156  ),
157  'options' => array(
158  'format' => 'The format to which the make file should be converted. Accepted values include make, composer, and yml.',
159  ),
160  'required-arguments' => TRUE,
161  'examples' => array(
162  'drush make-convert example.make --format=composer > composer.json' => 'Convert example.make to composer.json',
163  'drush make-convert example.make --format=yml > example.make.yml' => 'Convert example.make to example.make.yml',
164  'drush make-convert composer.lock --format=make > example.make' => 'Convert composer.lock example.make',
165  ),
166  );
167 
168  // Hidden command to build a group of projects.
169  $items['make-process'] = array(
170  'hidden' => TRUE,
171  'arguments' => array(
172  'directory' => 'The temporary working directory to use',
173  ),
174  'options' => array(
175  'projects-location' => 'Name of a temporary file containing json-encoded output of make_projects().',
176  'manifest' => 'An array of projects already being processed.',
177  ),
178  'bootstrap' => DRUSH_BOOTSTRAP_NONE,
179  'engines' => array('release_info'),
180  );
181 
182  $items['make-update'] = array(
183  'bootstrap' => DRUSH_BOOTSTRAP_NONE,
184  'description' => 'Process a makefile and outputs an equivalent makefile with projects version resolved to latest available.',
185  'arguments' => array(
186  'makefile' => 'Filename of the makefile to use for this build.',
187  ),
188  'options' => array(
189  'result-file' => array(
190  'description' => 'Save to a file. If not provided, the updated makefile will be dumped to stdout.',
191  'example-value' => 'updated.make',
192  ),
193  'format' => array(
194  'description' => 'The format for generated lockfiles. Options are "yaml" or "ini". Defaults to "yaml".',
195  'example-value' => 'ini',
196  ),
197  'includes' => 'A list of makefiles to include at build-time.',
198  ),
199  'engines' => array('release_info', 'update_status'),
200  );
201 
202  $items['make-lock'] = array(
203  'bootstrap' => DRUSH_BOOTSTRAP_NONE,
204  'description' => 'Process a makefile and outputs an equivalent makefile with projects version *resolved*. Respects pinned versions.',
205  'arguments' => array(
206  'makefile' => 'Filename of the makefile to use for this build.',
207  ),
208  'options' => array(
209  'result-file' => array(
210  'description' => 'Save to a file. If not provided, the lockfile will be dumped to stdout.',
211  'example-value' => 'platform.lock',
212  ),
213  'format' => array(
214  'description' => 'The format for generated lockfiles. Options are "yaml" or "ini". Defaults to "yaml".',
215  'example-value' => 'ini',
216  ),
217  'includes' => 'A list of makefiles to include at build-time.',
218  ),
219  'allow-additional-options' => TRUE,
220  'engines' => array('release_info', 'update_status'),
221  );
222 
223  // Add docs topic.
224  $docs_dir = drush_get_context('DOC_PREFIX', DRUSH_BASE_PATH);
225  $items['docs-make'] = array(
226  'description' => 'Drush Make overview with examples',
227  'hidden' => TRUE,
228  'topic' => TRUE,
229  'bootstrap' => DRUSH_BOOTSTRAP_NONE,
230  'callback' => 'drush_print_file',
231  'callback arguments' => array($docs_dir . '/docs/make.md'),
232  );
233  $items['docs-make-example'] = array(
234  'description' => 'Drush Make example makefile',
235  'hidden' => TRUE,
236  'topic' => TRUE,
237  'bootstrap' => DRUSH_BOOTSTRAP_NONE,
238  'callback' => 'drush_print_file',
239  'callback arguments' => array($docs_dir . '/examples/example.make.yml'),
240  );
241  return $items;
242 }
243 
244 /**
245  * Command argument complete callback.
246  *
247  * @return array
248  * Strong glob of files to complete on.
249  */
250 function make_make_complete() {
251  return array(
252  'files' => array(
253  'directories' => array(
254  'pattern' => '*',
255  'flags' => GLOB_ONLYDIR,
256  ),
257  'make' => array(
258  'pattern' => '*.make',
259  ),
260  ),
261  );
262 }
263 
264 /**
265  * Validation callback for make command.
266  */
267 function drush_make_validate($makefile = NULL, $build_path = NULL) {
268  // Don't validate if --version option is supplied.
269  if (drush_get_option('version', FALSE)) {
270  return;
271  }
272 
273  if (drush_get_option('shallow-clone', FALSE) && drush_get_option('working-copy', FALSE)) {
274  return drush_set_error('MAKE_SHALLOW_CLONE_WORKING_COPY_CONFLICT', dt('You cannot use "--shallow-clone" and "--working-copy" options together.'));
275  }
276 
277  // Error out if the build path is not valid and --no-build was not supplied.
278  if (!drush_get_option('no-build', FALSE) && !make_build_path($build_path)) {
279  return FALSE;
280  }
281 }
282 
283 /**
284  * Implements drush_hook_pre_COMMAND().
285  *
286  * If --version option is supplied, print it and prevent execution of the command.
287  */
288 function drush_make_pre_make($makefile = NULL, $build_path = NULL) {
289  if (drush_get_option('version', FALSE)) {
290  drush_print(dt('Drush make API version !version', array('!version' => MAKE_API)));
292  // Prevent command execution.
293  return FALSE;
294  }
295 }
296 
297 /**
298  * Drush callback; make based on the makefile.
299  */
300 function drush_make($makefile = NULL, $build_path = NULL) {
301  // Set the cache option based on our '--no-cache' option.
303 
304  // Build.
305  if (!drush_get_option('no-build', FALSE)) {
306  $info = make_parse_info_file($makefile);
307  drush_log(dt('Beginning to build !makefile.', array('!makefile' => $makefile)), LogLevel::OK);
308 
309  // Default contrib destination depends on Drupal core version.
310  $core_version = str_replace('.x', '', $info['core'][0]);
311  $sitewide = drush_drupal_sitewide_directory($core_version);
312  $contrib_destination = drush_get_option('contrib-destination', $sitewide);
313 
314  $build_path = make_build_path($build_path);
315  $make_dir = realpath(dirname($makefile));
316 
317  $success = make_projects(FALSE, $contrib_destination, $info, $build_path, $make_dir);
318  if ($success) {
319  make_libraries(FALSE, $contrib_destination, $info, $build_path, $make_dir);
320 
321  if (drush_get_option('prepare-install')) {
322  make_prepare_install($build_path);
323  }
324  if ($option = drush_get_option('md5')) {
325  $md5 = make_md5();
326  if ($option === 'print') {
327  drush_print($md5);
328  }
329  else {
330  drush_log(dt('Build hash: %md5', array('%md5' => $md5)), LogLevel::OK);
331  }
332  }
333  // Only take final build steps if not in testing mode.
334  if (!drush_get_option('test')) {
335  if (drush_get_option('tar')) {
336  make_tar($build_path);
337  }
338  else {
339  make_move_build($build_path);
340  }
341  }
342  make_clean_tmp();
343  }
344  else {
345  return make_error('MAKE_PROJECTS_FAILED', dt('Drush Make failed to download all projects. See the log above for the specific errors.'));
346  }
347  }
348 
349  // Process --lock and --bundle-lockfile
350  $lockfiles = array();
351  if ($result_file = drush_get_option('bundle-lockfile', FALSE)) {
352  if ($result_file === TRUE) {
353  $result_file = 'sites/all/drush/platform.make';
354  }
355  $lockfiles[] = $build_path . '/' . $result_file;
356  }
357  if ($result_file = drush_get_option('lock', FALSE)) {
358  $lockfiles[] = $result_file;
359  }
360  if (count($lockfiles)) {
361  foreach ($lockfiles as $lockfile) {
362  if ($lockfile !== TRUE) {
363  $result_file = drush_normalize_path($lockfile);
364  drush_mkdir(dirname($result_file), $required = TRUE);
365  drush_set_option('result-file', $result_file);
366  }
367  drush_invoke('make-lock', $makefile);
368  drush_unset_option('result-file');
369  }
370  }
371 
372  // Used by core-quick-drupal command.
373  // @see drush_core_quick_drupal().
374  if (drush_get_option('core-quick-drupal', FALSE)) {
375  return $info;
376  }
377 }
378 
379 /**
380  * Command callback; convert make file format.
381  */
382 function drush_make_convert($source) {
383  $dest_format = drush_get_option('format', 'yml');
384 
385  // Load source data.
386  $source_format = pathinfo($source, PATHINFO_EXTENSION);
387 
388  if ($source_format == $dest_format || $source_format == 'lock' && $dest_format == 'composer') {
389  drush_print('The source format cannot be the same as the destination format.');
390  }
391 
392  // Obtain drush make $info array, converting if necessary.
393  switch ($source_format) {
394  case 'make':
395  case 'yml':
396  case 'yaml':
397  $info = make_parse_info_file($source);
398  break;
399  case 'lock':
400  $composer_json_file = str_replace('lock', 'json', $source);
401  if (!file_exists($composer_json_file)) {
402  drush_print('Please ensure that a composer.json file is in the same directory as the specified composer.lock file.');
403  return FALSE;
404  }
405  $composer_json = json_decode(make_get_data($composer_json_file), TRUE);
406  $composer_lock = json_decode(make_get_data($source), TRUE);
407  $info = drush_make_convert_composer_to_make($composer_lock, $composer_json);
408  break;
409  case 'json':
410  drush_print('Please use composer.lock instead of composer.json as source for conversion.');
411  return FALSE;
412  break;
413  }
414 
415  // Output into destination formation.
416  switch ($dest_format) {
417  case 'yml':
418  case 'yaml':
419  $output = drush_make_convert_make_to_yml($info);
420  break;
421 
422  case 'make':
423  foreach ($info['projects'] as $key => $project) {
424  $info['projects'][$key]['_type'] = $info['projects'][$key]['type'];
425  }
426  foreach ($info['libraries'] as $key => $library) {
427  $info['libraries'][$key]['_type'] = 'librarie';
428  }
429  $output = _drush_make_generate_makefile_contents($info['projects'], $info['libraries'], $info['core'], $info['defaults']);
430 
431  break;
432 
433  case 'composer':
434  $output = drush_make_convert_make_to_composer($info);
435  break;
436  }
437 
438  drush_print($output);
439 }
440 
441 /**
442  * Converts a drush info array to a YAML array.
443  *
444  * @param array $info
445  * A drush make info array.
446  *
447  * @return string
448  * A yaml encoded info array.
449  */
451  // Remove incorrect value.
452  unset($info['format']);
453 
454  // Replace "*" with "~" for project versions.
455  foreach ($info['projects'] as $key => $project) {
456  if ($project['version'] == '*') {
457  $info['projects'][$key]['version'] = '~';
458  }
459  }
460 
461  $dumper = drush_load_engine('outputformat', 'yaml');
462  $output = $dumper->format($info, array());
463 
464  return $output;
465 }
466 
467 /**
468  * Converts a drush info array to a composer.json array.
469  *
470  * @param array $info
471  * A drush make info array.
472  *
473  * @return string
474  * A json encoded composer.json schema object.
475  */
477  $core_major_version = substr($info['core'], 0, 1);
478  $core_project_name = $core_major_version == 7 ? 'drupal/drupal' : 'drupal/core';
479 
480  // Add default projects.
481  $projects = array(
482  'composer/installers' => '^1.0.20',
483  'cweagans/composer-patches' => '~1.0',
484  $core_project_name => str_replace('x', '*', $info['core']),
485  );
486 
487  $patches = array();
488 
489  // Iterate over projects, populating composer-friendly array.
490  foreach ($info['projects'] as $project_name => $project) {
491  switch ($project['type']) {
492  case 'core':
493  $project['name'] = 'drupal/core';
494  $projects[$project['name']] = str_replace('x', '*', $project['version']);
495  break;
496 
497  default:
498  $project['name'] = "drupal/$project_name";
499  $projects[$project['name']] = drush_make_convert_project_to_composer($project, $core_major_version);
500  break;
501  }
502 
503  // Add project patches.
504  if (!empty($project['patch'])) {
505  foreach($project['patch'] as $key => $patch) {
506  $patch_description = "Enter {$project['name']} patch #$key description here";
507  $patches[$project['name']][$patch_description] = $patch;
508  }
509  }
510  }
511 
512  // Iterate over libraries, populating composer-friendly array.
513  if (!empty($info['libraries'])) {
514  foreach ($info['libraries'] as $library_name => $library) {
515  $library_name = 'Verify project name: ' . $library_name;
516  $projects[$library_name] = drush_make_convert_project_to_composer($library);
517  }
518  }
519 
520  $output = array(
521  'name' => 'Enter project name here',
522  'description' => 'Enter project description here',
523  'type' => 'project',
524  'repositories' => array(
525  array('type' => 'composer', 'url' => 'https://packagist.drupal-composer.org'),
526  ),
527  'require' => $projects,
528  'minimum-stability' => 'dev',
529  'prefer-stable' => TRUE,
530  'extra' => array(
531  'installer-paths' => array(
532  'core' => array('type:drupal-core'),
533  'docroot/modules/contrib/{$name}' => array('type:drupal-module'),
534  'docroot/profiles/contrib/{$name}' => array('type:drupal-profile'),
535  'docroot/themes/contrib/{$name}' => array('type:drupal-theme'),
536  'drush/contrib/{$name}' => array('type:drupal-drush'),
537  ),
538  'patches' => $patches,
539  ),
540  );
541 
542  $output = json_encode($output, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
543 
544  return $output;
545 }
546 
547 /**
548  * Converts a make file project array into a composer project version string.
549  *
550  * @param array $original_project
551  * A project dependency, as defined in a make file.
552  *
553  * @param string $core_major_version
554  * The major core version. E.g., 6, 7, 8, etc.
555  *
556  * @return string
557  * The project version, in composer syntax.
558  *
559  */
560 function drush_make_convert_project_to_composer($original_project, $core_major_version) {
561  // Typical specified version with major version "x" removed.
562  if (!empty($original_project['version'])) {
563  $version = str_replace('x', '0', $original_project['version']);
564  }
565  // Git branch or revision.
566  elseif (!empty($original_project['download'])) {
567  switch ($original_project['download']['type']) {
568  case 'git':
569  if (!empty($original_project['download']['branch'])) {
570  // @todo Determine if '0' will always be correct.
571  $version = str_replace('x', '0', $original_project['download']['branch']);
572  }
573  if (!empty($original_project['download']['tag'])) {
574  // @todo Determine if '0' will always be correct.
575  $version = str_replace('x', '0', $original_project['download']['tag']);
576  }
577  if (!empty($project['download']['revision'])) {
578  $version .= '#' . $original_project['download']['revision'];
579  }
580  break;
581 
582  default:
583  $version = 'Enter correct project name and version number';
584  break;
585  }
586  }
587 
588  $version = "$core_major_version." . $version;
589 
590  return $version;
591 }
592 
593 /**
594  * Converts a composer.lock array into a traditional drush make array.
595  *
596  * @param array $composer_lock
597  * An array of composer.lock data.
598  *
599  * @param array $composer_json
600  * An array of composer.json data.
601  *
602  * @return array A traditional drush make info array.
603  * A traditional drush make info array.
604  */
605 function drush_make_convert_composer_to_make($composer_lock, $composer_json) {
606  $info = array(
607  'core' => array(),
608  'api' => 2,
609  'defaults' => array(
610  'projects' => array(
611  'subdir' => 'contrib',
612  ),
613  ),
614  'projects' => array(),
615  'libraries' => array(),
616  );
617 
618  // The make generation function requires that projects be grouped by type,
619  // or else duplicative project groups will be created.
620  $core = array();
621  $modules = array();
622  $themes = array();
623  $profiles = array();
624  $libraries = array();
625  foreach ($composer_lock['packages'] as $key => $package) {
626  if (strpos($package['name'], 'drupal/') === 0 && in_array($package['type'], array('drupal-core', 'drupal-theme', 'drupal-module', 'drupal-profile'))) {
627  $project_name = str_replace('drupal/', '', $package['name']);
628 
629  switch ($package['type']) {
630  case 'drupal-core':
631  $project_name = 'drupal';
632  $group =& $core;
633  $group[$project_name]['type'] = 'core';
634  $info['core'] = substr($package['version'], 0, 1) . '.x';
635  break;
636  case 'drupal-theme':
637  $group =& $themes;
638  $group[$project_name]['type'] = 'theme';
639  break;
640  case 'drupal-module':
641  $group =& $modules;
642  $group[$project_name]['type'] = 'module';
643  break;
644  case 'drupal-profile':
645  $group =& $profiles;
646  $group[$project_name]['type'] = 'profile';
647  break;
648  }
649 
650  $group[$project_name]['download']['type'] = 'git';
651  $group[$project_name]['download']['url'] = $package['source']['url'];
652  // Dev versions should use git branch + revision, otherwise a tag is used.
653  if (strstr($package['version'], 'dev')) {
654  // 'dev-' prefix indicates a branch-alias. Stripping the dev prefix from
655  // the branch name is sufficient.
657  if (strpos($package['version'], 'dev-') === 0) {
658  $group[$project_name]['download']['branch'] = substr($package['version'], 4);
659  }
660  // Otherwise, leave as is. Version may already use '-dev' suffix.
661  else {
662  $group[$project_name]['download']['branch'] = $package['version'];
663  }
664  $group[$project_name]['download']['revision'] = $package['source']['reference'];
665  }
666  elseif ($package['type'] == 'drupal-core') {
667  // For 7.x tags, replace 7.xx.0 with 7.xx.
668  if ($info['core'] == '7.x') {
669  $group[$project_name]['download']['tag']= substr($package['version'], 0, 4);
670  }
671  else {
672  $group[$project_name]['download']['tag'] = $package['version'];
673  }
674  }
675  else {
676  // Make tag versioning drupal-friendly. 8.1.0-alpha1 => 8.x-1.0-alpha1.
677  $major_version = substr($package['version'], 0 ,1);
678  $the_rest = substr($package['version'], 2, strlen($package['version']));
679  $group[$project_name]['download']['tag'] = "$major_version.x-$the_rest";
680  }
681 
682  if (!empty($package['extra']['patches_applied'])) {
683  foreach ($package['extra']['patches_applied'] as $desc => $url) {
684  $group[$project_name]['patch'][] = $url;
685  }
686  }
687  }
688  // Include any non-drupal libraries that exist in both .lock and .json.
689  elseif (!in_array($package['type'], array('composer-plugin', 'metapackage'))
690  && array_key_exists($package['name'], $composer_json['require'])) {
691  $project_name = $package['name'];
692  $libraries[$project_name]['type'] = 'library';
693  $libraries[$project_name]['download']['type'] = 'git';
694  $libraries[$project_name]['download']['url'] = $package['source']['url'];
695  $libraries[$project_name]['download']['branch'] = $package['version'];
696  $libraries[$project_name]['download']['revision'] = $package['source']['reference'];
697  }
698  }
699 
700  $info['projects'] = $core + $modules + $themes;
701  $info['libraries'] = $libraries;
702 
703  return $info;
704 }
705 
706 /**
707  * Drush callback: hidden file to process an individual project.
708  *
709  * @param string $directory
710  * Directory where the project is being built.
711  */
712 function drush_make_process($directory) {
713  drush_get_engine('release_info');
714 
715  // Set the temporary directory.
716  make_tmp(TRUE, $directory);
717  if (!$projects_location = drush_get_option('projects-location')) {
718  return drush_set_error('MAKE-PROCESS', dt('No projects passed to drush_make_process'));
719  }
720  $projects = json_decode(file_get_contents($projects_location), TRUE);
721  $manifest = drush_get_option('manifest', array());
722 
723  foreach ($projects as $project) {
724  if ($instance = DrushMakeProject::getInstance($project['type'], $project)) {
725  $instance->setManifest($manifest);
726  $instance->make();
727  }
728  else {
729  make_error('PROJECT-TYPE', dt('Non-existent project type %type on project %project.', array('%type' => $project['type'], '%project' => $project['name'])));
730  }
731  }
732 }
733 
734 /**
735  * Gather additional data on all projects specified in the make file.
736  */
737 function make_prepare_projects($recursion, $info, $contrib_destination = '', $build_path = '', $make_dir = '') {
738  $release_info = drush_get_engine('release_info');
739 
740  // Nothing to make if the project list is empty. Maybe complain about it.
741  if (empty($info['projects'])) {
742  if (drush_get_option('no-core') || $recursion) {
743  return TRUE;
744  }
745  else {
746  return drush_set_error('MAKE_NO_CORE', dt('No core project specified.'));
747  }
748  }
749 
750  // Obtain translations to download along with the projects.
751  $translations = array();
752  if (isset($info['translations'])) {
753  $translations = $info['translations'];
754  }
755  if ($arg_translations = drush_get_option('translations', FALSE)) {
756  $translations = array_merge(explode(',', $arg_translations), $translations);
757  }
758 
759  // Normalize projects.
760  $projects = array();
761  $ignore_checksums = drush_get_option('ignore-checksums');
762  foreach ($info['projects'] as $key => $project) {
763  // Merge the known data onto the project info.
764  $project += array(
765  'name' => $key,
766  'type' => 'module',
767  'core' => $info['core'],
768  'translations' => $translations,
769  'build_path' => $build_path,
770  'contrib_destination' => $contrib_destination,
771  'version' => '',
772  'location' => drush_get_option('make-update-default-url', ReleaseInfo::DEFAULT_URL),
773  'subdir' => '',
774  'directory_name' => '',
775  'make_directory' => $make_dir,
776  'options' => array(),
777  );
778  // MD5 Checksum.
779  if ($ignore_checksums) {
780  unset($project['download']['md5']);
781  }
782  elseif (!empty($project['md5'])) {
783  $project['download']['md5'] = $project['md5'];
784  }
785 
786  // If download components are specified, but not the download
787  // type, default to git.
788  if (isset($project['download']) && !isset($project['download']['type'])) {
789  $project['download']['type'] = 'git';
790  }
791  // Localization server.
792  if (!isset($project['l10n_url']) && ($project['location'] == ReleaseInfo::DEFAULT_URL)) {
793  $project['l10n_url'] = MAKE_DEFAULT_L10N_SERVER;
794  }
795  // Classify projects in core or contrib.
796  if ($project['type'] == 'core') {
797  $project['download_type'] = 'core';
798  }
799  elseif ($project['location'] != ReleaseInfo::DEFAULT_URL || !isset($project['download'])) {
800  $request = make_prepare_request($project);
801  $is_core = $release_info->checkProject($request, 'core');
802  $project['download_type'] = ($is_core ? 'core' : 'contrib');
803  $project['type'] = $is_core ? 'core' : $project['type'];
804  }
805  else {
806  $project['download_type'] = ($project['name'] == 'drupal' ? 'core' : 'contrib');
807  }
808  $projects[$project['download_type']][$project['name']] = $project;
809  }
810 
811  // Verify there're enough cores, but not too many.
812  $cores = !empty($projects['core']) ? count($projects['core']) : 0;
813  if (drush_get_option('no-core')) {
814  unset($projects['core']);
815  }
816  elseif ($cores == 0 && !$recursion) {
817  return drush_set_error('MAKE_NO_CORE', dt('No core project specified.'));
818  }
819  elseif ($cores == 1 && $recursion) {
820  unset($projects['core']);
821  }
822  elseif ($cores > 1) {
823  return drush_set_error('MAKE_MULTIPLE_CORES', dt('More than one core project specified.'));
824  }
825 
826  // Set download type = pm for suitable projects.
827  foreach (array_keys($projects) as $project_type) {
828  foreach ($projects[$project_type] as $project) {
829  if (make_project_needs_release_info($project)) {
830  $request = make_prepare_request($project, $project_type);
831  $release = $release_info->selectReleaseBasedOnStrategy($request, '', 'ignore');
832  if ($release === FALSE) {
833  return FALSE;
834  }
835  // Override default project type with data from update service.
836  if (!isset($info['projects'][$project['name']]['type'])) {
837  $project['type'] = $release_info->get($request)->getType();
838  }
839 
840  if (!isset($project['download'])) {
841  $project['download'] = array(
842  'type' => 'pm',
843  'full_version' => $release['version'],
844  'download_link' => $release['download_link'],
845  'status url' => $request['status url'],
846  );
847  }
848  }
849  $projects[$project_type][$project['name']] = $project;
850  }
851  }
852  if (!$recursion) {
853  $projects += array(
854  'core' => array(),
855  'contrib' => array(),
856  );
857  drush_set_option('DRUSH_MAKE_PROJECTS', array_merge($projects['core'], $projects['contrib']));
858  }
859  return $projects;
860 }
861 
862 /**
863  * Process all projects specified in the make file.
864  */
865 function make_projects($recursion, $contrib_destination, $info, $build_path, $make_dir) {
866  $projects = make_prepare_projects($recursion, $info, $contrib_destination, $build_path, $make_dir);
867  // Abort if there was an error processing projects.
868  if ($projects === FALSE) {
869  return FALSE;
870  }
871 
872  // Core is built in place, rather than using make-process.
873  if (!empty($projects['core']) && count($projects['core'])) {
874  $project = current($projects['core']);
875  $project = DrushMakeProject::getInstance('core', $project);
876  $project->make();
877  }
878 
879  // Process all projects concurrently using make-process.
880  if (isset($projects['contrib'])) {
881  $concurrency = drush_get_option('concurrency', 1);
882  // Generate $concurrency sub-processes to do the actual work.
883  $invocations = array();
884  $thread = 0;
885  foreach ($projects['contrib'] as $project) {
886  $thread = ++$thread % $concurrency;
887  // Ensure that we've set this sub-process up.
888  if (!isset($invocations[$thread])) {
889  $invocations[$thread] = array(
890  'args' => array(
891  make_tmp(),
892  ),
893  'options' => array(
894  'projects' => array(),
895  ),
896  'site' => array(),
897  );
898  }
899  // Add the project to this sub-process.
900  $invocations[$thread]['options']['projects'][] = $project;
901  // Add the manifest so recursive downloads do not override projects.
902  $invocations[$thread]['options']['manifest'] = array_keys($projects['contrib']);
903  }
904  if (!empty($invocations)) {
905  // Backend options.
906  $backend_options = array(
907  'concurrency' => $concurrency,
908  'method' => 'POST',
909  );
910 
911  // Store projects in temporary files since passing this much data on the
912  // pipe buffer can break on certain systems.
913  _make_write_project_json($invocations);
914 
915  $common_options = drush_redispatch_get_options();
916  // Merge in stdin options since we process makefiles recursively. See http://drupal.org/node/1510180.
917  $common_options = array_merge($common_options, drush_get_context('stdin'));
918  // Package handler should use 'wget'.
919  $common_options['package-handler'] = 'wget';
920 
921  // Avoid any prompts from CLI.
922  $common_options['yes'] = TRUE;
923 
924  // Use cache unless explicitly turned off.
925  if (!drush_get_option('no-cache', FALSE)) {
926  $common_options['cache'] = TRUE;
927  }
928  // Unless --verbose or --debug are passed, quiter backend output.
929  if (empty($common_options['verbose']) && empty($common_options['debug'])) {
930  $backend_options['#output-label'] = FALSE;
931  $backend_options['integrate'] = TRUE;
932  }
933  $results = drush_backend_invoke_concurrent($invocations, $common_options, $backend_options, 'make-process', '@none');
934  if (count($results['error_log'])) {
935  return FALSE;
936  }
937  }
938  }
939  return TRUE;
940 }
941 
942 /**
943  * Writes out project data to temporary files.
944  *
945  * @param array &$invocations
946  * An array containing projects sorted by thread.
947  */
948 function _make_write_project_json(array &$invocations) {
949  foreach ($invocations as $thread => $info) {
950  $projects = $info['options']['projects'];
951  unset($invocations[$thread]['options']['projects']);
952  $temp_file = drush_tempnam('make_projects');
953  file_put_contents($temp_file, json_encode($projects));
954  $invocations[$thread]['options']['projects-location'] = $temp_file;
955  }
956 }
957 
958 /**
959  * Gather additional data on all libraries specified in the make file.
960  */
961 function make_prepare_libraries($recursion, $info, $contrib_destination = '', $build_path = '', $make_dir = '') {
962  // Nothing to make if the libraries list is empty.
963  if (empty($info['libraries'])) {
964  return;
965  }
966 
967  $libraries = array();
968  $ignore_checksums = drush_get_option('ignore-checksums');
969  foreach ($info['libraries'] as $key => $library) {
970  if (!is_string($key) || !is_array($library)) {
971  // TODO Print a prettier message.
972  continue;
973  }
974  // Merge the known data onto the library info.
975  $library += array(
976  'name' => $key,
977  'core' => $info['core'],
978  'build_path' => $build_path,
979  'contrib_destination' => $contrib_destination,
980  'subdir' => '',
981  'directory_name' => $key,
982  'make_directory' => $make_dir,
983  );
984  if ($ignore_checksums) {
985  unset($library['download']['md5']);
986  }
987  $libraries[$key] = $library;
988  }
989  if (!$recursion) {
990  drush_set_option('DRUSH_MAKE_LIBRARIES', $info['libraries']);
991  }
992  return $libraries;
993 }
994 
995 /**
996  * Process all libraries specified in the make file.
997  */
998 function make_libraries($recursion, $contrib_destination, $info, $build_path, $make_dir) {
999  $libraries = make_prepare_libraries($recursion, $info, $contrib_destination, $build_path, $make_dir);
1000  if (empty($libraries)) {
1001  return;
1002  }
1003  foreach ($libraries as $key => $library) {
1004  $class = DrushMakeProject::getInstance('library', $library);
1005  $class->make();
1006  }
1007 }
1008 
1009 /**
1010  * The path where the final build will be placed.
1011  */
1012 function make_build_path($build_path) {
1013  static $saved_path;
1014  if (isset($saved_path)) {
1015  return $saved_path;
1016  }
1017 
1018  // Determine the base of the build.
1019  if (drush_get_option('tar')) {
1020  $build_path = dirname($build_path) . '/' . basename($build_path, '.tar.gz') . '.tar.gz';
1021  }
1022  elseif (isset($build_path) && (!empty($build_path) || $build_path == '.')) {
1023  $build_path = rtrim($build_path, '/');
1024  }
1025  // Allow tests to run without a specified base path.
1026  elseif (drush_get_option('test') || drush_confirm(dt("Make new site in the current directory?"))) {
1027  $build_path = '.';
1028  }
1029  else {
1030  return drush_user_abort(dt('Build aborted.'));
1031  }
1032  if ($build_path != '.' && file_exists($build_path) && !drush_get_option('no-core', FALSE)) {
1033  return drush_set_error('MAKE_PATH_EXISTS', dt('Base path %path already exists.', array('%path' => $build_path)));
1034  }
1035  $saved_path = $build_path;
1036  return $build_path;
1037 }
1038 
1039 /**
1040  * Move the completed build into place.
1041  */
1042 function make_move_build($build_path) {
1043  $tmp_path = make_tmp();
1044  $ret = TRUE;
1045  if ($build_path == '.' || (drush_get_option('no-core', FALSE) && file_exists($build_path))) {
1046  $info = drush_scan_directory($tmp_path . DIRECTORY_SEPARATOR . '__build__', '/./', array('.', '..'), 0, FALSE, 'filename', 0, TRUE);
1047  foreach ($info as $file) {
1048  $destination = $build_path . DIRECTORY_SEPARATOR . $file->basename;
1049  if (file_exists($destination)) {
1050  // To prevent the removal of top-level directories such as 'modules' or
1051  // 'themes', descend in a level if the file exists.
1052  // TODO: This only protects one level of directories from being removed.
1053  $overwrite = drush_get_option('overwrite', FALSE) ? FILE_EXISTS_OVERWRITE : FILE_EXISTS_MERGE;
1054  if (is_dir($destination)) {
1055  $files = drush_scan_directory($file->filename, '/./', array('.', '..'), 0, FALSE);
1056  foreach ($files as $file) {
1057  $ret = $ret && drush_copy_dir($file->filename, $destination . DIRECTORY_SEPARATOR . $file->basename, $overwrite);
1058  }
1059  }
1060  else {
1061  $ret = $ret && drush_copy_dir($file->filename, $destination, $overwrite);
1062  }
1063  }
1064  else {
1065  $ret = $ret && drush_copy_dir($file->filename, $destination);
1066  }
1067  }
1068  }
1069  else {
1070  drush_mkdir(dirname($build_path));
1071  $ret = drush_move_dir($tmp_path . DIRECTORY_SEPARATOR . '__build__', $tmp_path . DIRECTORY_SEPARATOR . basename($build_path), TRUE);
1072  $ret = $ret && drush_copy_dir($tmp_path . DIRECTORY_SEPARATOR . basename($build_path), $build_path);
1073  }
1074 
1075  // Copying to final destination resets write permissions. Re-apply.
1076  if (drush_get_option('prepare-install')) {
1077  $default = $build_path . '/sites/default';
1078  chmod($default . '/settings.php', 0666);
1079  chmod($default . '/files', 0777);
1080  }
1081 
1082  if (!$ret) {
1083  return drush_set_error('MAKE_CANNOT_MOVE_BUILD', dt("Cannot move build into place."));
1084  }
1085  return $ret;
1086 }
1087 
1088 /**
1089  * Create a request array suitable for release_info engine.
1090  *
1091  * This is a convenience function to easily integrate drush_make
1092  * with drush release_info engine.
1093  *
1094  * @todo: refactor 'make' to internally work with release_info keys.
1095  *
1096  * @param array $project
1097  * Project array.
1098  * @param string $type
1099  * 'contrib' or 'core'.
1100  */
1101 function make_prepare_request($project, $type = 'contrib') {
1102  $request = array(
1103  'name' => $project['name'],
1104  'drupal_version' => $project['core'],
1105  'status url' => $project['location'],
1106  );
1107  if ($project['version'] != '') {
1108  $request['project_version'] = $project['version'];
1109  $request['version'] = $type == 'core' ? $project['version'] : $project['core'] . '-' . $project['version'];
1110  }
1111  return $request;
1112 }
1113 
1114 /**
1115  * Determine if the release information is required for this
1116  * project. When it is determined that it is, this potentially results
1117  * in the use of pm-download to process the project.
1118  *
1119  * If the location of the project is not customized (uses d.o), and
1120  * one of the following is true, then release information is required:
1121  *
1122  * - $project['type'] has not been specified
1123  * - $project['download'] has not been specified
1124  *
1125  * @see make_projects()
1126  */
1128  return isset($project['location'])
1129  // Only fetch release info if the project type is unknown OR if
1130  // download attributes are unspecified.
1131  && (!isset($project['type']) || !isset($project['download']));
1132 }
1133 
1134 /**
1135  * Enables caching if not explicitly disabled.
1136  *
1137  * @return bool
1138  * The previous value of the 'cache' option.
1139  */
1141  $cache_before = drush_get_option('cache');
1142  if (!drush_get_option('no-cache', FALSE)) {
1143  drush_set_option('cache', TRUE);
1144  }
1145  return $cache_before;
1146 }

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="namespaces.html"><span>Namespaces</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><a href="examples.html"><span>Examples</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>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><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;</div>
<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;use <a class="code" href="classDrush_1_1Log_1_1LogLevel.html">Drush\Log\LogLevel</a>;</div>
<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;use <a class="code" href="classDrush_1_1UpdateService_1_1ReleaseInfo.html">Drush\UpdateService\ReleaseInfo</a>;</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">   10</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * Default localization server for downloading translations.</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"><a class="code" href="make_8drush_8inc.html#affb301a79bb307bb27a39cf6f184dc91">   13</a></span>&#160;define(<span class="stringliteral">&#39;MAKE_DEFAULT_L10N_SERVER&#39;</span>, <span class="stringliteral">&#39;http://ftp.drupal.org/files/translations/l10n_server.xml&#39;</span>);</div>
<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"></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">   16</span>&#160;<span class="comment"> * Make refuses to build makefiles whose api version is mismatched</span></div>
<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * with make command.</span></div>
<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#acb28b89b64f706ac1e26374bd68bf66c">   19</a></span>&#160;define(<span class="stringliteral">&#39;MAKE_API&#39;</span>, 2);</div>
<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;</div>
<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;include_once <span class="stringliteral">&#39;make.utilities.inc&#39;</span>;</div>
<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;include_once <span class="stringliteral">&#39;make.download.inc&#39;</span>;</div>
<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;include_once <span class="stringliteral">&#39;make.project.inc&#39;</span>;</div>
<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;include_once <span class="stringliteral">&#39;generate.contents.make.inc&#39;</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">   26</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment"> * Implements hook_drush_help().</span></div>
<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#a29ad98dc75f44759be40f5c803d6df3a">   29</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="l00030"></a><span class="lineno">   30</span>&#160;  <span class="keywordflow">switch</span> ($section) {</div>
<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;    <span class="keywordflow">case</span> <span class="stringliteral">&#39;meta:make:title&#39;</span>:</div>
<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;      <span class="keywordflow">return</span> <a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&#39;Make commands&#39;</span>);</div>
<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    <span class="keywordflow">case</span> <span class="stringliteral">&#39;meta:make:summary&#39;</span>:</div>
<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;      <span class="keywordflow">return</span> <a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&#39;Manage Drupal codebases using manifests of projects and libraries.&#39;</span>);</div>
<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;    <span class="keywordflow">case</span> <span class="stringliteral">&#39;drush:make&#39;</span>:</div>
<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;      <span class="keywordflow">return</span> <a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<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="l00037"></a><span class="lineno">   37</span>&#160;    <span class="keywordflow">case</span> <span class="stringliteral">&#39;drush:make-generate&#39;</span>:</div>
<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;      <span class="keywordflow">return</span> <a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<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="l00039"></a><span class="lineno">   39</span>&#160;  }</div>
<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;}</div>
<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="comment"> * Implements hook_drush_command().</span></div>
<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#ae35f71b98a1e675d8d2c920659baf262">   45</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="l00046"></a><span class="lineno">   46</span>&#160;  $projects = array(</div>
<div class="line"><a name="l00047"></a><span class="lineno">   47</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="l00048"></a><span class="lineno">   48</span>&#160;    <span class="stringliteral">&#39;example-value&#39;</span> =&gt; <span class="stringliteral">&#39;views,ctools&#39;</span>,</div>
<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;  );</div>
<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;  $libraries = array(</div>
<div class="line"><a name="l00051"></a><span class="lineno">   51</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="l00052"></a><span class="lineno">   52</span>&#160;    <span class="stringliteral">&#39;example-value&#39;</span> =&gt; <span class="stringliteral">&#39;tinymce&#39;</span>,</div>
<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;  );</div>
<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;</div>
<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;  $items[<span class="stringliteral">&#39;make&#39;</span>] = array(</div>
<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    <span class="stringliteral">&#39;bootstrap&#39;</span> =&gt; DRUSH_BOOTSTRAP_NONE,</div>
<div class="line"><a name="l00057"></a><span class="lineno">   57</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="l00058"></a><span class="lineno">   58</span>&#160;    <span class="stringliteral">&#39;arguments&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00059"></a><span class="lineno">   59</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="l00060"></a><span class="lineno">   60</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="l00061"></a><span class="lineno">   61</span>&#160;    ),</div>
<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    <span class="stringliteral">&#39;examples&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00063"></a><span class="lineno">   63</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="l00064"></a><span class="lineno">   64</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="l00065"></a><span class="lineno">   65</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="l00066"></a><span class="lineno">   66</span>&#160;      <span class="stringliteral">&#39;drush make example.make --no-build --lock=example.lock&#39;</span> =&gt; <span class="stringliteral">&#39;Write a new makefile to example.lock. All project versions will be resolved.&#39;</span>,</div>
<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    ),</div>
<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    <span class="stringliteral">&#39;options&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00069"></a><span class="lineno">   69</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="l00070"></a><span class="lineno">   70</span>&#160;      <span class="stringliteral">&#39;concurrency&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00071"></a><span class="lineno">   71</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="l00072"></a><span class="lineno">   72</span>&#160;        <span class="stringliteral">&#39;example-value&#39;</span> =&gt; <span class="charliteral">&#39;1&#39;</span>,</div>
<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;      ),</div>
<div class="line"><a name="l00074"></a><span class="lineno">   74</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="l00075"></a><span class="lineno">   75</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="l00076"></a><span class="lineno">   76</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="l00077"></a><span class="lineno">   77</span>&#160;      <span class="stringliteral">&#39;md5&#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;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="l00079"></a><span class="lineno">   79</span>&#160;        <span class="stringliteral">&#39;example-value&#39;</span> =&gt; <span class="stringliteral">&#39;print&#39;</span>,</div>
<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;        <span class="stringliteral">&#39;value&#39;</span> =&gt; <span class="stringliteral">&#39;optional&#39;</span>,</div>
<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;      ),</div>
<div class="line"><a name="l00082"></a><span class="lineno">   82</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="l00083"></a><span class="lineno">   83</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="l00084"></a><span class="lineno">   84</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="l00085"></a><span class="lineno">   85</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="l00086"></a><span class="lineno">   86</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="l00087"></a><span class="lineno">   87</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="l00088"></a><span class="lineno">   88</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="l00089"></a><span class="lineno">   89</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="l00090"></a><span class="lineno">   90</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="l00091"></a><span class="lineno">   91</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="l00092"></a><span class="lineno">   92</span>&#160;      <span class="stringliteral">&#39;overwrite&#39;</span> =&gt; <span class="stringliteral">&#39;Overwrite existing directories. Default is to merge.&#39;</span>,</div>
<div class="line"><a name="l00093"></a><span class="lineno">   93</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="l00094"></a><span class="lineno">   94</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="l00095"></a><span class="lineno">   95</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="l00096"></a><span class="lineno">   96</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="l00097"></a><span class="lineno">   97</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="l00098"></a><span class="lineno">   98</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="l00099"></a><span class="lineno">   99</span>&#160;      <span class="stringliteral">&#39;projects&#39;</span> =&gt; $projects,</div>
<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;      <span class="stringliteral">&#39;libraries&#39;</span> =&gt; $libraries,</div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;      <span class="stringliteral">&#39;allow-override&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;        <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;Restrict the make options to a comma-separated list. Defaults to unrestricted.&#39;</span>,</div>
<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;      ),</div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;      <span class="stringliteral">&#39;lock&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</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="l00106"></a><span class="lineno">  106</span>&#160;        <span class="stringliteral">&#39;example-value&#39;</span> =&gt; <span class="stringliteral">&#39;example.make.lock&#39;</span>,</div>
<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;      ),</div>
<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;      <span class="stringliteral">&#39;shallow-clone&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;        <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;For makefile entries which use git for downloading, this option will utilize shallow clones where possible (ie. by using the git-clone\&#39;s depth=1 option). If the &quot;working-copy&quot; option is not desired, this option will significantly speed up makes which involve modules stored in very large git repos. In fact, if &quot;working-copy&quot; option is enabled, this option cannot be used.&#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;bundle-lockfile&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;        <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;Generate a lockfile for this build and copy it into the codebase (at sites/all/drush/platform.lock). An alternate path (relative to the Drupal root) can also be specified&#39;</span>,</div>
<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;        <span class="stringliteral">&#39;example-value&#39;</span> =&gt; <span class="stringliteral">&#39;sites/all/drush/example.make.lock&#39;</span>,</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="stringliteral">&#39;format&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;        <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;The format for generated lockfiles. Options are &quot;yaml&quot; or &quot;ini&quot;. Defaults to &quot;yaml&quot;.&#39;</span>,</div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;        <span class="stringliteral">&#39;example-value&#39;</span> =&gt; <span class="stringliteral">&#39;ini&#39;</span>,</div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;      ),</div>
<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;      <span class="stringliteral">&#39;core-quick-drupal&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;        <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;Return project info for use by core-quick-drupal.&#39;</span>,</div>
<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;        <span class="stringliteral">&#39;hidden&#39;</span> =&gt; TRUE,</div>
<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;      ),</div>
<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;      <span class="stringliteral">&#39;includes&#39;</span> =&gt; <span class="stringliteral">&#39;A list of makefiles to include at build-time.&#39;</span>,</div>
<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;      <span class="stringliteral">&#39;overrides&#39;</span> =&gt; <span class="stringliteral">&#39;A list of makefiles to that can override values in other makefiles.&#39;</span>,</div>
<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    ),</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;    <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="l00128"></a><span class="lineno">  128</span>&#160;  );</div>
<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;</div>
<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;  $items[<span class="stringliteral">&#39;make-generate&#39;</span>] = array(</div>
<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    <span class="stringliteral">&#39;bootstrap&#39;</span> =&gt; DRUSH_BOOTSTRAP_DRUPAL_FULL,</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;Generate a makefile from the current Drupal site.&#39;</span>,</div>
<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    <span class="stringliteral">&#39;examples&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00134"></a><span class="lineno">  134</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="l00135"></a><span class="lineno">  135</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="l00136"></a><span class="lineno">  136</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="l00137"></a><span class="lineno">  137</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="l00138"></a><span class="lineno">  138</span>&#160;    ),</div>
<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    <span class="stringliteral">&#39;options&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00140"></a><span class="lineno">  140</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="l00141"></a><span class="lineno">  141</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="l00142"></a><span class="lineno">  142</span>&#160;      <span class="stringliteral">&#39;format&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;        <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;The format for generated makefile. Options are &quot;yaml&quot; or &quot;ini&quot;. Defaults to &quot;yaml&quot;.&#39;</span>,</div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;        <span class="stringliteral">&#39;example-value&#39;</span> =&gt; <span class="stringliteral">&#39;ini&#39;</span>,</div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;      ),</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="stringliteral">&#39;engines&#39;</span> =&gt; array(<span class="stringliteral">&#39;release_info&#39;</span>),</div>
<div class="line"><a name="l00148"></a><span class="lineno">  148</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="l00149"></a><span class="lineno">  149</span>&#160;  );</div>
<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;</div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;  $items[<span class="stringliteral">&#39;make-convert&#39;</span>] = array(</div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;    <span class="stringliteral">&#39;bootstrap&#39;</span> =&gt; DRUSH_BOOTSTRAP_NONE,</div>
<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;    <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;Convert a legacy makefile into another format. Defaults to converting .make =&gt; .make.yml.&#39;</span>,</div>
<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    <span class="stringliteral">&#39;arguments&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;      <span class="stringliteral">&#39;makefile&#39;</span> =&gt; <span class="stringliteral">&#39;Filename of the makefile to convert.&#39;</span>,</div>
<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    ),</div>
<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    <span class="stringliteral">&#39;options&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;      <span class="stringliteral">&#39;format&#39;</span> =&gt; <span class="stringliteral">&#39;The format to which the make file should be converted. Accepted values include make, composer, and yml.&#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;    <span class="stringliteral">&#39;required-arguments&#39;</span> =&gt; TRUE,</div>
<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;    <span class="stringliteral">&#39;examples&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;      <span class="stringliteral">&#39;drush make-convert example.make --format=composer  &gt; composer.json&#39;</span> =&gt; <span class="stringliteral">&#39;Convert example.make to composer.json&#39;</span>,</div>
<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;      <span class="stringliteral">&#39;drush make-convert example.make --format=yml &gt; example.make.yml&#39;</span> =&gt; <span class="stringliteral">&#39;Convert example.make to example.make.yml&#39;</span>,</div>
<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;      <span class="stringliteral">&#39;drush make-convert composer.lock --format=make &gt; example.make&#39;</span> =&gt; <span class="stringliteral">&#39;Convert composer.lock example.make&#39;</span>,</div>
<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    ),</div>
<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;  );</div>
<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;</div>
<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;  <span class="comment">// Hidden command to build a group of projects.</span></div>
<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;  $items[<span class="stringliteral">&#39;make-process&#39;</span>] = array(</div>
<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    <span class="stringliteral">&#39;hidden&#39;</span> =&gt; TRUE,</div>
<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    <span class="stringliteral">&#39;arguments&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00172"></a><span class="lineno">  172</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="l00173"></a><span class="lineno">  173</span>&#160;    ),</div>
<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;    <span class="stringliteral">&#39;options&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;      <span class="stringliteral">&#39;projects-location&#39;</span> =&gt; <span class="stringliteral">&#39;Name of a temporary file containing json-encoded output of make_projects().&#39;</span>,</div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</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="l00177"></a><span class="lineno">  177</span>&#160;    ),</div>
<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    <span class="stringliteral">&#39;bootstrap&#39;</span> =&gt; DRUSH_BOOTSTRAP_NONE,</div>
<div class="line"><a name="l00179"></a><span class="lineno">  179</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="l00180"></a><span class="lineno">  180</span>&#160;  );</div>
<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;</div>
<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;  $items[<span class="stringliteral">&#39;make-update&#39;</span>] = array(</div>
<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    <span class="stringliteral">&#39;bootstrap&#39;</span> =&gt; DRUSH_BOOTSTRAP_NONE,</div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;    <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;Process a makefile and outputs an equivalent makefile with projects version resolved to latest available.&#39;</span>,</div>
<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;    <span class="stringliteral">&#39;arguments&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</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="l00187"></a><span class="lineno">  187</span>&#160;    ),</div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    <span class="stringliteral">&#39;options&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;      <span class="stringliteral">&#39;result-file&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;        <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;Save to a file. If not provided, the updated makefile will be dumped to stdout.&#39;</span>,</div>
<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;        <span class="stringliteral">&#39;example-value&#39;</span> =&gt; <span class="stringliteral">&#39;updated.make&#39;</span>,</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="stringliteral">&#39;format&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;        <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;The format for generated lockfiles. Options are &quot;yaml&quot; or &quot;ini&quot;. Defaults to &quot;yaml&quot;.&#39;</span>,</div>
<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;        <span class="stringliteral">&#39;example-value&#39;</span> =&gt; <span class="stringliteral">&#39;ini&#39;</span>,</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;      <span class="stringliteral">&#39;includes&#39;</span> =&gt; <span class="stringliteral">&#39;A list of makefiles to include at build-time.&#39;</span>,</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="stringliteral">&#39;engines&#39;</span> =&gt; array(<span class="stringliteral">&#39;release_info&#39;</span>, <span class="stringliteral">&#39;update_status&#39;</span>),</div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;  );</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;  $items[<span class="stringliteral">&#39;make-lock&#39;</span>] = array(</div>
<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    <span class="stringliteral">&#39;bootstrap&#39;</span> =&gt; DRUSH_BOOTSTRAP_NONE,</div>
<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;Process a makefile and outputs an equivalent makefile with projects version *resolved*. Respects pinned versions.&#39;</span>,</div>
<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    <span class="stringliteral">&#39;arguments&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00206"></a><span class="lineno">  206</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="l00207"></a><span class="lineno">  207</span>&#160;    ),</div>
<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    <span class="stringliteral">&#39;options&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;      <span class="stringliteral">&#39;result-file&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;        <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;Save to a file. If not provided, the lockfile will be dumped to stdout.&#39;</span>,</div>
<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;        <span class="stringliteral">&#39;example-value&#39;</span> =&gt; <span class="stringliteral">&#39;platform.lock&#39;</span>,</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;      <span class="stringliteral">&#39;format&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;        <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;The format for generated lockfiles. Options are &quot;yaml&quot; or &quot;ini&quot;. Defaults to &quot;yaml&quot;.&#39;</span>,</div>
<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;        <span class="stringliteral">&#39;example-value&#39;</span> =&gt; <span class="stringliteral">&#39;ini&#39;</span>,</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;      <span class="stringliteral">&#39;includes&#39;</span> =&gt; <span class="stringliteral">&#39;A list of makefiles to include at build-time.&#39;</span>,</div>
<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;    ),</div>
<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;    <span class="stringliteral">&#39;allow-additional-options&#39;</span> =&gt; TRUE,</div>
<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    <span class="stringliteral">&#39;engines&#39;</span> =&gt; array(<span class="stringliteral">&#39;release_info&#39;</span>, <span class="stringliteral">&#39;update_status&#39;</span>),</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;</div>
<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;  <span class="comment">// Add docs topic.</span></div>
<div class="line"><a name="l00224"></a><span class="lineno">  224</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="l00225"></a><span class="lineno">  225</span>&#160;  $items[<span class="stringliteral">&#39;docs-make&#39;</span>] = array(</div>
<div class="line"><a name="l00226"></a><span class="lineno">  226</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="l00227"></a><span class="lineno">  227</span>&#160;    <span class="stringliteral">&#39;hidden&#39;</span> =&gt; TRUE,</div>
<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;    <span class="stringliteral">&#39;topic&#39;</span> =&gt; TRUE,</div>
<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;    <span class="stringliteral">&#39;bootstrap&#39;</span> =&gt; DRUSH_BOOTSTRAP_NONE,</div>
<div class="line"><a name="l00230"></a><span class="lineno">  230</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="l00231"></a><span class="lineno">  231</span>&#160;    <span class="stringliteral">&#39;callback arguments&#39;</span> =&gt; array($docs_dir . <span class="stringliteral">&#39;/docs/make.md&#39;</span>),</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;  $items[<span class="stringliteral">&#39;docs-make-example&#39;</span>] = array(</div>
<div class="line"><a name="l00234"></a><span class="lineno">  234</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="l00235"></a><span class="lineno">  235</span>&#160;    <span class="stringliteral">&#39;hidden&#39;</span> =&gt; TRUE,</div>
<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;    <span class="stringliteral">&#39;topic&#39;</span> =&gt; TRUE,</div>
<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;    <span class="stringliteral">&#39;bootstrap&#39;</span> =&gt; DRUSH_BOOTSTRAP_NONE,</div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</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="l00239"></a><span class="lineno">  239</span>&#160;    <span class="stringliteral">&#39;callback arguments&#39;</span> =&gt; array($docs_dir . <span class="stringliteral">&#39;/examples/example.make.yml&#39;</span>),</div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;  );</div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;  <span class="keywordflow">return</span> $items;</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;<span class="comment"></span></div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;<span class="comment"> * Command argument complete callback.</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"> * @return array</span></div>
<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;<span class="comment"> *   Strong glob of files to complete on.</span></div>
<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00250"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#a52b2fdb12c49439bcd31dce405667803">  250</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="l00251"></a><span class="lineno">  251</span>&#160;  <span class="keywordflow">return</span> array(</div>
<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;    <span class="stringliteral">&#39;files&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;      <span class="stringliteral">&#39;directories&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;        <span class="stringliteral">&#39;pattern&#39;</span> =&gt; <span class="charliteral">&#39;*&#39;</span>,</div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;        <span class="stringliteral">&#39;flags&#39;</span> =&gt; GLOB_ONLYDIR,</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="stringliteral">&#39;make&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;        <span class="stringliteral">&#39;pattern&#39;</span> =&gt; <span class="stringliteral">&#39;*.make&#39;</span>,</div>
<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;      ),</div>
<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;    ),</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;}</div>
<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;<span class="comment"> * Validation callback for make command.</span></div>
<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00267"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#a18037811b43ef80d4ccdae3a745570f1">  267</a></span>&#160;<span class="keyword">function</span> <a class="code" href="make_8drush_8inc.html#a18037811b43ef80d4ccdae3a745570f1">drush_make_validate</a>($makefile = NULL, $build_path = NULL) {</div>
<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;  <span class="comment">// Don&#39;t validate if --version option is supplied.</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;version&#39;</span>, FALSE)) {</div>
<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;    <span class="keywordflow">return</span>;</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;</div>
<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;shallow-clone&#39;</span>, FALSE) &amp;&amp; <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;working-copy&#39;</span>, FALSE)) {</div>
<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="group__errorhandling.html#ga23fe9e1e8c1e5ade39256106044b6da4">drush_set_error</a>(<span class="stringliteral">&#39;MAKE_SHALLOW_CLONE_WORKING_COPY_CONFLICT&#39;</span>, <a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&#39;You cannot use &quot;--shallow-clone&quot; and &quot;--working-copy&quot; options together.&#39;</span>));</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;  <span class="comment">// Error out if the build path is not valid and --no-build was not supplied.</span></div>
<div class="line"><a name="l00278"></a><span class="lineno">  278</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; !<a class="code" href="make_8drush_8inc.html#ae117ecd8db6105b9778e7c6f5f74e40e">make_build_path</a>($build_path)) {</div>
<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;    <span class="keywordflow">return</span> FALSE;</div>
<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;  }</div>
<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;}</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">  283</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;<span class="comment"> * Implements drush_hook_pre_COMMAND().</span></div>
<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;<span class="comment"> * If --version option is supplied, print it and prevent execution of the command.</span></div>
<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00288"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#a0a84cfe514d15291f6e1e69428cc2337">  288</a></span>&#160;<span class="keyword">function</span> <a class="code" href="make_8drush_8inc.html#a0a84cfe514d15291f6e1e69428cc2337">drush_make_pre_make</a>($makefile = NULL, $build_path = NULL) {</div>
<div class="line"><a name="l00289"></a><span class="lineno">  289</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="l00290"></a><span class="lineno">  290</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="l00291"></a><span class="lineno">  291</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="l00292"></a><span class="lineno">  292</span>&#160;    <span class="comment">// Prevent command execution.</span></div>
<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;    <span class="keywordflow">return</span> FALSE;</div>
<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;  }</div>
<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;}</div>
<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;<span class="comment"> * Drush callback; make based on the makefile.</span></div>
<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00300"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#a64e3d2b9948951c3f141802f41658359">  300</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="l00301"></a><span class="lineno">  301</span>&#160;  <span class="comment">// Set the cache option based on our &#39;--no-cache&#39; option.</span></div>
<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;  <a class="code" href="make_8drush_8inc.html#a6d1c9ceda70a665c4c4fac20dd412504">_make_enable_cache</a>();</div>
<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;</div>
<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;  <span class="comment">// Build.</span></div>
<div class="line"><a name="l00305"></a><span class="lineno">  305</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="l00306"></a><span class="lineno">  306</span>&#160;    $info = <a class="code" href="make_8utilities_8inc.html#a4b0a7538764f23e358e9441aa1b4231c">make_parse_info_file</a>($makefile);</div>
<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;    <a class="code" href="group__logging.html#ga47324b65808524558a488916b150dd51">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)), LogLevel::OK);</div>
<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;</div>
<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    <span class="comment">// Default contrib destination depends on Drupal core version.</span></div>
<div class="line"><a name="l00310"></a><span class="lineno">  310</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="l00311"></a><span class="lineno">  311</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="l00312"></a><span class="lineno">  312</span>&#160;    $contrib_destination = <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;contrib-destination&#39;</span>, $sitewide);</div>
<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;</div>
<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;    $build_path = <a class="code" href="make_8drush_8inc.html#ae117ecd8db6105b9778e7c6f5f74e40e">make_build_path</a>($build_path);</div>
<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;    $make_dir = realpath(dirname($makefile));</div>
<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;</div>
<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;    $success = <a class="code" href="make_8drush_8inc.html#a7f6c382e030da87fc401f133edd22f3b">make_projects</a>(FALSE, $contrib_destination, $info, $build_path, $make_dir);</div>
<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;    <span class="keywordflow">if</span> ($success) {</div>
<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;      <a class="code" href="make_8drush_8inc.html#ae70f3ae23a4dcbb5f8816636d2adb4c2">make_libraries</a>(FALSE, $contrib_destination, $info, $build_path, $make_dir);</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="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="l00322"></a><span class="lineno">  322</span>&#160;        <a class="code" href="make_8utilities_8inc.html#a7ac27f598c36208652191f40f08c2332">make_prepare_install</a>($build_path);</div>
<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;      }</div>
<div class="line"><a name="l00324"></a><span class="lineno">  324</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="l00325"></a><span class="lineno">  325</span>&#160;        $md5 = <a class="code" href="make_8utilities_8inc.html#abc341fc62b92a8eef00bf92aa24a90df">make_md5</a>();</div>
<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;        <span class="keywordflow">if</span> ($option === <span class="stringliteral">&#39;print&#39;</span>) {</div>
<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;          <a class="code" href="group__outputfunctions.html#ga63acbb94925d6d2693e235e966bba740">drush_print</a>($md5);</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;        <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;          <a class="code" href="group__logging.html#ga47324b65808524558a488916b150dd51">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)), LogLevel::OK);</div>
<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;        }</div>
<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;      }</div>
<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;      <span class="comment">// Only take final build steps if not in testing mode.</span></div>
<div class="line"><a name="l00334"></a><span class="lineno">  334</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="l00335"></a><span class="lineno">  335</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="l00336"></a><span class="lineno">  336</span>&#160;          <a class="code" href="make_8utilities_8inc.html#ae5b2297055f24062509236670e55dc2a">make_tar</a>($build_path);</div>
<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;        }</div>
<div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;        <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;          <a class="code" href="make_8drush_8inc.html#ae5eb2a2403d96afcef3d5f85ee7ae284">make_move_build</a>($build_path);</div>
<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;        }</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;      <a class="code" href="make_8utilities_8inc.html#ae13ed28f360182a4df0620a68d251fd6">make_clean_tmp</a>();</div>
<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;    }</div>
<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;    <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;      <span class="keywordflow">return</span> <a class="code" href="make_8utilities_8inc.html#aa2a78298291b42502718822ed5b59969">make_error</a>(<span class="stringliteral">&#39;MAKE_PROJECTS_FAILED&#39;</span>, <a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&#39;Drush Make failed to download all projects. See the log above for the specific errors.&#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;  }</div>
<div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;</div>
<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;  <span class="comment">// Process --lock and --bundle-lockfile</span></div>
<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;  $lockfiles = array();</div>
<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;  <span class="keywordflow">if</span> ($result_file = <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;bundle-lockfile&#39;</span>, FALSE)) {</div>
<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;    <span class="keywordflow">if</span> ($result_file === TRUE) {</div>
<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;      $result_file = <span class="stringliteral">&#39;sites/all/drush/platform.make&#39;</span>;</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;    $lockfiles[] = $build_path . <span class="charliteral">&#39;/&#39;</span> . $result_file;</div>
<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;  }</div>
<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;  <span class="keywordflow">if</span> ($result_file = <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="l00358"></a><span class="lineno">  358</span>&#160;    $lockfiles[] = $result_file;</div>
<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;  }</div>
<div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;  <span class="keywordflow">if</span> (count($lockfiles)) {</div>
<div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;    <span class="keywordflow">foreach</span> ($lockfiles as $lockfile) {</div>
<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;      <span class="keywordflow">if</span> ($lockfile !== TRUE) {</div>
<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;        $result_file = <a class="code" href="group__filesystemfunctions.html#ga4126321d45e8a9c454048869dd42a27c">drush_normalize_path</a>($lockfile);</div>
<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;        <a class="code" href="group__filesystemfunctions.html#ga6027285d97028ad3299d3aa262be8c2f">drush_mkdir</a>(dirname($result_file), $required = TRUE);</div>
<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;        <a class="code" href="context_8inc.html#aa4b55e2f6174c8b6efaa8f23a0f9e0af">drush_set_option</a>(<span class="stringliteral">&#39;result-file&#39;</span>, $result_file);</div>
<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;      }</div>
<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;      <a class="code" href="group__dispatching.html#gad45b0ad6ccdc34ebb10d38d5c2d6a1d1">drush_invoke</a>(<span class="stringliteral">&#39;make-lock&#39;</span>, $makefile);</div>
<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;      <a class="code" href="context_8inc.html#a2d9c3fdcab304aaf56293d3881e98a9a">drush_unset_option</a>(<span class="stringliteral">&#39;result-file&#39;</span>);</div>
<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;    }</div>
<div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;  }</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;  <span class="comment">// Used by core-quick-drupal command.</span></div>
<div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;  <span class="comment">// @see drush_core_quick_drupal().</span></div>
<div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;core-quick-drupal&#39;</span>, FALSE)) {</div>
<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;    <span class="keywordflow">return</span> $info;</div>
<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;  }</div>
<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;}</div>
<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;<span class="comment"> * Command callback; convert make file format.</span></div>
<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00382"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#ae88632c69815cc80a69bf4e19c53c753">  382</a></span>&#160;<span class="keyword">function</span> <a class="code" href="make_8drush_8inc.html#ae88632c69815cc80a69bf4e19c53c753">drush_make_convert</a>($source) {</div>
<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;  $dest_format = <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;format&#39;</span>, <span class="stringliteral">&#39;yml&#39;</span>);</div>
<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;</div>
<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;  <span class="comment">// Load source data.</span></div>
<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;  $source_format = pathinfo($source, PATHINFO_EXTENSION);</div>
<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;</div>
<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;  <span class="keywordflow">if</span> ($source_format == $dest_format || $source_format == <span class="stringliteral">&#39;lock&#39;</span> &amp;&amp; $dest_format == <span class="stringliteral">&#39;composer&#39;</span>) {</div>
<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;    <a class="code" href="group__outputfunctions.html#ga63acbb94925d6d2693e235e966bba740">drush_print</a>(<span class="stringliteral">&#39;The source format cannot be the same as the destination format.&#39;</span>);</div>
<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;  }</div>
<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;</div>
<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;  <span class="comment">// Obtain drush make $info array, converting if necessary.</span></div>
<div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;  <span class="keywordflow">switch</span> ($source_format) {</div>
<div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;    <span class="keywordflow">case</span> <span class="stringliteral">&#39;make&#39;</span>:</div>
<div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;    <span class="keywordflow">case</span> <span class="stringliteral">&#39;yml&#39;</span>:</div>
<div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;    <span class="keywordflow">case</span> <span class="stringliteral">&#39;yaml&#39;</span>:</div>
<div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;      $info = <a class="code" href="make_8utilities_8inc.html#a4b0a7538764f23e358e9441aa1b4231c">make_parse_info_file</a>($source);</div>
<div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;      <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;    <span class="keywordflow">case</span> <span class="stringliteral">&#39;lock&#39;</span>:</div>
<div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;      $composer_json_file = str_replace(<span class="stringliteral">&#39;lock&#39;</span>, <span class="stringliteral">&#39;json&#39;</span>, $source);</div>
<div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;      <span class="keywordflow">if</span> (!file_exists($composer_json_file)) {</div>
<div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;        <a class="code" href="group__outputfunctions.html#ga63acbb94925d6d2693e235e966bba740">drush_print</a>(<span class="stringliteral">&#39;Please ensure that a composer.json file is in the same directory as the specified composer.lock file.&#39;</span>);</div>
<div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;        <span class="keywordflow">return</span> FALSE;</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;      $composer_json = json_decode(<a class="code" href="make_8utilities_8inc.html#aae2ffe8335a86abf135357cfdac212d0">make_get_data</a>($composer_json_file), TRUE);</div>
<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;      $composer_lock = json_decode(<a class="code" href="make_8utilities_8inc.html#aae2ffe8335a86abf135357cfdac212d0">make_get_data</a>($source), TRUE);</div>
<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;      $info = <a class="code" href="make_8drush_8inc.html#ab3654f07e7c7f798635ed28ba3ec1c72">drush_make_convert_composer_to_make</a>($composer_lock, $composer_json);</div>
<div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;      <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;    <span class="keywordflow">case</span> <span class="stringliteral">&#39;json&#39;</span>:</div>
<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;      <a class="code" href="group__outputfunctions.html#ga63acbb94925d6d2693e235e966bba740">drush_print</a>(<span class="stringliteral">&#39;Please use composer.lock instead of composer.json as source for conversion.&#39;</span>);</div>
<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;      <span class="keywordflow">return</span> FALSE;</div>
<div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;      <span class="keywordflow">break</span>;</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;</div>
<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;  <span class="comment">// Output into destination formation.</span></div>
<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;  <span class="keywordflow">switch</span> ($dest_format) {</div>
<div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;    <span class="keywordflow">case</span> <span class="stringliteral">&#39;yml&#39;</span>:</div>
<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;    <span class="keywordflow">case</span> <span class="stringliteral">&#39;yaml&#39;</span>:</div>
<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;      $output = <a class="code" href="make_8drush_8inc.html#abd0153c5edcf3d4aaf9b04a5e2e44473">drush_make_convert_make_to_yml</a>($info);</div>
<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;      <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;</div>
<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;    <span class="keywordflow">case</span> <span class="stringliteral">&#39;make&#39;</span>:</div>
<div class="line"><a name="l00423"></a><span class="lineno">  423</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="l00424"></a><span class="lineno">  424</span>&#160;        $info[<span class="stringliteral">&#39;projects&#39;</span>][$key][<span class="stringliteral">&#39;_type&#39;</span>] = $info[<span class="stringliteral">&#39;projects&#39;</span>][$key][<span class="stringliteral">&#39;type&#39;</span>];</div>
<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;      }</div>
<div class="line"><a name="l00426"></a><span class="lineno">  426</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="l00427"></a><span class="lineno">  427</span>&#160;        $info[<span class="stringliteral">&#39;libraries&#39;</span>][$key][<span class="stringliteral">&#39;_type&#39;</span>] = <span class="stringliteral">&#39;librarie&#39;</span>;</div>
<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;      }</div>
<div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;      $output = <a class="code" href="generate_8contents_8make_8inc.html#afbd48f8e43786bc9712f774585903694">_drush_make_generate_makefile_contents</a>($info[<span class="stringliteral">&#39;projects&#39;</span>], $info[<span class="stringliteral">&#39;libraries&#39;</span>], $info[<span class="stringliteral">&#39;core&#39;</span>], $info[<span class="stringliteral">&#39;defaults&#39;</span>]);</div>
<div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;</div>
<div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;      <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;</div>
<div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;    <span class="keywordflow">case</span> <span class="stringliteral">&#39;composer&#39;</span>:</div>
<div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;      $output = <a class="code" href="make_8drush_8inc.html#a54d161f556d8b121461e177c79c6901b">drush_make_convert_make_to_composer</a>($info);</div>
<div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;      <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;  }</div>
<div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;</div>
<div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;  <a class="code" href="group__outputfunctions.html#ga63acbb94925d6d2693e235e966bba740">drush_print</a>($output);</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;<span class="comment"></span></div>
<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;<span class="comment"> * Converts a drush info array to a YAML array.</span></div>
<div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;<span class="comment"> * @param array $info</span></div>
<div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;<span class="comment"> *   A drush make info array.</span></div>
<div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;<span class="comment"> * @return string</span></div>
<div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;<span class="comment"> *   A yaml encoded info array.</span></div>
<div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00450"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#abd0153c5edcf3d4aaf9b04a5e2e44473">  450</a></span>&#160;<span class="keyword">function</span> <a class="code" href="make_8drush_8inc.html#abd0153c5edcf3d4aaf9b04a5e2e44473">drush_make_convert_make_to_yml</a>($info) {</div>
<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;  <span class="comment">// Remove incorrect value.</span></div>
<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;  unset($info[<span class="stringliteral">&#39;format&#39;</span>]);</div>
<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;</div>
<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;  <span class="comment">// Replace &quot;*&quot; with &quot;~&quot; for project versions.</span></div>
<div class="line"><a name="l00455"></a><span class="lineno">  455</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="l00456"></a><span class="lineno">  456</span>&#160;    <span class="keywordflow">if</span> ($project[<span class="stringliteral">&#39;version&#39;</span>] == <span class="charliteral">&#39;*&#39;</span>) {</div>
<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;      $info[<span class="stringliteral">&#39;projects&#39;</span>][$key][<span class="stringliteral">&#39;version&#39;</span>] = <span class="charliteral">&#39;~&#39;</span>;</div>
<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;    }</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;</div>
<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;  $dumper = <a class="code" href="engines_8inc.html#a8d6f32991f4806b9311373a0c9afcbd5">drush_load_engine</a>(<span class="stringliteral">&#39;outputformat&#39;</span>, <span class="stringliteral">&#39;yaml&#39;</span>);</div>
<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;  $output = $dumper-&gt;format($info, array());</div>
<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;</div>
<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;  <span class="keywordflow">return</span> $output;</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"></span></div>
<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;<span class="comment"> * Converts a drush info array to a composer.json array.</span></div>
<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;<span class="comment"> * @param array $info</span></div>
<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;<span class="comment"> *   A drush make info array.</span></div>
<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;<span class="comment"> * @return string</span></div>
<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;<span class="comment"> *   A json encoded composer.json schema object.</span></div>
<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00476"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#a54d161f556d8b121461e177c79c6901b">  476</a></span>&#160;<span class="keyword">function</span> <a class="code" href="make_8drush_8inc.html#a54d161f556d8b121461e177c79c6901b">drush_make_convert_make_to_composer</a>($info) {</div>
<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;  $core_major_version = substr($info[<span class="stringliteral">&#39;core&#39;</span>], 0, 1);</div>
<div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;  $core_project_name = $core_major_version == 7 ? <span class="stringliteral">&#39;drupal/drupal&#39;</span> : <span class="stringliteral">&#39;drupal/core&#39;</span>;</div>
<div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;</div>
<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;  <span class="comment">// Add default projects.</span></div>
<div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;  $projects = array(</div>
<div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;    <span class="stringliteral">&#39;composer/installers&#39;</span> =&gt; <span class="stringliteral">&#39;^1.0.20&#39;</span>,</div>
<div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;    <span class="stringliteral">&#39;cweagans/composer-patches&#39;</span> =&gt; <span class="stringliteral">&#39;~1.0&#39;</span>,</div>
<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;    $core_project_name =&gt; str_replace(<span class="charliteral">&#39;x&#39;</span>, <span class="charliteral">&#39;*&#39;</span>, $info[<span class="stringliteral">&#39;core&#39;</span>]),</div>
<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;  );</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;  $patches = array();</div>
<div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;</div>
<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;  <span class="comment">// Iterate over projects, populating composer-friendly array.</span></div>
<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;  <span class="keywordflow">foreach</span> ($info[<span class="stringliteral">&#39;projects&#39;</span>] as $project_name =&gt; $project) {</div>
<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;    <span class="keywordflow">switch</span> ($project[<span class="stringliteral">&#39;type&#39;</span>]) {</div>
<div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;      <span class="keywordflow">case</span> <span class="stringliteral">&#39;core&#39;</span>:</div>
<div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;        $project[<span class="stringliteral">&#39;name&#39;</span>] = <span class="stringliteral">&#39;drupal/core&#39;</span>;</div>
<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;        $projects[$project[<span class="stringliteral">&#39;name&#39;</span>]] = str_replace(<span class="charliteral">&#39;x&#39;</span>, <span class="charliteral">&#39;*&#39;</span>, $project[<span class="stringliteral">&#39;version&#39;</span>]);</div>
<div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;        <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;</div>
<div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;      <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;        $project[<span class="stringliteral">&#39;name&#39;</span>] = <span class="stringliteral">&quot;drupal/$project_name&quot;</span>;</div>
<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;        $projects[$project[<span class="stringliteral">&#39;name&#39;</span>]] = <a class="code" href="make_8drush_8inc.html#a44f86e03d7e10c4da9b10aab856ec845">drush_make_convert_project_to_composer</a>($project, $core_major_version);</div>
<div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;        <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;    }</div>
<div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;</div>
<div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;    <span class="comment">// Add project patches.</span></div>
<div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;    <span class="keywordflow">if</span> (!empty($project[<span class="stringliteral">&#39;patch&#39;</span>])) {</div>
<div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;      <span class="keywordflow">foreach</span>($project[<span class="stringliteral">&#39;patch&#39;</span>] as $key =&gt; $patch) {</div>
<div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;        $patch_description = <span class="stringliteral">&quot;Enter {$project[&#39;name&#39;]} patch #$key description here&quot;</span>;</div>
<div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;        $patches[$project[<span class="stringliteral">&#39;name&#39;</span>]][$patch_description] = $patch;</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;    }</div>
<div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;  }</div>
<div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;</div>
<div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;  <span class="comment">// Iterate over libraries, populating composer-friendly array.</span></div>
<div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;  <span class="keywordflow">if</span> (!empty($info[<span class="stringliteral">&#39;libraries&#39;</span>])) {</div>
<div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;    <span class="keywordflow">foreach</span> ($info[<span class="stringliteral">&#39;libraries&#39;</span>] as $library_name =&gt; $library) {</div>
<div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;      $library_name = <span class="stringliteral">&#39;Verify project name: &#39;</span> . $library_name;</div>
<div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;      $projects[$library_name] = <a class="code" href="make_8drush_8inc.html#a44f86e03d7e10c4da9b10aab856ec845">drush_make_convert_project_to_composer</a>($library);</div>
<div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;    }</div>
<div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;  }</div>
<div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;</div>
<div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;  $output = array(</div>
<div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;    <span class="stringliteral">&#39;name&#39;</span> =&gt; <span class="stringliteral">&#39;Enter project name here&#39;</span>,</div>
<div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;    <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;Enter project description here&#39;</span>,</div>
<div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;    <span class="stringliteral">&#39;type&#39;</span> =&gt; <span class="stringliteral">&#39;project&#39;</span>,</div>
<div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;    <span class="stringliteral">&#39;repositories&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;      array(<span class="stringliteral">&#39;type&#39;</span> =&gt; <span class="stringliteral">&#39;composer&#39;</span>, <span class="stringliteral">&#39;url&#39;</span> =&gt; <span class="stringliteral">&#39;https://packagist.drupal-composer.org&#39;</span>),</div>
<div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;    ),</div>
<div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;    <span class="stringliteral">&#39;require&#39;</span> =&gt; $projects,</div>
<div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;    <span class="stringliteral">&#39;minimum-stability&#39;</span> =&gt; <span class="stringliteral">&#39;dev&#39;</span>,</div>
<div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;    <span class="stringliteral">&#39;prefer-stable&#39;</span> =&gt; TRUE,</div>
<div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;    <span class="stringliteral">&#39;extra&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;      <span class="stringliteral">&#39;installer-paths&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;        <span class="stringliteral">&#39;core&#39;</span> =&gt; array(<span class="stringliteral">&#39;type:drupal-core&#39;</span>),</div>
<div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;        <span class="stringliteral">&#39;docroot/modules/contrib/{$name}&#39;</span> =&gt; array(<span class="stringliteral">&#39;type:drupal-module&#39;</span>),</div>
<div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;        <span class="stringliteral">&#39;docroot/profiles/contrib/{$name}&#39;</span> =&gt; array(<span class="stringliteral">&#39;type:drupal-profile&#39;</span>),</div>
<div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;        <span class="stringliteral">&#39;docroot/themes/contrib/{$name}&#39;</span> =&gt; array(<span class="stringliteral">&#39;type:drupal-theme&#39;</span>),</div>
<div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;        <span class="stringliteral">&#39;drush/contrib/{$name}&#39;</span> =&gt; array(<span class="stringliteral">&#39;type:drupal-drush&#39;</span>),</div>
<div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;      ),</div>
<div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;      <span class="stringliteral">&#39;patches&#39;</span> =&gt; $patches,</div>
<div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;    ),</div>
<div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;  );</div>
<div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;</div>
<div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;  $output = json_encode($output, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);</div>
<div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;</div>
<div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;  <span class="keywordflow">return</span> $output;</div>
<div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;}</div>
<div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;<span class="comment"> * Converts a make file project array into a composer project version string.</span></div>
<div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;<span class="comment"> * @param array $original_project</span></div>
<div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;<span class="comment"> *   A project dependency, as defined in a make file.</span></div>
<div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;<span class="comment"> * @param string $core_major_version</span></div>
<div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;<span class="comment"> *   The major core version. E.g., 6, 7, 8, etc.</span></div>
<div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;<span class="comment"> * @return string</span></div>
<div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;<span class="comment"> *   The project version, in composer syntax.</span></div>
<div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00560"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#a44f86e03d7e10c4da9b10aab856ec845">  560</a></span>&#160;<span class="keyword">function</span> <a class="code" href="make_8drush_8inc.html#a44f86e03d7e10c4da9b10aab856ec845">drush_make_convert_project_to_composer</a>($original_project, $core_major_version) {</div>
<div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;  <span class="comment">// Typical specified version with major version &quot;x&quot; removed.</span></div>
<div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;  <span class="keywordflow">if</span> (!empty($original_project[<span class="stringliteral">&#39;version&#39;</span>])) {</div>
<div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;    $version = str_replace(<span class="charliteral">&#39;x&#39;</span>, <span class="charliteral">&#39;0&#39;</span>, $original_project[<span class="stringliteral">&#39;version&#39;</span>]);</div>
<div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;  }</div>
<div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;  <span class="comment">// Git branch or revision.</span></div>
<div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;  elseif (!empty($original_project[<span class="stringliteral">&#39;download&#39;</span>])) {</div>
<div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;    <span class="keywordflow">switch</span> ($original_project[<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;type&#39;</span>]) {</div>
<div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;      <span class="keywordflow">case</span> <span class="stringliteral">&#39;git&#39;</span>:</div>
<div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;        <span class="keywordflow">if</span> (!empty($original_project[<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;branch&#39;</span>])) {</div>
<div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;          <span class="comment">// @todo Determine if &#39;0&#39; will always be correct.</span></div>
<div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;          $version = str_replace(<span class="charliteral">&#39;x&#39;</span>, <span class="charliteral">&#39;0&#39;</span>, $original_project[<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;branch&#39;</span>]);</div>
<div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;        }</div>
<div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;        <span class="keywordflow">if</span> (!empty($original_project[<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;tag&#39;</span>])) {</div>
<div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;          <span class="comment">// @todo Determine if &#39;0&#39; will always be correct.</span></div>
<div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;          $version = str_replace(<span class="charliteral">&#39;x&#39;</span>, <span class="charliteral">&#39;0&#39;</span>, $original_project[<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;tag&#39;</span>]);</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;        <span class="keywordflow">if</span> (!empty($project[<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;revision&#39;</span>])) {</div>
<div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;          $version .= <span class="charliteral">&#39;#&#39;</span> . $original_project[<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;revision&#39;</span>];</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="keywordflow">break</span>;</div>
<div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;</div>
<div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;      <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;        $version = <span class="stringliteral">&#39;Enter correct project name and version number&#39;</span>;</div>
<div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;        <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;    }</div>
<div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;  }</div>
<div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;</div>
<div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;  $version = <span class="stringliteral">&quot;$core_major_version.&quot;</span> . $version;</div>
<div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;</div>
<div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;  <span class="keywordflow">return</span> $version;</div>
<div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;}</div>
<div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;<span class="comment"> * Converts a composer.lock array into a traditional drush make array.</span></div>
<div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;<span class="comment"> * @param array $composer_lock</span></div>
<div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;<span class="comment"> *   An array of composer.lock data.</span></div>
<div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;<span class="comment"> * @param array $composer_json</span></div>
<div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;<span class="comment"> *   An array of composer.json data.</span></div>
<div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;<span class="comment"> * @return array A traditional drush make info array.</span></div>
<div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;<span class="comment"> * A traditional drush make info array.</span></div>
<div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00605"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#ab3654f07e7c7f798635ed28ba3ec1c72">  605</a></span>&#160;<span class="keyword">function</span> <a class="code" href="make_8drush_8inc.html#ab3654f07e7c7f798635ed28ba3ec1c72">drush_make_convert_composer_to_make</a>($composer_lock, $composer_json) {</div>
<div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;  $info = array(</div>
<div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;    <span class="stringliteral">&#39;core&#39;</span> =&gt; array(),</div>
<div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;    <span class="stringliteral">&#39;api&#39;</span> =&gt; 2,</div>
<div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;    <span class="stringliteral">&#39;defaults&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;      <span class="stringliteral">&#39;projects&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;        <span class="stringliteral">&#39;subdir&#39;</span> =&gt; <span class="stringliteral">&#39;contrib&#39;</span>,</div>
<div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;      ),</div>
<div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;    ),</div>
<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;    <span class="stringliteral">&#39;projects&#39;</span> =&gt; array(),</div>
<div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;    <span class="stringliteral">&#39;libraries&#39;</span> =&gt; array(),</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="comment">// The make generation function requires that projects be grouped by type,</span></div>
<div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;  <span class="comment">// or else duplicative project groups will be created.</span></div>
<div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;  $core = array();</div>
<div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;  $modules = array();</div>
<div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;  $themes = array();</div>
<div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;  $profiles = array();</div>
<div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;  $libraries = array();</div>
<div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;  <span class="keywordflow">foreach</span> ($composer_lock[<span class="stringliteral">&#39;packages&#39;</span>] as $key =&gt; $package) {</div>
<div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;    <span class="keywordflow">if</span> (strpos($package[<span class="stringliteral">&#39;name&#39;</span>], <span class="stringliteral">&#39;drupal/&#39;</span>) === 0 &amp;&amp; in_array($package[<span class="stringliteral">&#39;type&#39;</span>], array(<span class="stringliteral">&#39;drupal-core&#39;</span>, <span class="stringliteral">&#39;drupal-theme&#39;</span>, <span class="stringliteral">&#39;drupal-module&#39;</span>, <span class="stringliteral">&#39;drupal-profile&#39;</span>))) {</div>
<div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;      $project_name = str_replace(<span class="stringliteral">&#39;drupal/&#39;</span>, <span class="stringliteral">&#39;&#39;</span>, $package[<span class="stringliteral">&#39;name&#39;</span>]);</div>
<div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;</div>
<div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;      <span class="keywordflow">switch</span> ($package[<span class="stringliteral">&#39;type&#39;</span>]) {</div>
<div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;        <span class="keywordflow">case</span> <span class="stringliteral">&#39;drupal-core&#39;</span>:</div>
<div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;          $project_name = <span class="stringliteral">&#39;drupal&#39;</span>;</div>
<div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;          $group =&amp; $core;</div>
<div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;          $group[$project_name][<span class="stringliteral">&#39;type&#39;</span>] = <span class="stringliteral">&#39;core&#39;</span>;</div>
<div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;          $info[<span class="stringliteral">&#39;core&#39;</span>] = substr($package[<span class="stringliteral">&#39;version&#39;</span>], 0, 1) . <span class="stringliteral">&#39;.x&#39;</span>;</div>
<div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;          <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;        <span class="keywordflow">case</span> <span class="stringliteral">&#39;drupal-theme&#39;</span>:</div>
<div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;          $group =&amp; $themes;</div>
<div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;          $group[$project_name][<span class="stringliteral">&#39;type&#39;</span>] = <span class="stringliteral">&#39;theme&#39;</span>;</div>
<div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;          <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;        <span class="keywordflow">case</span> <span class="stringliteral">&#39;drupal-module&#39;</span>:</div>
<div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;          $group =&amp; $modules;</div>
<div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;          $group[$project_name][<span class="stringliteral">&#39;type&#39;</span>] = <span class="stringliteral">&#39;module&#39;</span>;</div>
<div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;          <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;        <span class="keywordflow">case</span> <span class="stringliteral">&#39;drupal-profile&#39;</span>:</div>
<div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;          $group =&amp; $profiles;</div>
<div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;          $group[$project_name][<span class="stringliteral">&#39;type&#39;</span>] = <span class="stringliteral">&#39;profile&#39;</span>;</div>
<div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;          <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;      }</div>
<div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;</div>
<div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;      $group[$project_name][<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="l00651"></a><span class="lineno">  651</span>&#160;      $group[$project_name][<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;url&#39;</span>] = $package[<span class="stringliteral">&#39;source&#39;</span>][<span class="stringliteral">&#39;url&#39;</span>];</div>
<div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;      <span class="comment">// Dev versions should use git branch + revision, otherwise a tag is used.</span></div>
<div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;      <span class="keywordflow">if</span> (strstr($package[<span class="stringliteral">&#39;version&#39;</span>], <span class="stringliteral">&#39;dev&#39;</span>)) {</div>
<div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;        <span class="comment">// &#39;dev-&#39; prefix indicates a branch-alias. Stripping the dev prefix from</span></div>
<div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;        <span class="comment">// the branch name is sufficient.</span></div>
<div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;        <span class="comment">// @see https://getcomposer.org/doc/articles/aliases.md</span></div>
<div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;        <span class="keywordflow">if</span> (strpos($package[<span class="stringliteral">&#39;version&#39;</span>], <span class="stringliteral">&#39;dev-&#39;</span>) === 0) {</div>
<div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;          $group[$project_name][<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;branch&#39;</span>] = substr($package[<span class="stringliteral">&#39;version&#39;</span>], 4);</div>
<div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;        }</div>
<div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;        <span class="comment">// Otherwise, leave as is. Version may already use &#39;-dev&#39; suffix.</span></div>
<div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;        <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;          $group[$project_name][<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;branch&#39;</span>] = $package[<span class="stringliteral">&#39;version&#39;</span>];</div>
<div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;        }</div>
<div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;        $group[$project_name][<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;revision&#39;</span>] = $package[<span class="stringliteral">&#39;source&#39;</span>][<span class="stringliteral">&#39;reference&#39;</span>];</div>
<div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;      }</div>
<div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;      elseif ($package[<span class="stringliteral">&#39;type&#39;</span>] == <span class="stringliteral">&#39;drupal-core&#39;</span>) {</div>
<div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;        <span class="comment">// For 7.x tags, replace 7.xx.0 with 7.xx.</span></div>
<div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;        <span class="keywordflow">if</span> ($info[<span class="stringliteral">&#39;core&#39;</span>] == <span class="stringliteral">&#39;7.x&#39;</span>) {</div>
<div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;          $group[$project_name][<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;tag&#39;</span>]= substr($package[<span class="stringliteral">&#39;version&#39;</span>], 0, 4);</div>
<div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;        }</div>
<div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;        <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;          $group[$project_name][<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;tag&#39;</span>] = $package[<span class="stringliteral">&#39;version&#39;</span>];</div>
<div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;        }</div>
<div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;      }</div>
<div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;      <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;        <span class="comment">// Make tag versioning drupal-friendly. 8.1.0-alpha1 =&gt; 8.x-1.0-alpha1.</span></div>
<div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;        $major_version = substr($package[<span class="stringliteral">&#39;version&#39;</span>], 0 ,1);</div>
<div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;        $the_rest = substr($package[<span class="stringliteral">&#39;version&#39;</span>], 2, strlen($package[<span class="stringliteral">&#39;version&#39;</span>]));</div>
<div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;        $group[$project_name][<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;tag&#39;</span>] = <span class="stringliteral">&quot;$major_version.x-$the_rest&quot;</span>;</div>
<div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;      }</div>
<div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;</div>
<div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;      <span class="keywordflow">if</span> (!empty($package[<span class="stringliteral">&#39;extra&#39;</span>][<span class="stringliteral">&#39;patches_applied&#39;</span>])) {</div>
<div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;        <span class="keywordflow">foreach</span> ($package[<span class="stringliteral">&#39;extra&#39;</span>][<span class="stringliteral">&#39;patches_applied&#39;</span>] as $desc =&gt; $url) {</div>
<div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;          $group[$project_name][<span class="stringliteral">&#39;patch&#39;</span>][] = $url;</div>
<div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;        }</div>
<div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;      }</div>
<div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;    }</div>
<div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;    <span class="comment">// Include any non-drupal libraries that exist in both .lock and .json.</span></div>
<div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;    elseif (!in_array($package[<span class="stringliteral">&#39;type&#39;</span>], array(<span class="stringliteral">&#39;composer-plugin&#39;</span>, <span class="stringliteral">&#39;metapackage&#39;</span>))</div>
<div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;      &amp;&amp; array_key_exists($package[<span class="stringliteral">&#39;name&#39;</span>], $composer_json[<span class="stringliteral">&#39;require&#39;</span>])) {</div>
<div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;      $project_name = $package[<span class="stringliteral">&#39;name&#39;</span>];</div>
<div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;      $libraries[$project_name][<span class="stringliteral">&#39;type&#39;</span>] = <span class="stringliteral">&#39;library&#39;</span>;</div>
<div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;      $libraries[$project_name][<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="l00694"></a><span class="lineno">  694</span>&#160;      $libraries[$project_name][<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;url&#39;</span>] = $package[<span class="stringliteral">&#39;source&#39;</span>][<span class="stringliteral">&#39;url&#39;</span>];</div>
<div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;      $libraries[$project_name][<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;branch&#39;</span>] = $package[<span class="stringliteral">&#39;version&#39;</span>];</div>
<div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;      $libraries[$project_name][<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;revision&#39;</span>] = $package[<span class="stringliteral">&#39;source&#39;</span>][<span class="stringliteral">&#39;reference&#39;</span>];</div>
<div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;    }</div>
<div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;  }</div>
<div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;</div>
<div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;  $info[<span class="stringliteral">&#39;projects&#39;</span>] = $core + $modules + $themes;</div>
<div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;  $info[<span class="stringliteral">&#39;libraries&#39;</span>] = $libraries;</div>
<div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;</div>
<div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;  <span class="keywordflow">return</span> $info;</div>
<div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;}</div>
<div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;<span class="comment"> * Drush callback: hidden file to process an individual project.</span></div>
<div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;<span class="comment"> * @param string $directory</span></div>
<div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;<span class="comment"> *   Directory where the project is being built.</span></div>
<div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00712"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#ad9b2f2e15282d634a58229f30d819bde">  712</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="l00713"></a><span class="lineno">  713</span>&#160;  <a class="code" href="engines_8inc.html#a34ff5c6bb43688e04d0647eddf48d553">drush_get_engine</a>(<span class="stringliteral">&#39;release_info&#39;</span>);</div>
<div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;</div>
<div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;  <span class="comment">// Set the temporary directory.</span></div>
<div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;  <a class="code" href="make_8utilities_8inc.html#ab3c72a6d8be958f40fc0cbcca29a183b">make_tmp</a>(TRUE, $directory);</div>
<div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;  <span class="keywordflow">if</span> (!$projects_location = <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;projects-location&#39;</span>)) {</div>
<div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="group__errorhandling.html#ga23fe9e1e8c1e5ade39256106044b6da4">drush_set_error</a>(<span class="stringliteral">&#39;MAKE-PROCESS&#39;</span>, <a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&#39;No projects passed to drush_make_process&#39;</span>));</div>
<div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;  }</div>
<div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;  $projects = json_decode(file_get_contents($projects_location), TRUE);</div>
<div class="line"><a name="l00721"></a><span class="lineno">  721</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="l00722"></a><span class="lineno">  722</span>&#160;</div>
<div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;  <span class="keywordflow">foreach</span> ($projects as $project) {</div>
<div class="line"><a name="l00724"></a><span class="lineno">  724</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="l00725"></a><span class="lineno">  725</span>&#160;      $instance-&gt;setManifest($manifest);</div>
<div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;      $instance-&gt;make();</div>
<div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;    }</div>
<div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;    <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00729"></a><span class="lineno">  729</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="l00730"></a><span class="lineno">  730</span>&#160;    }</div>
<div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;  }</div>
<div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;}</div>
<div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;<span class="comment"> * Gather additional data on all projects specified in the make file.</span></div>
<div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00737"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#ac8b7447fddc5e9edc48acd98aa680fe5">  737</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="l00738"></a><span class="lineno">  738</span>&#160;  $release_info = <a class="code" href="engines_8inc.html#a34ff5c6bb43688e04d0647eddf48d553">drush_get_engine</a>(<span class="stringliteral">&#39;release_info&#39;</span>);</div>
<div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;</div>
<div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;  <span class="comment">// Nothing to make if the project list is empty. Maybe complain about it.</span></div>
<div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;  <span class="keywordflow">if</span> (empty($info[<span class="stringliteral">&#39;projects&#39;</span>])) {</div>
<div class="line"><a name="l00742"></a><span class="lineno">  742</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="l00743"></a><span class="lineno">  743</span>&#160;      <span class="keywordflow">return</span> TRUE;</div>
<div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;    }</div>
<div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;    <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;      <span class="keywordflow">return</span> <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="l00747"></a><span class="lineno">  747</span>&#160;    }</div>
<div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;  }</div>
<div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;</div>
<div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;  <span class="comment">// Obtain translations to download along with the projects.</span></div>
<div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;  $translations = array();</div>
<div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;  <span class="keywordflow">if</span> (isset($info[<span class="stringliteral">&#39;translations&#39;</span>])) {</div>
<div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;    $translations = $info[<span class="stringliteral">&#39;translations&#39;</span>];</div>
<div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;  }</div>
<div class="line"><a name="l00755"></a><span class="lineno">  755</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="l00756"></a><span class="lineno">  756</span>&#160;    $translations = array_merge(explode(<span class="charliteral">&#39;,&#39;</span>, $arg_translations), $translations);</div>
<div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;  }</div>
<div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;</div>
<div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;  <span class="comment">// Normalize projects.</span></div>
<div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;  $projects = array();</div>
<div class="line"><a name="l00761"></a><span class="lineno">  761</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="l00762"></a><span class="lineno">  762</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="l00763"></a><span class="lineno">  763</span>&#160;    <span class="comment">// Merge the known data onto the project info.</span></div>
<div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;    $project += array(</div>
<div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;      <span class="stringliteral">&#39;name&#39;</span>                =&gt; $key,</div>
<div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;      <span class="stringliteral">&#39;type&#39;</span>                =&gt; <span class="stringliteral">&#39;module&#39;</span>,</div>
<div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;      <span class="stringliteral">&#39;core&#39;</span>                =&gt; $info[<span class="stringliteral">&#39;core&#39;</span>],</div>
<div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;      <span class="stringliteral">&#39;translations&#39;</span>        =&gt; $translations,</div>
<div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;      <span class="stringliteral">&#39;build_path&#39;</span>          =&gt; $build_path,</div>
<div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;      <span class="stringliteral">&#39;contrib_destination&#39;</span> =&gt; $contrib_destination,</div>
<div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;      <span class="stringliteral">&#39;version&#39;</span>             =&gt; <span class="stringliteral">&#39;&#39;</span>,</div>
<div class="line"><a name="l00772"></a><span class="lineno">  772</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>, ReleaseInfo::DEFAULT_URL),</div>
<div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;      <span class="stringliteral">&#39;subdir&#39;</span>              =&gt; <span class="stringliteral">&#39;&#39;</span>,</div>
<div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;      <span class="stringliteral">&#39;directory_name&#39;</span>      =&gt; <span class="stringliteral">&#39;&#39;</span>,</div>
<div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;      <span class="stringliteral">&#39;make_directory&#39;</span>      =&gt; $make_dir,</div>
<div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;      <span class="stringliteral">&#39;options&#39;</span>             =&gt; array(),</div>
<div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;    );</div>
<div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;    <span class="comment">// MD5 Checksum.</span></div>
<div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;    <span class="keywordflow">if</span> ($ignore_checksums) {</div>
<div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;      unset($project[<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;md5&#39;</span>]);</div>
<div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;    }</div>
<div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;    elseif (!empty($project[<span class="stringliteral">&#39;md5&#39;</span>])) {</div>
<div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;      $project[<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;md5&#39;</span>] = $project[<span class="stringliteral">&#39;md5&#39;</span>];</div>
<div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;    }</div>
<div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;</div>
<div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;    <span class="comment">// If download components are specified, but not the download</span></div>
<div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;    <span class="comment">// type, default to git.</span></div>
<div class="line"><a name="l00788"></a><span class="lineno">  788</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="l00789"></a><span class="lineno">  789</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="l00790"></a><span class="lineno">  790</span>&#160;    }</div>
<div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;    <span class="comment">// Localization server.</span></div>
<div class="line"><a name="l00792"></a><span class="lineno">  792</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>] == ReleaseInfo::DEFAULT_URL)) {</div>
<div class="line"><a name="l00793"></a><span class="lineno">  793</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="l00794"></a><span class="lineno">  794</span>&#160;    }</div>
<div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;    <span class="comment">// Classify projects in core or contrib.</span></div>
<div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;    <span class="keywordflow">if</span> ($project[<span class="stringliteral">&#39;type&#39;</span>] == <span class="stringliteral">&#39;core&#39;</span>) {</div>
<div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;      $project[<span class="stringliteral">&#39;download_type&#39;</span>] = <span class="stringliteral">&#39;core&#39;</span>;</div>
<div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;    }</div>
<div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;    elseif ($project[<span class="stringliteral">&#39;location&#39;</span>] != ReleaseInfo::DEFAULT_URL || !isset($project[<span class="stringliteral">&#39;download&#39;</span>])) {</div>
<div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;      $request = <a class="code" href="make_8drush_8inc.html#a417d71dedd721df1232702d672ecde59">make_prepare_request</a>($project);</div>
<div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;      $is_core = $release_info-&gt;checkProject($request, <span class="stringliteral">&#39;core&#39;</span>);</div>
<div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;      $project[<span class="stringliteral">&#39;download_type&#39;</span>] = ($is_core ? <span class="stringliteral">&#39;core&#39;</span> : <span class="stringliteral">&#39;contrib&#39;</span>);</div>
<div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;      $project[<span class="stringliteral">&#39;type&#39;</span>] = $is_core ? <span class="stringliteral">&#39;core&#39;</span> : $project[<span class="stringliteral">&#39;type&#39;</span>];</div>
<div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;    }</div>
<div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;    <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00806"></a><span class="lineno">  806</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="l00807"></a><span class="lineno">  807</span>&#160;    }</div>
<div class="line"><a name="l00808"></a><span class="lineno">  808</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="l00809"></a><span class="lineno">  809</span>&#160;  }</div>
<div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;</div>
<div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;  <span class="comment">// Verify there&#39;re enough cores, but not too many.</span></div>
<div class="line"><a name="l00812"></a><span class="lineno">  812</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="l00813"></a><span class="lineno">  813</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="l00814"></a><span class="lineno">  814</span>&#160;    unset($projects[<span class="stringliteral">&#39;core&#39;</span>]);</div>
<div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;  }</div>
<div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;  elseif ($cores == 0 &amp;&amp; !$recursion) {</div>
<div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;    <span class="keywordflow">return</span> <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="l00818"></a><span class="lineno">  818</span>&#160;  }</div>
<div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;  elseif ($cores == 1 &amp;&amp; $recursion) {</div>
<div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;    unset($projects[<span class="stringliteral">&#39;core&#39;</span>]);</div>
<div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;  }</div>
<div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;  elseif ($cores &gt; 1) {</div>
<div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;    <span class="keywordflow">return</span> <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="l00824"></a><span class="lineno">  824</span>&#160;  }</div>
<div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;</div>
<div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;  <span class="comment">// Set download type = pm for suitable projects.</span></div>
<div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;  <span class="keywordflow">foreach</span> (array_keys($projects) as $project_type) {</div>
<div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;    <span class="keywordflow">foreach</span> ($projects[$project_type] as $project) {</div>
<div class="line"><a name="l00829"></a><span class="lineno">  829</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="l00830"></a><span class="lineno">  830</span>&#160;        $request = <a class="code" href="make_8drush_8inc.html#a417d71dedd721df1232702d672ecde59">make_prepare_request</a>($project, $project_type);</div>
<div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;        $release = $release_info-&gt;selectReleaseBasedOnStrategy($request, <span class="stringliteral">&#39;&#39;</span>, <span class="stringliteral">&#39;ignore&#39;</span>);</div>
<div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;        <span class="keywordflow">if</span> ($release === FALSE) {</div>
<div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;          <span class="keywordflow">return</span> FALSE;</div>
<div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;        }</div>
<div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;        <span class="comment">// Override default project type with data from update service.</span></div>
<div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;        <span class="keywordflow">if</span> (!isset($info[<span class="stringliteral">&#39;projects&#39;</span>][$project[<span class="stringliteral">&#39;name&#39;</span>]][<span class="stringliteral">&#39;type&#39;</span>])) {</div>
<div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;          $project[<span class="stringliteral">&#39;type&#39;</span>] = $release_info-&gt;get($request)-&gt;getType();</div>
<div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;        }</div>
<div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;</div>
<div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;        <span class="keywordflow">if</span> (!isset($project[<span class="stringliteral">&#39;download&#39;</span>])) {</div>
<div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;          $project[<span class="stringliteral">&#39;download&#39;</span>] = array(</div>
<div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;            <span class="stringliteral">&#39;type&#39;</span> =&gt; <span class="stringliteral">&#39;pm&#39;</span>,</div>
<div class="line"><a name="l00843"></a><span class="lineno">  843</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="l00844"></a><span class="lineno">  844</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="l00845"></a><span class="lineno">  845</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="l00846"></a><span class="lineno">  846</span>&#160;          );</div>
<div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;        }</div>
<div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;      }</div>
<div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;      $projects[$project_type][$project[<span class="stringliteral">&#39;name&#39;</span>]] = $project;</div>
<div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;    }</div>
<div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;  }</div>
<div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;  <span class="keywordflow">if</span> (!$recursion) {</div>
<div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;    $projects += array(</div>
<div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;      <span class="stringliteral">&#39;core&#39;</span> =&gt; array(),</div>
<div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;      <span class="stringliteral">&#39;contrib&#39;</span> =&gt; array(),</div>
<div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;    );</div>
<div class="line"><a name="l00857"></a><span class="lineno">  857</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="l00858"></a><span class="lineno">  858</span>&#160;  }</div>
<div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;  <span class="keywordflow">return</span> $projects;</div>
<div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;}</div>
<div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;<span class="comment"> * Process all projects specified in the make file.</span></div>
<div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00865"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#a7f6c382e030da87fc401f133edd22f3b">  865</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="l00866"></a><span class="lineno">  866</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="l00867"></a><span class="lineno">  867</span>&#160;  <span class="comment">// Abort if there was an error processing projects.</span></div>
<div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;  <span class="keywordflow">if</span> ($projects === FALSE) {</div>
<div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;    <span class="keywordflow">return</span> FALSE;</div>
<div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;  }</div>
<div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;</div>
<div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;  <span class="comment">// Core is built in place, rather than using make-process.</span></div>
<div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;  <span class="keywordflow">if</span> (!empty($projects[<span class="stringliteral">&#39;core&#39;</span>]) &amp;&amp; count($projects[<span class="stringliteral">&#39;core&#39;</span>])) {</div>
<div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;    $project = current($projects[<span class="stringliteral">&#39;core&#39;</span>]);</div>
<div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;    $project = <a class="code" href="classDrushMakeProject.html#afedb73c8a81625f02d8c25fb81df295d">DrushMakeProject::getInstance</a>(<span class="stringliteral">&#39;core&#39;</span>, $project);</div>
<div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;    $project-&gt;make();</div>
<div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160;  }</div>
<div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;</div>
<div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;  <span class="comment">// Process all projects concurrently using make-process.</span></div>
<div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;  <span class="keywordflow">if</span> (isset($projects[<span class="stringliteral">&#39;contrib&#39;</span>])) {</div>
<div class="line"><a name="l00881"></a><span class="lineno">  881</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="l00882"></a><span class="lineno">  882</span>&#160;    <span class="comment">// Generate $concurrency sub-processes to do the actual work.</span></div>
<div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;    $invocations = array();</div>
<div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;    $thread = 0;</div>
<div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160;    <span class="keywordflow">foreach</span> ($projects[<span class="stringliteral">&#39;contrib&#39;</span>] as $project) {</div>
<div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;      $thread = ++$thread % $concurrency;</div>
<div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;      <span class="comment">// Ensure that we&#39;ve set this sub-process up.</span></div>
<div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;      <span class="keywordflow">if</span> (!isset($invocations[$thread])) {</div>
<div class="line"><a name="l00889"></a><span class="lineno">  889</span>&#160;        $invocations[$thread] = array(</div>
<div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;          <span class="stringliteral">&#39;args&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;            <a class="code" href="make_8utilities_8inc.html#ab3c72a6d8be958f40fc0cbcca29a183b">make_tmp</a>(),</div>
<div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;          ),</div>
<div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;          <span class="stringliteral">&#39;options&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;            <span class="stringliteral">&#39;projects&#39;</span> =&gt; array(),</div>
<div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;          ),</div>
<div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;          <span class="stringliteral">&#39;site&#39;</span> =&gt; array(),</div>
<div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;        );</div>
<div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;      }</div>
<div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;      <span class="comment">// Add the project to this sub-process.</span></div>
<div class="line"><a name="l00900"></a><span class="lineno">  900</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="l00901"></a><span class="lineno">  901</span>&#160;      <span class="comment">// Add the manifest so recursive downloads do not override projects.</span></div>
<div class="line"><a name="l00902"></a><span class="lineno">  902</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="l00903"></a><span class="lineno">  903</span>&#160;    }</div>
<div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;    <span class="keywordflow">if</span> (!empty($invocations)) {</div>
<div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;      <span class="comment">// Backend options.</span></div>
<div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;      $backend_options = array(</div>
<div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;        <span class="stringliteral">&#39;concurrency&#39;</span> =&gt; $concurrency,</div>
<div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;        <span class="stringliteral">&#39;method&#39;</span> =&gt; <span class="stringliteral">&#39;POST&#39;</span>,</div>
<div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;      );</div>
<div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;</div>
<div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;      <span class="comment">// Store projects in temporary files since passing this much data on the</span></div>
<div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;      <span class="comment">// pipe buffer can break on certain systems.</span></div>
<div class="line"><a name="l00913"></a><span class="lineno">  913</span>&#160;      <a class="code" href="make_8drush_8inc.html#a0d7b169ade66d709a769dcf6df92b893">_make_write_project_json</a>($invocations);</div>
<div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;</div>
<div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;      $common_options = <a class="code" href="group__dispatching.html#ga9b1a98376983ee529fc868ef4280b12d">drush_redispatch_get_options</a>();</div>
<div class="line"><a name="l00916"></a><span class="lineno">  916</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="l00917"></a><span class="lineno">  917</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="l00918"></a><span class="lineno">  918</span>&#160;      <span class="comment">// Package handler should use &#39;wget&#39;.</span></div>
<div class="line"><a name="l00919"></a><span class="lineno">  919</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="l00920"></a><span class="lineno">  920</span>&#160;</div>
<div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;      <span class="comment">// Avoid any prompts from CLI.</span></div>
<div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;      $common_options[<span class="stringliteral">&#39;yes&#39;</span>] = TRUE;</div>
<div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;</div>
<div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;      <span class="comment">// Use cache unless explicitly turned off.</span></div>
<div class="line"><a name="l00925"></a><span class="lineno">  925</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="l00926"></a><span class="lineno">  926</span>&#160;        $common_options[<span class="stringliteral">&#39;cache&#39;</span>] = TRUE;</div>
<div class="line"><a name="l00927"></a><span class="lineno">  927</span>&#160;      }</div>
<div class="line"><a name="l00928"></a><span class="lineno">  928</span>&#160;      <span class="comment">// Unless --verbose or --debug are passed, quiter backend output.</span></div>
<div class="line"><a name="l00929"></a><span class="lineno">  929</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="l00930"></a><span class="lineno">  930</span>&#160;        $backend_options[<span class="stringliteral">&#39;#output-label&#39;</span>] = FALSE;</div>
<div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;        $backend_options[<span class="stringliteral">&#39;integrate&#39;</span>] = TRUE;</div>
<div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;      }</div>
<div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;      $results = <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="l00934"></a><span class="lineno">  934</span>&#160;      <span class="keywordflow">if</span> (count($results[<span class="stringliteral">&#39;error_log&#39;</span>])) {</div>
<div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;        <span class="keywordflow">return</span> FALSE;</div>
<div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;      }</div>
<div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;    }</div>
<div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;  }</div>
<div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;  <span class="keywordflow">return</span> TRUE;</div>
<div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;}</div>
<div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;<span class="comment"> * Writes out project data to temporary files.</span></div>
<div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;<span class="comment"> * @param array &amp;$invocations</span></div>
<div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;<span class="comment"> *   An array containing projects sorted by thread.</span></div>
<div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00948"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#a0d7b169ade66d709a769dcf6df92b893">  948</a></span>&#160;<span class="keyword">function</span> <a class="code" href="make_8drush_8inc.html#a0d7b169ade66d709a769dcf6df92b893">_make_write_project_json</a>(array &amp;$invocations) {</div>
<div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;  <span class="keywordflow">foreach</span> ($invocations as $thread =&gt; $info) {</div>
<div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;    $projects = $info[<span class="stringliteral">&#39;options&#39;</span>][<span class="stringliteral">&#39;projects&#39;</span>];</div>
<div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160;    unset($invocations[$thread][<span class="stringliteral">&#39;options&#39;</span>][<span class="stringliteral">&#39;projects&#39;</span>]);</div>
<div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;    $temp_file = <a class="code" href="group__filesystemfunctions.html#ga01729c5c432a2f30974966d888146d09">drush_tempnam</a>(<span class="stringliteral">&#39;make_projects&#39;</span>);</div>
<div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160;    file_put_contents($temp_file, json_encode($projects));</div>
<div class="line"><a name="l00954"></a><span class="lineno">  954</span>&#160;    $invocations[$thread][<span class="stringliteral">&#39;options&#39;</span>][<span class="stringliteral">&#39;projects-location&#39;</span>] = $temp_file;</div>
<div class="line"><a name="l00955"></a><span class="lineno">  955</span>&#160;  }</div>
<div class="line"><a name="l00956"></a><span class="lineno">  956</span>&#160;}</div>
<div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160;<span class="comment"> * Gather additional data on all libraries specified in the make file.</span></div>
<div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00961"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#a0c50fe5a34ad09671d175614fc27e485">  961</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="l00962"></a><span class="lineno">  962</span>&#160;  <span class="comment">// Nothing to make if the libraries list is empty.</span></div>
<div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;  <span class="keywordflow">if</span> (empty($info[<span class="stringliteral">&#39;libraries&#39;</span>])) {</div>
<div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;  }</div>
<div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;</div>
<div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;  $libraries = array();</div>
<div class="line"><a name="l00968"></a><span class="lineno">  968</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="l00969"></a><span class="lineno">  969</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="l00970"></a><span class="lineno">  970</span>&#160;    <span class="keywordflow">if</span> (!is_string($key) || !is_array($library)) {</div>
<div class="line"><a name="l00971"></a><span class="lineno">  971</span>&#160;      <span class="comment">// TODO Print a prettier message.</span></div>
<div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;      <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00973"></a><span class="lineno">  973</span>&#160;    }</div>
<div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;    <span class="comment">// Merge the known data onto the library info.</span></div>
<div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160;    $library += array(</div>
<div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;      <span class="stringliteral">&#39;name&#39;</span>                =&gt; $key,</div>
<div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160;      <span class="stringliteral">&#39;core&#39;</span>                =&gt; $info[<span class="stringliteral">&#39;core&#39;</span>],</div>
<div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;      <span class="stringliteral">&#39;build_path&#39;</span>          =&gt; $build_path,</div>
<div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160;      <span class="stringliteral">&#39;contrib_destination&#39;</span> =&gt; $contrib_destination,</div>
<div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;      <span class="stringliteral">&#39;subdir&#39;</span>              =&gt; <span class="stringliteral">&#39;&#39;</span>,</div>
<div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;      <span class="stringliteral">&#39;directory_name&#39;</span>      =&gt; $key,</div>
<div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;      <span class="stringliteral">&#39;make_directory&#39;</span>      =&gt; $make_dir,</div>
<div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160;    );</div>
<div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;    <span class="keywordflow">if</span> ($ignore_checksums) {</div>
<div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;      unset($library[<span class="stringliteral">&#39;download&#39;</span>][<span class="stringliteral">&#39;md5&#39;</span>]);</div>
<div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;    }</div>
<div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;    $libraries[$key] = $library;</div>
<div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;  }</div>
<div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;  <span class="keywordflow">if</span> (!$recursion) {</div>
<div class="line"><a name="l00990"></a><span class="lineno">  990</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="l00991"></a><span class="lineno">  991</span>&#160;  }</div>
<div class="line"><a name="l00992"></a><span class="lineno">  992</span>&#160;  <span class="keywordflow">return</span> $libraries;</div>
<div class="line"><a name="l00993"></a><span class="lineno">  993</span>&#160;}</div>
<div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00995"></a><span class="lineno">  995</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;<span class="comment"> * Process all libraries specified in the make file.</span></div>
<div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00998"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#ae70f3ae23a4dcbb5f8816636d2adb4c2">  998</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="l00999"></a><span class="lineno">  999</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="l01000"></a><span class="lineno"> 1000</span>&#160;  <span class="keywordflow">if</span> (empty($libraries)) {</div>
<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;  }</div>
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;  <span class="keywordflow">foreach</span> ($libraries as $key =&gt; $library) {</div>
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</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="l01005"></a><span class="lineno"> 1005</span>&#160;    $class-&gt;make();</div>
<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;  }</div>
<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;}</div>
<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;<span class="comment"> * The path where the final build will be placed.</span></div>
<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01012"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#ae117ecd8db6105b9778e7c6f5f74e40e"> 1012</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="l01013"></a><span class="lineno"> 1013</span>&#160;  <span class="keyword">static</span> $saved_path;</div>
<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;  <span class="keywordflow">if</span> (isset($saved_path)) {</div>
<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;    <span class="keywordflow">return</span> $saved_path;</div>
<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;  }</div>
<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;</div>
<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;  <span class="comment">// Determine the base of the build.</span></div>
<div class="line"><a name="l01019"></a><span class="lineno"> 1019</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="l01020"></a><span class="lineno"> 1020</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="l01021"></a><span class="lineno"> 1021</span>&#160;  }</div>
<div class="line"><a name="l01022"></a><span class="lineno"> 1022</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="l01023"></a><span class="lineno"> 1023</span>&#160;    $build_path = rtrim($build_path, <span class="charliteral">&#39;/&#39;</span>);</div>
<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;  }</div>
<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160;  <span class="comment">// Allow tests to run without a specified base path.</span></div>
<div class="line"><a name="l01026"></a><span class="lineno"> 1026</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="l01027"></a><span class="lineno"> 1027</span>&#160;    $build_path = <span class="charliteral">&#39;.&#39;</span>;</div>
<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;  }</div>
<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;  <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01030"></a><span class="lineno"> 1030</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="l01031"></a><span class="lineno"> 1031</span>&#160;  }</div>
<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;  <span class="keywordflow">if</span> ($build_path != <span class="charliteral">&#39;.&#39;</span> &amp;&amp; file_exists($build_path) &amp;&amp; !<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;no-core&#39;</span>, FALSE)) {</div>
<div class="line"><a name="l01033"></a><span class="lineno"> 1033</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="l01034"></a><span class="lineno"> 1034</span>&#160;  }</div>
<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;  $saved_path = $build_path;</div>
<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;  <span class="keywordflow">return</span> $build_path;</div>
<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;}</div>
<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;<span class="comment"> * Move the completed build into place.</span></div>
<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01042"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#ae5eb2a2403d96afcef3d5f85ee7ae284"> 1042</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="l01043"></a><span class="lineno"> 1043</span>&#160;  $tmp_path = <a class="code" href="make_8utilities_8inc.html#ab3c72a6d8be958f40fc0cbcca29a183b">make_tmp</a>();</div>
<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;  $ret = TRUE;</div>
<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;  <span class="keywordflow">if</span> ($build_path == <span class="charliteral">&#39;.&#39;</span> || (<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;no-core&#39;</span>, FALSE) &amp;&amp; file_exists($build_path))) {</div>
<div class="line"><a name="l01046"></a><span class="lineno"> 1046</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="l01047"></a><span class="lineno"> 1047</span>&#160;    <span class="keywordflow">foreach</span> ($info as $file) {</div>
<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;      $destination = $build_path . DIRECTORY_SEPARATOR . $file-&gt;basename;</div>
<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;      <span class="keywordflow">if</span> (file_exists($destination)) {</div>
<div class="line"><a name="l01050"></a><span class="lineno"> 1050</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="l01051"></a><span class="lineno"> 1051</span>&#160;        <span class="comment">// &#39;themes&#39;, descend in a level if the file exists.</span></div>
<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;        <span class="comment">// TODO: This only protects one level of directories from being removed.</span></div>
<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;        $overwrite = <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;overwrite&#39;</span>, FALSE) ? FILE_EXISTS_OVERWRITE : FILE_EXISTS_MERGE;</div>
<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;        <span class="keywordflow">if</span> (is_dir($destination)) {</div>
<div class="line"><a name="l01055"></a><span class="lineno"> 1055</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="l01056"></a><span class="lineno"> 1056</span>&#160;          <span class="keywordflow">foreach</span> ($files as $file) {</div>
<div class="line"><a name="l01057"></a><span class="lineno"> 1057</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, $overwrite);</div>
<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;          }</div>
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;        }</div>
<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;        <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;          $ret = $ret &amp;&amp; <a class="code" href="group__filesystemfunctions.html#ga1d86ac8e2e56a75acb0abcdc8e0dcf09">drush_copy_dir</a>($file-&gt;filename, $destination, $overwrite);</div>
<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;        }</div>
<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;      }</div>
<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;      <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01065"></a><span class="lineno"> 1065</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="l01066"></a><span class="lineno"> 1066</span>&#160;      }</div>
<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;    }</div>
<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;  }</div>
<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;  <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;    <a class="code" href="group__filesystemfunctions.html#ga6027285d97028ad3299d3aa262be8c2f">drush_mkdir</a>(dirname($build_path));</div>
<div class="line"><a name="l01071"></a><span class="lineno"> 1071</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="l01072"></a><span class="lineno"> 1072</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="l01073"></a><span class="lineno"> 1073</span>&#160;  }</div>
<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;</div>
<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;  <span class="comment">// Copying to final destination resets write permissions. Re-apply.</span></div>
<div class="line"><a name="l01076"></a><span class="lineno"> 1076</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="l01077"></a><span class="lineno"> 1077</span>&#160;    $default = $build_path . <span class="stringliteral">&#39;/sites/default&#39;</span>;</div>
<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;    chmod($default . <span class="stringliteral">&#39;/settings.php&#39;</span>, 0666);</div>
<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;    chmod($default . <span class="stringliteral">&#39;/files&#39;</span>, 0777);</div>
<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;  }</div>
<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;</div>
<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;  <span class="keywordflow">if</span> (!$ret) {</div>
<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;    <span class="keywordflow">return</span> <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="l01084"></a><span class="lineno"> 1084</span>&#160;  }</div>
<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;  <span class="keywordflow">return</span> $ret;</div>
<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;}</div>
<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;<span class="comment"> * Create a request array suitable for release_info engine.</span></div>
<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;<span class="comment"> * This is a convenience function to easily integrate drush_make</span></div>
<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;<span class="comment"> * with drush release_info engine.</span></div>
<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;<span class="comment"> * @todo: refactor &#39;make&#39; to internally work with release_info keys.</span></div>
<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;<span class="comment"> * @param array $project</span></div>
<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;<span class="comment"> *   Project array.</span></div>
<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;<span class="comment"> * @param string $type</span></div>
<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;<span class="comment"> *   &#39;contrib&#39; or &#39;core&#39;.</span></div>
<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01101"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#a417d71dedd721df1232702d672ecde59"> 1101</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="l01102"></a><span class="lineno"> 1102</span>&#160;  $request = array(</div>
<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;    <span class="stringliteral">&#39;name&#39;</span> =&gt; $project[<span class="stringliteral">&#39;name&#39;</span>],</div>
<div class="line"><a name="l01104"></a><span class="lineno"> 1104</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="l01105"></a><span class="lineno"> 1105</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="l01106"></a><span class="lineno"> 1106</span>&#160;  );</div>
<div class="line"><a name="l01107"></a><span class="lineno"> 1107</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="l01108"></a><span class="lineno"> 1108</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="l01109"></a><span class="lineno"> 1109</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="l01110"></a><span class="lineno"> 1110</span>&#160;  }</div>
<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;  <span class="keywordflow">return</span> $request;</div>
<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;}</div>
<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;<span class="comment"> * Determine if the release information is required for this</span></div>
<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;<span class="comment"> * project. When it is determined that it is, this potentially results</span></div>
<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;<span class="comment"> * in the use of pm-download to process the project.</span></div>
<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l01119"></a><span class="lineno"> 1119</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="l01120"></a><span class="lineno"> 1120</span>&#160;<span class="comment"> * one of the following is true, then release information is required:</span></div>
<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;<span class="comment"> * - $project[&#39;type&#39;] has not been specified</span></div>
<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;<span class="comment"> * - $project[&#39;download&#39;] has not been specified</span></div>
<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;<span class="comment"> * @see make_projects()</span></div>
<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01127"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#a74cf0e56045632e43fcc16ce438d18e7"> 1127</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="l01128"></a><span class="lineno"> 1128</span>&#160;  <span class="keywordflow">return</span> isset($project[<span class="stringliteral">&#39;location&#39;</span>])</div>
<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;    <span class="comment">// Only fetch release info if the project type is unknown OR if</span></div>
<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;    <span class="comment">// download attributes are unspecified.</span></div>
<div class="line"><a name="l01131"></a><span class="lineno"> 1131</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="l01132"></a><span class="lineno"> 1132</span>&#160;}</div>
<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;<span class="comment"> * Enables caching if not explicitly disabled.</span></div>
<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;<span class="comment"> * @return bool</span></div>
<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;<span class="comment"> *   The previous value of the &#39;cache&#39; option.</span></div>
<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01140"></a><span class="lineno"><a class="code" href="make_8drush_8inc.html#a6d1c9ceda70a665c4c4fac20dd412504"> 1140</a></span>&#160;<span class="keyword">function</span> <a class="code" href="make_8drush_8inc.html#a6d1c9ceda70a665c4c4fac20dd412504">_make_enable_cache</a>() {</div>
<div class="line"><a name="l01141"></a><span class="lineno"> 1141</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="l01142"></a><span class="lineno"> 1142</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="l01143"></a><span class="lineno"> 1143</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="l01144"></a><span class="lineno"> 1144</span>&#160;  }</div>
<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;  <span class="keywordflow">return</span> $cache_before;</div>
<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;}</div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Nov 2 2016 07:28:55 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>