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/07 10:59:34 UTC

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

Author: dannas
Date: Mon Jun  7 08:59:33 2010
New Revision: 952149

URL: http://svn.apache.org/viewvc?rev=952149&view=rev
Log:
Create XFailing testcase for 'git unidiffs'. 

The test handles added, deleted and modified paths and passes if
SVN_EXPERIMENTAL_PATCH is defined.

* subversion/tests/cmdline/diff_tests.py
  (make_git_diff_header): New.
  (diff_git_format): New test.
  (test_list): Add diff_git_format as XFailing.

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=952149&r1=952148&r2=952149&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/diff_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/diff_tests.py Mon Jun  7 08:59:33 2010
@@ -52,6 +52,62 @@ 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):
+  """ 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."""
+
+  path_as_shown = path.replace('\\', '/')
+  if copyfrom:
+    copyfrom_as_shown = copyfrom.replace('\\', '/')
+
+  if add:
+    return [
+      "Index: " + path_as_shown + "\n",
+      "===================================================================\n",
+      "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",
+    ]
+  elif delete:
+    return [
+      "Index: " + path_as_shown + "\n",
+      "===================================================================\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",
+      "+++ /dev/null\t(" + new_tag + ")\n",
+    ]
+  elif cp:
+    return [
+      "Index: " + path_as_shown + "\n",
+      "===================================================================\n",
+      "diff --git a/" + copyfrom_as_shown + " b/" + path_as_shown + "\n",
+      "copy from " + copyfrom_as_shown + "\n",
+      "copy to " + path_as_shown + "\n",
+    ]
+  elif mv:
+    return [
+      "Index: " + path_as_shown + "\n",
+      "===================================================================\n",
+      "diff --git a/" + copyfrom_as_shown + " b/" + path_as_shown + "\n",
+      "rename from " + copyfrom_as_shown + "\n",
+      "rename to " + path_as_shown + "\n",
+    ]
+  else:
+    return [
+      "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",
+    ]
+
+
 ######################################################################
 # Diff output checker
 #
@@ -3090,6 +3146,54 @@ def diff_preexisting_rev_against_local_a
   verify_expected_output(diff_output, "-This is the file 'beta'.")
   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"
+  sbox.build()
+  wc_dir = sbox.wc_dir
+  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
+
+  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) + [
+    "@@ -1 +0,0 @@\n",
+    "-This is the file 'mu'.\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) + [
+    "@@ -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]
+
+  for line in diff_output:
+    print line,
+
+  print "\n"
+  for line in expected_output_lines:
+    print line,
+
+  ### 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
+
 ########################################################################
 #Run the tests
 
@@ -3146,6 +3250,7 @@ test_list = [ None,
               diff_external_diffcmd,
               XFail(diff_url_against_local_mods),
               XFail(diff_preexisting_rev_against_local_add),
+              XFail(diff_git_format),
               ]
 
 if __name__ == '__main__':