mirror of
https://github.com/odoo/runbot.git
synced 2025-03-27 13:25:47 +07:00
[IMP] code refactoring
This commit is contained in:
parent
242e28abf9
commit
06fe91b443
107
runbot/runbot.py
107
runbot/runbot.py
@ -14,6 +14,7 @@ import simplejson
|
|||||||
import subprocess
|
import subprocess
|
||||||
import time
|
import time
|
||||||
import sys
|
import sys
|
||||||
|
from collections import OrderedDict
|
||||||
|
|
||||||
import dateutil.parser
|
import dateutil.parser
|
||||||
import requests
|
import requests
|
||||||
@ -456,20 +457,22 @@ class runbot_build(osv.osv):
|
|||||||
|
|
||||||
def create(self, cr, uid, values, context=None):
|
def create(self, cr, uid, values, context=None):
|
||||||
build_id = super(runbot_build, self).create(cr, uid, values, context=context)
|
build_id = super(runbot_build, self).create(cr, uid, values, context=context)
|
||||||
|
build = self.browse(cr, uid, build_id)
|
||||||
extra_info = {'sequence' : build_id}
|
extra_info = {'sequence' : build_id}
|
||||||
|
|
||||||
for build in self.browse(cr, uid, [build_id]):
|
# detect duplicate
|
||||||
domain = [
|
domain = [
|
||||||
('repo_id','=',build.repo_id.duplicate_id.id),
|
('repo_id','=',build.repo_id.duplicate_id.id),
|
||||||
('name', '=', build.name),
|
('name', '=', build.name),
|
||||||
('duplicate_id', '=', False),
|
('duplicate_id', '=', False),
|
||||||
('result', '!=', 'skipped')
|
('result', '!=', 'skipped')
|
||||||
]
|
]
|
||||||
duplicate_ids = self.search(cr, uid, domain)
|
print domain
|
||||||
if len(duplicate_ids):
|
duplicate_ids = self.search(cr, uid, domain)
|
||||||
duplicate_id = duplicate_ids[0]
|
print duplicate_ids
|
||||||
extra_info.update({'state': 'duplicate', 'duplicate_id': duplicate_id})
|
if len(duplicate_ids):
|
||||||
self.write(cr, uid, [duplicate_id], {'duplicate_id': build_id})
|
extra_info.update({'state': 'duplicate', 'duplicate_id': duplicate_ids[0]})
|
||||||
|
self.write(cr, uid, [duplicate_ids[0]], {'duplicate_id': build_id})
|
||||||
self.write(cr, uid, [build_id], extra_info, context=context)
|
self.write(cr, uid, [build_id], extra_info, context=context)
|
||||||
|
|
||||||
def reset(self, cr, uid, ids, context=None):
|
def reset(self, cr, uid, ids, context=None):
|
||||||
@ -860,61 +863,58 @@ class runbot_event(osv.osv):
|
|||||||
|
|
||||||
class RunbotController(http.Controller):
|
class RunbotController(http.Controller):
|
||||||
|
|
||||||
def common(self, cr, uid):
|
|
||||||
registry, cr, uid, context = request.registry, request.cr, request.uid, request.context
|
|
||||||
repo_obj = registry['runbot.repo']
|
|
||||||
v = {}
|
|
||||||
ids = repo_obj.search(cr, uid, [], order='id')
|
|
||||||
v['repos'] = repo_obj.browse(cr, uid, ids)
|
|
||||||
v['s2h'] = s2human
|
|
||||||
return v
|
|
||||||
|
|
||||||
@http.route(['/runbot', '/runbot/repo/<model("runbot.repo"):repo>'], type='http', auth="public", website=True)
|
@http.route(['/runbot', '/runbot/repo/<model("runbot.repo"):repo>'], type='http', auth="public", website=True)
|
||||||
def repo(self, repo=None, search='', limit='100', refresh='', **post):
|
def repo(self, repo=None, search='', limit='100', refresh='', **post):
|
||||||
registry, cr, uid = request.registry, request.cr, 1
|
registry, cr, uid = request.registry, request.cr, 1
|
||||||
|
|
||||||
branch_obj = registry['runbot.branch']
|
branch_obj = registry['runbot.branch']
|
||||||
build_obj = registry['runbot.build']
|
build_obj = registry['runbot.build']
|
||||||
icp = registry['ir.config_parameter']
|
icp = registry['ir.config_parameter']
|
||||||
workers = icp.get_param(cr, uid, 'runbot.workers', default=6)
|
repo_obj = registry['runbot.repo']
|
||||||
running_max = icp.get_param(cr, uid, 'runbot.running_max', default=75)
|
|
||||||
pending_total = build_obj.search_count(cr, uid, [('state','=','pending')])
|
repo_ids = repo_obj.search(cr, uid, [], order='id')
|
||||||
testing_total = build_obj.search_count(cr, uid, [('state','=','testing')])
|
repos = repo_obj.browse(cr, uid, repo_ids)
|
||||||
running_total = build_obj.search_count(cr, uid, [('state','=','running')])
|
if not repo and repos:
|
||||||
|
repo = repos[0]
|
||||||
|
|
||||||
|
context = {
|
||||||
|
'repos': repos,
|
||||||
|
'repo': repo,
|
||||||
|
's2h': s2human,
|
||||||
|
'workers': icp.get_param(cr, uid, 'runbot.workers', default=6),
|
||||||
|
'running_max': icp.get_param(cr, uid, 'runbot.running_max', default=75),
|
||||||
|
'pending_total': build_obj.search_count(cr, uid, [('state','=','pending')]),
|
||||||
|
'testing_total': build_obj.search_count(cr, uid, [('state','=','testing')]),
|
||||||
|
'running_total': build_obj.search_count(cr, uid, [('state','=','running')]),
|
||||||
|
'limit': limit,
|
||||||
|
'search': search,
|
||||||
|
'refresh': refresh,
|
||||||
|
}
|
||||||
|
|
||||||
context = self.common(cr, uid)
|
|
||||||
# repo
|
|
||||||
if not repo and context['repos']:
|
|
||||||
repo = context['repos'][0]
|
|
||||||
if repo:
|
if repo:
|
||||||
# filters
|
# filters
|
||||||
dom = [('repo_id','=',repo.id)]
|
filters = {key: post.get(key, '1') for key in ['pending', 'testing', 'running', 'done']}
|
||||||
filters = {}
|
domain = [('repo_id','=',repo.id)]
|
||||||
for k in ['pending','testing','running','done']:
|
domain += [('state', '!=', key) for key, value in filters.iteritems() if value == '0']
|
||||||
filters[k] = post.get(k, '1')
|
|
||||||
if filters[k] == '0':
|
|
||||||
dom += [('state','!=',k)]
|
|
||||||
if search:
|
if search:
|
||||||
dom += [('dest','ilike',search)]
|
domain += [('dest','ilike',search)]
|
||||||
context['filters'] = filters
|
context['filters'] = filters
|
||||||
qu = QueryURL('/runbot/repo/'+slug(repo), search=search, limit=limit, refresh=refresh, **filters)
|
qu = QueryURL('/runbot/repo/'+slug(repo), search=search, limit=limit, refresh=refresh, **filters)
|
||||||
context['qu'] = qu
|
context['qu'] = qu
|
||||||
build_ids = build_obj.search(cr, uid, dom + [('branch_id.sticky','=',True)])
|
|
||||||
build_ids += build_obj.search(cr, uid, dom + [('branch_id.sticky','=',False)], limit=int(limit))
|
|
||||||
|
|
||||||
branch_ids = []
|
build_ids = build_obj.search(cr, uid, domain + [('branch_id.sticky','=',False)], limit=int(limit))
|
||||||
# builds and branches, order on join SQL is needed
|
branch_ids = branch_obj.search(cr, uid, [('sticky', '=', True)])
|
||||||
q = """
|
|
||||||
SELECT br.id FROM runbot_branch br INNER JOIN runbot_build bu ON br.id=bu.branch_id WHERE bu.id in %s
|
|
||||||
ORDER BY br.sticky DESC, CASE WHEN br.sticky THEN br.branch_name END, bu.sequence DESC
|
|
||||||
"""
|
|
||||||
if build_ids:
|
if build_ids:
|
||||||
|
q = """
|
||||||
|
SELECT br.id FROM runbot_branch br INNER JOIN runbot_build bu ON br.id=bu.branch_id WHERE bu.id in %s
|
||||||
|
ORDER BY bu.sequence DESC
|
||||||
|
"""
|
||||||
cr.execute(q, (tuple(build_ids),))
|
cr.execute(q, (tuple(build_ids),))
|
||||||
for br in cr.fetchall():
|
branch_ids += OrderedDict.fromkeys(br[0] for br in cr.fetchall()).keys()
|
||||||
if br[0] not in branch_ids:
|
|
||||||
branch_ids.append(br[0])
|
|
||||||
|
|
||||||
branches = branch_obj.browse(cr, uid, branch_ids, context=request.context)
|
branches = branch_obj.browse(cr, uid, branch_ids, context=request.context)
|
||||||
context['branches'] = []
|
context['branches'] = []
|
||||||
|
|
||||||
for branch in branches:
|
for branch in branches:
|
||||||
build_ids = build_obj.search(cr, uid, [('branch_id','=',branch.id)], limit=4)
|
build_ids = build_obj.search(cr, uid, [('branch_id','=',branch.id)], limit=4)
|
||||||
branch.builds = build_obj.browse(cr, uid, build_ids, context=request.context)
|
branch.builds = build_obj.browse(cr, uid, build_ids, context=request.context)
|
||||||
@ -925,17 +925,6 @@ class RunbotController(http.Controller):
|
|||||||
context['running'] = build_obj.search_count(cr, uid, [('repo_id','=',repo.id), ('state','=','running')])
|
context['running'] = build_obj.search_count(cr, uid, [('repo_id','=',repo.id), ('state','=','running')])
|
||||||
context['pending'] = build_obj.search_count(cr, uid, [('repo_id','=',repo.id), ('state','=','pending')])
|
context['pending'] = build_obj.search_count(cr, uid, [('repo_id','=',repo.id), ('state','=','pending')])
|
||||||
|
|
||||||
context.update({
|
|
||||||
'search': search,
|
|
||||||
'limit': limit,
|
|
||||||
'refresh': refresh,
|
|
||||||
'repo': repo,
|
|
||||||
'workers': workers,
|
|
||||||
'running_max': running_max,
|
|
||||||
'pending_total': pending_total,
|
|
||||||
'running_total': running_total,
|
|
||||||
'testing_total': testing_total,
|
|
||||||
})
|
|
||||||
return request.render("runbot.repo", context)
|
return request.render("runbot.repo", context)
|
||||||
|
|
||||||
@http.route(['/runbot/build/<build_id>'], type='http', auth="public", website=True)
|
@http.route(['/runbot/build/<build_id>'], type='http', auth="public", website=True)
|
||||||
|
Loading…
Reference in New Issue
Block a user