Fix folder creation local

This commit is contained in:
Roberto Jimenez Sanchez committed 2025-01-29 17:19:58 +01:00
1 parent 439b07b90c
commit 45f89f9fad
2 files changed
+15 -11

No files matched your search

@@ -115,13 +115,13 @@ func (r *exporter) Export(ctx context.Context,
if err != nil && !(errors.Is(err, repository.ErrFileNotFound) || apierrors.IsNotFound(err)) {
logger.Error("failed to check if folder exists before writing", "error", err)
return fmt.Errorf("failed to check if folder exists before writing: %w", err)
} else if err != nil { // ErrFileNotFound
err = r.repository.Create(ctx, p, ref, nil, "export of folder `"+p+"` in namespace "+ns)
} else {
} else if err == nil {
logger.Info("folder already exists")
return nil
}
if err != nil {
// ErrFileNotFound
if err := r.repository.Create(ctx, p, ref, nil, "export of folder `"+p+"` in namespace "+ns); err != nil {
logger.Error("failed to write a folder in repository", "error", err)
return fmt.Errorf("failed to write folder in repo: %w", err)
}
@@ -191,14 +191,14 @@ func (r *localRepository) Read(ctx context.Context, filePath string, ref string)
filePath, err := safepath.Join(r.path, filePath)
if err != nil {
return nil, err
return nil, fmt.Errorf("join path: %w", err)
}
info, err := os.Stat(filePath)
if errors.Is(err, os.ErrNotExist) {
return nil, ErrFileNotFound
} else if err != nil {
return nil, err
return nil, fmt.Errorf("stat file: %w", err)
}
path := strings.TrimPrefix(filePath, safepath.Clean(r.path))
@@ -214,12 +214,12 @@ func (r *localRepository) Read(ctx context.Context, filePath string, ref string)
//nolint:gosec
data, err := os.ReadFile(filePath)
if err != nil {
return nil, err
return nil, fmt.Errorf("read file: %w", err)
}
hash, _, err := r.calculateFileHash(filePath)
if err != nil {
return nil, err
return nil, fmt.Errorf("calculate hash of file: %w", err)
}
return &FileInfo{
@@ -291,11 +291,13 @@ func (r *localRepository) Create(ctx context.Context, sanitisedPath string, ref
return err
}
// before sanitizing, check if the path is a directory
isDir := strings.HasSuffix(sanitisedPath, "/")
inputUnsafePath := sanitisedPath // do NOT use in path operations, only for responses!
sanitisedPath, err := safepath.Join(r.path, sanitisedPath)
if err != nil {
return err
return fmt.Errorf("join path: %w", err)
}
_, err = os.Stat(sanitisedPath)
@@ -306,7 +308,7 @@ func (r *localRepository) Create(ctx context.Context, sanitisedPath string, ref
return apierrors.NewAlreadyExists(provisioning.RepositoryResourceInfo.GroupResource(), inputUnsafePath)
}
if strings.HasSuffix(sanitisedPath, "/") {
if isDir {
if data != nil {
return apierrors.NewBadRequest("data cannot be provided for a directory")
}
@@ -314,6 +316,8 @@ func (r *localRepository) Create(ctx context.Context, sanitisedPath string, ref
if err := os.MkdirAll(sanitisedPath, 0700); err != nil {
return apierrors.NewInternalError(fmt.Errorf("failed to create path: %w", err))
}
return nil
}
if err := os.MkdirAll(path.Dir(sanitisedPath), 0700); err != nil {
@@ -330,7 +334,7 @@ func (r *localRepository) Update(ctx context.Context, path string, ref string, d
path, err := safepath.Join(r.path, path)
if err != nil {
return err
return fmt.Errorf("join path: %w", err)
}
if strings.HasSuffix(path, "/") {