示例#1
0
 protected final function loadCommitsByIdentifiers(array $identifiers)
 {
     if (!$identifiers) {
         return array();
     }
     $commits = array();
     $commit_data = array();
     $drequest = $this->getRequest();
     $repository = $drequest->getRepository();
     $commits = id(new PhabricatorRepositoryCommit())->loadAllWhere('repositoryID = %d AND commitIdentifier IN (%Ls)', $repository->getID(), $identifiers);
     $commits = mpull($commits, null, 'getCommitIdentifier');
     // Build empty commit objects for every commit, so we can show unparsed
     // commits in history views as "unparsed" instead of not showing them. This
     // makes the process of importing and parsing commits much clearer to the
     // user.
     $commit_list = array();
     foreach ($identifiers as $identifier) {
         $commit_obj = idx($commits, $identifier);
         if (!$commit_obj) {
             $commit_obj = new PhabricatorRepositoryCommit();
             $commit_obj->setRepositoryID($repository->getID());
             $commit_obj->setCommitIdentifier($identifier);
             $commit_obj->setIsUnparsed(true);
             $commit_obj->makeEphemeral();
         }
         $commit_list[$identifier] = $commit_obj;
     }
     $commits = $commit_list;
     $commit_ids = array_filter(mpull($commits, 'getID'));
     if ($commit_ids) {
         $commit_data = id(new PhabricatorRepositoryCommitData())->loadAllWhere('commitID in (%Ld)', $commit_ids);
         $commit_data = mpull($commit_data, null, 'getCommitID');
     }
     foreach ($commits as $commit) {
         if (!$commit->getID()) {
             continue;
         }
         if (idx($commit_data, $commit->getID())) {
             $commit->attachCommitData($commit_data[$commit->getID()]);
         }
     }
     return $commits;
 }