org.el: Respect org-extend-today-until in timestamps with ++

* org.el (org-auto-repeat-maybe): Changed org-auto-repeat-maybe, so that
switching a repeating todo with a timestamp of the form <… ++…> respects
`org-extend-today-until'.
* test-org.el (test-org/auto-repeat-maybe, org-test-with-time-locale):
Tests for interaction of `org-extend-today-until' and
`org-auto-repeat-maybe'. Added `org-test-with-time-locale' to make test
results independent of running machine. Explicitly avoid matching log
note with old timestamp in all the tests to avoid confusion.

Co-authored-by: Ihor Radchenko <yantar92@posteo.net>

TINYCHANGE
This commit is contained in:
Valentin Herrmann 2023-08-13 18:44:49 +02:00 committed by Ihor Radchenko
parent 201625f7e2
commit 23f751910e
No known key found for this signature in database
GPG Key ID: 6470762A7DA11D8B
2 changed files with 65 additions and 13 deletions

View File

@ -10113,7 +10113,10 @@ This function is run automatically after each state change to a DONE state."
(let ((nshiftmax 10)
(nshift 0))
(while (or (= nshift 0)
(not (time-less-p nil time)))
(if (equal what "h")
(not (time-less-p nil time))
(>= (org-today)
(time-to-days time))))
(when (= nshiftmax (cl-incf nshift))
(or (y-or-n-p
(format "%d repeater intervals were not \

View File

@ -8412,26 +8412,75 @@ Paragraph<point>"
(buffer-string))))
;; Handle every repeater type using hours step.
(should
(string-match-p
"2014-03-04 .* 02:00"
(org-test-at-time "<2014-03-04 02:35>"
(string-search
"<2014-03-04 02:00 +8h>"
(org-test-without-dow
(org-test-at-time "<2014-03-04 02:35>"
(org-test-with-temp-text "* TODO H\n<2014-03-03 18:00 +8h>"
(org-todo "DONE")
(buffer-string)))))
(buffer-string))))))
(should
(string-match-p
"2014-03-04 .* 10:00"
(org-test-at-time "<2014-03-04 02:35>"
(string-search
"<2014-03-04 10:00 ++8h>"
(org-test-without-dow
(org-test-at-time "<2014-03-04 02:35>"
(org-test-with-temp-text "* TODO H\n<2014-03-03 18:00 ++8h>"
(org-todo "DONE")
(buffer-string)))))
(buffer-string))))))
(should
(string-match-p
"2014-03-04 .* 10:35"
(org-test-at-time "<2014-03-04 02:35>"
(string-search
"<2014-03-04 10:35 .+8h>"
(org-test-without-dow
(org-test-at-time "<2014-03-04 02:35>"
(org-test-with-temp-text "* TODO H\n<2014-03-03 18:00 .+8h>"
(org-todo "DONE")
(buffer-string)))))
(buffer-string))))))
;; Handle `org-extend-today-until'.
(should
(string-search
"<2014-03-04 ++1d>"
(let ((org-extend-today-until 4))
(org-test-without-dow
(org-test-at-time "<2014-03-04 02:35>"
(org-test-with-temp-text "* TODO H\n<2014-03-03 ++1d>"
(org-todo "DONE")
(buffer-string)))))))
(should
(string-search
"<2014-03-06 17:00 ++1d>"
(let ((org-extend-today-until 4))
(org-test-without-dow
(org-test-at-time "<2014-03-05 18:00>"
(org-test-with-temp-text "* TODO H\n<2014-03-04 17:00 ++1d>"
(org-todo "DONE")
(buffer-string)))))))
(should
(string-search
"<2014-03-04 10:00 ++8h>"
(let ((org-extend-today-until 4))
(org-test-without-dow
(org-test-at-time "<2014-03-04 02:35>"
(org-test-with-temp-text "* TODO H\n<2014-03-03 18:00 ++8h>"
(org-todo "DONE")
(buffer-string)))))))
(should
(string-search
"<2014-03-04 18:00 .+1d>"
(let ((org-extend-today-until 4))
(org-test-without-dow
(org-test-at-time "<2014-03-04 02:35>"
(org-test-with-temp-text "* TODO H\n<2014-03-03 18:00 .+1d>"
(org-todo "DONE")
(buffer-string)))))))
(should
(string-search
"<2014-03-04 10:35 .+8h>"
(let ((org-extend-today-until 4))
(org-test-without-dow
(org-test-at-time "<2014-03-04 02:35>"
(org-test-with-temp-text "* TODO H\n<2014-03-03 18:00 .+8h>"
(org-todo "DONE")
(buffer-string)))))))
;; Do not repeat inactive time stamps with a repeater.
(should-not
(string-match-p