Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[webkitscmpy] Allow repositories to define custom setup commands
https://bugs.webkit.org/show_bug.cgi?id=231345
<rdar://problem/83960249>

Reviewed by Dewei Zhu.

* Scripts/git-webkit: Define changelog conflict resolver.
* Scripts/libraries/webkitscmpy/setup.py: Add inspect2 as dependency, bump version.
* Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
* Scripts/libraries/webkitscmpy/webkitscmpy/program/__init__.py:
(main): Attempt to resolve additional_setup function.
* Scripts/libraries/webkitscmpy/webkitscmpy/program/setup.py:
(Setup.github): Invoke additional_setup function, if it exists.
(Setup.git): Ditto.

Canonical link: https://commits.webkit.org/243086@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@284283 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information
JonWBedard committed Oct 15, 2021
1 parent bee6896 commit d7527b8
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 9 deletions.
17 changes: 17 additions & 0 deletions Tools/ChangeLog
@@ -1,3 +1,20 @@
2021-10-15 Jonathan Bedard <jbedard@apple.com>

[webkitscmpy] Allow repositories to define custom setup commands
https://bugs.webkit.org/show_bug.cgi?id=231345
<rdar://problem/83960249>

Reviewed by Dewei Zhu.

* Scripts/git-webkit: Define changelog conflict resolver.
* Scripts/libraries/webkitscmpy/setup.py: Add inspect2 as dependency, bump version.
* Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
* Scripts/libraries/webkitscmpy/webkitscmpy/program/__init__.py:
(main): Attempt to resolve additional_setup function.
* Scripts/libraries/webkitscmpy/webkitscmpy/program/setup.py:
(Setup.github): Invoke additional_setup function, if it exists.
(Setup.git): Ditto.

2021-10-15 BJ Burg <bburg@apple.com>

[Cocoa] Web Inspector: handle Promise objects returned from evaluateScriptInExtensionTab
Expand Down
23 changes: 22 additions & 1 deletion Tools/Scripts/git-webkit
Expand Up @@ -26,7 +26,8 @@ import os
import sys

import webkitpy
from webkitscmpy import local, program, remote
from webkitcorepy import run
from webkitscmpy import local, program, remote, Contributor, log


def is_webkit_filter(to_return):
Expand All @@ -45,10 +46,30 @@ def is_webkit_filter(to_return):
return callback


def additional_setup(args, repository):
if not isinstance(repository, local.Git):
return 0

log.warning('Setting merging behavior for changelogs...')
if run([
repository.executable(),
'config', 'merge.changelog.driver',
'perl {} --merge-driver -c %O %A %B'.format(os.path.join(
os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))),
'OpenSource', 'Tools', 'Scripts', 'resolve-ChangeLogs',
)),
], capture_output=True, cwd=repository.root_path).returncode:
sys.stderr.write('Failed to set the git merging behaivor for changelogs...\n')
return 1
log.warning('Set merging behavior for changelogs!')
return 0


if '__main__' == __name__:
sys.exit(program.main(
path=os.path.dirname(__file__),
identifier_template=is_webkit_filter('Canonical link: https://commits.webkit.org/{}'),
subversion=is_webkit_filter('https://svn.webkit.org/repository/webkit'),
additional_setup=is_webkit_filter(additional_setup),
))

4 changes: 2 additions & 2 deletions Tools/Scripts/libraries/webkitscmpy/setup.py
Expand Up @@ -29,7 +29,7 @@ def readme():

setup(
name='webkitscmpy',
version='2.2.11',
version='2.2.12',
description='Library designed to interact with git and svn repositories.',
long_description=readme(),
classifiers=[
Expand Down Expand Up @@ -58,7 +58,7 @@ def readme():
'webkitscmpy.test',
],
scripts=['git-webkit'],
install_requires=['fasteners', 'monotonic', 'webkitcorepy', 'xmltodict'],
install_requires=['fasteners', 'inspect2', 'monotonic', 'webkitcorepy', 'xmltodict'],
include_package_data=True,
zip_safe=False,
)
5 changes: 4 additions & 1 deletion Tools/Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py
Expand Up @@ -46,13 +46,16 @@ def _maybe_add_webkitcorepy_path():
"Please install webkitcorepy with `pip install webkitcorepy --extra-index-url <package index URL>`"
)

