* Ambiguous date handling @ 2012-09-12 9:35 Chris Packham 2012-09-12 9:35 ` [PATCH] Add test for ambiguous patch dates Chris Packham 2012-09-12 9:48 ` Ambiguous date handling Junio C Hamano 0 siblings, 2 replies; 5+ messages in thread From: Chris Packham @ 2012-09-12 9:35 UTC (permalink / raw) To: git Hi, I think this has come up before [1],[2] but we ran into this at $dayjob today. Our default MUA has an annoying habit of using a non RFC822 date format when saving an email as plaintext. This means the first 12 days of every month we run into the ambiguous date problem (our date convention is dd/mm/yy). I see code in date.c for refusing a date in the future which would have caught this but it doesn't appear to be working for us. Following this is a patch adding a testcase for this. With the following results: ok 1 - apply patch with ambiguous date not ok 2 - check ambiguous date # TODO known breakage ok 3 - apply patch with european date separator ok 4 - check european date # still have 1 known breakage(s) # passed all remaining 3 test(s) 1..4 Thanks, Chris -- [1] - http://thread.gmane.org/gmane.comp.version-control.git/18412/focus=18417 [2] - http://thread.gmane.org/gmane.comp.version-control.git/84512/focus=85735 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH] Add test for ambiguous patch dates 2012-09-12 9:35 Ambiguous date handling Chris Packham @ 2012-09-12 9:35 ` Chris Packham 2012-09-12 9:48 ` Ambiguous date handling Junio C Hamano 1 sibling, 0 replies; 5+ messages in thread From: Chris Packham @ 2012-09-12 9:35 UTC (permalink / raw) To: git; +Cc: Chris Packham -- This testcase is only good for the next couple of months. For a longer term test the current time would need to be set in the test setup. --- t/t4255-am-author-date.sh | 85 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100755 t/t4255-am-author-date.sh diff --git a/t/t4255-am-author-date.sh b/t/t4255-am-author-date.sh new file mode 100755 index 0000000..62bceee --- /dev/null +++ b/t/t4255-am-author-date.sh @@ -0,0 +1,85 @@ +#!/bin/sh + +test_description='git am with ambiguous date' +. ./test-lib.sh + +cat >patch.diff <<EOF +From: A U Thor <au.thor@example.com> +To: C O Mmitter <co.mmitter@example.com> +Date: 12/9/2012 12:00 AM +Subject: [PATCH] add file.txt +--- + file.txt | 7 +++++++ + 1 file changed, 7 insertions(+) + create mode 100644 file.txt + +diff --git a/file.txt b/file.txt +new file mode 100644 +index 0000000..fe745d6 +--- /dev/null ++++ b/file.txt +@@ -0,0 +1,7 @@ ++Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam pulvinar ++tempus ligula vitae ornare. Vestibulum ante ipsum primis in faucibus orci ++luctus et ultrices posuere cubilia Curae; Aenean dapibus mauris non quam ++commodo a porta sapien suscipit. Mauris venenatis, dui nec malesuada mattis, ++ante mauris ornare ipsum, ac tincidunt ipsum lectus aliquet tortor. Nulla ipsum ++felis, egestas at condimentum quis, accumsan nec arcu. Phasellus fringilla ++viverra tempus. Integer vel rhoncus odio. +EOF + +test_expect_success 'apply patch with ambiguous date' ' + git am patch.diff +' + +cat >expected <<EOF +Date: Wed Sep 12 00:00:00 2012 +0000 +EOF + +test_expect_failure 'check ambiguous date' ' + git show HEAD | grep Date >actual && + test_cmp expected actual +' + +cat >patch.diff <<EOF +From: A N Other <an.other@example.com> +To: C O Mmitter <co.mmitter@example.com> +Date: 12.9.2012 12:00 AM +Subject: [PATCH] update file.txt +--- + file.txt | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/file.txt b/file.txt +index fe745d6..cd45361 100644 +--- a/file.txt ++++ b/file.txt +@@ -5,3 +5,12 @@ commodo a porta sapien suscipit. Mauris venenatis, dui nec malesuada mattis, + ante mauris ornare ipsum, ac tincidunt ipsum lectus aliquet tortor. Nulla ipsum + felis, egestas at condimentum quis, accumsan nec arcu. Phasellus fringilla + viverra tempus. Integer vel rhoncus odio. ++ ++Donec et ante eu mi aliquam sodales non ut massa. Nullam a luctus dui. Etiam ac ++eros elit. Pellentesque habitant morbi tristique senectus et netus et malesuada ++fames ac turpis egestas. Curabitur commodo ligula id leo iaculis vel lobortis ++leo pulvinar. Aenean adipiscing cursus arcu quis consectetur. Morbi eget lectus ++nec neque interdum lacinia. Nam quis metus eget ligula faucibus imperdiet in et ++ligula. Aenean eu urna sit amet metus sagittis interdum non cursus orci. ++Maecenas imperdiet feugiat tellus, non ultrices nulla dictum sed. Nulla vel ++lorem ac massa euismod faucibus et ut leo. +EOF + +test_expect_success 'apply patch with european date separator' ' + git am patch.diff +' + +cat >expected <<EOF +Date: Wed Sep 12 00:00:00 2012 +0000 +EOF + +test_expect_success 'check european date' ' + git show HEAD | grep Date >actual && + test_cmp expected actual +' + +test_done -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: Ambiguous date handling 2012-09-12 9:35 Ambiguous date handling Chris Packham 2012-09-12 9:35 ` [PATCH] Add test for ambiguous patch dates Chris Packham @ 2012-09-12 9:48 ` Junio C Hamano 2012-09-12 10:09 ` Chris Packham 1 sibling, 1 reply; 5+ messages in thread From: Junio C Hamano @ 2012-09-12 9:48 UTC (permalink / raw) To: Chris Packham; +Cc: git Chris Packham <judge.packham@gmail.com> writes: > Our default MUA has an annoying habit of using a non RFC822 date format when > saving an email as plaintext. This means the first 12 days of every month we > run into the ambiguous date problem (our date convention is dd/mm/yy). > > I see code in date.c for refusing a date in the future which would have caught > this... The most sane thing to do when you know that your MUA *consistently* does dd/mm/yy (even though it may annoy you) is to massage its output before feeding it to Git. And it should be a very simple matter of a one-liner filter, no? Regardless of the correctness of that "we reject timestamps way into the future" logic, it should be taken as the last resort. If you are on September 1st, both 9/12 and 12/9 will look like into the future for more than ten days (which is the cut-off, I think). If you are on December 28th, both look like sufficiently in the past. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Ambiguous date handling 2012-09-12 9:48 ` Ambiguous date handling Junio C Hamano @ 2012-09-12 10:09 ` Chris Packham 2012-09-12 16:58 ` Junio C Hamano 0 siblings, 1 reply; 5+ messages in thread From: Chris Packham @ 2012-09-12 10:09 UTC (permalink / raw) To: Junio C Hamano; +Cc: git On 09/12/2012 09:48 PM, Junio C Hamano wrote: > Chris Packham <judge.packham@gmail.com> writes: > >> Our default MUA has an annoying habit of using a non RFC822 date format when >> saving an email as plaintext. This means the first 12 days of every month we >> run into the ambiguous date problem (our date convention is dd/mm/yy). >> >> I see code in date.c for refusing a date in the future which would have caught >> this... > > The most sane thing to do when you know that your MUA *consistently* > does dd/mm/yy (even though it may annoy you) is to massage its > output before feeding it to Git. And it should be a very simple > matter of a one-liner filter, no? Consistent as long as you save as the default .txt. Some people have trained themselves to use the save as .eml option which uses RFC822 style output. sed 's|Date: (\d+)/(\d+)/(\d+)|\1.\2.\3|' should correct the former and ignore the latter. Could this be done in a applypatch-msg hook? > > Regardless of the correctness of that "we reject timestamps way into > the future" logic, it should be taken as the last resort. If you > are on September 1st, both 9/12 and 12/9 will look like into the > future for more than ten days (which is the cut-off, I think). If > you are on December 28th, both look like sufficiently in the past. > Duly noted. And I'm implying that the reject timestamps in future isn't actually working. I've just started looking at t0006-date.sh so see if I can prove it. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Ambiguous date handling 2012-09-12 10:09 ` Chris Packham @ 2012-09-12 16:58 ` Junio C Hamano 0 siblings, 0 replies; 5+ messages in thread From: Junio C Hamano @ 2012-09-12 16:58 UTC (permalink / raw) To: Chris Packham; +Cc: git Chris Packham <judge.packham@gmail.com> writes: > Consistent as long as you save as the default .txt. Some people have > trained themselves to use the save as .eml option which uses RFC822 > style output. Yuck. > Could this be done in a applypatch-msg > hook? Isn't the hook about fixing up the log message? Also I do not think the name of the original file is given to the hook, so there is no sufficient information to allow it to switch between two behaviours based on .txt or .eml. But if you are massaging the _input_ to "git am", then you can certainly do the massaging even _before_ you feed it to "git am", no? We could think about adding a new hook to "git am", though. It cannot just be an option to "git am" (or "git mailinfo") that says "if the input is .txt, assume European date order for \d+/\d+/\d+ dates, and otherwise assume US style", as that is too specific to your particular set-up and will not match general needs. If we were to add such a hook, $GIT_DIR/hooks/am-input-filter might look something like this (it is left as an exercise to enhance it to avoid munging a payload outside the header that happens to begin with "Date: "): #!/bin/sh case "$#" in 0) cat ;; *) for i do case "$i" in *.txt) sed -e 's/^\(Date: \)(\d+/)(\d+/)(\d+)/\1\3\2\4/' "$i" ;; *) cat "$i" ;; esac done ;; esac and then teach "am" to use the hook, perhaps like the attached. But at that point, wouldn't it be far simpler and cleaner if you did $ my-mbox-munge mail.txt | git am in the first place? git-am.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git i/git-am.sh w/git-am.sh index c682d34..42654a0 100755 --- i/git-am.sh +++ w/git-am.sh @@ -265,7 +265,16 @@ split_patches () { else keep_cr= fi - git mailsplit -d"$prec" -o"$dotest" -b $keep_cr -- "$@" > "$dotest/last" || + + if test -x "$GIT_DIR"/hooks/am-input-filter + then + mif="$GIT_DIR"/hooks/am-input-filter + else + mif=cat + fi + + "$mif" "$@" | + git mailsplit -d"$prec" -o"$dotest" -b $keep_cr >"$dotest/last" || clean_abort ;; stgit-series) ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2012-09-12 16:59 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-09-12 9:35 Ambiguous date handling Chris Packham 2012-09-12 9:35 ` [PATCH] Add test for ambiguous patch dates Chris Packham 2012-09-12 9:48 ` Ambiguous date handling Junio C Hamano 2012-09-12 10:09 ` Chris Packham 2012-09-12 16:58 ` Junio C Hamano
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).