From 00a0fb68d2773674dc951410ac1773f3cd11e1b1 Mon Sep 17 00:00:00 2001 From: "Sascha L. Teichmann" Date: Tue, 2 Aug 2022 21:52:02 +0200 Subject: [PATCH] Fix transaction part two --- cmd/csaf_aggregator/lazytransaction.go | 27 +++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/cmd/csaf_aggregator/lazytransaction.go b/cmd/csaf_aggregator/lazytransaction.go index a1f24f9..a5e5ef1 100644 --- a/cmd/csaf_aggregator/lazytransaction.go +++ b/cmd/csaf_aggregator/lazytransaction.go @@ -9,6 +9,7 @@ package main import ( + "log" "os" "path/filepath" @@ -71,16 +72,24 @@ func (lt *lazyTransaction) commit() error { } defer func() { lt.dst = "" }() - // Switch directories. - symlink := filepath.Join(lt.dstDir, filepath.Base(lt.src)) - if err := os.Symlink(lt.dstDir, symlink); err != nil { - os.RemoveAll(lt.dstDir) - return err - } - if err := os.Rename(symlink, lt.src); err != nil { - os.RemoveAll(lt.dstDir) + // The expanded path of the original link. + orig, err := filepath.EvalSymlinks(lt.src) + if err != nil { + os.RemoveAll(lt.dst) return err } - return os.RemoveAll(lt.src) + // Switch directories. + symlink := filepath.Join(lt.dst, filepath.Base(lt.src)) + if err := os.Symlink(lt.dst, symlink); err != nil { + os.RemoveAll(lt.dst) + return err + } + log.Printf("Move %q -> %q\n", symlink, lt.src) + if err := os.Rename(symlink, lt.src); err != nil { + os.RemoveAll(lt.dst) + return err + } + + return os.RemoveAll(orig) }