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 2012/11/07 20:29:01 UTC
[5/10] git commit: [#5230] Move SF-specific post-repo-clone handling
our of allura core.
[#5230] Move SF-specific post-repo-clone handling our of allura core.
- Also added new 'repo_cloned_failed' event
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/191ef688
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/191ef688
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/191ef688
Branch: refs/heads/db/5224
Commit: 191ef688fcac5544a218484663066813022740dd
Parents: 7375db4
Author: Tim Van Steenburgh <tv...@gmail.com>
Authored: Mon Nov 5 21:46:08 2012 +0000
Committer: Dave Brondsema <db...@geek.net>
Committed: Tue Nov 6 21:49:40 2012 +0000
----------------------------------------------------------------------
Allura/allura/tasks/repo_tasks.py | 51 ++---------------
Allura/allura/tests/test_tasks.py | 16 +++++
ForgeGit/forgegit/model/git_repo.py | 2 +-
ForgeGit/forgegit/tests/model/test_repository.py | 4 +-
ForgeHg/forgehg/model/hg.py | 4 +-
ForgeHg/forgehg/tests/model/test_repository.py | 4 +-
ForgeSVN/forgesvn/model/svn.py | 2 +-
ForgeSVN/forgesvn/tests/model/test_repository.py | 4 +-
8 files changed, 35 insertions(+), 52 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/191ef688/Allura/allura/tasks/repo_tasks.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tasks/repo_tasks.py b/Allura/allura/tasks/repo_tasks.py
index ee7e58f..152b8fb 100644
--- a/Allura/allura/tasks/repo_tasks.py
+++ b/Allura/allura/tasks/repo_tasks.py
@@ -2,12 +2,10 @@ import shutil
import logging
import traceback
-from pylons import c
+from pylons import c, g
from allura.lib.decorators import task
from allura.lib.repository import RepositoryApp
-from allura.lib import helpers as h
-from allura.tasks.mail_tasks import sendmail
@task
def init(**kwargs):
@@ -19,12 +17,9 @@ def init(**kwargs):
c.project.shortname, c.app.config.options.mount_point))
@task
-def clone(
- cloned_from_path,
- cloned_from_name,
- cloned_from_url):
+def clone(cloned_from_path, cloned_from_name, cloned_from_url):
+ from allura import model as M
try:
- from allura import model as M
c.app.repo.init_as_clone(
cloned_from_path,
cloned_from_name,
@@ -33,43 +28,9 @@ def clone(
c.user, c.app.repo, 'created',
text='Repository %s/%s created' % (
c.project.shortname, c.app.config.options.mount_point))
- if not c.project.suppress_emails:
- sendmail(
- destinations=[str(c.user._id)],
- fromaddr=u'SourceForge.net <no...@in.sf.net>',
- reply_to=u'noreply@in.sf.net',
- subject=u'SourceForge Repo Clone Complete',
- message_id=h.gen_message_id(),
- text=u''.join([
- u'Your cloned repository %s in project %s is now ready for use.\n\n',
- u'Old repository url: %s \n\n',
- u'New repository checkout command: %s \n\n',
- u'You and any other developers should do a fresh checkout using the ',
- u'new repository location.\n'
- ]) % (c.app.config.options.mount_point, c.project.shortname, cloned_from_url, c.app.repo.clone_command('rw')))
- except:
- sendmail(
- destinations=['sfengineers@geek.net'],
- fromaddr=u'SourceForge.net <no...@in.sf.net>',
- reply_to=u'noreply@in.sf.net',
- subject=u'SourceForge Repo Clone Failure',
- message_id=h.gen_message_id(),
- text=u''.join([
- u'Forking/cloning repo %s in project %s from %s failed.\n',
- u'\n',
- u'%s',
- ]) % (c.app.config.options.mount_point, c.project.shortname, cloned_from_url, traceback.format_exc()))
- if not c.project.suppress_emails:
- sendmail(
- destinations=[str(c.user._id)],
- fromaddr=u'SourceForge.net <no...@in.sf.net>',
- reply_to=u'noreply@in.sf.net',
- subject=u'SourceForge Repo Clone Failed',
- message_id=h.gen_message_id(),
- text=u''.join([
- u'Forking/cloning repo %s in project %s from %s failed. ',
- u'The SourceForge engineering team has been notified.\n',
- ]) % (c.app.config.options.mount_point, c.project.shortname, cloned_from_url))
+ except Exception, e:
+ source_url = cloned_from_path or cloned_from_url
+ g.post_event('repo_clone_task_failed', source_url, traceback.format_exc())
@task
def reclone(*args, **kwargs):
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/191ef688/Allura/allura/tests/test_tasks.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/test_tasks.py b/Allura/allura/tests/test_tasks.py
index edb82f1..334d08c 100644
--- a/Allura/allura/tests/test_tasks.py
+++ b/Allura/allura/tests/test_tasks.py
@@ -23,9 +23,25 @@ from allura.tasks import event_tasks
from allura.tasks import index_tasks
from allura.tasks import mail_tasks
from allura.tasks import notification_tasks
+from allura.tasks import repo_tasks
from allura.tests import decorators as td
from allura.lib.decorators import event_handler, task
+
+class TestRepoTasks(unittest.TestCase):
+ @mock.patch('allura.tasks.repo_tasks.c.app')
+ @mock.patch('allura.tasks.repo_tasks.g.post_event')
+ def test_clone_posts_event_on_failure(self, post_event, app):
+ fake_source_url = 'fake_source_url'
+ fake_traceback = 'fake_traceback'
+ app.repo.init_as_clone.side_effect = Exception(fake_traceback)
+ try:
+ repo_tasks.clone(None, None, fake_source_url)
+ except:
+ pass
+ post_event.assert_any_call('repo_clone_task_failed', fake_source_url, fake_traceback)
+
+
class TestEventTasks(unittest.TestCase):
def setUp(self):
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/191ef688/ForgeGit/forgegit/model/git_repo.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/model/git_repo.py b/ForgeGit/forgegit/model/git_repo.py
index 4624600..2244baa 100644
--- a/ForgeGit/forgegit/model/git_repo.py
+++ b/ForgeGit/forgegit/model/git_repo.py
@@ -111,7 +111,7 @@ class GitImplementation(M.RepositoryImplementation):
session(self._repo).flush(self._repo)
raise
log.info('... %r cloned', self._repo)
- g.post_event('repo_cloned')
+ g.post_event('repo_cloned', source_url)
self._repo.refresh(notify=False)
def commit(self, rev):
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/191ef688/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 deb8b63..e31a82d 100644
--- a/ForgeGit/forgegit/tests/model/test_repository.py
+++ b/ForgeGit/forgegit/tests/model/test_repository.py
@@ -148,7 +148,8 @@ class TestGitRepo(unittest.TestCase, RepoImplTestBase):
assert os.path.exists('/tmp/testgit.git/hooks/post-receive')
assert os.access('/tmp/testgit.git/hooks/post-receive', os.X_OK)
- def test_clone(self):
+ @mock.patch('forgegit.model.git_repo.g.post_event')
+ def test_clone(self, post_event):
repo = GM.Repository(
name='testgit.git',
fs_path='/tmp/',
@@ -162,6 +163,7 @@ class TestGitRepo(unittest.TestCase, RepoImplTestBase):
shutil.rmtree(dirname)
repo.init()
repo._impl.clone_from(repo_path)
+ post_event.assert_any_call('repo_cloned', repo_path)
assert len(repo.log())
assert not os.path.exists('/tmp/testgit.git/hooks/update')
assert not os.path.exists('/tmp/testgit.git/hooks/post-receive-user')
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/191ef688/ForgeHg/forgehg/model/hg.py
----------------------------------------------------------------------
diff --git a/ForgeHg/forgehg/model/hg.py b/ForgeHg/forgehg/model/hg.py
index 0212b4d..fc39d42 100644
--- a/ForgeHg/forgehg/model/hg.py
+++ b/ForgeHg/forgehg/model/hg.py
@@ -94,11 +94,11 @@ class HgImplementation(M.RepositoryImplementation):
self.__dict__['_hg'] = repo
self._setup_special_files(source_url)
except:
- self._repo.status = 'raise'
+ self._repo.status = 'ready'
session(self._repo).flush(self._repo)
raise
log.info('... %r cloned', self._repo)
- g.post_event('repo_cloned')
+ g.post_event('repo_cloned', source_url)
self._repo.refresh(notify=False)
def commit(self, rev):
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/191ef688/ForgeHg/forgehg/tests/model/test_repository.py
----------------------------------------------------------------------
diff --git a/ForgeHg/forgehg/tests/model/test_repository.py b/ForgeHg/forgehg/tests/model/test_repository.py
index c88a406..99eb814 100644
--- a/ForgeHg/forgehg/tests/model/test_repository.py
+++ b/ForgeHg/forgehg/tests/model/test_repository.py
@@ -143,7 +143,8 @@ class TestHgRepo(unittest.TestCase, RepoImplTestBase):
assert not os.path.exists('/tmp/testrepo.hg/.hg/undo.branch')
shutil.rmtree(dirname)
- def test_clone(self):
+ @mock.patch('forgehg.model.hg.g.post_event')
+ def test_clone(self, post_event):
repo = HM.Repository(
name='testrepo.hg',
fs_path='/tmp/',
@@ -157,6 +158,7 @@ class TestHgRepo(unittest.TestCase, RepoImplTestBase):
shutil.rmtree(dirname)
repo.init()
repo._impl.clone_from(repo_path)
+ post_event.assert_any_call('repo_cloned', repo_path)
assert len(repo.log())
assert not os.path.exists('/tmp/testrepo.hg/.hg/external-changegroup')
assert not os.path.exists('/tmp/testrepo.hg/.hg/nested/nested-file')
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/191ef688/ForgeSVN/forgesvn/model/svn.py
----------------------------------------------------------------------
diff --git a/ForgeSVN/forgesvn/model/svn.py b/ForgeSVN/forgesvn/model/svn.py
index e8173d8..eca7229 100644
--- a/ForgeSVN/forgesvn/model/svn.py
+++ b/ForgeSVN/forgesvn/model/svn.py
@@ -186,7 +186,7 @@ class SVNImplementation(M.RepositoryImplementation):
c.app.config.options['checkout_url'])):
c.app.config.options['checkout_url'] = ""
self._setup_special_files(source_url)
- g.post_event('repo_cloned')
+ g.post_event('repo_cloned', source_url)
self._repo.refresh(notify=False)
def refresh_heads(self):
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/191ef688/ForgeSVN/forgesvn/tests/model/test_repository.py
----------------------------------------------------------------------
diff --git a/ForgeSVN/forgesvn/tests/model/test_repository.py b/ForgeSVN/forgesvn/tests/model/test_repository.py
index 9e9270c..d4385fc 100644
--- a/ForgeSVN/forgesvn/tests/model/test_repository.py
+++ b/ForgeSVN/forgesvn/tests/model/test_repository.py
@@ -144,7 +144,8 @@ class TestSVNRepo(unittest.TestCase, RepoImplTestBase):
self.assertIn('exec $DIR/post-commit-user "$@"\n', c)
shutil.rmtree(dirname)
- def test_clone(self):
+ @mock.patch('forgesvn.model.svn.g.post_event')
+ def test_clone(self, post_event):
repo = SM.Repository(
name='testsvn',
fs_path='/tmp/',
@@ -158,6 +159,7 @@ class TestSVNRepo(unittest.TestCase, RepoImplTestBase):
shutil.rmtree(dirname)
repo.init()
repo._impl.clone_from('file://' + repo_path)
+ post_event.assert_any_call('repo_cloned', 'file://' + repo_path)
assert len(repo.log())
assert os.path.exists('/tmp/testsvn/hooks/pre-revprop-change')
assert os.access('/tmp/testsvn/hooks/pre-revprop-change', os.X_OK)