support for running .ext.phars without ext/phar
[pharext/pharext] / src / pharext / Task / Extract.php
1 <?php
2
3 namespace pharext\Task;
4
5 use pharext\Archive;
6 use pharext\Task;
7 use pharext\Tempdir;
8
9 use Phar;
10 use PharData;
11
12 /**
13 * Extract a package archive
14 */
15 class Extract implements Task
16 {
17 /**
18 * @var Phar(Data)
19 */
20 private $source;
21
22 /**
23 * @param mixed $source archive location
24 */
25 public function __construct($source) {
26 if ($source instanceof Phar || $source instanceof PharData || $source instanceof Archive) {
27 $this->source = $source;
28 } else {
29 $this->source = new PharData($source);
30 }
31 }
32
33 /**
34 * @param bool $verbose
35 * @return \pharext\Tempdir
36 */
37 public function run($verbose = false) {
38 if ($verbose) {
39 printf("Extracting %s ...\n", basename($this->source->getPath()));
40 }
41 if ($this->source instanceof Archive) {
42 return $this->source->extract();
43 }
44 $dest = new Tempdir("extract");
45 $this->source->extractTo($dest);
46 return $dest;
47 }
48 }