[zi-cvs] packages/com.zzoss.package.lib Dependency.php,1.5,1.6
Sandro Zic <[email protected]> Fri, 02 Apr 2004 12:34:37 +0000
| Newsgroups | gmane.comp.php.zzoss.installer.cvs |
|---|---|
| Message-ID | <[email protected]> |
Update of /cvsroot/zzossinstaller/packages/com.zzoss.package.lib
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8601/com.zzoss.package.lib
Modified Files:
Dependency.php
Log Message:
detect circular dependencies of packages depending on each other
Index: Dependency.php
===================================================================
RCS file: /cvsroot/zzossinstaller/packages/com.zzoss.package.lib/Dependency.php,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** Dependency.php 1 Apr 2004 18:59:04 -0000 1.5
--- Dependency.php 2 Apr 2004 12:34:34 -0000 1.6
***************
*** 51,54 ****
--- 51,64 ----
/**
+ * Stack of those packages that depend on another package.
+ */
+ var $_circular_pkgs = array();
+
+ /**
+ * Stack of those packages that are needeb by another package.
+ */
+ var $_circular_deps = array();
+
+ /**
* Packages not defined in application.xml.
*/
***************
*** 141,145 ****
if(is_array($this->actions)) {
foreach($this->actions as $key=>$val) {
! if($val==$value) {
$name = $this->packages_resolve[$key];
$this->packages_check[$name] = $this->packages[$name];
--- 151,155 ----
if(is_array($this->actions)) {
foreach($this->actions as $key=>$val) {
! if($val == $value) {
$name = $this->packages_resolve[$key];
$this->packages_check[$name] = $this->packages[$name];
***************
*** 292,297 ****
--- 302,310 ----
$is_available = true;
}
+
$is_installed = isset($this->packages[$this->dep["#"].'-'.$v_available]["installed"]);
+ $is_resolved = true;
+
switch($dep_rel) {
case 'ge':
***************
*** 299,306 ****
if($is_available && $is_installed){
//echo "ge - $dep_name: $v_available >= $v_required<br/>";
! return version_compare($v_available, $v_required, 'ge');
} else {
//echo "ge - $dep_name: !\$is_available<br/>";
! return false;
}
break;
--- 312,320 ----
if($is_available && $is_installed){
//echo "ge - $dep_name: $v_available >= $v_required<br/>";
! $is_resolved = version_compare($v_available, $v_required, $dep_rel);
} else {
+ //var_dump($is_installed);
//echo "ge - $dep_name: !\$is_available<br/>";
! $is_resolved = false;
}
break;
***************
*** 309,336 ****
// greater-or-equal comparing
if($is_available && $is_installed){
! return version_compare($v_available, $v_required, 'le');
} else {
! return false;
}
break;
case 'has':
//echo "has - $dep_name: $is_installed<br/>";
! return $is_installed;
! //return $is_available;
break;
default:
// equal comparing
// greater-or-equal comparing
if($is_available && $is_installed){
! return version_compare($v_available, $v_required, 'eq');
} else {
! return false;
}
break;
}
! return true;
}
}
?>
\ No newline at end of file
--- 323,403 ----
// greater-or-equal comparing
if($is_available && $is_installed){
! $is_resolved = version_compare($v_available, $v_required, $dep_rel);
} else {
! $is_resolved = false;
}
break;
case 'has':
//echo "has - $dep_name: $is_installed<br/>";
! $is_resolved = $is_installed;
! //$is_resolved = $is_available;
break;
default:
+ $dep_rel = 'eq';
// equal comparing
// greater-or-equal comparing
if($is_available && $is_installed){
! $is_resolved = version_compare($v_available, $v_required, $dep_rel);
} else {
! $is_resolved = false;
}
break;
}
! // check for circular dependencies:
! // if the needed package has a dependency on a package that depends on it
! if(
! isset($this->_circular_pkgs[$this->dep["#"]]) &&
! in_array($this->package['name'], $this->_circular_pkgs[$this->dep["#"]]) &&
! isset($this->_circular_deps[$this->package['name']]) &&
! in_array($this->dep["#"], $this->_circular_deps[$this->package['name']])){
! /*
! echo "Circular dependency between '".$this->dep["#"]."' and '".$this->package['name']."'.";
! //$this->_unsetCircular();
! echo '<pre>deps:';
! print_r($this->_circular_deps);
! echo 'pkgs:';
! print_r($this->_circular_pkgs);
! echo '</pre>';
! */
! return PEAR::raiseError("Circular dependency between '".$this->dep["#"]."' and '".$this->package['name']."'.");
! }
!
! if(!$is_resolved) {
! $this->_setCircularDeps();
! } else {
! $this->_unsetCircular();
! }
!
! return $is_resolved;
}
+ function _setCircularDeps()
+ {
+ if(!isset($this->_circular_deps[$this->dep["#"]]) && !isset($this->_circular_pkgs[$this->package['name']])) {
+ /*
+ echo '<br/>';
+ echo "Setting deps: '".$this->dep["#"]."'.";
+ echo '<br/>';
+ echo "Setting pkgs: '".$this->package['name']."'.";
+ echo '<hr/>';
+ */
+ $this->_circular_deps[$this->dep["#"]][] = $this->package['name'];
+ $this->_circular_pkgs[$this->package['name']][] = $this->dep["#"];
+ }
+ }
+
+ function _unsetCircular()
+ {
+ /*
+ echo '<br/>';
+ echo "Unsetting deps: '".$this->dep["#"]."'.";
+ echo '<br/>';
+ echo "Unsetting pkgs: '".$this->package['name']."'.";
+ echo '<hr/>';
+ */
+ unset($this->_circular_deps[$this->dep["#"]]);
+ unset($this->_circular_pkgs[$this->package['name']]);
+ }
}
?>
\ No newline at end of file
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click