コード例 #1
0
ファイル: test_commits.py プロジェクト: ufwt/qdt
    def __init__(self,
                 repo,
                 current,
                 base,
                 project,
                 project_path,
                 caches=None,
                 diffs=join(".", "proj_mes_diffs")):
        """
:param caches:
    Path to directory with existing QVCs. Use it iff QVC building
    algorithm testing is not required.
        """
        super(QDTMeasurer, self).__init__(repo, current, base)

        self.qdtgit = repo
        self.clone_prefix = "qdt"

        qvd = qvd_get(project.build_path, version=project.target_version)

        self.qproject = project
        self.qemugit = qemugit = Repo(qvd.src_path)
        self.qp_path = project_path
        self.caches = caches

        # generated code will be saved as a patch
        diffs = join(abspath(diffs), datetime.now().strftime("%Y%m%d-%H%M%S"))
        if not isdir(diffs):
            makedirs(diffs)

        self.diffs = diffs

        target_commit = git_find_commit(qemugit, project.target_version)
        self.qvc_pattern = ("qvc*_%s.py" % target_commit.hexsha)
コード例 #2
0
ファイル: qdc-gui.py プロジェクト: ufwt/qdt
    def rebuild_cache(self):
        try:
            qvd = qvd_get(self.proj.build_path,
                          version=self.proj.target_version)
        except BadBuildPath as e:
            showerror(
                title=_("Cache rebuilding is impossible").get(),
                message=(_("Selected Qemu build path is bad. Reason: %s") %
                         (e.message)).get())
            return

        # if 'reload_build_path_task' is not failed
        if hasattr(self.pw, 'reload_build_path_task'):
            # reload_build_path_task always run at program start that is why
            # it's in process when it's not in finished_tasks and not failed
            if self.pw.reload_build_path_task not in self.pw.tm.finished_tasks:
                ans = askyesno(self,
                               title=_("Cache rebuilding"),
                               message=_("Cache building is already \
in process. Do you want to start cache rebuilding?"))
                if not ans:
                    return

        qvd.remove_cache()
        self.pw.reload_build_path()
コード例 #3
0
    def __init__(self, root, *args, **kw):
        GUIDialog.__init__(self, master=root, *args, **kw)
        self.qom_type_var = root.qom_type_var

        self.title(_("Device Tree"))
        self.grid()

        self.columnconfigure(0, weight=1)
        self.rowconfigure(0, weight=1)

        self.columnconfigure(2, minsize=200)

        self.attributes("-topmost", 1)
        geom = "+" + str(int(root.winfo_rootx())) \
             + "+" + str(int(root.winfo_rooty()))
        self.geometry(geom)

        self.focus()

        self.device_tree = VarTreeview(self)
        self.device_tree["columns"] = ("Macros")

        self.device_tree.heading("#0", text=_("Devices"))
        self.device_tree.heading("Macros", text=_("Macros"))

        self.device_tree.bind("<ButtonPress-1>", self.on_b1_press_dt)

        self.device_tree.grid(row=0, column=0, sticky="NEWS")

        #Add Scrollbar
        ysb = Scrollbar(self,
                        orient="vertical",
                        command=self.device_tree.yview)
        xsb = Scrollbar(self,
                        orient="horizontal",
                        command=self.device_tree.xview)
        self.device_tree['yscroll'] = ysb.set
        self.device_tree['xscroll'] = xsb.set
        ysb.grid(row=0, column=1, sticky="NS")
        xsb.grid(row=1, column=0, sticky="EW")

        self.add_button = VarButton(self,
                                    text=_("Select"),
                                    command=self.on_select_qom_type)
        self.add_button.grid(row=1, column=2, sticky="WE")
        self.add_button.config(state="disabled")

        self.fr = VarLabelFrame(self, text=_("Select QOM type"))
        self.fr.grid(row=0, column=2, sticky="SEWN")

        # Check exception before __init__ call.
        bp = root.mach.project.build_path
        qvd = qvd_get(bp, version=root.mach.project.target_version)
        # the QOM type of roots[0] is "device"
        roots = qvd.qvc.device_tree[0]["children"]
        self.qom_create_tree("", roots)
