/** * Retrives all the branches from the current git repository, * and parses their commit messages. * * @return array a list of BranchInfo objects, one per branch. */ public static function loadAll(ArcanistGitAPI $api) { $branches_raw = $api->getAllBranches(); $branches = array(); foreach ($branches_raw as $branch_raw) { $branch_info = new BranchInfo($branch_raw['name']); $branch_info->setSha1($branch_raw['sha1']); if ($branch_raw['current']) { $branch_info->setCurrent(); } $branches[] = $branch_info; } $name_sha1_map = mpull($branches, 'getSha1', 'getName'); $commits_list = $api->multigetCommitMessages(array_unique(array_values($name_sha1_map)), "%ct%n%an%n%s%n%b"); foreach ($branches as $branch) { $sha1 = $name_sha1_map[$branch->getName()]; $branch->setSha1($sha1); $branch->parseCommitMessage($commits_list[$sha1]); } $branches = msort($branches, 'getCommitTime'); return $branches; }