3248: rbt: svn client incorrectly detects "history scheduled with commit", always requires --svn-show-copies-as-adds=y/n

Feb. 15, 2014
What version are you running? 0.5.6

What's the URL of the page containing the problem? n/a

What steps will reproduce the problem?
1. add a new file X to branch BrA, commit
2. svn merge X from branch BrA to branch BrB in working copy (status "A +")
3. modify file Y in working copy, send ONLY file Y (status "M) to changelist CL
4. rbt post --svn-changelist=CL

What is the expected output? What do you see instead?
Expected: post succeeds, because changelist only contains modified files
Actual: post fails with "Please try again with '--svn-show-copies-as-adds=y/n'"; this is because rbt "sees" file X, despite explicitly only posting Y for review.

What operating system are you using? What browser?
Windows/cygwin; n/a

Please provide any additional information below.
Should modify history_scheduled_with_commit in rbtools/clients/svn.py to pass --changelist option down to 'svn st' if --svn-changelist was given to rbt
#1 vladr

--- a/rbtools/clients/svn.py     2014-02-03 16:23:05.381608100 -0500
+++ b/rbtools/clients/svn.py     2014-02-12 15:07:36.649756000 -0500
@@ -281,7 +281,7 @@

         svn_show_copies_as_adds = getattr(
             self.options, 'svn_show_copies_as_adds', None)
-        if self.history_scheduled_with_commit():
+        if self.history_scheduled_with_commit(cmd):
             if svn_show_copies_as_adds is None:
                 sys.stderr.write("One or more files in your changeset has "
                                  "history scheduled with commit. Please try "
@@ -298,10 +298,18 @@

         return ''.join(diff)

-    def history_scheduled_with_commit(self):
+    def history_scheduled_with_commit(self, cmd):
         """ Method to find if any file status has '+' in 4th column"""

-        for p in execute(["svn", "st"], split_lines=True):
+        svn_st_params = ["svn", "st"]
+        try:
+            changelist_pos = cmd.index('--changelist')
+            svn_st_params.append('--cl')
+            svn_st_params.append(cmd[changelist_pos + 1])
+        except:
+            pass
+        for p in execute(svn_st_params, split_lines=True):
             if p.startswith('A  +'):
                 return True
         return False
#2 david
Please post patches on https://reviews.reviewboard.org/
#3 david
Fixed in rbtools master (2d19868). Thanks!
  • +Fixed