public function FeaturesCommands::diff in Features 8.4
Same name and namespace in other branches
- 8.3 src/Commands/FeaturesCommands.php \Drupal\features\Commands\FeaturesCommands::diff()
Show the difference between active|default config from a feature package.
@command features:diff
@option ctypes Comma-separated list of component types to limit the output to. Defaults to all types. @option lines Generate diffs with <n> lines of context instead of the usual two. @option bundle Use a specific bundle namespace.
@aliases fd,features-diff
Parameters
string $feature: The feature in question.
Throws
\Exception
File
- src/
Commands/ FeaturesCommands.php, line 591
Class
- FeaturesCommands
- Drush commands for Features.
Namespace
Drupal\features\CommandsCode
public function diff($feature, $options = self::OPTIONS_DIFF) {
$manager = $this->manager;
$assigner = $this
->featuresOptions($options);
$assigner
->assignConfigPackages();
$module = $feature;
// @FIXME Actually do something with the "ctypes" option.
$filter_ctypes = $options['ctypes'];
if ($filter_ctypes) {
$filter_ctypes = explode(',', $filter_ctypes);
}
$feature = $manager
->loadPackage($module, TRUE);
if (empty($feature)) {
throw new DomainException(dt('No such feature is available: @module', [
'@module' => $module,
]));
}
$lines = $options['lines'];
$lines = isset($lines) ? $lines : 2;
$formatter = new DiffFormatter();
$formatter->leading_context_lines = $lines;
$formatter->trailing_context_lines = $lines;
$formatter->show_header = FALSE;
if ($this
->output()
->isDecorated()) {
$red = "\33[31;40m\33[1m%s\33[0m";
$green = "\33[0;32;40m\33[1m%s\33[0m";
}
else {
$red = '%s';
$green = "%s";
}
$overrides = $manager
->detectOverrides($feature);
$missing = $manager
->reorderMissing($manager
->detectMissing($feature));
$overrides = array_merge($overrides, $missing);
$output = $this
->output();
if (empty($overrides)) {
$output
->writeln(dt('Active config matches stored config for @module.', [
'@module' => $module,
]));
}
else {
$config_diff = $this->configDiff;
// Print key for colors.
$output
->writeln(dt('Legend: '));
$output
->writeln(sprintf($red, dt('Code: drush features-import will replace the active config with the displayed code.')));
$output
->writeln(sprintf($green, dt('Active: drush features-export will update the exported feature with the displayed active config')));
foreach ($overrides as $name) {
$message = '';
if (in_array($name, $missing)) {
$extension = [];
$message = sprintf($red, dt('(missing from active)'));
}
else {
$active = $manager
->getActiveStorage()
->read($name);
$extension = $manager
->getExtensionStorages()
->read($name);
if (empty($extension)) {
$extension = [];
$message = sprintf($green, dt('(not exported)'));
}
$diff = $config_diff
->diff($extension, $active);
$rows = explode("\n", $formatter
->format($diff));
}
$output
->writeln('');
$output
->writeln(dt("Config @name @message", [
'@name' => $name,
'@message' => $message,
]));
if (!empty($extension)) {
foreach ($rows as $row) {
if (strpos($row, '>') === 0) {
$output
->writeln(sprintf($green, $row));
}
elseif (strpos($row, '<') === 0) {
$output
->writeln(sprintf($red, $row));
}
else {
$output
->writeln($row);
}
}
}
}
}
}