[llvm] r343901 - [llvm-ar] Use POSIX-specified timestamps for 'tv'.

Jordan Rupprecht via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 5 16:25:39 PDT 2018


Author: rupprecht
Date: Fri Oct  5 16:25:39 2018
New Revision: 343901

URL: http://llvm.org/viewvc/llvm-project?rev=343901&view=rev
Log:
[llvm-ar] Use POSIX-specified timestamps for 'tv'.

Summary:
The POSIX spec says:

```
If the −t option is used with the −v option, the standard output format shall be:
"%s %u/%u %u %s %d %d:%d %d %s\n", <member mode>, <user ID>,
<group ID>, <number of bytes in member>,
<abbreviated month>, <day-of-month>, <hour>,
<minute>, <year>, <file>

where:

...
<abbreviated month>
Equivalent to the format of the %b conversion specification format in date.
<day-of-month>
Equivalent to the format of the %e conversion specification format in date.
<hour> Equivalent to the format of the %H conversion specification format in date.
<minute> Equivalent to the format of the %M conversion specification format in date.
<year> Equivalent to the format of the %Y conversion specification format in date.
```

This actually used to be the format printed by llvm-ar. It was apparently accidentally changed (see r207385 followed by comments in r207387). This makes it conform to GNU ar for easier replacement.

Reviewers: MaskRay

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D52940

Modified:
    llvm/trunk/test/Object/archive-extract.test
    llvm/trunk/test/Object/archive-toc.test
    llvm/trunk/test/tools/llvm-ar/empty-uid-gid.test
    llvm/trunk/tools/llvm-ar/llvm-ar.cpp

Modified: llvm/trunk/test/Object/archive-extract.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/archive-extract.test?rev=343901&r1=343900&r2=343901&view=diff
==============================================================================
--- llvm/trunk/test/Object/archive-extract.test (original)
+++ llvm/trunk/test/Object/archive-extract.test Fri Oct  5 16:25:39 2018
@@ -40,13 +40,13 @@
 ; RUN: llvm-ar -format gnu rcU %t.a very_long_bytecode_file_name.bc
 ; RUN: env TZ=GMT llvm-ar tv %t.a | FileCheck %s -check-prefix CHECK-GNU
 
-CHECK-GNU: 1465 2004-11-19 03:01:31.000000000 very_long_bytecode_file_name.bc
+CHECK-GNU: 1465 Nov 19 03:01 2004 very_long_bytecode_file_name.bc
 
 ; RUN: rm -f %t.a
 ; RUN: llvm-ar -format darwin rcU %t.a very_long_bytecode_file_name.bc
 ; RUN: env TZ=GMT llvm-ar tv %t.a | FileCheck %s -check-prefix CHECK-DARWIN
 
-CHECK-DARWIN: 1472 2004-11-19 03:01:31.000000000 very_long_bytecode_file_name.bc
+CHECK-DARWIN: 1472 Nov 19 03:01 2004 very_long_bytecode_file_name.bc
 
 RUN: not llvm-ar x %p/Inputs/GNU.a foo.o 2>&1 | FileCheck --check-prefix=NOTFOUND %s
 NOTFOUND: foo.o was not found

Modified: llvm/trunk/test/Object/archive-toc.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/archive-toc.test?rev=343901&r1=343900&r2=343901&view=diff
==============================================================================
--- llvm/trunk/test/Object/archive-toc.test (original)
+++ llvm/trunk/test/Object/archive-toc.test Fri Oct  5 16:25:39 2018
@@ -3,20 +3,20 @@ RUN: cd %p
 Test reading an archive created by gnu ar
 RUN: env TZ=GMT llvm-ar tv Inputs/GNU.a | FileCheck %s --check-prefix=GNU -strict-whitespace
 
