Addon manager: Add support for non-master branches

This commit is contained in:
Chris Hennes
2021-11-04 20:57:45 -05:00
parent f069150ef5
commit 765d7f708d
2 changed files with 35 additions and 13 deletions
@@ -248,28 +248,28 @@ def restart_freecad():
QtCore.QProcess.startDetached(QtGui.QApplication.applicationFilePath(), args)
def get_zip_url(baseurl):
def get_zip_url(baseurl, branch="master"):
"Returns the location of a zip file from a repo, if available"
url = getserver(baseurl).strip("/")
if url.endswith("github.com"):
return baseurl+"/archive/master.zip"
return baseurl+"/archive/" + branch + ".zip"
elif url.endswith("framagit.org") or url.endswith("gitlab.com") or url.endswith("salsa.debian.org"):
# https://framagit.org/freecad-france/mooc-workbench/-/archive/master/mooc-workbench-master.zip
reponame = baseurl.strip("/").split("/")[-1]
return baseurl+"/-/archive/master/"+reponame+"-master.zip"
return baseurl+"/-/archive/" + branch + "/"+reponame+"-" + branch + ".zip"
else:
print("Debug: addonmanager_utilities.get_zip_url: Unknown git host:", url)
return None
def get_readme_url(url):
def get_readme_url(url, branch="master"):
"Returns the location of a readme file"
if "github" in url or "framagit" in url:
return url+"/raw/master/README.md"
return url+"/raw/" + branch + "/README.md"
elif "gitlab" in url or "salsa.debian.org" in url:
return url+"/-/raw/master/README.md"
return url+"/-/raw/" + branch + "/README.md"
else:
print("Debug: addonmanager_utilities.get_readme_url: Unknown git host:", url)
return None
@@ -287,11 +287,11 @@ def get_desc_regex(url):
return None
def get_readme_html_url(url):
def get_readme_html_url(url, branch="master"):
"""Returns the location of a html file containing readme"""
if "github" in url:
return url + "/blob/master/README.md"
return url + "/blob/" + branch + "/README.md"
else:
print("Debug: addonmanager_utilities.get_readme_html_url: Unknown git host:", url)
return None
+27 -5
View File
@@ -82,6 +82,8 @@ NOGIT = False # for debugging purposes, set this to True to always use http dow
NOMARKDOWN = False # for debugging purposes, set this to True to disable Markdown lib
url_to_branch_map = {} # Added to 0.19.3 to support branches with names other than "master"
"""Multithread workers for the Addon Manager"""
@@ -137,12 +139,13 @@ class UpdateWorker(QtCore.QThread):
u.close()
p = re.findall((r'(?m)\[submodule\s*"(?P<name>.*)"\]\s*'
r"path\s*=\s*(?P<path>.+)\s*"
r"url\s*=\s*(?P<url>https?://.*)"), p)
r"url\s*=\s*(?P<url>https?://.*)\s*"
r"(branch\s*=\s*(?P<branch>.*)\s*)?"), p)
basedir = FreeCAD.getUserAppDataDir()
moddir = basedir + os.sep + "Mod"
repos = []
# querying official addons
for name, path, url in p:
for name, path, url, _, branch in p:
self.info_label.emit(name)
url = url.split(".git")[0]
addondir = moddir + os.sep + name
@@ -152,11 +155,20 @@ class UpdateWorker(QtCore.QThread):
else:
state = 0
repos.append([name, url, state])
if branch is None or len(branch) == 0:
branch = "master"
url_to_branch_map[url] = branch
# querying custom addons
customaddons = (FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Addons")
.GetString("CustomRepositories", "").split("\n"))
for url in customaddons:
if url:
if " " in url:
addon_and_branch = addon.split(" ")
url = addon_and_branch[0]
branch = addon_and_branch[1]
else:
branch = "master"
name = url.split("/")[-1]
if name.lower().endswith(".git"):
name = name[:-4]
@@ -166,6 +178,7 @@ class UpdateWorker(QtCore.QThread):
else:
state = 1
repos.append([name, url, state])
url_to_branch_map[url] = branch
if not repos:
self.info_label.emit(translate("AddonsInstaller", "Unable to download addon list."))
else:
@@ -386,17 +399,22 @@ class ShowWorker(QtCore.QThread):
self.progressbar_show.emit(True)
self.info_label.emit(translate("AddonsInstaller", "Retrieving description..."))
if len(self.repos[self.idx]) == 4:
desc = self.repos[self.idx][3]
else:
u = None
url = self.repos[self.idx][1]
if url in url_to_branch_map:
branch = url_to_branch_map[url]
else:
branch = "master"
self.info_label.emit(translate("AddonsInstaller", "Retrieving info from") + " " + str(url))
desc = ""
regex = utils.get_readme_regex(url)
if regex:
# extract readme from html via regex
readmeurl = utils.get_readme_html_url(url)
readmeurl = utils.get_readme_html_url(url,branch)
if not readmeurl:
print("Debug: README not found for", url)
u = utils.urlopen(readmeurl)
@@ -415,7 +433,7 @@ class ShowWorker(QtCore.QThread):
print("Debug: README not found at", readmeurl)
else:
# convert raw markdown using lib
readmeurl = utils.get_readme_url(url)
readmeurl = utils.get_readme_url(url,branch)
if not readmeurl:
print("Debug: README not found for", url)
u = utils.urlopen(readmeurl)
@@ -867,7 +885,11 @@ class InstallWorker(QtCore.QThread):
shutil.rmtree(bakdir)
os.rename(clonedir, bakdir)
os.makedirs(clonedir)
zipurl = utils.get_zip_url(baseurl)
if baseurl in url_to_branch_map:
branch = url_to_branch_map[baseurl]
else:
branch = "master"
zipurl = utils.get_zip_url(baseurl, branch)
if not zipurl:
return translate("AddonsInstaller", "Error: Unable to locate zip from") + " " + baseurl
try: