Subject: [sup-talk] [PATCH] Allow multi_edit_labels to remove labels using -lab (the "; l" key binding)

From: [email-masked] (Nicolas Pouillard)
Date: Mon, 16 Mar 2009 19:35:43 +0100

Resent..

---
 lib/sup/modes/thread-index-mode.rb |   19 ++++++++++++++-----
 1 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/lib/sup/modes/thread-index-mode.rb b/lib/sup/modes/thread-index-mode.rb
index 3dd0498..bde61cf 100644
--- a/lib/sup/modes/thread-index-mode.rb
+++ b/lib/sup/modes/thread-index-mode.rb
@@ -448,13 +448,22 @@ EOS
   end
 
   def multi_edit_labels threads
-    user_labels = BufferManager.ask_for_labels :add_labels, "Add labels: ", [], @hidden_labels
+    user_labels = BufferManager.ask_for_labels :labels, "Add/remove labels (use -label to remove): ", [], @hidden_labels
     return unless user_labels
-    
-    hl = user_labels.select { |l| @hidden_labels.member? l }
+
+    user_labels.map! { |l| (l.to_s =~ /^-/)? [l.to_s.gsub(/^-?/, '').to_sym, true] : [l, false] }
+    hl = user_labels.select { |(l,_)| @hidden_labels.member? l }
     if hl.empty?
-      threads.each { |t| user_labels.each { |l| t.apply_label l } }
-      user_labels.each { |l| LabelManager << l }
+      threads.each do |t|
+        user_labels.each do |(l, to_remove)|
+          if to_remove
+            t.remove_label l
+          else
+            t.apply_label l
+          end
+        end
+      end
+      user_labels.each { |(l,_)| LabelManager << l }
     else
       BufferManager.flash "'#{hl}' is a reserved label!"
     end

-- 
Nicolas Pouillard

---

From: [email-masked] (Nicolas Pouillard)
Date: Wed, 18 Mar 2009 16:33:08 +0100

This patch conflict with the undo feature, I've locally resolved the merge.
However I don't really know what the best way to share the conflict
resolution.

-- 
Nicolas Pouillard

---

From: [email-masked] (William Morgan)
Date: Sun, 22 Mar 2009 14:21:46 -0700

Reformatted excerpts from nicolas.pouillard's message of 2009-03-18:
> This patch conflict with the undo feature, I've locally resolved the
> merge. However I don't really know what the best way to share the
> conflict resolution.

That's a good question. For some reason git format-patch doesn't produce
anything for merge commits, even if they contain conflict resolution
changes. Maybe it's for a good reason; I don't know.

But you can use git diff. After merging and resolving the conflict, if
you do "git diff HEAD^", that should output the conflict-resolution
changes. You can send that to me and I can use it to replicate the
commit.
-- 
William <wmorgan-sup at masanjin.net>

---

From: [email-masked] (Nicolas Pouillard)
Date: Mon, 23 Mar 2009 11:26:23 +0100

> changes. You can send that to me and I can use it to replicate the

I've applied the resolution in a local branch, a attach to patches.
The first is done with 'git diff' before commit the conflict resolution.
The second is done with 'git diff HEAD^' just after.

-- 
Nicolas Pouillard
-------------- next part --------------
A non-text attachment was scrubbed...
Name: undo+multi_edit_labels+remove.patch
Type: application/octet-stream
Size: 1901 bytes
Desc: not available
URL: <http://rubyforge.org/pipermail/sup-talk/attachments/20090323/aa8a4b3b/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: undo+multi_edit_labels+remove2.patch
Type: application/octet-stream
Size: 1861 bytes
Desc: not available
URL: <http://rubyforge.org/pipermail/sup-talk/attachments/20090323/aa8a4b3b/attachment-0001.obj>

---

From: [email-masked] (William Morgan)
Date: Mon, 23 Mar 2009 07:49:13 -0700

> The second is done with 'git diff HEAD^' just after.

Only the second patch was really necessary. But thanks, it worked!

I've applied this patch on a branch called multi-remove-labels and it's
been merged into next.
-- 
William <wmorgan-sup at masanjin.net>

---

From: [email-masked] (Nicolas Pouillard)
Date: Mon, 23 Mar 2009 16:18:15 +0100

> I've applied this patch on a branch called multi-remove-labels and it's

Great

-- 
Nicolas Pouillard