m/n/build: fix fsspec rules duplicating specs

Currently if a rule which outputs an fsspec outputs both a DefaultInfo
as well as an FSSpecInfo provider and both are propulated, the fsspec
core implementation will use both instead of only using the FSSpecInfo.
This leads to spurious errors when the fsspec consumers detect duplicate
files.
This change makes the fsspec rule ignore the DefaultInfo provider if a
FSSpecInfo provider exists on an input label.

Change-Id: Iec8975200380889732c840ff16d17f791fa1ba83
Reviewed-on: https://review.monogon.dev/c/monogon/+/902
Tested-by: Jenkins CI
Reviewed-by: Sergiusz Bazanski <serge@monogon.tech>
diff --git a/metropolis/node/build/def.bzl b/metropolis/node/build/def.bzl
index 722a828..d98fca0 100644
--- a/metropolis/node/build/def.bzl
+++ b/metropolis/node/build/def.bzl
@@ -107,17 +107,15 @@
     extra_specs = []
 
     for fsspec in ctx.attr.fsspecs:
-        # Skip files-as-fsspecs.
-        if FSSpecInfo not in fsspec:
-            continue
-        fsspecInfo = fsspec[FSSpecInfo]
-        extra_specs.append(fsspecInfo.spec)
-        for f in fsspecInfo.referenced:
-            inputs.append(f)
-
-    for file in ctx.files.fsspecs:
-        # Raw .fsspec prototext. No referenced data allowed.
-        extra_specs.append(file)
+        if FSSpecInfo in fsspec:
+            fsspecInfo = fsspec[FSSpecInfo]
+            extra_specs.append(fsspecInfo.spec)
+            for f in fsspecInfo.referenced:
+                inputs.append(f)
+        else:
+            # Raw .fsspec prototext. No referenced data allowed.
+            di = fsspec[DefaultInfo]
+            extra_specs += di.files.to_list()
 
     ctx.actions.run(
         outputs = [output_file],