From fd50a8256e324fc3564a38df0dabef488e2a6a74 Mon Sep 17 00:00:00 2001 From: "Joel E. Denny" Date: Sat, 12 Oct 2019 11:57:41 +0000 Subject: [PATCH] Reland r374390: [lit] Extend internal diff to support `-` argument To avoid breaking some tests, D66574, D68664, D67643, and D68668 landed together. However, D68664 introduced an issue now addressed by D68839, with which these are now all relanding. Differential Revision: https://reviews.llvm.org/D67643 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@374650 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/lit/lit/builtin_commands/diff.py | 14 ++- .../Inputs/shtest-shell/diff-encodings.txt | 6 + .../tests/Inputs/shtest-shell/diff-pipes.txt | 10 ++ .../Inputs/shtest-shell/diff-r-error-7.txt | 2 + .../Inputs/shtest-shell/diff-r-error-8.txt | 2 + utils/lit/tests/max-failures.py | 2 +- utils/lit/tests/shtest-shell.py | 115 +++++++++++++++++- 7 files changed, 146 insertions(+), 5 deletions(-) create mode 100644 utils/lit/tests/Inputs/shtest-shell/diff-r-error-7.txt create mode 100644 utils/lit/tests/Inputs/shtest-shell/diff-r-error-8.txt diff --git a/utils/lit/lit/builtin_commands/diff.py b/utils/lit/lit/builtin_commands/diff.py index 562b9ac37ac..0e912d150fe 100644 --- a/utils/lit/lit/builtin_commands/diff.py +++ b/utils/lit/lit/builtin_commands/diff.py @@ -27,8 +27,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, @@ -194,10 +199,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) diff --git a/utils/lit/tests/Inputs/shtest-shell/diff-encodings.txt b/utils/lit/tests/Inputs/shtest-shell/diff-encodings.txt index d8b9718a099..044908f7725 100644 --- a/utils/lit/tests/Inputs/shtest-shell/diff-encodings.txt +++ b/utils/lit/tests/Inputs/shtest-shell/diff-encodings.txt @@ -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 diff --git a/utils/lit/tests/Inputs/shtest-shell/diff-pipes.txt b/utils/lit/tests/Inputs/shtest-shell/diff-pipes.txt index ce0abca1661..0bd73a86251 100644 --- a/utils/lit/tests/Inputs/shtest-shell/diff-pipes.txt +++ b/utils/lit/tests/Inputs/shtest-shell/diff-pipes.txt @@ -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 diff --git a/utils/lit/tests/Inputs/shtest-shell/diff-r-error-7.txt b/utils/lit/tests/Inputs/shtest-shell/diff-r-error-7.txt new file mode 100644 index 00000000000..08c50447a97 --- /dev/null +++ b/utils/lit/tests/Inputs/shtest-shell/diff-r-error-7.txt @@ -0,0 +1,2 @@ +# diff -r currently cannot handle stdin. +# RUN: diff -r - %t diff --git a/utils/lit/tests/Inputs/shtest-shell/diff-r-error-8.txt b/utils/lit/tests/Inputs/shtest-shell/diff-r-error-8.txt new file mode 100644 index 00000000000..26361a91e89 --- /dev/null +++ b/utils/lit/tests/Inputs/shtest-shell/diff-r-error-8.txt @@ -0,0 +1,2 @@ +# diff -r currently cannot handle stdin. +# RUN: diff -r %t - diff --git a/utils/lit/tests/max-failures.py b/utils/lit/tests/max-failures.py index 5149a91ec00..7bd5c32e72e 100644 --- a/utils/lit/tests/max-failures.py +++ b/utils/lit/tests/max-failures.py @@ -8,7 +8,7 @@ # # END. -# CHECK: Failing Tests (28) +# CHECK: Failing Tests (30) # CHECK: Failing Tests (1) # CHECK: Failing Tests (2) # CHECK: error: argument --max-failures: requires positive integer, but found '0' diff --git a/utils/lit/tests/shtest-shell.py b/utils/lit/tests/shtest-shell.py index 6d9b1aa459c..db57c3af1f1 100644 --- a/utils/lit/tests/shtest-shell.py +++ b/utils/lit/tests/shtest-shell.py @@ -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 # CHECK: FAIL: shtest-shell :: error-0.txt @@ -297,4 +410,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 (28) +# CHECK: Failing Tests (30) -- 2.40.0