aboutsummaryrefslogtreecommitdiffstats
path: root/3dparty/PEAR/Packager.php
diff options
context:
space:
mode:
authorJakob Sack <mail@jakobsack.de>2011-03-01 23:20:16 +0100
committerJakob Sack <mail@jakobsack.de>2011-03-01 23:20:16 +0100
commit132695ceb1d7ab0e4bfbb141e9e9639111dd25b5 (patch)
treef53fabcefd89a1e5bbeda9a2c2d2fff6683139d4 /3dparty/PEAR/Packager.php
parent1fd39a52fa750878e7d70fba63c099f252095762 (diff)
downloadnextcloud-server-132695ceb1d7ab0e4bfbb141e9e9639111dd25b5.tar.gz
nextcloud-server-132695ceb1d7ab0e4bfbb141e9e9639111dd25b5.zip
Start of the refactoring. Commit is quite big because I forgot to use git right from the beginning. Sorry.
Diffstat (limited to '3dparty/PEAR/Packager.php')
-rw-r--r--3dparty/PEAR/Packager.php165
1 files changed, 165 insertions, 0 deletions
diff --git a/3dparty/PEAR/Packager.php b/3dparty/PEAR/Packager.php
new file mode 100644
index 00000000000..3ed209be8b2
--- /dev/null
+++ b/3dparty/PEAR/Packager.php
@@ -0,0 +1,165 @@
+<?php
+//
+// +----------------------------------------------------------------------+
+// | PHP Version 5 |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2004 The PHP Group |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license, |
+// | that is bundled with this package in the file LICENSE, and is |
+// | available through the world-wide-web at the following url: |
+// | http://www.php.net/license/3_0.txt. |
+// | If you did not receive a copy of the PHP license and are unable to |
+// | obtain it through the world-wide-web, please send a note to |
+// | license@php.net so we can mail you a copy immediately. |
+// +----------------------------------------------------------------------+
+// | Authors: Stig Bakken <ssb@php.net> |
+// | Tomas V.V.Cox <cox@idecnet.com> |
+// +----------------------------------------------------------------------+
+//
+// $Id: Packager.php,v 1.53 2004/06/13 14:06:01 pajoye Exp $
+
+require_once 'PEAR/Common.php';
+require_once 'System.php';
+
+/**
+ * Administration class used to make a PEAR release tarball.
+ *
+ * TODO:
+ * - add an extra param the dir where to place the created package
+ *
+ * @since PHP 4.0.2
+ * @author Stig Bakken <ssb@php.net>
+ */
+class PEAR_Packager extends PEAR_Common
+{
+ // {{{ constructor
+
+ function PEAR_Packager()
+ {
+ parent::PEAR_Common();
+ }
+
+ // }}}
+ // {{{ destructor
+
+ function _PEAR_Packager()
+ {
+ parent::_PEAR_Common();
+ }
+
+ // }}}
+
+ // {{{ package()
+
+ function package($pkgfile = null, $compress = true)
+ {
+ // {{{ validate supplied package.xml file
+ if (empty($pkgfile)) {
+ $pkgfile = 'package.xml';
+ }
+ // $this->pkginfo gets populated inside
+ $pkginfo = $this->infoFromDescriptionFile($pkgfile);
+ if (PEAR::isError($pkginfo)) {
+ return $this->raiseError($pkginfo);
+ }
+
+ $pkgdir = dirname(realpath($pkgfile));
+ $pkgfile = basename($pkgfile);
+
+ $errors = $warnings = array();
+ $this->validatePackageInfo($pkginfo, $errors, $warnings, $pkgdir);
+ foreach ($warnings as $w) {
+ $this->log(1, "Warning: $w");
+ }
+ foreach ($errors as $e) {
+ $this->log(0, "Error: $e");
+ }
+ if (sizeof($errors) > 0) {
+ return $this->raiseError('Errors in package');
+ }
+ // }}}
+
+ $pkgver = $pkginfo['package'] . '-' . $pkginfo['version'];
+
+ // {{{ Create the package file list
+ $filelist = array();
+ $i = 0;
+
+ foreach ($pkginfo['filelist'] as $fname => $atts) {
+ $file = $pkgdir . DIRECTORY_SEPARATOR . $fname;
+ if (!file_exists($file)) {
+ return $this->raiseError("File does not exist: $fname");
+ } else {
+ $filelist[$i++] = $file;
+ if (empty($pkginfo['filelist'][$fname]['md5sum'])) {
+ $md5sum = md5_file($file);
+ $pkginfo['filelist'][$fname]['md5sum'] = $md5sum;
+ }
+ $this->log(2, "Adding file $fname");
+ }
+ }
+ // }}}
+
+ // {{{ regenerate package.xml
+ $new_xml = $this->xmlFromInfo($pkginfo);
+ if (PEAR::isError($new_xml)) {
+ return $this->raiseError($new_xml);
+ }
+ if (!($tmpdir = System::mktemp(array('-d')))) {
+ return $this->raiseError("PEAR_Packager: mktemp failed");
+ }
+ $newpkgfile = $tmpdir . DIRECTORY_SEPARATOR . 'package.xml';
+ $np = @fopen($newpkgfile, 'wb');
+ if (!$np) {
+ return $this->raiseError("PEAR_Packager: unable to rewrite $pkgfile as $newpkgfile");
+ }
+ fwrite($np, $new_xml);
+ fclose($np);
+ // }}}
+
+ // {{{ TAR the Package -------------------------------------------
+ $ext = $compress ? '.tgz' : '.tar';
+ $dest_package = getcwd() . DIRECTORY_SEPARATOR . $pkgver . $ext;
+ $tar =& new Archive_Tar($dest_package, $compress);
+ $tar->setErrorHandling(PEAR_ERROR_RETURN); // XXX Don't print errors
+ // ----- Creates with the package.xml file
+ $ok = $tar->createModify(array($newpkgfile), '', $tmpdir);
+ if (PEAR::isError($ok)) {
+ return $this->raiseError($ok);
+ } elseif (!$ok) {
+ return $this->raiseError('PEAR_Packager: tarball creation failed');
+ }
+ // ----- Add the content of the package
+ if (!$tar->addModify($filelist, $pkgver, $pkgdir)) {
+ return $this->raiseError('PEAR_Packager: tarball creation failed');
+ }
+ $this->log(1, "Package $dest_package done");
+ if (file_exists("$pkgdir/CVS/Root")) {
+ $cvsversion = preg_replace('/[^a-z0-9]/i', '_', $pkginfo['version']);
+ $cvstag = "RELEASE_$cvsversion";
+ $this->log(1, "Tag the released code with `pear cvstag $pkgfile'");
+ $this->log(1, "(or set the CVS tag $cvstag by hand)");
+ }
+ // }}}
+
+ return $dest_package;
+ }
+
+ // }}}
+}
+
+// {{{ md5_file() utility function
+if (!function_exists('md5_file')) {
+ function md5_file($file) {
+ if (!$fd = @fopen($file, 'r')) {
+ return false;
+ }
+ $md5 = md5(fread($fd, filesize($file)));
+ fclose($fd);
+ return $md5;
+ }
+}
+// }}}
+
+?>