Added test-sortm. Also clarified some details in the sortm man page.
authorDavid Levine <levinedl@acm.org>
Mon, 25 Jun 2012 03:26:27 +0000 (22:26 -0500)
committerDavid Levine <levinedl@acm.org>
Mon, 25 Jun 2012 03:26:27 +0000 (22:26 -0500)
Makefile.am
man/sortm.man
test/folder/test-sortm [new file with mode: 0755]

index 3f34108..b49fc53 100644 (file)
@@ -46,7 +46,7 @@ TESTS = test/ali/test-ali \
        test/bad-input/test-header \
        test/burst/test-burst \
        test/comp/test-comp-format \
        test/bad-input/test-header \
        test/burst/test-burst \
        test/comp/test-comp-format \
-       test/folder/test-create \
+       test/folder/test-create test/folder/test-sortm \
        test/folder/test-total test/format/test-localmbox \
        test/format/test-myname test/format/test-myhost \
        test/format/test-mymbox \
        test/folder/test-total test/format/test-localmbox \
        test/format/test-myname test/format/test-myhost \
        test/format/test-mymbox \
index 283cf12..47dcee3 100644 (file)
@@ -53,11 +53,11 @@ The
 .I field
 switch causes
 .B sortm
 .I field
 switch causes
 .B sortm
-to sort messages
-by the specified text field.  If this field is \*(lqsubject\*(rq, any
-leading "re:" is stripped off.  In any case, all characters except
+to sort messages by the specified text field.  All characters except
 letters and numbers are stripped and the resulting strings are sorted
 letters and numbers are stripped and the resulting strings are sorted
-datefield\-major, textfield\-minor, using a case insensitive comparison.
+datefield\-major, textfield\-minor, using a case insensitive
+comparison.  If this field is \*(lqsubject\*(rq, any leading "re:" is
+stripped off.
 .PP
 With
 .B \-textfield
 .PP
 With
 .B \-textfield
@@ -66,7 +66,7 @@ if
 .B \-limit
 .I days
 is specified, messages
 .B \-limit
 .I days
 is specified, messages
-with similar textfields that are dated within `days' of each other
+with the same textfields that are dated within `days' of each other
 appear together.  Specifying
 .B \-nolimit
 makes the limit infinity.
 appear together.  Specifying
 .B \-nolimit
 makes the limit infinity.
@@ -75,7 +75,8 @@ With
 .IR 0 ,
 the sort is instead made textfield\-major, date\-minor.
 .PP
 .IR 0 ,
 the sort is instead made textfield\-major, date\-minor.
 .PP
-For example, to order a folder by date-major, subject-minor, use:
+For example, to order a folder by date-major, grouping messages with
+the same subject on the same date together, use:
 .PP
 .RS 5
 sortm -textfield subject +folder
 .PP
 .RS 5
 sortm -textfield subject +folder
@@ -114,7 +115,7 @@ folder(1)
 If a folder is given, it will become the current folder.  If the current
 message is moved,
 .B sortm
 If a folder is given, it will become the current folder.  If the current
 message is moved,
 .B sortm
- will preserve its status as current.
+will preserve its status as current.
 
 .SH HISTORY
 Timezones used to be ignored when comparing dates: they aren't any more.
 
 .SH HISTORY
 Timezones used to be ignored when comparing dates: they aren't any more.
diff --git a/test/folder/test-sortm b/test/folder/test-sortm
new file mode 100755 (executable)
index 0000000..daee94b
--- /dev/null
@@ -0,0 +1,366 @@
+#!/bin/sh
+######################################################
+#
+# Test sortm
+#
+######################################################
+
+set -e
+
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname $0`/../..
+    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
+fi
+
+. "$MH_OBJ_DIR/test/common.sh"
+
+setup_test
+
+expected=$MH_TEST_DIR/$$.expected
+actual=$MH_TEST_DIR/$$.actual
+
+cd $MH_TEST_DIR
+
+# check -help
+cat >$expected <<EOF
+Usage: sortm [+folder] [msgs] [switches]
+  switches are:
+  -datefield field
+  -textfield field
+  -notextfield
+  -limit days
+  -nolimit
+  -[no]verbose
+  -version
+  -help
+EOF
+
+sortm -help >$actual 2>&1
+check $expected $actual
+
+# check -version
+case `sortm -version` in
+  sortm\ --*) ;;
+  *       ) echo "$0: sortm -v generated unexpected output" 1>&2
+            failed=`expr ${failed:-0} + 1`;;
+esac
+
+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
+Alt-Date: Thu,  1 Sep 2005 00:00:00
+Subject: Re: common subject
+
+This is message number 11
+EOF
+
+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
+Alt-Date: Sat, 30 Sep 2006 00:00:00
+Subject: common subject
+
+This is message number 12
+EOF
+
+# check with no options
+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 >>
+   4  09/29 Test3              Testing message 3<<This is message number 3 >>
+   5  09/29 Test4              Testing message 4<<This is message number 4 >>
+   6  09/29 Test5              Testing message 5<<This is message number 5 >>
+   7  09/29 Test6              Testing message 6<<This is message number 6 >>
+   8  09/29 Test7              Testing message 7<<This is message number 7 >>
+   9  09/29 Test8              Testing message 8<<This is message number 8 >>
+  10  09/29 Test9              Testing message 9<<This is message number 9 >>
+  11  09/29 Test10             Testing message 10<<This is message number 10 >>
+  12  09/29 Test11             Re: common subject<<This is message number 11 >>
+EOF
+
+sortm
+scan > $actual
+check $expected $actual
+
+# check +folder
+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 >>
+   4  09/29 Test3              Testing message 3<<This is message number 3 >>
+   5  09/29 Test4              Testing message 4<<This is message number 4 >>
+   6  09/29 Test5              Testing message 5<<This is message number 5 >>
+   7  09/29 Test6              Testing message 6<<This is message number 6 >>
+   8  09/29 Test7              Testing message 7<<This is message number 7 >>
+   9  09/29 Test8              Testing message 8<<This is message number 8 >>
+  10  09/29 Test9              Testing message 9<<This is message number 9 >>
+  11  09/29 Test10             Testing message 10<<This is message number 10 >>
+  12  09/29 Test11             Re: common subject<<This is message number 11 >>
+EOF
+
+refile first +inbox
+folder -pack > /dev/null
+sortm +inbox
+scan > $actual
+check $expected $actual
+
+# check -verbose
+cat >$expected <<EOF
+sorting by datefield date
+renaming message chain from 12 to 1
+message 11 becomes message 12
+message 10 becomes message 11
+message 9 becomes message 10
+message 8 becomes message 9
+message 7 becomes message 8
+message 6 becomes message 7
+message 5 becomes message 6
+message 4 becomes message 5
+message 3 becomes message 4
+message 2 becomes message 3
+message 1 becomes message 2
+   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 >>
+   4  09/29 Test3              Testing message 3<<This is message number 3 >>
+   5  09/29 Test4              Testing message 4<<This is message number 4 >>
+   6  09/29 Test5              Testing message 5<<This is message number 5 >>
+   7  09/29 Test6              Testing message 6<<This is message number 6 >>
+   8  09/29 Test7              Testing message 7<<This is message number 7 >>
+   9  09/29 Test8              Testing message 8<<This is message number 8 >>
+  10  09/29 Test9              Testing message 9<<This is message number 9 >>
+  11  09/29 Test10             Testing message 10<<This is message number 10 >>
+  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
+
+# check -noverbose
+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 >>
+   4  09/29 Test3              Testing message 3<<This is message number 3 >>
+   5  09/29 Test4              Testing message 4<<This is message number 4 >>
+   6  09/29 Test5              Testing message 5<<This is message number 5 >>
+   7  09/29 Test6              Testing message 6<<This is message number 6 >>
+   8  09/29 Test7              Testing message 7<<This is message number 7 >>
+   9  09/29 Test8              Testing message 8<<This is message number 8 >>
+  10  09/29 Test9              Testing message 9<<This is message number 9 >>
+  11  09/29 Test10             Testing message 10<<This is message number 10 >>
+  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
+
+# check msgs
+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 >>
+   4  09/29 Test4              Testing message 4<<This is message number 4 >>
+   5  09/29 Test5              Testing message 5<<This is message number 5 >>
+   6  09/29 Test6              Testing message 6<<This is message number 6 >>
+   7  09/29 Test7              Testing message 7<<This is message number 7 >>
+   8  09/29 Test8              Testing message 8<<This is message number 8 >>
+   9  09/29 Test9              Testing message 9<<This is message number 9 >>
+  10  09/29 Test10             Testing message 10<<This is message number 10 >>
+  11  09/29 Test11             Re: common subject<<This is message number 11 >>
+  12+ 09/29 Test1              Testing message 1<<This is message number 1 >>
+EOF
+
+refile first +inbox
+folder -pack > /dev/null
+sortm first last
+scan > $actual
+check $expected $actual
+
+# check -datefield
+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 >>
+   4  09/29 Test4              Testing message 4<<This is message number 4 >>
+   5  09/29 Test5              Testing message 5<<This is message number 5 >>
+   6  09/29 Test6              Testing message 6<<This is message number 6 >>
+   7  09/29 Test7              Testing message 7<<This is message number 7 >>
+   8  09/29 Test8              Testing message 8<<This is message number 8 >>
+   9  09/29 Test9              Testing message 9<<This is message number 9 >>
+  10  09/29 Test10             Testing message 10<<This is message number 10 >>
+  11  09/28 Test12             common subject<<This is message number 12 >>
+  12+ 09/29 Test1              Testing message 1<<This is message number 1 >>
+EOF
+
+sortm -datefield Alt-Date 1 11
+scan > $actual
+check $expected $actual
+
+# check -textfield subject (datefield major, subjects grouped)
+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 >>
+   4  09/29 Test3              Testing message 3<<This is message number 3 >>
+   5  09/29 Test4              Testing message 4<<This is message number 4 >>
+   6  09/29 Test5              Testing message 5<<This is message number 5 >>
+   7  09/29 Test6              Testing message 6<<This is message number 6 >>
+   8  09/29 Test7              Testing message 7<<This is message number 7 >>
+   9  09/29 Test8              Testing message 8<<This is message number 8 >>
+  10  09/29 Test9              Testing message 9<<This is message number 9 >>
+  11  09/29 Test10             Testing message 10<<This is message number 10 >>
+  12+ 09/29 Test1              Testing message 1<<This is message number 1 >>
+EOF
+
+sortm -textfield subject
+scan > $actual
+check $expected $actual
+
+# check -nolimit
+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 >>
+   4  09/29 Test3              Testing message 3<<This is message number 3 >>
+   5  09/29 Test4              Testing message 4<<This is message number 4 >>
+   6  09/29 Test5              Testing message 5<<This is message number 5 >>
+   7  09/29 Test6              Testing message 6<<This is message number 6 >>
+   8  09/29 Test7              Testing message 7<<This is message number 7 >>
+   9  09/29 Test8              Testing message 8<<This is message number 8 >>
+  10  09/29 Test9              Testing message 9<<This is message number 9 >>
+  11  09/29 Test10             Testing message 10<<This is message number 10 >>
+  12+ 09/29 Test1              Testing message 1<<This is message number 1 >>
+EOF
+
+sortm -textfield subject -limit 0 -nolimit
+scan > $actual
+check $expected $actual
+
+# check -textfield subject -limit 0 (subject sort)
+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 >>
+   4  09/29 Test10             Testing message 10<<This is message number 10 >>
+   5  09/29 Test2              Testing message 2<<This is message number 2 >>
+   6  09/29 Test3              Testing message 3<<This is message number 3 >>
+   7  09/29 Test4              Testing message 4<<This is message number 4 >>
+   8  09/29 Test5              Testing message 5<<This is message number 5 >>
+   9  09/29 Test6              Testing message 6<<This is message number 6 >>
+  10  09/29 Test7              Testing message 7<<This is message number 7 >>
+  11  09/29 Test8              Testing message 8<<This is message number 8 >>
+  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
+sortm -textfield subject -limit 0
+scan > $actual
+check $expected $actual
+
+# check -textfield -limit 0 (text sort)
+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 >>
+   4  09/29 Test1              Testing message 1<<This is message number 1 >>
+   5  09/29 Test2              Testing message 2<<This is message number 2 >>
+   6  09/29 Test3              Testing message 3<<This is message number 3 >>
+   7  09/29 Test4              Testing message 4<<This is message number 4 >>
+   8  09/29 Test5              Testing message 5<<This is message number 5 >>
+   9  09/29 Test6              Testing message 6<<This is message number 6 >>
+  10  09/29 Test7              Testing message 7<<This is message number 7 >>
+  11  09/29 Test8              Testing message 8<<This is message number 8 >>
+  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
+sortm -textfield from -limit 0
+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
+From: Test13 <test13@example.com>
+To: Some User <user@example.com>
+Date: Tue, 31 Oct 2006 23:59:59
+Subject: Re: common subject
+
+This is message number 13
+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 >>
+   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 Test10             Testing message 10<<This is message number 10 >>
+  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
+sortm -textfield subject -limit 10
+scan > $actual
+check $expected $actual
+
+# check -textfield with finite -limit that does cover message 13
+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 >>
+   4  09/29 Test1              Testing message 1<<This is message number 1 >>
+   5  09/29 Test2              Testing message 2<<This is message number 2 >>
+   6  09/29 Test3              Testing message 3<<This is message number 3 >>
+   7  09/29 Test4              Testing message 4<<This is message number 4 >>
+   8  09/29 Test10             Testing message 10<<This is message number 10 >>
+   9  09/29 Test5              Testing message 5<<This is message number 5 >>
+  10  09/29 Test6              Testing message 6<<This is message number 6 >>
+  11  09/29 Test7              Testing message 7<<This is message number 7 >>
+  12  09/29 Test8              Testing message 8<<This is message number 8 >>
+  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
+sortm -textfield subject -limit 60
+scan > $actual
+check $expected $actual
+
+# check -notextfield
+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 2-7 +inbox; refile 1 +inbox; folder -pa last >/dev/null
+sortm -textfield subject -limit 60 -notextfield
+scan > $actual
+check $expected $actual
+
+exit $failed