Improve detail of TargetPatternSupport failures

Some post-review comments/observations.

RELNOTES: None
PiperOrigin-RevId: 298964639
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/TargetPatternsHelper.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/TargetPatternsHelper.java
index 56781e5..ad64af3 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/TargetPatternsHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/TargetPatternsHelper.java
@@ -18,7 +18,6 @@
 import com.google.devtools.build.lib.buildtool.BuildRequestOptions;
 import com.google.devtools.build.lib.profiler.Profiler;
 import com.google.devtools.build.lib.profiler.SilentCloseable;
-import com.google.devtools.build.lib.runtime.BlazeCommand;
 import com.google.devtools.build.lib.runtime.CommandEnvironment;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import com.google.devtools.build.lib.vfs.Path;
@@ -27,9 +26,7 @@
 import java.nio.charset.StandardCharsets;
 import java.util.List;
 
-/**
- * Provides support for implementations for {@link BlazeCommand} to read target patterns from file.
- */
+/** Provides support for reading target patterns from a file or the command-line. */
 final class TargetPatternsHelper {
 
   private TargetPatternsHelper() {}
@@ -55,7 +52,7 @@
             Lists.newArrayList(FileSystemUtils.readLines(residuePath, StandardCharsets.UTF_8));
       } catch (IOException e) {
         throw new TargetPatternsHelperException(
-            "I/O error reading from " + residuePath.getPathString());
+            "I/O error reading from " + residuePath.getPathString() + ": " + e.getMessage());
       }
     } else {
       try (SilentCloseable closeable =
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/commands/TargetPatternsHelperTest.java b/src/test/java/com/google/devtools/build/lib/runtime/commands/TargetPatternsHelperTest.java
index 2c9680a..6a780cb 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/commands/TargetPatternsHelperTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/commands/TargetPatternsHelperTest.java
@@ -92,15 +92,26 @@
     options.parse("--target_pattern_file=patterns.txt");
     options.setResidue(ImmutableList.of("//some:pattern"));
 
-    assertThrows(
-        TargetPatternsHelperException.class, () -> TargetPatternsHelper.readFrom(env, options));
+    TargetPatternsHelperException expected =
+        assertThrows(
+            TargetPatternsHelperException.class, () -> TargetPatternsHelper.readFrom(env, options));
+
+    assertThat(expected)
+        .hasMessageThat()
+        .isEqualTo(
+            "Command-line target pattern and --target_pattern_file cannot both be specified");
   }
 
   @Test
   public void testSpecifyNonExistingFileThrows() throws OptionsParsingException {
     options.parse("--target_pattern_file=patterns.txt");
 
-    assertThrows(
-        TargetPatternsHelperException.class, () -> TargetPatternsHelper.readFrom(env, options));
+    TargetPatternsHelperException expected =
+        assertThrows(
+            TargetPatternsHelperException.class, () -> TargetPatternsHelper.readFrom(env, options));
+
+    assertThat(expected)
+        .hasMessageThat()
+        .matches("I/O error reading from .*patterns.txt.*\\(No such file or directory\\)");
   }
 }