summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>2021-02-09 10:24:56 +0900
committerKuninori Morimoto <kuninori.morimoto.gx@renesas.com>2021-02-09 11:23:46 +0900
commita176f6999a2d33163365602fb56cae8711875e06 (patch)
tree3e6a65d181ea80cc79ff7932fb98128be0ac6966 /scripts
parentedd2189ab2c0c9131b3ebb27d77e2ad9d6e251d6 (diff)
scripts: add html_task.py
Because current PeriJect is using scripts/myhtml.py to creating all HTML files, all files will be re-created if myhtml.py itself was updated. It is very verbose. This patch separates "task" from it. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/html_base.py211
-rwxr-xr-xscripts/html_task.py194
2 files changed, 405 insertions, 0 deletions
diff --git a/scripts/html_base.py b/scripts/html_base.py
new file mode 100644
index 0000000..9b265ae
--- /dev/null
+++ b/scripts/html_base.py
@@ -0,0 +1,211 @@
+#! /usr/bin/env python3
+#===============================
+#
+# html_base
+#
+# 2021/02/09 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
+#===============================
+import os
+
+import base
+#====================================
+#
+# html
+#
+#====================================
+class html(base.base):
+
+ __head = 0
+ __noclose = ["input",
+ "frame",
+ "link",
+ "br",
+ ]
+
+ #--------------------
+ # option
+ #--------------------
+ def option(self, dic):
+ if (dic):
+ self.dic.update(dic)
+
+ #--------------------
+ # __init__
+ #--------------------
+ def __init__(self, mark, dic = None):
+ super().__init__()
+
+ self.dic = {}
+ self.mark = mark
+ self.option(dic)
+ self.txt = ""
+
+ #--------------------
+ # open
+ #--------------------
+ def open(self, ret = 0):
+
+ self.txt = ""
+
+ if (ret):
+ for i in range(html.__head):
+ self.txt += "\t"
+
+ self.txt += "<{}".format(self.mark)
+ for d in self.dic:
+ self.txt += " {}=\"{}\"".format(d, self.dic[d])
+ self.txt += ">"
+ html.__head += 1
+
+ #--------------------
+ # close
+ #--------------------
+ def close(self, ret = 0):
+ html.__head -= 1
+ # no end-mark
+ if (self.mark in html.__noclose):
+ return
+
+ if (ret):
+ for i in range(html.__head):
+ self.txt += "\t"
+ self.txt += "</{}>".format(self.mark)
+
+ #--------------------
+ # text
+ #--------------------
+ def text(self, txt = ""):
+ self.open()
+ self.txt += txt
+ self.close()
+ return self.txt
+
+ #--------------------
+ # print
+ #--------------------
+ def print(self, txt = ""):
+
+ self.open(1)
+ self.txt += txt
+ self.close(0)
+ print(self.txt)
+
+ #--------------------
+ # for with
+ #--------------------
+ def __enter__(self):
+ self.open(1)
+ print(self.txt)
+ self.txt = ""
+ return self
+ def __exit__(self, exception_type, exception_value, traceback):
+ self.close(1)
+ print(self.txt)
+ self.txt = ""
+
+#====================================
+#
+# myhtml
+#
+#====================================
+class myhtml(base.base):
+ def __init__(self):
+ super().__init__()
+ self.git = self.config("git-linux")
+
+ def relpath(self, path, frm):
+ return os.path.relpath("{}/{}".format(self.top(), path), frm)
+
+ def relpath_y2h(self, file, frm):
+ return os.path.relpath(file.replace("yaml", "html").replace("projects", "html"), frm)
+
+ def git_title(self, id):
+ return self.run("git -C {} log -1 {} --format=%s".format(self.git, id))
+
+ def commit_url(self, id, type):
+ if (type == "bsp"):
+ return "https://github.com/renesas-rcar/linux-bsp/commit/{}?diff=unified".format(id)
+ if (type == "torvalds"):
+ return "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id={}".format(id)
+ if (type == "next"):
+ return "https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id={}".format(id)
+ if (type == "lore"):
+ return "https://lore.kernel.org/r/{}".format(id)
+ return id;
+
+ #--------------------
+ # print_css
+ #--------------------
+ def print_css(self, dir):
+ html("link", {"rel":"stylesheet",
+ "type":"text/css",
+ "href":self.relpath("scripts/css", dir)}).print()
+
+ #--------------------
+ # print_commit_bsp
+ #--------------------
+ def print_commit_bsp(self, bsp_list):
+ with html("ul"):
+ for bsp in bsp_list:
+ html("li").print(html("a", {"href":self.commit_url(bsp, "bsp"),
+ "target":"_blank"}).text(self.git_title(bsp)))
+ return len(bsp_list)
+
+ #--------------------
+ # __task_commit_upstream
+ #--------------------
+ def __task_commit_upstream(self, v, upstream, item):
+ if (not item in upstream):
+ return 0
+
+ commit = upstream[item]
+
+ with html("tr"):
+ html("th").print(item)
+ html("td").print(html("a", {"href":self.commit_url(commit, item),
+ "target":"_blank"}).text(self.git_title(commit)))
+
+ return 1
+
+ #--------------------
+ # __task_commit_posted
+ #--------------------
+ def __task_commit_posted(self, v, posted, item):
+ if (not item in posted):
+ return 0
+
+ msgid = posted[item]
+
+ with html("tr"):
+ html("th").print(item)
+ html("td").print(html("a", {"href":self.commit_url(msgid, item),
+ "target":"_blank"}).text(msgid))
+
+ return 1
+
+ #--------------------
+ # task_commit_upstream
+ #--------------------
+ def task_commit_upstream(self, v):
+ done = 0
+ cnt = 0
+ status = v.get_data("status")
+ if (status == "Done" or
+ status == "Abandoned"):
+ done = 1
+
+ upstream = v.get_data("upstream")
+ if (not len(upstream)):
+ if (done):
+ html("p").print("ignored")
+ cnt = 1
+ else:
+ with html("table"):
+ for up in upstream:
+ cnt += self.__task_commit_upstream(v, up, "torvalds")
+ for up in upstream:
+ cnt += self.__task_commit_upstream(v, up, "next")
+ for up in upstream:
+ cnt += self.__task_commit_posted(v, up, "lore")
+
+ return (done, cnt)
diff --git a/scripts/html_task.py b/scripts/html_task.py
new file mode 100755
index 0000000..596b43b
--- /dev/null
+++ b/scripts/html_task.py
@@ -0,0 +1,194 @@
+#! /usr/bin/env python3
+#===============================
+#
+# html_task
+#
+# 2021/02/09 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
+#===============================
+import sys
+import os
+import re
+
+import view
+import html_base
+from html_base import html
+#====================================
+#
+# periject_html
+#
+#====================================
+class periject_html(html_base.myhtml):
+
+ def __init__(self):
+ super().__init__()
+
+ #--------------------
+ # task_commit_bsp
+ #--------------------
+ def task_commit_bsp(self, v):
+ cnt = 0
+ with html("table"):
+ for b in self.bsp_list():
+ bsp_list = v.get_data(b)
+ if (not bsp_list):
+ continue
+ with html("tr"):
+ html("th").print(b)
+ with html("td"):
+ cnt += self.print_commit_bsp(bsp_list)
+ return cnt
+
+ #--------------------
+ # task_status
+ #--------------------
+ def task_status(self, v):
+ dir = os.path.dirname(v.file)
+ assignee = v.get_data("assignee")
+ status = v.get_data("status")
+ team = v.get_data("team")
+
+ if (not len(assignee)):
+ assignee = "NoAssignee"
+
+ with html("table", {"border":"1"}):
+ with html("tr"):
+ html("th").print("file")
+ html("th").print("status")
+ html("th").print("team")
+ html("th").print("assignee")
+ html("th").print("key")
+
+ with html("tr"):
+ html("td").print(os.path.relpath(v.file, self.top()))
+ html("td").print(html("a", {"target":"summary",
+ "href":self.relpath("html/{}.html".format(status), dir)}).text(status))
+ html("td").print(html("a", {"target":"summary",
+ "href":self.relpath("html/{}.html".format(team), dir)}).text(team))
+ html("td").print(html("a", {"target":"summary",
+ "href":self.relpath("html/{}.html".format(assignee), dir)}).text(assignee))
+ html("td").print(v.get_data("key"))
+
+ #--------------------
+ # _task_relation
+ #--------------------
+ def _task_relation(self, relationship, v, item):
+
+ current_dir = os.path.dirname(v.file)
+ related_file = v.get_related_file(relationship[item])
+
+ if (not os.path.exists(related_file)):
+ with html("tr"):
+ html("td").print(item)
+ html("td").print("Unknown({})".format(related_file))
+ return
+
+ rv = view.viewer([related_file])
+ rv.set_data(related_file)
+ with html("tr"):
+ html("td").print(item)
+ html("td").print(html("a", {"href":
+ self.relpath_y2h(related_file, current_dir)}).text(rv.get_data("title")))
+
+ #--------------------
+ # task_relation
+ #--------------------
+ def task_relation(self, v):
+
+ relationships = v.get_data("relationships")
+ if (not relationships):
+ return
+
+ current_dir = os.path.dirname(v.file)
+
+ with html("table", {"border":"1"}):
+ for relationship in relationships:
+ if ("parent" in relationship):
+ self._task_relation(relationship, v, "parent")
+ if ("depends" in relationship):
+ self._task_relation(relationship, v, "depends")
+ if ("blocks" in relationship):
+ self._task_relation(relationship, v, "blocks")
+
+ #--------------------
+ # task_head
+ #--------------------
+ def task_head(self, v):
+
+ with html("table"):
+ with html("tr"):
+ with html("td"):
+ self.task_status(v)
+ with html("td"):
+ self.task_relation(v)
+
+ #--------------------
+ # task_commit
+ #--------------------
+ def task_commit(self, v):
+
+ has_bsp = 0
+ for b in self.bsp_list():
+ if (v.get_data(b)):
+ has_bsp = 1
+ break
+ upstream = v.get_data("upstream")
+
+ with html("table", {"border":"1"}):
+ with html("tr"):
+ if (has_bsp):
+ html("th").print("BSP")
+ if (upstream):
+ html("th").print("upstream")
+ with html("tr"):
+ if (has_bsp):
+ with html("td"):
+ self.task_commit_bsp(v)
+ if (upstream):
+ with html("td"):
+ self.task_commit_upstream(v)
+
+ #--------------------
+ # task_comment
+ #--------------------
+ def task_comment(self, v):
+ comments = v.get_data("comments")
+ if (not comments):
+ return
+
+ with html("ul"):
+ for comment in comments:
+ str = re.search(r'(https?://[\w/:%#\$&\?\(\)~\.=\+\-]+)', comment)
+ if (str):
+ a = html("a", {"href":str.group(),
+ "target":"_blank"})
+ comment = str.string[:str.start()] + a.text(str.group()) + str.string[str.end():]
+
+ html("li").print(comment)
+
+ #--------------------
+ # print
+ #--------------------
+ def print(self, argv):
+ # remove this script
+ argv.pop(0)
+
+ v = view.viewer([argv[0]])
+ v.set_data(argv[0])
+
+ dir = os.path.dirname(argv[0].replace("projects", "html"))
+
+ self.print_css(dir)
+ with html("body"):
+ html("h2").print(v.get_data("title"))
+ self.task_head(v)
+ self.task_commit(v)
+ self.task_comment(v)
+
+#====================================
+#
+# As command
+#
+#====================================
+if __name__=='__main__':
+ # html_task.py projects/xxx/xxx.yaml
+ periject_html().print(sys.argv)