Horde_Release_Sentinel::updateApplication PHP Method

updateApplication() public method

Update the Application.php or Bundle.php file in case it exists.
public updateApplication ( $version ) : null
return null
    public function updateApplication($version)
    {
        if ($application = $this->applicationFileExists()) {
            $tmp = Horde_Util::getTempFile();
            $oldmode = fileperms($application);
            $oldfp = fopen($application, 'r');
            $newfp = fopen($tmp, 'w');
            while ($line = fgets($oldfp)) {
                $line = preg_replace('/public \\$version = \'[^\']*\';/', 'public \\$version = \'' . $version . '\';', $line);
                fwrite($newfp, $line);
            }
            fclose($oldfp);
            fclose($newfp);
            chmod($tmp, $oldmode);
            system("mv -f {$tmp} {$application}");
        } elseif ($bundle = $this->bundleFileExists()) {
            $tmp = Horde_Util::getTempFile();
            $oldmode = fileperms($bundle);
            $oldfp = fopen($bundle, 'r');
            $newfp = fopen($tmp, 'w');
            while ($line = fgets($oldfp)) {
                $line = preg_replace('/const VERSION = \'[^\']*\';/', 'const VERSION = \'' . $version . '\';', $line);
                fwrite($newfp, $line);
            }
            fclose($oldfp);
            fclose($newfp);
            chmod($tmp, $oldmode);
            system("mv -f {$tmp} {$bundle}");
        }
    }

Usage Example

示例#1
0
    public function testUpdateBundle()
    {
        $tmp_dir = $this->getTemporaryDirectory();
        $sentinel = new Horde_Release_Sentinel($tmp_dir);
        mkdir($tmp_dir . '/lib');
        file_put_contents($tmp_dir . '/lib/Bundle.php', "class Horde_Bundle {\nconst VERSION = '0.0.0';\n}\n");
        $mode = fileperms($tmp_dir . '/lib/Bundle.php');
        $sentinel->updateApplication('1.0.0');
        $this->assertEquals('class Horde_Bundle {
const VERSION = \'1.0.0\';
}
', file_get_contents($tmp_dir . '/lib/Bundle.php'));
        clearstatcache();
        $this->assertEquals($mode, fileperms($tmp_dir . '/lib/Bundle.php'));
    }