You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ne...@apache.org on 2010/06/29 22:27:38 UTC

svn commit: r959091 - /subversion/trunk/subversion/tests/cmdline/svntest/factory.py

Author: neels
Date: Tue Jun 29 20:27:38 2010
New Revision: 959091

URL: http://svn.apache.org/viewvc?rev=959091&view=rev
Log:
* subversion/tests/cmdline/svntest/factory.py: Minor improvements.

Modified:
    subversion/trunk/subversion/tests/cmdline/svntest/factory.py

Modified: subversion/trunk/subversion/tests/cmdline/svntest/factory.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svntest/factory.py?rev=959091&r1=959090&r2=959091&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/svntest/factory.py (original)
+++ subversion/trunk/subversion/tests/cmdline/svntest/factory.py Tue Jun 29 20:27:38 2010
@@ -434,6 +434,9 @@ class TestFactory:
       if second in ['update','up']:
         return self.cmd_svn_update(args[2:])
 
+      if second in ['switch','sw']:
+        return self.cmd_svn_switch(args[2:])
+
       if second in ['copy', 'cp',
                     'move', 'mv', 'rename', 'ren']:
         return self.cmd_svn_copy_move(args[1:])
@@ -596,7 +599,7 @@ class TestFactory:
 
 
   def cmd_svn_update(self, update_args):
-    "Runs svnn update, looks what happened and writes the script for it."
+    "Runs svn update, looks what happened and writes the script for it."
 
     pyargs, runargs, do_chdir, targets = self.args2svntest(
                                   update_args, True, self.keep_args_of, 0)
@@ -637,6 +640,72 @@ class TestFactory:
     return py
 
 
+  def cmd_svn_switch(self, switch_args):
+    "Runs svn switch, looks what happened and writes the script for it."
+
+    pyargs, runargs, do_chdir, targets = self.args2svntest(
+                                  switch_args, True, self.keep_args_of, 0)
+
+    # Sort out the targets. We need one URL and one wc node, in that order.
+    if len(targets) < 2:
+      raise Failure("Sorry, I'm currently enforcing two targets for svn " +
+                    "switch. If you want to supply less, remove this " +
+                    "check and implement whatever seems appropriate.")
+
+    wc_arg = targets[1]
+    del pyargs[wc_arg.argnr]
+    del runargs[wc_arg.argnr]
+    url_arg = targets[0]
+    del pyargs[url_arg.argnr]
+    del runargs[url_arg.argnr]
+
+    wc = wc_arg.wc
+
+    pychdir = self.chdir(do_chdir, wc)
+
+    #if '--force' in runargs:
+    #  self.really_safe_rmtree(wc_arg.runarg)
+
+    code, output, err = main.run_svn('Maybe', 'sw',
+                                     url_arg.runarg, wc_arg.runarg,
+                                     *runargs)
+
+    py = ""
+
+    if code == 0 and len(err) < 1:
+      # write a test that expects success
+
+      actual_out = tree.build_tree_from_checkout(output)
+      py = ("expected_output = " +
+            self.tree2py(actual_out, wc) + "\n\n")
+
+      pydisk = self.get_current_disk(wc)
+      py += pydisk
+
+      pystatus = self.get_current_status(wc)
+      py += pystatus
+
+      py += pychdir
+      py += ("actions.run_and_verify_switch(" + wc.py + ", " +
+             wc_arg.pyarg + ", " + url_arg.pyarg + ", " +
+             "expected_output, expected_disk, expected_status, " +
+             "None, None, None, None, None, False")
+    else:
+      # write a test that expects error
+      py = "expected_error = " + self.strlist2py(err) + "\n\n"
+      py += pychdir
+      py += ("actions.run_and_verify_switch(" + wc.py + ", " +
+             wc_arg.pyarg + ", " + url_arg.pyarg + ", " +
+             "None, None, None, expected_error, None, None, None, None, False")
+
+    if len(pyargs) > 0:
+      py += ', ' + ', '.join(pyargs)
+    py += ")"
+    py += self.chdir_back(do_chdir)
+
+    return py
+
+
   def cmd_svn_checkout(self, checkout_args):
     "Runs svn checkout, looks what happened and writes the script for it."
 
