code: def changed(self, src, path, dest):
          
          modified = {path: self.parents[path].updated}
  
          while True:
              for path in modified:
                  if self.parents[path]:
                      mtime = modified.pop(path)
                      for parent in self.parents[path]:
                          modified[parent] = max(mtime,
                                                 self.parents[parent].updated)
                      break
              else:
                  break
  
          for path in modified:
              self._build(src, path, dest, modified[path])
docs: If `path` does not have any parents, it is built. Otherwise, it will
          attempt to build every parent of `path` (or their parents). Output file
          modification times are taken into account to prevent unnecessary
          builds.