1

我正在使用MercurialApi推送到远程仓库。

u = ui.ui()
repo = hg.repository(u, path)
commands.commit(u, repo, message=message)
commands.push(u, repo)

这个块给了我一个错误:

repository default-push not found

但我在 repo 的 .hg/hgrc 中有默认设置。然而我需要手动将它传递给 ui:

import configparser, codecs

config = configparser.ConfigParser()
hgrc = os.path.join(path, '.hg/hgrc')

with codecs.open(hgrc, 'r', 'utf-8') as f:
    try:
        config.read_file(f)
    except Exception as e:
        raise CommitToRepositoryException(str(e))

default_path = config.get('paths', 'default')

u = ui.ui()
u.setconfig('paths', 'default', default_path)
repo = hg.repository(u, path)
commands.commit(u, repo, message=message)
commands.push(u, repo)

这么多的代码应该可以正常工作。知道为什么 ui 对象没有正确设置吗?

4

2 回答 2

1

当您获取 ui 时,它不会从 repo 的 .hg 中获取本地配置,因为它还没有存储库:

u = ui.ui()

您需要从 repo 中获取 ui,其中包含其本地配置:

u = ui.ui()
repo = hg.repository(u, path)
commands.commit(repo.ui, repo, message=message)
commands.push(repo.ui, repo)
于 2015-05-20T13:27:13.790 回答
0

ui 可能正在获取另一个 hgrc 文件模板,其中包括“default-push”在内的所有路径都设置为 null。当您设置 'default' path 时,它至少可以找到那个并且能够推送。

于 2014-10-01T13:04:17.343 回答