blob: f7d00a32de2abc86b7ed4ba18f193493d39dd8ba [file] [log] [blame]
#!/bin/sh -efu
# Copyright 2011-2013 Intel Corporation
# Author: Artem Bityutskiy
# License: GPLv2
srcdir="$(readlink -ev -- ${0%/*}/..)"
PATH="$srcdir/email:$srcdir/helpers/libshell:$PATH"
. shell-error
. aiaiai-email-sh-functions
PROG="${0##*/}"
# Check the subject.
#
# Usage: check_subject <subject> <prj> <m> <n>
# <subject> - the subject line
# <prj> - correct project name
# <m> - patch number
# <n> - count of patches
check_subject()
{
local subj="$1"; shift
local m="$1"; shift
local n="$1"; shift
local m1 n1
subject_check "$subj" ||
{ message "subject_check failed for '$subj'"; }
m1="$(subject_m "$subj")"
[ "$m1" = "$m" ] ||
{ message "subject_m failed for '$subj': '$m1' should be '$m'"; }
n1="$(subject_n "$subj")"
[ "$n1" = "$n" ] ||
{ message "subject_n failed for '$subj': '$n1' should be '$n'"; }
}
bad_subject()
{
local subj="$1"; shift
! subject_check "$subj" ||
{ message "subject_check succeeded for bad subject '$subj'"; }
}
# Basic
check_subject "[PATCH] kuku" "" ""
check_subject "[PATCH so-so] kuku" "" ""
check_subject "[PATCH so-so 1/1] kuku" "1" "1"
check_subject "[*] [PATCH so-so 1/1] kuku" "1" "1"
check_subject "[*] [Prefix PATCH so-so 1/1] kuku" "1" "1"
# Numbers
check_subject "[PATCH 100/1] kuku" "100" "1"
check_subject "[PATCH mfld-666 1/999] kuku" "1" "999"
check_subject "[PATCH 0001/0999] kuku" "1" "999"
check_subject "[XXX PATCH mfld 666 10/00000009] kuku" "10" "9"
check_subject "[PATCH 100/1] kuku" "100" "1"
check_subject "[PATCH 1/999] kuku" "1" "999"
check_subject "[PATCH 0001/0999] kuku" "1" "999"
check_subject "[PATCH 10/00000009] kuku" "10" "9"
# Invalid numbers
check_subject "[PATCH abcd 1/] kuku" "" ""
check_subject "[PATCH 01/] kuku" "" ""
check_subject "[A PATCH 018888888888888888/] kuku" "" ""
check_subject "[PATCH /1] kuku" "" ""
check_subject "[PATCH /1/] kuku" "" ""
check_subject "[PATCH /] kuku" "" ""
check_subject "[PATCH //] kuku" "" ""
check_subject "[PATCH /0000000002] kuku" "" ""
# Prefix/Suffix
check_subject "[PATCH 1 10/010] kuku" "10" "10"
check_subject "[PATCH -_)(*&^ 10/10] kuku" "10" "10"
check_subject "[*&^ PATCH v2] kuku" "" ""
check_subject "[driver] [-_)(*&^ PATCH v2] kuku" "" ""
check_subject "[driver] [ My[[:blank:]] PATCH v2] kuku" "" ""
# Spaces
check_subject "[PATCH x 10/10] kuku" "10" "10" # tabtabxtabtab
check_subject "[PATCH @ 10/10] kuku" "10" "10" # spcspc@spcspc
check_subject "[ PATCH + 10/010 ] kuku" "10" "10" # tabPATCHspcspc+spcspc
check_subject "[ A PATCH 10/010] kuku" "10" "10" # spcAspctabPATCH
# Several prefixes
check_subject "[RFC][PATCH] kuku" "" ""
check_subject "[RFC] [PATCH 2/4] kuku" "2" "4"
check_subject "[RFC] [oh!] [PATCH ^#$] kuku" "" ""
# Comma
check_subject "[RFC][PATCH, ] kuku" "" ""
check_subject "[PATCH , HC-2.6.36] kuku" "" ""
check_subject "[PATCH, 3.0 2/2] kuku" "2" "2"
# Version
check_subject "[driver] [PATCH v2] kuku" "" ""
check_subject "[driver] [PATCH V2 prj] kuku" "" ""
check_subject "[driver] [PATCH v999 1/1] kuku" "1" "1"
check_subject "[driver] [PATCH [ 9/111] kuku" "9" "111"
# Case
check_subject "[Patch 9/111] kuku" "9" "111"
# Bad subjects
bad_subject " [PATCH] kuku"
bad_subject "[driver] kuku"
bad_subject "Re: [driver] [PATCH V2 prj] kuku"
bad_subject "Re: [PATCH 1 10/10] kuku"
bad_subject "[mPATCH 1 10/10] kuku"
bad_subject "[mPATCH] kuku"
bad_subject "[ mPATCH] kuku"
echo "Done" >&2