aboutsummaryrefslogtreecommitdiff
path: root/app/tasks/importtasks.py
diff options
context:
space:
mode:
authorrubenwardy <rw@rubenwardy.com>2020-01-19 00:28:26 +0000
committerrubenwardy <rw@rubenwardy.com>2020-01-19 00:28:26 +0000
commitbcd003685e9fbc38ff484a55ead38d381d75925b (patch)
treefc8be9809e38aba3bb838155153bc7c45e722b37 /app/tasks/importtasks.py
parent59039a14a5ebc1d006cfe72ac98aae74c0602de1 (diff)
downloadcheatdb-bcd003685e9fbc38ff484a55ead38d381d75925b.tar.xz
Add support for submodules in makeVCSRelease()
Diffstat (limited to 'app/tasks/importtasks.py')
-rw-r--r--app/tasks/importtasks.py47
1 files changed, 25 insertions, 22 deletions
diff --git a/app/tasks/importtasks.py b/app/tasks/importtasks.py
index ebe8e1e..8925f0e 100644
--- a/app/tasks/importtasks.py
+++ b/app/tasks/importtasks.py
@@ -17,6 +17,7 @@
import flask, json, os, git, tempfile, shutil, gitdb
from git import GitCommandError
+from git_archive_all import GitArchiver
from flask_sqlalchemy import SQLAlchemy
from urllib.error import HTTPError
import urllib.request
@@ -380,29 +381,31 @@ def makeVCSRelease(id, branch):
elif release.package is None:
raise TaskError("No package attached to release")
- urlmaker = None
- url = urlparse(release.package.repo)
- if url.netloc == "github.com":
- return makeVCSReleaseFromGithub(id, branch, release, url)
- else:
- gitDir, repo = cloneRepo(release.package.repo, ref=branch, recursive=True)
+ # url = urlparse(release.package.repo)
+ # if url.netloc == "github.com":
+ # return makeVCSReleaseFromGithub(id, branch, release, url)
- try:
- filename = randomString(10) + ".zip"
- destPath = os.path.join(app.config["UPLOAD_DIR"], filename)
- with open(destPath, "wb") as fp:
- repo.archive(fp, format="zip")
-
- release.url = "/uploads/" + filename
- release.task_id = None
- release.commit_hash = repo.head.object.hexsha
- release.approve(release.package.author)
- print(release.url)
- db.session.commit()
-
- return release.url
- finally:
- shutil.rmtree(gitDir)
+ gitDir, repo = cloneRepo(release.package.repo, ref=branch, recursive=True)
+
+ try:
+ filename = randomString(10) + ".zip"
+ destPath = os.path.join(app.config["UPLOAD_DIR"], filename)
+
+ assert(not os.path.isfile(destPath))
+ archiver = GitArchiver(force_sub=True, main_repo_abspath=gitDir)
+ archiver.create(destPath)
+ assert(os.path.isfile(destPath))
+
+ release.url = "/uploads/" + filename
+ release.task_id = None
+ release.commit_hash = repo.head.object.hexsha
+ release.approve(release.package.author)
+ print(release.url)
+ db.session.commit()
+
+ return release.url
+ finally:
+ shutil.rmtree(gitDir)
@celery.task()
def importRepoScreenshot(id):