Что такое параметр "ui" в hgnested.nclone()?
import hgnested
sour = "C:\Users\ADMIN\Documents\mercurial\hgserver"
desti = "D:\Work"
hgnested.nclone(source = sour, dest = desti)
Здесь я пытаюсь клонировать вложенный репозиторий "hgserver", в котором есть еще 5 репозиториев. Но я получаю и ошибку,
TypeError: nclone() takes at least 2 arguments (2 given)
Затем я посмотрел на исходный код hgnested пакета python по этой ссылке и обнаружил, что метод nclone() принимает аргумент "ui", на который я не понимаю, что передать.
def nclone(ui, source, dest=None, **opts):
Кто-нибудь может мне помочь.
PS: из-за моей низкой репутации я не могу добавить соответствующие теги для этого вопроса. Пример: Hgnested, Nclone
2 ответа
Hgnested - это не то, что вам нужно, если вы хотите клонировать файл с вашего локального диска. Когда я читаю их "документацию", несколько строк ничего не значат, это всего лишь небольшое расширение Mercurial. Если все, что вы хотели сделать, это скопировать каталог, вы должны сделать это:
import shutil
shutil.copytree(sour, desti) # copy dirs
# use shutil.copy() to copy files
И чтобы ответить на ваш первоначальный вопрос, пользовательский интерфейс является классом пользовательского интерфейса от Mercurial.
Здесь ui и repo - это аргументы пользовательского интерфейса и репозитория, передаваемые в функцию расширения как стандарт (см. WritingExtensions для более подробной информации). Если вы не вызываете командные функции Mercurial из расширения, вам нужно будет самостоятельно создать подходящий пользовательский интерфейс и объекты репо. Объект пользовательского интерфейса может быть создан из класса пользовательского интерфейса в mercurial.ui; объект репо может быть локальным репозиторием, httprepository, sshrepository или statichttprepository (каждый определен в своих собственных модулях), хотя чаще всего это будет локальный репозиторий.
import hgnested
from mercurial import ui
sour = "C:\Users\ADMIN\Documents\mercurial\hgserver"
desti = "D:\Work"
hgnested.nclone(ui.ui(), source = sour, dest = desti)
как ответил @abccd, мне просто пришлось изменить вызов метода на вышеуказанную строку, и клон прошел успешно.