"Stephen P. Smith" <[email protected]> writes:
> +# Subtract some known constant time and look for expected field format
> +TODAY_REGEX='5 hours ago'
> +THIS_YEAR_REGEX='[A-Z][a-z][a-z] [A-Z][a-z][a-z] [0-9]*
> [012][0-9]:[0-6][0-9]'
> +MORE_THAN_A_YEAR_REGEX='[A-Z][a-z][a-z] [A-Z][a-z][a-z] [0-9]*
> [0-9][0-9][0-9][0-9]'
> +check_human_date "$(($(date +%s)-18000)) +0200" $TODAY_REGEX # 5 hours ago
> +check_human_date "$(($(date +%s)-432000)) +0200" $THIS_YEAR_REGEX # 5 days
> ago
'date +%s' is used everywhere in this patch but has never been used
in our test suite before. It is not portable.
We perhaps can use "test-tool date timestamp", like so
check_human_date $(test-tool date timestamp "18000 seconds ago") ...
or moving the part that munges 18000 into the above form inside
check_human_date helper function, e.g.
check_human_date () {
commit_date=$(test-tool date timestamp "$1 seconds ago")
commit_date="$commit_date +0200"
expect=$2
...
}
which would let us write
check_human_date 432000" $THIS_YEAR_REGEX # 5 days ago
> +check_human_date() {
> + commit_date=$1
> + expect=$2
> + test_expect_success "$commit_date" "
> + echo $expect $commit_date >dates &&
> + git add dates &&
> + git commit -m 'Expect String' --date=\"$commit_date\" dates &&
> + git log -1 --date=human | grep \"^Date:\" >actual &&
> + grep \"$expect\" actual
> +"
As the body of the test_expect_success helper is eval'ed, variables
$commit_date and $expect should be visible to it, without turning
them into values before executing test_expect_success function,
i.e.
test_expect_success "$commit_date" '
echo "$expect $commit_date" >dates &&
...
git commit -m "Expect String" --date="$commit_date" dates &&
git show -s --date=human | grep '^Date:" >actual &&
grep "$expect" actual
'
which would reduce the need for unreadable backslashes.
Instead of duplicating, perhaps move this to a more common place?
Would it make sense to make it "check_date_format ()" helper by
passing another argument to parameterize --date=human part
> +check_human_date() {
> + commit_date=$1
> + expect=$2
> + test_expect_success "$commit_date" "
> + echo $expect $commit_date >dates &&
> + git add dates &&
> + git commit -m 'Expect String' --date=\"$commit_date\" dates &&
> + git show --date=human | grep \"^Date:\" >actual &&
Using "show" here is much better than "log -1" above; using "show
-s" would be even better.
> + grep \"$expect\" actual
> +"
> +}
> +
> +TODAY_REGEX='[A-Z][a-z][a-z] [012][0-9]:[0-6][0-9] .0200'
> +THIS_YEAR_REGEX='[A-Z][a-z][a-z] [A-Z][a-z][a-z] [0-9]*
> [012][0-9]:[0-6][0-9]'
> +MORE_THAN_A_YEAR_REGEX='[A-Z][a-z][a-z] [A-Z][a-z][a-z] [0-9]*
> [0-9][0-9][0-9][0-9]'
> +check_human_date "$(($(date +%s)-18000)) +0200" $TODAY_REGEX # 5 hours ago
> +check_human_date "$(($(date +%s)-432000)) +0200" $THIS_YEAR_REGEX # 5 days
> ago
> +check_human_date "$(($(date +%s)-1728000)) +0200" $THIS_YEAR_REGEX # 3 weeks
> ago
> +check_human_date "$(($(date +%s)-13000000)) +0200" $THIS_YEAR_REGEX # 5
> months ago
> +check_human_date "$(($(date +%s)-31449600)) +0200" $THIS_YEAR_REGEX # 12
> months ago
> +check_human_date "$(($(date +%s)-37500000)) +0200" $MORE_THAN_A_YEAR_REGEX #
> 1 year, 2 months ago
> +check_human_date "$(($(date +%s)-55188000)) +0200" $MORE_THAN_A_YEAR_REGEX #
> 1 year, 9 months ago
> +check_human_date "$(($(date +%s)-630000000)) +0200" $MORE_THAN_A_YEAR_REGEX
> # 20 years ago
> +
> +
> test_done