找到mercurial commit更改文件上的可执行位的内容

pos*_*ist 4 mercurial executable

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

mpm*_*mpm 16

首先请注意,由于exec位中的更改不会影响文件内容(如删除),因此它们不一定会显示为"hg log filename".(Unix书呆子可以比较rm/chmod的文件和目录的ctime/mtime规则来理解这种区别.)所以你需要使用类似的东西:

$ hg log --deleted file
Run Code Online (Sandbox Code Playgroud)

显示触摸文件的所有更改集,包括exec更改,删除和重复.默认情况下,由于各种原因未启用此功能,包括速度可能会慢一个数量级.

在阅读日志时查找exec位也意味着查看git样式的补丁,因为标准补丁(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
Run Code Online (Sandbox Code Playgroud)

这就是:"在'simplemerge上搜索所有git补丁,以'新模式'开头并显示前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
Run Code Online (Sandbox Code Playgroud)

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