[Net-IMAP-Server] Mailbox rename

Alex Vandiver alexmv at bestpractical.com
Tue Jul 28 11:24:31 EDT 2009


On Tue, 2009-07-28 at 16:46 +0200, Jan Dvořák wrote:
> Hi, I think I found little bug in renaming mailboxes. If you rename
> mailbox and after it call list command, in result mailbox has still same
> name. If you try select mailbox with old name, mailbox does not exists.
> I think there is $mailbox->full_path( purge => 1 ) missing.

Does the below solve it?
 - Alex

>From 142dd3af0e458a105f7874790c363a243c4a8e37 Mon Sep 17 00:00:00 2001
From: Alex Vandiver <alexmv at bestpractical.com>
Date: Tue, 28 Jul 2009 11:22:45 -0400
Subject: [PATCH] Fix caching in rename by setting name inside ->reparent

---
 lib/Net/IMAP/Server/Command/Rename.pm |    3 +--
 lib/Net/IMAP/Server/Mailbox.pm        |    7 ++++---
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/lib/Net/IMAP/Server/Command/Rename.pm b/lib/Net/IMAP/Server/Command/Rename.pm
index cab5435..1c7a3cd 100644
--- a/lib/Net/IMAP/Server/Command/Rename.pm
+++ b/lib/Net/IMAP/Server/Command/Rename.pm
@@ -44,8 +44,7 @@ sub run {
         $base = $part;
     }
 
-    $mailbox->reparent($base) or return $self->no_command("Permission denied");
-    $mailbox->name($newname);
+    $mailbox->reparent($base, $newname) or return $self->no_command("Permission denied");
 
     $self->ok_completed();
 }
diff --git a/lib/Net/IMAP/Server/Mailbox.pm b/lib/Net/IMAP/Server/Mailbox.pm
index 4511f71..c36a08c 100644
--- a/lib/Net/IMAP/Server/Mailbox.pm
+++ b/lib/Net/IMAP/Server/Mailbox.pm
@@ -208,11 +208,11 @@ sub create {
     return $self->add_child(@_);
 }
 
-=head3 reparent MAILBOX
+=head3 reparent MAILBOX [NAME]
 
 Reparents this mailbox to be a child of the given
-L<Net::IMAP::Server::Mailbox> C<MAILBOX>.  Should return 0 if the
-reparenting is denied or fails.
+L<Net::IMAP::Server::Mailbox> C<MAILBOX>, with the given C<NAME>.
+Should return 0 if the reparenting is denied or fails.
 
 =cut
 
@@ -224,6 +224,7 @@ sub reparent {
         [ grep { $_ ne $self } @{ $self->parent->children } ] );
     push @{ $parent->children }, $self;
     $self->parent($parent);
+    $self->name(shift) if @_;
     $self->full_path( purge => 1 );
     return 1;
 }
-- 
1.6.3.3.473.gb74fc4.dirty





More information about the Net-IMAP-Server mailing list