1
0
Fork 0

added script to apply arc patch

This commit is contained in:
Christian Kühnel 2019-10-18 13:59:58 +02:00
parent e313cc0d95
commit a33d2ce141
3 changed files with 65 additions and 1 deletions

View file

@ -18,6 +18,9 @@ pipeline {
string(name: 'DIFF_ID') string(name: 'DIFF_ID')
string(name: 'PHID') string(name: 'PHID')
} }
environment {
CONDUIT_TOKEN = credentials('phabricator-conduit-token')
}
stages { stages {
stage("git checkout"){ stage("git checkout"){
steps { steps {
@ -31,7 +34,7 @@ pipeline {
} }
stage('arc patch') { stage('arc patch') {
steps { steps {
echo 'TODO: arc patch' sh 'llvm-premerge-checks/scripts/phabtalk/apply_patch.py --host="https://reviews.llvm.org" --conduit-token="${CONDUIT_TOKEN}"'
} }
} }
stage('CMake') { stage('CMake') {

View file

@ -0,0 +1,2 @@
This folder contains Python scripts that to Phabricator.
They require a few libraries listed in `requirements.txt`.

59
scripts/phabtalk/apply_patch.py Executable file
View file

@ -0,0 +1,59 @@
#!/bin/env python3
# Copyright 2019 Google LLC
#
# Licensed under the the Apache License v2.0 with LLVM Exceptions (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://llvm.org/LICENSE.txt
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import argparse
import os
import subprocess
from phabricator import Phabricator
def main():
args = _parse_args()
diff_id = os.environ['DIFF_ID']
phid = os.environ['PHID']
phab = Phabricator(token=args.conduit_token, host=args.host+'/api/')
phab.update_interfaces()
_git_checkout(_get_parent_hash(diff_id, phab))
_apply_patch(diff_id, args.conduit_token, args.host)
def _get_parent_hash(diff_id: str, phab:Phabricator) -> str:
diff = phab.differential.getdiff(diff_id=diff_id)
return diff['sourceControlBaseRevision']
def _git_checkout(git_hash:str):
subprocess.check_call('git reset --hard {}'.format(git_hash), shell=True)
subprocess.check_call('git clean -fdx', shell=True)
def _apply_patch(diff_id: str, conduit_token: str, host: str):
cmd = 'arc patch --nobranch --no-ansi --diff {} --nocommit '\
'--conduit-token "{}" --conduit-uri "{}"'.format(
diff_id, conduit_token, host )
subprocess.call(cmd, shell=True)
def _parse_args():
parser = argparse.ArgumentParser(description='Apply a phabricator patch.')
parser.add_argument('--conduit-token', type=str, dest='conduit_token', default=None)
parser.add_argument('--host', type=str, dest='host', default="None",
help="full URL to API with trailing slash, e.g. https://reviews.llvm.org/api/")
return parser.parse_args()
if __name__ == "__main__":
main()