[svk-commit] r2221 - in branches/2.0-releng: lib/SVK/Editor lib/SVK/Mirror/Backend

nobody at bestpractical.com nobody at bestpractical.com
Fri Dec 8 03:51:54 EST 2006


Author: clkao
Date: Fri Dec  8 03:51:54 2006
New Revision: 2221

Added:
   branches/2.0-releng/lib/SVK/Editor/MapRev.pm
Modified:
   branches/2.0-releng/MANIFEST
   branches/2.0-releng/lib/SVK/Mirror/Backend/SVNRa.pm
   branches/2.0-releng/lib/SVK/Mirror/Backend/SVNSync.pm

Log:
* Use SVK::Editor::MapRev to ensure the editor calls from ra_replay
  comes with proper base revision for opening nodes.
* Manifest.


Modified: branches/2.0-releng/MANIFEST
==============================================================================
--- branches/2.0-releng/MANIFEST	(original)
+++ branches/2.0-releng/MANIFEST	Fri Dec  8 03:51:54 2006
@@ -1,6 +1,7 @@
 ARTISTIC
 bin/svk
 CHANGES
+CHANGES-1.0
 COMMITTERS
 contrib/bench-mime-detect.pl
 contrib/svk-completion.pl
@@ -77,6 +78,7 @@
 lib/SVK/Editor/Dynamic.pm
 lib/SVK/Editor/InteractiveCommitter.pm
 lib/SVK/Editor/InteractiveStatus.pm
+lib/SVK/Editor/MapRev.pm
 lib/SVK/Editor/Merge.pm
 lib/SVK/Editor/Patch.pm
 lib/SVK/Editor/Rename.pm
@@ -227,8 +229,8 @@
 t/20add-nomime.t
 t/20add.t
 t/21delete.t
-t/22status.t
 t/22status-conflict.t
+t/22status.t
 t/23commit-file.t
 t/23commit-inter-nav.t
 t/23commit-inter-output.t
@@ -289,3 +291,4 @@
 utils/pullyu
 utils/svk-ediff.el
 utils/verify-mirror
+

Added: branches/2.0-releng/lib/SVK/Editor/MapRev.pm
==============================================================================
--- (empty file)
+++ branches/2.0-releng/lib/SVK/Editor/MapRev.pm	Fri Dec  8 03:51:54 2006
@@ -0,0 +1,83 @@
+# BEGIN BPS TAGGED BLOCK {{{
+# COPYRIGHT:
+# 
+# This software is Copyright (c) 2003-2006 Best Practical Solutions, LLC
+#                                          <clkao at bestpractical.com>
+# 
+# (Except where explicitly superseded by other copyright notices)
+# 
+# 
+# LICENSE:
+# 
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of either:
+# 
+#   a) Version 2 of the GNU General Public License.  You should have
+#      received a copy of the GNU General Public License along with this
+#      program.  If not, write to the Free Software Foundation, Inc., 51
+#      Franklin Street, Fifth Floor, Boston, MA 02110-1301 or visit
+#      their web page on the internet at
+#      http://www.gnu.org/copyleft/gpl.html.
+# 
+#   b) Version 1 of Perl's "Artistic License".  You should have received
+#      a copy of the Artistic License with this package, in the file
+#      named "ARTISTIC".  The license is also available at
+#      http://opensource.org/licenses/artistic-license.php.
+# 
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# CONTRIBUTION SUBMISSION POLICY:
+# 
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of the
+# GNU General Public License and is only of importance to you if you
+# choose to contribute your changes and enhancements to the community
+# by submitting them to Best Practical Solutions, LLC.)
+# 
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with SVK,
+# to Best Practical Solutions, LLC, you confirm that you are the
+# copyright holder for those contributions and you grant Best Practical
+# Solutions, LLC a nonexclusive, worldwide, irrevocable, royalty-free,
+# perpetual, license to use, copy, create derivative works based on
+# those contributions, and sublicense and distribute those contributions
+# and any derivatives thereof.
+# 
+# END BPS TAGGED BLOCK }}}
+package SVK::Editor::MapRev;
+use strict;
+use warnings;
+
+use base 'SVK::Editor::ByPass';
+
+__PACKAGE__->mk_accessors(qw(cb_resolve_rev));
+
+sub rev_at {
+    my ($self, $method) = @_;
+    return 0 if $method eq 'open_root';
+    return 1 if $method eq 'delete_entry';
+    return 2 if $method =~ m'^open_';
+    return 3 if $method =~ m'^add_';
+    return -1;
+}
+
+sub AUTOLOAD {
+    my ($self, @arg) = @_;
+    my $func = our $AUTOLOAD;
+    $func =~ s/^.*:://;
+    return if $func =~ m/^[A-Z]+$/;
+
+    my $rev = $self->rev_at($func);
+    unless ($rev == -1) {
+	$arg[$rev] = $self->cb_resolve_rev->($func, $arg[$rev]);
+    }
+
+    $func = "SUPER::$func";
+    $self->$func(@arg);
+}
+
+1;

Modified: branches/2.0-releng/lib/SVK/Mirror/Backend/SVNRa.pm
==============================================================================
--- branches/2.0-releng/lib/SVK/Mirror/Backend/SVNRa.pm	(original)
+++ branches/2.0-releng/lib/SVK/Mirror/Backend/SVNRa.pm	Fri Dec  8 03:51:54 2006
@@ -57,6 +57,7 @@
 use SVK::I18N;
 use SVK::Editor;
 use SVK::Mirror::Backend::SVNRaPipe;
+use SVK::Editor::MapRev;
 
 use Class::Autouse qw(SVK::Editor::SubTree SVK::Editor::CopyHandler);
 
@@ -473,6 +474,15 @@
 
 sub _get_sync_editor {
     my ($self, $editor, $target) = @_;
+    $editor = SVK::Editor::MapRev->new(
+        {   _editor        => [$editor],
+            cb_resolve_rev => sub {
+                my ( $func, $rev ) = @_;
+                return $func =~ m/^add/ ? $rev : $target->revision;
+                }
+        }
+    );
+
     $editor = SVK::Editor::CopyHandler->new(
         _editor => $editor,
         cb_copy => sub {

Modified: branches/2.0-releng/lib/SVK/Mirror/Backend/SVNSync.pm
==============================================================================
--- branches/2.0-releng/lib/SVK/Mirror/Backend/SVNSync.pm	(original)
+++ branches/2.0-releng/lib/SVK/Mirror/Backend/SVNSync.pm	Fri Dec  8 03:51:54 2006
@@ -103,11 +103,20 @@
 
 sub find_changeset { $_[1] }
 
-
 sub _revmap_prop { }
 
 sub _get_sync_editor {
     my ($self, $editor, $target) = @_;
+
+    $editor = SVK::Editor::MapRev->new(
+        {   _editor        => [$editor],
+            cb_resolve_rev => sub {
+                my ( $func, $rev ) = @_;
+                return $func =~ m/^add/ ? $rev : $target->revision;
+                }
+        }
+    );
+
     return SVK::Editor::CopyHandler->new(
         _editor => $editor,
         cb_copy => sub {


More information about the svk-commit mailing list