AlistGo/alist · error
merge file %s: %w
Error message
merge file %s: %w
What it means
During a merge-move in the SJTU driver, moving one child FILE via moveItem(..., isFolder=false, "overwrite") failed. The message names the file. The overwrite strategy is forced for files, so a failure is an API/transport problem, not a conflict.
Source
Thrown at drivers/sjtu_netdisk/driver.go:313
Size: child.GetSize(),
IsFolder: true,
}
_, mergeErr := d.Move(ctx, childObj, &model.Object{
Path: targetPath,
Name: srcObj.GetName(),
IsFolder: true,
})
if mergeErr != nil {
return nil, fmt.Errorf("merge subfolder %s: %w", child.GetName(), mergeErr)
}
} else if childErr != nil {
return nil, fmt.Errorf("merge subfolder %s: %w", child.GetName(), childErr)
}
} else {
// child item is file
fileErr := d.moveItem(ctx, childSrcPath, targetDstPath, child.GetName(), false, "overwrite")
if fileErr != nil {
return nil, fmt.Errorf("merge file %s: %w", child.GetName(), fileErr)
}
}
}
// delete empty srcObj folder
_ = d.Remove(ctx, srcObj)
return &model.Object{
Name: srcObj.GetName(),
Size: srcObj.GetSize(),
IsFolder: true,
Modified: srcObj.ModTime(),
Ctime: srcObj.CreateTime(),
Path: targetPath,
}, nil
}
}
View on GitHub (pinned to 843d9dc814)
Solutions
- Identify the named file and retry moving just its parent folder (already-moved items are idempotent under overwrite)
- Check the wrapped error for auth or permission causes and fix them
- Close other clients that may hold the file, then retry
- For very large folders, split the move into per-subfolder operations
Defensive patterns
Strategy: retry
Try / catch
if err != nil && strings.Contains(err.Error(), "merge file") {
f := extractFileName(err)
return moveSingleFile(ctx, f) // overwrite strategy makes retries safe
} Prevention
- Close files held open by other clients before moving
- Retry the named file — 'overwrite' makes it idempotent
- Split very large merges into smaller batches
When it happens
Trigger: Move folder into an existing folder of the same name; the per-file move PUT call errors (expired token, 5xx, file locked server-side).
Common situations: Large folder merges where one file fails and aborts the whole operation; files open/locked by another client; intermittent API errors during bulk moves.
Related errors
- merge: list source folder failed: %w
- merge subfolder %s: %w
- rename merge file %s: %w
- copy merge file %s: %w
- rename merge: list source folder failed: %w
AI-assisted analysis of AlistGo/alist@843d9dc814 (2026-08-15).
Data as JSON: /api/errors/c16e422aca0bb146.
Report an issue: GitHub.