1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-12-18 19:40:55 +01:00

Add an "--ignore-duplicates" flag to import_project_symbols.php

Summary: People are hella lazy and don't want to do this themselves.

Test Plan: Generated a symbol file with duplicates and piped it in, got an import under --ignore-duplicates.

Reviewers: kdeggelman, btrahan, vrana, jungejason

Reviewed By: jungejason

CC: aran

Differential Revision: https://secure.phabricator.com/D2145
This commit is contained in:
epriestley 2012-04-07 17:25:38 -07:00
parent dd21f7e37c
commit b90d41dd90

View file

@ -2,7 +2,7 @@
<?php <?php
/* /*
* Copyright 2011 Facebook, Inc. * Copyright 2012 Facebook, Inc.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -20,15 +20,35 @@
$root = dirname(dirname(dirname(__FILE__))); $root = dirname(dirname(dirname(__FILE__)));
require_once $root.'/scripts/__init_script__.php'; require_once $root.'/scripts/__init_script__.php';
phutil_require_module('phutil', 'console'); $args = new PhutilArgumentParser($argv);
$args->setSynopsis(<<<EOSYNOPSIS
**import_project_symbols.php** [__options__] __project_name__ < symbols
if ($argc !== 2) { Import project symbols (symbols are read from stdin).
echo phutil_console_format( EOSYNOPSIS
"usage: import_project_symbols.php __project_name__ < __symbol_file__\n"); );
exit(1); $args->parseStandardArguments();
$args->parse(
array(
array(
'name' => 'ignore-duplicates',
'help' => 'Ignore duplicate symbols, choosing one at random. By '.
'default, this script throws if given duplicate '.
'symbols.',
),
array(
'name' => 'more',
'wildcard' => true,
),
));
$ignore_duplicates = $args->getArg('ignore-duplicates');
$more = $args->getArg('more');
if (count($more) !== 1) {
$args->printHelpAndExit();
} }
$project_name = $argv[1]; $project_name = head($more);
$project = id(new PhabricatorRepositoryArcanistProject())->loadOneWhere( $project = id(new PhabricatorRepositoryArcanistProject())->loadOneWhere(
'name = %s', 'name = %s',
$project_name); $project_name);
@ -64,17 +84,22 @@ foreach ($input as $key => $line) {
list($all, $name, $type, $lang, $line_number, $path) = $matches; list($all, $name, $type, $lang, $line_number, $path) = $matches;
if (isset($map[$name][$type][$lang])) { if (isset($map[$name][$type][$lang])) {
$previous = $map[$name][$type][$lang] + 1; if ($ignore_duplicates) {
throw new Exception( echo "Ignoring duplicate definition of '{$name}' on line {$line_no}.\n";
"Line #{$line_no} of input is invalid. It specifies a duplicate symbol ". } else {
"(same name, language, and type) which has already been defined ". $previous = $map[$name][$type][$lang] + 1;
"elsewhere. You must preprocess the symbol list to remove duplicates ". throw new Exception(
"and choose exactly one master definition for each symbol. This symbol ". "Line #{$line_no} of input is invalid. It specifies a duplicate ".
"was previously defined on line #{$previous}.\n\n". "symbol (same name, language, and type) which has already been ".
"Line #{$line_no}:\n". "defined elsewhere. You must preprocess the symbol list to remove ".
$line."\n\n". "duplicates and choose exactly one master definition for each ".
"Line #{$previous}:\n". "symbol, or specify --ignore-duplicates. This symbol was previously ".
$input[$previous - 1]); "defined on line #{$previous}.\n\n".
"Line #{$line_no}:\n".
$line."\n\n".
"Line #{$previous}:\n".
$input[$previous - 1]);
}
} else { } else {
$map[$name][$type][$lang] = $key; $map[$name][$type][$lang] = $key;
} }