We can use fetch_change function to check out one change.
Change-Id: Ie836c1f287fcd438632116cdf39d78ce2da35da4
Signed-off-by: gaoxuesx <xuesongx.gao@intel.com>
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')
"""IRIS requests client"""
-import os
import sys
import urlparse
from distutils.sysconfig import get_python_lib
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):
"""
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):
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)
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):
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)
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')