-GNU:      rw-r--r-- 500/500      8 2004-11-19 02:57:37.000000000 evenlen
-GNU-NEXT: rw-r--r-- 500/500      7 2004-11-19 02:57:21.000000000 oddlen
-GNU-NEXT: rwxr-xr-x 500/500   1465 2004-11-19 03:01:31.000000000 very_long_bytecode_file_name.bc
-GNU-NEXT: rw-r--r-- 500/500   2280 2004-11-19 03:04:30.000000000 IsNAN.o
+GNU:      rw-r--r-- 500/500      8 Nov 19 02:57 2004 evenlen
+GNU-NEXT: rw-r--r-- 500/500      7 Nov 19 02:57 2004 oddlen
+GNU-NEXT: rwxr-xr-x 500/500   1465 Nov 19 03:01 2004 very_long_bytecode_file_name.bc
+GNU-NEXT: rw-r--r-- 500/500   2280 Nov 19 03:04 2004 IsNAN.o
 
 
 Test reading an archive createdy by Mac OS X ar
 RUN: env TZ=GMT llvm-ar tv Inputs/MacOSX.a | FileCheck %s --check-prefix=OSX -strict-whitespace
 
 OSX-NOT: __.SYMDEF
-OSX:      rw-r--r-- 501/501      8 2004-11-19 02:57:37.000000000 evenlen
-OSX-NEXT: rw-r--r-- 501/501      8 2004-11-19 02:57:21.000000000 oddlen
-OSX-NEXT: rw-r--r-- 502/502   1465 2010-02-04 06:59:14.000000000 very_long_bytecode_file_name.bc
-OSX-NEXT: rw-r--r-- 501/501   2280 2004-11-19 04:32:06.000000000 IsNAN.o
+OSX:      rw-r--r-- 501/501      8 Nov 19 02:57 2004 evenlen
+OSX-NEXT: rw-r--r-- 501/501      8 Nov 19 02:57 2004 oddlen
+OSX-NEXT: rw-r--r-- 502/502   1465 Feb  4 06:59 2010 very_long_bytecode_file_name.bc
+OSX-NEXT: rw-r--r-- 501/501   2280 Nov 19 04:32 2004 IsNAN.o
 
 Test reading an archive created on Solaris by /usr/ccs/bin/ar
 RUN: env TZ=GMT llvm-ar tv Inputs/SVR4.a | FileCheck %s -strict-whitespace
@@ -24,18 +24,18 @@ RUN: env TZ=GMT llvm-ar tv Inputs/SVR4.a
 Test reading an archive created on Solaris by /usr/xpg4/bin/ar
 RUN: env TZ=GMT llvm-ar tv Inputs/xpg4.a | FileCheck %s -strict-whitespace
 
-CHECK:      rw-r--r-- 1002/102      8 2004-11-19 03:24:02.000000000 evenlen
-CHECK-NEXT: rw-r--r-- 1002/102      7 2004-11-19 03:24:02.000000000 oddlen
-CHECK-NEXT: rwxr-xr-x 1002/102   1465 2004-11-19 03:24:02.000000000 very_long_bytecode_file_name.bc
-CHECK-NEXT: rw-r--r-- 1002/102   2280 2004-11-19 03:24:02.000000000 IsNAN.o
+CHECK:      rw-r--r-- 1002/102      8 Nov 19 03:24 2004 evenlen
+CHECK-NEXT: rw-r--r-- 1002/102      7 Nov 19 03:24 2004 oddlen
+CHECK-NEXT: rwxr-xr-x 1002/102   1465 Nov 19 03:24 2004 very_long_bytecode_file_name.bc
+CHECK-NEXT: rw-r--r-- 1002/102   2280 Nov 19 03:24 2004 IsNAN.o
 
 Test reading a thin archive created by gnu ar
 RUN: env TZ=GMT llvm-ar tv Inputs/thin.a | FileCheck %s --check-prefix=THIN -strict-whitespace
 
