better error message
[pharext/pharext] / src / pharext / Packager.php
index c648d8af2795a82330c959865294c6678aa60e64..23bcdc9999c52906cf6edcf0254789503c84500e 100644 (file)
@@ -3,15 +3,13 @@
 namespace pharext;
 
 use Phar;
-use pharext\Cli\Command as CliCommand;
-use pharext\Exception;
 
 /**
  * The extension packaging command executed by bin/pharext
  */
 class Packager implements Command
 {
-       use CliCommand;
+       use Cli\Command;
        
        /**
         * Extension source directory
@@ -58,7 +56,7 @@ class Packager implements Command
                        ["S", "sign", "Sign the PHAR with a private key",
                                Cli\Args::OPTIONAL|Cli\Args::SINGLE|Cli\Args::REQARG],
                        ["E", "zend", "Mark as Zend Extension",
-                               Cli\Args::OPTIONAL|CliARgs::SINGLE|Cli\Args::NOARG],
+                               Cli\Args::OPTIONAL|Cli\Args::SINGLE|Cli\Args::NOARG],
                        [null, "signature", "Show pharext signature",
                                Cli\Args::OPTIONAL|Cli\Args::SINGLE|Cli\Args::NOARG|Cli\Args::HALT],
                        [null, "license", "Show pharext license",
@@ -107,8 +105,8 @@ class Packager implements Command
 
                try {
                        /* source needs to be evaluated before Cli\Args validation, 
-                        * so e.g. name and version can be overriden and Cli\Args 
-                        * does not complain about missing arguments
+                        * so Cli\Args does not complain about missing arguments,
+                        * which come from SourceDir::getPackageInfo()
                         */
                        $this->loadSource();
                } catch (\Exception $e) {
@@ -197,9 +195,15 @@ class Packager implements Command
                        $source = $this->download($source);
                        $this->cleanup[] = new Task\Cleanup($source);
                }
-               $source = realpath($source);
-               if (!is_dir($source)) {
-                       $source = $this->extract($source);
+               if (!$real = realpath($source)) {
+                       $error = "Cannot find source '$source'";
+                       if ($this->args->git) {
+                               $error .= "; did you forget to specify --branch for a remote git source?";
+                       }
+                       throw new Exception($error);
+               }
+               if (!is_dir($real)) {
+                       $source = $this->extract($real);
                        $this->cleanup[] = new Task\Cleanup($source);
                        
                        if (!$this->args->git) {
@@ -232,7 +236,10 @@ class Packager implements Command
                        }
 
                        foreach ($this->source->getPackageInfo() as $key => $val) {
-                               $this->args->$key = $val;
+                               /* do not override command line arguments */
+                               if (!isset($this->args->$key)) {
+                                       $this->args->$key = $val;
+                               }
                        }
                }
        }