Title: [272172] trunk/Tools
Revision
272172
Author
[email protected]
Date
2021-02-01 13:24:39 -0800 (Mon, 01 Feb 2021)

Log Message

[webkitscmpy] Use shutil to find scm executable paths
https://bugs.webkit.org/show_bug.cgi?id=221220

Reviewed by Jonathan Bedard.

Using /usr/bin/which is not a cross platform way to determine the path to an executable.
In Python 3 shutil gailed a which function which provides the same functionality as the
which executable and works on Windows.

Added the whichcraft library which is a backport of shutil.which to Python 2.7. If
Python 3 is available it just uses shutil directly. The library can be dropped once Python
2.7 support is jettisoned.

* Scripts/libraries/webkitscmpy/setup.py:
* Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py:
* Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:
(Scm.executable):
* Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
* Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/svn.py:

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (272171 => 272172)


--- trunk/Tools/ChangeLog	2021-02-01 21:18:59 UTC (rev 272171)
+++ trunk/Tools/ChangeLog	2021-02-01 21:24:39 UTC (rev 272172)
@@ -1,3 +1,25 @@
+2021-02-01  Don Olmstead  <[email protected]>
+
+        [webkitscmpy] Use shutil to find scm executable paths
+        https://bugs.webkit.org/show_bug.cgi?id=221220
+
+        Reviewed by Jonathan Bedard.
+
+        Using /usr/bin/which is not a cross platform way to determine the path to an executable.
+        In Python 3 shutil gailed a which function which provides the same functionality as the
+        which executable and works on Windows.
+
+        Added the whichcraft library which is a backport of shutil.which to Python 2.7. If
+        Python 3 is available it just uses shutil directly. The library can be dropped once Python
+        2.7 support is jettisoned.
+
+        * Scripts/libraries/webkitscmpy/setup.py:
+        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py:
+        * Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:
+        (Scm.executable):
+        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
+        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/svn.py:
+
 2021-02-01  Jonathan Bedard  <[email protected]>
 
         [webkitcorepy] Support machines without Unix signal handling

Modified: trunk/Tools/Scripts/libraries/webkitscmpy/setup.py (272171 => 272172)


--- trunk/Tools/Scripts/libraries/webkitscmpy/setup.py	2021-02-01 21:18:59 UTC (rev 272171)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/setup.py	2021-02-01 21:24:39 UTC (rev 272172)
@@ -59,7 +59,7 @@
         'webkitscmpy.test',
     ],
     scripts=['git-webkit'],
-    install_requires=['fasteners', 'monotonic', 'webkitcorepy', 'xmltodict'],
+    install_requires=['fasteners', 'monotonic', 'webkitcorepy', 'whichcraft', 'xmltodict'],
     include_package_data=True,
     zip_safe=False,
 )

Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py (272171 => 272172)


--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py	2021-02-01 21:18:59 UTC (rev 272171)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py	2021-02-01 21:24:39 UTC (rev 272172)
@@ -46,12 +46,13 @@
         "Please install webkitcorepy with `pip install webkitcorepy --extra-index-url <package index URL>`"
     )
 
-version = Version(0, 9, 6)
+version = Version(0, 9, 7)
 
 AutoInstall.register(Package('entrypoints', Version(0, 3, 0)))
 AutoInstall.register(Package('fasteners', Version(0, 15, 0)))
 AutoInstall.register(Package('keyring', Version(7, 3, 1)))
 AutoInstall.register(Package('monotonic', Version(1, 5)))
+AutoInstall.register(Package('whichcraft', Version(0, 6, 1)))
 AutoInstall.register(Package('xmltodict', Version(0, 11, 0)))
 
 # This is needed for python-keyring.

Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py (272171 => 272172)


--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py	2021-02-01 21:18:59 UTC (rev 272171)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py	2021-02-01 21:24:39 UTC (rev 272172)
@@ -28,6 +28,8 @@
 from webkitcorepy import run
 from webkitscmpy import ScmBase
 
+# TODO: Use shutil directly when Python 2.7 is removed
+from whichcraft import which
 
 class Scm(ScmBase):
     # Projects can define for themselves what constitutes a development vs a production branch,
@@ -37,16 +39,11 @@
 
     @classmethod
     def executable(cls, program):
-        for candidate in ['/usr/bin', '/usr/bin/local']:
-            candidate = os.path.join(candidate, program)
-            if os.path.exists(candidate):
-                return candidate
+        path = which(program)
+        if path is None:
+            raise OSError("Cannot find '{}' program".format(program))
+        return os.path.realpath(path)
 
-        which = run(['/usr/bin/which', program], capture_output=True, encoding='utf-8')
-        if not which.returncode:
-            return os.path.realpath(which.stdout.rstrip())
-        raise OSError("Cannot find '{}' program".format(program))
-
     @classmethod
     def from_path(cls, path,  contributors=None):
         from webkitscmpy import local

Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py (272171 => 272172)


--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py	2021-02-01 21:18:59 UTC (rev 272171)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py	2021-02-01 21:24:39 UTC (rev 272172)
@@ -147,12 +147,6 @@
 
         super(Git, self).__init__(
             mocks.Subprocess.Route(
-                '/usr/bin/which', 'git',
-                completion=mocks.ProcessCompletion(
-                    returncode=0,
-                    stdout='{}\n'.format(self.executable),
-                ),
-            ), mocks.Subprocess.Route(
                 self.executable, 'status',
                 cwd=self.path,
                 generator=lambda *args, **kwargs:

Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/svn.py (272171 => 272172)


--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/svn.py	2021-02-01 21:18:59 UTC (rev 272171)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/svn.py	2021-02-01 21:24:39 UTC (rev 272172)
@@ -65,12 +65,6 @@
 
         super(Svn, self).__init__(
             mocks.Subprocess.Route(
-                '/usr/bin/which', 'svn',
-                completion=mocks.ProcessCompletion(
-                    returncode=0,
-                    stdout='{}\n'.format(self.executable),
-                ),
-            ), mocks.Subprocess.Route(
                 self.executable, 'info',
                 cwd=self.path,
                 generator=lambda *args, **kwargs: self._info(cwd=kwargs.get('cwd', ''))
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to