From: gaoxuesx Date: Thu, 4 Sep 2014 08:23:20 +0000 (+0800) Subject: Add fetch and check change feature X-Git-Tag: 1.0~82 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4d8e2d4149f68dc76bac0d95fc07f1230244721d;p=services%2Fjenkins-scripts.git Add fetch and check change feature We can use fetch_change function to check out one change. Change-Id: Ie836c1f287fcd438632116cdf39d78ce2da35da4 Signed-off-by: gaoxuesx --- diff --git a/common/git.py b/common/git.py index c53936c..a77ff04 100644 --- a/common/git.py +++ b/common/git.py @@ -161,3 +161,17 @@ def clone_gitproject(gerritprj, localdir, giturl=None, bare=False): return _clone_gitproject(giturl, gerritprj, localdir, bare) + + +def fetch_change(gerritprj, localdir, refspec, giturl=None, bare=False): + """Fecth and checkout change to local dir""" + + if not giturl: + giturl = 'ssh://%s@%s:%s/%s' % (os.getenv('GERRIT_USERNAME'), + os.getenv('GERRIT_HOSTNAME'), + os.getenv('GERRIT_SSHPORT'), + gerritprj) + + git = Git.create(localdir, bare) + git.fetch(repo=giturl, refspec=refspec) + git.checkout('FETCH_HEAD') diff --git a/common/iris_rest_client.py b/common/iris_rest_client.py index aa407ca..5ca5c1d 100644 --- a/common/iris_rest_client.py +++ b/common/iris_rest_client.py @@ -1,7 +1,6 @@ """IRIS requests client""" -import os import sys import urlparse from distutils.sysconfig import get_python_lib @@ -14,10 +13,12 @@ import requests class IrisRestClient(object): + """IRIS Rest Client""" def __init__(self, server): self.server = server self.session = None self.csrftoken = None + self.header = None def login(self, user, pwd): """ @@ -33,19 +34,23 @@ class IrisRestClient(object): data = dict(username=user, password=pwd) header = {'X-CSRFToken': csrftoken} - r = self.session.post(urlparse.urljoin(self.server, '/login/'), data=data, - headers=header) + response = self.session.post(urlparse.urljoin(self.server, '/login/'), + data=data, headers=header) self.csrftoken = self.session.cookies['csrftoken'] self.header = {'X-CSRFToken': self.csrftoken} - return r + return response def _post(self, url, **kwargs): """Commom post method with header""" - r = self.session.post(urlparse.urljoin(self.server, url), - headers=self.header, **kwargs) - detail = r.json() - detail['status'] = r.status_code + detail = {} + response = self.session.post(urlparse.urljoin(self.server, url), + headers=self.header, **kwargs) + try: + detail.update(response.json()) + except ValueError: + detail['detail'] = 'Server error, please contact the administrator!' + detail['status'] = response.status_code return detail def scm_update(self, domain_file, gittree_file): diff --git a/job_monitor_scm_meta_git.py b/job_monitor_scm_meta_git.py index b4a21d6..e204929 100755 --- a/job_monitor_scm_meta_git.py +++ b/job_monitor_scm_meta_git.py @@ -7,18 +7,15 @@ import sys import os import base64 import argparse -from urllib2 import HTTPError from distutils.sysconfig import get_python_lib sys.path.insert(0, get_python_lib()) import requests -from common.tempbuildpkg import TempPackageBuild from common.gerrit import Gerrit, GerritError, get_gerrit_event -from common.git import Git, clone_gitproject +from common.git import clone_gitproject, fetch_change from common.iris_rest_client import IrisRestClient -from job_submitobs import find_submit_tag # set default char-set endcoding to utf-8 reload(sys) @@ -33,6 +30,7 @@ WORKSPACE = os.getenv('WORKSPACE') GERRIT_HOSTNAME = os.getenv('GERRIT_HOSTNAME') GERRIT_USERNAME = os.getenv('GERRIT_USERNAME') GERRIT_SSHPORT = os.getenv('GERRIT_SSHPORT') +GERRIT_SILENT_MODE = os.getenv('GERRIT_SILENT_MODE') def scm_check(client, gerrit, events, domains, gittrees): @@ -46,11 +44,20 @@ def scm_check(client, gerrit, events, domains, gittrees): print '########################################' if result['status'] == 200: - return 0 - if result['status'] == 406: + try: + gerrit.review(commit=events['patchset_revision'], verified=1) + return 0 + except GerritError, err: + print >> sys.stderr, 'Error posting review comment '\ + 'back to Gerrit: %s' % str(err) + # return 1 if this exception is not caused by invalid commit + if 'no such patch set' not in str(err): + return 1 + else: try: gerrit.review(commit=events['patchset_revision'], message=result['detail'], verified=-1) + return 0 except GerritError, err: print >> sys.stderr, 'Error posting review comment '\ 'back to Gerrit: %s' % str(err) @@ -91,9 +98,11 @@ def main(): if not clone_gitproject(GERRIT_PROJECT, proj_path): return -1 - git = Git(proj_path) + # fecth and checkout change + fetch_change(GERRIT_PROJECT, proj_path, events['refspec']) + gerrit = Gerrit(GERRIT_HOSTNAME, GERRIT_USERNAME, GERRIT_SSHPORT, - GERRIT_SILENT_MOD) + GERRIT_SILENT_MODE) domains = os.path.join(proj_path, 'domains') gittrees = os.path.join(proj_path, 'git-trees')