Редакция 69 | Содержимое файла | Сравнить с предыдущей | Последнее изменение | Открыть журнал | RSS
Редакция | Автор | № строки | Строка |
---|---|---|---|
69 | alex-w | 1 | <?php |
2 | /** |
||
3 | * PEAR_Packager for generating releases |
||
4 | * |
||
5 | * PHP versions 4 and 5 |
||
6 | * |
||
7 | * LICENSE: This source file is subject to version 3.0 of the PHP license |
||
8 | * that is available through the world-wide-web at the following URI: |
||
9 | * http://www.php.net/license/3_0.txt. If you did not receive a copy of |
||
10 | * the PHP License and are unable to obtain it through the web, please |
||
11 | * send a note to license@php.net so we can mail you a copy immediately. |
||
12 | * |
||
13 | * @category pear |
||
14 | * @package PEAR |
||
15 | * @author Stig Bakken <ssb@php.net> |
||
16 | * @author Tomas V. V. Cox <cox@idecnet.com> |
||
17 | * @author Greg Beaver <cellog@php.net> |
||
18 | * @copyright 1997-2008 The PHP Group |
||
19 | * @license http://www.php.net/license/3_0.txt PHP License 3.0 |
||
20 | * @version CVS: $Id: Packager.php,v 1.71 2008/01/03 20:26:36 cellog Exp $ |
||
21 | * @link http://pear.php.net/package/PEAR |
||
22 | * @since File available since Release 0.1 |
||
23 | */ |
||
24 | |||
25 | /** |
||
26 | * base class |
||
27 | */ |
||
28 | require_once 'PEAR/Common.php'; |
||
29 | require_once 'PEAR/PackageFile.php'; |
||
30 | require_once 'System.php'; |
||
31 | |||
32 | /** |
||
33 | * Administration class used to make a PEAR release tarball. |
||
34 | * |
||
35 | * @category pear |
||
36 | * @package PEAR |
||
37 | * @author Greg Beaver <cellog@php.net> |
||
38 | * @copyright 1997-2008 The PHP Group |
||
39 | * @license http://www.php.net/license/3_0.txt PHP License 3.0 |
||
40 | * @version Release: 1.7.2 |
||
41 | * @link http://pear.php.net/package/PEAR |
||
42 | * @since Class available since Release 0.1 |
||
43 | */ |
||
44 | class PEAR_Packager extends PEAR_Common |
||
45 | { |
||
46 | /** |
||
47 | * @var PEAR_Registry |
||
48 | */ |
||
49 | var $_registry; |
||
50 | // {{{ package() |
||
51 | |||
52 | function package($pkgfile = null, $compress = true, $pkg2 = null) |
||
53 | { |
||
54 | // {{{ validate supplied package.xml file |
||
55 | if (empty($pkgfile)) { |
||
56 | $pkgfile = 'package.xml'; |
||
57 | } |
||
58 | PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN); |
||
59 | $pkg = &new PEAR_PackageFile($this->config, $this->debug); |
||
60 | $pf = &$pkg->fromPackageFile($pkgfile, PEAR_VALIDATE_NORMAL); |
||
61 | $main = &$pf; |
||
62 | PEAR::staticPopErrorHandling(); |
||
63 | if (PEAR::isError($pf)) { |
||
64 | if (is_array($pf->getUserInfo())) { |
||
65 | foreach ($pf->getUserInfo() as $error) { |
||
66 | $this->log(0, 'Error: ' . $error['message']); |
||
67 | } |
||
68 | } |
||
69 | $this->log(0, $pf->getMessage()); |
||
70 | return $this->raiseError("Cannot package, errors in package file"); |
||
71 | } else { |
||
72 | foreach ($pf->getValidationWarnings() as $warning) { |
||
73 | $this->log(1, 'Warning: ' . $warning['message']); |
||
74 | } |
||
75 | } |
||
76 | |||
77 | // }}} |
||
78 | if ($pkg2) { |
||
79 | $this->log(0, 'Attempting to process the second package file'); |
||
80 | PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN); |
||
81 | $pf2 = &$pkg->fromPackageFile($pkg2, PEAR_VALIDATE_NORMAL); |
||
82 | PEAR::staticPopErrorHandling(); |
||
83 | if (PEAR::isError($pf2)) { |
||
84 | if (is_array($pf2->getUserInfo())) { |
||
85 | foreach ($pf2->getUserInfo() as $error) { |
||
86 | $this->log(0, 'Error: ' . $error['message']); |
||
87 | } |
||
88 | } |
||
89 | $this->log(0, $pf2->getMessage()); |
||
90 | return $this->raiseError("Cannot package, errors in second package file"); |
||
91 | } else { |
||
92 | foreach ($pf2->getValidationWarnings() as $warning) { |
||
93 | $this->log(1, 'Warning: ' . $warning['message']); |
||
94 | } |
||
95 | } |
||
96 | if ($pf2->getPackagexmlVersion() == '2.0' || |
||
97 | $pf2->getPackagexmlVersion() == '2.1') { |
||
98 | $main = &$pf2; |
||
99 | $other = &$pf; |
||
100 | } else { |
||
101 | $main = &$pf; |
||
102 | $other = &$pf2; |
||
103 | } |
||
104 | if ($main->getPackagexmlVersion() != '2.0' && |
||
105 | $main->getPackagexmlVersion() != '2.1') { |
||
106 | return PEAR::raiseError('Error: cannot package two package.xml version 1.0, can ' . |
||
107 | 'only package together a package.xml 1.0 and package.xml 2.0'); |
||
108 | } |
||
109 | if ($other->getPackagexmlVersion() != '1.0') { |
||
110 | return PEAR::raiseError('Error: cannot package two package.xml version 2.0, can ' . |
||
111 | 'only package together a package.xml 1.0 and package.xml 2.0'); |
||
112 | } |
||
113 | } |
||
114 | $main->setLogger($this); |
||
115 | if (!$main->validate(PEAR_VALIDATE_PACKAGING)) { |
||
116 | foreach ($main->getValidationWarnings() as $warning) { |
||
117 | $this->log(0, 'Error: ' . $warning['message']); |
||
118 | } |
||
119 | return $this->raiseError("Cannot package, errors in package"); |
||
120 | } else { |
||
121 | foreach ($main->getValidationWarnings() as $warning) { |
||
122 | $this->log(1, 'Warning: ' . $warning['message']); |
||
123 | } |
||
124 | } |
||
125 | if ($pkg2) { |
||
126 | $other->setLogger($this); |
||
127 | $a = false; |
||
128 | if (!$other->validate(PEAR_VALIDATE_NORMAL) || $a = !$main->isEquivalent($other)) { |
||
129 | foreach ($other->getValidationWarnings() as $warning) { |
||
130 | $this->log(0, 'Error: ' . $warning['message']); |
||
131 | } |
||
132 | foreach ($main->getValidationWarnings() as $warning) { |
||
133 | $this->log(0, 'Error: ' . $warning['message']); |
||
134 | } |
||
135 | if ($a) { |
||
136 | return $this->raiseError('The two package.xml files are not equivalent!'); |
||
137 | } |
||
138 | return $this->raiseError("Cannot package, errors in package"); |
||
139 | } else { |
||
140 | foreach ($other->getValidationWarnings() as $warning) { |
||
141 | $this->log(1, 'Warning: ' . $warning['message']); |
||
142 | } |
||
143 | } |
||
144 | $gen = &$main->getDefaultGenerator(); |
||
145 | $tgzfile = $gen->toTgz2($this, $other, $compress); |
||
146 | if (PEAR::isError($tgzfile)) { |
||
147 | return $tgzfile; |
||
148 | } |
||
149 | $dest_package = basename($tgzfile); |
||
150 | $pkgdir = dirname($pkgfile); |
||
151 | |||
152 | // TAR the Package ------------------------------------------- |
||
153 | $this->log(1, "Package $dest_package done"); |
||
154 | if (file_exists("$pkgdir/CVS/Root")) { |
||
155 | $cvsversion = preg_replace('/[^a-z0-9]/i', '_', $pf->getVersion()); |
||
156 | $cvstag = "RELEASE_$cvsversion"; |
||
157 | $this->log(1, 'Tag the released code with "pear cvstag ' . |
||
158 | $main->getPackageFile() . '"'); |
||
159 | $this->log(1, "(or set the CVS tag $cvstag by hand)"); |
||
160 | } |
||
161 | } else { // this branch is executed for single packagefile packaging |
||
162 | $gen = &$pf->getDefaultGenerator(); |
||
163 | $tgzfile = $gen->toTgz($this, $compress); |
||
164 | if (PEAR::isError($tgzfile)) { |
||
165 | $this->log(0, $tgzfile->getMessage()); |
||
166 | return $this->raiseError("Cannot package, errors in package"); |
||
167 | } |
||
168 | $dest_package = basename($tgzfile); |
||
169 | $pkgdir = dirname($pkgfile); |
||
170 | |||
171 | // TAR the Package ------------------------------------------- |
||
172 | $this->log(1, "Package $dest_package done"); |
||
173 | if (file_exists("$pkgdir/CVS/Root")) { |
||
174 | $cvsversion = preg_replace('/[^a-z0-9]/i', '_', $pf->getVersion()); |
||
175 | $cvstag = "RELEASE_$cvsversion"; |
||
176 | $this->log(1, "Tag the released code with `pear cvstag $pkgfile'"); |
||
177 | $this->log(1, "(or set the CVS tag $cvstag by hand)"); |
||
178 | } |
||
179 | } |
||
180 | return $dest_package; |
||
181 | } |
||
182 | |||
183 | // }}} |
||
184 | } |
||
185 | |||
186 | // {{{ md5_file() utility function |
||
187 | if (!function_exists('md5_file')) { |
||
188 | function md5_file($file) { |
||
189 | if (!$fd = @fopen($file, 'r')) { |
||
190 | return false; |
||
191 | } |
||
192 | fclose($fd); |
||
193 | $md5 = md5(file_get_contents($file)); |
||
194 | return $md5; |
||
195 | } |
||
196 | } |
||
197 | // }}} |
||
198 | |||
199 | ?> |