Open Bug 1948069 Opened 1 month ago Updated 22 days ago

pipelint does not work on Windows inside pwsh/cmd/bash (mozilla-build shell)

Categories

(Developer Infrastructure :: Lint and Formatting, defect)

defect

Tracking

(Not tracked)

People

(Reporter: beth, Unassigned, NeedInfo)

References

Details

Attachments

(1 file)

Attached file crash log

Running more client.py | python ./tools/lint/pipelint client.py generates a massive crash log, see attached

I added some logging:

$ jj diff
diff --git a/python/mozlint/mozlint/cli.py b/python/mozlint/mozlint/cli.py
index 21d6d878a4..6d7a83cf10 100644
--- a/python/mozlint/mozlint/cli.py
+++ b/python/mozlint/mozlint/cli.py
@@ -416,6 +416,10 @@
             dir=os.path.dirname(fpath),
             suffix=os.path.splitext(fpath)[1],
         )
+
+        print(f"inside mach lint stdin is a tty: {sys.stdin.isatty()} stdin={id(sys.stdin)}", file=sys.stderr)
+
+
         stdin_tempfile.write("".join(sys.stdin))
         stdin_tempfile.close()
         paths = [stdin_tempfile.name]
diff --git a/tools/lint/pipelint b/tools/lint/pipelint
index bfb220aafd..0cbccdab88 100755
--- a/tools/lint/pipelint
+++ b/tools/lint/pipelint
@@ -30,6 +30,8 @@
 mach = importlib.util.module_from_spec(spec)
 spec.loader.exec_module(mach)

+print(f"inside pipelint stdin is a tty: {sys.stdin.isatty()} stdin={id(sys.stdin)}", file=sys.stderr)
+
 assert len(sys.argv) == 2
 with tempfile.NamedTemporaryFile(mode="w+") as temp:
     args = [

and got the following output:

inside pipelint stdin is a tty: False stdin=1922595248320
inside mach lint stdin is a tty: False stdin=1922595248320
inside pipelint stdin is a tty: False stdin=1742396872896
inside pipelint stdin is a tty: False stdin=1665844664512
inside pipelint stdin is a tty: False stdin=2109049297088
inside pipelint stdin is a tty: False stdin=2916943091904
inside pipelint stdin is a tty: False stdin=2146904266944
inside pipelint stdin is a tty: False stdin=2112730192064
inside pipelint stdin is a tty: False stdin=1574458316992
inside pipelint stdin is a tty: False stdin=2672519829696
inside pipelint stdin is a tty: False stdin=2993197242560
inside pipelint stdin is a tty: False stdin=2203810814144
inside pipelint stdin is a tty: False stdin=1494902397120
inside pipelint stdin is a tty: False stdin=1727416588480
inside pipelint stdin is a tty: False stdin=2760995395776
inside mach lint stdin is a tty: False stdin=1742396872896
inside mach lint stdin is a tty: False stdin=1665844664512
inside pipelint stdin is a tty: False stdin=1480553027776
inside mach lint stdin is a tty: False stdin=2109049297088
inside pipelint stdin is a tty: False stdin=2173329430720
inside mach lint stdin is a tty: False stdin=2916943091904
inside pipelint stdin is a tty: False stdin=2257629239488
inside mach lint stdin is a tty: False stdin=2146904266944
inside pipelint stdin is a tty: False stdin=2065575270592
inside mach lint stdin is a tty: False stdin=2112730192064
inside pipelint stdin is a tty: False stdin=2422191708352
inside mach lint stdin is a tty: False stdin=1574458316992
inside pipelint stdin is a tty: False stdin=1949160921280
inside mach lint stdin is a tty: False stdin=2672519829696
inside pipelint stdin is a tty: False stdin=3010923485376
inside pipelint stdin is a tty: False stdin=2349785831616
inside mach lint stdin is a tty: False stdin=2993197242560
inside pipelint stdin is a tty: False stdin=1812155816128
inside mach lint stdin is a tty: False stdin=2203810814144
inside mach lint stdin is a tty: False stdin=1494902397120

it seems to be in an infinite loop spawning processes

Type: task → defect
Summary: pipelint does not work on Windows inside pwsh → pipelint does not work on Windows inside pwsh/cmd
Summary: pipelint does not work on Windows inside pwsh/cmd → pipelint does not work on Windows inside pwsh/cmd/bash (mozilla-build shell)

I'm pretty baffled by this. I suspect there's some black magic in mach at play here, but it's hard to say for sure. I don't have a ready environment to test on, but maybe we can write a unittest that triggers the error and that way test easier on try. It would also be good to find a minimal test case.

E.g, do we get the same output duplicated many times when running all of the following?

more client.py | ./mach lint --stdin-filename client.py
more client.py | ./mach python -c 'import sys; print("".join(sys.stdin), file=sys.stderr)'
more client.py | python -c 'import sys; print("".join(sys.stdin), file=sys.stderr)'

It seems like there might be two issues here, a problem reading stdin and a problem spawning too many processes.

The severity field is not set for this bug.
:andi, could you have a look please?

For more information, please visit BugBot documentation.

Flags: needinfo?(bpostelnicu)
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: