diff --git a/scripts/symbols/clear_project_symbols.php b/scripts/symbols/clear_project_symbols.php new file mode 100755 index 0000000000..cd1df72f2e --- /dev/null +++ b/scripts/symbols/clear_project_symbols.php @@ -0,0 +1,48 @@ +#!/usr/bin/env php +loadOneWhere( + 'name = %s', $argv[1]); +if (!$project) { + throw new Exception('No such arcanist project.'); +} + +$input = file_get_contents('php://stdin'); +$normalized = array(); +foreach (explode("\n", trim($input)) as $path) { + // emulate the behavior of the symbol generation scripts + $normalized[] = '/'.ltrim($path, './'); +} +$paths = PhabricatorRepositoryCommitChangeParserWorker::lookupOrCreatePaths( + $normalized); + +$symbol = new PhabricatorRepositorySymbol(); +$conn_w = $symbol->establishConnection('w'); + +foreach (array_chunk(array_values($paths), 128) as $chunk) { + queryfx( + $conn_w, + 'DELETE FROM %T WHERE arcanistProjectID = %d AND pathID IN (%Ld)', + $symbol->getTableName(), + $project->getID(), + $chunk); +} diff --git a/scripts/symbols/import_project_symbols.php b/scripts/symbols/import_project_symbols.php index 4ff2a3f2cd..b09fc6f377 100755 --- a/scripts/symbols/import_project_symbols.php +++ b/scripts/symbols/import_project_symbols.php @@ -30,6 +30,11 @@ EOSYNOPSIS $args->parseStandardArguments(); $args->parse( array( + array( + 'name' => 'no-purge', + 'help' => 'Do not clear all symbols for this project before '. + 'uploading new symbols. Useful for incremental updating.', + ), array( 'name' => 'more', 'wildcard' => true, @@ -151,12 +156,14 @@ foreach ($symbols as $dict) { $path_map[$dict['path']]); } -echo "Purging old symbols...\n"; -queryfx( - $conn_w, - 'DELETE FROM %T WHERE arcanistProjectID = %d', - $symbol->getTableName(), - $project->getID()); +if (!$args->getArg('no-purge')) { + echo "Purging old symbols...\n"; + queryfx( + $conn_w, + 'DELETE FROM %T WHERE arcanistProjectID = %d', + $symbol->getTableName(), + $project->getID()); +} echo "Loading ".number_format(count($sql))." symbols...\n"; foreach (array_chunk($sql, 128) as $chunk) {