* [PATCH 0/1] oe-depends-dot: print dependency chains for '--why' option @ 2018-05-08 2:19 Chen Qi 2018-05-08 2:19 ` [PATCH 1/1] " Chen Qi 0 siblings, 1 reply; 3+ messages in thread From: Chen Qi @ 2018-05-08 2:19 UTC (permalink / raw) To: openembedded-core The following changes since commit f301a3bc110608c3684c78dd62e276beea73bd94: settings-daemon: Drop pointless apply=yes in SRC_URI (2018-05-04 13:28:06 +0100) are available in the git repository at: git://git.pokylinux.org/poky-contrib ChenQi/improve-oe-depends-dot http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=ChenQi/improve-oe-depends-dot Chen Qi (1): oe-depends-dot: print dependency chains for '--why' option scripts/oe-depends-dot | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) -- 1.9.1 ^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 1/1] oe-depends-dot: print dependency chains for '--why' option 2018-05-08 2:19 [PATCH 0/1] oe-depends-dot: print dependency chains for '--why' option Chen Qi @ 2018-05-08 2:19 ` Chen Qi 2018-05-08 2:22 ` Robert Yang 0 siblings, 1 reply; 3+ messages in thread From: Chen Qi @ 2018-05-08 2:19 UTC (permalink / raw) To: openembedded-core When using '--why' option, we currently only list elements. It's better to print out dependency chains. This patch adds such abitility. e.g. $ oe-depends-dot -k util-linux -w recipe-depends.dot Because: packagegroup-core-boot systemd-compat-units systemd shadow core-image-minimal dbus e2fsprogs core-image-minimal -> packagegroup-core-boot -> systemd-compat-units -> systemd -> dbus -> shadow -> util-linux core-image-minimal -> packagegroup-core-boot -> systemd-compat-units -> systemd -> dbus -> e2fsprogs -> util-linux Signed-off-by: Chen Qi <Qi.Chen@windriver.com> --- scripts/oe-depends-dot | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/scripts/oe-depends-dot b/scripts/oe-depends-dot index 5cec23b..6c7e9d3 100755 --- a/scripts/oe-depends-dot +++ b/scripts/oe-depends-dot @@ -47,6 +47,51 @@ class Dot(object): if len(sys.argv) != 3 and len(sys.argv) < 5: print('ERROR: Not enough args, see --help for usage') + @staticmethod + def insert_dep_chain(chain, rdeps, alldeps): + """ + insert elements to chain from rdeps, according to alldeps + """ + # chain should at least contain one element + if len(chain) == 0: + raise + + inserted_elements = [] + for rdep in rdeps: + if rdep in chain: + continue + else: + for i in range(0, len(chain)-1): + if chain[i] in alldeps[rdep] and rdep in alldeps[chain[i+1]]: + chain.insert(i+1, rdep) + inserted_elements.append(rdep) + break + if chain[-1] in alldeps[rdep] and rdep not in chain: + chain.append(rdep) + inserted_elements.append(rdep) + return inserted_elements + + @staticmethod + def print_dep_chains(key, rdeps, alldeps): + rlist = rdeps.copy() + chain = [] + removed_rdeps = [] # hold rdeps removed from rlist + + chain.append(key) + while (len(rlist) != 0): + # insert chain from rlist + inserted_elements = Dot.insert_dep_chain(chain, rlist, alldeps) + if not inserted_elements: + if chain[-1] in rlist: + rlist.remove(chain[-1]) + removed_rdeps.append(chain[-1]) + chain.pop() + continue + else: + # insert chain from removed_rdeps + Dot.insert_dep_chain(chain, removed_rdeps, alldeps) + print(' -> '.join(list(reversed(chain)))) + def main(self): #print(self.args.dotfile[0]) # The format is {key: depends} @@ -109,6 +154,7 @@ class Dot(object): if self.args.key in v and not k in reverse_deps: reverse_deps.append(k) print('Because: %s' % ' '.join(reverse_deps)) + Dot.print_dep_chains(self.args.key, reverse_deps, depends) if __name__ == "__main__": try: -- 1.9.1 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH 1/1] oe-depends-dot: print dependency chains for '--why' option 2018-05-08 2:19 ` [PATCH 1/1] " Chen Qi @ 2018-05-08 2:22 ` Robert Yang 0 siblings, 0 replies; 3+ messages in thread From: Robert Yang @ 2018-05-08 2:22 UTC (permalink / raw) To: Chen Qi, openembedded-core On 05/08/2018 10:19 AM, Chen Qi wrote: > When using '--why' option, we currently only list elements. > It's better to print out dependency chains. This patch adds > such abitility. > > e.g. > $ oe-depends-dot -k util-linux -w recipe-depends.dot > Because: packagegroup-core-boot systemd-compat-units systemd shadow core-image-minimal dbus e2fsprogs > core-image-minimal -> packagegroup-core-boot -> systemd-compat-units -> systemd -> dbus -> shadow -> util-linux > core-image-minimal -> packagegroup-core-boot -> systemd-compat-units -> systemd -> dbus -> e2fsprogs -> util-linux Looks great to me. // Robert > > Signed-off-by: Chen Qi <Qi.Chen@windriver.com> > --- > scripts/oe-depends-dot | 46 ++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 46 insertions(+) > > diff --git a/scripts/oe-depends-dot b/scripts/oe-depends-dot > index 5cec23b..6c7e9d3 100755 > --- a/scripts/oe-depends-dot > +++ b/scripts/oe-depends-dot > @@ -47,6 +47,51 @@ class Dot(object): > if len(sys.argv) != 3 and len(sys.argv) < 5: > print('ERROR: Not enough args, see --help for usage') > > + @staticmethod > + def insert_dep_chain(chain, rdeps, alldeps): > + """ > + insert elements to chain from rdeps, according to alldeps > + """ > + # chain should at least contain one element > + if len(chain) == 0: > + raise > + > + inserted_elements = [] > + for rdep in rdeps: > + if rdep in chain: > + continue > + else: > + for i in range(0, len(chain)-1): > + if chain[i] in alldeps[rdep] and rdep in alldeps[chain[i+1]]: > + chain.insert(i+1, rdep) > + inserted_elements.append(rdep) > + break > + if chain[-1] in alldeps[rdep] and rdep not in chain: > + chain.append(rdep) > + inserted_elements.append(rdep) > + return inserted_elements > + > + @staticmethod > + def print_dep_chains(key, rdeps, alldeps): > + rlist = rdeps.copy() > + chain = [] > + removed_rdeps = [] # hold rdeps removed from rlist > + > + chain.append(key) > + while (len(rlist) != 0): > + # insert chain from rlist > + inserted_elements = Dot.insert_dep_chain(chain, rlist, alldeps) > + if not inserted_elements: > + if chain[-1] in rlist: > + rlist.remove(chain[-1]) > + removed_rdeps.append(chain[-1]) > + chain.pop() > + continue > + else: > + # insert chain from removed_rdeps > + Dot.insert_dep_chain(chain, removed_rdeps, alldeps) > + print(' -> '.join(list(reversed(chain)))) > + > def main(self): > #print(self.args.dotfile[0]) > # The format is {key: depends} > @@ -109,6 +154,7 @@ class Dot(object): > if self.args.key in v and not k in reverse_deps: > reverse_deps.append(k) > print('Because: %s' % ' '.join(reverse_deps)) > + Dot.print_dep_chains(self.args.key, reverse_deps, depends) > > if __name__ == "__main__": > try: > ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-05-08 2:23 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-05-08 2:19 [PATCH 0/1] oe-depends-dot: print dependency chains for '--why' option Chen Qi 2018-05-08 2:19 ` [PATCH 1/1] " Chen Qi 2018-05-08 2:22 ` Robert Yang
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox