sync to snapdiff package. 39/126939/1
authorJunghyun Kim <jh0822.kim@samsung.com>
Tue, 25 Apr 2017 10:03:38 +0000 (19:03 +0900)
committerJunghyun Kim <jh0822.kim@samsung.com>
Tue, 25 Apr 2017 10:03:38 +0000 (19:03 +0900)
Change-Id: Ie75daabc6d1c61ba3802040091adba7101df74b4
Signed-off-by: Junghyun Kim <jh0822.kim@samsung.com>
job_sync_snapdiff.py

index ae7bad9..bea5627 100755 (executable)
@@ -46,14 +46,14 @@ def search_last_build(build_url, release_name, released=False):
     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]
@@ -98,7 +98,7 @@ def _get_name(url):
     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.
@@ -107,13 +107,13 @@ def generate_diff(old_url, new_url, repo, name, style='repo'):
     :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.
@@ -125,7 +125,7 @@ def sync_world(template_name, repo_name, repo_path, kwargs):
     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:
@@ -156,14 +156,22 @@ def main():
     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))
 
@@ -174,23 +182,24 @@ def main():
     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'] = {}
@@ -215,6 +224,7 @@ def main():
                 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))
@@ -222,6 +232,7 @@ def main():
                 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))
@@ -229,6 +240,7 @@ def main():
                 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))
@@ -238,7 +250,7 @@ def main():
             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())