コード例 #4
0
ファイル: qdc-gui.py プロジェクト: dimas3452/qdt
    def main(self):
        try:
            yield self.reload_build_path_task
        except:
            self.prev_qvd = None  # for `__finalize`
            raise RuntimeError("Cannot continue without a cache")

        cur_qvd = qvd_get(self.p.build_path, version=self.p.target_version)
        self.prev_qvd = cur_qvd.use()

        yield self.p.co_gen_all(self.s,
                                known_targets=cur_qvd.qvc.known_targets)
コード例 #5
0
ファイル: qdc-gui.py プロジェクト: ufwt/qdt
    def on_sel_tgt_qemu_version(self):
        try:
            qvd = qvd_get(self.proj.build_path)
        except:
            repo = None
        else:
            repo = qvd.repo

        new_target = GitVerSelDialog(self, repo).wait()

        if new_target is None:
            return

        self.pht.set_target(new_target)
コード例 #6
0
ファイル: project_widget.py プロジェクト: laerreal/qdt
    def on_qvc_dirtied(self):
        # QOM tree is not actual now
        del self.p.qom_tree

        pht = self.pht
        if pht is not None:
            pht.all_pci_ids_2_values()

        try:
            qvd = qvd_get(self.p.build_path)
        except BadBuildPath:
            pass
        else:
            if qvd.qvc is not None:
                qvd.forget_cache()

        self.reload_build_path()
コード例 #7
0
ファイル: project_widget.py プロジェクト: laerreal/qdt
    def on_qvc_available(self):
        pht = self.pht
        if pht is not None:
            pht.all_pci_ids_2_objects()

        # convert device tree to more convenient form
        qvc = qvd_get(self.p.build_path).qvc
        qt = self.p.qom_tree = from_legacy_dict(qvc.device_tree)

        # Note that system bus device have no standard name for input IRQ.
        next(qt.find(name="sys-bus-device")).out_gpio_names = [
            "SYSBUS_DEVICE_GPIO_IRQ"
        ]

        # extend QOM tree with types from project
        for d in self.p.descriptions:
            self.__add_qtype_for_description(d)
コード例 #8
0
ファイル: qdc-gui.py プロジェクト: ufwt/qdt
    def on_generate(self):
        try:
            t = self._project_generation_task
        except AttributeError:
            pass
        else:
            if not t.finished:
                showerror(title=_("Generation is cancelled").get(),
                          message=_("At least one generation task is already \
in process.").get())
                return

        if not self.proj.build_path:
            showerror(
                title=_("Generation is impossible").get(),
                message=_("No Qemu build path is set for the project.").get())
            return

        try:
            qvd = qvd_get(self.proj.build_path,
                          version=self.proj.target_version)
        except BadBuildPath as e:
            showerror(
                title=_("Generation is impossible").get(),
                message=(_("Selected Qemu build path is bad. Reason: %s") %
                         (e.message)).get())
            return

        if not hasattr(self.pw, "reload_build_path_task"):
            showerror(title=_("Generation is impossible").get(),
                      message=_("Qemu version cache loading failed.").get())
            return

        if not qvd.qvc_is_ready and not self.var_schedule_generation.get():
            showerror(title=_("Generation is cancelled").get(),
                      message=_("Qemu version cache is not ready yet. Try \
later.").get())
            return

        self._project_generation_task = ProjectGeneration(
            self.proj, qvd.src_path, self.sig_qvc_dirtied,
            self.pw.reload_build_path_task, self.var_gen_chunk_graphs.get())
        self.task_manager.enqueue(self._project_generation_task)
