Ye使用HG相关笔记
TortoiseHg
-
ReleaseNotes · Wiki · mercurial / TortoiseHg / thg · GitLab
Main development repository for TortoiseHg
Downloads available at https://www.mercurial-scm.org
扩展相关
-
"D:\Program Files\TortoiseHg\lib\library.zip"\hgext
里有扩展程序的执行文件源码文件mq.pyo
mercurial_extension_utils.pyo
mercurial_keyring.pyo
-
查询TortoiseHg安装包打包了哪些扩展程序及其对应的版本
-
D:\Program Files\TortoiseHg\extension-versions.txt
最新版本
tortoisehg-5.8.1-x64
Extensions/modules included in this TortoiseHg package:
keyring: eded32d5a568 2017-03-20 https://foss.heptapod.net/mercurial/tortoisehg/thg-build-deps/keyring
hgkeyring: e01afc28bac5 2018-11-05 https://foss.heptapod.net/mercurial/mercurial_keyring
iniparse: bd83edee7300 2010-06-12 https://foss.heptapod.net/mercurial/tortoisehg/thg-build-deps/iniparse
zipdoc: 3cadb68cf7e6 2016-10-05 https://foss.heptapod.net/mercurial/tortoisehg/thg-build-deps/hg-zipdoc
hgcr-gui: a6c14968e233 2015-03-03 https://foss.heptapod.net/mercurial/tortoisehg/thg-build-deps/hgcr-gui
projrc: 6a39455be8dc 2016-04-09 https://foss.heptapod.net/mercurial/tortoisehg/thg-build-deps/projrc
onsub: 1cc8e5c2c867 2018-11-12 https://foss.heptapod.net/mercurial/tortoisehg/thg-build-deps/onsub
hgsubversion: 6a6ce9d9da35 2019-04-19 https://hg.durin42.com/hgsubversion
simplelock: 1093cf04f5cf 2019-02-13 https://foss.heptapod.net/mercurial/tortoisehg/thg-build-deps/simplelock
evolve: 30c8d8e6a7f4 2021-05-28 https://www.mercurial-scm.org/repo/evolve/
meu: e70cc6374f90 2020-08-08 https://foss.heptapod.net/mercurial/mercurial-extension_utils
pygments: 2.5.2 http://pygments.org/download/
pywin32: 227 http://sourceforge.net/projects/pywin32/ -
mercurial / TortoiseHg / thg-build · GitLab
repolist.txt https://foss.heptapod.net/mercurial/tortoisehg/thg-build/-/blob/branch/default/repolist.txt#L17
hg = https://www.mercurial-scm.org/repo/hg/thg = https://foss.heptapod.net/mercurial/tortoisehg/thgwinbuild = https://foss.heptapod.net/mercurial/tortoisehg/thg-winbuilddulwich = https://foss.heptapod.net/mercurial/tortoisehg/thg-build-deps/dulwichhgcr-gui = https://foss.heptapod.net/mercurial/tortoisehg/thg-build-deps/hgcr-guizipdoc = https://foss.heptapod.net/mercurial/tortoisehg/thg-build-deps/hg-zipdockeyring = https://foss.heptapod.net/mercurial/tortoisehg/thg-build-deps/keyringhgkeyring = https://foss.heptapod.net/mercurial/mercurial_keyringiniparse = https://foss.heptapod.net/mercurial/tortoisehg/thg-build-deps/iniparseshellext = https://foss.heptapod.net/mercurial/tortoisehg/thg-shellextprojrc = https://foss.heptapod.net/mercurial/tortoisehg/thg-build-deps/projrconsub = https://foss.heptapod.net/mercurial/tortoisehg/thg-build-deps/onsubhgsubversion = https://hg.durin42.com/hgsubversionhg-git = https://foss.heptapod.net/mercurial/hg-gitevolve = https://www.mercurial-scm.org/repo/evolve/meu = https://foss.heptapod.net/mercurial/mercurial-extension_utilssimplelock = https://foss.heptapod.net/mercurial/tortoisehg/thg-build-deps/simplelock
repostate.txt https://foss.heptapod.net/mercurial/tortoisehg/thg-build/-/blob/branch/default/repostate.txt#L17
8a5d01ef2433476f130a87123327f7d3f0120067 dulwich782cbadb123fe4991e91a03d367e02d0b5ae969c evolvef62bb5d07848ca598aa860a517394130b61bf2ee hgf57d5dba6ff1bdc7667c6b444ad30e463657c944 hg-gita6c14968e233719365552bf3918ca47bab2da58c hgcr-guie01afc28bac525a133a6ff4fd59812333e4b756d hgkeyring6a6ce9d9da352801d30263178db6ba3f1637c197 hgsubversionbd83edee7300ce0a4fdddc3eddf743dc6ea98602 iniparseeded32d5a5687f633eca9e5d81d8e6a8f3432811 keyringe70cc6374f90e783dfaa9d64e422e1dbabc7545b meu1cc8e5c2c867631ad071748ed7e0d93e4130e28d onsub6a39455be8dcfbd8d37cbcd6f6837d375194dc62 projrc0855a13e6fc27b10e33bf0163ebeaceb2befa92f shellext1093cf04f5cf5edf62d3ccfc7877087689d849ab simplelockfcca5bb846a2530f2eb88cd20575f0457075bb76 thg44ec4540d7fcfb51f479d5aedb1c2fe2360c1c8c winbuild3cadb68cf7e6b05542ec812881f3e2ad736b30b5 zipdoc
-
-
在线pyc,pyo,python,py文件反编译,目前支持python1.5到3.6版本的反编译-在线工具
支持pyo 反编译为 py源码
pyo是优化编译后的程序,也可以提高加载速度,使用
python -o
导出
碰到的错误列表
AttributeError: 'NoneType' object has no attribute 'configbool'
错误详情
Traceback (most recent call last):
File "thg", line 99, in <module>
File "tortoisehg\hgqt\run.pyo", line 88, in run
File "tortoisehg\hgqt\run.pyo", line 146, in dispatch
AttributeError: 'NoneType' object has no attribute 'configbool'
解决方案
-
使用命令执行
hg debuginstall -T'{pythonexe}'
config error at C:\Users\AsionTang\mercurial.ini:7: mercurial_keyring
-
原来是
mercurial_keyring
少了一个=
号修改前
[extensions] mercurial_keyring
修复后
[extensions] mercurial_keyring =
-
再执行命令
hg debuginstall -T'{pythonexe}'
就一切正常了.
mercurial_keyring
缘由
最新版本tortoisehg-5.8.1-x64
集成打包的对应版本太老了.可能不兼容HG-GIT
主页
mercurial / mercurial_keyring · GitLab
使用源码最新版本配置步骤
-
从主页下载最新源码包
-
解压到以下目录
D:\Program Files\TortoiseHg.Ext\mercurial_keyring
-
然后打开
TortoiseHg
的全局设置增加以下配置[extensions] mercurial_keyring = D:\Program Files\TortoiseHg.Ext\mercurial_keyring\mercurial_keyring.py
-
直接运行会提示报错:
*** 加载扩展 'mercurial_keyring',自 'D:\Program Files\TortoiseHg.Ext\mercurial_keyring\mercurial_keyring.py': Can not import mercurial_extension_utils.
-
将包里的2个文件解压到``
- "D:\Program Files\TortoiseHg.Ext\mercurial_keyring\mercurial_extension_utils_loader.py"
- "D:\Program Files\TortoiseHg.Ext\mercurial_keyring\mercurial_extension_utils.py"
-
理论上有以下2个文件就OK了
"D:\Program Files\TortoiseHg.Ext\mercurial_keyring\mercurial_keyring.py"
"D:\Program Files\TortoiseHg.Ext\mercurial_keyring\mercurial_extension_utils.py"
hg-git
缘由
主页
-
Further reading
Seehg help -e hggit
. -
README.rst · branch/0.10.x · mercurial / hg-git · GitLab
最后支持2.7的Python的版本
-
版本合并时,删除了大量的说明, 并从原本支持2.7的修改为最低支持3.6了.
-
merge with branch 0.10.x (5fe8f4d01d36) · Commits · mercurial / hg-git · GitLab
hg-git 0.10.2 (2021-07-31) 还支持2.7版本
hg-git 0.11.0 (unreleased) 则不支持2.7了.
hg debuginstall -T'{pythonexe}' This is the reason for setting ``PYTHON`` above. This will work, for example, if you are using a version of mercurial installed by the system, which might depends on Python 2.7. Keep in mind that python 2 reached its end of life in April 2020 and will not be supported with versions of ``hg-git`` 0.11 and higher (see `issue #349 <https://foss.heptapod.net/mercurial/hg-git/-/issues/349>`_.
-
放弃 Python 2 支持 (#349) · 问题 · mercurial / hg-git · GitLab
Python 2.7 已经过时一年多了。
引用 hg-git 0.10.0 的公告:
0.10.x 系列将是最后一个支持 Python 2.7 和 Python 3.5 的系列。
未来的功能版本将仅支持 Python 3.6 及更高版本和 Mercurial 5.2 或更高版本。
我们现在有一个单独的 0.10.x 系列分支,所以我们可以继续。
-
使用源码最新版本配置步骤
-
从主页下载
0.10.x
源码包 Files · branch/0.10.x · mercurial / hg-git · GitLab -
解压到以下目录[
D:\Program Files\TortoiseHg.Ext\hg-git
](D:\Program Files\TortoiseHg.Ext\hg-git) -
然后打开
TortoiseHg
的全局设置增加以下配置[extensions] hggit = D:\Program Files\TortoiseHg.Ext\hg-git\hggit
-
在绑定有Git远程仓库地址的仓库执行下拉报错
*** 加载扩展 'hggit' 失败: No module named hggit
经过多次设置后总结的经验就是保存后, hggit后面的自定义路径就消失了. 可能是新版本的BUG导致的.
-
然后修改
TortoiseHg
的全局设置以下配置[extensions] hggit2 = D:\Program Files\TortoiseHg.Ext\hg-git\hggit
-
然后执行后又报错:当
** Unknown exception encountered with possibly-broken third-party extension "mercurial_keyring" (version N/A)
需要将
设置
里的配置注释掉后, 再运行[extensions]
mercurial_keyring = ...
-
将
设置
里的配置注释掉后,然后执行后又报错:*** 加载扩展 'hggit2',自 'D:\Program Files\TortoiseHg.Ext\hg-git\hggit': future feature generator_stop is not defined (init.py, line 140)
-
返回第1步下载
0.10.x
低版本即可 -
重新运行后报错
*** 加载扩展 'hggit2',自 'D:\Program Files\TortoiseHg.Ext\hg-git\hggit': No module named dulwich
-
查找对应的依赖版本: setup.py · branch/0.10.x · mercurial / hg-git · GitLab
install_requires=[ 'dulwich>=0.19.0;python_version>="3.0"', 'dulwich>=0.19.0,<0.20.0;python_version<"3.0"', ],
-
下载对应版本的 Dulwich
> Versions of Dulwich prior to 0.20 also supported Python 2.7. Supported platforms include Linux, Mac OS X and Windows.
>
> - Git repository: https://www.dulwich.io/code/dulwich ([github](https://github.com/dulwich/dulwich))
>
> - [Release 0.19.7 · dulwich/dulwich](https://github.com/dulwich/dulwich/releases/tag/dulwich-0.19.7)
>
> > 发布了这个 2018 年 11 月 6 日 · 自本次发布以来,[ 591 次提交](https://github.com/dulwich/dulwich/compare/dulwich-0.19.7...master)给 master
-
将压缩包里的文件夹
dulwich-dulwich-0.19.7.zip\dulwich-dulwich-0.19.7\dulwich
解压后 -
放入
D:\Program Files\TortoiseHg\lib\library.zip\dulwich
压缩包里放在根目录或子目录都无法识别.
只有放这个压缩包里才算正常.
-
在绑定有Git远程仓库地址的仓库执行下拉 一切正常 除了闪退
让查看日志:
"D:\Program Files\TortoiseHg\thgw.exe.log"
然后直接这个程序闪退了zipimport.ZipImportError: bad local file header: D:\Program Files\TortoiseHg\lib\library.zip
-
通过
thg.exe
启动程序居然不闪退! 一切正常且没有命令行窗口!thgw.exe
程序启动就会闪退!这个是Windows GUI版本而且后续启动都不再输出错误信息到
thgw.exe.log
了, 并且闪退后 其进程居然没有退出还有残留thgw.exe
thg.exe
这个是Windows console
版本- 将
thg.exe
修改为thgw.exe
后居然也无法正常运行! 奇怪啊! - 将
library.zip
包还原为原来的包,再运行thgw.exe
居然还是闪退! 奇怪啊! - 将全局配置里的
hggit2
注释掉,再运行thgw.exe
居然还是闪退! 奇怪啊!
- 将
将"扩展"最新代码统一集成到library.zip
的方案
优点:
-
就跟正常官方曾经集成打包在一起的情况,只管开启"扩展"开关即可.
-
只管正常升级到
5.X
版本最新的程序即可,然后替换lib\library.zip
即可 -
不需要额外配置外部源码路径, 方便分发给别的人使用,减少配置代价,能重用原来的配置。
只有需要在5.x版本正常使用hggit
扩展的情况下!!!!
效果
-
修改前: 是通过外部文件夹直接指定目录的方式来配置扩展
[extensions] mercurial_keyring = D:\Program Files\TortoiseHg.Ext\mercurial_keyring\mercurial_keyring.py hggit2 = D:\Program Files\TortoiseHg.Ext\hg-git\hggit
-
修改为: 统一集成后的配置效果
[extensions] mercurial_keyring = hggit =
集成步骤
-
在通过指定外部文件夹路径能正常生效的基础上
-
将"HG-Git最新扩展源码包里的所有*.pyo文件"放入指定路径即可
library.zip\hgext\hggit
-
覆盖同名文件
library.zip\hgext\mercurial_keyring.pyo
和library.zip\hgext\mercurial_extension_utils.pyo
即可 -
如何得到*.pyo文件?
- 正常 通过指定外部文件夹路径 运行过1次, 就会在 .py 源码 同级目录生成同名的 .pyo 文件.
- 或者直接使用
python -o
命令来手动生成应该也是可以的.