Mage_Downloader - Version 1.6.2.0

Version Notes

1.6.2.0

Download this release

Release Info

Developer Magento Core Team
Extension Mage_Downloader
Version 1.6.2.0
Comparing to
See all releases


Code changes from version 1.6.1.0 to 1.6.2.0

downloader/lib/Mage/Connect/Packager.php CHANGED
@@ -31,38 +31,52 @@
31
* @package Mage_Connect
32
* @author Magento Core Team <core@magentocommerce.com>
33
*/
34
-
35
class Mage_Connect_Packager
36
{
37
- const CONFIG_FILE_NAME='downloader/connect.cfg';
38
- const CACHE_FILE_NAME='downloader/cache.cfg';
39
-
40
- protected $install_states = array(
41
- 'install' => 'Ready to install',
42
- 'upgrade' => 'Ready to upgrade',
43
- 'already_installed' => 'Already installed',
44
- 'wrong_version' => 'Wrong version',
45
- );
46
-
47
/**
48
- * Constructor
49
- * @param Mage_connect_Config $config
50
*/
51
- public function __construct()
52
- {
53
54
- }
55
56
/**
57
*
58
* @var Mage_Archive
59
*/
60
protected $_archiver = null;
61
- protected $_http = null;
62
-
63
64
65
/**
66
*
67
* @return Mage_Archive
68
*/
@@ -74,6 +88,10 @@ class Mage_Connect_Packager
74
return $this->_archiver;
75
}
76
77
public function getDownloader()
78
{
79
if(is_null($this->_http)) {
@@ -82,7 +100,12 @@ class Mage_Connect_Packager
82
return $this->_http;
83
}
84
85
-
86
public function getRemoteConf($ftpString)
87
{
88
$ftpObj = new Mage_Connect_Ftp();
@@ -90,7 +113,6 @@ class Mage_Connect_Packager
90
$cfgFile = self::CONFIG_FILE_NAME;
91
$cacheFile = self::CACHE_FILE_NAME;
92
93
-
94
$wd = $ftpObj->getcwd();
95
96
$remoteConfigExists = $ftpObj->fileExists($cfgFile);
@@ -121,7 +143,12 @@ class Mage_Connect_Packager
121
return array($remoteCache, $remoteCfg, $ftpObj);
122
}
123
124
-
125
public function getRemoteCache($ftpString)
126
{
127
@@ -141,7 +168,12 @@ class Mage_Connect_Packager
141
return array($remoteCfg, $ftpObj);
142
}
143
144
-
145
public function getRemoteConfig($ftpString)
146
{
147
$ftpObj = new Mage_Connect_Ftp();
@@ -163,6 +195,13 @@ class Mage_Connect_Packager
163
return array($remoteCfg, $ftpObj);
164
}
165
166
public function writeToRemoteCache($cache, $ftpObj)
167
{
168
$wd = $ftpObj->getcwd();
@@ -171,6 +210,13 @@ class Mage_Connect_Packager
171
$ftpObj->chdir($wd);
172
}
173
174
public function writeToRemoteConfig($cache, $ftpObj)
175
{
176
$wd = $ftpObj->getcwd();
@@ -181,6 +227,7 @@ class Mage_Connect_Packager
181
182
/**
183
* Remove empty directories recursively up
184
* @param string $dir
185
* @param Mage_Connect_Ftp $ftp
186
*/
@@ -200,12 +247,13 @@ class Mage_Connect_Packager
200
}
201
202
/**
203
*
204
- * @param $chanName
205
- * @param $package
206
* @param Mage_Connect_Singleconfig $cacheObj
207
* @param Mage_Connect_Config $configObj
208
- * @return unknown_type
209
*/
210
public function processUninstallPackage($chanName, $package, $cacheObj, $configObj)
211
{
@@ -229,12 +277,13 @@ class Mage_Connect_Packager
229
}
230
231
/**
232
*
233
* @param $chanName
234
* @param $package
235
* @param Mage_Connect_Singleconfig $cacheObj
236
* @param Mage_Connect_Ftp $ftp
237
- * @return unknown_type
238
*/
239
public function processUninstallPackageFtp($chanName, $package, $cacheObj, $ftp)
240
{
@@ -242,7 +291,7 @@ class Mage_Connect_Packager
242
$package = $cacheObj->getPackageObject($chanName, $package);
243
$contents = $package->getContents();
244
foreach($contents as $file) {
245
- $res = $ftp->delete($file);
246
$this->removeEmptyDirectory(dirname($file), $ftp);
247
}
248
$remoteXml = Mage_Connect_Package::PACKAGE_XML_DIR . DS . $package->getReleaseFilename() . '.xml';
@@ -264,8 +313,8 @@ class Mage_Connect_Packager
264
}
265
return true;
266
}
267
/**
268
- *
269
* Return correct global dir mode in octal representation
270
*
271
* @param Maged_Model_Config $config
@@ -306,6 +355,15 @@ class Mage_Connect_Packager
306
return str_replace("\\", "/", $str);
307
}
308
309
public function processInstallPackageFtp($package, $file, $configObj, $ftp)
310
{
311
$ftpDir = $ftp->getcwd();
@@ -317,8 +375,6 @@ class Mage_Connect_Packager
317
$modeFile = $this->_getFileMode($configObj);
318
$modeDir = $this->_getDirMode($configObj);
319
foreach($contents as $file) {
320
- $fileName = basename($file);
321
- $filePath = $this->convertFtpPath(dirname($file));
322
$source = $tar.DS.$file;
323
if (file_exists($source) && is_file($source)) {
324
$args = array(ltrim($file,"/"), $source);
@@ -342,6 +398,7 @@ class Mage_Connect_Packager
342
343
/**
344
* Package installation to FS
345
* @param Mage_Connect_Package $package
346
* @param string $file
347
* @return void
@@ -356,11 +413,11 @@ class Mage_Connect_Packager
356
$tar = $arc->unpack($file, $target);
357
$modeFile = $this->_getFileMode($configObj);
358
$modeDir = $this->_getDirMode($configObj);
359
foreach($contents as $file) {
360
$fileName = basename($file);
361
$filePath = dirname($file);
362
$source = $tar.DS.$file;
363
- $targetPath = rtrim($configObj->magento_root, "\\/");
364
@mkdir($targetPath. DS . $filePath, $modeDir, true);
365
$dest = $targetPath . DS . $filePath . DS . $fileName;
366
if (is_file($source)) {
@@ -386,13 +443,13 @@ class Mage_Connect_Packager
386
Mage_System_Dirs::rm(array("-r",$target));
387
}
388
389
-
390
/**
391
* Get local modified files
392
- * @param $chanName
393
- * @param $package
394
- * @param $cacheObj
395
- * @param $configObj
396
* @return array
397
*/
398
public function getLocalModifiedFiles($chanName, $package, $cacheObj, $configObj)
@@ -411,9 +468,9 @@ class Mage_Connect_Packager
411
/**
412
* Get remote modified files
413
*
414
- * @param $chanName
415
- * @param $package
416
- * @param $cacheObj
417
* @param Mage_Connect_Ftp $ftp
418
* @return array
419
*/
@@ -436,9 +493,7 @@ class Mage_Connect_Packager
436
return $listModified;
437
}
438
439
-
440
/**
441
- *
442
* Get upgrades list
443
*
444
* @param string/array $channels
@@ -490,7 +545,7 @@ class Mage_Connect_Packager
490
$remoteVersion = $localVersion = trim($localData[Mage_Connect_Singleconfig::K_VER]);
491
foreach($package as $version => $s) {
492
493
- if( $cacheObject->compareStabilities($s, $state) < 0 ) {
494
continue;
495
}
496
@@ -520,6 +575,7 @@ class Mage_Connect_Packager
520
521
/**
522
* Get uninstall list
523
* @param string $chanName
524
* @param string $package
525
* @param Mage_Connect_Singleconfig $cache
@@ -533,7 +589,6 @@ class Mage_Connect_Packager
533
static $hash = array();
534
535
$chanName = $cache->chanName($chanName);
536
- $keyOuter = $chanName . "/" . $package;
537
$level++;
538
539
try {
@@ -549,10 +604,8 @@ class Mage_Connect_Packager
549
$dependencies = $cache->getPackageDependencies($chanName, $package);
550
$data = $cache->getPackage($chanName, $package);
551
$version = $data['version'];
552
- $keyOuter = $chanName . "/" . $package;
553
554
- //print "Processing outer: {$keyOuter} \n";
555
- $hash[$keyOuter] = array (
556
'name' => $package,
557
'channel' => $chanName,
558
'version' => $version,
@@ -560,10 +613,14 @@ class Mage_Connect_Packager
560
);
561
562
if($withDepsRecursive) {
563
- $flds = array('name','channel','min','max');
564
- $fldsCount = count($flds);
565
foreach($dependencies as $row) {
566
- foreach($flds as $key) {
567
$varName = "p".ucfirst($key);
568
$varName = $row[$key];
569
}
@@ -577,13 +634,6 @@ class Mage_Connect_Packager
577
}
578
579
} catch (Exception $e) {
580
- // $this->_failed[] = array(
581
- // 'name'=>$package,
582
- // 'channel'=>$chanName,
583
- // 'max'=>$versionMax,
584
- // 'min'=>$versionMin,
585
- // 'reason'=>$e->getMessage()
586
- // );
587
}
588
589
$level--;
@@ -596,6 +646,7 @@ class Mage_Connect_Packager
596
597
/**
598
* Add data to package dependencies hash array
599
* @param array $hash Package dependencies hash array
600
* @param string $name Package name
601
* @param string $channel Package chaannel
@@ -603,19 +654,19 @@ class Mage_Connect_Packager
603
* @param string $stability Package stability
604
* @param string $versionMin Required package minimum version
605
* @param string $versionMax Required package maximum version
606
- * @param string $install_state Package install state
607
* @param string $message Package install message
608
* @param array $dependencies Package dependencies
609
*/
610
private function addHashData(&$hash, $name, $channel, $downloaded_version = '', $stability = '', $versionMin = '',
611
- $versionMax = '', $install_state = '', $message = '', $dependencies = '')
612
{
613
/**
614
- * @todo When we are building dependencies tree we should base this calculations not on full key as on a
615
* unique value but check it by parts. First part which should be checked is EXTENSION_NAME also this
616
* part should be unique globally not per channel.
617
*/
618
- //$key = $chanName . "/" . $package;
619
$key = $name;
620
$hash[$key] = array (
621
'name' => $name,
@@ -624,19 +675,17 @@ class Mage_Connect_Packager
624
'stability' => $stability,
625
'min' => $versionMin,
626
'max' => $versionMax,
627
- 'install_state' => $install_state,
628
- 'message' => (isset($this->install_states[$install_state]) ?
629
- $this->install_states[$install_state] : '').$message,
630
'packages' => $dependencies,
631
);
632
-
633
return true;
634
}
635
636
/**
637
* Get dependencies list/install order info
638
*
639
- *
640
* @param string $chanName
641
* @param string $package
642
* @param Mage_Connect_Singleconfig $cache
@@ -651,16 +700,13 @@ class Mage_Connect_Packager
651
public function getDependenciesList( $chanName, $package, $cache, $config, $versionMax = false, $versionMin = false,
652
$withDepsRecursive = true, $forceRemote = false, $rest = null)
653
{
654
-
655
static $level = 0;
656
static $_depsHash = array();
657
static $_deps = array();
658
static $_failed = array();
659
- $install_state = 'install';
660
$version = '';
661
- $stability = '';
662
$message = '';
663
- $dependencies = array();
664
665
$level++;
666
@@ -709,31 +755,31 @@ class Mage_Connect_Packager
709
$stability = $packageInfo->getStability();
710
711
/**
712
- * @todo check is package already installed
713
*/
714
if ($installedPackage = $cache->isPackageInstalled($package)) {
715
if ($chanName == $installedPackage['channel']){
716
/**
717
- * @todo check versions!!!
718
*/
719
if (version_compare($version, $installedPackage['version'], '>')) {
720
- $install_state = 'upgrade';
721
} elseif (version_compare($version, $installedPackage['version'], '<')) {
722
$version = $installedPackage['version'];
723
$stability = $installedPackage['stability'];
724
- $install_state = 'wrong_version';
725
} else {
726
- $install_state = 'already_installed';
727
}
728
} else {
729
- $install_state = 'incompatible';
730
}
731
}
732
733
$deps_tmp = $packageInfo->getDependencyPackages();
734
735
/**
736
- * @todo Select distinct packages grouped by name
737
*/
738
$dependencies = array();
739
foreach ($deps_tmp as $row) {
@@ -751,20 +797,25 @@ class Mage_Connect_Packager
751
}
752
753
/**
754
- * @todo When we are building dependencies tree we should base this calculations not on full key as on a
755
* unique value but check it by parts. First part which should be checked is EXTENSION_NAME also this part
756
* should be unique globally not per channel.
757
*/
758
- // $keyOuter = $chanName . "/" . $package;
759
- $keyOuter = $package;
760
-
761
- $this->addHashData($_depsHash, $package, $chanName, $version, $stability, $versionMin,
762
- $versionMax, $install_state, $message, $dependencies);
763
764
- if ($withDepsRecursive && 'incompatible' != $install_state) {
765
$flds = array('name','channel','min','max');
766
- $fldsCount = count($flds);
767
foreach($dependencies as $row) {
768
foreach($flds as $key) {
769
$varName = "p".ucfirst($key);
770
$varName = $row[$key];
@@ -775,7 +826,6 @@ class Mage_Connect_Packager
775
* on a unique value but check it by parts. First part which should be checked is EXTENSION_NAME
776
* also this part should be unique globally not per channel.
777
*/
778
- //$keyInner = $pChannel . "/" . $pName;
779
$keyInner = $pName;
780
if(!isset($_depsHash[$keyInner])) {
781
$_deps[] = $row;
@@ -786,12 +836,10 @@ class Mage_Connect_Packager
786
$hasMin = $_depsHash[$keyInner]['min'];
787
$hasMax = $_depsHash[$keyInner]['max'];
788
if($pMin === $hasMin && $pMax === $hasMax) {
789
- //var_dump("Equal requirements, skipping");
790
continue;
791
}
792
793
if($cache->versionInRange($downloaded, $pMin, $pMax)) {
794
- //var_dump("Downloaded package matches new range too");
795
continue;
796
}
797
@@ -822,7 +870,6 @@ class Mage_Connect_Packager
822
$newMinIsGreater = version_compare($pMin, $hasMin, ">");
823
$forceMax = $newMaxIsLess ? $pMax : $hasMax;
824
$forceMin = $newMinIsGreater ? $pMin : $hasMin;
825
- //var_dump("Trying to process {$pName} : max {$forceMax} - min {$forceMin}");
826
$this->$method($pChannel, $pName, $cache, $config,
827
$forceMax, $forceMin, $withDepsRecursive, $forceRemote, $rest);
828
}
@@ -839,7 +886,6 @@ class Mage_Connect_Packager
839
);
840
}
841
842
-
843
$level--;
844
if($level == 0) {
845
$out = $this->processDepsHash($_depsHash, false);
@@ -850,13 +896,11 @@ class Mage_Connect_Packager
850
$_failed = array();
851
return array('deps' => $deps, 'result' => $out, 'failed'=> $failed);
852
}
853
-
854
}
855
856
857
/**
858
- * Process dependencies hash
859
- * Makes topological sorting and gives operation order list
860
*
861
* @param array $depsHash
862
* @param bool $sortReverse
@@ -896,8 +940,7 @@ class Mage_Connect_Packager
896
$result = $graph->topologicalSort();
897
$sortReverse ? krsort($result) : ksort($result);
898
$out = array();
899
- $total = 0;
900
- foreach($result as $order=>$nodes) {
901
foreach($nodes as $n) {
902
$out[] = $n->getData();
903
}
@@ -905,5 +948,4 @@ class Mage_Connect_Packager
905
unset($graph, $nodes);
906
return $out;
907
}
908
-
909
}
31
* @package Mage_Connect
32
* @author Magento Core Team <core@magentocommerce.com>
33
*/
34
class Mage_Connect_Packager
35
{
36
/**
37
+ * Default Config File name
38
*/
39
+ const CONFIG_FILE_NAME = 'downloader/connect.cfg';
40
+ /**
41
+ * Default Cache Config File name
42
+ */
43
+ const CACHE_FILE_NAME = 'downloader/cache.cfg';
44
45
+ /**
46
+ * Install states of package
47
+ */
48
+ const INSTALL_STATE_INSTALL = 'install';
49
+ const INSTALL_STATE_UPGRADE = 'upgrade';
50
+ const INSTALL_STATE_WRONG_VERSION = 'wrong_version';
51
+ const INSTALL_STATE_ALREADY_INSTALLED = 'already_installed';
52
+ const INSTALL_STATE_INCOMPATIBLE = 'incompatible';
53
54
/**
55
+ * Install states messages
56
*
57
+ * @var array
58
+ */
59
+ protected $installStates = array(
60
+ self::INSTALL_STATE_INSTALL => 'Ready to install',
61
+ self::INSTALL_STATE_UPGRADE => 'Ready to upgrade',
62
+ self::INSTALL_STATE_ALREADY_INSTALLED => 'Already installed',
63
+ self::INSTALL_STATE_WRONG_VERSION => 'Wrong version',
64
+ );
65
+
66
+ /**
67
+ * Archiver object
68
* @var Mage_Archive
69
*/
70
protected $_archiver = null;
71
72
+ /**
73
+ * HTTP Client (Curl/Socket etc)
74
+ * @var Mage_HTTP_IClient
75
+ */
76
+ protected $_http = null;
77
78
/**
79
+ * Get Archiver object
80
*
81
* @return Mage_Archive
82
*/
88
return $this->_archiver;
89
}
90
91
+ /**
92
+ * Returns HTTP Client
93
+ * @return Mage_HTTP_IClient|null
94
+ */
95
public function getDownloader()
96
{
97
if(is_null($this->_http)) {
100
return $this->_http;
101
}
102
103
+ /**
104
+ * Get config data and cache config data remotely
105
+ *
106
+ * @param string $ftpString
107
+ * @return array
108
+ */
109
public function getRemoteConf($ftpString)
110
{
111
$ftpObj = new Mage_Connect_Ftp();
113
$cfgFile = self::CONFIG_FILE_NAME;
114
$cacheFile = self::CACHE_FILE_NAME;
115
116
$wd = $ftpObj->getcwd();
117
118
$remoteConfigExists = $ftpObj->fileExists($cfgFile);
143
return array($remoteCache, $remoteCfg, $ftpObj);
144
}
145
146
+ /**
147
+ * Get Cache config data remotely
148
+ *
149
+ * @param string $ftpString
150
+ * @return array
151
+ */
152
public function getRemoteCache($ftpString)
153
{
154
168
return array($remoteCfg, $ftpObj);
169
}
170
171
+ /**
172
+ * Get config data remotely
173
+ *
174
+ * @param string $ftpString
175
+ * @return array
176
+ */
177
public function getRemoteConfig($ftpString)
178
{
179
$ftpObj = new Mage_Connect_Ftp();
195
return array($remoteCfg, $ftpObj);
196
}
197
198
+ /**
199
+ * Write Cache config remotely
200
+ *
201
+ * @param Mage_Connect_Singleconfig $cache
202
+ * @param Mage_Connect_Ftp $ftpObj
203
+ * @return void
204
+ */
205
public function writeToRemoteCache($cache, $ftpObj)
206
{
207
$wd = $ftpObj->getcwd();
210
$ftpObj->chdir($wd);
211
}
212
213
+ /**
214
+ * Write config remotely
215
+ *
216
+ * @param Mage_Connect_Config $cache
217
+ * @param Mage_Connect_Ftp $ftpObj
218
+ * @return void
219
+ */
220
public function writeToRemoteConfig($cache, $ftpObj)
221
{
222
$wd = $ftpObj->getcwd();
227
228
/**
229
* Remove empty directories recursively up
230
+ *
231
* @param string $dir
232
* @param Mage_Connect_Ftp $ftp
233
*/
247
}
248
249
/**
250
+ * Uninstall Package
251
*
252
+ * @param string $chanName
253
+ * @param string $package
254
* @param Mage_Connect_Singleconfig $cacheObj
255
* @param Mage_Connect_Config $configObj
256
+ * @return void
257
*/
258
public function processUninstallPackage($chanName, $package, $cacheObj, $configObj)
259
{
277
}
278
279
/**
280
+ * Uninstall Package over FTP
281
*
282
* @param $chanName
283
* @param $package
284
* @param Mage_Connect_Singleconfig $cacheObj
285
* @param Mage_Connect_Ftp $ftp
286
+ * @return void
287
*/
288
public function processUninstallPackageFtp($chanName, $package, $cacheObj, $ftp)
289
{
291
$package = $cacheObj->getPackageObject($chanName, $package);
292
$contents = $package->getContents();
293
foreach($contents as $file) {
294
+ $ftp->delete($file);
295
$this->removeEmptyDirectory(dirname($file), $ftp);
296
}
297
$remoteXml = Mage_Connect_Package::PACKAGE_XML_DIR . DS . $package->getReleaseFilename() . '.xml';
313
}
314
return true;
315
}
316
+
317
/**
318
* Return correct global dir mode in octal representation
319
*
320
* @param Maged_Model_Config $config
355
return str_replace("\\", "/", $str);
356
}
357
358
+ /**
359
+ * Install package over FTP
360
+ *
361
+ * @param Mage_Connect_Package $package
362
+ * @param string $file
363
+ * @param Maged_Model_Config $configObj
364
+ * @param Mage_Connect_Ftp $ftp
365
+ * @return void
366
+ */
367
public function processInstallPackageFtp($package, $file, $configObj, $ftp)
368
{
369
$ftpDir = $ftp->getcwd();
375
$modeFile = $this->_getFileMode($configObj);
376
$modeDir = $this->_getDirMode($configObj);
377
foreach($contents as $file) {
378
$source = $tar.DS.$file;
379
if (file_exists($source) && is_file($source)) {
380
$args = array(ltrim($file,"/"), $source);
398
399
/**
400
* Package installation to FS
401
+ *
402
* @param Mage_Connect_Package $package
403
* @param string $file
404
* @return void
413
$tar = $arc->unpack($file, $target);
414
$modeFile = $this->_getFileMode($configObj);
415
$modeDir = $this->_getDirMode($configObj);
416
+ $targetPath = rtrim($configObj->magento_root, "\\/");
417
foreach($contents as $file) {
418
$fileName = basename($file);
419
$filePath = dirname($file);
420
$source = $tar.DS.$file;
421
@mkdir($targetPath. DS . $filePath, $modeDir, true);
422
$dest = $targetPath . DS . $filePath . DS . $fileName;
423
if (is_file($source)) {
443
Mage_System_Dirs::rm(array("-r",$target));
444
}
445
446
/**
447
* Get local modified files
448
+ *
449
+ * @param string $chanName
450
+ * @param string $package
451
+ * @param Mage_Connect_Singleconfig $cacheObj
452
+ * @param Mage_Connect_Config $configObj
453
* @return array
454
*/
455
public function getLocalModifiedFiles($chanName, $package, $cacheObj, $configObj)
468
/**
469
* Get remote modified files
470
*
471
+ * @param string $chanName
472
+ * @param string $package
473
+ * @param Mage_Connect_Singleconfig $cacheObj
474
* @param Mage_Connect_Ftp $ftp
475
* @return array
476
*/
493
return $listModified;
494
}
495
496
/**
497
* Get upgrades list
498
*
499
* @param string/array $channels
545
$remoteVersion = $localVersion = trim($localData[Mage_Connect_Singleconfig::K_VER]);
546
foreach($package as $version => $s) {
547
548
+ if($cacheObject->compareStabilities($s, $state) < 0) {
549
continue;
550
}
551
575
576
/**
577
* Get uninstall list
578
+ *
579
* @param string $chanName
580
* @param string $package
581
* @param Mage_Connect_Singleconfig $cache
589
static $hash = array();
590
591
$chanName = $cache->chanName($chanName);
592
$level++;
593
594
try {
604
$dependencies = $cache->getPackageDependencies($chanName, $package);
605
$data = $cache->getPackage($chanName, $package);
606
$version = $data['version'];
607
608
+ $hash[$chanName . "/" . $package] = array (
609
'name' => $package,
610
'channel' => $chanName,
611
'version' => $version,
613
);
614
615
if($withDepsRecursive) {
616
+ $fields = array('name','channel','min','max');
617
foreach($dependencies as $row) {
618
+ /**
619
+ * Converts an array to variables
620
+ * @var $pChannel string Channel Name
621
+ * @var $pName string Package Name
622
+ */
623
+ foreach($fields as $key) {
624
$varName = "p".ucfirst($key);
625
$varName = $row[$key];
626
}
634
}
635
636
} catch (Exception $e) {
637
}
638
639
$level--;
646
647
/**
648
* Add data to package dependencies hash array
649
+ *
650
* @param array $hash Package dependencies hash array
651
* @param string $name Package name
652
* @param string $channel Package chaannel
654
* @param string $stability Package stability
655
* @param string $versionMin Required package minimum version
656
* @param string $versionMax Required package maximum version
657
+ * @param string $installState Package install state
658
* @param string $message Package install message
659
* @param array $dependencies Package dependencies
660
+ * @return bool
661
*/
662
private function addHashData(&$hash, $name, $channel, $downloaded_version = '', $stability = '', $versionMin = '',
663
+ $versionMax = '', $installState = '', $message = '', $dependencies = '')
664
{
665
/**
666
+ * When we are building dependencies tree we should base this calculations not on full key as on a
667
* unique value but check it by parts. First part which should be checked is EXTENSION_NAME also this
668
* part should be unique globally not per channel.
669
*/
670
$key = $name;
671
$hash[$key] = array (
672
'name' => $name,
675
'stability' => $stability,
676
'min' => $versionMin,
677
'max' => $versionMax,
678
+ 'install_state' => $installState,
679
+ 'message' => (isset($this->installStates[$installState]) ?
680
+ $this->installStates[$installState] : '').$message,
681
'packages' => $dependencies,
682
);
683
return true;
684
}
685
686
/**
687
* Get dependencies list/install order info
688
*
689
* @param string $chanName
690
* @param string $package
691
* @param Mage_Connect_Singleconfig $cache
700
public function getDependenciesList( $chanName, $package, $cache, $config, $versionMax = false, $versionMin = false,
701
$withDepsRecursive = true, $forceRemote = false, $rest = null)
702
{
703
static $level = 0;
704
static $_depsHash = array();
705
static $_deps = array();
706
static $_failed = array();
707
+ $install_state = self::INSTALL_STATE_INSTALL;
708
$version = '';
709
$message = '';
710
711
$level++;
712
755
$stability = $packageInfo->getStability();
756
757
/**
758
+ * check is package already installed
759
*/
760
if ($installedPackage = $cache->isPackageInstalled($package)) {
761
if ($chanName == $installedPackage['channel']){
762
/**
763
+ * check versions
764
*/
765
if (version_compare($version, $installedPackage['version'], '>')) {
766
+ $install_state = self::INSTALL_STATE_UPGRADE;
767
} elseif (version_compare($version, $installedPackage['version'], '<')) {
768
$version = $installedPackage['version'];
769
$stability = $installedPackage['stability'];
770
+ $install_state = self::INSTALL_STATE_WRONG_VERSION;
771
} else {
772
+ $install_state = self::INSTALL_STATE_ALREADY_INSTALLED;
773
}
774
} else {
775
+ $install_state = self::INSTALL_STATE_INCOMPATIBLE;
776
}
777
}
778
779
$deps_tmp = $packageInfo->getDependencyPackages();
780
781
/**
782
+ * Select distinct packages grouped by name
783
*/
784
$dependencies = array();
785
foreach ($deps_tmp as $row) {
797
}
798
799
/**
800
+ * When we are building dependencies tree we should base this calculations not on full key as on a
801
* unique value but check it by parts. First part which should be checked is EXTENSION_NAME also this part
802
* should be unique globally not per channel.
803
*/
804
+ if (self::INSTALL_STATE_INCOMPATIBLE != $install_state) {
805
+ $this->addHashData($_depsHash, $package, $chanName, $version, $stability, $versionMin,
806
+ $versionMax, $install_state, $message, $dependencies);
807
+ }
808
809
+ if ($withDepsRecursive && self::INSTALL_STATE_INCOMPATIBLE != $install_state) {
810
$flds = array('name','channel','min','max');
811
foreach($dependencies as $row) {
812
+ /**
813
+ * Converts an array to variables
814
+ * @var $pChannel string Channel Name
815
+ * @var $pName string Package Name
816
+ * @var $pMax string Maximum version number
817
+ * @var $pMin string Minimum version number
818
+ */
819
foreach($flds as $key) {
820
$varName = "p".ucfirst($key);
821
$varName = $row[$key];
826
* on a unique value but check it by parts. First part which should be checked is EXTENSION_NAME
827
* also this part should be unique globally not per channel.
828
*/
829
$keyInner = $pName;
830
if(!isset($_depsHash[$keyInner])) {
831
$_deps[] = $row;
836
$hasMin = $_depsHash[$keyInner]['min'];
837
$hasMax = $_depsHash[$keyInner]['max'];
838
if($pMin === $hasMin && $pMax === $hasMax) {
839
continue;
840
}
841
842
if($cache->versionInRange($downloaded, $pMin, $pMax)) {
843
continue;
844
}
845
870
$newMinIsGreater = version_compare($pMin, $hasMin, ">");
871
$forceMax = $newMaxIsLess ? $pMax : $hasMax;
872
$forceMin = $newMinIsGreater ? $pMin : $hasMin;
873
$this->$method($pChannel, $pName, $cache, $config,
874
$forceMax, $forceMin, $withDepsRecursive, $forceRemote, $rest);
875
}
886
);
887
}
888
889
$level--;
890
if($level == 0) {
891
$out = $this->processDepsHash($_depsHash, false);
896
$_failed = array();
897
return array('deps' => $deps, 'result' => $out, 'failed'=> $failed);
898
}
899
}
900
901
902
/**
903
+ * Process dependencies hash. Makes topological sorting and gives operation order list
904
*
905
* @param array $depsHash
906
* @param bool $sortReverse
940
$result = $graph->topologicalSort();
941
$sortReverse ? krsort($result) : ksort($result);
942
$out = array();
943
+ foreach($result as $nodes) {
944
foreach($nodes as $n) {
945
$out[] = $n->getData();
946
}
948
unset($graph, $nodes);
949
return $out;
950
}
951
}
package.xml CHANGED
@@ -1,18 +1,18 @@
1
<?xml version="1.0"?>
2
<package>
3
<name>Mage_Downloader</name>
4
- <version>1.6.1.0</version>
5
<stability>stable</stability>
6
<license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
7
<channel>community</channel>
8
<extends/>
9
<summary>Magento Downloader</summary>
10
<description>Magento Downloader</description>
11
- <notes>1.6.1.0</notes>
12
<authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
13
- <date>2011-10-19</date>
14
- <time>11:50:15</time>
15
- <contents><target name="mage"><dir name="downloader"><dir name="js"><file name="prototype.js" hash="3766aeff5778b54f74f93670322ca0df"/></dir><dir name="Maged"><dir name="Connect"><file name="Frontend.php" hash="e469328440d5d865db40ed6dec2eb0dd"/></dir><file name="Connect.php" hash="3878355516c34d9544a02d44a4c1e2b8"/><file name="Controller.php" hash="667cee056eef10004144cbadab05a299"/><file name="Exception.php" hash="31befe07df0a61598f063f543991a04b"/><dir name="Model"><dir name="Config"><file name="Abstract.php" hash="b87bd9947efce3f373ff65e0c997334e"/><file name="Community.php" hash="0e39f2375ec50ef5c8d7994e67eaf49e"/><file name="Interface.php" hash="fe6daef73f9f63adcce14dd322a41050"/></dir><file name="Config.php" hash="0fdf21421b2874620f4708b835ad34d5"/><dir name="Connect"><file name="Request.php" hash="9b89d6528986fcd5b97d59a8ceb48eac"/></dir><file name="Connect.php" hash="c63a751c9c720a3c8b670134b816c2aa"/><file name="Dowloader.php" hash="01885097ba694f6e0119f3eaecfa463f"/><file name="Session.php" hash="2876ecde6b2c2bba65e11c3dcf2d913f"/></dir><file name="Model.php" hash="9d43f384a202246af906c65e156d4aaa"/><file name="View.php" hash="38f23f08650249dcb75ff6a0e203ad28"/></dir><dir name="skin"><file name="boxes.css" hash="5a6a94b06fbd4335b4d0f78b94cb9712"/><file name="ie7boxes.css" hash="c9e684ca787f6521190922e7e2e6ed9e"/><file name="ieboxes.css" hash="ff95c4f8ade70c9178f1315eb61eaabe"/><dir name="images"><file name="Magento_Connect.jpg" hash="20e1378c09506fdc5723abc0115d5f57"/><file name="ajax-loader-tr.gif" hash="1ae32bc8232ff2527c627e5b38eb319a"/><file name="btn_bg.gif" hash="37c51a4d48a92da9648dcd3ca011039f"/><file name="header_bg.gif" hash="8440b04c5cb6b1451bb886bfbef260a5"/><file name="logo.gif" hash="5eb089ecea67d82311d7c91898460104"/><file name="nav_bg.gif" hash="1cb1366f03a9efad6b17e4483aef20cf"/><file name="nav_separator.gif" hash="492011a7de2de84a9c7837bfd879ab95"/></dir><dir name="install"><file name="boxes.css" hash="b6d074b3fce501813ed1d8dd323bf422"/><file name="clears.css" hash="bc94c9e4ee77d82530ca33b468b502e4"/><file name="ie7minus.css" hash="e0bad17242a3b6c20516bb292bf16493"/><file name="iestyles.css" hash="eb20094050695e0e02f0318b37c24e08"/><dir name="images"><file name="error_msg_icon.gif" hash="e4f28607f075a105e53fa3113d84bd26"/><file name="footer_bg.gif" hash="d59784af16fd95ea82226e5708a89232"/><file name="footer_container_bg.gif" hash="d468e3943943cbbf711586e69d40ca42"/><file name="footer_info_separator.gif" hash="7da64eefaf4da3855ab6ee76dbced0c2"/><file name="footer_informational_bg.gif" hash="72d37f4b2ea747bf8969c2654ad1d1e0"/><file name="footer_left.gif" hash="2b15a54bea9409a75c142d14a62f0149"/><file name="footer_legality_bg.gif" hash="4eb1602e3369dccd901ffe98ea0fd4b3"/><file name="footer_right.gif" hash="a45eaf35c8797d299bd4d9b936528e8f"/><file name="header_bg.gif" hash="795c6de754d0d49717ed08d5cd8168c8"/><file name="header_nav_bg.gif" hash="80c6a18686eb0243e06d6176506a2502"/><file name="header_top_bg.jpg" hash="143f524392ee62fcc8183f5930d7258b"/><file name="header_top_container_bg.jpg" hash="294c18f3f6b838bba06ae41dd3c3d638"/><file name="logo.gif" hash="073a947a39b967af678455a5c7f66e90"/><file name="main_bg.gif" hash="cf18ba9f7c7e6b058b439cde1a897e9c"/><file name="main_container_bg.gif" hash="a8f5717873dc6cf8f6bd22924b5838fe"/><file name="note_msg_icon.gif" hash="e774ee481a2820789c1a77112377c4e0"/><file name="success_msg_icon.gif" hash="834dfafd5f8b44c4b24a4c00add56fcf"/><file name="validation_advice_bg.gif" hash="b85432906de8985a8b14eeb2dc652d3c"/></dir><file name="reset.css" hash="f473723e7a0aff5d6feedbbab6cb3392"/></dir></dir><dir name="template"><dir name="connect"><file name="iframe.phtml" hash="2aa7c28d092c43e14b8b1fe413e6a126"/><file name="packages.phtml" hash="72c6024a9891c01b603f2766f52ff914"/><file name="packages_prepare.phtml" hash="bd34d2a794e5fcc84d4ea22b5754d250"/></dir><file name="exception.phtml" hash="ce8145052f0a730088fc849c04c58c64"/><file name="footer.phtml" hash="454299883c093cc98b4550c99bba03b9"/><file name="header.phtml" hash="73ab5e15a8a58d624fb5b8e48da679d3"/><file name="index.phtml" hash="1c7d5cbca5c16632db3f891024086947"/><dir name="install"><file name="download.phtml" hash="b7f283992b89cae9e85cc655e4b2d4e3"/><file name="footer.phtml" hash="6a70fd31200cb9bfddf65d7f8f67ac5e"/><file name="header.phtml" hash="f07d63df229468c28043869f0b71e194"/><file name="writable.phtml" hash="2815049a02b3f1110b9f22e22047b941"/></dir><file name="login.phtml" hash="ad91f8daa2d8a8974782350a2d2e2578"/><file name="messages.phtml" hash="8753c0c5599fa55a190c4913651b2c77"/><file name="noroute.phtml" hash="ad5ded291fcbf3899af4f499b77aaf42"/><file name="settings.phtml" hash="5bda5f6e749e288f7e2cb0fc2b7f1b83"/><file name="writable.phtml" hash="5fc31df4f9795e8febe39da1e59d91cd"/><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><file name="index.php" hash="db1b840cef501ba7830d1035d6a3df7b"/><dir name="lib"><dir name="Mage"><dir name="Archive"><file name="Abstract.php" hash="a17be2772775eac2d1e3a36041a9f3c1"/><file name="Bz.php" hash="4e95c019f7c8983ecb225d0847806bed"/><file name="Gz.php" hash="e832e68bd2a3165234b6d6b52b3fcac0"/><file name="Interface.php" hash="1c57bd8e6ee7dbe4cfcaa3dfdceb1d7b"/><file name="Tar.php" hash="12983e34995349ab736eb8c5bbe03ba6"/></dir><file name="Archive.php" hash="7947ccf15f5df8300e7cf1a4681b9569"/><dir name="Autoload"><file name="Simple.php" hash="e062bd1b45f0b08ac456d3e0dc4c06b6"/></dir><dir name="Connect"><dir name="Channel"><file name="Generator.php" hash="4bbda17b29549ae9a50ea09c0db54649"/><file name="Parser.php" hash="3546e3b66eafe78bdd5628dc37f4bca9"/><file name="VO.php" hash="0525a71b043486aca9febcac6ce0ccff"/></dir><dir name="Command"><file name="Channels.php" hash="83e47fe8f407212ecc1797028211d15d"/><file name="Channels_Header.php" hash="8a828b219ec1b57eba88806845f133cb"/><file name="Config.php" hash="22161cf90d8d2abb5409a30dbe28a44c"/><file name="Config_Header.php" hash="0ce12f7207fe610f886aae15df145615"/><file name="Install.php" hash="b40177f31744db26010c8fbe8e10b05a"/><file name="Install_Header.php" hash="1d4da6660edb2e63ea9a223ccfe4610d"/><file name="Package.php" hash="09d265ec9666b7729276a54c88db1263"/><file name="Package_Header.php" hash="102080d8fad7234b60b103a5dbf65754"/><file name="Registry.php" hash="898b91578ee622b4914023edc9e34984"/><file name="Registry_Header.php" hash="fb37813d34f75835e4ecccea704b2ab0"/><file name="Remote.php" hash="3b0f8aa676ddd677e3a57823d8b0c60e"/><file name="Remote_Header.php" hash="9bd703a45c70ccc959f922392decc962"/></dir><file name="Command.php" hash="b3314fecd974fc3d767049cf323cc254"/><file name="Config.php" hash="4d688d01fd05522fa36166656bd5c697"/><file name="Converter.php" hash="435aad5d121240eb7784f3f71a848392"/><dir name="Frontend"><file name="CLI.php" hash="0b71bae7609966ebfcfc04f63a0318a3"/></dir><file name="Frontend.php" hash="811d665cee46fdbea623d651cf4ac44b"/><file name="Ftp.php" hash="4adbc5b56bf2be7ca7d042f78ae61298"/><dir name="Loader"><file name="Ftp.php" hash="1fbff02e85c5e2f7f0e61d8577c248d6"/></dir><file name="Loader.php" hash="ba5151383e4931a7f767a2d1897cb2a7"/><dir name="Package"><file name="Extension.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Hotfix.php" hash="370177a5cf2f3397e0b341466d34de75"/><file name="Maintainer.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Reader.php" hash="7fa1d41c6145f178e50e8a266e361f1e"/><file name="Target.php" hash="09c91f931b37f5e350a7ebdbb6bbf442"/><file name="VO.php" hash="e42f4d13abcaa766ca35f24c6280043b"/><file name="Writer.php" hash="32088dd140dfd14b3bde9c11a32b7d35"/></dir><file name="Package.php" hash="bcc3ed40ad75f37e6be0d90e833a84bb"/><file name="Packager.php" hash="812c9dd97f990744d4a763e4b6c3a7b5"/><dir name="Repository"><file name="Abstract.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><dir name="Channel"><file name="Abstract.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Commercial.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Community.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Core.php" hash="68b329da9893e34099c7d8ad5cb9c940"/></dir><file name="Channel.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Local.php" hash="68b329da9893e34099c7d8ad5cb9c940"/></dir><file name="Repository.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Rest.php" hash="9bf931f43e0840f903ce9089d90779a2"/><file name="Singleconfig.php" hash="bdcb3dcfb2a58b290cce8da370f8ac9c"/><dir name="Structures"><file name="Graph.php" hash="bb484f7ed43d819d9964c3dfa0489641"/><file name="Node.php" hash="5fe101c2a3c371ebca23b1a77a4d8b9a"/></dir><file name="Validator.php" hash="500f1fec82dc873ef02fae0d738b5162"/></dir><dir name="DB"><file name="Exception.php" hash="38385d6b8ba6dfabf53aa275ca5b1086"/><file name="Mysqli.php" hash="7afa22548284f2e6e8796fce50f736ce"/></dir><file name="Exception.php" hash="a5e649c88e376f850b83d35900525a7f"/><dir name="HTTP"><dir name="Client"><file name="Curl.php" hash="8eba20650fc9da09d8585e31ea3bd053"/><file name="Socket.php" hash="a1b2788a4fa596f70430d309ffc8f59f"/></dir><file name="Client.php" hash="189e5288453ce792e1eacbb178e20fd1"/><file name="IClient.php" hash="eb44927eabc6a87fbf37d52643732b2d"/></dir><dir name="System"><file name="Args.php" hash="a3058a52f975e8436a8d2b113943489a"/><file name="Dirs.php" hash="0addfeb8f206cc67539ca0625921e016"/></dir><dir name="Xml"><file name="Generator.php" hash="c0b790125cc714d1ca43cfdc046768ed"/><file name="Parser.php" hash="6f8ac6fb3c6332c257d28e335909e855"/></dir></dir></dir><file name="config.ini" hash="a52ba98e71ab19de387b3af1a04c6102"/><file name=".htaccess" hash="520cc012c84739584526b8a9ff098e23"/><file name="mage.php" hash="6de4d106e8080bd2be838d1674bf6136"/></dir><dir name="."><file name=".htaccess" hash="8c1f49780253bb13b4fa89d604e814b6"/><file name="index.php" hash="20b1633bd332a08e643afa4590ab8564"/><file name="mage" hash="091c45355c62a9189cff45c09328037c"/></dir></target></contents>
16
<compatible/>
17
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
18
</package>
1
<?xml version="1.0"?>
2
<package>
3
<name>Mage_Downloader</name>
4
+ <version>1.6.2.0</version>
5
<stability>stable</stability>
6
<license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
7
<channel>community</channel>
8
<extends/>
9
<summary>Magento Downloader</summary>
10
<description>Magento Downloader</description>
11
+ <notes>1.6.2.0</notes>
12
<authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
13
+ <date>2012-01-11</date>
14
+ <time>11:50:47</time>
15
+ <contents><target name="mage"><dir name="downloader"><dir name="js"><file name="prototype.js" hash="3766aeff5778b54f74f93670322ca0df"/></dir><dir name="Maged"><dir name="Connect"><file name="Frontend.php" hash="e469328440d5d865db40ed6dec2eb0dd"/></dir><file name="Connect.php" hash="3878355516c34d9544a02d44a4c1e2b8"/><file name="Controller.php" hash="667cee056eef10004144cbadab05a299"/><file name="Exception.php" hash="31befe07df0a61598f063f543991a04b"/><dir name="Model"><dir name="Config"><file name="Abstract.php" hash="b87bd9947efce3f373ff65e0c997334e"/><file name="Community.php" hash="0e39f2375ec50ef5c8d7994e67eaf49e"/><file name="Interface.php" hash="fe6daef73f9f63adcce14dd322a41050"/></dir><file name="Config.php" hash="0fdf21421b2874620f4708b835ad34d5"/><dir name="Connect"><file name="Request.php" hash="9b89d6528986fcd5b97d59a8ceb48eac"/></dir><file name="Connect.php" hash="c63a751c9c720a3c8b670134b816c2aa"/><file name="Dowloader.php" hash="01885097ba694f6e0119f3eaecfa463f"/><file name="Session.php" hash="2876ecde6b2c2bba65e11c3dcf2d913f"/></dir><file name="Model.php" hash="9d43f384a202246af906c65e156d4aaa"/><file name="View.php" hash="38f23f08650249dcb75ff6a0e203ad28"/></dir><dir name="skin"><file name="boxes.css" hash="5a6a94b06fbd4335b4d0f78b94cb9712"/><file name="ie7boxes.css" hash="c9e684ca787f6521190922e7e2e6ed9e"/><file name="ieboxes.css" hash="ff95c4f8ade70c9178f1315eb61eaabe"/><dir name="images"><file name="Magento_Connect.jpg" hash="20e1378c09506fdc5723abc0115d5f57"/><file name="ajax-loader-tr.gif" hash="1ae32bc8232ff2527c627e5b38eb319a"/><file name="btn_bg.gif" hash="37c51a4d48a92da9648dcd3ca011039f"/><file name="header_bg.gif" hash="8440b04c5cb6b1451bb886bfbef260a5"/><file name="logo.gif" hash="5eb089ecea67d82311d7c91898460104"/><file name="nav_bg.gif" hash="1cb1366f03a9efad6b17e4483aef20cf"/><file name="nav_separator.gif" hash="492011a7de2de84a9c7837bfd879ab95"/></dir><dir name="install"><file name="boxes.css" hash="b6d074b3fce501813ed1d8dd323bf422"/><file name="clears.css" hash="bc94c9e4ee77d82530ca33b468b502e4"/><file name="ie7minus.css" hash="e0bad17242a3b6c20516bb292bf16493"/><file name="iestyles.css" hash="eb20094050695e0e02f0318b37c24e08"/><dir name="images"><file name="error_msg_icon.gif" hash="e4f28607f075a105e53fa3113d84bd26"/><file name="footer_bg.gif" hash="d59784af16fd95ea82226e5708a89232"/><file name="footer_container_bg.gif" hash="d468e3943943cbbf711586e69d40ca42"/><file name="footer_info_separator.gif" hash="7da64eefaf4da3855ab6ee76dbced0c2"/><file name="footer_informational_bg.gif" hash="72d37f4b2ea747bf8969c2654ad1d1e0"/><file name="footer_left.gif" hash="2b15a54bea9409a75c142d14a62f0149"/><file name="footer_legality_bg.gif" hash="4eb1602e3369dccd901ffe98ea0fd4b3"/><file name="footer_right.gif" hash="a45eaf35c8797d299bd4d9b936528e8f"/><file name="header_bg.gif" hash="795c6de754d0d49717ed08d5cd8168c8"/><file name="header_nav_bg.gif" hash="80c6a18686eb0243e06d6176506a2502"/><file name="header_top_bg.jpg" hash="143f524392ee62fcc8183f5930d7258b"/><file name="header_top_container_bg.jpg" hash="294c18f3f6b838bba06ae41dd3c3d638"/><file name="logo.gif" hash="073a947a39b967af678455a5c7f66e90"/><file name="main_bg.gif" hash="cf18ba9f7c7e6b058b439cde1a897e9c"/><file name="main_container_bg.gif" hash="a8f5717873dc6cf8f6bd22924b5838fe"/><file name="note_msg_icon.gif" hash="e774ee481a2820789c1a77112377c4e0"/><file name="success_msg_icon.gif" hash="834dfafd5f8b44c4b24a4c00add56fcf"/><file name="validation_advice_bg.gif" hash="b85432906de8985a8b14eeb2dc652d3c"/></dir><file name="reset.css" hash="f473723e7a0aff5d6feedbbab6cb3392"/></dir></dir><dir name="template"><dir name="connect"><file name="iframe.phtml" hash="2aa7c28d092c43e14b8b1fe413e6a126"/><file name="packages.phtml" hash="72c6024a9891c01b603f2766f52ff914"/><file name="packages_prepare.phtml" hash="bd34d2a794e5fcc84d4ea22b5754d250"/></dir><file name="exception.phtml" hash="ce8145052f0a730088fc849c04c58c64"/><file name="footer.phtml" hash="454299883c093cc98b4550c99bba03b9"/><file name="header.phtml" hash="73ab5e15a8a58d624fb5b8e48da679d3"/><file name="index.phtml" hash="1c7d5cbca5c16632db3f891024086947"/><dir name="install"><file name="download.phtml" hash="b7f283992b89cae9e85cc655e4b2d4e3"/><file name="footer.phtml" hash="6a70fd31200cb9bfddf65d7f8f67ac5e"/><file name="header.phtml" hash="f07d63df229468c28043869f0b71e194"/><file name="writable.phtml" hash="2815049a02b3f1110b9f22e22047b941"/></dir><file name="login.phtml" hash="ad91f8daa2d8a8974782350a2d2e2578"/><file name="messages.phtml" hash="8753c0c5599fa55a190c4913651b2c77"/><file name="noroute.phtml" hash="ad5ded291fcbf3899af4f499b77aaf42"/><file name="settings.phtml" hash="5bda5f6e749e288f7e2cb0fc2b7f1b83"/><file name="writable.phtml" hash="5fc31df4f9795e8febe39da1e59d91cd"/><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><file name="index.php" hash="db1b840cef501ba7830d1035d6a3df7b"/><dir name="lib"><dir name="Mage"><dir name="Archive"><file name="Abstract.php" hash="a17be2772775eac2d1e3a36041a9f3c1"/><file name="Bz.php" hash="4e95c019f7c8983ecb225d0847806bed"/><file name="Gz.php" hash="e832e68bd2a3165234b6d6b52b3fcac0"/><file name="Interface.php" hash="1c57bd8e6ee7dbe4cfcaa3dfdceb1d7b"/><file name="Tar.php" hash="12983e34995349ab736eb8c5bbe03ba6"/></dir><file name="Archive.php" hash="7947ccf15f5df8300e7cf1a4681b9569"/><dir name="Autoload"><file name="Simple.php" hash="e062bd1b45f0b08ac456d3e0dc4c06b6"/></dir><dir name="Connect"><dir name="Channel"><file name="Generator.php" hash="4bbda17b29549ae9a50ea09c0db54649"/><file name="Parser.php" hash="3546e3b66eafe78bdd5628dc37f4bca9"/><file name="VO.php" hash="0525a71b043486aca9febcac6ce0ccff"/></dir><dir name="Command"><file name="Channels.php" hash="83e47fe8f407212ecc1797028211d15d"/><file name="Channels_Header.php" hash="8a828b219ec1b57eba88806845f133cb"/><file name="Config.php" hash="22161cf90d8d2abb5409a30dbe28a44c"/><file name="Config_Header.php" hash="0ce12f7207fe610f886aae15df145615"/><file name="Install.php" hash="b40177f31744db26010c8fbe8e10b05a"/><file name="Install_Header.php" hash="1d4da6660edb2e63ea9a223ccfe4610d"/><file name="Package.php" hash="09d265ec9666b7729276a54c88db1263"/><file name="Package_Header.php" hash="102080d8fad7234b60b103a5dbf65754"/><file name="Registry.php" hash="898b91578ee622b4914023edc9e34984"/><file name="Registry_Header.php" hash="fb37813d34f75835e4ecccea704b2ab0"/><file name="Remote.php" hash="3b0f8aa676ddd677e3a57823d8b0c60e"/><file name="Remote_Header.php" hash="9bd703a45c70ccc959f922392decc962"/></dir><file name="Command.php" hash="b3314fecd974fc3d767049cf323cc254"/><file name="Config.php" hash="4d688d01fd05522fa36166656bd5c697"/><file name="Converter.php" hash="435aad5d121240eb7784f3f71a848392"/><dir name="Frontend"><file name="CLI.php" hash="0b71bae7609966ebfcfc04f63a0318a3"/></dir><file name="Frontend.php" hash="811d665cee46fdbea623d651cf4ac44b"/><file name="Ftp.php" hash="4adbc5b56bf2be7ca7d042f78ae61298"/><dir name="Loader"><file name="Ftp.php" hash="1fbff02e85c5e2f7f0e61d8577c248d6"/></dir><file name="Loader.php" hash="ba5151383e4931a7f767a2d1897cb2a7"/><dir name="Package"><file name="Extension.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Hotfix.php" hash="370177a5cf2f3397e0b341466d34de75"/><file name="Maintainer.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Reader.php" hash="7fa1d41c6145f178e50e8a266e361f1e"/><file name="Target.php" hash="09c91f931b37f5e350a7ebdbb6bbf442"/><file name="VO.php" hash="e42f4d13abcaa766ca35f24c6280043b"/><file name="Writer.php" hash="32088dd140dfd14b3bde9c11a32b7d35"/></dir><file name="Package.php" hash="bcc3ed40ad75f37e6be0d90e833a84bb"/><file name="Packager.php" hash="2eb9fb87e4bf3d8a8a0a27d1b2c8994d"/><dir name="Repository"><file name="Abstract.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><dir name="Channel"><file name="Abstract.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Commercial.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Community.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Core.php" hash="68b329da9893e34099c7d8ad5cb9c940"/></dir><file name="Channel.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Local.php" hash="68b329da9893e34099c7d8ad5cb9c940"/></dir><file name="Repository.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Rest.php" hash="9bf931f43e0840f903ce9089d90779a2"/><file name="Singleconfig.php" hash="bdcb3dcfb2a58b290cce8da370f8ac9c"/><dir name="Structures"><file name="Graph.php" hash="bb484f7ed43d819d9964c3dfa0489641"/><file name="Node.php" hash="5fe101c2a3c371ebca23b1a77a4d8b9a"/></dir><file name="Validator.php" hash="500f1fec82dc873ef02fae0d738b5162"/></dir><dir name="DB"><file name="Exception.php" hash="38385d6b8ba6dfabf53aa275ca5b1086"/><file name="Mysqli.php" hash="7afa22548284f2e6e8796fce50f736ce"/></dir><file name="Exception.php" hash="a5e649c88e376f850b83d35900525a7f"/><dir name="HTTP"><dir name="Client"><file name="Curl.php" hash="8eba20650fc9da09d8585e31ea3bd053"/><file name="Socket.php" hash="a1b2788a4fa596f70430d309ffc8f59f"/></dir><file name="Client.php" hash="189e5288453ce792e1eacbb178e20fd1"/><file name="IClient.php" hash="eb44927eabc6a87fbf37d52643732b2d"/></dir><dir name="System"><file name="Args.php" hash="a3058a52f975e8436a8d2b113943489a"/><file name="Dirs.php" hash="0addfeb8f206cc67539ca0625921e016"/></dir><dir name="Xml"><file name="Generator.php" hash="c0b790125cc714d1ca43cfdc046768ed"/><file name="Parser.php" hash="6f8ac6fb3c6332c257d28e335909e855"/></dir></dir></dir><file name="config.ini" hash="a52ba98e71ab19de387b3af1a04c6102"/><file name=".htaccess" hash="520cc012c84739584526b8a9ff098e23"/><file name="mage.php" hash="6de4d106e8080bd2be838d1674bf6136"/></dir><dir name="."><file name=".htaccess" hash="8c1f49780253bb13b4fa89d604e814b6"/><file name="index.php" hash="20b1633bd332a08e643afa4590ab8564"/><file name="mage" hash="091c45355c62a9189cff45c09328037c"/></dir></target></contents>
16
<compatible/>
17
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
18
</package>