如何不忘记在代码中删除调试行

Die*_*zar 6 debugging bash shell workflow zsh

这在我看来是一个新颖的想法(因为我没有找到任何解决方案或任何人已经实现它)...

一个shell脚本,无论你何时git提交都会自动运行,或者如果你忘记删除项目中任何调试或开发环境的特定代码行,它们都会让你知道.

例如:

通常(在我的Ruby项目中)我会留下代码行来输出变量

puts params.inspect 
Run Code Online (Sandbox Code Playgroud)

要么

raise params.inspect
Run Code Online (Sandbox Code Playgroud)

此外,有时我会使用不同的方法,所以我可以很容易地看到效果,例如在使用delayed_job的情况下,我宁愿在开发期间没有延迟地调用方法.

问题是有时候我忘记更改这些方法或忘记删除调用以引发params.inspect,我会无意中推送该代码.

所以我想也许最简单的解决方案是为任何这样的调试行添加注释,例如

raise params.inspect #debug
Run Code Online (Sandbox Code Playgroud)

本质上将该行标记为仅开发/调试行.然后在一个shell脚本之前运行一些其他命令,比如git commit,它可以使用awk或grep来搜索#debug注释的所有最新修改文件并停止执行并提醒你.但是我不太了解shell脚本,所以我想我会请求帮助:)

Wil*_*ell 7

虽然我全心全意地建议遵循cdeszaq'a的建议并且不鼓励做这种事情,但是编写一个git钩子会很容易阻止你用特定字符串提交任何行.为简单起见,我没有展示git rev-parse - 验证HEAD,你应该使用它来使这个钩子在初始提交时起作用,但是如果你只是将以下内容放在.git/hooks/pre-commit(和make)中它可执行),您将无法提交包含字符串'#debug'的任何代码行:

#!/bin/sh

if git diff-index -p -M --cached HEAD | grep '#debug' > /dev/null; then
  echo 'debug lines found in commit.  Aborting' >&2
  exit 1
fi