loading up the forgejo repo on tangled to test page performance

refactor(cli): improve dump's temporary file handling (#7350)

- Create temporary directory inside of a temporary directory (useful for a work-in-progress Landlock implementation, as we will not want to "whitelist" the entirety of the /tmp directory in our case, i.e. /tmp/forgejo-dump-133552095).
- The database is always removed after dump is complete.
- The temporary directory is removed if no temporary directory has been explicitly set (as in, created by Forgejo in /tmp or equivalent).

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/7350
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: Panagiotis "Ivory" Vasilopoulos <git@n0toose.net>
Co-committed-by: Panagiotis "Ivory" Vasilopoulos <git@n0toose.net>

Changed files
+15 -3
cmd
+15 -3
cmd/dump.go
··· 122 122 &cli.StringFlag{ 123 123 Name: "tempdir", 124 124 Aliases: []string{"t"}, 125 - Value: os.TempDir(), 126 125 Usage: "Temporary dir path", 127 126 }, 128 127 &cli.StringFlag{ ··· 288 287 } 289 288 290 289 tmpDir := ctx.String("tempdir") 290 + if tmpDir == "" { 291 + tmpDir, err = os.MkdirTemp("", "forgejo-dump-*") 292 + if err != nil { 293 + fatal("Failed to create temporary directory: %v", err) 294 + } 295 + 296 + defer func() { 297 + if err := util.Remove(tmpDir); err != nil { 298 + log.Warn("Failed to remove temporary directory: %s: Error: %v", tmpDir, err) 299 + } 300 + }() 301 + } 302 + 291 303 if _, err := os.Stat(tmpDir); os.IsNotExist(err) { 292 304 fatal("Path does not exist: %s", tmpDir) 293 305 } 294 306 295 307 dbDump, err := os.CreateTemp(tmpDir, "forgejo-db.sql") 296 308 if err != nil { 297 - fatal("Failed to create tmp file: %v", err) 309 + fatal("Failed to create temporary file: %v", err) 298 310 } 299 311 defer func() { 300 312 _ = dbDump.Close() 301 313 if err := util.Remove(dbDump.Name()); err != nil { 302 - log.Warn("Failed to remove temporary file: %s: Error: %v", dbDump.Name(), err) 314 + log.Warn("Failed to remove temporary database file: %s: Error: %v", dbDump.Name(), err) 303 315 } 304 316 }() 305 317