Skip to content

Commit

Permalink
use buffer as temp instead of file
Browse files Browse the repository at this point in the history
  • Loading branch information
taylormonacelli committed Jul 25, 2024
1 parent a0f06d2 commit df0b005
Showing 1 changed file with 16 additions and 26 deletions.
42 changes: 16 additions & 26 deletions core/file.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,25 +47,9 @@ func init() {
func ProcessFile(ctx context.Context, path string, transform func(io.Reader, io.Writer) error) error {
logger := logr.FromContextOrDiscard(ctx)
logger = logger.WithValues("file", path)
logger.Info("Processing file")
logger.V(1).Info("Processing file")

originalFile, err := os.OpenFile(path, os.O_RDWR, 0o644)
if err != nil {
return fmt.Errorf("failed to open original file: %w", err)
}
defer func() {
if err := unlockFile(originalFile); err != nil {
logger.Error(err, "Failed to unlock file")
}
originalFile.Close()
}()

err = lockFile(originalFile)
if err != nil {
return err
}

originalContent, err := io.ReadAll(originalFile)
originalContent, err := os.ReadFile(path)
if err != nil {
return fmt.Errorf("failed to read original file: %w", err)
}
Expand All @@ -77,31 +61,37 @@ func ProcessFile(ctx context.Context, path string, transform func(io.Reader, io.
}

if bytes.Equal(originalContent, processedContent.Bytes()) {
logger.Info("File content unchanged, skipping write")
logger.V(1).Info("File content unchanged, skipping write")
return nil
}

_, err = originalFile.Seek(0, 0)
originalFile, err := os.OpenFile(path, os.O_RDWR|os.O_TRUNC, 0o644)
if err != nil {
return fmt.Errorf("failed to seek to the beginning of original file: %w", err)
return fmt.Errorf("failed to open original file: %w", err)
}
defer func() {
if err := unlockFile(originalFile); err != nil {
logger.Error(err, "Failed to unlock file")
}
originalFile.Close()
}()

err = originalFile.Truncate(0)
err = lockFile(originalFile)
if err != nil {
return fmt.Errorf("failed to truncate original file: %w", err)
return err
}

_, err = io.Copy(originalFile, &processedContent)
_, err = originalFile.Write(processedContent.Bytes())
if err != nil {
return fmt.Errorf("failed to write processed content to file: %w", err)
}

err = originalFile.Sync()
if err != nil {
return fmt.Errorf("failed to sync file: %w", err)
return fmt.Errorf("failed to s.V(1)ync file: %w", err)
}

logger.Info("Successfully processed and updated file")
logger.V(1).Info("Successfully processed and updated file")
return nil
}

Expand Down

0 comments on commit df0b005

Please sign in to comment.