docs: def _load_repodata(filepaths, extra_data=None, metadata=None):
          """Load all the available pacakges information.
  
          For downloaded repodata files (repo.continuum.io), additional
          data provided (anaconda cloud), and additional metadata and merge into
          a single set of packages and apps.
          """
          extra_data = extra_data if extra_data else {}
          metadata = metadata if metadata else {}
          repodata = []
          for filepath in filepaths:
              compressed = filepath.endswith('.bz2')
              mode = 'rb' if filepath.endswith('.bz2') else 'r'
  
              if os.path.isfile(filepath):
                  with open(filepath, mode) as f:
                      raw_data = f.read()
  
                  if compressed:
                      data = bz2.decompress(raw_data)
                  else:
                      data = raw_data
  
                  try:
                      data = json.loads(to_text_string(data, 'UTF-8'))
                  except Exception as error:
                      logger.error(str(error))
                      data = {}
  
                  repodata.append(data)
  
          all_packages = {}
          for data in repodata:
              packages = data.get('packages', {})
              for canonical_name in packages:
                  data = packages[canonical_name]
                  name, version, b = tuple(canonical_name.rsplit('-', 2))
  
                  if name not in all_packages:
                      all_packages[name] = {'versions': set(),
                                            'size': {},
                                            'type': {},
                                            'app_entry': {},
                                            'app_type': {},
                                            }
                  elif name in metadata:
                      temp_data = all_packages[name]
                      temp_data['home'] = metadata[name].get('home', '')
                      temp_data['license'] = metadata[name].get('license', '')
                      temp_data['summary'] = metadata[name].get('summary', '')
                      temp_data['latest_version'] = metadata[name].get('version')
                      all_packages[name] = temp_data
  
                  all_packages[name]['versions'].add(version)
                  all_packages[name]['size'][version] = data.get('size', '')
  
                  # Only the latest builds will have the correct metadata for
                  # apps, so only store apps that have the app metadata
                  if data.get('type'):
                      all_packages[name]['type'][version] = data.get('type')
                      all_packages[name]['app_entry'][version] = data.get(
                          'app_entry')
                      all_packages[name]['app_type'][version] = data.get(
                          'app_type')
  
          all_apps = {}
          for name in all_packages:
              versions = sort_versions(list(all_packages[name]['versions']))
              all_packages[name]['versions'] = versions[:]
  
              for version in versions:
                  has_type = all_packages[name].get('type')
                  # Has type in this case implies being an app
                  if has_type:
                      all_apps[name] = all_packages[name].copy()
                      # Remove all versions that are not apps!
                      versions = all_apps[name]['versions'][:]
                      types = all_apps[name]['type']
                      app_versions = [v for v in versions if v in types]
                      all_apps[name]['versions'] = app_versions
  
          return all_packages, all_apps