res = requests.get(build_url)
if res.status_code != 200:
print 'access build_url: %s , error: %s' % (build_url, res.status_code)
- return
+ return ""
soup = bs4.BeautifulSoup(res.text)
pattern_re = '^%s_[0-9]{8}.[0-9]+/$' % release_name
pattern = re.compile(pattern_re)
builds = [i.text for i in soup.find_all(href=pattern)]
if not builds:
print "Not find the any snapshot in %s, skip" % build_url
- return
+ return ""
if released:
last_build = builds[-1]
name = url[:-1].split('/')[-1]
return name or url
-def generate_diff(old_url, new_url, repo, name, style='repo'):
+def generate_diff(old_url, new_url, repo, name, snap_diff_name, style='repo'):
"""Generate repo or image diff.
:param old_url: old repo url.
:param name: diff prefix name.
"""
sync_out = os.path.join(os.getenv('WORKSPACE'), 'outdir')
- reports = os.path.join(sync_out, 'builddata', 'reports', repo)
+ reports = os.path.join(sync_out, 'builddata', 'reports', snap_diff_name, repo)
diff_name = '-'.join([name, _get_buildid(old_url), _get_buildid(new_url)])
snapdiff.diff_to_dist(old_url, new_url, reports, style=style,
diff_name=diff_name)
return '%s.html' % diff_name
-def sync_world(template_name, repo_name, repo_path, kwargs):
+def sync_world(template_name, repo_name, repo_path, snap_diff_name, kwargs):
"""Sync repo and image diff.
:param template_name: template we will use generate sumary index.
template = env.get_template(template_name)
content = template.render(kwargs)
sync_out = os.path.join(os.getenv('WORKSPACE'), 'outdir')
- reports = os.path.join(sync_out, 'builddata', 'reports', repo_name)
+ reports = os.path.join(sync_out, 'builddata', 'reports', snap_diff_name, repo_name)
if not os.path.exists(reports):
return
with open(os.path.join(reports, 'index.html'), 'w') as index_file_p:
context = {'id': content[0]['buildid']}
context['repo'] = []
- # generate current and last repo diff
- last_repo_base = get_last_build(url_pub_base, repo_path, release_name)
+ # if last build is selected, use it.
+ last_repo_base = ""
+ if "selected_snapshot" in content[0]:
+ selected_snapshot = content[0]["selected_snapshot"]
+ last_repo_base = os.path.join(url_pub_base, repo_path[:repo_path.rfind('/')], selected_snapshot)
+ else:
+ # generate current and last repo diff
+ last_repo_base = get_last_build(url_pub_base, repo_path, release_name)
+ snap_diff_name = "diff"
if last_repo_base:
last_repo_url = os.path.join(last_repo_base, 'repos',
repo_name, 'packages')
+ snap_diff_name = '_'.join(['diff', _get_buildid(last_repo_url), _get_buildid(current_repo_url)])
last_current = generate_diff(last_repo_url, current_repo_url,
- repo_name, 'last_current')
+ repo_name, 'last_current', snap_diff_name)
last_id = _get_buildid(last_repo_url)
context['repo'].append(('last_build', last_id, last_current))
daily_repo_base, weekly_repo_base = get_released_build(releases_url,
repo_path,
release_name)
- if daily_repo_base:
- daily_repo_url = os.path.join(daily_repo_base,
- 'repos', repo_name, 'packages')
- if requests.get(daily_repo_url).status_code == 200:
- daily_current = generate_diff(daily_repo_url, current_repo_url,
- repo_name, 'daily_current')
- daily_id = _get_buildid(daily_repo_url)
- context['repo'].append(('daily_build', daily_id, daily_current))
-
- if weekly_repo_base:
- weekly_repo_url = os.path.join(weekly_repo_base,
- 'repos', repo_name, 'packages')
- if requests.get(weekly_repo_url).status_code == 200:
- weekly_current = generate_diff(weekly_repo_url, current_repo_url,
- repo_name, 'weekly_current')
- weekly_id = _get_buildid(weekly_repo_url)
- context['repo'].append(('weekly_build', weekly_id, weekly_current))
+
+ daily_repo_url = os.path.join(daily_repo_base,
+ 'repos', repo_name, 'packages')
+ weekly_repo_url = os.path.join(weekly_repo_base,
+ 'repos', repo_name, 'packages')
+ if (daily_repo_base and
+ requests.get(daily_repo_url).status_code == 200):
+ daily_current = generate_diff(daily_repo_url, current_repo_url,
+ repo_name, 'daily_current', snap_diff_name)
+ daily_id = _get_buildid(daily_repo_url)
+ context['repo'].append(('daily_build', daily_id, daily_current))
+
+ if (weekly_repo_base and
+ requests.get(weekly_repo_url).status_code == 200):
+ weekly_current = generate_diff(weekly_repo_url, current_repo_url,
+ repo_name, 'weekly_current', snap_diff_name)
+ weekly_id = _get_buildid(weekly_repo_url)
+ context['repo'].append(('weekly_build', weekly_id, weekly_current))
# generate image diff
context['images'] = {}
requests.get(last_image_url).status_code == 200):
name = generate_diff(last_image_url, current_image_url,
repo_name, item['name']+'_last_current',
+ snap_diff_name,
style='image')
context['images'][item['name']].append(('last_build',
last_id, name))
requests.get(daily_image_url).status_code == 200):
name = generate_diff(daily_image_url, current_image_url,
repo_name, item['name']+'_daily_current',
+ snap_diff_name,
style='image')
context['images'][item['name']].append(('daily_build',
daily_id, name))
requests.get(weekly_image_url).status_code == 200):
name = generate_diff(weekly_image_url, current_image_url,
repo_name, item['name']+'_weekly_current',
+ snap_diff_name,
style='image')
context['images'][item['name']].append(('weekly_build',
weekly_id, name))
context['images'].pop(item['name'])
# sync all
- return sync_world('index.html', repo_name, repo_path, context)
+ return sync_world('index.html', repo_name, repo_path, snap_diff_name, context)
if __name__ == '__main__':
sys.exit(main())