File manager - Edit - /home/opticamezl/www/newok/phing.tar
Back
build.properties.dist 0000604 00000000607 15175306356 0010735 0 ustar 00 # you may need to update this if you're working on a fork. guzzle.remote=git@github.com:guzzle/guzzle.git # github credentials -- only used by GitHub API calls to create subtree repos github.basicauth=username:password # for the subtree split and testing github.org=guzzle # your git path cmd.git=git # your composer command cmd.composer=composer # test server start cmd.testserver=node imports/deploy.xml 0000604 00000013543 15175306356 0010274 0 ustar 00 <?xml version="1.0" encoding="UTF-8"?> <project basedir="../../" default="deploy"> <property name="git.status" value=""/> <property name="git.currentbranch" value=""/> <target name="check-git-branch-status"> <exec command="git status -s -b" outputProperty="git.currentbranch" /> <echo msg="${git.currentbranch}"/> <if> <contains string="${git.currentbranch}" substring="${head}"/> <then> <echo>On branch ${head}</echo> </then> <else> <fail message="-Dhead=${head} arg did not match ${git.currentbranch}"/> </else> </if> <exec command="git status -s" outputProperty="git.status" /> <if> <equals arg1="${git.status}" arg2="" trim="true"/> <then> <echo>working directory clean</echo> </then> <else> <echo>${git.status}</echo> <fail message="Working directory isn't clean." /> </else> </if> </target> <property name="version.changelog" value=""/> <property name="version.version" value=""/> <target name="check-changelog-version"> <exec executable="fgrep" outputProperty="version.changelog"> <arg value="${new.version} ("/> <arg value="${project.basedir}/CHANGELOG.md"/> </exec> <if> <equals arg1="${version.changelog}" arg2="" trim="true"/> <then> <fail message="${new.version} not mentioned in CHANGELOG"/> </then> </if> <exec executable="fgrep" outputProperty="version.version"> <arg value="const VERSION = '${new.version}'"/> <arg value="${project.basedir}/src/Guzzle/Common/Version.php"/> </exec> <if> <equals arg1="${version.version}" arg2="" trim="true"/> <then> <fail message="${new.version} not mentioned in Guzzle\Common\Version"/> </then> </if> <echo>ChangeLog Match: ${version.changelog}</echo> <echo>Guzzle\Common\Version Match: ${version.version}</echo> </target> <target name="help" description="HELP AND REMINDERS about what you can do with this project"> <echo>releasing: phing -Dnew.version=3.0.x -Dhead=master release</echo> <echo>--</echo> <exec command="phing -l" passthru="true"/> </target> <target name="release" depends="check-changelog-version,check-git-branch-status" description="tag, subtree split, package, deploy: Use: phing -Dnew.version=[TAG] -Dhead=[BRANCH] release"> <if> <isset property="new.version" /> <then> <if> <contains string="${new.version}" substring="v" casesensitive="false" /> <then> <fail message="Please specify version as [0-9].[0-9].[0-9]. (I'll add v for you.)"/> </then> <else> <echo>BEGINNING RELEASE FOR ${new.version}</echo> <!-- checkout the specified branch --> <!-- <gitcheckout repository="${repo.dir}" branchname="${head}" gitPath="${cmd.git}" /> --> <!-- Ensure that the tag exists --> <!-- push the tag up so subsplit will get it --> <!--gitpush repository="${repo.dir}" tags="true" gitPath="${cmd.git}" /--> <!-- now do the subsplits --> <guzzlesubsplit repository="${repo.dir}" remote="${guzzle.remote}" heads="${head}" tags="v${new.version}" base="src" subIndicatorFile="composer.json" gitPath="${cmd.git}" /> <!-- Copy .md files into the PEAR package --> <copy file="${repo.dir}/LICENSE" tofile=".subsplit/src/Guzzle/LICENSE.md" /> <copy file="${repo.dir}/README.md" tofile=".subsplit/src/Guzzle/README.md" /> <copy file="${repo.dir}/CHANGELOG.md" tofile=".subsplit/src/Guzzle/CHANGELOG.md" /> <!-- and now the pear packages --> <guzzlepear version="${new.version}" makephar="true" /> </else> </if> </then> <else> <echo>Tip: to create a new release, do: phing -Dnew.version=[TAG] -Dhead=[BRANCH] release</echo> </else> </if> </target> <target name="pear-channel"> <guzzlepear version="${new.version}" deploy="true" makephar="true" /> </target> <target name="package-phar" description="Create a phar with an autoloader"> <pharpackage destfile="${dir.output}/guzzle.phar" basedir="${project.basedir}/.subsplit" stub="phar-stub.php" signature="md5"> <fileset dir="${project.basedir}/.subsplit"> <include name="src/**/*.php" /> <include name="src/**/*.pem" /> <include name="vendor/symfony/class-loader/Symfony/Component/ClassLoader/UniversalClassLoader.php" /> <include name="vendor/symfony/event-dispatcher/**/*.php" /> <include name="vendor/doctrine/common/lib/Doctrine/Common/Cache/*.php" /> <include name="vendor/monolog/monolog/src/**/*.php" /> </fileset> <metadata> <element name="author" value="Michael Dowling" /> </metadata> </pharpackage> </target> </project> imports/dependencies.xml 0000604 00000002043 15175306356 0011417 0 ustar 00 <?xml version="1.0" encoding="UTF-8"?> <project basedir="../../" default="install-dependencies"> <property name="cmd.composer" value="" /> <property name="cmd.git" value="" /> <property name="cmd.testserver" value="" /> <!-- Our custom tasks --> <taskdef name="composerlint" classname="phing.tasks.ComposerLintTask" /> <taskdef name="guzzlesubsplit" classname="phing.tasks.GuzzleSubSplitTask" /> <taskdef name="guzzlepear" classname="phing.tasks.GuzzlePearPharPackageTask" /> <target name="find-git"> <if> <contains string="${cmd.git}" substring="git" /> <then> <echo>using git at ${cmd.git}</echo> </then> <else> <exec command="which git" outputProperty="cmd.git" /> <echo>found git at ${cmd.git}</echo> </else> </if> </target> <target name="clean-dependencies"> <delete dir="${project.basedir}/vendor"/> <delete file="${project.basedir}/composer.lock" /> </target> </project> tasks/GuzzleSubSplitTask.php 0000604 00000025215 15175306356 0012207 0 ustar 00 <?php /** * Phing wrapper around git subsplit. * * @see https://github.com/dflydev/git-subsplit * @copyright 2012 Clay Loveless <clay@php.net> * @license http://claylo.mit-license.org/2012/ MIT License */ require_once 'phing/tasks/ext/git/GitBaseTask.php'; // base - base of tree to split out // subIndicatorFile - composer.json, package.xml? class GuzzleSubSplitTask extends GitBaseTask { /** * What git repository to pull from and publish to */ protected $remote = null; /** * Publish for comma-separated heads instead of all heads */ protected $heads = null; /** * Publish for comma-separated tags instead of all tags */ protected $tags = null; /** * Base of the tree RELATIVE TO .subsplit working dir */ protected $base = null; /** * The presence of this file will indicate that the directory it resides * in is at the top level of a split. */ protected $subIndicatorFile = 'composer.json'; /** * Do everything except actually send the update. */ protected $dryRun = null; /** * Do not sync any heads. */ protected $noHeads = false; /** * Do not sync any tags. */ protected $noTags = false; /** * The splits we found in the heads */ protected $splits; public function setRemote($str) { $this->remote = $str; } public function getRemote() { return $this->remote; } public function setHeads($str) { $this->heads = explode(',', $str); } public function getHeads() { return $this->heads; } public function setTags($str) { $this->tags = explode(',', $str); } public function getTags() { return $this->tags; } public function setBase($str) { $this->base = $str; } public function getBase() { return $this->base; } public function setSubIndicatorFile($str) { $this->subIndicatorFile = $str; } public function getSubIndicatorFile() { return $this->subIndicatorFile; } public function setDryRun($bool) { $this->dryRun = (bool) $bool; } public function getDryRun() { return $this->dryRun; } public function setNoHeads($bool) { $this->noHeads = (bool) $bool; } public function getNoHeads() { return $this->noHeads; } public function setNoTags($bool) { $this->noTags = (bool) $bool; } public function getNoTags() { return $this->noTags; } /** * GitClient from VersionControl_Git */ protected $client = null; /** * The main entry point */ public function main() { $repo = $this->getRepository(); if (empty($repo)) { throw new BuildException('"repository" is a required parameter'); } $remote = $this->getRemote(); if (empty($remote)) { throw new BuildException('"remote" is a required parameter'); } chdir($repo); $this->client = $this->getGitClient(false, $repo); // initalized yet? if (!is_dir('.subsplit')) { $this->subsplitInit(); } else { // update $this->subsplitUpdate(); } // find all splits based on heads requested $this->findSplits(); // check that GitHub has the repos $this->verifyRepos(); // execute the subsplits $this->publish(); } public function publish() { $this->log('DRY RUN ONLY FOR NOW'); $base = $this->getBase(); $base = rtrim($base, '/') . '/'; $org = $this->getOwningTarget()->getProject()->getProperty('github.org'); $splits = array(); $heads = $this->getHeads(); foreach ($heads as $head) { foreach ($this->splits[$head] as $component => $meta) { $splits[] = $base . $component . ':git@github.com:'. $org.'/'.$meta['repo']; } $cmd = 'git subsplit publish '; $cmd .= escapeshellarg(implode(' ', $splits)); if ($this->getNoHeads()) { $cmd .= ' --no-heads'; } else { $cmd .= ' --heads='.$head; } if ($this->getNoTags()) { $cmd .= ' --no-tags'; } else { if ($this->getTags()) { $cmd .= ' --tags=' . escapeshellarg(implode(' ', $this->getTags())); } } passthru($cmd); } } /** * Runs `git subsplit update` */ public function subsplitUpdate() { $repo = $this->getRepository(); $this->log('git-subsplit update...'); $cmd = $this->client->getCommand('subsplit'); $cmd->addArgument('update'); try { $cmd->execute(); } catch (Exception $e) { throw new BuildException('git subsplit update failed'. $e); } chdir($repo . '/.subsplit'); passthru('php ../composer.phar update --dev'); chdir($repo); } /** * Runs `git subsplit init` based on the remote repository. */ public function subsplitInit() { $remote = $this->getRemote(); $cmd = $this->client->getCommand('subsplit'); $this->log('running git-subsplit init ' . $remote); $cmd->setArguments(array( 'init', $remote )); try { $output = $cmd->execute(); } catch (Exception $e) { throw new BuildException('git subsplit init failed'. $e); } $this->log(trim($output), Project::MSG_INFO); $repo = $this->getRepository(); chdir($repo . '/.subsplit'); passthru('php ../composer.phar install --dev'); chdir($repo); } /** * Find the composer.json files using Phing's directory scanner * * @return array */ protected function findSplits() { $this->log("checking heads for subsplits"); $repo = $this->getRepository(); $base = $this->getBase(); $splits = array(); $heads = $this->getHeads(); if (!empty($base)) { $base = '/' . ltrim($base, '/'); } else { $base = '/'; } chdir($repo . '/.subsplit'); foreach ($heads as $head) { $splits[$head] = array(); // check each head requested *BEFORE* the actual subtree split command gets it passthru("git checkout '$head'"); $ds = new DirectoryScanner(); $ds->setBasedir($repo . '/.subsplit' . $base); $ds->setIncludes(array('**/'.$this->subIndicatorFile)); $ds->scan(); $files = $ds->getIncludedFiles(); // Process the files we found foreach ($files as $file) { $pkg = file_get_contents($repo . '/.subsplit' . $base .'/'. $file); $pkg_json = json_decode($pkg, true); $name = $pkg_json['name']; $component = str_replace('/composer.json', '', $file); // keep this for split cmd $tmpreponame = explode('/', $name); $reponame = $tmpreponame[1]; $splits[$head][$component]['repo'] = $reponame; $nscomponent = str_replace('/', '\\', $component); $splits[$head][$component]['desc'] = "[READ ONLY] Subtree split of $nscomponent: " . $pkg_json['description']; } } // go back to how we found it passthru("git checkout master"); chdir($repo); $this->splits = $splits; } /** * Based on list of repositories we determined we *should* have, talk * to GitHub and make sure they're all there. * */ protected function verifyRepos() { $this->log('verifying GitHub target repos'); $github_org = $this->getOwningTarget()->getProject()->getProperty('github.org'); $github_creds = $this->getOwningTarget()->getProject()->getProperty('github.basicauth'); if ($github_creds == 'username:password') { $this->log('Skipping GitHub repo checks. Update github.basicauth in build.properties to verify repos.', 1); return; } $ch = curl_init('https://api.github.com/orgs/'.$github_org.'/repos?type=all'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERPWD, $github_creds); // change this when we know we can use our bundled CA bundle! curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $result = curl_exec($ch); curl_close($ch); $repos = json_decode($result, true); $existing_repos = array(); // parse out the repos we found on GitHub foreach ($repos as $repo) { $tmpreponame = explode('/', $repo['full_name']); $reponame = $tmpreponame[1]; $existing_repos[$reponame] = $repo['description']; } $heads = $this->getHeads(); foreach ($heads as $head) { foreach ($this->splits[$head] as $component => $meta) { $reponame = $meta['repo']; if (!isset($existing_repos[$reponame])) { $this->log("Creating missing repo $reponame"); $payload = array( 'name' => $reponame, 'description' => $meta['desc'], 'homepage' => 'http://www.guzzlephp.org/', 'private' => true, 'has_issues' => false, 'has_wiki' => false, 'has_downloads' => true, 'auto_init' => false ); $ch = curl_init('https://api.github.com/orgs/'.$github_org.'/repos'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERPWD, $github_creds); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload)); // change this when we know we can use our bundled CA bundle! curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $result = curl_exec($ch); echo "Response code: ".curl_getinfo($ch, CURLINFO_HTTP_CODE)."\n"; curl_close($ch); } else { $this->log("Repo $reponame exists", 2); } } } } } tasks/ComposerLintTask.php 0000604 00000007140 15175306356 0011654 0 ustar 00 <?php /** * Phing task for composer validation. * * @copyright 2012 Clay Loveless <clay@php.net> * @license http://claylo.mit-license.org/2012/ MIT License */ require_once 'phing/Task.php'; class ComposerLintTask extends Task { protected $dir = null; protected $file = null; protected $passthru = false; protected $composer = null; /** * The setter for the dir * * @param string $str Directory to crawl recursively for composer files */ public function setDir($str) { $this->dir = $str; } /** * The setter for the file * * @param string $str Individual file to validate */ public function setFile($str) { $this->file = $str; } /** * Whether to use PHP's passthru() function instead of exec() * * @param boolean $passthru If passthru shall be used */ public function setPassthru($passthru) { $this->passthru = (bool) $passthru; } /** * Composer to execute. If unset, will attempt composer.phar in project * basedir, and if that fails, will attempt global composer * installation. * * @param string $str Individual file to validate */ public function setComposer($str) { $this->file = $str; } /** * The init method: do init steps */ public function init() { // nothing needed here } /** * The main entry point */ public function main() { if ($this->composer === null) { $this->findComposer(); } $files = array(); if (!empty($this->file) && file_exists($this->file)) { $files[] = $this->file; } if (!empty($this->dir)) { $found = $this->findFiles(); foreach ($found as $file) { $files[] = $this->dir . DIRECTORY_SEPARATOR . $file; } } foreach ($files as $file) { $cmd = $this->composer . ' validate ' . $file; $cmd = escapeshellcmd($cmd); if ($this->passthru) { $retval = null; passthru($cmd, $retval); if ($retval == 1) { throw new BuildException('invalid composer.json'); } } else { $out = array(); $retval = null; exec($cmd, $out, $retval); if ($retval == 1) { $err = join("\n", $out); throw new BuildException($err); } else { $this->log($out[0]); } } } } /** * Find the composer.json files using Phing's directory scanner * * @return array */ protected function findFiles() { $ds = new DirectoryScanner(); $ds->setBasedir($this->dir); $ds->setIncludes(array('**/composer.json')); $ds->scan(); return $ds->getIncludedFiles(); } /** * Find composer installation * */ protected function findComposer() { $basedir = $this->project->getBasedir(); $php = $this->project->getProperty('php.interpreter'); if (file_exists($basedir . '/composer.phar')) { $this->composer = "$php $basedir/composer.phar"; } else { $out = array(); exec('which composer', $out); if (empty($out)) { throw new BuildException( 'Could not determine composer location.' ); } $this->composer = $out[0]; } } } tasks/GuzzlePearPharPackageTask.php 0000604 00000027200 15175306356 0013414 0 ustar 00 <?php /** * This file is part of Guzzle's build process. * * @copyright 2012 Clay Loveless <clay@php.net> * @license http://claylo.mit-license.org/2012/ MIT License */ require_once 'phing/Task.php'; require_once 'PEAR/PackageFileManager2.php'; require_once 'PEAR/PackageFileManager/File.php'; require_once 'PEAR/Packager.php'; class GuzzlePearPharPackageTask extends Task { private $version; private $deploy = true; private $makephar = true; private $subpackages = array(); public function setVersion($str) { $this->version = $str; } public function getVersion() { return $this->version; } public function setDeploy($deploy) { $this->deploy = (bool) $deploy; } public function getDeploy() { return $this->deploy; } public function setMakephar($makephar) { $this->makephar = (bool) $makephar; } public function getMakephar() { return $this->makephar; } private $basedir; private $guzzleinfo; private $changelog_release_date; private $changelog_notes = '-'; public function main() { $this->basedir = $this->getProject()->getBasedir(); if (!is_dir((string) $this->basedir.'/.subsplit')) { throw new BuildException('PEAR packaging requires .subsplit directory'); } // main composer file $composer_file = file_get_contents((string) $this->basedir.'/.subsplit/composer.json'); $this->guzzleinfo = json_decode($composer_file, true); // make sure we have a target $pearwork = (string) $this->basedir . '/build/pearwork'; if (!is_dir($pearwork)) { mkdir($pearwork, 0777, true); } $pearlogs = (string) $this->basedir . '/build/artifacts/logs'; if (!is_dir($pearlogs)) { mkdir($pearlogs, 0777, true); } $version = $this->getVersion(); $this->grabChangelog(); if ($version[0] == '2') { $this->log('building single PEAR package'); $this->buildSinglePackage(); } else { // $this->log("building PEAR subpackages"); // $this->createSubPackages(); // $this->log("building PEAR bundle package"); $this->buildSinglePackage(); } if ($this->getMakephar()) { $this->log("building PHAR"); $this->getProject()->executeTarget('package-phar'); } if ($this->getDeploy()) { $this->doDeployment(); } } public function doDeployment() { $basedir = (string) $this->basedir; $this->log('beginning PEAR/PHAR deployment'); chdir($basedir . '/build/pearwork'); if (!is_dir('./channel')) { mkdir('./channel'); } // Pull the PEAR channel down locally passthru('aws s3 sync s3://pear.guzzlephp.org ./channel'); // add PEAR packages foreach (scandir('./') as $file) { if (substr($file, -4) == '.tgz') { passthru('pirum add ./channel ' . $file); } } // if we have a new phar, add it if ($this->getMakephar() && file_exists($basedir . '/build/artifacts/guzzle.phar')) { rename($basedir . '/build/artifacts/guzzle.phar', './channel/guzzle.phar'); } // Sync up with the S3 bucket chdir($basedir . '/build/pearwork/channel'); passthru('aws s3 sync . s3://pear.guzzlephp.org'); } public function buildSinglePackage() { $v = $this->getVersion(); $apiversion = $v[0] . '.0.0'; $opts = array( 'packagedirectory' => (string) $this->basedir . '/.subsplit/src/', 'filelistgenerator' => 'file', 'ignore' => array('*composer.json'), 'baseinstalldir' => '/', 'packagefile' => 'package.xml' //'outputdirectory' => (string) $this->basedir . '/build/pearwork/' ); $pfm = new PEAR_PackageFileManager2(); $pfm->setOptions($opts); $pfm->addRole('md', 'doc'); $pfm->addRole('pem', 'php'); $pfm->setPackage('Guzzle'); $pfm->setSummary("Object-oriented PHP HTTP Client for PHP 5.3+"); $pfm->setDescription($this->guzzleinfo['description']); $pfm->setPackageType('php'); $pfm->setChannel('guzzlephp.org/pear'); $pfm->setAPIVersion($apiversion); $pfm->setReleaseVersion($this->getVersion()); $pfm->setAPIStability('stable'); $pfm->setReleaseStability('stable'); $pfm->setNotes($this->changelog_notes); $pfm->setPackageType('php'); $pfm->setLicense('MIT', 'http://github.com/guzzle/guzzle/blob/master/LICENSE'); $pfm->addMaintainer('lead', 'mtdowling', 'Michael Dowling', 'mtdowling@gmail.com', 'yes'); $pfm->setDate($this->changelog_release_date); $pfm->generateContents(); $phpdep = $this->guzzleinfo['require']['php']; $phpdep = str_replace('>=', '', $phpdep); $pfm->setPhpDep($phpdep); $pfm->addExtensionDep('required', 'curl'); $pfm->setPearinstallerDep('1.4.6'); $pfm->addPackageDepWithChannel('required', 'EventDispatcher', 'pear.symfony.com', '2.1.0'); if (!empty($this->subpackages)) { foreach ($this->subpackages as $package) { $pkg = dirname($package); $pkg = str_replace('/', '_', $pkg); $pfm->addConflictingPackageDepWithChannel($pkg, 'guzzlephp.org/pear', false, $apiversion); } } ob_start(); $startdir = getcwd(); chdir((string) $this->basedir . '/build/pearwork'); echo "DEBUGGING GENERATED PACKAGE FILE\n"; $result = $pfm->debugPackageFile(); if ($result) { $out = $pfm->writePackageFile(); echo "\n\n\nWRITE PACKAGE FILE RESULT:\n"; var_dump($out); // load up package file and build package $packager = new PEAR_Packager(); echo "\n\n\nBUILDING PACKAGE FROM PACKAGE FILE:\n"; $dest_package = $packager->package($opts['packagedirectory'].'package.xml'); var_dump($dest_package); } else { echo "\n\n\nDEBUGGING RESULT:\n"; var_dump($result); } echo "removing package.xml"; unlink($opts['packagedirectory'].'package.xml'); $log = ob_get_clean(); file_put_contents((string) $this->basedir . '/build/artifacts/logs/pear_package.log', $log); chdir($startdir); } public function createSubPackages() { $this->findComponents(); foreach ($this->subpackages as $package) { $baseinstalldir = dirname($package); $dir = (string) $this->basedir.'/.subsplit/src/' . $baseinstalldir; $composer_file = file_get_contents((string) $this->basedir.'/.subsplit/src/'. $package); $package_info = json_decode($composer_file, true); $this->log('building ' . $package_info['target-dir'] . ' subpackage'); $this->buildSubPackage($dir, $baseinstalldir, $package_info); } } public function buildSubPackage($dir, $baseinstalldir, $info) { $package = str_replace('/', '_', $baseinstalldir); $opts = array( 'packagedirectory' => $dir, 'filelistgenerator' => 'file', 'ignore' => array('*composer.json', '*package.xml'), 'baseinstalldir' => '/' . $info['target-dir'], 'packagefile' => 'package.xml' ); $pfm = new PEAR_PackageFileManager2(); $pfm->setOptions($opts); $pfm->setPackage($package); $pfm->setSummary($info['description']); $pfm->setDescription($info['description']); $pfm->setPackageType('php'); $pfm->setChannel('guzzlephp.org/pear'); $pfm->setAPIVersion('3.0.0'); $pfm->setReleaseVersion($this->getVersion()); $pfm->setAPIStability('stable'); $pfm->setReleaseStability('stable'); $pfm->setNotes($this->changelog_notes); $pfm->setPackageType('php'); $pfm->setLicense('MIT', 'http://github.com/guzzle/guzzle/blob/master/LICENSE'); $pfm->addMaintainer('lead', 'mtdowling', 'Michael Dowling', 'mtdowling@gmail.com', 'yes'); $pfm->setDate($this->changelog_release_date); $pfm->generateContents(); $phpdep = $this->guzzleinfo['require']['php']; $phpdep = str_replace('>=', '', $phpdep); $pfm->setPhpDep($phpdep); $pfm->setPearinstallerDep('1.4.6'); foreach ($info['require'] as $type => $version) { if ($type == 'php') { continue; } if ($type == 'symfony/event-dispatcher') { $pfm->addPackageDepWithChannel('required', 'EventDispatcher', 'pear.symfony.com', '2.1.0'); } if ($type == 'ext-curl') { $pfm->addExtensionDep('required', 'curl'); } if (substr($type, 0, 6) == 'guzzle') { $gdep = str_replace('/', ' ', $type); $gdep = ucwords($gdep); $gdep = str_replace(' ', '_', $gdep); $pfm->addPackageDepWithChannel('required', $gdep, 'guzzlephp.org/pear', $this->getVersion()); } } // can't have main Guzzle package AND sub-packages $pfm->addConflictingPackageDepWithChannel('Guzzle', 'guzzlephp.org/pear', false, $apiversion); ob_start(); $startdir = getcwd(); chdir((string) $this->basedir . '/build/pearwork'); echo "DEBUGGING GENERATED PACKAGE FILE\n"; $result = $pfm->debugPackageFile(); if ($result) { $out = $pfm->writePackageFile(); echo "\n\n\nWRITE PACKAGE FILE RESULT:\n"; var_dump($out); // load up package file and build package $packager = new PEAR_Packager(); echo "\n\n\nBUILDING PACKAGE FROM PACKAGE FILE:\n"; $dest_package = $packager->package($opts['packagedirectory'].'/package.xml'); var_dump($dest_package); } else { echo "\n\n\nDEBUGGING RESULT:\n"; var_dump($result); } echo "removing package.xml"; unlink($opts['packagedirectory'].'/package.xml'); $log = ob_get_clean(); file_put_contents((string) $this->basedir . '/build/artifacts/logs/pear_package_'.$package.'.log', $log); chdir($startdir); } public function findComponents() { $ds = new DirectoryScanner(); $ds->setBasedir((string) $this->basedir.'/.subsplit/src'); $ds->setIncludes(array('**/composer.json')); $ds->scan(); $files = $ds->getIncludedFiles(); $this->subpackages = $files; } public function grabChangelog() { $cl = file((string) $this->basedir.'/.subsplit/CHANGELOG.md'); $notes = ''; $in_version = false; $release_date = null; foreach ($cl as $line) { $line = trim($line); if (preg_match('/^\* '.$this->getVersion().' \(([0-9\-]+)\)$/', $line, $matches)) { $release_date = $matches[1]; $in_version = true; continue; } if ($in_version && empty($line) && empty($notes)) { continue; } if ($in_version && ! empty($line)) { $notes .= $line."\n"; } if ($in_version && empty($line) && !empty($notes)) { $in_version = false; } } $this->changelog_release_date = $release_date; if (! empty($notes)) { $this->changelog_notes = $notes; } } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.23 | Generation time: 0 |
proxy
|
phpinfo
|
Settings