From e44f0adc7b18845a2cd3dc63fdab5d9bcdc10f76 Mon Sep 17 00:00:00 2001 From: Michael Wallner Date: Fri, 15 May 2015 12:52:54 +0200 Subject: [PATCH] license helper --- bin/pharext | Bin 71501 -> 73515 bytes src/pharext/License.php | 51 ++++++++++++++++++++++++++++++++ src/pharext/Packager.php | 8 +---- src/pharext/SourceDir.php | 6 ++++ src/pharext/SourceDir/Basic.php | 10 +++++++ src/pharext/SourceDir/Git.php | 15 +++++++++- src/pharext/SourceDir/Pecl.php | 23 +++++++++++++- 7 files changed, 104 insertions(+), 9 deletions(-) create mode 100644 src/pharext/License.php diff --git a/bin/pharext b/bin/pharext index e9c765d71c5d00aa95454691248432fc1c20a00d..8f90155d7cc18f523256040d4e7df0eba2315e07 100755 GIT binary patch delta 2387 zcmb7Gdu&rx7;l$t>~;bjlgE&m)3e*{cHDNnL}U!4vyKMn2xEYZrIzk=y;*zP-Fq7r znp%yTh*6_CfAEJ<|ML-u0UJf5l4zm{COR=u6MQ6MOh`<8B_t62!|yxy-aU9kY0`f8 zJig!e`+n#9&h6)K)}K6Ae>%RhVRE6zBi9lu4>Z5Id>opvBflnP9P zcH`(}x*5$yx(>~vj&*k+`mc51bNR)uc|dOCtfK|jraA-X9a1$#KXZh z-XQyN%W`=Gn%(kRG>^&~(Y!0)gXVWxMCb^v$I(ICJR4juz`k$xc;bB33K8#@pon)h zD0nKJ0&JvH2=a92YX65o4oRY2f3{;W|D=;_`zBydqCNH2#trXyJ>t^}zr}3IU{hAl zE-lS;lSPWzA_w+}f%dohzheAKXApU<>Jmxr?!wr$N>^7;qwU2{?tfxY$z;R<>Gesq z@PTjxC;0_@;#hn8IJ2B3B}B?TNzyVzQRJM6$y<`$Rr`_AP{`ik?8s<2M*4_sWi>Or zHKXZcE{-z=$kCL^9?%RWq!I^_jjS0Rq3CNCN=BN|(HU6DU{=Y{T||SW1maFeU6Iiv z1mq>D0zde*dEOR_5P$xwWmOk=KCTPt@^o@_IXNN#dlI39M&{>JGBi4h>=4Cqp~H!t ziNOO23iB18PwMIJ_DQ6h@M6A&zjA3ICkLBr#^EKt1&(gKy1$M4CmQ(cudd*yGN-RQ zHhyUQV$_v*?or*o1UleQ09xI?A<= zCqDIJmBnsRWw%eg`~Op~rSkVZ&i}q3wOUz5GNoLOSkO*H93?+|O!dvOsy*|^M{OsR zX76Jw?RvJWGrVdM862qR*b0 zW}3`$YI=U1L3X)f%E~HK2LB%6PDR~g2}!b^%6l1qVY;x<9U!^n;PF4X2~wqE5lOMBs)bh!LbzRsYJrlN2P8?$(6U;-m@AAig{nZ(Rv-l3 zTq&!O8<&xTSgk+<1DJi?jOPkR01l0NL?XyKLkG-(U4zkNbno{5*vzHo^i#TI7)*yV zM^Bq0PrkH#?@d(~S>cU|lG~chO$9F$NzO5S+{ywM5CWbRS$Ktd`Gxb#2JOXOvU;_w zIieze8?h{F71GxSSGRD%p|fXJvB=!jUOxF`YuM2eR_F*NZ~@ME<3Ml~$Pq$E>4`rZ zy-TZ({>}whEFFQ?gGO|^<;G4H?;lw-X&*FGjwPY}lIenOfp+Gcmw zmDTi2!QQ2kJ=^zHcf=D94klv<_r(%J@xjE*p`_upL@1OW-3(GnGsB!cmRt$|uN9M4 zY8+xCD{*j=bOe}BxOL{fAaGqITJde!25)MgPv?ubw4U8`r}tXjs`saV`0lfBk3V-| Y>=EVIw&QPq@K602_#5CEi0+R53wZ|$5C8xG delta 657 zcmZ3zkLBz-mJOa#tWLZP49c7Rq{7*lgw{@8u3!P89xCX9C;>%15apn#526Yc4FvcE z7#M`shK7RZ^)h_ZCT~aXk>*5g6O2#Pm?FhDk+0ZaZ&=C zS)`-|;>}aC0#Ub=j6f8hvJnr+^w&%b3@2aAzB*Y^MRIbgvLHyVLK*CcmCEK|B}G8H zBot&HP1aSFoXn~s08%2ZVgjOkRSZE?gNhl5+M!|!qTZ{3ZBSM<2Js>wRIjQr*swd? z3=E!=WhB7%JyiwU_d^xzP7O7%VbN;f0O?ZG7KjBp4&+D>9n9IuIQgiWg1|f_h#-hw zq;8}-Sw&qHWRbTz*wr=aAj3AVQCHWW+&W)q@{_R2&AH*)tdkc!<=xy6C(AW?PZ;;) zy%}dG&&s^9nJ@bl6MKGcZem`F_2dn9qLceG_`nKu^9nbw%R9oj*}71udGp#YnCUv7sC{IJlIlnX~MIkT0L?JCRFGV3SuTlYOo}Ly^C?~a8F(yw* z(;CHC1zQEBP(N=!|8PH`Bv`I?dJG?9D?8NQ?Z5dLJ2mergeLicensePattern($name, strtolower($name)); + } + $exts = []; + foreach (["t{,e}xt", "rst", "asc{,i,ii}", "m{,ark}d{,own}", "htm{,l}"] as $ext) { + $exts[] = $this->mergeLicensePattern(strtoupper($ext), $ext); + } + + $pattern = "{". implode(",", $names) ."}{,.{". implode(",", $exts) ."}}"; + + if (($glob = glob("$dir/$pattern", GLOB_BRACE))) { + return current($glob); + } + } + + private function mergeLicensePattern($upper, $lower) { + $pattern = ""; + $length = strlen($upper); + for ($i = 0; $i < $length; ++$i) { + if ($lower{$i} === $upper{$i}) { + $pattern .= $upper{$i}; + } else { + $pattern .= "[" . $upper{$i} . $lower{$i} . "]"; + } + } + return $pattern; + } + + public function readLicense($file) { + $text = file_get_contents($file); + switch (strtolower(pathinfo($file, PATHINFO_EXTENSION))) { + case "htm": + case "html": + $text = strip_tags($text); + break; + } + return $text; + } +} diff --git a/src/pharext/Packager.php b/src/pharext/Packager.php index cd3b4d6..b54d284 100644 --- a/src/pharext/Packager.php +++ b/src/pharext/Packager.php @@ -243,16 +243,10 @@ class Packager implements Command */ private function createPackage() { try { - if (($glob = glob($this->source->getBaseDir()."/LICENSE*"))) { - $license = file_get_contents(current($glob)); - } else { - $this->warn("Could not find any LICENSE.* files!\n"); - $license = "UNKNOWN\n"; - } $meta = array_merge(Metadata::all(), [ "name" => $this->args->name, "release" => $this->args->release, - "license" => $license, + "license" => $this->source->getLicense(), "stub" => "pharext_installer.php", "type" => $this->args->zend ? "zend_extension" : "extension", ]); diff --git a/src/pharext/SourceDir.php b/src/pharext/SourceDir.php index 8620668..c7068ba 100644 --- a/src/pharext/SourceDir.php +++ b/src/pharext/SourceDir.php @@ -19,6 +19,12 @@ interface SourceDir extends \Traversable */ public function getPackageInfo(); + /** + * Retrieve the full text license + * @return string + */ + public function getLicense(); + /** * Provide installer command line args * @return array|Traversable diff --git a/src/pharext/SourceDir/Basic.php b/src/pharext/SourceDir/Basic.php index 414c201..fa180fe 100644 --- a/src/pharext/SourceDir/Basic.php +++ b/src/pharext/SourceDir/Basic.php @@ -3,6 +3,7 @@ namespace pharext\SourceDir; use pharext\Cli\Args; +use pharext\License; use pharext\SourceDir; use FilesystemIterator; @@ -14,6 +15,8 @@ use RecursiveIteratorIterator; class Basic implements IteratorAggregate, SourceDir { + use License; + private $path; public function __construct($path) { @@ -28,6 +31,13 @@ class Basic implements IteratorAggregate, SourceDir return []; } + public function getLicense() { + if (($file = $this->findLicense($this->getBaseDir()))) { + return $this->readLicense($file); + } + return "UNKNOWN"; + } + public function getArgs() { return []; } diff --git a/src/pharext/SourceDir/Git.php b/src/pharext/SourceDir/Git.php index e17a305..62dc24f 100644 --- a/src/pharext/SourceDir/Git.php +++ b/src/pharext/SourceDir/Git.php @@ -2,8 +2,8 @@ namespace pharext\SourceDir; -use pharext\Command; use pharext\Cli\Args; +use pharext\License; use pharext\SourceDir; /** @@ -11,6 +11,8 @@ use pharext\SourceDir; */ class Git implements \IteratorAggregate, SourceDir { + use License; + /** * Base directory * @var string @@ -41,6 +43,17 @@ class Git implements \IteratorAggregate, SourceDir return []; } + /** + * @inheritdoc + * @return string + */ + public function getLicense() { + if (($file = $this->findLicense($this->getBaseDir()))) { + return $this->readLicense($file); + } + return "UNKNOWN"; + } + /** * @inheritdoc * @return array diff --git a/src/pharext/SourceDir/Pecl.php b/src/pharext/SourceDir/Pecl.php index 351eaa2..277e122 100644 --- a/src/pharext/SourceDir/Pecl.php +++ b/src/pharext/SourceDir/Pecl.php @@ -5,13 +5,15 @@ namespace pharext\SourceDir; use pharext\Cli\Args; use pharext\Exception; use pharext\SourceDir; -use pharext\Tempfile; +use pharext\License; /** * A PECL extension source directory containing a v2 package.xml */ class Pecl implements \IteratorAggregate, SourceDir { + use License; + /** * The package.xml * @var SimpleXmlElement @@ -73,6 +75,25 @@ class Pecl implements \IteratorAggregate, SourceDir } } + /** + * @inheritdoc + * @return string + */ + public function getLicense() { + if (($license = $this->sxe->xpath("/pecl:package/pecl:license"))) { + if (($file = $this->findLicense($this->getBaseDir(), $license[0]["filesource"]))) { + return $this->readLicense($file); + } + } + if (($file = $this->findLicense($this->getBaseDir()))) { + return $this->readLicense($file); + } + if ($license) { + return $license[0] ." ". $license[0]["uri"]; + } + return "UNKNOWN"; + } + /** * @inheritdoc * @see \pharext\SourceDir::getArgs() -- 2.30.2