Re: [O] [PATCH] Update statistic cookies when archiving

2017-09-06 Thread Nicolas Goaziou
Hello,

Jay Kamat  writes:

> Done.

Applied. Thank you!
>
> I'm not sure if I did the tests 'correctly' though. I placed them in
> test-org-element.el since there was a little bit of archive based
> testing there, is there a better place to put them? I couldn't find any
> file for org-archive testing. Maybe I'll write some more archive tests
> later...

I created test-org-archive.el on your behalf.

Regards,

-- 
Nicolas Goaziou0x80A93738



Re: [O] [PATCH] Update statistic cookies when archiving

2017-09-03 Thread Jay Kamat
Hi,

> Be warned that we're in a feature-freeze phase. It will have to wait for
> Org 9.1 before being merged.

Sounds good to me!

>
>> +;; Go to parent, even if no children exist
>
> Nitpick: Missing final dot.
>
>> +(org-up-heading-safe)
>> +;; Update cookie of parent
>
> Ditto.
>> +(org-update-statistics-cookies nil)))
>>  (message "Subtree archived %s"
>>   (if (eq this-buffer buffer)
>>   (concat "under heading: " heading)
>> @@ -470,6 +476,9 @@ Archiving time is retained in the ARCHIVE_TIME node 
>> property."
>>  (outline-hide-subtree)
>>  (org-cycle-show-empty-lines 'folded)
>>  (goto-char pos)))
>> +(when org-provide-todo-statistics
>> +  ;; update todo statistics of parent
>
> Ditto. Missing capital, too.
>
>> +  (org-update-parent-todo-statistics))
>>  (org-reveal)
>>  (if (looking-at "^[ \t]*$")
>>  (outline-next-visible-heading 1

Fixed.

> Could you provide some tests and an ORG-NEWS entry? For the latter, you
> can start a new "Version 9.2" top heading.

Done.

I'm not sure if I did the tests 'correctly' though. I placed them in
test-org-element.el since there was a little bit of archive based
testing there, is there a better place to put them? I couldn't find any
file for org-archive testing. Maybe I'll write some more archive tests
later...

+(should (string=
+ (org-element-property :title (org-element-at-point))
+ "Top [0%]")))
Is there a better way to extract the status cookie percentage from the
header? I couldn't find anything in (org-element-property)'s output.

Thanks,
-Jay

>From 612d4daac54e12556333fcd2e07771aa8344c86c Mon Sep 17 00:00:00 2001
From: Jay Kamat 
Date: Sat, 2 Sep 2017 15:57:36 -0400
Subject: [PATCH] org-archive.el: Update statistic cookies when archiving

* lisp/org-archive.el (org-archive-subtree): Update todo statistics
  when calling `org-archive-subtree'.
(org-archive-to-archive-sibling): Update cookie statistics when
calling `org-archive-to-archive-sibling'.

This can be disabled by setting `org-provide-todo-statistics' to nil.
---
 etc/ORG-NEWS | 22 ++
 lisp/org-archive.el  |  9 +
 testing/lisp/test-org-element.el | 33 +
 3 files changed, 64 insertions(+)

diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 9f3e62406..316a75f2f 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -8,6 +8,28 @@ See the end of the file for license conditions.
 
 Please send Org bug reports to mailto:emacs-orgmode@gnu.org.
 
+* Version 9.2
+
+** Incompatible changes
+** New features
+*** ~org-archive~ functions update status cookies
+
+Archiving headers through ~org-archive-subtree~ and
+~org-archive-to-archive-sibling~ such as the ones listed below:
+
+#+BEGIN_SRC org
+  ,* Top [1/2]
+  ,** DONE Completed
+  ,** TODO Working
+#+END_SRC
+
+Will update the status cookie in the top level header.
+
+** Removed functions
+** Removed options
+** New functions
+** Miscellaneous
+
 * Version 9.1
 
 ** Incompatible changes
diff --git a/lisp/org-archive.el b/lisp/org-archive.el
index adb922e75..9ba73a8de 100644
--- a/lisp/org-archive.el
+++ b/lisp/org-archive.el
@@ -393,6 +393,12 @@ direct children of this heading."
 	(when (featurep 'org-inlinetask)
 	  (org-inlinetask-remove-END-maybe))
 	(setq org-markers-to-move nil)
+	(when org-provide-todo-statistics
+	  (save-excursion
+	;; Go to parent, even if no children exist.
+	(org-up-heading-safe)
+	;; Update cookie of parent.
+	(org-update-statistics-cookies nil)))
 	(message "Subtree archived %s"
 		 (if (eq this-buffer buffer)
 		 (concat "under heading: " heading)
@@ -470,6 +476,9 @@ Archiving time is retained in the ARCHIVE_TIME node property."
 	(outline-hide-subtree)
 	(org-cycle-show-empty-lines 'folded)
 	(goto-char pos)))
+(when org-provide-todo-statistics
+  ;; Update todo statistics of parent.
+  (org-update-parent-todo-statistics))
 (org-reveal)
 (if (looking-at "^[ \t]*$")
 	(outline-next-visible-heading 1
diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el
index 7d1c55f36..e9506d2b0 100644
--- a/testing/lisp/test-org-element.el
+++ b/testing/lisp/test-org-element.el
@@ -1070,6 +1070,39 @@ Some other text
  (let ((org-archive-tag "Archive"))
(org-element-property :archivedp (org-element-at-point))
 
+(ert-deftest test-org-element/archive-update-status-cookie ()
+  "Test archiving properly updating status cookies."
+  ;; Test org-archive-subtree with two children.
+  (org-test-with-temp-text-in-file "* Top [%]\n** DONE One\n** TODO Two"
+(forward-line 1)
+(org-archive-subtree)
+(forward-line -1)
+(should (string=
+	  (org-element-property :title (org-element-at-point))
+	  "Top [0%]")))
+  ;; Test org-archive-subtree with one child.
+  (org-test-with-temp-text-in-file "* Top [%]\n** TODO 

Re: [O] [PATCH] Update statistic cookies when archiving

2017-09-03 Thread Nicolas Goaziou
Hello,

Jay Kamat  writes:

> Sorry, forgot to actually attach the patch, here it is.
>
> From 95cdfa8c3ec81b3a0763b68044611c10a4dadc29 Mon Sep 17 00:00:00 2001
> From: Jay Kamat 
> Date: Sat, 2 Sep 2017 15:57:36 -0400
> Subject: [PATCH] org-archive.el: Update statistic cookies when
> archiving

Thank you!

Be warned that we're in a feature-freeze phase. It will have to wait for
Org 9.1 before being merged.

> + ;; Go to parent, even if no children exist

Nitpick: Missing final dot.

> + (org-up-heading-safe)
> + ;; Update cookie of parent

Ditto.
> + (org-update-statistics-cookies nil)))
>   (message "Subtree archived %s"
>(if (eq this-buffer buffer)
>(concat "under heading: " heading)
> @@ -470,6 +476,9 @@ Archiving time is retained in the ARCHIVE_TIME node 
> property."
>   (outline-hide-subtree)
>   (org-cycle-show-empty-lines 'folded)
>   (goto-char pos)))
> +(when org-provide-todo-statistics
> +  ;; update todo statistics of parent

Ditto. Missing capital, too.

> +  (org-update-parent-todo-statistics))
>  (org-reveal)
>  (if (looking-at "^[ \t]*$")
>   (outline-next-visible-heading 1

Could you provide some tests and an ORG-NEWS entry? For the latter, you
can start a new "Version 9.2" top heading.

Regards,

-- 
Nicolas Goaziou



Re: [O] [PATCH] Update statistic cookies when archiving

2017-09-02 Thread Jay Kamat

Sorry, forgot to actually attach the patch, here it is.

>From 95cdfa8c3ec81b3a0763b68044611c10a4dadc29 Mon Sep 17 00:00:00 2001
From: Jay Kamat 
Date: Sat, 2 Sep 2017 15:57:36 -0400
Subject: [PATCH] org-archive.el: Update statistic cookies when archiving

* lisp/org-archive.el (org-archive-subtree): Update todo statistics
  when calling `org-archive-subtree'.
(org-archive-to-archive-sibling): Update cookie statistics when
calling `org-archive-to-archive-sibling'.

This can be disabled by setting `org-provide-todo-statistics' to nil.
---
 lisp/org-archive.el | 9 +
 1 file changed, 9 insertions(+)

diff --git a/lisp/org-archive.el b/lisp/org-archive.el
index adb922e75..9c24d356c 100644
--- a/lisp/org-archive.el
+++ b/lisp/org-archive.el
@@ -393,6 +393,12 @@ direct children of this heading."
 	(when (featurep 'org-inlinetask)
 	  (org-inlinetask-remove-END-maybe))
 	(setq org-markers-to-move nil)
+	(when org-provide-todo-statistics
+	  (save-excursion
+	;; Go to parent, even if no children exist
+	(org-up-heading-safe)
+	;; Update cookie of parent
+	(org-update-statistics-cookies nil)))
 	(message "Subtree archived %s"
 		 (if (eq this-buffer buffer)
 		 (concat "under heading: " heading)
@@ -470,6 +476,9 @@ Archiving time is retained in the ARCHIVE_TIME node property."
 	(outline-hide-subtree)
 	(org-cycle-show-empty-lines 'folded)
 	(goto-char pos)))
+(when org-provide-todo-statistics
+  ;; update todo statistics of parent
+  (org-update-parent-todo-statistics))
 (org-reveal)
 (if (looking-at "^[ \t]*$")
 	(outline-next-visible-heading 1
-- 
2.11.0



Jay Kamat  writes:

> Hi,
>
> Currently, statistic cookies do not update when archiving headings. For
> example, when archiving the 'Two' header in the below example:
>
> * Top [50%]
> ** TODO One
> ** DONE Two
>
> The status cookie on 'Top' does not get set to [100%].
>
> I have attached a draft patch to add support for this. However, I think
> it needs a little bit more work.
>
> There are 3 archive methods, org-archive-subtree,
> org-archive-to-archive-sibling, and org-archive-set-tag.
>
> For org-archive-set-tag, setting the :ARCHIVE: tag does not seem to
> affect the status cookie, so I did not touch that.
>
> For org-archive-to-archive-sibling, I used the
> (org-update-parent-todo-statistics) function, which seems to work as
> expected.
>
> For org-archive-subtree, the solution I came up with is a little more
> complicated, to handle the edge case of archiving the last child
> header. In this case, 'parent' refers to the wrong (or non-existent)
> header, so I use a small function to call (org-up-heading-safe) on one
> header above point, which seems to work even for this edge case. I'm not
> entirely sure if it's the proper solution though.
>
> Let me know if you have any feedback!
>
> -Jay


[O] [PATCH] Update statistic cookies when archiving

2017-09-02 Thread Jay Kamat
Hi,

Currently, statistic cookies do not update when archiving headings. For
example, when archiving the 'Two' header in the below example:

* Top [50%]
** TODO One
** DONE Two

The status cookie on 'Top' does not get set to [100%].

I have attached a draft patch to add support for this. However, I think
it needs a little bit more work.

There are 3 archive methods, org-archive-subtree,
org-archive-to-archive-sibling, and org-archive-set-tag.

For org-archive-set-tag, setting the :ARCHIVE: tag does not seem to
affect the status cookie, so I did not touch that.

For org-archive-to-archive-sibling, I used the
(org-update-parent-todo-statistics) function, which seems to work as
expected.

For org-archive-subtree, the solution I came up with is a little more
complicated, to handle the edge case of archiving the last child
header. In this case, 'parent' refers to the wrong (or non-existent)
header, so I use a small function to call (org-up-heading-safe) on one
header above point, which seems to work even for this edge case. I'm not
entirely sure if it's the proper solution though.

Let me know if you have any feedback!

-Jay