[llvm] r375116 - [lit] Extend internal diff to support `-` argument
Joel E. Denny via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 17 07:03:06 PDT 2019
Author: jdenny
Date: Thu Oct 17 07:03:06 2019
New Revision: 375116
URL: http://llvm.org/viewvc/llvm-project?rev=375116&view=rev
Log:
[lit] Extend internal diff to support `-` argument
When using lit's internal shell, RUN lines like the following
accidentally execute an external `diff` instead of lit's internal
`diff`:
```
# RUN: program | diff file -
```
Such cases exist now, in `clang/test/Analysis` for example. We are
preparing patches to ensure lit's internal `diff` is called in such
cases, which will then fail because lit's internal `diff` doesn't
recognize `-` as a command-line option. This patch adds support for
`-` to mean stdin.
Reviewed By: probinson, rnk
Differential Revision: https://reviews.llvm.org/D67643
Added:
llvm/trunk/utils/lit/tests/Inputs/shtest-shell/diff-r-error-7.txt
llvm/trunk/utils/lit/tests/Inputs/shtest-shell/diff-r-error-8.txt
Modified:
llvm/trunk/utils/lit/lit/builtin_commands/diff.py
llvm/trunk/utils/lit/tests/Inputs/shtest-shell/diff-encodings.txt
llvm/trunk/utils/lit/tests/Inputs/shtest-shell/diff-pipes.txt
llvm/trunk/utils/lit/tests/max-failures.py
llvm/trunk/utils/lit/tests/shtest-shell.py
Modified: llvm/trunk/utils/lit/lit/builtin_commands/diff.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/lit/builtin_commands/diff.py?rev=375116&r1=375115&r2=375116&view=diff
==============================================================================
--- llvm/trunk/utils/lit/lit/builtin_commands/diff.py (original)
+++ llvm/trunk/utils/lit/lit/builtin_commands/diff.py Thu Oct 17 07:03:06 2019
@@ -31,8 +31,13 @@ def getDirTree(path, basedir=""):
def compareTwoFiles(flags, filepaths):
filelines = []
for file in filepaths:
- with open(file, 'rb') as file_bin:
- filelines.append(file_bin.readlines())
+ if file == "-":
+ stdin_fileno = sys.stdin.fileno()
+ with os.fdopen(os.dup(stdin_fileno), 'rb') as stdin_bin:
+ filelines.append(stdin_bin.readlines())
+ else:
+ with open(file, 'rb') as file_bin:
+ filelines.append(file_bin.readlines())
try:
return compareTwoTextFiles(flags, filepaths, filelines,
@@ -213,10 +218,13 @@ def main(argv):
exitCode = 0
try:
for file in args:
- if not os.path.isabs(file):
+ if file != "-" and not os.path.isabs(file):
file = os.path.realpath(os.path.join(os.getcwd(), file))
if flags.recursive_diff:
+ if file == "-":
+ sys.stderr.write("Error: cannot recursively compare '-'\n")
+ sys.exit(1)
dir_trees.append(getDirTree(file))
else:
filepaths.append(file)
Modified: llvm/trunk/utils/lit/tests/Inputs/shtest-shell/diff-encodings.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/shtest-shell/diff-encodings.txt?rev=375116&r1=375115&r2=375116&view=diff
==============================================================================
--- llvm/trunk/utils/lit/tests/Inputs/shtest-shell/diff-encodings.txt (original)
+++ llvm/trunk/utils/lit/tests/Inputs/shtest-shell/diff-encodings.txt Thu Oct 17 07:03:06 2019
@@ -5,5 +5,11 @@
# RUN: diff -u diff-in.utf8 diff-in.bin && false || true
# RUN: diff -u diff-in.bin diff-in.utf8 && false || true
+# RUN: cat diff-in.bin | diff -u - diff-in.bin
+# RUN: cat diff-in.bin | diff -u diff-in.bin -
+# RUN: cat diff-in.bin | diff -u diff-in.utf16 - && false || true
+# RUN: cat diff-in.bin | diff -u diff-in.utf8 - && false || true
+# RUN: cat diff-in.bin | diff -u - diff-in.utf8 && false || true
+
# Fail so lit will print output.
# RUN: false
Modified: llvm/trunk/utils/lit/tests/Inputs/shtest-shell/diff-pipes.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/shtest-shell/diff-pipes.txt?rev=375116&r1=375115&r2=375116&view=diff
==============================================================================
--- llvm/trunk/utils/lit/tests/Inputs/shtest-shell/diff-pipes.txt (original)
+++ llvm/trunk/utils/lit/tests/Inputs/shtest-shell/diff-pipes.txt Thu Oct 17 07:03:06 2019
@@ -5,6 +5,16 @@
# RUN: diff %t.foo %t.foo | FileCheck -allow-empty -check-prefix=EMPTY %s
# RUN: diff -u %t.foo %t.bar | FileCheck %s && false || true
+# Check input pipe.
+# RUN: echo foo | diff -u - %t.foo
+# RUN: echo foo | diff -u %t.foo -
+# RUN: echo bar | diff -u %t.foo - && false || true
+# RUN: echo bar | diff -u - %t.foo && false || true
+
+# Check output and input pipes at the same time.
+# RUN: echo foo | diff - %t.foo | FileCheck -allow-empty -check-prefix=EMPTY %s
+# RUN: echo bar | diff -u %t.foo - | FileCheck %s && false || true
+
# Fail so lit will print output.
# RUN: false
Added: llvm/trunk/utils/lit/tests/Inputs/shtest-shell/diff-r-error-7.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/shtest-shell/diff-r-error-7.txt?rev=375116&view=auto
==============================================================================
--- llvm/trunk/utils/lit/tests/Inputs/shtest-shell/diff-r-error-7.txt (added)
+++ llvm/trunk/utils/lit/tests/Inputs/shtest-shell/diff-r-error-7.txt Thu Oct 17 07:03:06 2019
@@ -0,0 +1,2 @@
+# diff -r currently cannot handle stdin.
+# RUN: diff -r - %t
Added: llvm/trunk/utils/lit/tests/Inputs/shtest-shell/diff-r-error-8.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/shtest-shell/diff-r-error-8.txt?rev=375116&view=auto
==============================================================================
--- llvm/trunk/utils/lit/tests/Inputs/shtest-shell/diff-r-error-8.txt (added)
+++ llvm/trunk/utils/lit/tests/Inputs/shtest-shell/diff-r-error-8.txt Thu Oct 17 07:03:06 2019
@@ -0,0 +1,2 @@
+# diff -r currently cannot handle stdin.
+# RUN: diff -r %t -
Modified: llvm/trunk/utils/lit/tests/max-failures.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/max-failures.py?rev=375116&r1=375115&r2=375116&view=diff
==============================================================================
--- llvm/trunk/utils/lit/tests/max-failures.py (original)
+++ llvm/trunk/utils/lit/tests/max-failures.py Thu Oct 17 07:03:06 2019
@@ -8,7 +8,7 @@
#
# END.
-# CHECK: Failing Tests (30)
+# CHECK: Failing Tests (32)
# CHECK: Failing Tests (1)
# CHECK: Failing Tests (2)
# CHECK: error: argument --max-failures: requires positive integer, but found '0'
Modified: llvm/trunk/utils/lit/tests/shtest-shell.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/shtest-shell.py?rev=375116&r1=375115&r2=375116&view=diff
==============================================================================
--- llvm/trunk/utils/lit/tests/shtest-shell.py (original)
+++ llvm/trunk/utils/lit/tests/shtest-shell.py Thu Oct 17 07:03:06 2019
@@ -81,6 +81,60 @@
# CHECK: error: command failed with exit status: 1
# CHECK: $ "true"
+# CHECK: $ "cat" "diff-in.bin"
+# CHECK-NOT: error
+# CHECK: $ "diff" "-u" "-" "diff-in.bin"
+# CHECK-NOT: error
+
+# CHECK: $ "cat" "diff-in.bin"
+# CHECK-NOT: error
+# CHECK: $ "diff" "-u" "diff-in.bin" "-"
+# CHECK-NOT: error
+
+# CHECK: $ "cat" "diff-in.bin"
+# CHECK-NOT: error
+# CHECK: $ "diff" "-u" "diff-in.utf16" "-"
+# CHECK: # command output:
+# CHECK-NEXT: ---
+# CHECK-NEXT: +++
+# CHECK-NEXT: @@
+# CHECK-NEXT: {{^ .f.o.o.$}}
+# CHECK-NEXT: {{^-.b.a.r.$}}
+# CHECK-NEXT: {{^\+.b.a.r..}}
+# CHECK-NEXT: {{^ .b.a.z.$}}
+# CHECK: error: command failed with exit status: 1
+# CHECK: $ "true"
+
+# CHECK: $ "cat" "diff-in.bin"
+# CHECK-NOT: error
+# CHECK: $ "diff" "-u" "diff-in.utf8" "-"
+# CHECK: # command output:
+# CHECK-NEXT: ---
+# CHECK-NEXT: +++
+# CHECK-NEXT: @@
+# CHECK-NEXT: -foo
+# CHECK-NEXT: -bar
+# CHECK-NEXT: -baz
+# CHECK-NEXT: {{^\+.f.o.o.$}}
+# CHECK-NEXT: {{^\+.b.a.r..}}
+# CHECK-NEXT: {{^\+.b.a.z.$}}
+# CHECK: error: command failed with exit status: 1
+# CHECK: $ "true"
+
+# CHECK: $ "diff" "-u" "-" "diff-in.utf8"
+# CHECK: # command output:
+# CHECK-NEXT: ---
+# CHECK-NEXT: +++
+# CHECK-NEXT: @@
+# CHECK-NEXT: {{^\-.f.o.o.$}}
+# CHECK-NEXT: {{^\-.b.a.r..}}
+# CHECK-NEXT: {{^\-.b.a.z.$}}
+# CHECK-NEXT: +foo
+# CHECK-NEXT: +bar
+# CHECK-NEXT: +baz
+# CHECK: error: command failed with exit status: 1
+# CHECK: $ "true"
+
# CHECK: $ "false"
# CHECK: ***
@@ -158,6 +212,51 @@
# CHECK-NOT: error
# CHECK: $ "true"
+# CHECK: $ "echo" "foo"
+# CHECK: $ "diff" "-u" "-" "{{[^"]*}}.foo"
+# CHECK-NOT: note
+# CHECK-NOT: error
+
+# CHECK: $ "echo" "foo"
+# CHECK: $ "diff" "-u" "{{[^"]*}}.foo" "-"
+# CHECK-NOT: note
+# CHECK-NOT: error
+
+# CHECK: $ "echo" "bar"
+# CHECK: $ "diff" "-u" "{{[^"]*}}.foo" "-"
+# CHECK: # command output:
+# CHECK: @@
+# CHECK-NEXT: -foo
+# CHECK-NEXT: +bar
+# CHECK: error: command failed with exit status: 1
+# CHECK: $ "true"
+
+# CHECK: $ "echo" "bar"
+# CHECK: $ "diff" "-u" "-" "{{[^"]*}}.foo"
+# CHECK: # command output:
+# CHECK: @@
+# CHECK-NEXT: -bar
+# CHECK-NEXT: +foo
+# CHECK: error: command failed with exit status: 1
+# CHECK: $ "true"
+
+# CHECK: $ "echo" "foo"
+# CHECK: $ "diff" "-" "{{[^"]*}}.foo"
+# CHECK-NOT: note
+# CHECK-NOT: error
+# CHECK: $ "FileCheck"
+# CHECK-NOT: note
+# CHECK-NOT: error
+
+# CHECK: $ "echo" "bar"
+# CHECK: $ "diff" "-u" "{{[^"]*}}.foo" "-"
+# CHECK: note: command had no output on stdout or stderr
+# CHECK: error: command failed with exit status: 1
+# CHECK: $ "FileCheck"
+# CHECK-NOT: note
+# CHECK-NOT: error
+# CHECK: $ "true"
+
# CHECK: $ "false"
# CHECK: ***
@@ -216,6 +315,20 @@
# CHECK: File {{.*}}dir1{{.*}}extra_file is a regular empty file while file {{.*}}dir2{{.*}}extra_file is a directory
# CHECK: error: command failed with exit status: 1
+# CHECK: FAIL: shtest-shell :: diff-r-error-7.txt
+# CHECK: *** TEST 'shtest-shell :: diff-r-error-7.txt' FAILED ***
+# CHECK: $ "diff" "-r" "-" "{{[^"]*}}"
+# CHECK: # command stderr:
+# CHECK: Error: cannot recursively compare '-'
+# CHECK: error: command failed with exit status: 1
+
+# CHECK: FAIL: shtest-shell :: diff-r-error-8.txt
+# CHECK: *** TEST 'shtest-shell :: diff-r-error-8.txt' FAILED ***
+# CHECK: $ "diff" "-r" "{{[^"]*}}" "-"
+# CHECK: # command stderr:
+# CHECK: Error: cannot recursively compare '-'
+# CHECK: error: command failed with exit status: 1
+
# CHECK: PASS: shtest-shell :: diff-r.txt
@@ -426,4 +539,4 @@
# CHECK: PASS: shtest-shell :: sequencing-0.txt
# CHECK: XFAIL: shtest-shell :: sequencing-1.txt
# CHECK: PASS: shtest-shell :: valid-shell.txt
-# CHECK: Failing Tests (30)
+# CHECK: Failing Tests (32)
More information about the llvm-commits
mailing list