mercurial - 查找哪些 mercurial 提交更改了文件的可执行位

标签 mercurial executable

我知道如何使用 hg blame查找确切的提交更改了文件中的一行,但我找不到类似的方法来查找文件上的可执行位何时更改。

最佳答案

首先请注意,由于 exec 位的更改不会影响文件内容,例如删除,它们不一定会由“hg log filename”显示。 (Unix Nerd 可以将文件和目录的 ctime/mtime 规则与 rm/chmod 进行比较以了解这种区别。)所以你需要使用类似的东西:

$ hg log --deleted file

显示涉及文件的所有变更集,包括 exec 更改、删除和重复。由于各种原因,默认情况下不启用此功能,包括它可能会慢一个数量级。

在细读日志时查找 exec 位也意味着查看 git 样式的补丁,因为标准 patch(1) 兼容补丁不知道 exec 位。所以总命令可能看起来像:
$ hg log --removed -pg contrib/simplemerge | grep "^new mode" -B 10
+    import os
     sys.exit(main(sys.argv))

changeset:   4363:2e3c54fb79a3
user:        Alexis S. L. Carvalho <alexis@cecm.usp.br>
date:        Mon Apr 16 20:17:39 2007 -0300
summary:     actually port simplemerge to hg

diff --git a/contrib/simplemerge b/contrib/simplemerge
old mode 100644
new mode 100755

上面写着:“在 simplemerge 上搜索所有 git 补丁以查找以 'new mode' 开头的行并显示前 10 行”。

另一种选择是使用 bisect。这基本上可以用于查找您可以测试的任何类型的更改。例如,如果您正在寻找 X 位的设置位置:
$ hg bisect -g 1000  # some past revision without the X bit
$ hg bisect -b tip   # some recent revision with the X bit
Testing changeset 8114:ad3ba2de2cba (14179 changesets remaining, ~13 tests)
993 files updated, 0 files merged, 716 files removed, 0 files unresolved
$ hg bisect -c "[ ! -x contrib/simplemerge ]"  # shell expression returns 0 (good) if no x bit
Changeset 8114:ad3ba2de2cba: bad
Changeset 4566:087b3ae4f08a: bad
Changeset 2797:a3c6e7888abf: good
Changeset 3678:7e622c9a9707: good
Changeset 4121:d250076824e3: good
Changeset 4345:ec64f263e49a: good
Changeset 4454:28778dc77a4b: bad
Changeset 4403:15289406f89c: bad
Changeset 4371:d7ad1e42a368: bad
Changeset 4355:10edaed7f909: good
Changeset 4366:390d110a57b8: bad
Changeset 4363:2e3c54fb79a3: bad
Changeset 4361:99c853a1408c: good
Changeset 4362:465b9ea02868: good
The first bad revision is:
changeset:   4363:2e3c54fb79a3
user:        Alexis S. L. Carvalho <alexis@cecm.usp.br>
date:        Mon Apr 16 20:17:39 2007 -0300
summary:     actually port simplemerge to hg

在这里,我们使用标准的 Bourne shell 表达式自动测试以检查文件的 exec 位,然后 Mercurial 运行检查修订并为我们测试它们。

关于mercurial - 查找哪些 mercurial 提交更改了文件的可执行位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7655431/

相关文章:

java - 创建 java 可执行文件

mercurial - 如何在 HG/Mercurial 中设置由存储库指定的 Hook ?

macos - 如何与 Mercurial merge

mercurial - 如何从修订号中获取 Mercurial Changeset ID?

mercurial - SaaS 公司如何验证和跟踪他们发布给客户的代码?

Mercurial 撤销三个 hg push

java - 从 Java 运行 C++ 可执行文件时没有错误或输出

vbscript - 如何将 VBScript 转换为可执行 (EXE) 文件?

eclipse - 以编程方式查找eclipse安装目录

c - 除了原始机器指令之外,可执行文件中还有什么?