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

  1. Identify the named file and retry moving just its parent folder (already-moved items are idempotent under overwrite)
  2. Check the wrapped error for auth or permission causes and fix them
  3. Close other clients that may hold the file, then retry
  4. 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

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


AI-assisted analysis of AlistGo/alist@843d9dc814 (2026-08-15). Data as JSON: /api/errors/c16e422aca0bb146. Report an issue: GitHub.