You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2018/06/21 20:24:33 UTC

allura git commit: [#8210] support a scm.repos.tarball.tmpdir config for snapshot checkouts being in a different dir than the final zip file

Repository: allura
Updated Branches:
  refs/heads/db/8210 [created] 543d7edcf


[#8210] support a scm.repos.tarball.tmpdir config for snapshot checkouts being in a different dir than the final zip file


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/543d7edc
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/543d7edc
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/543d7edc

Branch: refs/heads/db/8210
Commit: 543d7edcf62eda7a5fe627ff1ee560b750a8ec53
Parents: 93eaaa2
Author: Dave Brondsema <da...@brondsema.net>
Authored: Thu Jun 21 16:24:27 2018 -0400
Committer: Dave Brondsema <da...@brondsema.net>
Committed: Thu Jun 21 16:24:27 2018 -0400

----------------------------------------------------------------------
 Allura/allura/model/repository.py   |  9 +++++++++
 Allura/development.ini              |  1 +
 ForgeGit/forgegit/model/git_repo.py |  3 +++
 ForgeSVN/forgesvn/model/svn.py      | 20 ++++++++++++++------
 4 files changed, 27 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/543d7edc/Allura/allura/model/repository.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/repository.py b/Allura/allura/model/repository.py
index b2c6c7e..4724165 100644
--- a/Allura/allura/model/repository.py
+++ b/Allura/allura/model/repository.py
@@ -395,6 +395,15 @@ class Repository(Artifact, ActivityObject):
                             self.project.shortname,
                             self.name)
 
+    @property
+    def tarball_tmpdir(self):
+        return os.path.join(tg.config.get('scm.repos.tarball.tmpdir', tg.config.get('scm.repos.tarball.root', '/')),
+                            self.tool,
+                            self.project.shortname[:1],
+                            self.project.shortname[:2],
+                            self.project.shortname,
+                            self.name)
+
     def tarball_filename(self, revision, path=None):
         shortname = c.project.shortname.replace('/', '-')
         mount_point = c.app.config.options.mount_point

http://git-wip-us.apache.org/repos/asf/allura/blob/543d7edc/Allura/development.ini
----------------------------------------------------------------------
diff --git a/Allura/development.ini b/Allura/development.ini
index 93afe93..9e19edb 100644
--- a/Allura/development.ini
+++ b/Allura/development.ini
@@ -373,6 +373,7 @@ scm.clone.svn = svn checkout --username=$username $source_url $dest_path
 scm.repos.root = /srv
 scm.repos.tarball.enable = false
 scm.repos.tarball.root = /usr/share/nginx/www/
+; scm.repos.tarball.tmpdir can be set to hold code checkouts before building the zip file.  Defaults to scm.repos.tarball.root
 scm.repos.tarball.url_prefix = http://localhost/
 scm.repos.tarball.zip_binary = /usr/bin/zip
 

http://git-wip-us.apache.org/repos/asf/allura/blob/543d7edc/ForgeGit/forgegit/model/git_repo.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/model/git_repo.py b/ForgeGit/forgegit/model/git_repo.py
index 0de4c15..950c0c8 100644
--- a/ForgeGit/forgegit/model/git_repo.py
+++ b/ForgeGit/forgegit/model/git_repo.py
@@ -514,6 +514,9 @@ class GitImplementation(M.RepositoryImplementation):
         return tree._id
 
     def tarball(self, commit, path=None):
+        """
+        :param path: is currently ignored.  Can't request a snapshot of a subdirectory
+        """
         if not os.path.exists(self._repo.tarball_path):
             os.makedirs(self._repo.tarball_path)
         archive_name = self._repo.tarball_filename(commit)

http://git-wip-us.apache.org/repos/asf/allura/blob/543d7edc/ForgeSVN/forgesvn/model/svn.py
----------------------------------------------------------------------
diff --git a/ForgeSVN/forgesvn/model/svn.py b/ForgeSVN/forgesvn/model/svn.py
index 152ecf0..afcdd12 100644
--- a/ForgeSVN/forgesvn/model/svn.py
+++ b/ForgeSVN/forgesvn/model/svn.py
@@ -682,30 +682,38 @@ class SVNImplementation(M.RepositoryImplementation):
             return ''
 
     def tarball(self, commit, path=None):
+        """
+        Makes a svn export at `tmpdest`
+            then zips that into `dest/tmpfilename`
+            then renames that to `dest/filename`
+        """
         path = self._tarball_path_clean(path, commit)
         if not os.path.exists(self._repo.tarball_path):
             os.makedirs(self._repo.tarball_path)
+        if not os.path.exists(self._repo.tarball_tmpdir):
+            os.makedirs(self._repo.tarball_tmpdir)
         archive_name = self._repo.tarball_filename(commit, path)
         dest = os.path.join(self._repo.tarball_path, archive_name)
-        filename = os.path.join(self._repo.tarball_path, '%s%s' %
-                                (archive_name, '.zip'))
-        tmpfilename = os.path.join(self._repo.tarball_path, '%s%s' %
-                                   (archive_name, '.tmp'))
+        tmpdest = os.path.join(self._repo.tarball_tmpdir, archive_name)
+        filename = os.path.join(self._repo.tarball_path, '%s%s' % (archive_name, '.zip'))
+        tmpfilename = os.path.join(self._repo.tarball_path, '%s%s' % (archive_name, '.tmp'))
         rmtree(dest.encode('utf8'), ignore_errors=True)  # must encode into bytes or it'll fail on non-ascii filenames
+        rmtree(tmpdest.encode('utf8'), ignore_errors=True)
         path = os.path.join(self._url, path)
         try:
             # need to set system locale to handle all symbols in filename
             import locale
             locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
             self._svn.export(path,
-                             dest,
+                             tmpdest,
                              revision=pysvn.Revision(
                                  pysvn.opt_revision_kind.number, commit),
                              ignore_externals=True)
-            zipdir(dest, tmpfilename)
+            zipdir(tmpdest, tmpfilename)
             os.rename(tmpfilename, filename)
         finally:
             rmtree(dest.encode('utf8'), ignore_errors=True)
+            rmtree(tmpdest.encode('utf8'), ignore_errors=True)
             if os.path.exists(tmpfilename):
                 os.remove(tmpfilename)