code: func (lb *FileBackend) GetImageInfo(dockerURL string) ([]string, string, *common.ParsedDockerURL, error) {
  	// a missing Docker URL could mean that the file only contains one
  	// image so it's okay for dockerURL to be blank
  	var parsedDockerURL *common.ParsedDockerURL
  	if dockerURL != "" {
  		var err error
  		parsedDockerURL, err = common.ParseDockerURL(dockerURL)
  		if err != nil {
  			return nil, "", nil, fmt.Errorf("image provided couldnot be parsed: %v", err)
  		}
  	}
  
  	var ancestry []string
  	// default file name is the tar name stripped
  	name := strings.Split(filepath.Base(lb.file.Name()), ".")[0]
  	appImageID, ancestry, parsedDockerURL, err := getImageID(lb.file, parsedDockerURL, name, lb.debug)
  	if err != nil {
  		return nil, "", nil, err
  	}
  
  	if len(ancestry) == 0 {
  		ancestry, err = getAncestry(lb.file, appImageID, lb.debug)
  		if err != nil {
  			return nil, "", nil, fmt.Errorf("error getting ancestry: %v", err)
  		}
  	} else {
  		// for oci the first image is the config
  		ancestry = append([]string{appImageID}, ancestry...)
  	}
  
  	return ancestry, appImageID, parsedDockerURL, nil
  }
docs: // GetImageInfo, given the url for a docker image, will return the
  // following:
  // - []string: an ordered list of all layer hashes
  // - string: a unique identifier for this image, like a hash of the manifest
  // - *common.ParsedDockerURL: a parsed docker URL
  // - error: an error if one occurred