3024: Enhance Review Board RBTools (rbt) to support svn tree (or file copy)

sudhir.********@gmai***** (Google Code) (Is this you? Claim this profile.)
Aug. 12, 2013
What version are you running?
RBTools 0.5.1


Describe the enhancement and the motivation for it.
RBTools does NOT support svn tree copy (or file/files copy) from other branches.


Please provide any additional information below.
Please find attached patch.  With patch applied, rbt notifies user that it has detected tree/file copy and asks the user to 

sudhirbs@rhel-sudhirbs usbrdl $ svn st
A  +    my_dir

 
sudhirbs@rhel-sudhirbs $ rbt post
One or more files in your changeset has history scheduled with commit.
Please add option '--svn-show-copies-as-adds=y/n' and re-run

sudhirbs@rhel-sudhirbs $ rbt post --svn-show-copies-as-adds=y
Review request #14493 posted.
Index: 0.5.1.1/commands/diff.py
===================================================================
--- 0.5.1.1/commands/diff.py	(revision 408105)
+++ 0.5.1.1/commands/diff.py	(working copy)
@@ -30,6 +30,11 @@
                metavar="TRACKING",
                help="Tracking branch from which your branch is derived "
                     "(git only, defaults to origin/master)"),
+        Option("--svn-show-copies-as-adds",
+               dest="svn_show_copies_as_adds",
+               metavar="y/n",
+               default=None,
+               help="don't diff copied or moved files with their source"),
         Option('--svn-changelist',
                dest='svn_changelist',
                default=None,
@@ -85,6 +90,7 @@
         diff, parent_diff = get_diff(
             tool,
             repository_info,
+            svn_show_copies_as_adds=self.options.svn_show_copies_as_adds,
             revision_range=self.options.revision_range,
             svn_changelist=self.options.svn
#1 sudhir.********@gmai***** (Google Code) (Is this you? Claim this profile.)
Missed patch to utils/diffs.py file. Adding ...

--- 0.5.1.1/utils/diffs.py	(revision 408105)
+++ 0.5.1.1/utils/diffs.py	(working copy)
@@ -1,14 +1,16 @@
-def get_diff(scmtool, repository_info, revision_range=None,
-             svn_changelist=None, files=[]):
+def get_diff(scmtool, repository_info, svn_show_copies_as_adds=None,
+             revision_range=None, svn_changelist=None, files=[]):
     """Returns a diff as a string."""
     if revision_range:
         diff, parent_diff = scmtool.diff_between_revisions(
             revision_range,
             files,
-            repository_info)
+            repository_info,
+            svn_show_copies_as_adds)
     elif svn_changelist:
-        diff, parent_diff = scmtool.diff_changelist(svn_changelist)
+        diff, parent_diff = scmtool.diff_changelist(svn_changelist,
+                                                    svn_show_copies_as_adds)
     else:
-        diff, parent_diff = scmtool.diff(files)
+        diff, parent_diff = scmtool.diff(files, svn_show_copies_as_adds)
 
  • +
    Index: 0.5.1.1/utils/diffs.py
    ===================================================================
    --- 0.5.1.1/utils/diffs.py	(revision 408105)
    +++ 0.5.1.1/utils/diffs.py	(working copy)
    @@ -1,14 +1,16 @@
    -def get_diff(scmtool, repository_info, revision_range=None,
    -             svn_changelist=None, files=[]):
    +def get_diff(scmtool, repository_info, svn_show_copies_as_adds=None,
    +             revision_range=None, svn_changelist=None, files=[]):
         """Returns a diff as a string."""
         if revision_range:
             diff, parent_diff = scmtool.diff_between_revisions(
                 revision_range,
                 files,
    -            repository_info)
    +            repository_info,
    +            svn_show_copies_as_adds)
         elif svn_changelist:
    -        diff, parent_diff = scmtool.diff_changelist(svn_changelist)
    +        diff, parent_diff = scmtool.diff_changelist(svn_changelist,
    +                                                    svn_show_copies_as_adds)
         else:
    -        diff, parent_diff = 
#2 sudhir.********@gmai***** (Google Code) (Is this you? Claim this profile.)
This patch fixes other clients from breaking due to svn client change.

--- 0.5.1.1/utils/diffs.py	(revision 408105)
+++ 0.5.1.1/utils/diffs.py	(working copy)
@@ -1,14 +1,24 @@
-def get_diff(scmtool, repository_info, revision_range=None,
-             svn_changelist=None, files=[]):
+def get_diff(scmtool, repository_info, svn_show_copies_as_adds=None,
+             revision_range=None, svn_changelist=None, files=[]):
     """Returns a diff as a string."""
     if revision_range:
-        diff, parent_diff = scmtool.diff_between_revisions(
-            revision_range,
-            files,
-            repository_info)
+        if scmtool.name == 'Subversion':
+            diff, parent_diff = scmtool.diff_between_revisions(
+                revision_range,
+                files,
+                repository_info,
+                svn_show_copies_as_adds)
+        else:
+            diff, parent_diff = scmtool.diff_between_revisions(
+                revision_range,
+                files,
+                repository_info)
     elif svn_changelist:
-        diff, parent_diff = scmtool.diff_changelist(svn_changelist)
+        diff, parent_diff = scmtool.diff_changelist(svn_changelist, 
+                                                    svn_show_copies_as_adds)
     else:
-        diff, parent_diff = scmtool.diff(files)
-
+        if scmtool.name == 'Subversion':
+            diff, parent_diff = scmtool.diff(files, svn_show_copies_as_adds)
+        else:
+            diff, parent_diff = scmtool.diff(files)
     return diff, parent_diff
  • +
    Index: 0.5.1.1/utils/diffs.py
    ===================================================================
    --- 0.5.1.1/utils/diffs.py	(revision 408105)
    +++ 0.5.1.1/utils/diffs.py	(working copy)
    @@ -1,14 +1,24 @@
    -def get_diff(scmtool, repository_info, revision_range=None,
    -             svn_changelist=None, files=[]):
    +def get_diff(scmtool, repository_info, svn_show_copies_as_adds=None,
    +             revision_range=None, svn_changelist=None, files=[]):
         """Returns a diff as a string."""
         if revision_range:
    -        diff, parent_diff = scmtool.diff_between_revisions(
    -            revision_range,
    -            files,
    -            repository_info)
    +        if scmtool.name == 'Subversion':
    +            diff, parent_diff = scmtool.diff_between_revisions(
    +                revision_range,
    +                files,
    +                repository_info,
    +                svn_show_copies_as_adds)
    +        else:
    +            diff, parent_diff = scmtool.diff_between_revisions(
    +                revision_rang
chipx86
#3 chipx86
Thanks, but we require that all patches go up for review at http://reviews.reviewboard.org/
#4 sudhir.********@gmai***** (Google Code) (Is this you? Claim this profile.)
Please review and I would be glad to do necessary changes.
http://reviews.reviewboard.org/r/4279/
david
#5 david
Pushed to rbtools master (78715e4). Thanks!
  • +Fixed