writeManagedFile atomically writes content to the managed file for name.
(name, content string)
| 232 | |
| 233 | // writeManagedFile atomically writes content to the managed file for name. |
| 234 | func writeManagedFile(name, content string) error { |
| 235 | if err := os.MkdirAll(managedDir(), 0o755); err != nil { |
| 236 | return fmt.Errorf("instructions: mkdir managed dir: %w", err) |
| 237 | } |
| 238 | dest := managedFilePath(name) |
| 239 | tmp, err := os.CreateTemp(managedDir(), ".tmp-*") |
| 240 | if err != nil { |
| 241 | return fmt.Errorf("instructions: tmp file: %w", err) |
| 242 | } |
| 243 | tmpName := tmp.Name() |
| 244 | if _, err := tmp.WriteString(content); err != nil { |
| 245 | tmp.Close() |
| 246 | os.Remove(tmpName) |
| 247 | return fmt.Errorf("instructions: write tmp: %w", err) |
| 248 | } |
| 249 | if err := tmp.Close(); err != nil { |
| 250 | os.Remove(tmpName) |
| 251 | return fmt.Errorf("instructions: close tmp: %w", err) |
| 252 | } |
| 253 | if err := os.Rename(tmpName, dest); err != nil { |
| 254 | os.Remove(tmpName) |
| 255 | return fmt.Errorf("instructions: rename managed file: %w", err) |
| 256 | } |
| 257 | return nil |
| 258 | } |
| 259 | |
| 260 | // Create persists a new instruction and writes its managed file. |
| 261 | func (s *Store) Create(ctx context.Context, name, desc, content string) (Instruction, error) { |
no test coverage detected