我正在尝试使用python-hglib实现一个基本的scm 到目前为止,我已经设法连接到一个repo(本地),我想在许多中提交一个文件。 我不知道该怎么做。请考虑以下事项:
client = hglib.open(my_mercurial_repo)
root_repo=hglib.client.hgclient.root(client)
print "%s root" % root_repo
rev, node =client.commit('Simple commit message', addremove=False, user='user1')
这成功连接到 my_mercurial_repo ,但是当我到达提交行时,我收到此错误:
' hglib.error.CommandError'>,CommandError(' commit',' -m', ' Checkpoint',' -u','我自己',' - 调试')
但是,如果我将其更改为:
rev,node = client.commit('简单提交消息',addremove = True, 用户='用户1&#39)
工作正常。查看文档,addremove=True
会在提交之前将新/丢失的文件标记为添加/删除。
所以我想我的问题是:如何使用python-hglib在n个文件的存储库中提交单个文件?
快速更新,感谢@ kAlmAcetA的响应,我按照建议更新了我的代码
client.add('/tmp/repo/somefile')
rev, node =client.commit('Simple commit message', addremove=False, user='user1')
当我这样做时,错误消失,执行第一次提交。 如果我在我打开的同一个文件上再次执行代码,我仍然会收到错误。 所以我想要做的就是
我现在正努力为单个文件做提交 - >编辑 - >提交循环。
此致
答案 0 :(得分:1)
不支持使用hglib.commit提交单个文件,但您可以使用hglib.rawcommand,它在命令行中使用与hg相同的语法:
repo = hglib.open(path_to_your_repository)
repo.rawcommand(args=['commit', 'filename'])
args中的第一个元素必须是hg命令名。其余元素是您在该命令中使用的任何选项。在我的实际代码中,我有:
repo.rawcommand(['commit','-m '+commit_msg, file_name)])
答案 1 :(得分:0)
您必须先使用client's add method将该文件添加到提交中。
...
client.add('/tmp/repo/somefile')
rev, node =client.commit('Simple commit message', addremove=False, user='user1')
...
您必须首次添加文件(成功时您将获得True
,否则False
),下次修改只需提交。
注意:如果您尝试添加相同的文件,很遗憾,您也会获得True
,然后提交将失败,但例外情况为:
hglib.error.CommandError: (1, 'nothing changed', '')
最好用try...expect
包装提交。
答案 2 :(得分:0)
如果我理解正确,那么无论工作副本中有多少文件可能已更改,您都希望提交单个文件,就像您在命令行中执行一样:
hg commit ${file}
hglib的commit
方法似乎没有提供这个:
def commit(self, message=None, logfile=None, addremove=False, closebranch=False,
date=None, user=None, include=None, exclude=None):
"""
Commit changes reported by status into the repository.
message - the commit message
logfile - read commit message from file
addremove - mark new/missing files as added/removed before committing
closebranch - mark a branch as closed, hiding it from the branch list
date - record the specified date as commit date
user - record the specified user as committer
include - include names matching the given patterns
exclude - exclude names matching the given patterns
"""
似乎不支持提交单个文件。 hglib
应该以某种方式包装Mercurial的命令行,而hg
命令可以提交一个更改的文件,所以这很奇怪。然后,文档很少到不存在的程度,因此不清楚这是否是设计与否。
我要为此提出错误。