From 7d2b0ec345487537e37a24b323d612c7c06295cd Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Wed, 6 Nov 2019 10:19:30 -0800 Subject: [PATCH] [llvm-ar] Support verbose mode for operation 'x' Reviewed By: jhenderson, kongyi Differential Revision: https://reviews.llvm.org/D69911 --- llvm/test/tools/llvm-ar/extract.test | 15 ++++++++++++--- llvm/tools/llvm-ar/llvm-ar.cpp | 6 +++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/llvm/test/tools/llvm-ar/extract.test b/llvm/test/tools/llvm-ar/extract.test index a2059d1..278a89d 100644 --- a/llvm/test/tools/llvm-ar/extract.test +++ b/llvm/test/tools/llvm-ar/extract.test @@ -5,18 +5,27 @@ RUN: rm -rf %t && mkdir -p %t/extracted/ # Extracting from an empty archive should not warn or error: RUN: llvm-ar cr %t/empty.a -RUN: llvm-ar x %t/empty.a 2>&1 | count 0 +RUN: llvm-ar xv %t/empty.a 2>&1 | count 0 RUN: echo filea > %t/a.txt RUN: echo fileb > %t/b.txt RUN: llvm-ar rc %t/archive.a %t/a.txt %t/b.txt # Single member: -RUN: cd %t/extracted && llvm-ar x %t/archive.a a.txt +RUN: cd %t/extracted && llvm-ar xv %t/archive.a a.txt | FileCheck %s --check-prefix=A RUN: diff %t/a.txt %t/extracted/a.txt +A: x - a.txt # All members: RUN: rm %t/extracted/a.txt -RUN: cd %t/extracted && llvm-ar x %t/archive.a +RUN: cd %t/extracted && llvm-ar xv %t/archive.a | FileCheck %s --check-prefix=AB RUN: diff %t/a.txt %t/extracted/a.txt RUN: diff %t/b.txt %t/extracted/b.txt +AB: x - a.txt +AB: x - b.txt + +# No output if 'v' is not specified. +RUN: rm a.txt b.txt +RUN: llvm-ar x %t/archive.a 2>&1 | count 0 +RUN: diff %t/a.txt %t/extracted/a.txt +RUN: diff %t/b.txt %t/extracted/b.txt diff --git a/llvm/tools/llvm-ar/llvm-ar.cpp b/llvm/tools/llvm-ar/llvm-ar.cpp index c70b881..18cad21 100644 --- a/llvm/tools/llvm-ar/llvm-ar.cpp +++ b/llvm/tools/llvm-ar/llvm-ar.cpp @@ -530,8 +530,12 @@ static void doExtract(StringRef Name, const object::Archive::Child &C) { failIfError(ModeOrErr.takeError()); sys::fs::perms Mode = ModeOrErr.get(); + llvm::StringRef outputFilePath = sys::path::filename(Name); + if (Verbose) + outs() << "x - " << outputFilePath << '\n'; + int FD; - failIfError(sys::fs::openFileForWrite(sys::path::filename(Name), FD, + failIfError(sys::fs::openFileForWrite(outputFilePath, FD, sys::fs::CD_CreateAlways, sys::fs::OF_None, Mode), Name); -- 2.7.4