-THIN:      rw-r--r-- 1000/1000      8 2014-12-16 00:56:27.000000000 Inputs/evenlen
-THIN-NEXT: rw-r--r-- 1000/1000      7 2014-12-16 00:56:27.000000000 Inputs/oddlen
-THIN-NEXT: rwxr-xr-x 1000/1000   1465 2014-12-16 00:56:27.000000000 Inputs/very_long_bytecode_file_name.bc
-THIN-NEXT: rw-r--r-- 1000/1000   2280 2014-12-16 00:56:27.000000000 Inputs/IsNAN.o
+THIN:      rw-r--r-- 1000/1000      8 Dec 16 00:56 2014 Inputs/evenlen
+THIN-NEXT: rw-r--r-- 1000/1000      7 Dec 16 00:56 2014 Inputs/oddlen
+THIN-NEXT: rwxr-xr-x 1000/1000   1465 Dec 16 00:56 2014 Inputs/very_long_bytecode_file_name.bc
+THIN-NEXT: rw-r--r-- 1000/1000   2280 Dec 16 00:56 2014 Inputs/IsNAN.o
 
 Test reading an archive with just a symbol table. We use to reject them.
 RUN: llvm-ar tv Inputs/symtab-only.a | FileCheck --allow-empty --check-prefix=EMPTY %s
@@ -44,5 +44,5 @@ EMPTY-NOT: {{.}}
 Test reading a thin archive with directory names.
 RUN: env TZ=GMT llvm-ar tv Inputs/thin-path.a | FileCheck %s --check-prefix=THINPATH -strict-whitespace
 
-THINPATH: rw-r--r-- 0/0   1224 1970-01-01 00:00:00.000000000 Inputs/test.o
-THINPATH-NEXT: rw-r--r-- 0/0   1224 1970-01-01 00:00:00.000000000 Inputs/t/test2.o
+THINPATH:      rw-r--r-- 0/0   1224 Jan  1 00:00 1970 Inputs/test.o
+THINPATH-NEXT: rw-r--r-- 0/0   1224 Jan  1 00:00 1970 Inputs/t/test2.o

Modified: llvm/trunk/test/tools/llvm-ar/empty-uid-gid.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-ar/empty-uid-gid.test?rev=343901&r1=343900&r2=343901&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-ar/empty-uid-gid.test (original)
+++ llvm/trunk/test/tools/llvm-ar/empty-uid-gid.test Fri Oct  5 16:25:39 2018
@@ -1,3 +1,3 @@
-RUN: llvm-ar tv %S/Inputs/msvc-import.lib | FileCheck %s
+RUN: env TZ=GMT llvm-ar tv %S/Inputs/msvc-import.lib | FileCheck %s
 
-CHECK: --------- 0/0      0 1970-01-01 {{[0-9:.]+}} library.dll
+CHECK: --------- 0/0      0 Jan 1 {{[0-9:.]+}} 1970 library.dll

Modified: llvm/trunk/tools/llvm-ar/llvm-ar.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-ar/llvm-ar.cpp?rev=343901&r1=343900&r2=343901&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-ar/llvm-ar.cpp (original)
+++ llvm/trunk/tools/llvm-ar/llvm-ar.cpp Fri Oct  5 16:25:39 2018
@@ -24,6 +24,7 @@
 #include "llvm/Support/Errc.h"
 #include "llvm/Support/FileSystem.h"
 #include "llvm/Support/Format.h"
+#include "llvm/Support/FormatVariadic.h"
 #include "llvm/Support/InitLLVM.h"
 #include "llvm/Support/LineIterator.h"
 #include "llvm/Support/MemoryBuffer.h"
@@ -367,7 +368,11 @@ static void doDisplayTable(StringRef Nam
     outs() << ' ' << format("%6llu", Size.get());
     auto ModTimeOrErr = C.getLastModified();
     failIfError(ModTimeOrErr.takeError());
-    outs() << ' ' << ModTimeOrErr.get();
+    // Note: formatv() only handles the default TimePoint<>, which is in
+    // nanoseconds.
+    // TODO: fix format_provider<TimePoint<>> to allow other units.
+    sys::TimePoint<> ModTimeInNs = ModTimeOrErr.get();
+    outs() << ' ' << formatv("{0:%b %e %H:%M %Y}", ModTimeInNs);
     outs() << ' ';
   }
 




More information about the llvm-commits mailing list