You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by jo...@apache.org on 2013/03/29 19:16:40 UTC
[1/2] git commit: [#5963] ticket:305 Code snapshot status check
changes
Updated Branches:
refs/heads/cj/5963 [created] 9dc959330
[#5963] ticket:305 Code snapshot status check changes
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/ba609ec8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/ba609ec8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/ba609ec8
Branch: refs/heads/cj/5963
Commit: ba609ec8c25293bbef000eef50c3b101d7aad8ae
Parents: d2678d1
Author: Yuriy Arhipov <yu...@yandex.ru>
Authored: Fri Mar 22 13:49:08 2013 +0400
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Tue Mar 26 10:18:38 2013 +0000
----------------------------------------------------------------------
Allura/allura/model/repository.py | 28 +++++++-------
Allura/allura/tasks/repo_tasks.py | 3 --
Allura/allura/templates/repo/tarball.html | 9 ++++-
Allura/allura/tests/test_tasks.py | 6 ---
ForgeGit/forgegit/model/git_repo.py | 13 ++++---
.../forgegit/tests/functional/test_controllers.py | 7 ----
ForgeGit/forgegit/tests/model/test_repository.py | 19 ++++++++++
ForgeSVN/forgesvn/model/svn.py | 10 +++---
8 files changed, 52 insertions(+), 43 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ba609ec8/Allura/allura/model/repository.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/repository.py b/Allura/allura/model/repository.py
index f822cc2..82f3cf2 100644
--- a/Allura/allura/model/repository.py
+++ b/Allura/allura/model/repository.py
@@ -208,7 +208,6 @@ class Repository(Artifact, ActivityObject):
branches = FieldProperty([dict(name=str,object_id=str, count=int)])
repo_tags = FieldProperty([dict(name=str,object_id=str, count=int)])
upstream_repo = FieldProperty(dict(name=str,url=str))
- tarball_status = FieldProperty([dict(revision=str, status=str)])
def __init__(self, **kw):
if 'name' in kw and 'tool' in kw:
@@ -240,10 +239,14 @@ class Repository(Artifact, ActivityObject):
self.project.shortname,
self.name)
- def tarball_url(self, revision):
+ def tarball_filename(self, revision):
shortname = c.app.repo.project.shortname.replace('/', '-')
mount_point = c.app.repo.app.config.options.mount_point
- filename = '%s-%s-%s.tar.gz' % (shortname, mount_point, revision)
+ filename = '%s-%s-%s' % (shortname, mount_point, revision)
+ return filename
+
+ def tarball_url(self, revision):
+ filename = '%s%s' % (self.tarball_filename(revision), '.tar.gz')
r = os.path.join(self.tool,
self.project.shortname[:1],
self.project.shortname[:2],
@@ -253,17 +256,14 @@ class Repository(Artifact, ActivityObject):
return urljoin(tg.config.get('scm.repos.tarball.url_prefix', '/'), r)
def get_tarball_status(self, revision):
- tarballs = dict((t.revision, t.status) for t in self.tarball_status)
- return tarballs.get(revision)
-
- def set_tarball_status(self, revision, status):
- for tarball in self.tarball_status:
- if tarball['revision'] == revision:
- tarball['status'] = status
- session(self).flush(self)
- return
- self.tarball_status.append(dict(revision=revision, status=status))
- session(self).flush(self)
+ pathname = os.path.join(self.tarball_path, self.tarball_filename(revision))
+ filename = '%s%s' % (pathname, '.tar.gz')
+ tmpfilename = '%s%s' % (pathname, '.tmp')
+
+ if os.path.isfile(filename):
+ return 'ready'
+ elif os.path.isfile(tmpfilename) or os.path.isdir(pathname):
+ return 'busy'
def __repr__(self): # pragma no cover
return '<%s %s>' % (
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ba609ec8/Allura/allura/tasks/repo_tasks.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tasks/repo_tasks.py b/Allura/allura/tasks/repo_tasks.py
index 4eff18d..03ce1f2 100644
--- a/Allura/allura/tasks/repo_tasks.py
+++ b/Allura/allura/tasks/repo_tasks.py
@@ -108,12 +108,9 @@ def tarball(revision=None):
log = logging.getLogger(__name__)
if revision:
repo = c.app.repo
- repo.set_tarball_status(revision, 'busy')
try:
repo.tarball(revision)
- repo.set_tarball_status(revision, 'ready')
except:
- repo.set_tarball_status(revision, None)
log.error('Could not create tarball for repository %s:%s revision %s' % (c.project.shortname, c.app.config.options.mount_point, revision), exc_info=True)
else:
log.warn('Creation of tarball for %s:%s skipped because revision is not specified' % (c.project.shortname, c.app.config.options.mount_point))
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ba609ec8/Allura/allura/templates/repo/tarball.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/repo/tarball.html b/Allura/allura/templates/repo/tarball.html
index c312d8b..c5e071d 100644
--- a/Allura/allura/templates/repo/tarball.html
+++ b/Allura/allura/templates/repo/tarball.html
@@ -34,20 +34,25 @@ Commit <a href="{{commit.url()}}">{{commit.shorthand_id()}}</a> {{commit_labels(
left: 10 // Left position relative to parent in px
};
var spinner = new Spinner(opts).spin($('#snapshot_status')[0]);
+ var delay = 5000
// Check tarball status every 5 seconds
function check_status() {
$.get('{{commit.url()}}tarball_status', function(data) {
if (data.status === 'ready') {
- window.clearInterval(status_checker);
spinner.stop();
$('#snapshot_status h2').toggle();
{% if 'no-redirect' not in request.params %}
window.location.href = '{{c.app.repo.tarball_url(revision)}}';
{% endif %}
+ } else {
+ if (delay < 600000){
+ delay = delay * 2
+ }
+ window.setTimeout(check_status, delay);
}
});
}
- var status_checker = window.setInterval(check_status, 5000);
+ window.setTimeout(check_status, delay);
{% endif %}
});
</script>
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ba609ec8/Allura/allura/tests/test_tasks.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/test_tasks.py b/Allura/allura/tests/test_tasks.py
index 9e16bfb..74a09d0 100644
--- a/Allura/allura/tests/test_tasks.py
+++ b/Allura/allura/tests/test_tasks.py
@@ -38,12 +38,6 @@ class TestRepoTasks(unittest.TestCase):
assert_equal(post_event.call_args[0][2], None)
# ignore args[3] which is a traceback string
- @mock.patch('allura.tasks.repo_tasks.c.app.repo.set_tarball_status')
- def test_repo_tarball(self,st):
- repo_tasks.tarball('HEAD')
- calls = [mock.call('HEAD', 'busy'), mock.call('HEAD', 'ready')]
- st.assert_has_calls(calls, any_order=True)
-
class TestEventTasks(unittest.TestCase):
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ba609ec8/ForgeGit/forgegit/model/git_repo.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/model/git_repo.py b/ForgeGit/forgegit/model/git_repo.py
index c660d69..27fc8e4 100644
--- a/ForgeGit/forgegit/model/git_repo.py
+++ b/ForgeGit/forgegit/model/git_repo.py
@@ -324,14 +324,15 @@ class GitImplementation(M.RepositoryImplementation):
return tree._id
def tarball(self, commit):
- shortname = self._repo.project.shortname.replace('/', '-')
- mount_point = self._repo.app.config.options.mount_point
if not os.path.exists(self._repo.tarball_path):
os.makedirs(self._repo.tarball_path)
- archive_name = '%s-%s-%s' % (shortname, mount_point, commit)
- filename = os.path.join(self._repo.tarball_path, archive_name + '.tar.gz')
- with gzip.open(filename, 'w') as fp:
- self._git.archive(fp, format='tar', treeish=commit, prefix=archive_name+'/')
+ archive_name = self._repo.tarball_filename(commit)
+ filename = os.path.join(self._repo.tarball_path, '%s%s' % (archive_name, '.tar.gz'))
+ tmpfilename = os.path.join(self._repo.tarball_path, '%s%s' % (archive_name, '.tmp'))
+ with gzip.open(tmpfilename, 'w') as fp:
+ self._git.archive(fp, format='tar', treeish=commit, prefix=archive_name + '/')
+ os.rename(tmpfilename, filename)
+
class _OpenedGitBlob(object):
CHUNK_SIZE=4096
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ba609ec8/ForgeGit/forgegit/tests/functional/test_controllers.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/tests/functional/test_controllers.py b/ForgeGit/forgegit/tests/functional/test_controllers.py
index e77f210..37bb521 100644
--- a/ForgeGit/forgegit/tests/functional/test_controllers.py
+++ b/ForgeGit/forgegit/tests/functional/test_controllers.py
@@ -290,13 +290,6 @@ class TestRootController(_TestCase):
r = self.app.get(ci + 'tarball_status')
assert '{"status": "ready"}' in r
- def test_tarball_status(self):
- assert_equal(c.app.repo.get_tarball_status('1e146e67985dcd71c74de79613719bef7bddca4a'), None)
- c.app.repo.set_tarball_status('1e146e67985dcd71c74de79613719bef7bddca4a', 'ready')
- c.app.repo.set_tarball_status('df30427c488aeab84b2352bdf88a3b19223f9d7a', 'busy')
- assert_equal(c.app.repo.get_tarball_status('1e146e67985dcd71c74de79613719bef7bddca4a'), 'ready')
- assert_equal(c.app.repo.get_tarball_status('df30427c488aeab84b2352bdf88a3b19223f9d7a'), 'busy')
-
class TestRestController(_TestCase):
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ba609ec8/ForgeGit/forgegit/tests/model/test_repository.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/tests/model/test_repository.py b/ForgeGit/forgegit/tests/model/test_repository.py
index 4e1d417..ba52de5 100644
--- a/ForgeGit/forgegit/tests/model/test_repository.py
+++ b/ForgeGit/forgegit/tests/model/test_repository.py
@@ -239,11 +239,30 @@ class TestGitRepo(unittest.TestCase, RepoImplTestBase):
self.assertEqual(new_tree.other_ids, orig_tree.other_ids)
def test_tarball(self):
+ if os.path.isfile("/tmp/tarball/git/t/te/test/testgit.git/test-src-git-HEAD.tar.gz"):
+ os.remove("/tmp/tarball/git/t/te/test/testgit.git/test-src-git-HEAD.tar.gz")
assert_equal(self.repo.tarball_path, '/tmp/tarball/git/t/te/test/testgit.git')
assert_equal(self.repo.tarball_url('HEAD'), 'file:///git/t/te/test/testgit.git/test-src-git-HEAD.tar.gz')
self.repo.tarball('HEAD')
assert os.path.isfile("/tmp/tarball/git/t/te/test/testgit.git/test-src-git-HEAD.tar.gz")
+ def test_tarball_status(self):
+ if os.path.isfile("/tmp/tarball/git/t/te/test/testgit.git/test-src-git-HEAD.tar.gz"):
+ os.remove("/tmp/tarball/git/t/te/test/testgit.git/test-src-git-HEAD.tar.gz")
+ if os.path.isfile("/tmp/tarball/git/t/te/test/testgit.git/test-src-git-HEAD.tmp"):
+ os.remove("/tmp/tarball/git/t/te/test/testgit.git/test-src-git-HEAD.tmp")
+ if os.path.isdir("/tmp/tarball/git/t/te/test/testgit.git/test-src-git-HEAD/"):
+ os.removedirs("/tmp/tarball/git/t/te/test/testgit.git/test-src-git-HEAD/")
+ self.repo.tarball('HEAD')
+ assert_equal(self.repo.get_tarball_status('HEAD'), 'ready')
+ os.rename("/tmp/tarball/git/t/te/test/testgit.git/test-src-git-HEAD.tar.gz",
+ "/tmp/tarball/git/t/te/test/testgit.git/test-src-git-HEAD.tmp")
+ assert_equal(self.repo.get_tarball_status('HEAD'), 'busy')
+ os.remove("/tmp/tarball/git/t/te/test/testgit.git/test-src-git-HEAD.tmp")
+ assert_equal(self.repo.get_tarball_status('HEAD'), None)
+ os.makedirs("/tmp/tarball/git/t/te/test/testgit.git/test-src-git-HEAD")
+ assert_equal(self.repo.get_tarball_status('HEAD'), 'busy')
+
class TestGitCommit(unittest.TestCase):
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ba609ec8/ForgeSVN/forgesvn/model/svn.py
----------------------------------------------------------------------
diff --git a/ForgeSVN/forgesvn/model/svn.py b/ForgeSVN/forgesvn/model/svn.py
index 7c7515a..902c829 100644
--- a/ForgeSVN/forgesvn/model/svn.py
+++ b/ForgeSVN/forgesvn/model/svn.py
@@ -611,8 +611,6 @@ class SVNImplementation(M.RepositoryImplementation):
return entries
def tarball(self, commit):
- shortname = self._repo.project.shortname.replace('/', '-')
- mount_point = self._repo.app.config.options.mount_point
if not os.path.exists(self._repo.tarball_path):
os.makedirs(self._repo.tarball_path)
path = os.path.join(self._repo.tarball_path, commit)
@@ -621,11 +619,13 @@ class SVNImplementation(M.RepositoryImplementation):
self._svn.export(self._url,
path,
revision=pysvn.Revision(pysvn.opt_revision_kind.number, commit))
- archive_name = '%s-%s-%s' % (shortname, mount_point, commit)
- filename = os.path.join(self._repo.tarball_path, archive_name + '.tar.gz')
- with tarfile.open(filename, "w:gz") as tar:
+ archive_name = self._repo.tarball_filename(commit)
+ filename = os.path.join(self._repo.tarball_path, '%s%s' % (archive_name, '.tar.gz'))
+ tmpfilename = os.path.join(self._repo.tarball_path, '%s%s' % (archive_name, '.tmp'))
+ with tarfile.open(tmpfilename, "w:gz") as tar:
tar.add(path, arcname=archive_name)
rmtree(path)
+ os.rename(tmpfilename, filename)
Mapper.compile_all()
[2/2] git commit: [#5963] Minor fixups to code-snapshots
Posted by jo...@apache.org.
[#5963] Minor fixups to code-snapshots
Signed-off-by: Cory Johns <cj...@slashdotmedia.com>
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/9dc95933
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/9dc95933
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/9dc95933
Branch: refs/heads/cj/5963
Commit: 9dc95933076afcc1c34ce468a07f3f9846517ad7
Parents: ba609ec
Author: Cory Johns <cj...@slashdotmedia.com>
Authored: Fri Mar 29 15:15:42 2013 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Fri Mar 29 15:38:15 2013 +0000
----------------------------------------------------------------------
Allura/allura/model/repository.py | 6 ++--
ForgeGit/forgegit/model/git_repo.py | 10 +++++--
ForgeGit/forgegit/tests/model/test_repository.py | 2 +-
ForgeSVN/forgesvn/model/svn.py | 22 ++++++++++-------
4 files changed, 24 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/9dc95933/Allura/allura/model/repository.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/repository.py b/Allura/allura/model/repository.py
index 82f3cf2..110d410 100644
--- a/Allura/allura/model/repository.py
+++ b/Allura/allura/model/repository.py
@@ -240,8 +240,8 @@ class Repository(Artifact, ActivityObject):
self.name)
def tarball_filename(self, revision):
- shortname = c.app.repo.project.shortname.replace('/', '-')
- mount_point = c.app.repo.app.config.options.mount_point
+ shortname = c.project.shortname.replace('/', '-')
+ mount_point = c.app.config.options.mount_point
filename = '%s-%s-%s' % (shortname, mount_point, revision)
return filename
@@ -262,7 +262,7 @@ class Repository(Artifact, ActivityObject):
if os.path.isfile(filename):
return 'ready'
- elif os.path.isfile(tmpfilename) or os.path.isdir(pathname):
+ elif os.path.isfile(tmpfilename):
return 'busy'
def __repr__(self): # pragma no cover
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/9dc95933/ForgeGit/forgegit/model/git_repo.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/model/git_repo.py b/ForgeGit/forgegit/model/git_repo.py
index 27fc8e4..d7c9d49 100644
--- a/ForgeGit/forgegit/model/git_repo.py
+++ b/ForgeGit/forgegit/model/git_repo.py
@@ -329,9 +329,13 @@ class GitImplementation(M.RepositoryImplementation):
archive_name = self._repo.tarball_filename(commit)
filename = os.path.join(self._repo.tarball_path, '%s%s' % (archive_name, '.tar.gz'))
tmpfilename = os.path.join(self._repo.tarball_path, '%s%s' % (archive_name, '.tmp'))
- with gzip.open(tmpfilename, 'w') as fp:
- self._git.archive(fp, format='tar', treeish=commit, prefix=archive_name + '/')
- os.rename(tmpfilename, filename)
+ try:
+ with gzip.open(tmpfilename, 'w') as fp:
+ self._git.archive(fp, format='tar', treeish=commit, prefix=archive_name + '/')
+ os.rename(tmpfilename, filename)
+ finally:
+ if os.path.exists(tmpfilename):
+ os.remove(tmpfilename)
class _OpenedGitBlob(object):
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/9dc95933/ForgeGit/forgegit/tests/model/test_repository.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/tests/model/test_repository.py b/ForgeGit/forgegit/tests/model/test_repository.py
index ba52de5..08de37b 100644
--- a/ForgeGit/forgegit/tests/model/test_repository.py
+++ b/ForgeGit/forgegit/tests/model/test_repository.py
@@ -261,7 +261,7 @@ class TestGitRepo(unittest.TestCase, RepoImplTestBase):
os.remove("/tmp/tarball/git/t/te/test/testgit.git/test-src-git-HEAD.tmp")
assert_equal(self.repo.get_tarball_status('HEAD'), None)
os.makedirs("/tmp/tarball/git/t/te/test/testgit.git/test-src-git-HEAD")
- assert_equal(self.repo.get_tarball_status('HEAD'), 'busy')
+ assert_equal(self.repo.get_tarball_status('HEAD'), None)
class TestGitCommit(unittest.TestCase):
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/9dc95933/ForgeSVN/forgesvn/model/svn.py
----------------------------------------------------------------------
diff --git a/ForgeSVN/forgesvn/model/svn.py b/ForgeSVN/forgesvn/model/svn.py
index 902c829..171c709 100644
--- a/ForgeSVN/forgesvn/model/svn.py
+++ b/ForgeSVN/forgesvn/model/svn.py
@@ -614,18 +614,22 @@ class SVNImplementation(M.RepositoryImplementation):
if not os.path.exists(self._repo.tarball_path):
os.makedirs(self._repo.tarball_path)
path = os.path.join(self._repo.tarball_path, commit)
- if os.path.exists(path):
- rmtree(path)
- self._svn.export(self._url,
- path,
- revision=pysvn.Revision(pysvn.opt_revision_kind.number, commit))
archive_name = self._repo.tarball_filename(commit)
filename = os.path.join(self._repo.tarball_path, '%s%s' % (archive_name, '.tar.gz'))
tmpfilename = os.path.join(self._repo.tarball_path, '%s%s' % (archive_name, '.tmp'))
- with tarfile.open(tmpfilename, "w:gz") as tar:
- tar.add(path, arcname=archive_name)
- rmtree(path)
- os.rename(tmpfilename, filename)
+ if os.path.exists(path):
+ rmtree(path)
+ try:
+ self._svn.export(self._url,
+ path,
+ revision=pysvn.Revision(pysvn.opt_revision_kind.number, commit))
+ with tarfile.open(tmpfilename, "w:gz") as tar:
+ tar.add(path, arcname=archive_name)
+ os.rename(tmpfilename, filename)
+ finally:
+ rmtree(path)
+ if os.path.exists(tmpfilename):
+ os.remove(tmpfilename)
Mapper.compile_all()