【发布时间】:2021-01-12 20:07:17
【问题描述】:
我编写了一个脚本,在所有未提交的更改和未推送的提交的差异上运行 clang-format-diff.py。
在 git 目录下名为 run-clang-format.sh 的文件包含:
git diff -U0 --no-color origin/master | clang-format-diff.py -p1
当我将-i 选项添加到clang-format-diff.py 时,它可以正常工作,但我想避免这种情况,因为它引入了一些我想绕过的古怪重新排序。所以我目前在 git 目录的基础上运行上面的 shell 脚本(所以我得到一个 .diff,我可以在应用之前手动查看和/或编辑):
./run-clang-format.sh > format.diff
format.diff 看起来像这样(我从未见过这种“格式化前/格式化后”的格式):
--- symengine/functions.cpp (before formatting)
+++ symengine/functions.cpp (after formatting)
@@ -11,7 +11,10 @@
extern RCP<const Basic> im3;
extern RCP<const Basic> im5;
-RCP<const Basic> sqrt(RCP<const Basic> &arg) { return pow(arg, div(one, i2)); }
+RCP<const Basic> sqrt(RCP<const Basic> &arg)
+{
+ return pow(arg, div(one, i2));
+}
RCP<const Basic> cbrt(RCP<const Basic> &arg)
{
我尝试了几种方法来应用这个补丁(从 git 目录的基础):
$ git apply format.diff
error: functions.cpp: No such file or directory
$ git am format.diff
Patch format detection failed.
$ patch -p1 < format.diff
can't find file to patch at input line 3
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|--- symengine/functions.cpp (before formatting)
|+++ symengine/functions.cpp (after formatting)
--------------------------
File to patch:
编辑如果文件路径有一个前导点,则可以应用上面的补丁。
如何按原样应用此补丁或获取 clang-format-patch.py 以创建如下格式的差异:
diff --git a/symengine/functions.cpp b/symengine/functions.cpp
index c2fbc01a..75ef7d63 100644
--- a/symengine/functions.cpp
+++ b/symengine/functions.cpp
@@ -11,10 +11,8 @@ extern RCP<const Basic> im2;
extern RCP<const Basic> im3;
extern RCP<const Basic> im5;
-RCP<const Basic> sqrt(RCP<const Basic> &arg)
-{
- return pow(arg, div(one, i2));
-}
+RCP<const Basic> sqrt(RCP<const Basic> &arg) { return pow(arg, div(one, i2)); }
+
RCP<const Basic> cbrt(RCP<const Basic> &arg)
{
return pow(arg, div(one, i3));
使用git apply format.diff很容易应用
【问题讨论】:
标签: git diff patch clang-format difflib