/**
  * Update the properties of a given project.
  * @param Project $project
  * @param string $title
  * @param string $type
  * @param string $reference
  * @param array $options
  * @return \PHPCI\Model\Project
  */
 public function updateProject(Project $project, $title, $type, $reference, $options = array())
 {
     // Set basic properties:
     $project->setTitle($title);
     $project->setType($type);
     $project->setReference($reference);
     $project->setAllowPublicStatus(0);
     // Handle extra project options:
     if (array_key_exists('ssh_private_key', $options)) {
         $project->setSshPrivateKey($options['ssh_private_key']);
     }
     if (array_key_exists('ssh_public_key', $options)) {
         $project->setSshPublicKey($options['ssh_public_key']);
     }
     if (array_key_exists('build_config', $options)) {
         $project->setBuildConfig($options['build_config']);
     }
     if (array_key_exists('allow_public_status', $options)) {
         $project->setAllowPublicStatus((int) $options['allow_public_status']);
     }
     if (array_key_exists('archived', $options)) {
         $project->setArchived((bool) $options['archived']);
     }
     if (array_key_exists('branch', $options)) {
         $project->setBranch($options['branch']);
     }
     // Allow certain project types to set access information:
     $this->processAccessInformation($project);
     // Save and return the project:
     return $this->projectStore->save($project);
 }