|
|
|
@ -44,12 +44,16 @@ class PercentProgress(processProgress):
|
|
|
|
|
part: количество прогрессов в программе
|
|
|
|
|
delimeter: разделители строк по умолчанию \n и \r
|
|
|
|
|
cachefilter: фильтр вывода программы (регулярная строка)
|
|
|
|
|
startpart: используется для вывода процентов прогрессбар
|
|
|
|
|
с определенного места (0 по умолчанию)
|
|
|
|
|
end: конечный прогрессбар (по умолчанию)
|
|
|
|
|
"""
|
|
|
|
|
def init(self,*args,**kwargs):
|
|
|
|
|
self.rePerc = re.compile("(\d+)%",re.S)
|
|
|
|
|
self.part = kwargs.get("part",1)
|
|
|
|
|
self.add_offset = 100 / self.part
|
|
|
|
|
self.offset = 0
|
|
|
|
|
self.offset = 0 + kwargs.get("startpart",0)*self.add_offset
|
|
|
|
|
self.is_end = kwargs.get("end",True)
|
|
|
|
|
self.stderr = STDOUT
|
|
|
|
|
self.delimeter = re.compile("[%s]"%kwargs.get("delimeter","\n\r"))
|
|
|
|
|
self.cachedata = re.compile(kwargs.get("cachefilter",
|
|
|
|
@ -58,11 +62,13 @@ class PercentProgress(processProgress):
|
|
|
|
|
def processInit(self):
|
|
|
|
|
self.percent = 0
|
|
|
|
|
self.showval = 0
|
|
|
|
|
return 0
|
|
|
|
|
if not self.offset:
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
def processEnd(self):
|
|
|
|
|
self.percent = 100
|
|
|
|
|
return 100
|
|
|
|
|
if self.is_end:
|
|
|
|
|
self.percent = 100
|
|
|
|
|
return 100
|
|
|
|
|
|
|
|
|
|
def processString(self,strdata):
|
|
|
|
|
match = self.rePerc.search(strdata)
|
|
|
|
@ -128,7 +134,7 @@ class Git:
|
|
|
|
|
if cb_progress:
|
|
|
|
|
gitClone = PercentProgress(self._git,"clone","-q",
|
|
|
|
|
"--no-single-branch","--progress","--verbose",
|
|
|
|
|
"--depth=1","-b",branch,url,rpath,part=3,stderr=STDOUT)
|
|
|
|
|
"--depth=1","-b",branch,url,rpath,part=4,stderr=STDOUT)
|
|
|
|
|
for perc in gitClone.progress():
|
|
|
|
|
cb_progress(perc)
|
|
|
|
|
else:
|
|
|
|
@ -192,9 +198,11 @@ class Git:
|
|
|
|
|
else:
|
|
|
|
|
wholeCommand = [self._git,"--git-dir",git_dir,
|
|
|
|
|
"--work-tree",rpath]+commands[cmd]
|
|
|
|
|
if cb_progress and commands[cmd][0] == "fetch":
|
|
|
|
|
if cb_progress and commands[cmd][0] in ("fetch","checkout"):
|
|
|
|
|
progressParam = {'fetch': {'part':4,'end':False},
|
|
|
|
|
'checkout':{'part':4,'startpart':3}}
|
|
|
|
|
gitClone = PercentProgress(*wholeCommand+["--progress","--verbose"],
|
|
|
|
|
part=3,stderr=STDOUT)
|
|
|
|
|
stderr=STDOUT,**progressParam)
|
|
|
|
|
for perc in gitClone.progress():
|
|
|
|
|
cb_progress(perc)
|
|
|
|
|
else:
|
|
|
|
@ -411,7 +419,7 @@ class Update:
|
|
|
|
|
if revision != "last":
|
|
|
|
|
if revision == git._getCurrentCommit(rpath):
|
|
|
|
|
if git._getBranch(rpath) == branch:
|
|
|
|
|
return
|
|
|
|
|
return True
|
|
|
|
|
# получить изменения из удаленного репозитория
|
|
|
|
|
git._fetchRepository(rpath,cb_progress=cb_progress)
|
|
|
|
|
# если текущая ветка не соответствует нужной
|
|
|
|
@ -429,9 +437,6 @@ class Update:
|
|
|
|
|
"""
|
|
|
|
|
Синхронизировать репозитории
|
|
|
|
|
"""
|
|
|
|
|
# TODO: оновление shallow репозитория возможно придется
|
|
|
|
|
# скачивать конкретную ревизию через refs/revs
|
|
|
|
|
# TODO: прогресс скачивания (обновление shallow)
|
|
|
|
|
dv = self.clVars
|
|
|
|
|
url, rpath, revision, branch = (
|
|
|
|
|
dv.Select(["cl_update_rep_url","cl_update_rep_path",
|
|
|
|
|