code: def GetRelativePath(self, path_spec):
      
      location = getattr(path_spec, 'location', None)
      if location is None:
        raise errors.PathSpecError('Path specification missing location.')
  
      if path_spec_factory.Factory.IsSystemLevelTypeIndicator(
          self._file_system.type_indicator):
        if not location.startswith(self._mount_point.location):
          raise errors.PathSpecError(
              'Path specification does not contain mount point.')
      else:
        if not hasattr(path_spec, 'parent'):
          raise errors.PathSpecError('Path specification missing parent.')
  
        if path_spec.parent != self._mount_point:
          raise errors.PathSpecError(
              'Path specification does not contain mount point.')
  
      path_segments = self._file_system.SplitPath(location)
  
      if path_spec_factory.Factory.IsSystemLevelTypeIndicator(
          self._file_system.type_indicator):
        mount_point_path_segments = self._file_system.SplitPath(
            self._mount_point.location)
        path_segments = path_segments[len(mount_point_path_segments):]
  
      return '{0:s}{1:s}'.format(
          self._file_system.PATH_SEPARATOR,
          self._file_system.PATH_SEPARATOR.join(path_segments))
docs: Returns the relative path based on a resolved path specification.
  
      The relative path is the location of the upper most path specification.
      The the location of the mount point is stripped off if relevant.
  
      Args:
        path_spec (PathSpec): path specification.
  
      Returns:
        str: corresponding relative path or None if the relative path could not
            be determined.
  
      Raises:
        PathSpecError: if the path specification is incorrect.