Author: svn-role
Date: Fri Nov  3 04:00:03 2023
New Revision: 1913547

URL: http://svn.apache.org/viewvc?rev=1913547&view=rev
Log:
Merge the r1912724 group from trunk:

 * r1912724, r1912743
   Python bindings error handling
   Justification:
     Improve documentation and error message. Issue #1778
   Votes:
     +1: dsahlberg, jamessan

Modified:
    subversion/branches/1.14.x/   (props changed)
    subversion/branches/1.14.x/STATUS
    subversion/branches/1.14.x/subversion/bindings/swig/python/svn/fs.py
    subversion/branches/1.14.x/subversion/bindings/swig/python/tests/fs.py

Propchange: subversion/branches/1.14.x/
------------------------------------------------------------------------------
  Merged /subversion/trunk:r1912724,1912743

Modified: subversion/branches/1.14.x/STATUS
URL: 
http://svn.apache.org/viewvc/subversion/branches/1.14.x/STATUS?rev=1913547&r1=1913546&r2=1913547&view=diff
==============================================================================
--- subversion/branches/1.14.x/STATUS (original)
+++ subversion/branches/1.14.x/STATUS Fri Nov  3 04:00:03 2023
@@ -42,11 +42,3 @@ Veto-blocked changes:
 
 Approved changes:
 =================
-
- * r1912724, r1912743
-   Python bindings error handling
-   Justification:
-     Improve documentation and error message. Issue #1778
-   Votes:
-     +1: dsahlberg, jamessan
-

Modified: subversion/branches/1.14.x/subversion/bindings/swig/python/svn/fs.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/1.14.x/subversion/bindings/swig/python/svn/fs.py?rev=1913547&r1=1913546&r2=1913547&view=diff
==============================================================================
--- subversion/branches/1.14.x/subversion/bindings/swig/python/svn/fs.py 
(original)
+++ subversion/branches/1.14.x/subversion/bindings/swig/python/svn/fs.py Fri 
Nov  3 04:00:03 2023
@@ -23,6 +23,7 @@
 #    under the License.
 ######################################################################
 
+import errno
 from libsvn.fs import *
 from svn.core import _unprefix_names, Pool, _as_list
 _unprefix_names(locals(), 'svn_fs_')
@@ -130,6 +131,18 @@ class FileDiff:
     return self.tempfile1, self.tempfile2
 
   def get_pipe(self):
+    """Perform diff and return a file object from which the output can
+    be read.
+
+    When DIFFOPTIONS is None (the default), use svn's internal diff.
+
+    With any other DIFFOPTIONS, exec the external diff found on PATH,
+    passing it DIFFOPTIONS. On Windows, exec diff.exe rather than
+    diff. If a diff utility is not installed or found on PATH, throws
+    FileNotFoundError. Caveat: On some systems, including Windows, an
+    external diff may not be available unless installed and added to
+    PATH manually.
+    """
     self.get_files()
 
     # If diffoptions were provided, then the diff command needs to be
@@ -142,8 +155,17 @@ class FileDiff:
             + [self.tempfile1, self.tempfile2]
 
       # open the pipe, and return the file object for reading from the child.
-      p = _subprocess.Popen(cmd, stdout=_subprocess.PIPE, bufsize=-1,
-                            close_fds=_sys.platform != "win32")
+      try:
+        p = _subprocess.Popen(cmd, stdout=_subprocess.PIPE, bufsize=-1,
+                              close_fds=_sys.platform != "win32")
+      # When removing Python 2 support: Change to FileNotFoundError and 
+      # remove check for ENOENT (FileNotFoundError "Corresponds to errno
+      # ENOENT" according to documentation)
+      except OSError as err:
+        if err.errno == errno.ENOENT:
+          err.strerror = "External diff command not found in PATH"
+        raise err
+
       return _PopenStdoutWrapper(p)
 
     else:

Modified: subversion/branches/1.14.x/subversion/bindings/swig/python/tests/fs.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/1.14.x/subversion/bindings/swig/python/tests/fs.py?rev=1913547&r1=1913546&r2=1913547&view=diff
==============================================================================
--- subversion/branches/1.14.x/subversion/bindings/swig/python/tests/fs.py 
(original)
+++ subversion/branches/1.14.x/subversion/bindings/swig/python/tests/fs.py Fri 
Nov  3 04:00:03 2023
@@ -107,6 +107,9 @@ class SubversionFSTestCase(unittest.Test
     try:
       diffout, differr = Popen(["diff"], stdin=PIPE, stderr=PIPE).communicate()
 
+    # When removing Python 2 support: Change to FileNotFoundError and 
+    # remove check for ENOENT (FileNotFoundError "Corresponds to errno
+    # ENOENT" according to documentation)
     except OSError as err:
       if err.errno == errno.ENOENT:
         self.skipTest("'diff' command not present")


Reply via email to