reset upstream subtrees to yocto 2.6

Reset the following subtrees on thud HEAD:

  poky: 87e3a9739d
  meta-openembedded: 6094ae18c8
  meta-security: 31dc4e7532
  meta-raspberrypi: a48743dc36
  meta-xilinx: c42016e2e6

Also re-apply backports that didn't make it into thud:
  poky:
    17726d0 systemd-systemctl-native: handle Install wildcards

  meta-openembedded:
    4321a5d libtinyxml2: update to 7.0.1
    042f0a3 libcereal: Add native and nativesdk classes
    e23284f libcereal: Allow empty package
    030e8d4 rsyslog: curl-less build with fmhttp PACKAGECONFIG
    179a1b9 gtest: update to 1.8.1

Squashed OpenBMC subtree compatibility updates:
  meta-aspeed:
    Brad Bishop (1):
          aspeed: add yocto 2.6 compatibility

  meta-ibm:
    Brad Bishop (1):
          ibm: prepare for yocto 2.6

  meta-ingrasys:
    Brad Bishop (1):
          ingrasys: set layer compatibility to yocto 2.6

  meta-openpower:
    Brad Bishop (1):
          openpower: set layer compatibility to yocto 2.6

  meta-phosphor:
    Brad Bishop (3):
          phosphor: set layer compatibility to thud
          phosphor: libgpg-error: drop patches
          phosphor: react to fitimage artifact rename

    Ed Tanous (4):
          Dropbear: upgrade options for latest upgrade
          yocto2.6: update openssl options
          busybox: remove upstream watchdog patch
          systemd: Rebase CONFIG_CGROUP_BPF patch

Change-Id: I7b1fe71cca880d0372a82d94b5fd785323e3a9e7
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/poky/scripts/oe-depends-dot b/poky/scripts/oe-depends-dot
index 5cec23b..6c7e9d3 100755
--- a/poky/scripts/oe-depends-dot
+++ b/poky/scripts/oe-depends-dot
@@ -47,6 +47,51 @@
         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 @@
                 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: