func ParseBucketObject()

in gcs-fetcher/pkg/common/common.go [47:72]


func ParseBucketObject(uri string) (bucket, object string, generation int64, err error) {
	switch {
	case strings.HasPrefix(uri, "https://storage.googleapis.com/") || strings.HasPrefix(uri, "http://storage.googleapis.com/"):
		// uri looks like "https://storage.googleapis.com/staging.my-project.appspot.com/3aa080e5e72a610b06033dbfee288483d87cfd61"
		if parts := strings.Split(uri, "/"); len(parts) >= 5 {
			bucket := parts[3]
			object, generation, err := splitObjectAndGeneration(strings.Join(parts[4:], "/"))
			if err != nil {
				return "", "", 0, fmt.Errorf("cannot parse object/generation from uri %q", uri)
			}
			return bucket, object, generation, nil
		}
	case strings.HasPrefix(uri, "gs://"):
		// uri looks like "gs://my-bucket/manifest-20171004T175409.json"
		if parts := strings.Split(uri, "/"); len(parts) >= 4 {
			bucket := parts[2]
			object, generation, err := splitObjectAndGeneration(strings.Join(parts[3:], "/"))
			if err != nil {
				return "", "", 0, fmt.Errorf("cannot parse object/generation from uri %q", uri)
			}

			return bucket, object, generation, nil
		}
	}
	return "", "", 0, fmt.Errorf("cannot parse bucket/object from uri %q", uri)
}