version = Version(2, 2, 11)
version = Version(2, 2, 12)

AutoInstall.register(Package('fasteners', Version(0, 15, 0)))
AutoInstall.register(Package('monotonic', Version(1, 5)))
AutoInstall.register(Package('whichcraft', Version(0, 6, 1)))
AutoInstall.register(Package('xmltodict', Version(0, 11, 0)))

if sys.version_info < (3, 0):
AutoInstall.register(Package('inspect2', Version(0, 1, 2)))

from webkitscmpy.contributor import Contributor
from webkitscmpy.commit import Commit
from webkitscmpy.pull_request import PullRequest
Expand Down
Expand Up @@ -42,7 +42,10 @@
from webkitscmpy import local, log, remote


def main(args=None, path=None, loggers=None, contributors=None, identifier_template=None, subversion=None):
def main(
args=None, path=None, loggers=None, contributors=None,
identifier_template=None, subversion=None, additional_setup=None,
):
logging.basicConfig(level=logging.WARNING)

loggers = [logging.getLogger(), webkitcorepy_log, log] + (loggers or [])
Expand Down Expand Up @@ -110,6 +113,13 @@ def main(args=None, path=None, loggers=None, contributors=None, identifier_templ
if callable(subversion):
subversion = subversion(repository)

if sys.version_info > (3, 0):
import inspect
else:
import inspect2 as inspect
if callable(additional_setup) and list(inspect.signature(additional_setup).parameters.keys()) == ['repository']:
additional_setup = additional_setup(repository)

if not getattr(parsed, 'main', None):
parser.print_help()
return -1
Expand All @@ -119,4 +129,5 @@ def main(args=None, path=None, loggers=None, contributors=None, identifier_templ
repository=repository,
identifier_template=identifier_template,
subversion=subversion,
additional_setup=additional_setup,
)
17 changes: 13 additions & 4 deletions Tools/Scripts/libraries/webkitscmpy/webkitscmpy/program/setup.py
Expand Up @@ -34,11 +34,16 @@ class Setup(Command):
help = 'Configure local settings for the current repository'

@classmethod
def github(cls, args, repository, **kwargs):
def github(cls, args, repository, additional_setup=None, **kwargs):
log.warning('Saving GitHub credentials in system credential store...')
username, access_token = repository.credentials(required=True)
log.warning('GitHub credentials saved via Keyring!')

# Any additional setup passed to main
result = 0
if additional_setup:
result += additional_setup(args, repository)

log.warning('Verifying user owned fork...')
auth = HTTPBasicAuth(username, access_token)
response = requests.get('{}/repos/{}/{}'.format(
Expand All @@ -48,7 +53,7 @@ def github(cls, args, repository, **kwargs):
), auth=auth, headers=dict(Accept='application/vnd.github.v3+json'))
if response.status_code == 200:
log.warning("User already owns a fork of '{}'!".format(repository.name))
return 0
return result

if repository.owner == username or args.defaults or Terminal.choose(
"Create a private fork of '{}' belonging to '{}'".format(repository.name, username),
Expand All @@ -70,10 +75,10 @@ def github(cls, args, repository, **kwargs):
sys.stderr.write("Failed to create a fork of '{}' belonging to '{}'\n".format(repository.name, username))
return 1
log.warning("Created a private fork of '{}' belonging to '{}'!".format(repository.name, username))
return 0
return result

@classmethod
def git(cls, args, repository, **kwargs):
def git(cls, args, repository, additional_setup=None, **kwargs):
global_config = local.Git.config()
result = 0

Expand Down Expand Up @@ -160,6 +165,10 @@ def git(cls, args, repository, **kwargs):
else:
log.warning("Set git editor to '{}'".format(editor_name))

# Any additional setup passed to main
if additional_setup:
result += additional_setup(args, repository)

# Only configure GitHub if the URL is a GitHub URL
rmt = repository.remote()
if not isinstance(rmt, remote.GitHub):
Expand Down

0 comments on commit d7527b8

Please sign in to comment.