in src/build/UpdateTagsCLI.hack [85:148]
public async function mainAsync(): Awaitable<int> {
$new_tags = await Dict\map_with_key_async(
self::REPOS_AND_TAG_PREFIXES,
async ($product, $_) ==> await $this->getTagAsync($product),
);
$changes = dict[];
foreach ($new_tags as $product => $new_tag) {
if ((PRODUCT_TAGS[$product] ?? null) !== $new_tag) {
$changes[$product] = $new_tag;
}
}
$stdout = $this->getTerminal()->getStdout();
if (C\is_empty($changes)) {
await $stdout->writeAllAsync("Nothing to do.\n");
return 0;
}
await $stdout->writeAllAsync(
Dict\map_with_key(
$changes,
($k, $v) ==> Str\format('%s to tag "%s"', $k, $v),
)
|> Str\join($$, ', and ')
|> 'Changing '.$$."...\n",
);
if (C\contains_key($changes, APIProduct::HACK)) {
await $this->updateHHVMVersionAsync($changes[APIProduct::HACK]);
}
$tags_file = LocalConfig::ROOT.'/src/codegen/PRODUCT_TAGS.php';
await $stdout->writeAllAsync(' - Updating '.$tags_file."\n");
$config = new CG\HackCodegenConfig();
$cg = new CG\HackCodegenFactory(
$config->withFormatter(new CG\HackfmtFormatter($config)),
);
$cg->codegenFile($tags_file)
->setNamespace("HHVM\\UserDocumentation")
->addConstant(
$cg->codegenConstant('PRODUCT_TAGS')
->setType('dict<APIProduct, string>')
->setValue(
$new_tags,
CG\HackBuilderValues::dict(
CG\HackBuilderKeys::lambda(
($_, $p) ==> 'APIProduct::'.APIProduct::getNames()[$p],
),
CG\HackBuilderValues::export(),
),
),
)
->save();
await $stdout->writeAllAsync(
"Done! Next steps:\n".
" - update your HHVM installation if needed\n".
" - php composer.phar update\n".
" - hhvm bin/build.php\n".
" - hh_client\n".
" - hhvm vendor/bin/hacktest tests/\n",
);
return 0;
}