code: def post_build_geo_coverage(self):
          
  
          spaces = set()
          grains = set()
  
          def resolve(term):
              places = list(self.library.search.search_identifiers(term))
  
              if not places:
                  raise BuildError(
                      "Failed to find space identifier '{}' in full text identifier search".format(term))
  
              return places[0].vid
  
          if self.metadata.about.space:  # From the bundle metadata
              spaces.add(resolve(self.metadata.about.space))
  
          if self.metadata.about.grain:  # From the bundle metadata
              grains.add(self.metadata.about.grain)
  
          if self.identity.bspace:  # And from the bundle name
              spaces.add(resolve(self.identity.bspace))
  
          # From all of the partitions
          for p in self.partitions.all:
              if 'geo_coverage' in p.record.data:
                  for space in p.record.data['geo_coverage']:
                      spaces.add(space)
  
              if 'geo_grain' in p.record.data:
                  for grain in p.record.data['geo_grain']:
                      grains.add(grain)
  
          def conv_grain(g):
              """Some grain are expressed as summary level names, not gvids."""
              try:
                  c = GVid.get_class(g)
                  return b(c().summarize())
              except NotASummaryName:
                  return g
  
          self.metadata.coverage.geo = sorted(spaces)
          self.metadata.coverage.grain = sorted(conv_grain(g) for g in grains)
  
          self.metadata.write_to_dir()
docs: Collect all of the geocoverage for the bundle.