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:
Claus Due 2014-04-12 13:48:26 +02:00
parent 4ddad9f216
commit 7eddec6157

View file

@ -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) {