svn commit: r251208 - in head: bin/test tools/regression/bin/test

Jilles Tjoelker jilles at FreeBSD.org
Fri May 31 22:54:21 UTC 2013


Author: jilles
Date: Fri May 31 22:54:20 2013
New Revision: 251208
URL: http://svnweb.freebsd.org/changeset/base/251208

Log:
  test: Remove -ntXY and -otXY primaries.
  
  This reverts commit r247274.
  
  As maintainer of sh, I disapprove of this feature addition.
  
  It is too specific and can be done without easily using find(1) or stat(1).
  I will add some hints to the test(1) man page shortly.
  
  In general, FreeBSD sh is not the place to invent new shell language
  features. This is how it has been maintained and adding features randomly
  does not work with that.
  
  The new syntax (e.g. [ FILE1 -ntca FILE2 ]) looks cryptic to me.

Modified:
  head/bin/test/test.1
  head/bin/test/test.c
  head/tools/regression/bin/test/regress.sh

Modified: head/bin/test/test.1
==============================================================================
--- head/bin/test/test.1	Fri May 31 22:53:44 2013	(r251207)
+++ head/bin/test/test.1	Fri May 31 22:54:20 2013	(r251208)
@@ -169,65 +169,15 @@ True if
 .Ar file
 exists and is a socket.
 .It Ar file1 Fl nt Ar file2
-True if both
-.Ar file1
-and
-.Ar file2
-exist and
-.Ar file1
-is newer than
-.Ar file2 .
-.It Ar file1 Fl nt Ns Ar X Ns Ar Y Ar file2
-True if both
-.Ar file1
-and
-.Ar file2
-exist and
+True if
 .Ar file1
-has a more recent last access time
-.Pq Ar X Ns = Ns Cm a ,
-inode creation time
-.Pq Ar X Ns = Ns Cm b ,
-change time
-.Pq Ar X Ns = Ns Cm c ,
-or modification time
-.Pq Ar X Ns = Ns Cm m
-than the last access time
-.Pq Ar Y Ns = Ns Cm a ,
-inode creation time
-.Pq Ar Y Ns = Ns Cm b ,
-change time
-.Pq Ar Y Ns = Ns Cm c ,
-or modification time
-.Pq Ar Y Ns = Ns Cm m
-of
+exists and is newer than
 .Ar file2 .
-Note that
-.Ic -ntmm
-is equivalent to
-.Ic -nt .
 .It Ar file1 Fl ot Ar file2
-True if both
-.Ar file1
-and
-.Ar file2
-exist and
+True if
 .Ar file1
-is older than
+exists and is older than
 .Ar file2 .
-Note that
-.Ar file1
-.Ic -ot
-.Ar file2
-is equivalent to
-.Ar file2
-.Ic -nt
-.Ar file1
-.It Ar file1 Fl ot Ns Ar X Ns Ar Y Ar file2
-Equivalent to
-.Ar file2
-.Ic -nt Ns Ar Y Ns Ar X
-.Ar file1 .
 .It Ar file1 Fl ef Ar file2
 True if
 .Ar file1

Modified: head/bin/test/test.c
==============================================================================
--- head/bin/test/test.c	Fri May 31 22:53:44 2013	(r251207)
+++ head/bin/test/test.c	Fri May 31 22:54:20 2013	(r251208)
@@ -63,7 +63,7 @@ error(const char *msg, ...)
 		"-u"|"-g"|"-k"|"-s"|"-t"|"-z"|"-n"|"-o"|"-O"|"-G"|"-L"|"-S";
 
 	binary-operator ::= "="|"!="|"-eq"|"-ne"|"-ge"|"-gt"|"-le"|"-lt"|
-			"-nt"|"-nt[abcm][abcm]"|"-ot"|"-ot[abcm][abcm])"|"-ef";
+			"-nt"|"-ot"|"-ef";
 	operand ::= <any legal UNIX file name>
 */
 
