You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by da...@apache.org on 2010/06/08 11:26:51 UTC

svn commit: r952586 - /subversion/trunk/subversion/tests/cmdline/diff_tests.py

Author: dannas
Date: Tue Jun  8 09:26:50 2010
New Revision: 952586

URL: http://svn.apache.org/viewvc?rev=952586&view=rev
Log:
Add url->wc test for creating 'git diffs'. At the same time, reformat the
existing test for wc-wc to use be able to display what lines are
differing instead of just returning a failure.

* subversion/tests/cmdline/diff_tests.py
  (make_git_diff_header): Add parameter 'src_label' and 'dst_label' for
    handling the special text on the form '(.../url_or_path) that is
    added to the diff label when we're contacting the repository for the
    diff.
  (diff_git_format): Rename to ..
  (diff_git_format_wc_wc): .. this and use run_and_verify_svn() for 
    checking output.
  (diff_git_format_url_wc): New test.
  (test_list): Update to incorporate the new tests.

Modified:
    subversion/trunk/subversion/tests/cmdline/diff_tests.py

Modified: subversion/trunk/subversion/tests/cmdline/diff_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/diff_tests.py?rev=952586&r1=952585&r2=952586&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/diff_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/diff_tests.py Tue Jun  8 09:26:50 2010
@@ -52,17 +52,28 @@ def make_diff_header(path, old_tag, new_
     "+++ " + path_as_shown + "\t(" + new_tag + ")\n",
     ]
 