コード例 #9
0
ファイル: qdc-gui.py プロジェクト: laerreal/qdt
    def on_generate(self):
        try:
            t = self._project_generation_task
        except AttributeError:
            pass
        else:
            if not t.finished:
                showerror(title=_("Generation is cancelled").get(),
                          message=_("At least one generation task is already \
in process.").get())
                return

        if not self.proj.build_path:
            showerror(
                title=_("Generation is impossible").get(),
                message=_("No Qemu build path is set for the project.").get())
            return

        try:
            qvd = qvd_get(self.proj.build_path)
        except BadBuildPath as e:
            showerror(
                title=_("Generation is impossible").get(),
                message=(_("Selected Qemu build path is bad. Reason: %s") %
                         (e.message)).get())
            return

        if not qvd.qvc_is_ready:
            showerror(title=_("Generation is cancelled").get(),
                      message=_("Qemu version cache is not ready yet. Try \
later.").get())
            return

        self._project_generation_task = ProjectGeneration(
            self.proj, qvd.src_path, self.sig_qvc_dirtied)
        self.task_manager.enqueue(self._project_generation_task)
コード例 #10
0
ファイル: project_widget.py プロジェクト: laerreal/qdt
 def __init__(self, project_widget):
     self.pw = project_widget
     self.qvd = qvd_get(project_widget.p.build_path)
     CoTask.__init__(self, generator=self.begin())
コード例 #11
0
    def __init__(self, device, *args, **kw):
        SettingsWidget.__init__(self, device, *args, **kw)
        self.dev = device

        common_fr = GUIFrame(self)
        common_fr.pack(fill = BOTH, expand = False)
        common_fr.columnconfigure(0, weight = 0)
        common_fr.columnconfigure(1, weight = 1)

        common_fr.rowconfigure(0, weight = 0)

        l = VarLabel(common_fr, text = _("QOM type"))
        v = self.qom_type_var = StringVar()
        e = HKEntry(common_fr, textvariable = v)
        v.trace_variable("w", self.__on_qom_type_var_changed)

        l.grid(row = 0, column = 0, sticky = "W")
        e.grid(row = 0, column = 1, sticky = "EW")

        b = VarButton(common_fr,
            text = _("Select"),
            command = self.on_press_select_qom_type
        )
        b.grid(row = 0, column = 2, sticky = "EW")
        # Check for device tree
        bp = self.mach.project.build_path
        if bp is None:
            b["state"] = "disabled"
        else:
            qvd = qvd_get(bp, version = self.mach.project.target_version)
            if qvd.qvc is None or qvd.qvc.device_tree is None:
                # TODO: watch "qvc_available" signal
                b["state"] = "disabled"

        # parent bus editing widgets
        l = VarLabel(common_fr, text = _("Parent bus"))
        self.bus_var = StringVar()
        self.bus_var.trace_variable("w", self.on_parent_bus_var_changed)
        self.bus_cb = Combobox(
            common_fr,
            textvariable = self.bus_var,
            state = "readonly"
        )

        l.grid(row = 1, column = 0, sticky = "W")
        self.bus_cb.grid(row = 1, column = 1, sticky = "EW")
        common_fr.rowconfigure(1, weight = 0)

        self.buses_lf = lf = VarLabelFrame(
            common_fr,
            text = _("Child buses")
        )
        lf.grid(row = 2, column = 0, columns = 3, sticky = "NEWS")
        self.rowconfigure(2, weight = 1)

        lf.columnconfigure(0, weight = 1)

        self.child_buses_rows = []

        # pack properties inside a frame with scrolling
        outer_frame = VarLabelFrame(self, text = _("Properties"))
        outer_frame.pack(fill = BOTH, expand = True)
        self.props_lf = add_scrollbars(outer_frame, GUIFrame)

        self.props_lf.columnconfigure(0, weight = 1)
        self.props_lf.columnconfigure(1, weight = 0)
        self.props_lf.columnconfigure(2, weight = 1)
        self.props_lf.columnconfigure(3, weight = 0)
        self.prop2field = {}

        self.bt_add_prop = VarButton(
            self.props_lf,
            text = _("Add"),
            command = self.on_prop_add
        )
        self.bt_add_prop.grid(
            column = 3,
            sticky = "NEWS"
        )
