Exemplo n.º 1
0
 /**
  * @todo: docs
  */
 public function get_package(array $args)
 {
     $qb = com_meego_package::new_query_builder();
     $qb->add_constraint('name', '=', $args['package']);
     $qb->add_order('repository.name', 'ASC');
     $packages = $qb->execute();
     if (count($packages) == 0) {
         throw new midgardmvc_exception_notfound("Package not found");
     }
     $this->data['package'] = $packages[0];
     if (empty($this->data['package']->title)) {
         $this->data['package']->title = $this->data['package']->name;
     }
     $repositories = array();
     $this->data['packages'] = array();
     foreach ($packages as $package) {
         if (empty($package->title)) {
             $package->title = $package->name;
         }
         if (!isset($repositories[$package->repository])) {
             $repository = new com_meego_repository();
             $repository->get_by_id($package->repository);
             $repositories[$package->repository] = $repository;
         }
         $package->repositoryobject = $repositories[$package->repository];
         $package->projectobject = new com_meego_project($package->repositoryobject->project);
         $package->localurl = $this->mvc->dispatcher->generate_url('package_instance', array('package' => $package->name, 'version' => $package->version, 'project' => $package->projectobject->name, 'repository' => $repositories[$package->repository]->name, 'arch' => $repositories[$package->repository]->arch), $this->request);
         $package->repositoryobject->localurl = $this->mvc->dispatcher->generate_url('repository', array('project' => $package->projectobject->name, 'repository' => $repositories[$package->repository]->name, 'arch' => $repositories[$package->repository]->arch), $this->request);
         $this->data['packages'][] = $package;
     }
 }
Exemplo n.º 2
0
 /**
  * Populates relations, such as
  *
  * - runtime dependency packages
  * - build dependency packages
  * - provided packages
  * - obsoleted packages
  * - suggested packages
  * - conflicting packages
  *
  * @param object extinfo which is a Package object
  * @param object package which is a com_meego_package object
  *
  */
 public function addRelations($extinfo = null, $package = null)
 {
     // check if package is referred in a relation
     // and update the relation record's 'to' field unless
     // it has been set already
     $qc = new midgard_query_constraint_group('AND');
     $qc->add_constraint(new midgard_query_constraint(new midgard_query_property('toname'), '=', new midgard_query_value($package->filename)));
     $qc->add_constraint(new midgard_query_constraint(new midgard_query_property('version'), '=', new midgard_query_value($package->version)));
     $q = new midgard_query_select(new midgard_query_storage('com_meego_package_relation'));
     $q->set_constraint($qc);
     $q->execute();
     $relations = $q->list_objects();
     if (!count($relations)) {
         $this->log('           package is not required by others');
     } else {
         // repo of the current package
         $repository_a = new com_meego_repository();
         $repository_a->get_by_id($package->repository);
         foreach ($relations as $relation) {
             if ($relation->to != 0) {
                 $this->log('           package is in relation but "to" field is already set. relation id: ' . $relation->id);
                 continue;
             }
             // get the related package object
             $related_package = new com_meego_package();
             $related_package->get_by_id($relation->from);
             // repo of the related package
             $repository_b = new com_meego_repository();
             $repository_b->get_by_id($related_package->repository);
             if ($repository_a->arch == $repository_b->arch) {
                 // we can safely update the to field of this relation
                 $this->log('           package is in relation with ' . $relation->from . ', update "to" field. relation id:' . $relation->id);
                 $_relation = new com_meego_package_relation($relation->guid);
                 $_relation->to = $package->id;
                 $_relation->update();
             }
         }
         unset($relations, $_relation);
     }
     if (is_array($extinfo->depends)) {
         /* delete relations that are no longer needed */
         $this->cleanRelations('requires', $extinfo->depends, $package);
         foreach ($extinfo->depends as $dependency) {
             $this->createRelation('requires', $dependency, $package);
         }
     }
     if (is_array($extinfo->buildDepends)) {
         /* delete relations that are no longer needed */
         $this->cleanRelations('buildrequires', $extinfo->buildDepends, $package);
         foreach ($extinfo->buildDepends as $dependency) {
             $this->createRelation('buildrequires', $dependency, $package);
         }
     }
     if (is_array($extinfo->provides)) {
         /* delete relations that are no longer needed */
         $this->cleanRelations('provides', $extinfo->provides, $package);
         foreach ($extinfo->provides as $provided) {
             $this->createRelation('provides', $provided, $package);
         }
     }
     if (is_array($extinfo->obsoletes)) {
         /* delete relations that are no longer needed */
         $this->cleanRelations('obsoletes', $extinfo->obsoletes, $package);
         foreach ($extinfo->obsoletes as $obsoleted) {
             $this->createRelation('obsoletes', $obsoleted, $package);
         }
     }
     if (is_array($extinfo->suggests)) {
         /* delete relations that are no longer needed */
         $this->cleanRelations('suggests', $extinfo->suggests, $package);
         foreach ($extinfo->suggests as $suggested) {
             $this->createRelation('suggests', $suggested, $package);
         }
     }
     if (is_array($extinfo->conflicts)) {
         /* delete relations that are no longer needed */
         $this->cleanRelations('conflicts', $extinfo->conflicts, $package);
         foreach ($extinfo->conflicts as $conflicted) {
             $this->createRelation('conflicts', $conflicted, $package);
         }
     }
 }