# =============================================================================
#  armor — ESP32-C3 / ESP-IDF v6.1 工程专用 .gitignore
# -----------------------------------------------------------------------------
#  取舍原则
#    1) 只忽略「本机生成物 + 本机专有配置 + 编辑器/系统杂物」；
#       源码、构建脚本、分区表、可复现配置一律入库。
#    2) 能用 "/" 锚定就用锚定模式，避免将来新增同名目录时被误伤。
#    3) 每段都写明理由，后人可据此判断能否删改。
#    4) 语法提醒：.gitignore 的 "#" 注释必须独占一行，不能写在模式后面；
#       行尾空格会被静默丢弃（或被当成模式的一部分），也不要加。
#
#  自检
#    git status --short             # 期望只列出应该入库的源文件
#    git check-ignore -v <路径>     # 查看某路径被哪条规则命中
# =============================================================================


# =============================================================================
# 1. ESP-IDF 构建输出（体积最大，本工作区约 17 MB，必须忽略）
# =============================================================================

# idf.py 默认在工程根目录生成 build/：CMake/Ninja 缓存、.o、静态库、固件
# 镜像、flasher_args.json、compile_commands.json 全在里面。
# 本工程路径是纯 ASCII，不会触发 idf.ps1 的「非 ASCII 路径 -> 外置构建目录」
# 逻辑，所以 build/ 就落在工程内。
/build/

# 其它常见构建目录命名：多配置构建、CMake 预设、CLion
/build-*/
/cmake-build-*/

# 仅当 IDF_BUILD_DIR 被指向工程内部时才会出现
# （idf.ps1 的默认兜底是 <盘符>:\esp-idf-build\armor，位于仓库之外）
/esp-idf-build/

# clangd --background-index 的索引缓存（.vscode 里启用了该选项）
/.cache/

# 根目录下零散的 CMake/Ninja 缓存（正常应在 build/ 内，保险起见）
/.ninja_deps
/.ninja_log
/CMakeCache.txt
/CMakeFiles/


# =============================================================================
# 2. ESP-IDF 生成的本机配置
# =============================================================================

# sdkconfig     : menuconfig/构建时自动写出，代表「本机当前状态」，每台机器都可能不同
# sdkconfig.old : 上一次配置的备份
# 可复现的那份是 sdkconfig.defaults（已生成，见第 9 节），所以这两个都忽略。
/sdkconfig
/sdkconfig.old

# 提示：ESP-IDF 工具在 Windows 上写 sdkconfig / sdkconfig.defaults 用的是 CRLF，
# 这是工具行为、无需干预 —— 入库行尾由 .gitattributes 统一成 LF，
# 本地暂时出现 CRLF 不会让 git status 变脏（已实测）。


# =============================================================================
# 3. IDF Component Manager（引入 idf_component.yml 后才会出现）
# =============================================================================

# managed_components/ 是下载到本地的第三方组件副本，官方文档明确说它
# 「通常不纳入版本控制」；dependencies.lock 由工具自动求解生成、禁止手改。
# 若团队要锁定依赖版本，可注释掉 dependencies.lock 并把它提交入库。
/managed_components/
/dependencies.lock

# 工具导出的编译数据库副本（真正那份在 build/ 里，已随 build/ 忽略）
/compile_commands.json


# =============================================================================
# 4. 固件产物与运行日志
# =============================================================================