@@ -661,8 +730,8 @@ class TestFactory:
 
     pychdir = self.chdir(do_chdir, wc)
 
-    if '--force' in runargs:
-      self.really_safe_rmtree(wc_arg.runarg)
+    #if '--force' in runargs:
+    #  self.really_safe_rmtree(wc_arg.runarg)
 
     code, output, err = main.run_svn('Maybe', 'co',
                                      url_arg.runarg, wc_arg.runarg,
@@ -761,7 +830,7 @@ class TestFactory:
           if i != len(echo_args)-1:
             raise Failure("don't understand: echo " + " ".join(echo_args))
 
-        contents = " ".join(echo_args[:i])
+        contents = " ".join(echo_args[:i]) + '\n'
 
     if target_arg is None:
       raise Failure("echo needs a '>' pipe to a file name: echo " +
@@ -801,8 +870,12 @@ class TestFactory:
     for arg in rm_args:
       if not arg.startswith('-'):
         target = self.path2svntest(arg)
-        self.really_safe_rmtree(target.runarg)
-        out += "main.safe_rmtree(" + target.pyarg + ")\n"
+        if os.path.isfile(target.runarg):
+          os.remove(target.runarg)
+          out += "os.remove(" + target.pyarg + ")\n"
+        else:
+          self.really_safe_rmtree(target.runarg)
+          out += "main.safe_rmtree(" + target.pyarg + ")\n"
     return out
 
 
@@ -1030,16 +1103,18 @@ class TestFactory:
   def get_sorted_vars_by_pathlen(self):
     """Compose a listing of variable names to be expanded in script output.
     This is intended to be stored in self.sorted_vars_by_pathlen."""
-    list = []
+    lst = []
 
     for dict in [self.vars, self.other_wc_dirs]:
       for name in dict:
         runpath = dict[name][1]
+        if not runpath:
+          continue
         strlen = len(runpath)
         item = [strlen, name, runpath]
-        bisect.insort(list, item)
+        bisect.insort(lst, item)
 
-    return list
+    return lst
 
 
   def get_sorted_var_names(self):
@@ -1275,6 +1350,10 @@ class TestFactory:
         # Check if the actual tree had this anyway all the way through.
         name = mod[0]
         val = mod[1]
+
+        if name == 'contents' and val is None:
+          continue;
+
         def check_node(node):
           if (
               (name == 'contents' and node.contents == val)
@@ -1397,7 +1476,7 @@ class TestFactory:
     return py
 
 
-  def path2svntest(self, path, argnr=None):
+  def path2svntest(self, path, argnr=None, do_remove_on_new_wc_path=True):
     """Given an input argument, do one hell of a path expansion on it.
     ARGNR is simply inserted into the resulting Target.
     Returns a self.Target instance.
@@ -1494,12 +1573,18 @@ class TestFactory:
     if varname in self.other_wc_dirs:
       return self.other_wc_dirs[varname][1]
 
-    # else, we must still create one.
-    path = self.sbox.add_wc_path(suffix, do_remove)
-    py = "sbox.add_wc_path(" + str2py(suffix)
-    if not do_remove:
-      py += ", remove=False"
-    py += ')'
+    # see if there is a wc already in the sbox
+    path = self.sbox.wc_dir + '.' + suffix
+    if path in self.sbox.test_paths:
+      py = "sbox.wc_dir + '." + suffix + "'"
+    else:
+      # else, we must still create one.
+      path = self.sbox.add_wc_path(suffix, do_remove)
+      py = "sbox.add_wc_path(" + str2py(suffix)
+      if not do_remove:
+        py += ", remove=False"
+      py += ')'
+
     value = [py, path]
     self.other_wc_dirs[varname] = [py, path]
     self.sorted_vars_by_pathlen = self.get_sorted_vars_by_pathlen()