-def make_git_diff_header(path, old_tag, new_tag, add=False, delete=False,
-                         cp=False, mv=False, copyfrom=None):
+def make_git_diff_header(path, old_tag, new_tag, add=False, src_label=None,
+                         dst_label=None, delete=False, cp=False, mv=False, 
+                         copyfrom=None):
   """ Generate the expected 'git diff' header for file PATH, with its old
-  and new versions described in parentheses by OLD_TAG and NEW_TAG. ADD,
-  DELETE, CP and MV denotes the operations performed on the file. COPYFROM
-  is the source of a copy or move.  Return the header as an array of
-  newline-terminated strings."""
+  and new versions described in parentheses by OLD_TAG and NEW_TAG.
+  SRC_LABEL and DST_LABEL are paths or urls that are added to the diff
+  labels if we're diffing against the repository. ADD, DELETE, CP and MV
+  denotes the operations performed on the file. COPYFROM is the source of a
+  copy or move.  Return the header as an array of newline-terminated
+  strings."""
 
   path_as_shown = path.replace('\\', '/')
   if copyfrom:
     copyfrom_as_shown = copyfrom.replace('\\', '/')
+  if src_label:
+    src_label = '\t(.../' + src_label + ')'
+  else:
+    src_label = ''
+  if dst_label:
+    dst_label = '\t(.../' + dst_label + ')'
+  else:
+    dst_label = ''
 
   if add:
     return [
@@ -71,7 +82,7 @@ def make_git_diff_header(path, old_tag, 
       "diff --git a/" + path_as_shown + " b/" + path_as_shown + "\n",
       "new file mode 10644\n",
       "--- /dev/null\t(" + old_tag + ")\n",
-      "+++ b/" + path_as_shown + "\t(" + new_tag + ")\n",
+      "+++ b/" + path_as_shown + dst_label + "\t(" + new_tag + ")\n",
     ]
   elif delete:
     return [
@@ -79,7 +90,7 @@ def make_git_diff_header(path, old_tag, 
       "===================================================================\n",
       "diff --git a/" + path_as_shown + " b/" + path_as_shown + "\n",
       "deleted file mode 10644\n",
-      "--- a/" + path_as_shown + "\t(" + old_tag + ")\n",
+      "--- a/" + path_as_shown + src_label + "\t(" + old_tag + ")\n",
       "+++ /dev/null\t(" + new_tag + ")\n",
     ]
   elif cp:
@@ -103,8 +114,8 @@ def make_git_diff_header(path, old_tag, 
       "Index: " + path_as_shown + "\n",
       "===================================================================\n",
       "diff --git a/" + path_as_shown + " b/" + path_as_shown + "\n",
-      "--- a/" + path_as_shown + "\t(" + old_tag + ")\n",
-      "+++ b/" + path_as_shown + "\t(" + new_tag + ")\n",
+      "--- a/" + path_as_shown + src_label + "\t(" + old_tag + ")\n",
+      "+++ b/" + path_as_shown + dst_label + "\t(" + new_tag + ")\n",
     ]
 
 
@@ -3147,8 +3158,8 @@ def diff_preexisting_rev_against_local_a
   verify_expected_output(diff_output, "+Re-created file beta.")
 
 # Passes with SVN_EXPERIMENTAL_PATCH defined
-def diff_git_format(sbox):
-  "create a diff in git unidiff format"
+def diff_git_format_wc_wc(sbox):
+  "create a diff in git unidiff format for wc-wc"
   sbox.build()
   wc_dir = sbox.wc_dir
   iota_path = os.path.join(wc_dir, 'iota')
@@ -3161,31 +3172,65 @@ def diff_git_format(sbox):
 
   ### We're not testing copied or moved paths
 
-  exit_code, diff_output, err = svntest.actions.run_and_verify_svn(
-    None, None, [], 'diff', wc_dir)
-  expected_output_lines = make_git_diff_header(mu_path, "revision 1", "working copy", 
-                           delete=True) + [
+  expected_output = make_git_diff_header(mu_path, "revision 1", 
+                                         "working copy", 
+                                         delete=True) + [
     "@@ -1 +0,0 @@\n",
     "-This is the file 'mu'.\n",
+  ] + make_git_diff_header(new_path, "revision 0", "working copy", 
+                           add=True) + [
+    "@@ -0,0 +1 @@\n",
+    "+This is the file 'new'.\n",
   ] +  make_git_diff_header(iota_path, "revision 1", 
                             "working copy") + [
     "@@ -1 +1,2 @@\n",
     " This is the file 'iota'.\n",
     "+Changed 'iota'.\n",
-  ] + make_git_diff_header(new_path, "revision 0", "working copy", 
-                           add=True) + [
+  ]
+
+  svntest.actions.run_and_verify_svn(None, expected_output, [], 'diff', 
+                                     wc_dir)
+
+# Passes with SVN_EXPERIMENTAL_PATCH defined
+def diff_git_format_url_wc(sbox):
+  "create a diff in git unidiff format for url-wc"
+  sbox.build()
+  wc_dir = sbox.wc_dir
+  repo_url = sbox.repo_url
+  iota_path = os.path.join(wc_dir, 'iota')
+  mu_path = os.path.join(wc_dir, 'A', 'mu')
+  new_path = os.path.join(wc_dir, 'new')
+  svntest.main.file_append(iota_path, "Changed 'iota'.\n")
+  svntest.main.file_append(new_path, "This is the file 'new'.\n")
+  svntest.main.run_svn(None, 'add', new_path)
+  svntest.main.run_svn(None, 'rm', mu_path)
+
+  ### We're not testing copied or moved paths
+
+  svntest.main.run_svn(None, 'commit', '-m', 'Committing changes', wc_dir)
+  svntest.main.run_svn(None, 'up', wc_dir)
+
+  expected_output = make_git_diff_header(new_path, "revision 0", "revision 2", 
+                                         dst_label=wc_dir, add=True) + [
     "@@ -0,0 +1 @@\n",
     "+This is the file 'new'.\n",
-  ] 
-
-  # Makes diff output look the same on all platforms.
-  def strip_eols(lines):
-    return [x.replace("\r", "").replace("\n", "") for x in lines]
+  ] + make_git_diff_header(mu_path, "revision 1", 
+                           "working copy", 
+                           src_label=repo_url,
+                           delete=True) + [
+    "@@ -1 +0,0 @@\n",
+    "-This is the file 'mu'.\n",
+  ] +  make_git_diff_header(iota_path, "revision 1", 
+                            "working copy", src_label=repo_url,
+                            dst_label=wc_dir) + [
+    "@@ -1 +1,2 @@\n",
+    " This is the file 'iota'.\n",
+    "+Changed 'iota'.\n",
+  ]
 
-  ### It would be nice to know what lines are not matching in case of a
-  ### failure.
-  if strip_eols(diff_output) != strip_eols(expected_output_lines):
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, expected_output, [], 'diff', 
+                                     '--old', repo_url + '@1', '--new',
+                                     wc_dir)
 
 ########################################################################
 #Run the tests
@@ -3243,7 +3288,8 @@ test_list = [ None,
               diff_external_diffcmd,
               XFail(diff_url_against_local_mods),
               XFail(diff_preexisting_rev_against_local_add),
-              XFail(diff_git_format),
+              XFail(diff_git_format_wc_wc),
+              XFail(diff_git_format_url_wc),
               ]
 
 if __name__ == '__main__':