class ReplaceOp
Same name in other branches
- 9 composer/Plugin/Scaffold/Operations/ReplaceOp.php \Drupal\Composer\Plugin\Scaffold\Operations\ReplaceOp
- 8.9.x composer/Plugin/Scaffold/Operations/ReplaceOp.php \Drupal\Composer\Plugin\Scaffold\Operations\ReplaceOp
- 11.x composer/Plugin/Scaffold/Operations/ReplaceOp.php \Drupal\Composer\Plugin\Scaffold\Operations\ReplaceOp
Scaffold operation to copy or symlink from source to destination.
@internal
Hierarchy
- class \Drupal\Composer\Plugin\Scaffold\Operations\AbstractOperation implements \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface
- class \Drupal\Composer\Plugin\Scaffold\Operations\ReplaceOp extends \Drupal\Composer\Plugin\Scaffold\Operations\AbstractOperation
Expanded class hierarchy of ReplaceOp
2 files declare their use of ReplaceOp
- Fixtures.php in core/
tests/ Drupal/ Tests/ Composer/ Plugin/ Scaffold/ Fixtures.php - ReplaceOpTest.php in core/
tests/ Drupal/ Tests/ Composer/ Plugin/ Scaffold/ Integration/ ReplaceOpTest.php
File
-
composer/
Plugin/ Scaffold/ Operations/ ReplaceOp.php, line 15
Namespace
Drupal\Composer\Plugin\Scaffold\OperationsView source
class ReplaceOp extends AbstractOperation {
/**
* Identifies Replace operations.
*/
const ID = 'replace';
/**
* The relative path to the source file.
*
* @var \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath
*/
protected $source;
/**
* Whether to overwrite existing files.
*
* @var bool
*/
protected $overwrite;
/**
* Constructs a ReplaceOp.
*
* @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $sourcePath
* The relative path to the source file.
* @param bool $overwrite
* Whether to allow this scaffold file to overwrite files already at
* the destination. Defaults to TRUE.
*/
public function __construct(ScaffoldFilePath $sourcePath, $overwrite = TRUE) {
$this->source = $sourcePath;
$this->overwrite = $overwrite;
}
/**
* {@inheritdoc}
*/
protected function generateContents() {
return file_get_contents($this->source
->fullPath());
}
/**
* {@inheritdoc}
*/
public function process(ScaffoldFilePath $destination, IOInterface $io, ScaffoldOptions $options) {
$fs = new Filesystem();
$destination_path = $destination->fullPath();
// Do nothing if overwrite is 'false' and a file already exists at the
// destination.
if ($this->overwrite === FALSE && file_exists($destination_path)) {
$interpolator = $destination->getInterpolator();
$io->write($interpolator->interpolate(" - Skip <info>[dest-rel-path]</info> because it already exists and overwrite is <comment>false</comment>."));
return new ScaffoldResult($destination, FALSE);
}
// Get rid of the destination if it exists, and make sure that
// the directory where it's going to be placed exists.
$fs->remove($destination_path);
$fs->ensureDirectoryExists(dirname($destination_path));
if ($options->symlink()) {
return $this->symlinkScaffold($destination, $io);
}
return $this->copyScaffold($destination, $io);
}
/**
* Copies the scaffold file.
*
* @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $destination
* Scaffold file to process.
* @param \Composer\IO\IOInterface $io
* IOInterface to writing to.
*
* @return \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult
* The scaffold result.
*/
protected function copyScaffold(ScaffoldFilePath $destination, IOInterface $io) {
$interpolator = $destination->getInterpolator();
$this->source
->addInterpolationData($interpolator);
if (file_put_contents($destination->fullPath(), $this->contents()) === FALSE) {
throw new \RuntimeException($interpolator->interpolate("Could not copy source file <info>[src-rel-path]</info> to <info>[dest-rel-path]</info>!"));
}
$io->write($interpolator->interpolate(" - Copy <info>[dest-rel-path]</info> from <info>[src-rel-path]</info>"));
return new ScaffoldResult($destination, $this->overwrite);
}
/**
* Symlinks the scaffold file.
*
* @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $destination
* Scaffold file to process.
* @param \Composer\IO\IOInterface $io
* IOInterface to writing to.
*
* @return \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult
* The scaffold result.
*/
protected function symlinkScaffold(ScaffoldFilePath $destination, IOInterface $io) {
$interpolator = $destination->getInterpolator();
try {
$fs = new Filesystem();
$fs->relativeSymlink($this->source
->fullPath(), $destination->fullPath());
} catch (\Exception $e) {
throw new \RuntimeException($interpolator->interpolate("Could not symlink source file <info>[src-rel-path]</info> to <info>[dest-rel-path]</info>!"), [], $e);
}
$io->write($interpolator->interpolate(" - Link <info>[dest-rel-path]</info> from <info>[src-rel-path]</info>"));
return new ScaffoldResult($destination, $this->overwrite);
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title | Overrides |
---|---|---|---|---|---|
AbstractOperation::$contents | protected | property | Cached contents of scaffold file to be written to disk. | ||
AbstractOperation::contents | final public | function | Returns the exact data that will be written to the scaffold files. | Overrides OperationInterface::contents | |
AbstractOperation::scaffoldAtNewLocation | public | function | Determines what to do if operation is used without a previous operation. | Overrides OperationInterface::scaffoldAtNewLocation | 1 |
AbstractOperation::scaffoldOverExistingTarget | public | function | Determines what to do if operation is used at same path as a previous op. | Overrides OperationInterface::scaffoldOverExistingTarget | 1 |
ReplaceOp::$overwrite | protected | property | Whether to overwrite existing files. | ||
ReplaceOp::$source | protected | property | The relative path to the source file. | ||
ReplaceOp::copyScaffold | protected | function | Copies the scaffold file. | ||
ReplaceOp::generateContents | protected | function | Load the scaffold contents or otherwise generate what is needed. | Overrides AbstractOperation::generateContents | |
ReplaceOp::ID | constant | Identifies Replace operations. | |||
ReplaceOp::process | public | function | Process this scaffold operation. | Overrides OperationInterface::process | |
ReplaceOp::symlinkScaffold | protected | function | Symlinks the scaffold file. | ||
ReplaceOp::__construct | public | function | Constructs a ReplaceOp. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.