/** * Get all commits related to a project object * * @param integer $object_id * @return array */ function findCommitsByObject($object) { $parent_object_ids = array(); $parent_object_ids[] = $object->getId(); /** * Try to find commits related to children objects */ $task_ids = array(); if (instance_of($object, 'Ticket')) { $tasks = db_execute_all("SELECT id FROM " . TABLE_PREFIX . "project_objects WHERE parent_id = " . $object->getid() . " AND `type` = 'Task'"); if (is_foreachable($tasks)) { foreach ($tasks as $task) { $task_ids[] = $task['id']; } // foreach } // if } // if $objects_ids = array_merge($parent_object_ids, $task_ids); $commit_project_objects = CommitProjectObjects::find(array('conditions' => array("object_id IN(" . implode(',', $objects_ids) . ")"), 'order' => 'repository_id ASC, revision DESC')); if (is_foreachable($commit_project_objects)) { $commits = array(); $revisions = array(); foreach ($commit_project_objects as $commit_project_object) { if (!in_array($commit_project_object->getRevision(), $revisions)) { // prevent commits from showing more than once $revisions[] = $commit_project_object->getRevision(); $commit = Commits::findByRevision($commit_project_object->getRevision(), Repositories::findById($commit_project_object->getRepositoryId())); if (instance_of($commit, 'Commit')) { $commit->repository = Repositories::findById($commit->getProjectId()); $commits[] = $commit; } // if } // if } // foreach return group_by_date($commits); } else { return false; } // if }
/** * Compare two revisions of a file * * @param null * @return void */ function compare() { if (!$this->active_repository->canView($this->logged_user)) { $this->httpError(HTTP_ERR_FORBIDDEN); } // if // wireframe $this->wireframe->addPageAction(lang('Commit history'), $this->active_repository->getHistoryUrl()); $compare_to = $this->request->get('compare_to'); $compared = Commits::findByRevision($compare_to, $this->active_repository); if (!instance_of($compared, 'Commit')) { flash_error('Revision does not exist'); $this->redirectToReferer($this->active_repository->getFileHistoryUrl($this->active_revision, $this->active_file, $this->request->get('peg'))); } // if // path info $path_info = $this->repository_engine->getInfo($this->active_file, $this->active_revision, false, $this->request->get('peg')); $latest_revision = $path_info['revision']; $file_latest_revision = Commits::findByRevision($latest_revision, $this->active_repository); if (!instance_of($file_latest_revision, 'Commit')) { $file_latest_revision = $this->active_commit; } // if $diff_data = $this->repository_engine->compareToRevision($this->active_file, $compared->getRevision(), $this->active_revision, $this->request->get('peg')); $diff_changes = $this->repository_engine->parseDiff($diff_data); $this->smarty->assign(array('compared' => $compared, 'diff' => $diff_changes, 'navigation' => $this->repository_engine->linkify($this->active_revision, $this->active_file), 'latest_revision' => $file_latest_revision)); js_assign('compare_url', $this->active_repository->getFileCompareUrl($this->active_commit, $this->active_file, $this->request->get('peg'))); }