[webkitpy] SVNTest fails four tests when using subversion client 1.7 or later
authorglenn@skynav.com <glenn@skynav.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 11 Apr 2013 07:03:40 +0000 (07:03 +0000)
committerglenn@skynav.com <glenn@skynav.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 11 Apr 2013 07:03:40 +0000 (07:03 +0000)
https://bugs.webkit.org/show_bug.cgi?id=114386

Reviewed by Benjamin Poulain.

Subversion client 1.7 uses a new locking scheme that invalidates the technique used
in test_svn_lock(), so skip that test for 1.7 (or later) until a new technique
can be implemented. Further, 1.7 changed svn add to not add intermediate directories
by default and to return exit code 1 if a file/dir had already been added.

* Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
(test_svn_lock): Skip body of test if subversion client 1.7 or later.
* Scripts/webkitpy/common/checkout/scm/svn.py:
(SVN.add_list): Use --parents option and handle exit code 1 if subversion client 1.7 or later.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@148177 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Tools/ChangeLog
Tools/Scripts/webkitpy/common/checkout/scm/scm_unittest.py
Tools/Scripts/webkitpy/common/checkout/scm/svn.py

index 5ca8c02..1b1c11a 100644 (file)
@@ -1,3 +1,20 @@
+2013-04-11  Glenn Adams  <glenn@skynav.com>
+
+        [webkitpy] SVNTest fails four tests when using subversion client 1.7 or later
+        https://bugs.webkit.org/show_bug.cgi?id=114386
+
+        Reviewed by Benjamin Poulain.
+
+        Subversion client 1.7 uses a new locking scheme that invalidates the technique used
+        in test_svn_lock(), so skip that test for 1.7 (or later) until a new technique
+        can be implemented. Further, 1.7 changed svn add to not add intermediate directories
+        by default and to return exit code 1 if a file/dir had already been added.
+
+        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
+        (test_svn_lock): Skip body of test if subversion client 1.7 or later.
+        * Scripts/webkitpy/common/checkout/scm/svn.py:
+        (SVN.add_list): Use --parents option and handle exit code 1 if subversion client 1.7 or later.
+
 2013-04-10  Zan Dobersek  <zdobersek@igalia.com>
 
         Unreviewed.
index 215edd1..15432f0 100644 (file)
@@ -891,13 +891,17 @@ END
         self.assertFalse(os.path.exists(self.bogus_dir))
 
     def test_svn_lock(self):
-        svn_root_lock_path = ".svn/lock"
-        write_into_file_at_path(svn_root_lock_path, "", "utf-8")
-        # webkit-patch uses a Checkout object and runs update-webkit, just use svn update here.
-        self.assertRaises(ScriptError, run_command, ['svn', 'update'])
-        self.scm.discard_working_directory_changes()
-        self.assertFalse(os.path.exists(svn_root_lock_path))
-        run_command(['svn', 'update'])  # Should succeed and not raise.
+        if self.scm.svn_version() >= "1.7":
+            # the following technique with .svn/lock then svn update doesn't work with subversion client 1.7 or later
+            pass
+        else:
+            svn_root_lock_path = ".svn/lock"
+            write_into_file_at_path(svn_root_lock_path, "", "utf-8")
+            # webkit-patch uses a Checkout object and runs update-webkit, just use svn update here.
+            self.assertRaises(ScriptError, run_command, ['svn', 'update'])
+            self.scm.discard_working_directory_changes()
+            self.assertFalse(os.path.exists(svn_root_lock_path))
+            run_command(['svn', 'update'])  # Should succeed and not raise.
 
     def test_exists(self):
         self._shared_test_exists(self.scm, self.scm.commit_with_message)
index 6c819f0..c146f5d 100644 (file)
@@ -181,10 +181,20 @@ class SVN(SCM, SVNRepository):
             return
         self.add(path)
 
-    def add_list(self, paths, return_exit_code=False):
+    def add_list(self, paths):
         for path in paths:
             self._add_parent_directories(os.path.dirname(os.path.abspath(path)))
-        self._run_svn(["add"] + paths)
+        if self.svn_version() >= "1.7":
+            # For subversion client 1.7 and later, need to add '--parents' option to ensure intermediate directories
+            # are added; in addition, 1.7 returns an exit code of 1 from svn add if one or more of the requested
+            # adds are already under version control, including intermediate directories subject to addition
+            # due to --parents
+            svn_add_args = ['svn', 'add', '--parents'] + paths
+            exit_code = self.run(svn_add_args, return_exit_code=True)
+            if exit_code and exit_code != 1:
+                raise ScriptError(script_args=svn_add_args, exit_code=exit_code)
+        else:
+            self._run_svn(["add"] + paths)
 
     def _delete_parent_directories(self, path):
         if not self.in_working_directory(path):