futility: updater: revise DUT type detection

Some commands like 'cros ap flash' may pass '-p host' to the futility
updater, making the updater consider itself running in the remote DUT
mode.

Other futility commands sharing the flash arguments (e.g.,
handle_flash_argument) work on files by default and only do flashing if
'-p' is specified, but that is not the case for the updater. So we
should double check the programmer before deciding the DUT type.

BUG=b:271115449
TEST=FEATURES=test emerge vboot_reference
BRANCH=None

Change-Id: I5be6e4382acffced0ef9cd94f6ede9e9d3fe2efa
Signed-off-by: Hung-Te Lin <hungte@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/4300000
Commit-Queue: Yu-Ping Wu <yupingso@chromium.org>
Reviewed-by: Yu-Ping Wu <yupingso@chromium.org>
(cherry picked from commit b0cdc1e898de15bf818a27ec4610d771253188bc)
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/4358601
Commit-Queue: Isaac Lee <isaaclee@google.com>
Tested-by: Isaac Lee <isaaclee@google.com>
diff --git a/futility/updater.c b/futility/updater.c
index b08e70a..362d5df 100644
--- a/futility/updater.c
+++ b/futility/updater.c
@@ -1437,11 +1437,6 @@
 	if (arg->force_update)
 		cfg->force_update = 1;
 
-	/* Identify DUT type. Currently only local/remote (via servo). */
-	cfg->dut_is_remote = arg->use_flash;
-	if (cfg->dut_is_remote)
-		INFO("Configured to update a remote DUT via Servo.\n");
-
 	/* Check incompatible options and return early. */
 	if (arg->do_manifest) {
 		if (!!arg->archive == !!arg->image) {
@@ -1504,8 +1499,12 @@
 	cfg->override_gbb_flags = arg->override_gbb_flags;
 
 	/* Setup properties and fields that do not have external dependency. */
-	if (arg->programmer) {
+	if (arg->programmer && strcmp(arg->programmer, cfg->image.programmer)) {
 		check_single_image = 1;
+		/* DUT should be remote if the programmer is changed. */
+		cfg->dut_is_remote = 1;
+		INFO("Configured to update a remote DUT%s.\n",
+		     arg->detect_servo ? " via Servo" : "");
 		cfg->image.programmer = arg->programmer;
 		cfg->image_current.programmer = arg->programmer;
 		cfg->original_programmer = arg->programmer;