コード例 #12
0
ファイル: device_tree_widget.py プロジェクト: windsmell/qdt
    def __init__(self, root, *args, **kw):
        GUIDialog.__init__(self, master=root, *args, **kw)
        self.qom_type_var = root.qom_type_var

        self.title(_("Device Tree"))
        self.grid()

        self.columnconfigure(0, weight=1, minsize=300)
        self.columnconfigure(2, weight=1, minsize=100)
        self.rowconfigure(0, weight=1)

        geom = "+" + str(int(root.winfo_rootx())) \
             + "+" + str(int(root.winfo_rooty()))
        self.geometry(geom)

        self.focus()

        self.device_tree = dt = VarTreeview(self, selectmode="browse")
        dt["columns"] = "Macros"

        dt.heading("#0", text=_("Devices"))
        dt.heading("Macros", text=_("Macros"))

        dt.bind("<ButtonPress-1>", self.on_b1_press_dt)

        dt.grid(row=0, column=0, sticky="NEWS")

        add_scrollbars_native(self, dt)

        column_fr = Frame(self, borderwidth=0)
        column_fr.grid(row=0, column=2, rowspan=2, sticky="SEWN")
        column_fr.columnconfigure(0, weight=1)
        column_fr.rowconfigure(0, weight=1)
        column_fr.rowconfigure(1, weight=1, minsize=100)

        fr_at = VarLabelFrame(column_fr, text=_("Architecture filter"))
        fr_at.grid(row=0, column=0, sticky="SEWN")

        self.fr_qt = VarLabelFrame(column_fr, text=_("Select QOM type"))
        self.fr_qt.grid(row=1, column=0, sticky="SEWN")

        self.add_button = VarButton(column_fr,
                                    text=_("Select"),
                                    command=self.on_select_qom_type)
        self.add_button.grid(row=2, column=0, sticky="EW")
        self.add_button.config(state="disabled")

        qtype_dt = self.qtype_dt = qvd_get(
            root.mach.project.build_path,
            version=root.mach.project.target_version).qvc.device_tree

        arch_buttons = Frame(fr_at, borderwidth=0)
        arch_buttons.pack(fill="x")

        arch_buttons.columnconfigure(0, weight=1, minsize=60)
        arch_buttons.columnconfigure(1, weight=1, minsize=60)
        arch_buttons.columnconfigure(2, weight=1, minsize=60)

        bt_all_arches = VarButton(arch_buttons,
                                  text=_("All"),
                                  command=self.select_arches)
        bt_all_arches.grid(row=0, column=0, sticky="EW")

        bt_none_arches = VarButton(arch_buttons,
                                   text=_("None"),
                                   command=self.deselect_arches)
        bt_none_arches.grid(row=0, column=1, sticky="EW")

        bt_invert_arches = VarButton(arch_buttons,
                                     text=_("Invert"),
                                     command=self.invert_arches)
        bt_invert_arches.grid(row=0, column=2, sticky="EW")

        if not qtype_dt.arches:
            bt_all_arches.config(state="disabled")
            bt_none_arches.config(state="disabled")
            bt_invert_arches.config(state="disabled")

        arch_selector_outer = Frame(fr_at, borderwidth=0)
        arch_selector_outer.pack(fill="both", anchor="w")
        arch_selector, scrolltag = add_scrollbars_with_tags(
            arch_selector_outer, GUIFrame)

        ac = self.arches_checkbox = []
        for a in sorted(list(qtype_dt.arches)):
            v = IntVar()
            c = Checkbutton(arch_selector,
                text = a,
                variable = v,
                command = lambda arch = a, var = v: \
                    self.on_toggle_arch(arch, var)
            )

            c.pack(expand=1, anchor="w")
            c.bindtags((scrolltag, ) + c.bindtags())
            c.select()
            ac.append(c)

        # key: item
        # value: ItemDesc
        self.detached_items = {}
        self.all_items = {}

        self.disabled_arches = set()

        self.qom_create_tree("", qtype_dt.children)
コード例 #13
0
ファイル: project_widget.py プロジェクト: dimas3452/qdt
 def main(self):
     proj = self.pw.p
     self.qvd = qvd_get(proj.build_path, version=proj.target_version)
     if self.qvd.qvc is None:
         yield self.qvd.co_init_cache()
     self.pw.qvd = self.qvd
コード例 #14
0
ファイル: qdc-gui.py プロジェクト: laerreal/qdt
    def begin(self):
        self.prev_qvd = qvd_get(self.p.build_path).use()

        yield self.p.co_gen_all(self.s)