@@ -85,38 +85,8 @@ enum token {
 	FILSUID,
 	FILSGID,
 	FILSTCK,
-	FILNTAA,
-	FILNTAB,
-	FILNTAC,
-	FILNTAM,
-	FILNTBA,
-	FILNTBB,
-	FILNTBC,
-	FILNTBM,
-	FILNTCA,
-	FILNTCB,
-	FILNTCC,
-	FILNTCM,
-	FILNTMA,
-	FILNTMB,
-	FILNTMC,
-	FILNTMM,
-	FILOTAA,
-	FILOTAB,
-	FILOTAC,
-	FILOTAM,
-	FILOTBA,
-	FILOTBB,
-	FILOTBC,
-	FILOTBM,
-	FILOTCA,
-	FILOTCB,
-	FILOTCC,
-	FILOTCM,
-	FILOTMA,
-	FILOTMB,
-	FILOTMC,
-	FILOTMM,
+	FILNT,
+	FILOT,
 	FILEQ,
 	FILUID,
 	FILGID,
@@ -148,16 +118,9 @@ enum token_types {
 	PAREN
 };
 
-enum time_types {
-	ATIME,
-	BTIME,
-	CTIME,
-	MTIME
-};
-
 static struct t_op {
-	char op_text[6];
-	char op_num, op_type;
+	char op_text[4];
+	short op_num, op_type;
 } const ops [] = {
 	{"-r",	FILRD,	UNOP},
 	{"-w",	FILWR,	UNOP},
@@ -191,40 +154,8 @@ static struct t_op {
 	{"-gt",	INTGT,	BINOP},
 	{"-le",	INTLE,	BINOP},
 	{"-lt",	INTLT,	BINOP},
-	{"-nt",	FILNTMM,	BINOP},
-	{"-ntaa",	FILNTAA,	BINOP},
-	{"-ntab",	FILNTAB,	BINOP},
-	{"-ntac",	FILNTAC,	BINOP},
-	{"-ntam",	FILNTAM,	BINOP},
-	{"-ntba",	FILNTBA,	BINOP},
-	{"-ntbb",	FILNTBB,	BINOP},
-	{"-ntbc",	FILNTBC,	BINOP},
-	{"-ntbm",	FILNTBM,	BINOP},
-	{"-ntca",	FILNTCA,	BINOP},
-	{"-ntcb",	FILNTCB,	BINOP},
-	{"-ntcc",	FILNTCC,	BINOP},
-	{"-ntcm",	FILNTCM,	BINOP},
-	{"-ntma",	FILNTMA,	BINOP},
-	{"-ntmb",	FILNTMB,	BINOP},
-	{"-ntmc",	FILNTMC,	BINOP},
-	{"-ntmm",	FILNTMM,	BINOP},
-	{"-ot",	FILOTMM,	BINOP},
-	{"-otaa",	FILOTAA,	BINOP},
-	{"-otab",	FILOTBB,	BINOP},
-	{"-otac",	FILOTAC,	BINOP},
-	{"-otam",	FILOTAM,	BINOP},
-	{"-otba",	FILOTBA,	BINOP},
-	{"-otbb",	FILOTBB,	BINOP},
-	{"-otbc",	FILOTBC,	BINOP},
-	{"-otbm",	FILOTBM,	BINOP},
-	{"-otca",	FILOTCA,	BINOP},
-	{"-otcb",	FILOTCB,	BINOP},
-	{"-otcc",	FILOTCC,	BINOP},
-	{"-otcm",	FILOTCM,	BINOP},
-	{"-otma",	FILOTMA,	BINOP},
-	{"-otmb",	FILOTMB,	BINOP},
-	{"-otmc",	FILOTMC,	BINOP},
-	{"-otmm",	FILOTMM,	BINOP},
+	{"-nt",	FILNT,	BINOP},
+	{"-ot",	FILOT,	BINOP},
 	{"-ef",	FILEQ,	BINOP},
 	{"!",	UNOT,	BUNOP},
 	{"-a",	BAND,	BBINOP},
@@ -249,10 +180,10 @@ static int	intcmp(const char *, const ch
 static int	isunopoperand(void);
 static int	islparenoperand(void);
 static int	isrparenoperand(void);
-static int	newerf(const char *, const char *, enum time_types,
-		       enum time_types);
+static int	newerf(const char *, const char *);
 static int	nexpr(enum token);
 static int	oexpr(enum token);
+static int	olderf(const char *, const char *);
 static int	primary(enum token);
 static void	syntax(const char *, const char *);
 static enum	token t_lex(char *);
@@ -422,70 +353,10 @@ binop(void)
 		return intcmp(opnd1, opnd2) <= 0;
 	case INTLT:
 		return intcmp(opnd1, opnd2) < 0;
-	case FILNTAA:
-		return newerf(opnd1, opnd2, ATIME, ATIME);
-	case FILNTAB:
-		return newerf(opnd1, opnd2, ATIME, BTIME);
-	case FILNTAC:
-		return newerf(opnd1, opnd2, ATIME, CTIME);
-	case FILNTAM:
-		return newerf(opnd1, opnd2, ATIME, MTIME);
-	case FILNTBA:
-		return newerf(opnd1, opnd2, BTIME, ATIME);
-	case FILNTBB:
-		return newerf(opnd1, opnd2, BTIME, BTIME);
-	case FILNTBC:
-		return newerf(opnd1, opnd2, BTIME, CTIME);
-	case FILNTBM:
-		return newerf(opnd1, opnd2, BTIME, MTIME);
-	case FILNTCA:
-		return newerf(opnd1, opnd2, CTIME, ATIME);
-	case FILNTCB:
-		return newerf(opnd1, opnd2, CTIME, BTIME);
-	case FILNTCC:
-		return newerf(opnd1, opnd2, CTIME, CTIME);
-	case FILNTCM:
-		return newerf(opnd1, opnd2, CTIME, MTIME);
-	case FILNTMA:
-		return newerf(opnd1, opnd2, MTIME, ATIME);
-	case FILNTMB:
-		return newerf(opnd1, opnd2, MTIME, BTIME);
-	case FILNTMC:
-		return newerf(opnd1, opnd2, MTIME, CTIME);
-	case FILNTMM:
-		return newerf(opnd1, opnd2, MTIME, MTIME);
-	case FILOTAA:
-		return newerf(opnd2, opnd1, ATIME, ATIME);
-	case FILOTAB:
-		return newerf(opnd2, opnd1, BTIME, ATIME);
-	case FILOTAC:
-		return newerf(opnd2, opnd1, CTIME, ATIME);
-	case FILOTAM:
-		return newerf(opnd2, opnd1, MTIME, ATIME);
-	case FILOTBA:
-		return newerf(opnd2, opnd1, ATIME, BTIME);
-	case FILOTBB:
-		return newerf(opnd2, opnd1, BTIME, BTIME);
-	case FILOTBC:
-		return newerf(opnd2, opnd1, CTIME, BTIME);
-	case FILOTBM:
-		return newerf(opnd2, opnd1, MTIME, BTIME);
-	case FILOTCA:
-		return newerf(opnd2, opnd1, ATIME, CTIME);
-	case FILOTCB:
-		return newerf(opnd2, opnd1, BTIME, CTIME);
-	case FILOTCC:
-		return newerf(opnd2, opnd1, CTIME, CTIME);
-	case FILOTCM:
-		return newerf(opnd2, opnd1, MTIME, CTIME);
-	case FILOTMA:
-		return newerf(opnd2, opnd1, ATIME, MTIME);
-	case FILOTMB:
-		return newerf(opnd2, opnd1, BTIME, MTIME);
-	case FILOTMC:
-		return newerf(opnd2, opnd1, CTIME, MTIME);
-	case FILOTMM:
-		return newerf(opnd2, opnd1, MTIME, MTIME);
+	case FILNT:
+		return newerf (opnd1, opnd2);
+	case FILOT:
+		return olderf (opnd1, opnd2);
 	case FILEQ:
 		return equalf (opnd1, opnd2);
 	default:
@@ -699,34 +570,25 @@ intcmp (const char *s1, const char *s2)
 }
 
 static int
-newerf (const char *f1, const char *f2, enum time_types t1, enum time_types t2)
+newerf (const char *f1, const char *f2)
 {
 	struct stat b1, b2;
-	struct timespec *ts1, *ts2;
 
 	if (stat(f1, &b1) != 0 || stat(f2, &b2) != 0)
 		return 0;
 
-	switch (t1) {
-	case ATIME:	ts1 = &b1.st_atim;	break;
-	case BTIME:	ts1 = &b1.st_birthtim;	break;
-	case CTIME:	ts1 = &b1.st_ctim;	break;
-	default:	ts1 = &b1.st_mtim;	break;
-	}
-
-	switch (t2) {
-	case ATIME:	ts2 = &b2.st_atim;	break;
-	case BTIME:	ts2 = &b2.st_birthtim;	break;
-	case CTIME:	ts2 = &b2.st_ctim;	break;
-	default:	ts2 = &b2.st_mtim;	break;
-	}
-
-	if (ts1->tv_sec > ts2->tv_sec)
+	if (b1.st_mtim.tv_sec > b2.st_mtim.tv_sec)
 		return 1;
-	if (ts1->tv_sec < ts2->tv_sec)
+	if (b1.st_mtim.tv_sec < b2.st_mtim.tv_sec)
 		return 0;
 
-       return (ts1->tv_nsec > ts2->tv_nsec);
+       return (b1.st_mtim.tv_nsec > b2.st_mtim.tv_nsec);
+}
+
+static int
+olderf (const char *f1, const char *f2)
+{
+	return (newerf(f2, f1));
 }
 
 static int

Modified: head/tools/regression/bin/test/regress.sh
==============================================================================
--- head/tools/regression/bin/test/regress.sh	Fri May 31 22:53:44 2013	(r251207)
+++ head/tools/regression/bin/test/regress.sh	Fri May 31 22:54:20 2013	(r251208)
@@ -52,7 +52,7 @@ t ()
 }
 
 count=0
-echo "1..266"
+echo "1..130"
 
 t 0 'b = b' 
 t 0 'b == b' 
@@ -194,66 +194,3 @@ t 1 '\( ! -a \)'
 t 0 '\( -n -o \)'
 t 1 '\( -z -o \)'
 t 1 '\( ! -o \)'
-
-# Test all file timestamp comparison operators
-s() {
-	t ${1}  "${35} -nt ${36}"
-	t ${2}  "${35} -ntaa ${36}"
-	t ${3}  "${35} -ntab ${36}"
-	t ${4}  "${35} -ntac ${36}"
-	t ${5}  "${35} -ntam ${36}"
-	t ${6}  "${35} -ntba ${36}"
-	t ${7}  "${35} -ntbb ${36}"
-	t ${8}  "${35} -ntbc ${36}"
-	t ${9}  "${35} -ntbm ${36}"
-	t ${10} "${35} -ntca ${36}"
-	t ${11} "${35} -ntcb ${36}"
-	t ${12} "${35} -ntcc ${36}"
-	t ${13} "${35} -ntcm ${36}"
-	t ${14} "${35} -ntma ${36}"
-	t ${15} "${35} -ntmb ${36}"
-	t ${16} "${35} -ntmc ${36}"
-	t ${17} "${35} -ntmm ${36}"
-	t ${18} "${35} -ot ${36}"
-	t ${19} "${35} -otaa ${36}"
-	t ${20} "${35} -otab ${36}"
-	t ${21} "${35} -otac ${36}"
-	t ${22} "${35} -otam ${36}"
-	t ${23} "${35} -otba ${36}"
-	t ${24} "${35} -otbb ${36}"
-	t ${25} "${35} -otbc ${36}"
-	t ${26} "${35} -otbm ${36}"
-	t ${27} "${35} -otca ${36}"
-	t ${28} "${35} -otcb ${36}"
-	t ${29} "${35} -otcc ${36}"
-	t ${30} "${35} -otcm ${36}"
-	t ${31} "${35} -otma ${36}"
-	t ${32} "${35} -otmb ${36}"
-	t ${33} "${35} -otmc ${36}"
-	t ${34} "${35} -otmm ${36}"
-}
-
-a=/tmp/test$$.1
-b=/tmp/test$$.2
-trap "rm -f $a $b" EXIT
-
-# Tests 131-164
-s 1 1 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1 $a $b
-
-touch $a
-# Tests 165-198
-s 1 1 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1 $a $b
-
-sleep 2    # Ensure $b is newer than $a
-touch $b
-# Tests 199-232
-s 1 1 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1  0 0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 $a $b
-
-sleep 2
-echo >$b   # Updates mtime & ctime
-sleep 2
-touch -A 01 -a $b
-
-# $b now has ctime > mtime > atime > btime
-# Tests 233-266
-s 1 1 0 1 1 1 1 1 1  0 0 1 0 0 0 1 1  1 1 1 0 0 0 1 0 0 1 1 1 1 1 1 0 1 $b $b


More information about the svn-src-all mailing list