overwrite_commit = outs.strip()
return (True, overwrite_commit)
+ def _get_branches(self):
+ """Return the branches list, current working branch is the first
+ element.
+ """
+ branches = []
+ for line in self._exec_git('branch', ['--no-color'])[1].splitlines():
+ br = line.strip().split()[-1]
+
+ if line.startswith('*'):
+ current_branch = br
+
+ branches.append(br)
+
+ return (current_branch, branches)
+
+ def get_branches(self):
+ if not self.cur_branch or not self.branches:
+ self.cur_branch, self.branches = \
+ self._get_branches()
+
+ return (self.cur_branch, self.branches)
+
+ def has_branch(self, br, remote=False):
+ """Check if the repository has branch 'br'
+ @param remote: only liste remote branches
+ """
+
+ if remote:
+ options = [ '--no-color', '-r' ]
+
+ for line in self._exec_git('branch', options)[1].splitlines():
+ rbr = line.strip().split()[-1]
+ if br == rbr:
+ return True
+
+ return False
+
+ else:
+ return (br in self.get_branches()[1])
def _update_gitproject(localdir, gitpath=None):
"""Fetch latest code to local dir"""
from common.send_mail import prepare_mail
from time import sleep
+from common.workflow import MailSender
+
GIT_URL = 'ssh://%s@%s:%s' % (os.getenv('GERRIT_USERNAME'),
os.getenv('GERRIT_HOSTNAME'),
os.getenv('GERRIT_SSHPORT'))
class MergeError(Exception): pass
class SubmitError(Exception): pass
-class MailSender(object):
- email_title = ''
- email_head = ''
- email_body = ''
- email_footer = '\n\n--------------------------------------------------------\n'\
- 'Automatically generated by backend service.\n'\
- 'Please DO NOT Reply!'
- email_to = []
-
- def __init__(self, receiver=None, title=None, body=None):
- if receiver is not None: self.email_to = receiver
- if title is not None: self.email_title = title
- if body is not None: self.email_body = body
-
- def add_receiver(self, add_new):
- """ add receiver """
- if type(add_new) == list:
- self.email_to.extend(x for x in add_new)
- elif type(add_new) == str:
- self.email_to.append(add_new)
- else:
- print 'TYPE(%s) == %s' % (add_new, type(add_new))
- self.email_to = list(set(self.email_to))
-
- def add_title(self, add_new):
- """ add title """
- self.email_title = self.email_title + ' ' + add_new
-
- def add_message(self, add_new, top=None):
- """ add message """
- if top is not None:
- self.email_body = add_new + '\n' + self.email_body
- else:
- self.email_body = self.email_body + '\n' + add_new
-
- def add_maintainers(self, mygerrit, group_name=None, project=None):
- """ add maintainers """
- if not mygerrit:
- print 'mygerrit is Null...'
- return
-
- if not project and group_name:
- mbrs = mygerrit.ls_members(['\'\"%s\"\'' % group_name, '--recursive'])
- for line in mbrs:
- self.add_receiver(line.split('\t')[3])
- return
-
- if project:
- grps = mygerrit.ls_groups(['--project %s' % project])
- dest_grp = [s for s in grps if " - Maintainers" in s]
- for dg in dest_grp:
- mbrs = mygerrit.ls_members(['\'\"%s\"\'' % dg, '--recursive'])
- for line in mbrs:
- self.add_receiver(line.split('\t')[3])
- return
-
- def send_mail(self):
- """ send mail """
- self.email_body = self.email_head + self.email_body + self.email_footer
-
- self.email_to = [x for x in self.email_to if x != 'n/a']
- print '\n\n'
- print self.email_title
- #m_body = ''
- #for m in self.email_body.splitlines():
- # m_body += '\n'.join(m[i:i+128] for i in xrange(0, len(m), 128)) + '\n'
- #self.email_body = m_body
- print self.email_body
- print self.email_to
-
- prepare_mail("%s.env" % os.getenv('BUILD_TAG'), \
- self.email_title, \
- self.email_body, \
- os.getenv('NOREPLY_EMAIL_SENDER'), \
- self.email_to)
-
def submit_gerrit_change(gerritobj, gitprj, project, branch, commit):
result = True
gerritobj.review(commit=commit, project=project, message='Submitted by system administrator', verified=1, codereview=2, submit=True)
private_git_dir = ''
for item in requests[requests.keys()[0]]:
- project = item['gerrit_project']
- revision = item['cid']
- submitter = item['submitter']
- git_tag = item['git_tag']
- deleted = item['deleted']
+ project = item.get('gerrit_project')
+ revision = item.get('cid')
+ submitter = item.get('submitter')
+ git_tag = item.get('git_tag')
+ deleted = item.get('deleted')
if project.startswith(HIGHLIGHT) or deleted:
continue
else:
project = project[1:]
request_projects.append((project, revision, submitter, git_tag))
-
+ is_mixed_git = True
try:
print '\n-----[Manifest Information]-------------------------------'
print 'GIT_PREFIX:', GIT_PREFIX
if retcode != 0:
raise RevisionError('error')
- if True: ## Merge
+ if not private_gitprj.has_branch('origin/%s' % branch, True):
+ print '\n* Create %s branch on %s repository as %s' % (branch, private_project, commit)
+ ret = private_gitprj._git_inout('push',['-q', '-f', '%s/%s' % (GIT_URL, private_project), \
+ '%s:refs/heads/%s' % (commit, branch)])
+ if ret == None:
+ raise UpstreamError('create %s branch failed(%s)' % (branch, private_project))
+ merge_successs.append((private_project, '%s -> %s' %(commit, commit)))
+ elif is_mixed_git: ## Merge
if branch in private_gitprj.branch_contains(commit):
print 'already merge %s branch..' % (branch)
continue