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])) {
if ($ignore_duplicates) {
echo "Ignoring duplicate definition of '{$name}' on line {$line_no}.\n";
} else {
$previous = $map[$name][$type][$lang] + 1; $previous = $map[$name][$type][$lang] + 1;
throw new Exception( throw new Exception(
"Line #{$line_no} of input is invalid. It specifies a duplicate symbol ". "Line #{$line_no} of input is invalid. It specifies a duplicate ".
"(same name, language, and type) which has already been defined ". "symbol (same name, language, and type) which has already been ".
"elsewhere. You must preprocess the symbol list to remove duplicates ". "defined elsewhere. You must preprocess the symbol list to remove ".
"and choose exactly one master definition for each symbol. This symbol ". "duplicates and choose exactly one master definition for each ".
"was previously defined on line #{$previous}.\n\n". "symbol, or specify --ignore-duplicates. This symbol was previously ".
"defined on line #{$previous}.\n\n".
"Line #{$line_no}:\n". "Line #{$line_no}:\n".
$line."\n\n". $line."\n\n".
"Line #{$previous}:\n". "Line #{$previous}:\n".
$input[$previous - 1]); $input[$previous - 1]);
}
} else { } else {
$map[$name][$type][$lang] = $key; $map[$name][$type][$lang] = $key;
} }