]> git.lizzy.rs Git - cheatdb.git/commitdiff
Add support for submodules in makeVCSRelease()
authorrubenwardy <rw@rubenwardy.com>
Sun, 19 Jan 2020 00:28:26 +0000 (00:28 +0000)
committerrubenwardy <rw@rubenwardy.com>
Sun, 19 Jan 2020 00:28:26 +0000 (00:28 +0000)
app/tasks/importtasks.py
requirements.txt

index ebe8e1e21784300d9e1873d39f36b9cd1956d235..8925f0ecf90b894a27f0b4d9e2f7fa5f9921678f 100644 (file)
@@ -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):
index fd73ebc1219a2bc29c35efce8593c0c18191f183..6f236bc3375115ab71ea9f2627af3a08a4ab70a6 100644 (file)
@@ -15,6 +15,7 @@ beautifulsoup4~=4.6
 celery==4.1.1
 kombu==4.2.0
 GitPython~=2.1
+git-archive-all~=1.20
 lxml~=4.2
 pillow~=6.2
 pyScss~=1.3