用途:为 EF Core 的 servicing 版本分支创建 PR,也用于把修复从 main 回迁到 release 分支。
主要能力与要求:
- 目标分支:若指定了版本,则选 release/XX.0(例如回迁到 10 用 release/10.0);否则找最新的 release/XX.0 分支,忽略 release/11.0-preview2 这类预览分支,且在创建 PR 前确认分支存在。
- 标题格式:[release/XX.0] <原 PR 标题>。
- 描述模板要求包含以下小节:Fixes #{issue_number}、Backports #{source_pr_number_if_applicable},以及 Description(说明 bug、成因、引入方式,使用不依赖 EF Core 内部知识的表述)、Customer impact(对用户的影响,尽量给 3-4 行代码示例;若涉及数据损坏需明确说明;若有可行 workaround 简述其可发现性,否则说明无 workaround)、How found(发现途径,用户报告的写“User reported on”,多人受影响需注明,并用 upvote 与评论作者数估算影响)、Regression(是否为早期 EF 版本的回归,已知则附引入回归的 PR 链接;仅影响同一大版本新引入的功能不算回归)、Testing(写明新增或修改的测试数量,不展开细节;无法覆盖测试则简述替代验证方式)、Risk(从“extremely low”到“high”的简要风险评估,说明改动量,单行修复需注明;添加了 quirk 需注明“Quirk added”)。
- Quirk(AppContext 开关):让用户在运行时选择不启用修复,降低补丁风险。当修复完全显而易见/无风险,或工具、分析器无法使用该开关时跳过。添加方式是在包含代码变更的类中定义类似 private static readonly bool UseOldBehavior37585 = AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue37585", out var enabled) && enabled; 的字段(将 37585 换成对应 issue 编号),并用 !UseOldBehavior37585 包裹变更,尽量少检查该开关;一个 PR 关闭多个 issue 时选最合适的一个命名。只有源码确实包含开关才能写“Quirk added”。
验证与限制:更新 servicing PR 进度时,需确保描述仍符合模板;提交前确认描述各小节齐全、quirk 在适用时已添加且 issue 编号与描述一致。资料未提供具体的命令、安装方式或该技能本身的调用参数。