flipped-aurora/gin-vue-admin · error

自动代码任务提交参数不能为空

Error message

自动代码任务提交参数不能为空

What it means

commitAutoCodeFileTask validates its inputs up front: a non-nil task, a non-nil publish function, and a non-nil persist callback. If any is missing it returns "自动代码任务提交参数不能为空" (commit parameters cannot be empty) instead of proceeding with a partially initialized task.

Source

Thrown at server/service/system/auto_code_task.go:151

			file.Existed = true
			file.Mode = stat.Mode().Perm()
			file.BeforeContent = before
			file.BeforeHash = hashAutoCodeContent(before)
		case errors.Is(statErr, fs.ErrNotExist):
		default:
			return nil, fmt.Errorf("检查自动代码目标 %s 失败: %w", target, statErr)
		}
		if writeErr := replaceAutoCodeFileAtomically(file.StagedPath, content, file.Mode); writeErr != nil {
			return nil, fmt.Errorf("写入自动代码 staging 失败: %w", writeErr)
		}
		task.files = append(task.files, file)
	}
	return task, nil
}

func commitAutoCodeFileTask(task *autoCodeFileTask, publish autoCodeFilePublisher, persist func() error) error {
	if task == nil || publish == nil || persist == nil {
		return errors.New("自动代码任务提交参数不能为空")
	}
	defer task.cleanup()

	backendApplied, err := task.apply(autoCodeTaskBackend, publish)
	if err != nil {
		return joinAutoCodeRollbackError(err, task.rollback(backendApplied))
	}
	if err = persist(); err != nil {
		return joinAutoCodeRollbackError(err, task.rollback(backendApplied))
	}
	frontendApplied, err := task.apply(autoCodeTaskFrontend, publish)
	if err != nil {
		return joinAutoCodeRollbackError(
			fmt.Errorf("数据库已提交,前端文件发布失败: %w", err),
			task.rollback(frontendApplied),
		)
	}
	return nil

View on GitHub (pinned to 3136500ef3)

Solutions

  1. Ensure prepareAutoCodeFileTask succeeded and returned a non-nil task before committing.
  2. Pass real publish and persist implementations (or valid fakes in tests).
  3. Guard call sites: skip commit when an earlier step already returned an error.
  4. Check for refactoring regressions where a callback parameter was dropped.

Example fix

// before
err := commitAutoCodeFileTask(task, nil, persist)
// after
err := commitAutoCodeFileTask(task, publisher, persist)
Defensive patterns

Strategy: validation

Validate before calling

if task == nil || publish == nil || persist == nil {
    return errors.New("commit 前置校验失败: task/publish/persist 均不能为 nil")
}
// safe to commit

Type guard

func taskReady(task *autoCodeFileTask) bool {
    return task != nil && len(task.targets) > 0
}

Try / catch

if err := commitAutoCodeFileTask(task, publisher, persistFn); err != nil {
    if err.Error() == "自动代码任务提交参数不能为空" {
        return fmt.Errorf("commit 管道未正确装配 (nil 参数): %w", err)
    }
    return err
}

Prevention

When it happens

Trigger: Calling commitAutoCodeFileTask with a nil *autoCodeFileTask, nil publish publisher, or nil persist function — typically a programming error in wiring the commit pipeline or a test passing partial fixtures.

Common situations: Refactoring the publish/persist call chain and forgetting to pass a callback; constructing tasks manually in tests; error paths where an earlier prepare failed but commit is still invoked.

Related errors


AI-assisted analysis of flipped-aurora/gin-vue-admin@3136500ef3 (2026-08-31). Data as JSON: /api/errors/3db8012958688658. Report an issue: GitHub.