Skip to content

Commit

Permalink
feat: updated logic for pulling uncompressed
Browse files Browse the repository at this point in the history
  • Loading branch information
a1994sc committed Feb 7, 2025
1 parent d21a84c commit 7d41fa3
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 30 deletions.
2 changes: 1 addition & 1 deletion src/internal/packager2/load.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ func LoadPackage(ctx context.Context, opt LoadOptions) (*layout.PackageLayout, e
isPartial := false
switch srcType {
case "oci":
isPartial, err = pullOCI(ctx, opt.Source, tarPath, opt.Shasum, opt.Filter)
isPartial, tarPath, err = pullOCI(ctx, opt.Source, tmpDir, opt.Shasum, opt.Filter)
if err != nil {
return nil, err
}
Expand Down
46 changes: 17 additions & 29 deletions src/internal/packager2/pull.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ func Pull(ctx context.Context, src, dir, shasum string, filter filters.Component
isPartial := false
switch u.Scheme {
case "oci":
isPartial, err = pullOCI(ctx, src, tmpPath, shasum, filter)
isPartial, tmpPath, err = pullOCI(ctx, src, tmpDir, shasum, filter)
if err != nil {
return err
}
Expand Down Expand Up @@ -84,22 +84,6 @@ func Pull(ctx context.Context, src, dir, shasum string, filter filters.Component
if err != nil && !errors.Is(err, os.ErrNotExist) {
return err
}
if strings.HasSuffix(name, ".tar") {
tmpDataPath := filepath.Join(tmpDir, "data")
err := archiver.Unarchive(tmpPath, tmpDataPath)
if err != nil {
return err
}
allTheFiles, err := filepath.Glob(filepath.Join(tmpDataPath, "*"))
if err != nil {
return err
}
err = archiver.Archive(allTheFiles, tarPath)
if err != nil {
return err
}
return nil
}
dstFile, err := os.Create(tarPath)
if err != nil {
return err
Expand All @@ -117,10 +101,10 @@ func Pull(ctx context.Context, src, dir, shasum string, filter filters.Component
return nil
}

func pullOCI(ctx context.Context, src, tarPath, shasum string, filter filters.ComponentFilterStrategy) (bool, error) {
func pullOCI(ctx context.Context, src, tarDir, shasum string, filter filters.ComponentFilterStrategy) (bool, string, error) {
tmpDir, err := utils.MakeTempDir(config.CommonOptions.TempDirectory)
if err != nil {
return false, err
return false, "", err
}
defer os.Remove(tmpDir)
if shasum != "" {
Expand All @@ -129,48 +113,52 @@ func pullOCI(ctx context.Context, src, tarPath, shasum string, filter filters.Co
arch := config.GetArch()
remote, err := zoci.NewRemote(ctx, src, oci.PlatformForArch(arch))
if err != nil {
return false, err
return false, "", err
}
desc, err := remote.ResolveRoot(ctx)
if err != nil {
return false, fmt.Errorf("could not fetch images index: %w", err)
return false, "", fmt.Errorf("could not fetch images index: %w", err)
}
layersToPull := []ocispec.Descriptor{}
isPartial := false
tarPath := filepath.Join(tarDir, "data.tar")
if supportsFiltering(desc.Platform) {
root, err := remote.FetchRoot(ctx)
if err != nil {
return false, err
return false, "", err
}
if len(root.Layers) != len(layersToPull) {
isPartial = true
}
pkg, err := remote.FetchZarfYAML(ctx)
if err != nil {
return false, err
return false, "", err
}
pkg.Components, err = filter.Apply(pkg)
if err != nil {
return false, err
return false, "", err
}
layersToPull, err = remote.LayersFromRequestedComponents(ctx, pkg.Components)
if err != nil {
return false, err
return false, "", err
}
if !pkg.Metadata.Uncompressed {
tarPath = fmt.Sprintf("%s.zst", tarPath)
}
}
_, err = remote.PullPackage(ctx, tmpDir, config.CommonOptions.OCIConcurrency, layersToPull...)
if err != nil {
return false, err
return false, "", err
}
allTheLayers, err := filepath.Glob(filepath.Join(tmpDir, "*"))
if err != nil {
return false, err
return false, "", err
}
err = archiver.Archive(allTheLayers, tarPath)
if err != nil {
return false, err
return false, "", err
}
return isPartial, nil
return isPartial, tarPath, nil
}

func pullHTTP(ctx context.Context, src, tarPath, shasum string) error {
Expand Down

0 comments on commit 7d41fa3

Please sign in to comment.