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', ''))