Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 Jul 2015 19:40:58 +0000
From:      "emaste (Ed Maste)" <phabric-noreply@FreeBSD.org>
To:        freebsd-toolchain@freebsd.org
Subject:   [Differential] [Request, 39 lines] D3175: ar: add -U (unique) option to disable -D (deterministic) mode
Message-ID:  <differential-rev-PHID-DREV-cyeebwezwjr5fbk22o5c-req@FreeBSD.org>

index | next in thread | raw e-mail

[-- Attachment #1 --]
emaste created this revision.
emaste added reviewers: brooks, bapt.
emaste added a subscriber: freebsd-toolchain-list.

REVISION SUMMARY
  I'd like to make ar(1) produce deterministic output by default. In order to do so we'll first need an option to turn off deterministic mode.
  
  Note that this is against upstream ELF Tool Chain ar(1), which is a little different from the one in the FreeBSD tree. I plan to migrate to ELF Tool Chain's eventually, but this change should apply (perhaps with trivial modification) to FreeBSD's.

REVISION DETAIL
  https://reviews.freebsd.org/D3175

AFFECTED FILES
  ar/ar.1
  ar/ar.c

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: emaste, brooks, bapt
Cc: freebsd-toolchain-list

[-- Attachment #2 --]
diff --git a/ar/ar.c b/ar/ar.c
--- a/ar/ar.c
+++ b/ar/ar.c
@@ -123,15 +123,18 @@
 	len = strlen(bsdar->progname);
 	if (len >= strlen("ranlib") &&
 	    strcmp(bsdar->progname + len - strlen("ranlib"), "ranlib") == 0) {
-		while ((opt = getopt_long(argc, argv, "tDV", longopts,
+		while ((opt = getopt_long(argc, argv, "tDUV", longopts,
 		    NULL)) != -1) {
 			switch(opt) {
 			case 't':
 				/* Ignored. */
 				break;
 			case 'D':
 				bsdar->options |= AR_D;
 				break;
+			case 'U':
+				bsdar->options &= ~AR_D;
+				break;
 			case 'V':
 				bsdar_version();
 				break;
@@ -169,7 +172,7 @@
 		}
 	}
 
-	while ((opt = getopt_long(argc, argv, "abCcdDfF:ijlMmopqrSsTtuVvxz",
+	while ((opt = getopt_long(argc, argv, "abCcdDfF:ijlMmopqrSsTtUuVvxz",
 	    longopts, NULL)) != -1) {
 		switch(opt) {
 		case 'a':
@@ -237,6 +240,9 @@
 		case 't':
 			set_mode(bsdar, opt);
 			break;
+		case 'U':
+			bsdar->options &= ~AR_D;
+			break;
 		case 'u':
 			bsdar->options |= AR_U;
 			break;
@@ -400,7 +406,8 @@
   -D            Use fixed metadata, for consistent archive checksums.\n\
   -F FORMAT | --flavor=FORMAT\n\
                 Create archives with the specified format.\n\
-  -S            Do not generate an archive symbol table.\n"
+  -S            Do not generate an archive symbol table.\n\
+  -U            Use original metadata, for unique archive checksums.\n"
 
 static void
 bsdar_usage(void)
@@ -415,6 +422,7 @@
   Options:\n\
   -t              (This option is accepted, but ignored).\n\
   -D              Use fixed metadata, for consistent archive checksums.\n\
+  -U              Use original metadata, for unique archive checksums.\n\
   -V              Print a version identifier and exit.\n"
 
 static void
diff --git a/ar/ar.1 b/ar/ar.1
--- a/ar/ar.1
+++ b/ar/ar.1
@@ -23,7 +23,7 @@
 .\"
 .\" $Id$
 .\"
-.Dd December 10, 2012
+.Dd July 23, 2015
 .Os
 .Dt AR 1
 .Sh NAME
@@ -66,6 +66,7 @@
 .Op Fl f
 .Op Fl F Ar flavor | Fl -flavor Ar flavor
 .Op Fl s | Fl S
+.Op Fl U
 .Op Fl v
 .Op Fl z
 .Ar archive
@@ -83,14 +84,16 @@
 .Op Fl j
 .Op Fl s | Fl S
 .Op Fl u
+.Op Fl U
 .Op Fl v
 .Op Fl z
 .Ar archive
 .Ar
 .Nm
 .Fl s
 .Op Fl D
 .Op Fl j
+.Op Fl U
 .Op Fl z
 .Ar archive
 .Nm
@@ -203,6 +206,12 @@
 .Ar .
 This ensures that checksums on the resulting archives are reproducible
 when member contents are identical.
+If the
+.It Fl D
+and
+.It Fl U
+options are both specified, the one specified later in the command line
+takes effect.
 .It Fl f
 Synonymous with option
 .Fl T .
@@ -335,6 +344,20 @@
 .Ar
 will be extracted only if they are newer than the corresponding
 files in the file system.
+.It Fl U
+When used in combination with the
+.Fl r
+or
+.Fl q
+option, insert the real mtime, uid and gid, and file mode values
+from the members named by arguments
+.Ar .
+If the
+.It Fl D
+and
+.It Fl U
+options are both specified, the one specified later in the command line
+takes effect.
 .It Fl v
 Provide verbose output.
 When used with the

home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?differential-rev-PHID-DREV-cyeebwezwjr5fbk22o5c-req>