Feature: Plugin.CopyBuild wipe instruction
When set to `true`, this added `wipe` property will completely remove the target directory contents (except hidden files) before copying the build files into it. The instruction is only allowed if `directory` is **not** `/` as a tiny and very inadequate measure against unintentional destruction of the host system.
This commit is contained in:
parent
4ddad9f216
commit
7eddec6157
|
@ -22,6 +22,7 @@ class CopyBuild implements \PHPCI\Plugin
|
|||
{
|
||||
protected $directory;
|
||||
protected $ignore;
|
||||
protected $wipe;
|
||||
protected $phpci;
|
||||
protected $build;
|
||||
|
||||
|
@ -31,6 +32,7 @@ class CopyBuild implements \PHPCI\Plugin
|
|||
$this->phpci = $phpci;
|
||||
$this->build = $build;
|
||||
$this->directory = isset($options['directory']) ? $options['directory'] : $path;
|
||||
$this->wipe = isset($options['wipe']) ? (bool)$options['wipe'] : false;
|
||||
$this->ignore = isset($options['respect_ignore']) ? (bool)$options['respect_ignore'] : false;
|
||||
}
|
||||
|
||||
|
@ -45,10 +47,19 @@ class CopyBuild implements \PHPCI\Plugin
|
|||
return false;
|
||||
}
|
||||
|
||||
if ($this->wipe == true && $this->directory != '/' && is_dir($this->directory)) {
|
||||
$cmd = 'rm -Rf "%s*"';
|
||||
$success = $this->phpci->executeCommand($cmd, $this->directory);
|
||||
if (!$success) {
|
||||
throw new \Exception('Failed to wipe existing directory ' . $this->directory . ' before copy');
|
||||
}
|
||||
}
|
||||
|
||||
$cmd = 'mkdir -p "%s" && cp -R "%s" "%s"';
|
||||
if (IS_WIN) {
|
||||
$cmd = 'mkdir -p "%s" && xcopy /E "%s" "%s"';
|
||||
}
|
||||
|
||||
$success = $this->phpci->executeCommand($cmd, $this->directory, $build, $this->directory);
|
||||
|
||||
if ($this->ignore) {
|
||||
|
|
Loading…
Reference in a new issue