Added -noall/-all switches to sortm(1).
authorDavid Levine <levinedl@acm.org>
Fri, 12 Oct 2012 02:48:42 +0000 (21:48 -0500)
committerDavid Levine <levinedl@acm.org>
Fri, 12 Oct 2012 02:48:42 +0000 (21:48 -0500)
docs/pending-release-notes
man/sortm.man
test/folder/test-sortm
uip/sortm.c

index 9550117..fcc99a7 100644 (file)
@@ -24,6 +24,9 @@ NEW FEATURES
   (pseudo)random bytes and uses microsecond-resolution time.
 - Added -clobber switch to mhstore(1) to control overwriting of
   existing files.
+- Added -noall/-all switches to sortm(1).  sortm -noall requires
+  a messages argument.
+
 
 ----------------------------
 OBSOLETE/DEPRECATED FEATURES
index 47dcee3..dd24014 100644 (file)
@@ -10,6 +10,7 @@ sortm \- sort messages
 .B sortm
 .RI [ +folder ]
 .RI [ msgs ]
+.RB [ \-all | \-noall ]
 .RB [ \-datefield
 .IR field ]
 .RB [ \-textfield
@@ -27,6 +28,21 @@ sortm \- sort messages
 sorts the specified messages in the named folder according
 to the chronological order of the \*(lqDate:\*(rq field of each message.
 .PP
+If no messages are specified, the default is all messages in the folder.
+However, if no messages are specified and the
+.B \-noall
+switch is enabled, then
+.B sortm
+reports that as an error and exits with non-zero status.
+.B \-noall
+is most useful in the user's profile, to avoid inadvertant sorting of
+an entire folder.  The
+.B \-all
+switch can then be used on the command line to disable it.  Of course,
+a message specification of
+.I all
+can be used in any case.
+.PP
 The
 .B \-verbose
 switch directs
@@ -104,7 +120,8 @@ folder(1)
 .SH DEFAULTS
 .nf
 .RB ` +folder "' defaults to the current folder"
-.RB ` msgs"' defaults to all"
+.RB ` msgs"' defaults to all without -noall, no default with -noall"
+.RB ` \-all '
 .RB ` \-datefield "' defaults to date"
 .RB ` \-notextfield '
 .RB ` \-noverbose '
index daee94b..0e33154 100755 (executable)
@@ -22,7 +22,7 @@ actual=$MH_TEST_DIR/$$.actual
 cd $MH_TEST_DIR
 
 # check -help
-cat >$expected <<EOF
+cat >"$expected" <<EOF
 Usage: sortm [+folder] [msgs] [switches]
   switches are:
   -datefield field
@@ -31,12 +31,13 @@ Usage: sortm [+folder] [msgs] [switches]
   -limit days
   -nolimit
   -[no]verbose
+  -[no]all
   -version
   -help
 EOF
 
-sortm -help >$actual 2>&1
-check $expected $actual
+sortm -help >"$actual" 2>&1
+check "$expected" "$actual"
 
 # check -version
 case `sortm -version` in
@@ -45,7 +46,7 @@ case `sortm -version` in
             failed=`expr ${failed:-0} + 1`;;
 esac
 
-cat > $MH_TEST_DIR/Mail/inbox/11 <<EOF || exit 1
+cat >$MH_TEST_DIR/Mail/inbox/11 <<EOF || exit 1
 From: Test11 <test11@example.com>
 To: Some User <user@example.com>
 Date: Fri, 29 Sep 2006 00:00:01
@@ -55,7 +56,7 @@ Subject: Re: common subject
 This is message number 11
 EOF
 
-cat > $MH_TEST_DIR/Mail/inbox/12 <<EOF || exit 1
+cat >$MH_TEST_DIR/Mail/inbox/12 <<EOF || exit 1
 From: Test12 <test12@example.com>
 To: Some User <user@example.com>
 Date: Thu, 28 Sep 2006 23:59:59
@@ -66,7 +67,7 @@ This is message number 12
 EOF
 
 # check with no options
-cat >$expected <<EOF
+cat >"$expected" <<EOF
    1  09/28 Test12             common subject<<This is message number 12 >>
    2  09/29 Test1              Testing message 1<<This is message number 1 >>
    3  09/29 Test2              Testing message 2<<This is message number 2 >>
@@ -82,11 +83,11 @@ cat >$expected <<EOF
 EOF
 
 sortm
-scan > $actual
-check $expected $actual
+scan >"$actual"
+check "$expected" "$actual"
 
 # check +folder
-cat >$expected <<EOF
+cat >"$expected" <<EOF
    1  09/28 Test12             common subject<<This is message number 12 >>
    2+ 09/29 Test1              Testing message 1<<This is message number 1 >>
    3  09/29 Test2              Testing message 2<<This is message number 2 >>
@@ -101,14 +102,13 @@ cat >$expected <<EOF
   12  09/29 Test11             Re: common subject<<This is message number 11 >>
 EOF
 
-refile first +inbox
-folder -pack > /dev/null
+refile first +inbox; folder -pack >/dev/null
 sortm +inbox
-scan > $actual
-check $expected $actual
+scan >"$actual"
+check "$expected" "$actual"
 
 # check -verbose
-cat >$expected <<EOF
+cat >"$expected" <<EOF
 sorting by datefield date
 renaming message chain from 12 to 1
 message 11 becomes message 12
@@ -136,14 +136,13 @@ message 1 becomes message 2
   12  09/29 Test11             Re: common subject<<This is message number 11 >>
 EOF
 
-refile first +inbox
-folder -pack > /dev/null
-sortm -verbose >$actual
-scan >> $actual
-check $expected $actual
+refile first +inbox; folder -pack >/dev/null
+sortm -verbose >"$actual"
+scan >>"$actual"
+check "$expected" "$actual"
 
 # check -noverbose
-cat >$expected <<EOF
+cat >"$expected" <<EOF
    1  09/28 Test12             common subject<<This is message number 12 >>
    2+ 09/29 Test1              Testing message 1<<This is message number 1 >>
    3  09/29 Test2              Testing message 2<<This is message number 2 >>
@@ -158,14 +157,13 @@ cat >$expected <<EOF
   12  09/29 Test11             Re: common subject<<This is message number 11 >>
 EOF
 
-refile first +inbox
-folder -pack > /dev/null
-sortm -verbose -noverbose >$actual
-scan >> $actual
-check $expected $actual
+refile first +inbox; folder -pack >/dev/null
+sortm -verbose -noverbose >"$actual"
+scan >>"$actual"
+check "$expected" "$actual"
 
 # check msgs
-cat >$expected <<EOF
+cat >"$expected" <<EOF
    1  09/28 Test12             common subject<<This is message number 12 >>
    2  09/29 Test2              Testing message 2<<This is message number 2 >>
    3  09/29 Test3              Testing message 3<<This is message number 3 >>
@@ -180,14 +178,13 @@ cat >$expected <<EOF
   12+ 09/29 Test1              Testing message 1<<This is message number 1 >>
 EOF
 
-refile first +inbox
-folder -pack > /dev/null
+refile first +inbox; folder -pack >/dev/null
 sortm first last
-scan > $actual
-check $expected $actual
+scan >"$actual"
+check "$expected" "$actual"
 
 # check -datefield
-cat >$expected <<EOF
+cat >"$expected" <<EOF
    1  09/29 Test11             Re: common subject<<This is message number 11 >>
    2  09/29 Test2              Testing message 2<<This is message number 2 >>
    3  09/29 Test3              Testing message 3<<This is message number 3 >>
@@ -203,11 +200,11 @@ cat >$expected <<EOF
 EOF
 
 sortm -datefield Alt-Date 1 11
-scan > $actual
-check $expected $actual
+scan >"$actual"
+check "$expected" "$actual"
 
 # check -textfield subject (datefield major, subjects grouped)
-cat >$expected <<EOF
+cat >"$expected" <<EOF
    1  09/28 Test12             common subject<<This is message number 12 >>
    2  09/29 Test11             Re: common subject<<This is message number 11 >>
    3  09/29 Test2              Testing message 2<<This is message number 2 >>
@@ -223,11 +220,11 @@ cat >$expected <<EOF
 EOF
 
 sortm -textfield subject
-scan > $actual
-check $expected $actual
+scan >"$actual"
+check "$expected" "$actual"
 
 # check -nolimit
-cat >$expected <<EOF
+cat >"$expected" <<EOF
    1  09/28 Test12             common subject<<This is message number 12 >>
    2  09/29 Test11             Re: common subject<<This is message number 11 >>
    3  09/29 Test2              Testing message 2<<This is message number 2 >>
@@ -243,11 +240,11 @@ cat >$expected <<EOF
 EOF
 
 sortm -textfield subject -limit 0 -nolimit
-scan > $actual
-check $expected $actual
+scan >"$actual"
+check "$expected" "$actual"
 
 # check -textfield subject -limit 0 (subject sort)
-cat >$expected <<EOF
+cat >"$expected" <<EOF
    1  09/29 Test11             Re: common subject<<This is message number 11 >>
    2  09/28 Test12             common subject<<This is message number 12 >>
    3  09/29 Test1              Testing message 1<<This is message number 1 >>
@@ -262,13 +259,13 @@ cat >$expected <<EOF
   12+ 09/29 Test9              Testing message 9<<This is message number 9 >>
 EOF
 
-refile 2-7 +inbox; refile 1 +inbox; folder -pa last >/dev/null
+refile 2-7 +inbox; refile 1 +inbox; folder -pack last >/dev/null
 sortm -textfield subject -limit 0
-scan > $actual
-check $expected $actual
+scan >"$actual"
+check "$expected" "$actual"
 
 # check -textfield -limit 0 (text sort)
-cat >$expected <<EOF
+cat >"$expected" <<EOF
    1  09/29 Test10             Testing message 10<<This is message number 10 >>
    2  09/29 Test11             Re: common subject<<This is message number 11 >>
    3  09/28 Test12             common subject<<This is message number 12 >>
@@ -283,13 +280,13 @@ cat >$expected <<EOF
   12+ 09/29 Test9              Testing message 9<<This is message number 9 >>
 EOF
 
-refile 2-7 +inbox; refile 1 +inbox; folder -pa last >/dev/null
+refile 2-7 +inbox; refile 1 +inbox; folder -pack last >/dev/null
 sortm -textfield from -limit 0
-scan > $actual
-check $expected $actual
+scan >"$actual"
+check "$expected" "$actual"
 
 # check -textfield with finite -limit that doesn't cover message 13
-cat > $MH_TEST_DIR/Mail/inbox/13 <<EOF || exit 1
+cat >$MH_TEST_DIR/Mail/inbox/13 <<EOF || exit 1
 From: Test13 <test13@example.com>
 To: Some User <user@example.com>
 Date: Tue, 31 Oct 2006 23:59:59
@@ -298,7 +295,7 @@ Subject: Re: common subject
 This is message number 13
 EOF
 
-cat >$expected <<EOF
+cat >"$expected" <<EOF
    1  09/28 Test12             common subject<<This is message number 12 >>
    2  09/29 Test11             Re: common subject<<This is message number 11 >>
    3  09/29 Test5              Testing message 5<<This is message number 5 >>
@@ -314,13 +311,13 @@ cat >$expected <<EOF
   13  10/31 Test13             Re: common subject<<This is message number 13 >>
 EOF
 
-refile 2-7 +inbox; refile 1 +inbox; folder -pa last >/dev/null
+refile 2-7 +inbox; refile 1 +inbox; folder -pack last >/dev/null
 sortm -textfield subject -limit 10
-scan > $actual
-check $expected $actual
+scan >"$actual"
+check "$expected" "$actual"
 
 # check -textfield with finite -limit that does cover message 13
-cat >$expected <<EOF
+cat >"$expected" <<EOF
    1  09/28 Test12             common subject<<This is message number 12 >>
    2  09/29 Test11             Re: common subject<<This is message number 11 >>
    3  10/31 Test13             Re: common subject<<This is message number 13 >>
@@ -336,13 +333,13 @@ cat >$expected <<EOF
   13+ 09/29 Test9              Testing message 9<<This is message number 9 >>
 EOF
 
-refile 2-7 +inbox; refile 1 +inbox; folder -pa last >/dev/null
+refile 2-7 +inbox; refile 1 +inbox; folder -pack last >/dev/null
 sortm -textfield subject -limit 60
-scan > $actual
-check $expected $actual
+scan >"$actual"
+check "$expected" "$actual"
 
 # check -notextfield
-cat >$expected <<EOF
+cat >"$expected" <<EOF
    1  09/28 Test12             common subject<<This is message number 12 >>
    2  09/29 Test10             Testing message 10<<This is message number 10 >>
    3  09/29 Test5              Testing message 5<<This is message number 5 >>
@@ -358,9 +355,35 @@ cat >$expected <<EOF
   13+ 10/31 Test13             Re: common subject<<This is message number 13 >>
 EOF
 
-refile 2-7 +inbox; refile 1 +inbox; folder -pa last >/dev/null
+refile 2-7 +inbox; refile 1 +inbox; folder -pack last >/dev/null
 sortm -textfield subject -limit 60 -notextfield
-scan > $actual
-check $expected $actual
+scan >"$actual"
+check "$expected" "$actual"
 
-exit $failed
+# check -noall
+run_test 'sortm -noall' 'sortm: must specify messages to sort with -noall'
+
+# check -all
+cat >"$expected" <<EOF
+   1  09/28 Test12             common subject<<This is message number 12 >>
+   2+ 09/29 Test10             Testing message 10<<This is message number 10 >>
+   3  09/29 Test5              Testing message 5<<This is message number 5 >>
+   4  09/29 Test6              Testing message 6<<This is message number 6 >>
+   5  09/29 Test7              Testing message 7<<This is message number 7 >>
+   6  09/29 Test8              Testing message 8<<This is message number 8 >>
+   7  09/29 Test9              Testing message 9<<This is message number 9 >>
+   8  09/29 Test1              Testing message 1<<This is message number 1 >>
+   9  09/29 Test2              Testing message 2<<This is message number 2 >>
+  10  09/29 Test3              Testing message 3<<This is message number 3 >>
+  11  09/29 Test4              Testing message 4<<This is message number 4 >>
+  12  09/29 Test11             Re: common subject<<This is message number 11 >>
+  13  10/31 Test13             Re: common subject<<This is message number 13 >>
+EOF
+
+refile first +inbox; folder -pack >/dev/null
+sortm -noall -all
+scan >"$actual"
+check "$expected" "$actual"
+
+
+exit ${failed:-0}
index a1fcf5d..d2486ee 100644 (file)
@@ -28,9 +28,13 @@ static struct swit switches[] = {
      { "verbose", 0 },
 #define NVERBSW                7
      { "noverbose", 0 },
-#define VERSIONSW              8
+#define ALLMSGS                8
+     { "all", 0 },
+#define NALLMSGS               9
+     { "noall", 0 },
+#define VERSIONSW             10
      { "version", 0 },
-#define HELPSW                 9
+#define HELPSW                11
      { "help", 0 },
      { NULL, 0 }
 };
@@ -48,6 +52,7 @@ char *subjsort = (char *) 0;    /* sort on subject if != 0 */
 time_t datelimit = 0;
 int submajor = 0;              /* if true, sort on subject-major */
 int verbose;
+int allmsgs = 1;
 
 /* This keeps compiler happy on calls to qsort */
 typedef int (*qsort_comp) (const void *, const void *);
@@ -153,6 +158,13 @@ main (int argc, char **argv)
            case NVERBSW:
                verbose = 0;
                continue;
+
+           case ALLMSGS:
+               allmsgs = 1;
+               continue;
+           case NALLMSGS:
+               allmsgs = 0;
+               continue;
            }
        }
        if (*cp == '+' || *cp == '@') {
@@ -166,8 +178,13 @@ main (int argc, char **argv)
 
     if (!context_find ("path"))
        free (path ("./", TFOLDER));
-    if (!msgs.size)
-       app_msgarg(&msgs, "all");
+    if (!msgs.size) {
+       if (allmsgs) {
+           app_msgarg(&msgs, "all");
+        } else {
+           adios (NULL, "must specify messages to sort with -noall");
+        }
+    }
     if (!datesw)
        datesw = "date";
     if (!folder)