Логирование: ревью всего кода и рефакторинг в соответствии с конвенциями
This commit is contained in:
+15
-11
@@ -21,6 +21,8 @@ import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"syscall"
|
||||
|
||||
"git.vakhrushev.me/av/jellybit/internal/logctx"
|
||||
)
|
||||
|
||||
// MediaType — вид контента.
|
||||
@@ -230,7 +232,8 @@ var ErrCollision = errors.New("layout: target collision")
|
||||
// доводит начатое. При коллизии (цель занята чужим файлом) возвращает
|
||||
// ErrCollision, не перезаписывая. Если хардлинк невозможен (разные ФС или ФС
|
||||
// не поддерживает link) — фолбэк на копирование файла с предупреждением в лог.
|
||||
func (l *Layouter) Apply(_ context.Context, links []Link) ([]Result, error) {
|
||||
func (l *Layouter) Apply(ctx context.Context, links []Link) ([]Result, error) {
|
||||
log := logctx.FromOr(ctx, l.log)
|
||||
results := make([]Result, 0, len(links))
|
||||
for _, ln := range links {
|
||||
root := l.movies
|
||||
@@ -244,13 +247,13 @@ func (l *Layouter) Apply(_ context.Context, links []Link) ([]Result, error) {
|
||||
return results, fmt.Errorf("layout: mkdir %q: %w", filepath.Dir(ln.Dst), err)
|
||||
}
|
||||
|
||||
status, err := l.linkOne(ln.Src, ln.Dst)
|
||||
status, err := l.linkOne(log, ln.Src, ln.Dst)
|
||||
if err != nil {
|
||||
l.log.Error("layout: link failed",
|
||||
"src", ln.Src, "dst", ln.Dst, "kind", ln.Kind, "err", err)
|
||||
log.Error("layout link failed",
|
||||
"src", ln.Src, "dst", ln.Dst, "kind", ln.Kind, "error", err)
|
||||
return results, err
|
||||
}
|
||||
l.log.Debug("layout: link applied",
|
||||
log.Debug("layout link applied",
|
||||
"src", ln.Src, "dst", ln.Dst, "kind", ln.Kind, "status", status)
|
||||
results = append(results, Result{Link: ln, Status: status})
|
||||
}
|
||||
@@ -259,7 +262,7 @@ func (l *Layouter) Apply(_ context.Context, links []Link) ([]Result, error) {
|
||||
|
||||
// linkOne создаёт одну ссылку, разбирая «уже существует» и невозможность
|
||||
// хардлинка (фолбэк на копирование).
|
||||
func (l *Layouter) linkOne(src, dst string) (LinkStatus, error) {
|
||||
func (l *Layouter) linkOne(log *slog.Logger, src, dst string) (LinkStatus, error) {
|
||||
err := os.Link(src, dst)
|
||||
if err == nil {
|
||||
return StatusLinked, nil
|
||||
@@ -279,8 +282,8 @@ func (l *Layouter) linkOne(src, dst string) (LinkStatus, error) {
|
||||
// раскладку — копируем файл и предупреждаем: диск дублируется, но
|
||||
// задача доходит до конца. dst здесь заведомо отсутствует (иначе был бы
|
||||
// fs.ErrExist выше).
|
||||
l.log.Warn("layout: hardlink unsupported, falling back to file copy",
|
||||
"src", src, "dst", dst, "err", err)
|
||||
log.Warn("layout hardlink unsupported, file copy fallback",
|
||||
"src", src, "dst", dst, "error", err)
|
||||
if cerr := copyFile(src, dst); cerr != nil {
|
||||
return "", fmt.Errorf("layout: copy fallback %q → %q: %w", src, dst, cerr)
|
||||
}
|
||||
@@ -364,7 +367,8 @@ func sameFile(src, dst string) (bool, error) {
|
||||
// Undo удаляет ссылки и подчищает опустевшие каталоги. Снимает только пути
|
||||
// строго под библиотеками (источник недосягаем). Отсутствующая цель — не
|
||||
// ошибка (идемпотентно). Возвращает число удалённых ссылок.
|
||||
func (l *Layouter) Undo(_ context.Context, links []Link) (int, error) {
|
||||
func (l *Layouter) Undo(ctx context.Context, links []Link) (int, error) {
|
||||
log := logctx.FromOr(ctx, l.log)
|
||||
removed := 0
|
||||
for _, ln := range links {
|
||||
root := l.movies
|
||||
@@ -378,11 +382,11 @@ func (l *Layouter) Undo(_ context.Context, links []Link) (int, error) {
|
||||
if errors.Is(err, fs.ErrNotExist) {
|
||||
continue
|
||||
}
|
||||
l.log.Error("layout: undo remove failed", "dst", ln.Dst, "err", err)
|
||||
log.Error("layout undo remove failed", "dst", ln.Dst, "error", err)
|
||||
return removed, fmt.Errorf("layout: undo remove %q: %w", ln.Dst, err)
|
||||
}
|
||||
removed++
|
||||
l.log.Debug("layout: link removed", "dst", ln.Dst)
|
||||
log.Debug("layout link removed", "dst", ln.Dst)
|
||||
pruneEmptyDirs(filepath.Dir(ln.Dst), root)
|
||||
}
|
||||
return removed, nil
|
||||
|
||||
Reference in New Issue
Block a user