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)