mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-24 06:20:56 +01:00
Validate all fields in differential.parsecommitmessage
Summary: - We currently run ##parseValueFromCommitMessage()## on all fields present in the message, but not ##validateField()##. - This detects value errors (e.g., an invalid reviewer) but not higher-level errors (e.g., a missing field). - This can break the stacked-commits Git mutable history workflow by recognizing too many commit messages as valid ("multiple valid commit messages, this is ambiguous"). - This also gives you some errors ("Missing test plan") too late in "arc diff --create" (after the diff has been built). Test Plan: - Grepped for validateField() calls, removed a couple of calls that had the same implementation as the base class. - Grepped for other calls to this to make sure I'm not stumbling into unintended side effects, but it only runs from the diff workflow. - Ran "arc diff --create" with an invalid test plan, got a good error early in the process. - Ran "arc diff master" with stacked local commits, got a correct selection of the intended message. Reviewers: cpiro, btrahan, jungejason Reviewed By: cpiro CC: aran, cpiro Differential Revision: https://secure.phabricator.com/D1373
This commit is contained in:
parent
02fb5fea89
commit
d84c0a5be5
3 changed files with 16 additions and 11 deletions
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* Copyright 2011 Facebook, Inc.
|
||||
* Copyright 2012 Facebook, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -51,6 +51,7 @@ class ConduitAPI_differential_parsecommitmessage_Method
|
|||
if (!$aux_field->shouldAppearOnCommitMessage()) {
|
||||
unset($aux_fields[$key]);
|
||||
}
|
||||
$aux_field->setUser($request->getUser());
|
||||
}
|
||||
|
||||
$aux_fields = mpull($aux_fields, null, 'getCommitMessageKey');
|
||||
|
@ -66,12 +67,24 @@ class ConduitAPI_differential_parsecommitmessage_Method
|
|||
$field = $aux_fields[$field_key];
|
||||
try {
|
||||
$fields[$field_key] = $field->parseValueFromCommitMessage($field_value);
|
||||
$field->setValueFromParsedCommitMessage($fields[$field_key]);
|
||||
} catch (DifferentialFieldParseException $ex) {
|
||||
$field_label = $field->renderLabelForCommitMessage();
|
||||
$errors[] = "Error parsing field '{$field_label}': ".$ex->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($aux_fields as $field_key => $aux_field) {
|
||||
try {
|
||||
$aux_field->validateField();
|
||||
} catch (DifferentialFieldValidationException $ex) {
|
||||
$field_label = $aux_field->renderLabelForCommitMessage();
|
||||
$errors[] =
|
||||
"Invalid or missing field '{$field_label}': ".
|
||||
$ex->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
return array(
|
||||
'errors' => $errors,
|
||||
'fields' => $fields,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* Copyright 2011 Facebook, Inc.
|
||||
* Copyright 2012 Facebook, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -51,10 +51,6 @@ final class DifferentialBlameRevisionFieldSpecification
|
|||
->setValue($this->value);
|
||||
}
|
||||
|
||||
public function validateField() {
|
||||
return;
|
||||
}
|
||||
|
||||
public function shouldAppearOnRevisionView() {
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* Copyright 2011 Facebook, Inc.
|
||||
* Copyright 2012 Facebook, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -51,10 +51,6 @@ final class DifferentialRevertPlanFieldSpecification
|
|||
->setValue($this->value);
|
||||
}
|
||||
|
||||
public function validateField() {
|
||||
return;
|
||||
}
|
||||
|
||||
public function shouldAppearOnRevisionView() {
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue