AlistGo/alist · error
rename merge subfolder %s: %w
Error message
rename merge subfolder %s: %w
What it means
During a rename-merge in the SJTU driver, recursively moving one child subfolder into the renamed target folder failed. The message names the failing subfolder. The wrapped error is the recursive Move failure (auth, 5xx, or a deeper nested conflict).
Source
Thrown at drivers/sjtu_netdisk/driver.go:415
// 409 means conflict name
if resp.StatusCode() == http.StatusConflict {
children, listErr := d.List(ctx, srcObj, model.ListArgs{})
if listErr != nil {
return nil, fmt.Errorf("rename merge: list source folder failed: %w", listErr)
}
targetDirObj := &model.Object{Path: dstPath, Name: newName, IsFolder: true}
for _, child := range children {
childSrcPath := path.Join(srcObj.GetPath(), child.GetName())
if child.IsDir() {
childObj := &model.Object{
Name: child.GetName(), Path: childSrcPath,
Size: child.GetSize(), IsFolder: true,
}
if _, mergeErr := d.Move(ctx, childObj, targetDirObj); mergeErr != nil {
return nil, fmt.Errorf("rename merge subfolder %s: %w", child.GetName(), mergeErr)
}
} else {
fileErr := d.moveItem(ctx, childSrcPath, dstPath, child.GetName(), false, "overwrite")
if fileErr != nil {
return nil, fmt.Errorf("rename merge file %s: %w", child.GetName(), fileErr)
}
}
}
_ = d.Remove(ctx, srcObj)
return &model.Object{
Name: newName,
Size: srcObj.GetSize(),
IsFolder: true,
Modified: srcObj.ModTime(),
Ctime: srcObj.CreateTime(),
Path: dstPath,View on GitHub (pinned to 843d9dc814)
Solutions
- Retry the rename — already-moved children make the retry effectively resumable
- Check the wrapped error for auth/permission causes and remediate
- Rename subfolders individually to isolate the failing branch
- Verify destination state before retrying to avoid duplicates
Defensive patterns
Strategy: retry
Try / catch
if err != nil && strings.Contains(err.Error(), "rename merge subfolder") {
sub := extractSubfolderName(err)
return moveSingleSubfolder(ctx, sub)
} Prevention
- Retry from the named subfolder; earlier children already moved
- Fix underlying auth errors before retrying
- Avoid rename-merges on very deep trees; restructure instead
When it happens
Trigger: Folder rename onto an existing name; during the child loop, d.Move(childObj, targetDirObj) errors for one subfolder.
Common situations: Deep trees with a single failing branch aborting the whole rename; token expiry during long merges; partial state from an earlier interrupted merge.
Related errors
- rename merge: list source folder failed: %w
- merge: list source folder failed: %w
- merge subfolder %s: %w
- rename merge file %s: %w
- copy merge: list source folder failed: %w
AI-assisted analysis of AlistGo/alist@843d9dc814 (2026-08-15).
Data as JSON: /api/errors/5211748889124c76.
Report an issue: GitHub.