# 只锚定根目录，避免误伤将来放进 assets/ 之类的素材
/*.bin
/*.elf
/*.map
/*.hex

# README 里 monitor 打印的 CSV，属于采集到的运行数据，不入库
/logs/
*.log


# =============================================================================
# 5. 密钥类文件 —— 提交即泄密，且很难从历史里挽回
# =============================================================================

# 安全启动签名私钥 / Flash 加密密钥 / 证书私钥。
# 若仓库确实需要存放公开证书，请把下面的通配收窄成具体文件名。
*.pem
*.key
*.p12
*.pfx


# =============================================================================
# 6. 编辑器 / IDE（本机专有，往往含绝对路径）
# =============================================================================

# VS Code + ESP-IDF 扩展自动生成。当前 .vscode/settings.json 里是
# C:\esp\v6.1\esp-idf、d:\宣筹\...\build、COM10 这类本机绝对路径，
# 提交上去只会误导别人。
/.vscode/*
# 想共享「推荐扩展列表」时，取消下一行注释（上一行的 /.vscode/* 必须保留）
!/.vscode/extensions.json

/.idea/
/.vs/
*.code-workspace
*.sublime-project
*.sublime-workspace

# 编辑器临时/交换文件
*.swp
*.swo
*~
.#*
\#*#


# =============================================================================
# 7. Python 与测试/覆盖率工具缓存（ESP-IDF 工具链脚本产物）
# =============================================================================
__pycache__/
*.py[cod]
.venv/
venv/
/.mypy_cache/
/.pytest_cache/
/.ruff_cache/

# pytest-embedded、单元测试与尺寸报告（ESP-IDF 自身仓库也忽略这些）
pytest-embedded/
pytest_embedded_log/
TEST_LOGS/
XUNIT_RESULT*.xml
build_summary_*.xml
app_info_*.txt
size_info*.txt
.manifest_sha

# 覆盖率
*.gcda
*.gcno
*.gcov
coverage.info
coverage_report/


# =============================================================================
# 8. 操作系统杂物
# =============================================================================
Thumbs.db
ehthumbs.db
desktop.ini
$RECYCLE.BIN/
.DS_Store
.AppleDouble
._*
*.lnk


# =============================================================================
# 9. 必须入库的文件（切勿加入忽略列表）
# =============================================================================
#   CMakeLists.txt / main/CMakeLists.txt
#   main/*.cpp main/*.hpp main/*.c main/*.h
#   idf.ps1              构建入口（含非 ASCII 路径 workaround）
#   partitions.csv       自定义分区表
#   README.md            工程文档（移植要点与踩坑记录）
#   .clangd              工程级 clangd 配置
#   sdkconfig.defaults   可复现配置来源（由 idf.py save-defconfig 生成）
#   .gitattributes       行尾(CRLF/LF)与文本/二进制归属策略
#
# 提醒：ESP-IDF 自身仓库的 .gitignore 会忽略 .clangd 和 .vscode/；
# 本工程故意保留 .clangd（它是为 clangd 去掉 -f*/-m* 的项目配置），
# 不要照抄 IDF 仓库的规则。


# =============================================================================
# 10. sdkconfig.defaults 与 sdkconfig 的关系（2026-10-14 核对并修复）
# =============================================================================
#  忽略 sdkconfig 的前提是 sdkconfig.defaults 存在且正确。核对时发现：
#   * README「目录结构」里列的 sdkconfig.defaults 当时并不存在；
#   * 当时的 sdkconfig（以及 build/config/sdkconfig.h）是
#     CONFIG_PARTITION_TABLE_SINGLE_APP=y、CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y，
#     即用的是默认 single-app 分区表，partitions.csv 根本没有生效；
#   * 而 README「实测验证结果」的 boot log 却是 4 MB flash + 2 MB factory 分区。
#  已按文档修正（4 MB flash + CONFIG_PARTITION_TABLE_CUSTOM=y）重新配置，
#  并用 `idf.py save-defconfig` 生成 sdkconfig.defaults，内容就是最小差异：
#     CONFIG_IDF_TARGET="esp32c3"
#     CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y
#     CONFIG_PARTITION_TABLE_CUSTOM=y
#  （CONFIG_PARTITION_TABLE_CUSTOM_FILENAME 的 Kconfig 默认值本来就是
#    "partitions.csv"，所以 save-defconfig 不会重复写入。）
#
#  维护规则：
#   * 改配置请改 sdkconfig.defaults（或 menuconfig 后重跑 save-defconfig），
#     不要把 sdkconfig 提交进来；
#   * 想确认「相对 IDF 默认值改了什么」：重跑 idf.py save-defconfig 再看 diff；
#   * 构建日志里分区表应为 nvs 0x9000 / phy_init 0xf000 / factory 0x10000 2M，
#     否则说明 defaults 没生效或 partitions.csv 没被采用。
# =============================================================================
