Remove unused target tree data for Hob
cover Remove unused target tree data for Hob
From: Liping Ke <[email protected]>
Since Hob only needes package dependency information, we can create a new version of package information retrieving methods, remove task dependency information, so that we can greatly reduce data loading time for Hob
The following changes since commit fa4bcfdb73167f8159b88e5a4d711c0d37627a70:
Darren Hart (1):
bb-matrix: correct BB and PM number canonicalization
are available in the git repository at:
git://git.pokylinux.org/poky-contrib lke/hob_perf
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=lke/hob_perf
Liping Ke (1):
Remove unused target tree data for Hob
bitbake/lib/bb/cooker.py | 96 +++++++++++++++++++++++++++++++++++++--------- 1 files changed, 77 insertions(+), 19 deletions(-)
PATCH 1/1 Remove unused target tree data for Hob
From: Liping Ke <[email protected]>
Since Hob only needes package dependency information, we can create a new version of package information retrieving methods, remove task dependency information, so that we can greatly reduce data loading time for Hob
--- bitbake/lib/bb/cooker.py | 96 +++++++++++++++++++++++++++++++++++++--------- 1 files changed, 77 insertions(+), 19 deletions(-)
bitbake/lib/bb/cooker.py +77 -19
@@ -296,13 +296,12 @@ class BBCooker: if data.getVarFlag( e, 'python', envdata ): logger.plain("\npython %s () {\n%s}\n", e, data.getVar(e, envdata, 1)) - def prepareTreeData(self, pkgs_to_build, task): + def prepareTreeData(self, pkgs_to_build, task, runqueue=True): """ Prepare a runqueue and taskdata object for iteration over pkgs_to_build """ # Need files parsed self.updateCache() - # If we are told to do the None task then query the default task if (task == None): task = self.configuration.cmd
@@ -322,12 +321,22 @@ class BBCooker: runlist.append([k, "do_%s" % task]) taskdata.add_unresolved(localdata, self.status) - rq = bb.runqueue.RunQueue(self, self.configuration.data, self.status, taskdata, runlist) - rq.rqdata.prepare() - - return taskdata, rq - - def generateDepTreeData(self, pkgs_to_build, task, more_meta=False): + # For some users, take Hob as example, we only need less dependency data + # mark this kind of user as "less_meta" data requester + if (runqueue): + rq = bb.runqueue.RunQueue(self, self.configuration.data, self.status, taskdata, runlist) + rq.rqdata.prepare() + return taskdata, rq + else: + tasks_fnid = [] + if len(taskdata.tasks_name) == 0: + # Nothing to do + return + for task in xrange(len(taskdata.tasks_name)): + tasks_fnid.append(taskdata.tasks_fnid[task]) + return taskdata, tasks_fnid + + def generateTaskDepTreeData(self, pkgs_to_build, task): """ Create a dependency tree of pkgs_to_build, returning the data. When more_meta is set to True include summary, license and group
@@ -351,18 +360,10 @@ class BBCooker: fn = taskdata.fn_index[fnid] pn = self.status.pkg_fn[fn] version = "%s:%s-%s" % self.status.pkg_pepvpr[fn] - if more_meta: - summary = self.status.summary[fn] - lic = self.status.license[fn] - section = self.status.section[fn] if pn not in depend_tree["pn"]: depend_tree["pn"][pn] = {} depend_tree["pn"][pn]["filename"] = fn depend_tree["pn"][pn]["version"] = version - if more_meta: - depend_tree["pn"][pn]["summary"] = summary - depend_tree["pn"][pn]["license"] = lic - depend_tree["pn"][pn]["section"] = section for dep in rq.rqdata.runq_depends[task]: depfn = taskdata.fn_index[rq.rqdata.runq_fnid[dep]] deppn = self.status.pkg_fn[depfn]
@@ -407,12 +408,69 @@ class BBCooker: return depend_tree + def generatePkgDepTreeData(self, pkgs_to_build, task): + """ + Create a dependency tree of pkgs_to_build, returning the data. + When more_meta is set to True include summary, license and group + information in the returned tree. + """ + taskdata, tasks_fnid = self.prepareTreeData(pkgs_to_build, task, False) + + seen_fnids = [] + depend_tree = {} + depend_tree["depends"] = {} + depend_tree["pn"] = {} + depend_tree["rdepends-pn"] = {} + depend_tree["packages"] = {} + depend_tree["rdepends-pkg"] = {} + + for task in xrange(len(tasks_fnid)): + fnid = tasks_fnid[task] + fn = taskdata.fn_index[fnid] + pn = self.status.pkg_fn[fn] + version = "%s:%s-%s" % self.status.pkg_pepvpr[fn] + summary = self.status.summary[fn] + lic = self.status.license[fn] + section = self.status.section[fn] + if pn not in depend_tree["pn"]: + depend_tree["pn"][pn] = {} + depend_tree["pn"][pn]["filename"] = fn + depend_tree["pn"][pn]["version"] = version + depend_tree["pn"][pn]["summary"] = summary + depend_tree["pn"][pn]["license"] = lic + depend_tree["pn"][pn]["section"] = section + + if fnid not in seen_fnids: + seen_fnids.append(fnid) + packages = [] + + depend_tree["depends"][pn] = [] + for dep in taskdata.depids[fnid]: + depend_tree["depends"][pn].append(taskdata.build_names_index[dep]) + + depend_tree["rdepends-pn"][pn] = [] + for rdep in taskdata.rdepids[fnid]: + depend_tree["rdepends-pn"][pn].append(taskdata.run_names_index[rdep]) + + rdepends = self.status.rundeps[fn] + for package in rdepends: + packages.append(package) + + for package in packages: + if package not in depend_tree["packages"]: + depend_tree["packages"][package] = {} + depend_tree["packages"][package]["pn"] = pn + depend_tree["packages"][package]["filename"] = fn + depend_tree["packages"][package]["version"] = version + + return depend_tree + def generateDepTreeEvent(self, pkgs_to_build, task): """ Create a task dependency graph of pkgs_to_build. Generate an event with the result """ - depgraph = self.generateDepTreeData(pkgs_to_build, task) + depgraph = self.generateTaskDepTreeData(pkgs_to_build, task) bb.event.fire(bb.event.DepTreeGenerated(depgraph), self.configuration.data) def generateDotGraphFiles(self, pkgs_to_build, task):
@@ -421,7 +479,7 @@ class BBCooker: Save the result to a set of .dot files. """ - depgraph = self.generateDepTreeData(pkgs_to_build, task) + depgraph = self.generateTaskDepTreeData(pkgs_to_build, task) # Prints a flattened form of package-depends below where subpackages of a package are merged into the main pn depends_file = file('pn-depends.dot', 'w' )
@@ -628,7 +686,7 @@ class BBCooker: pkgs = pkgs + extra_pkgs # generate a dependency tree for all our packages - tree = self.generateDepTreeData(pkgs, 'build', more_meta=True) + tree = self.generatePkgDepTreeData(pkgs, 'build') bb.event.fire(bb.event.TargetsTreeGenerated(tree), self.configuration.data) def buildWorldTargetList(self):
Signature · 1 line
1.7.0.4
Quoted 32 lines · Ke Liping
From: Liping Ke <[email protected]>
Since Hob only needes package dependency information, we can create a new version of package information retrieving methods, remove task dependency information, so that we can greatly reduce data loading time for Hob
Signed-off-by Liping Ke <[email protected]>--- bitbake/lib/bb/cooker.py | 96 +++++++++++++++++++++++++++++++++++++--------- 1 files changed, 77 insertions(+), 19 deletions(-)bitbake/lib/bb/cooker.py +1
-2@@ -296,13 +296,12 @@ class BBCooker: if data.getVarFlag( e, 'python', envdata ): logger.plain("\npython %s () {\n%s}\n", e, data.getVar(e, envdata, 1)) - def prepareTreeData(self, pkgs_to_build, task): + def prepareTreeData(self, pkgs_to_build, task, runqueue=True): """ Prepare a runqueue and taskdata object for iteration over pkgs_to_build """ # Need files parsed self.updateCache() - # If we are told to do the None task then query the default task if (task == None): task = self.configuration.cmd
bitbake/lib/bb/cooker.py class BBCooker: · line 322
Quoted 2 lines
bitbake/lib/bb/cooker.py +0
-0@@ -322,12 +321,22 @@ class BBCooker: runlist.append([k, "do_%s" % task]) taskdata.add_unresolved(localdata, self.status)
I'd prefer this method end around, not take the runqueue parameter and just be responsible for updating the cache and returning taskdata
bitbake/lib/bb/cooker.py class BBCooker: · line 329
Quoted 13 lines
bitbake/lib/bb/cooker.py +6
-6- rq = bb.runqueue.RunQueue(self, self.configuration.data, self.status, taskdata, runlist) - rq.rqdata.prepare() - - return taskdata, rq - - def generateDepTreeData(self, pkgs_to_build, task, more_meta=False): + # For some users, take Hob as example, we only need less dependency data + # mark this kind of user as "less_meta" data requester + if (runqueue): + rq = bb.runqueue.RunQueue(self, self.configuration.data, self.status, taskdata, runlist) + rq.rqdata.prepare() + return taskdata, rq
Runqueue construction could then be rolled into generateTaskDepTreeData
bitbake/lib/bb/cooker.py class BBCooker: · line 337
Quoted 8 lines
bitbake/lib/bb/cooker.py +8
-0+ else: + tasks_fnid = [] + if len(taskdata.tasks_name) == 0: + # Nothing to do + return + for task in xrange(len(taskdata.tasks_name)): + tasks_fnid.append(taskdata.tasks_fnid[task]) + return taskdata, tasks_fnid
and creation of tasks_fnid could be rolled into generatePkgDepTreeData
Quoted 11 lines
bitbake/lib/bb/cooker.py +2
-2+ + def generateTaskDepTreeData(self, pkgs_to_build, task): """ Create a dependency tree of pkgs_to_build, returning the data. When more_meta is set to True include summary, license and group@@ -351,18 +360,10 @@ class BBCooker: fn = taskdata.fn_index[fnid] pn = self.status.pkg_fn[fn] version = "%s:%s-%s" % self.status.pkg_pepvpr[fn] - if more_meta: - summary = self.status.summary[fn]
bitbake/lib/bb/cooker.py class BBCooker: · line 365
Quoted 10 lines
bitbake/lib/bb/cooker.py +0
-6- lic = self.status.license[fn] - section = self.status.section[fn] if pn not in depend_tree["pn"]: depend_tree["pn"][pn] = {} depend_tree["pn"][pn]["filename"] = fn depend_tree["pn"][pn]["version"] = version - if more_meta: - depend_tree["pn"][pn]["summary"] = summary - depend_tree["pn"][pn]["license"] = lic - depend_tree["pn"][pn]["section"] = section
Glad to see these go :-)
Quoted 4 lines
bitbake/lib/bb/cooker.py +0
-0for dep in rq.rqdata.runq_depends[task]: depfn = taskdata.fn_index[rq.rqdata.runq_fnid[dep]] deppn = self.status.pkg_fn[depfn]
bitbake/lib/bb/cooker.py class BBCooker: · line 417
Quoted 10 lines
bitbake/lib/bb/cooker.py +7
-0@@ -407,12 +408,69 @@ class BBCooker: return depend_tree + def generatePkgDepTreeData(self, pkgs_to_build, task): + """ + Create a dependency tree of pkgs_to_build, returning the data. + When more_meta is set to True include summary, license and group + information in the returned tree. + """ + taskdata, tasks_fnid = self.prepareTreeData(pkgs_to_build, task, False)
per above tasks_fnid would be populated here.
Quoted 70 lines
bitbake/lib/bb/cooker.py +52
-2+ + seen_fnids = [] + depend_tree = {} + depend_tree["depends"] = {} + depend_tree["pn"] = {} + depend_tree["rdepends-pn"] = {} + depend_tree["packages"] = {} + depend_tree["rdepends-pkg"] = {} + + for task in xrange(len(tasks_fnid)): + fnid = tasks_fnid[task] + fn = taskdata.fn_index[fnid] + pn = self.status.pkg_fn[fn] + version = "%s:%s-%s" % self.status.pkg_pepvpr[fn] + summary = self.status.summary[fn] + lic = self.status.license[fn] + section = self.status.section[fn] + if pn not in depend_tree["pn"]: + depend_tree["pn"][pn] = {} + depend_tree["pn"][pn]["filename"] = fn + depend_tree["pn"][pn]["version"] = version + depend_tree["pn"][pn]["summary"] = summary + depend_tree["pn"][pn]["license"] = lic + depend_tree["pn"][pn]["section"] = section + + if fnid not in seen_fnids: + seen_fnids.append(fnid) + packages = [] + + depend_tree["depends"][pn] = [] + for dep in taskdata.depids[fnid]: + depend_tree["depends"][pn].append(taskdata.build_names_index[dep]) + + depend_tree["rdepends-pn"][pn] = [] + for rdep in taskdata.rdepids[fnid]: + depend_tree["rdepends-pn"][pn].append(taskdata.run_names_index[rdep]) + + rdepends = self.status.rundeps[fn] + for package in rdepends: + packages.append(package) + + for package in packages: + if package not in depend_tree["packages"]: + depend_tree["packages"][package] = {} + depend_tree["packages"][package]["pn"] = pn + depend_tree["packages"][package]["filename"] = fn + depend_tree["packages"][package]["version"] = version + + return depend_tree + def generateDepTreeEvent(self, pkgs_to_build, task): """ Create a task dependency graph of pkgs_to_build. Generate an event with the result """ - depgraph = self.generateDepTreeData(pkgs_to_build, task) + depgraph = self.generateTaskDepTreeData(pkgs_to_build, task) bb.event.fire(bb.event.DepTreeGenerated(depgraph), self.configuration.data) def generateDotGraphFiles(self, pkgs_to_build, task):@@ -421,7 +479,7 @@ class BBCooker: Save the result to a set of .dot files. """ - depgraph = self.generateDepTreeData(pkgs_to_build, task) + depgraph = self.generateTaskDepTreeData(pkgs_to_build, task) # Prints a flattened form of package-depends below where subpackages of a package are merged into the main pn depends_file = file('pn-depends.dot', 'w' )
bitbake/lib/bb/cooker.py class BBCooker: · line 692
Quoted 8 lines
bitbake/lib/bb/cooker.py +1
-1@@ -628,7 +686,7 @@ class BBCooker: pkgs = pkgs + extra_pkgs # generate a dependency tree for all our packages - tree = self.generateDepTreeData(pkgs, 'build', more_meta=True) + tree = self.generatePkgDepTreeData(pkgs, 'build') bb.event.fire(bb.event.TargetsTreeGenerated(tree), self.configuration.data) def buildWorldTargetList(self):
Looking good to me. The revised patch would ideally be sent to [email protected]
Thanks,
Joshua
Signature · 3 lines
Joshua Lock
Yocto Project "Johannes factotum"
Intel Open Source Technology CentreQuoted 4 lines
Looking good to me. The revised patch would ideally be sent to [email protected]
Hi, Josh
Thanks for the review. I will rebase to the latest poky master and resend the patch to the bitbake-devel list too!
criping
Op 21 jul. 2011, om 07:50 heeft Ke Liping het volgende geschreven:
Quoted 6 lines
From: Liping Ke <[email protected]>
Since Hob only needes package dependency information, we can create a new version of package information retrieving methods, remove task dependency information, so that we can greatly reduce data loading time for Hob
Does this fix the bug where DEPENDS are leaking into the RDEPENDS list? If you select something like systemd the gui will list 'gtk' as a runtime dep for the image, while it's only a transitive buildtime one.
Quoted 169 lines
Signed-off-by Liping Ke <[email protected]>---
bitbake/lib/bb/cooker.py| 96 +++++++++++++++++++++++++++++++++++++---------1 files changed, 77 insertions(+), 19 deletions(-)bitbake/lib/bb/cooker.py +77
-19@@ -296,13 +296,12 @@ class BBCooker: if data.getVarFlag( e, 'python', envdata ): logger.plain("\npython %s () {\n%s}\n", e, data.getVar(e, envdata, 1)) - def prepareTreeData(self, pkgs_to_build, task): + def prepareTreeData(self, pkgs_to_build, task, runqueue=True): """ Prepare a runqueue and taskdata object for iteration over pkgs_to_build """ # Need files parsed self.updateCache() - # If we are told to do the None task then query the default task if (task == None): task = self.configuration.cmd@@ -322,12 +321,22 @@ class BBCooker: runlist.append([k, "do_%s" % task]) taskdata.add_unresolved(localdata, self.status) - rq = bb.runqueue.RunQueue(self, self.configuration.data, self.status, taskdata, runlist) - rq.rqdata.prepare() - - return taskdata, rq - - def generateDepTreeData(self, pkgs_to_build, task, more_meta=False): + # For some users, take Hob as example, we only need less dependency data + # mark this kind of user as "less_meta" data requesterG + if (runqueue): + rq = bb.runqueue.RunQueue(self, self.configuration.data, self.status, taskdata, runlist) + rq.rqdata.prepare() + return taskdata, rq + else: + tasks_fnid = [] + if len(taskdata.tasks_name) == 0: + # Nothing to do + return + for task in xrange(len(taskdata.tasks_name)): + tasks_fnid.append(taskdata.tasks_fnid[task]) + return taskdata, tasks_fnid + + def generateTaskDepTreeData(self, pkgs_to_build, task): """ Create a dependency tree of pkgs_to_build, returning the data. When more_meta is set to True include summary, license and group@@ -351,18 +360,10 @@ class BBCooker: fn = taskdata.fn_index[fnid] pn = self.status.pkg_fn[fn] version = "%s:%s-%s" % self.status.pkg_pepvpr[fn] - if more_meta: - summary = self.status.summary[fn] - lic = self.status.license[fn] - section = self.status.section[fn] if pn not in depend_tree["pn"]: depend_tree["pn"][pn] = {} depend_tree["pn"][pn]["filename"] = fn depend_tree["pn"][pn]["version"] = version - if more_meta: - depend_tree["pn"][pn]["summary"] = summary - depend_tree["pn"][pn]["license"] = lic - depend_tree["pn"][pn]["section"] = section for dep in rq.rqdata.runq_depends[task]: depfn = taskdata.fn_index[rq.rqdata.runq_fnid[dep]] deppn = self.status.pkg_fn[depfn]@@ -407,12 +408,69 @@ class BBCooker: return depend_tree + def generatePkgDepTreeData(self, pkgs_to_build, task): + """ + Create a dependency tree of pkgs_to_build, returning the data. + When more_meta is set to True include summary, license and group + information in the returned tree. + """ + taskdata, tasks_fnid = self.prepareTreeData(pkgs_to_build, task, False) + + seen_fnids = [] + depend_tree = {} + depend_tree["depends"] = {} + depend_tree["pn"] = {} + depend_tree["rdepends-pn"] = {} + depend_tree["packages"] = {} + depend_tree["rdepends-pkg"] = {} + + for task in xrange(len(tasks_fnid)): + fnid = tasks_fnid[task] + fn = taskdata.fn_index[fnid] + pn = self.status.pkg_fn[fn] + version = "%s:%s-%s" % self.status.pkg_pepvpr[fn] + summary = self.status.summary[fn] + lic = self.status.license[fn] + section = self.status.section[fn] + if pn not in depend_tree["pn"]: + depend_tree["pn"][pn] = {} + depend_tree["pn"][pn]["filename"] = fn + depend_tree["pn"][pn]["version"] = version + depend_tree["pn"][pn]["summary"] = summary + depend_tree["pn"][pn]["license"] = lic + depend_tree["pn"][pn]["section"] = section + + if fnid not in seen_fnids: + seen_fnids.append(fnid) + packages = [] + + depend_tree["depends"][pn] = [] + for dep in taskdata.depids[fnid]: + depend_tree["depends"][pn].append(taskdata.build_names_index[dep]) + + depend_tree["rdepends-pn"][pn] = [] + for rdep in taskdata.rdepids[fnid]: + depend_tree["rdepends-pn"][pn].append(taskdata.run_names_index[rdep]) + + rdepends = self.status.rundeps[fn] + for package in rdepends: + packages.append(package) + + for package in packages: + if package not in depend_tree["packages"]: + depend_tree["packages"][package] = {} + depend_tree["packages"][package]["pn"] = pn + depend_tree["packages"][package]["filename"] = fn + depend_tree["packages"][package]["version"] = version + + return depend_tree + def generateDepTreeEvent(self, pkgs_to_build, task): """ Create a task dependency graph of pkgs_to_build. Generate an event with the result """ - depgraph = self.generateDepTreeData(pkgs_to_build, task) + depgraph = self.generateTaskDepTreeData(pkgs_to_build, task) bb.event.fire(bb.event.DepTreeGenerated(depgraph), self.configuration.data) def generateDotGraphFiles(self, pkgs_to_build, task):@@ -421,7 +479,7 @@ class BBCooker: Save the result to a set of .dot files. """ - depgraph = self.generateDepTreeData(pkgs_to_build, task) + depgraph = self.generateTaskDepTreeData(pkgs_to_build, task) # Prints a flattened form of package-depends below where subpackages of a package are merged into the main pn depends_file = file('pn-depends.dot', 'w' )@@ -628,7 +686,7 @@ class BBCooker: pkgs = pkgs + extra_pkgs # generate a dependency tree for all our packages - tree = self.generateDepTreeData(pkgs, 'build', more_meta=True) + tree = self.generatePkgDepTreeData(pkgs, 'build') bb.event.fire(bb.event.TargetsTreeGenerated(tree), self.configuration.data) def buildWorldTargetList(self):Signature · 6 lines
1.7.0.4 _______________________________________________ yocto mailing list [email protected] https://lists.yoctoproject.org/listinfo/yocto
Quoted 10 lines · Koen Kooi
Op 21 jul. 2011, om 07:50 heeft Ke Liping het volgende geschreven:
Quoted 6 lines
From: Liping Ke <[email protected]>
Since Hob only needes package dependency information, we can create a new version of package information retrieving methods, remove task dependency information, so that we can greatly reduce data loading time for Hob
Quoted 4 lines
Does this fix the bug where DEPENDS are leaking into the RDEPENDS list? If you select something like systemd the gui will list 'gtk' as a runtime dep for the image, while it's only a transitive buildtime one.
It does not, 1263 filed.
http://bugzilla.pokylinux.org/show_bug.cgi?id=1263
Regards,
Joshua
Signature · 3 lines
Joshua Lock
Yocto Project "Johannes Factotum"
Intel Open Source Technology CentreQuoted 6 lines · Ke Liping
From: Liping Ke <[email protected]>
Since Hob only needes package dependency information, we can create a new version of package information retrieving methods, remove task dependency information, so that we can greatly reduce data loading time for Hob
Liping, this patch looks reasonable and works as advertised however as alluded to when I reviewed this patch on the yocto mailing list I don't like the idea of a functions return type depending on an optional parameter.
Therefore I've taken the liberty of changing the patch myself to prevent you having to interpret my review and submit again. I hope you don't mind?
I'm going to send another pull request with my modified patch and my SoB.
Cheers,
Joshua
Quoted 11 lines
Signed-off-by Liping Ke <[email protected]>--- bitbake/lib/bb/cooker.py | 96 +++++++++++++++++++++++++++++++++++++--------- 1 files changed, 77 insertions(+), 19 deletions(-)bitbake/lib/bb/cooker.py +0
-0
bitbake/lib/bb/cooker.py class BBCooker: · line 299
Quoted 5 lines
bitbake/lib/bb/cooker.py +1
-1@@ -296,13 +296,12 @@ class BBCooker: if data.getVarFlag( e, 'python', envdata ): logger.plain("\npython %s () {\n%s}\n", e, data.getVar(e, envdata, 1)) - def prepareTreeData(self, pkgs_to_build, task): + def prepareTreeData(self, pkgs_to_build, task, runqueue=True):
See above.
Quoted 11 lines
bitbake/lib/bb/cooker.py +0
-1""" Prepare a runqueue and taskdata object for iteration over pkgs_to_build """ # Need files parsed self.updateCache() - # If we are told to do the None task then query the default task if (task == None): task = self.configuration.cmd@@ -322,12 +321,22 @@ class BBCooker: runlist.append([k, "do_%s" % task])
bitbake/lib/bb/cooker.py class BBCooker: · line 325
Quoted 10 lines
bitbake/lib/bb/cooker.py +2
-6taskdata.add_unresolved(localdata, self.status) - rq = bb.runqueue.RunQueue(self, self.configuration.data, self.status, taskdata, runlist) - rq.rqdata.prepare() - - return taskdata, rq - - def generateDepTreeData(self, pkgs_to_build, task, more_meta=False): + # For some users, take Hob as example, we only need less dependency data + # mark this kind of user as "less_meta" data requesterG
This comment is now wrong...
Quoted 7 lines
bitbake/lib/bb/cooker.py +7
-0+ if (runqueue): + rq = bb.runqueue.RunQueue(self, self.configuration.data, self.status, taskdata, runlist) + rq.rqdata.prepare() + return taskdata, rq + else: + tasks_fnid = [] + if len(taskdata.tasks_name) == 0:
bitbake/lib/bb/cooker.py class BBCooker: · line 342
Quoted 10 lines
bitbake/lib/bb/cooker.py +7
-0+ # Nothing to do + return + for task in xrange(len(taskdata.tasks_name)): + tasks_fnid.append(taskdata.tasks_fnid[task]) + return taskdata, tasks_fnid + + def generateTaskDepTreeData(self, pkgs_to_build, task): """ Create a dependency tree of pkgs_to_build, returning the data. When more_meta is set to True include summary, license and group
This comment is also wrong
Quoted 108 lines
bitbake/lib/bb/cooker.py +60
-11@@ -351,18 +360,10 @@ class BBCooker: fn = taskdata.fn_index[fnid] pn = self.status.pkg_fn[fn] version = "%s:%s-%s" % self.status.pkg_pepvpr[fn] - if more_meta: - summary = self.status.summary[fn] - lic = self.status.license[fn] - section = self.status.section[fn] if pn not in depend_tree["pn"]: depend_tree["pn"][pn] = {} depend_tree["pn"][pn]["filename"] = fn depend_tree["pn"][pn]["version"] = version - if more_meta: - depend_tree["pn"][pn]["summary"] = summary - depend_tree["pn"][pn]["license"] = lic - depend_tree["pn"][pn]["section"] = section for dep in rq.rqdata.runq_depends[task]: depfn = taskdata.fn_index[rq.rqdata.runq_fnid[dep]] deppn = self.status.pkg_fn[depfn]@@ -407,12 +408,69 @@ class BBCooker: return depend_tree + def generatePkgDepTreeData(self, pkgs_to_build, task): + """ + Create a dependency tree of pkgs_to_build, returning the data. + When more_meta is set to True include summary, license and group + information in the returned tree. + """ + taskdata, tasks_fnid = self.prepareTreeData(pkgs_to_build, task, False) + + seen_fnids = [] + depend_tree = {} + depend_tree["depends"] = {} + depend_tree["pn"] = {} + depend_tree["rdepends-pn"] = {} + depend_tree["packages"] = {} + depend_tree["rdepends-pkg"] = {} + + for task in xrange(len(tasks_fnid)): + fnid = tasks_fnid[task] + fn = taskdata.fn_index[fnid] + pn = self.status.pkg_fn[fn] + version = "%s:%s-%s" % self.status.pkg_pepvpr[fn] + summary = self.status.summary[fn] + lic = self.status.license[fn] + section = self.status.section[fn] + if pn not in depend_tree["pn"]: + depend_tree["pn"][pn] = {} + depend_tree["pn"][pn]["filename"] = fn + depend_tree["pn"][pn]["version"] = version + depend_tree["pn"][pn]["summary"] = summary + depend_tree["pn"][pn]["license"] = lic + depend_tree["pn"][pn]["section"] = section + + if fnid not in seen_fnids: + seen_fnids.append(fnid) + packages = [] + + depend_tree["depends"][pn] = [] + for dep in taskdata.depids[fnid]: + depend_tree["depends"][pn].append(taskdata.build_names_index[dep]) + + depend_tree["rdepends-pn"][pn] = [] + for rdep in taskdata.rdepids[fnid]: + depend_tree["rdepends-pn"][pn].append(taskdata.run_names_index[rdep]) + + rdepends = self.status.rundeps[fn] + for package in rdepends: + packages.append(package) + + for package in packages: + if package not in depend_tree["packages"]: + depend_tree["packages"][package] = {} + depend_tree["packages"][package]["pn"] = pn + depend_tree["packages"][package]["filename"] = fn + depend_tree["packages"][package]["version"] = version + + return depend_tree + def generateDepTreeEvent(self, pkgs_to_build, task): """ Create a task dependency graph of pkgs_to_build. Generate an event with the result """ - depgraph = self.generateDepTreeData(pkgs_to_build, task) + depgraph = self.generateTaskDepTreeData(pkgs_to_build, task) bb.event.fire(bb.event.DepTreeGenerated(depgraph), self.configuration.data) def generateDotGraphFiles(self, pkgs_to_build, task):@@ -421,7 +479,7 @@ class BBCooker: Save the result to a set of .dot files. """ - depgraph = self.generateDepTreeData(pkgs_to_build, task) + depgraph = self.generateTaskDepTreeData(pkgs_to_build, task) # Prints a flattened form of package-depends below where subpackages of a package are merged into the main pn depends_file = file('pn-depends.dot', 'w' )@@ -628,7 +686,7 @@ class BBCooker: pkgs = pkgs + extra_pkgs # generate a dependency tree for all our packages - tree = self.generateDepTreeData(pkgs, 'build', more_meta=True) + tree = self.generatePkgDepTreeData(pkgs, 'build') bb.event.fire(bb.event.TargetsTreeGenerated(tree), self.configuration.data) def buildWorldTargetList(self):
Signature · 3 lines
Joshua Lock
Yocto Project "Johannes Factotum"
Intel Open Source Technology Centre