You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by tv...@apache.org on 2014/02/06 03:39:57 UTC

[01/10] git commit: [#7130] Removed inefficient next / prev links on file browse page

Updated Branches:
  refs/heads/tv/7042 4ed2a374e -> 9ac39feec (forced update)


[#7130] Removed inefficient next / prev links on file browse page

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/81d6277d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/81d6277d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/81d6277d

Branch: refs/heads/tv/7042
Commit: 81d6277d21bfa7b21375a11b3626cdf47b82f4e2
Parents: 18b4299
Author: Cory Johns <cj...@slashdotmedia.com>
Authored: Tue Feb 4 20:00:40 2014 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Wed Feb 5 21:05:10 2014 +0000

----------------------------------------------------------------------
 Allura/allura/controllers/repository.py |  3 --
 Allura/allura/model/repo.py             | 41 --------------------
 Allura/allura/templates/repo/file.html  | 16 --------
 Allura/allura/tests/unit/test_repo.py   | 56 ----------------------------
 4 files changed, 116 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/81d6277d/Allura/allura/controllers/repository.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/repository.py b/Allura/allura/controllers/repository.py
index e571734..1fb8323 100644
--- a/Allura/allura/controllers/repository.py
+++ b/Allura/allura/controllers/repository.py
@@ -615,13 +615,10 @@ class FileBrowser(BaseController):
             return self.diff(kw['barediff'], kw.pop('diformat', None))
         else:
             force_display = 'force' in kw
-            context = self._blob.context()
             stats = utils.generate_code_stats(self._blob)
             return dict(
                 blob=self._blob,
                 stats=stats,
-                prev=context.get('prev', None),
-                next=context.get('next', None),
                 force_display=force_display
             )
 

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/81d6277d/Allura/allura/model/repo.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/repo.py b/Allura/allura/model/repo.py
index a137e7a..9f11cc8 100644
--- a/Allura/allura/model/repo.py
+++ b/Allura/allura/model/repo.py
@@ -654,29 +654,6 @@ class Blob(object):
         return self.tree.url() + h.really_unicode(self.name)
 
     @LazyProperty
-    def prev_commit(self):
-        pcid = LastCommit._prev_commit_id(self.commit, self.path().strip('/'))
-        if pcid:
-            return self.repo.commit(pcid)
-        return None
-
-    @LazyProperty
-    def next_commit(self):
-        try:
-            path = self.path()
-            cur = self.commit
-            next = cur.context()['next']
-            while next:
-                cur = next[0]
-                next = cur.context()['next']
-                other_blob = cur.get_path(path, create=False)
-                if other_blob is None or other_blob._id != self._id:
-                    return cur
-        except:
-            log.exception('Lookup next_commit')
-            return None
-
-    @LazyProperty
     def _content_type_encoding(self):
         return self.repo.guess_type(self.name)
 
@@ -708,24 +685,6 @@ class Blob(object):
     def has_image_view(self):
         return self.content_type.startswith('image/')
 
-    def context(self):
-        path = self.path()
-        prev = self.prev_commit
-        next = self.next_commit
-        if prev is not None:
-            try:
-                prev = prev.get_path(path, create=False)
-            except KeyError:
-                prev = None
-        if next is not None:
-            try:
-                next = next.get_path(path, create=False)
-            except KeyError:
-                next = None
-        return dict(
-            prev=prev,
-            next=next)
-
     def open(self):
         return self.repo.open_blob(self)
 

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/81d6277d/Allura/allura/templates/repo/file.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/repo/file.html b/Allura/allura/templates/repo/file.html
index 965332b..b84c47c 100644
--- a/Allura/allura/templates/repo/file.html
+++ b/Allura/allura/templates/repo/file.html
@@ -65,22 +65,6 @@
 </script>
 {% endblock %}
 {% block content %}
-  {% if prev %}
-  <p>
-    Parent:
-    <a href="{{prev.url()}}">{{prev.commit.shorthand_id()}}</a>
-    <a href="?diff={{prev.commit._id}}">(diff)</a>
-  </p>
-  {% endif %}
-
-  {% if next %}
-  <p>
-    Child:
-    <a href="{{next.url()}}">{{next.commit.shorthand_id()}}</a>
-    <a href="{{next.url()}}?diff={{blob.commit._id}}">(diff)</a>
-  </p>
-  {% endif %}
-
   {% if blob.has_image_view %}
     <p><a href="?format=raw">Download this file</a></p>
     <img src="?format=raw" alt=""/>

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/81d6277d/Allura/allura/tests/unit/test_repo.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/unit/test_repo.py b/Allura/allura/tests/unit/test_repo.py
index eef8656..eee886e 100644
--- a/Allura/allura/tests/unit/test_repo.py
+++ b/Allura/allura/tests/unit/test_repo.py
@@ -146,62 +146,6 @@ class TestTree(unittest.TestCase):
 
 class TestBlob(unittest.TestCase):
 
-    def test_context_no_create(self):
-        blob = M.repo.Blob(Mock(), Mock(), Mock())
-        blob.path = Mock(return_value='path')
-        blob.prev_commit = Mock()
-        blob.next_commit = Mock()
-        blob.prev_commit.get_path.return_value = '_prev'
-        blob.next_commit.get_path.return_value = '_next'
-        context = blob.context()
-        assert_equal(context, {'prev': '_prev', 'next': '_next'})
-        blob.prev_commit.get_path.assert_called_with('path', create=False)
-        blob.next_commit.get_path.assert_called_with('path', create=False)
-
-        blob.prev_commit.get_path.side_effect = KeyError
-        blob.next_commit.get_path.side_effect = KeyError
-        context = blob.context()
-        assert_equal(context, {'prev': None, 'next': None})
-
-    @patch.object(M.repo.LastCommit, '_prev_commit_id')
-    def test_prev_commit_no_create(self, lc_pcid):
-        lc_pcid.return_value = None
-        blob = M.repo.Blob(Mock(), 'foo', 'bid')
-        blob.tree.path.return_value = '/path/'
-        pc = blob.prev_commit
-        lc_pcid.assert_called_once_with(blob.commit, 'path/foo')
-        assert not blob.repo.commit.called
-        assert_equal(pc, None)
-
-        lc_pcid.reset_mock()
-        lc_pcid.return_value = 'pcid'
-        blob = M.repo.Blob(Mock(), 'foo', 'bid')
-        blob.tree.path.return_value = '/path/'
-        blob.repo.commit.return_value = 'commit'
-        pc = blob.prev_commit
-        lc_pcid.assert_called_once_with(blob.commit, 'path/foo')
-        blob.repo.commit.assert_called_once_with('pcid')
-        assert_equal(pc, 'commit')
-
-    def test_next_commit_no_create(self):
-        blob = M.repo.Blob(MagicMock(), MagicMock(), MagicMock())
-        blob._id = 'blob1'
-        blob.path = Mock(return_value='path')
-        blob.commit.context().__getitem__.return_value = None
-        nc = blob.next_commit
-        assert_equal(nc, None)
-
-        _next = MagicMock()
-        _next.context().__getitem__.return_value = None
-        _next.get_path.return_value = Mock(_id='blob2')
-        blob = M.repo.Blob(MagicMock(), MagicMock(), MagicMock())
-        blob._id = 'blob1'
-        blob.path = Mock(return_value='path')
-        blob.commit.context().__getitem__.return_value = [_next]
-        nc = blob.next_commit
-        _next.get_path.assert_called_with('path', create=False)
-        assert_equal(nc, _next)
-
     def test_pypeline_view(self):
         blob = M.repo.Blob(Mock(), Mock(), Mock())
         blob._id = 'blob1'


[05/10] git commit: [#7111] Bumped GC, Trac, and Mediawiki Wiki Importer versions

Posted by tv...@apache.org.
[#7111] Bumped GC, Trac, and Mediawiki Wiki Importer versions

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/9413f606
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/9413f606
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/9413f606

Branch: refs/heads/tv/7042
Commit: 9413f606eaeec51689e519b6a4feff0b8ae430ce
Parents: 80ba554
Author: Cory Johns <cj...@slashdotmedia.com>
Authored: Wed Feb 5 20:30:15 2014 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Wed Feb 5 21:24:08 2014 +0000

----------------------------------------------------------------------
 requirements-sf.txt | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/9413f606/requirements-sf.txt
----------------------------------------------------------------------
diff --git a/requirements-sf.txt b/requirements-sf.txt
index b54c0c0..5d788cb 100644
--- a/requirements-sf.txt
+++ b/requirements-sf.txt
@@ -6,7 +6,7 @@ kombu==1.0.4
 coverage==3.5a1-20110413
 ForgeHg==0.1.21
 ForgePastebin==0.3.0
-GoogleCodeWikiImporter==0.4.9
+GoogleCodeWikiImporter==0.5.0
 mechanize==0.2.4
 mercurial==1.4.3
 MySQL-python==1.2.3c1
@@ -20,8 +20,8 @@ wsgipreload==1.2
 pyzmq==2.1.7
 html2text==3.200.3dev-20121112
 PyMollom==0.1
-TracWikiImporter==0.3.6
-MediawikiImporter==0.0.2
+TracWikiImporter==0.4.0
+MediawikiImporter==0.1.0
 Unidecode==0.04.14
 
 # use version built from https://github.com/johnsca/GitPython/tree/sf-master


[08/10] git commit: [#7042] Add tags to json feed

Posted by tv...@apache.org.
[#7042] Add tags to json feed

Cleaned up inconsistency in use of related_nodes vs target

Signed-off-by: Tim Van Steenburgh <tv...@gmail.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/36fd3c8e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/36fd3c8e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/36fd3c8e

Branch: refs/heads/tv/7042
Commit: 36fd3c8e56ba6150edc155344b2dc7bde12befdf
Parents: f295ca5
Author: Tim Van Steenburgh <tv...@gmail.com>
Authored: Wed Feb 5 22:36:21 2014 +0000
Committer: Tim Van Steenburgh <tv...@gmail.com>
Committed: Thu Feb 6 02:29:30 2014 +0000

----------------------------------------------------------------------
 ForgeActivity/forgeactivity/main.py | 1 +
 ForgeBlog/forgeblog/model/blog.py   | 2 +-
 ForgeWiki/forgewiki/wiki_main.py    | 2 +-
 3 files changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/36fd3c8e/ForgeActivity/forgeactivity/main.py
----------------------------------------------------------------------
diff --git a/ForgeActivity/forgeactivity/main.py b/ForgeActivity/forgeactivity/main.py
index 08c0283..8a34732 100644
--- a/ForgeActivity/forgeactivity/main.py
+++ b/ForgeActivity/forgeactivity/main.py
@@ -215,6 +215,7 @@ class ForgeActivityRestController(BaseController):
                 'verb': a.verb,
                 'obj': a.obj._deinstrument(),
                 'target': a.target._deinstrument(),
+                'tags': a.tags._deinstrument(),
             } for a in data['timeline']],
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/36fd3c8e/ForgeBlog/forgeblog/model/blog.py
----------------------------------------------------------------------
diff --git a/ForgeBlog/forgeblog/model/blog.py b/ForgeBlog/forgeblog/model/blog.py
index 1c363c9..f5c6bfc 100644
--- a/ForgeBlog/forgeblog/model/blog.py
+++ b/ForgeBlog/forgeblog/model/blog.py
@@ -230,7 +230,7 @@ class BlogPost(M.VersionedArtifact, ActivityObject):
 
     def commit(self):
         activity = functools.partial(g.director.create_activity, c.user,
-                                     target=c.project, tags=['blog'])
+                                     related_nodes=[c.project], tags=['blog'])
         self.subscribe()
         super(BlogPost, self).commit()
         if self.version > 1:

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/36fd3c8e/ForgeWiki/forgewiki/wiki_main.py
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/wiki_main.py b/ForgeWiki/forgewiki/wiki_main.py
index 9231106..51d5f13 100644
--- a/ForgeWiki/forgewiki/wiki_main.py
+++ b/ForgeWiki/forgewiki/wiki_main.py
@@ -655,7 +655,7 @@ class PageController(BaseController, FeedController):
         g.spam_checker.check(text, artifact=self.page,
                              user=c.user, content_type='wiki')
         g.director.create_activity(c.user, activity_verb, self.page,
-                                   target=c.project, tags=['wiki'])
+                                   related_nodes=[c.project], tags=['wiki'])
         if new_viewable_by:
             if new_viewable_by == 'all':
                 self.page.viewable_by.append('all')


[02/10] git commit: [#6964] Bump to ActivityStream 0.1.8

Posted by tv...@apache.org.
[#6964] Bump to ActivityStream 0.1.8

Signed-off-by: Tim Van Steenburgh <tv...@gmail.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/d8260bcd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/d8260bcd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/d8260bcd

Branch: refs/heads/tv/7042
Commit: d8260bcd9cb8a2063a3fd7823ef6e87297bc1899
Parents: 81d6277
Author: Tim Van Steenburgh <tv...@gmail.com>
Authored: Wed Feb 5 21:20:02 2014 +0000
Committer: Tim Van Steenburgh <tv...@gmail.com>
Committed: Wed Feb 5 21:20:02 2014 +0000

----------------------------------------------------------------------
 requirements-common.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/d8260bcd/requirements-common.txt
----------------------------------------------------------------------
diff --git a/requirements-common.txt b/requirements-common.txt
index e200f77..659b67c 100644
--- a/requirements-common.txt
+++ b/requirements-common.txt
@@ -1,7 +1,7 @@
 # requirements for all deployment environments
 
 pytz==2012j
-ActivityStream==0.1.7
+ActivityStream==0.1.8
 BeautifulSoup==3.2.0
 chardet==1.0.1
 colander==0.9.3


[10/10] git commit: [#7042] Add tags to create_activity assertion

Posted by tv...@apache.org.
[#7042] Add tags to create_activity assertion

Signed-off-by: Tim Van Steenburgh <tv...@gmail.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/9ac39fee
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/9ac39fee
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/9ac39fee

Branch: refs/heads/tv/7042
Commit: 9ac39feec7ed0ecf5c3a0f06c31c25501100821b
Parents: 3154541
Author: Tim Van Steenburgh <tv...@gmail.com>
Authored: Thu Feb 6 02:38:43 2014 +0000
Committer: Tim Van Steenburgh <tv...@gmail.com>
Committed: Thu Feb 6 02:38:43 2014 +0000

----------------------------------------------------------------------
 ForgeImporters/forgeimporters/tests/test_base.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/9ac39fee/ForgeImporters/forgeimporters/tests/test_base.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/tests/test_base.py b/ForgeImporters/forgeimporters/tests/test_base.py
index d52f417..b2556a6 100644
--- a/ForgeImporters/forgeimporters/tests/test_base.py
+++ b/ForgeImporters/forgeimporters/tests/test_base.py
@@ -69,7 +69,7 @@ def test_import_tool(g, c, object_from_path, M, _datetime):
         {'$set': {'last_updated': _datetime.utcnow()}})
     g.director.create_activity.assert_called_once_with(
         c.user, "imported",
-        app.config, related_nodes=[c.project])
+        app.config, related_nodes=[c.project], tags=['import'])
     g.post_event.assert_called_once_with(
         'import_tool_task_succeeded',
         'source',


[09/10] git commit: [#7042] Fix test

Posted by tv...@apache.org.
[#7042] Fix test

Signed-off-by: Tim Van Steenburgh <tv...@gmail.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/31545413
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/31545413
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/31545413

Branch: refs/heads/tv/7042
Commit: 31545413bf11af7faa6846bd9813abab288b96e3
Parents: 36fd3c8
Author: Tim Van Steenburgh <tv...@gmail.com>
Authored: Thu Feb 6 02:38:12 2014 +0000
Committer: Tim Van Steenburgh <tv...@gmail.com>
Committed: Thu Feb 6 02:38:12 2014 +0000

----------------------------------------------------------------------
 Allura/allura/tests/functional/test_user_profile.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/31545413/Allura/allura/tests/functional/test_user_profile.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/functional/test_user_profile.py b/Allura/allura/tests/functional/test_user_profile.py
index 6f01e6a..0dbbe77 100644
--- a/Allura/allura/tests/functional/test_user_profile.py
+++ b/Allura/allura/tests/functional/test_user_profile.py
@@ -164,7 +164,8 @@ class TestUserProfile(TestController):
             return m
         eps = map(ep, ['a', 'b', 'c', 'd'])
         order = {'user_profile_sections.order': 'b, d,c , f '}
-        delattr(type(app), '_sections')
+        if hasattr(type(app), '_sections'):
+            delattr(type(app), '_sections')
         with mock.patch('allura.lib.helpers.iter_entry_points') as iep:
             with mock.patch.dict(tg.config, order):
                 iep.return_value = eps


[07/10] git commit: [#7042] Add activity tags

Posted by tv...@apache.org.
[#7042] Add activity tags

Signed-off-by: Tim Van Steenburgh <tv...@gmail.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/f295ca5c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/f295ca5c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/f295ca5c

Branch: refs/heads/tv/7042
Commit: f295ca5c810de64ae484b015c75d7ec9e8645460
Parents: 41b2c9c
Author: Tim Van Steenburgh <tv...@gmail.com>
Authored: Wed Feb 5 20:32:15 2014 +0000
Committer: Tim Van Steenburgh <tv...@gmail.com>
Committed: Thu Feb 6 02:29:30 2014 +0000

----------------------------------------------------------------------
 Allura/allura/controllers/discuss.py      | 3 ++-
 Allura/allura/model/discuss.py            | 3 ++-
 Allura/allura/model/repo_refresh.py       | 3 ++-
 Allura/allura/model/timeline.py           | 6 ++++--
 ForgeBlog/forgeblog/model/blog.py         | 2 +-
 ForgeImporters/forgeimporters/base.py     | 2 +-
 ForgeTracker/forgetracker/tracker_main.py | 4 ++--
 ForgeWiki/forgewiki/wiki_main.py          | 2 +-
 8 files changed, 15 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/f295ca5c/Allura/allura/controllers/discuss.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/discuss.py b/Allura/allura/controllers/discuss.py
index aefd472..cd4e8a1 100644
--- a/Allura/allura/controllers/discuss.py
+++ b/Allura/allura/controllers/discuss.py
@@ -303,7 +303,8 @@ class PostController(BaseController):
             self.post.commit()
             g.director.create_activity(c.user, 'modified', self.post,
                                        target=self.post.thread.artifact or self.post.thread,
-                                       related_nodes=[self.post.app_config.project])
+                                       related_nodes=[self.post.app_config.project],
+                                       tags=['comment'])
             redirect(request.referer)
         elif request.method == 'GET':
             if version is not None:

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/f295ca5c/Allura/allura/model/discuss.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/discuss.py b/Allura/allura/model/discuss.py
index 2741d03..c5762a9 100644
--- a/Allura/allura/model/discuss.py
+++ b/Allura/allura/model/discuss.py
@@ -685,7 +685,8 @@ class Post(Message, VersionedArtifact, ActivityObject):
             artifact.update_stats()
         if self.text and not self.is_meta:
             g.director.create_activity(author, 'posted', self, target=artifact,
-                                       related_nodes=[self.app_config.project])
+                                       related_nodes=[self.app_config.project],
+                                       tags=['comment'])
 
     def notify(self, file_info=None, check_dup=False):
         if self.project.notifications_disabled:

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/f295ca5c/Allura/allura/model/repo_refresh.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/repo_refresh.py b/Allura/allura/model/repo_refresh.py
index d364d2c..a2dc628 100644
--- a/Allura/allura/model/repo_refresh.py
+++ b/Allura/allura/model/repo_refresh.py
@@ -144,7 +144,8 @@ def refresh_repo(repo, all_commits=False, notify=True, new_clone=False):
             actor = user or TransientActor(
                     activity_name=new.committed.name or new.committed.emai)
             g.director.create_activity(actor, 'committed', new,
-                                       related_nodes=[repo.app_config.project])
+                                       related_nodes=[repo.app_config.project],
+                                       tags=['commit', repo.tool.lower()])
 
     log.info('Refresh complete for %s', repo.full_fs_path)
     g.post_event('repo_refreshed', len(commit_ids), all_commits, new_clone)

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/f295ca5c/Allura/allura/model/timeline.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/timeline.py b/Allura/allura/model/timeline.py
index 63cbd83..ed059a9 100644
--- a/Allura/allura/model/timeline.py
+++ b/Allura/allura/model/timeline.py
@@ -39,13 +39,15 @@ class Director(ActivityDirector):
     """
 
     def create_activity(self, actor, verb, obj, target=None,
-                        related_nodes=None):
+                        related_nodes=None, tags=None):
         if c.project and c.project.notifications_disabled:
             return
 
         from allura.model.project import Project
         super(Director, self).create_activity(actor, verb, obj,
-                                              target=target, related_nodes=related_nodes)
+                                              target=target,
+                                              related_nodes=related_nodes,
+                                              tags=tags)
         # aggregate actor and follower's timelines
         if actor.node_id:
             create_timelines.post(actor.node_id)

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/f295ca5c/ForgeBlog/forgeblog/model/blog.py
----------------------------------------------------------------------
diff --git a/ForgeBlog/forgeblog/model/blog.py b/ForgeBlog/forgeblog/model/blog.py
index f520265..1c363c9 100644
--- a/ForgeBlog/forgeblog/model/blog.py
+++ b/ForgeBlog/forgeblog/model/blog.py
@@ -230,7 +230,7 @@ class BlogPost(M.VersionedArtifact, ActivityObject):
 
     def commit(self):
         activity = functools.partial(g.director.create_activity, c.user,
-                                     target=c.project)
+                                     target=c.project, tags=['blog'])
         self.subscribe()
         super(BlogPost, self).commit()
         if self.version > 1:

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/f295ca5c/ForgeImporters/forgeimporters/base.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/base.py b/ForgeImporters/forgeimporters/base.py
index d03e838..996edb5 100644
--- a/ForgeImporters/forgeimporters/base.py
+++ b/ForgeImporters/forgeimporters/base.py
@@ -142,7 +142,7 @@ def import_tool(importer_path, project_name=None,
         if app:
             with h.notifications_disabled(c.project, disabled=False):
                 g.director.create_activity(c.user, "imported", app.config,
-                                           related_nodes=[c.project])
+                                           related_nodes=[c.project], tags=['import'])
             handler.success(app)
 
 

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/f295ca5c/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index 0ae0cad..f60df6d 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -856,7 +856,7 @@ class RootController(BaseController, FeedController):
         ticket.update(ticket_form)
         c.app.globals.invalidate_bin_counts()
         g.director.create_activity(c.user, 'created', ticket,
-                                   related_nodes=[c.project])
+                                   related_nodes=[c.project], tags=['ticket'])
         redirect(str(ticket.ticket_num) + '/')
 
     @with_trailing_slash
@@ -1435,7 +1435,7 @@ class TicketController(BaseController, FeedController):
         if comment:
             self.ticket.discussion_thread.post(text=comment)
         g.director.create_activity(c.user, 'modified', self.ticket,
-                                   related_nodes=[c.project])
+                                   related_nodes=[c.project], tags=['ticket'])
         c.app.globals.invalidate_bin_counts()
         redirect('.')
 

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/f295ca5c/ForgeWiki/forgewiki/wiki_main.py
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/wiki_main.py b/ForgeWiki/forgewiki/wiki_main.py
index 01a6008..9231106 100644
--- a/ForgeWiki/forgewiki/wiki_main.py
+++ b/ForgeWiki/forgewiki/wiki_main.py
@@ -655,7 +655,7 @@ class PageController(BaseController, FeedController):
         g.spam_checker.check(text, artifact=self.page,
                              user=c.user, content_type='wiki')
         g.director.create_activity(c.user, activity_verb, self.page,
-                                   target=c.project)
+                                   target=c.project, tags=['wiki'])
         if new_viewable_by:
             if new_viewable_by == 'all':
                 self.page.viewable_by.append('all')


[06/10] git commit: [#7111] Handle referenced entry-points that are not available

Posted by tv...@apache.org.
[#7111] Handle referenced entry-points that are not available

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/41b2c9c3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/41b2c9c3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/41b2c9c3

Branch: refs/heads/tv/7042
Commit: 41b2c9c3deac150efdf295704c1d8286d964f5b2
Parents: 9413f60
Author: Cory Johns <cj...@slashdotmedia.com>
Authored: Wed Feb 5 22:11:51 2014 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Wed Feb 5 22:11:51 2014 +0000

----------------------------------------------------------------------
 ForgeImporters/forgeimporters/base.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/41b2c9c3/ForgeImporters/forgeimporters/base.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/base.py b/ForgeImporters/forgeimporters/base.py
index 4353fd2..d03e838 100644
--- a/ForgeImporters/forgeimporters/base.py
+++ b/ForgeImporters/forgeimporters/base.py
@@ -387,7 +387,8 @@ class ToolImporterMeta(type):
         """
         if not getattr(cls, 'target_app', None):
             cls.target_app = [g.entry_points['tool'][ep_name]
-                    for ep_name in aslist(cls.target_app_ep_names)]
+                    for ep_name in aslist(cls.target_app_ep_names)
+                    if ep_name in g.entry_points['tool']]
         return type.__call__(cls, *args, **kw)
 
 


[03/10] git commit: [#7111] Reference importer targets by ep name

Posted by tv...@apache.org.
[#7111] Reference importer targets by ep name

Allows subclassed apps to be used as import targets without requiring
a new importer and controller subclass be created.

Signed-off-by: Tim Van Steenburgh <tv...@gmail.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/2707fc38
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/2707fc38
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/2707fc38

Branch: refs/heads/tv/7042
Commit: 2707fc383b38e45af2c749332e11997136e617da
Parents: d8260bc
Author: Tim Van Steenburgh <tv...@gmail.com>
Authored: Fri Jan 31 05:08:55 2014 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Wed Feb 5 21:24:07 2014 +0000

----------------------------------------------------------------------
 ForgeImporters/forgeimporters/base.py           | 73 ++++++++++++++++++--
 ForgeImporters/forgeimporters/forge/tracker.py  | 17 ++---
 ForgeImporters/forgeimporters/github/code.py    | 18 ++---
 ForgeImporters/forgeimporters/github/tracker.py | 19 ++---
 ForgeImporters/forgeimporters/github/wiki.py    | 25 ++-----
 ForgeImporters/forgeimporters/google/code.py    | 52 +++-----------
 .../forgeimporters/google/tests/test_code.py    |  2 +-
 ForgeImporters/forgeimporters/google/tracker.py | 17 ++---
 .../forgeimporters/tests/forge/test_tracker.py  |  4 +-
 .../forgeimporters/tests/google/test_tracker.py |  5 +-
 .../forgeimporters/tests/test_base.py           |  4 +-
 .../forgeimporters/trac/tests/test_tickets.py   |  4 +-
 ForgeImporters/forgeimporters/trac/tickets.py   | 17 ++---
 13 files changed, 113 insertions(+), 144 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2707fc38/ForgeImporters/forgeimporters/base.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/base.py b/ForgeImporters/forgeimporters/base.py
index 32f2ef3..d1fbd38 100644
--- a/ForgeImporters/forgeimporters/base.py
+++ b/ForgeImporters/forgeimporters/base.py
@@ -339,6 +339,58 @@ class ProjectImporter(BaseController):
         pass
 
 
+class ToolImportControllerMeta(type):
+    def __call__(cls, importer, *args, **kw):
+        """ Decorate the `create` post handler with a validator that references
+        the appropriate App for this controller's importer.
+
+        """
+        if hasattr(cls, 'create') and getattr(cls.create.decoration, 'validation', None) is None:
+            cls.create = validate(cls.import_form(aslist(importer.target_app)[0]),
+                    error_handler=cls.index.__func__)(cls.create)
+        return type.__call__(cls, importer, *args, **kw)
+
+
+class ToolImportController(BaseController):
+    """ Base class for ToolImporter controllers.
+
+    """
+    __metaclass__ = ToolImportControllerMeta
+
+    def __init__(self, importer):
+        """
+        :param importer: :class:`ToolImporter` instance to which this
+            controller belongs.
+
+        """
+        self.importer = importer
+
+    @property
+    def target_app(self):
+        return aslist(self.importer.target_app)[0]
+
+
+class ToolImporterMeta(type):
+    def __init__(cls, name, bases, attrs):
+        if not (hasattr(cls, 'target_app_ep_names')
+                or hasattr(cls, 'target_app')):
+            raise AttributeError("{0} must define either "
+                    "`target_app` or `target_app_ep_names`".format(name))
+        return type.__init__(cls, name, bases, attrs)
+
+    def __call__(cls, *args, **kw):
+        """ Right before the first instance of cls is created, get
+        the list of target_app classes from ep names. Can't do this
+        at cls create/init time b/c g.entry_points is not guaranteed
+        to be loaded at that point.
+
+        """
+        if not getattr(cls, 'target_app', None):
+            cls.target_app = [g.entry_points['tool'][ep_name]
+                    for ep_name in aslist(cls.target_app_ep_names)]
+        return type.__call__(cls, *args, **kw)
+
+
 class ToolImporter(object):
 
     """
@@ -347,10 +399,18 @@ class ToolImporter(object):
     Subclasses are required to implement :meth:`import_tool()` described
     below and define the following attributes:
 
+    .. py:attribute:: target_app_ep_names
+
+       A string or list of strings which are entry point names of the
+       tool(s) to which this class imports. E.g.::
+
+            target_app_ep_names = ['git', 'hg']
+
     .. py:attribute:: target_app
 
        A reference or list of references to the tool(s) that this imports
-       to.  E.g.::
+       to.  This attribute is not required if `target_app_ep_names` is
+       defined (which is preferable). E.g.::
 
             target_app = [forgegit.ForgeGitApp, forgehg.ForgeHgApp]
 
@@ -365,7 +425,10 @@ class ToolImporter(object):
     .. py:attribute:: controller
 
        The controller for this importer, to handle single tool imports.
+
     """
+    __metaclass__ = ToolImporterMeta
+
     target_app = None  # app or list of apps
     source = None  # string description of source, must match project importer
     controller = None
@@ -518,7 +581,7 @@ class ProjectToolsImportController(object):
         hidden = set(aslist(config.get('hidden_importers'), sep=','))
         visible = lambda ep: ep.name not in hidden
         for ep in filter(visible, h.iter_entry_points('allura.importers')):
-            importer = ep.load()
+            importer = ep.load()()
             for tool in aslist(importer.target_app):
                 tools_with_importers.add(tool.tool_label)
                 importer_matrix[importer.source][tool.tool_label] = ep.name
@@ -529,9 +592,9 @@ class ProjectToolsImportController(object):
 
     @expose()
     def _lookup(self, name, *remainder):
-        import_tool = ToolImporter.by_name(name)
-        if import_tool:
-            return import_tool.controller(), remainder
+        importer = ToolImporter.by_name(name)
+        if importer:
+            return importer.controller(importer), remainder
         else:
             raise exc.HTTPNotFound
 

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2707fc38/ForgeImporters/forgeimporters/forge/tracker.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/forge/tracker.py b/ForgeImporters/forgeimporters/forge/tracker.py
index 5407743..96c352f 100644
--- a/ForgeImporters/forgeimporters/forge/tracker.py
+++ b/ForgeImporters/forgeimporters/forge/tracker.py
@@ -27,25 +27,23 @@ from tg import (
     expose,
     flash,
     redirect,
-    validate,
 )
 from tg.decorators import (
     with_trailing_slash,
     without_trailing_slash,
 )
 
-from allura.controllers import BaseController
 from allura.lib import helpers as h
 from allura.lib.plugin import ImportIdConverter
 from allura.lib.decorators import require_post
 from allura.lib import validators as v
 from allura import model as M
 
-from forgetracker.tracker_main import ForgeTrackerApp
 from forgetracker import model as TM
 from forgeimporters.base import (
     ToolImporter,
     ToolImportForm,
+    ToolImportController,
     File,
     get_importer_upload_path,
     save_importer_upload,
@@ -56,14 +54,8 @@ class ForgeTrackerImportForm(ToolImportForm):
     tickets_json = v.JsonFile(not_empty=True)
 
 
-class ForgeTrackerImportController(BaseController):
-
-    def __init__(self):
-        self.importer = ForgeTrackerImporter()
-
-    @property
-    def target_app(self):
-        return self.importer.target_app
+class ForgeTrackerImportController(ToolImportController):
+    import_form = ForgeTrackerImportForm
 
     @with_trailing_slash
     @expose('jinja:forgeimporters.forge:templates/tracker/index.html')
@@ -74,7 +66,6 @@ class ForgeTrackerImportController(BaseController):
     @without_trailing_slash
     @expose()
     @require_post()
-    @validate(ForgeTrackerImportForm(ForgeTrackerApp), error_handler=index)
     def create(self, tickets_json, mount_point, mount_label, **kw):
         if self.importer.enforce_limit(c.project):
             save_importer_upload(
@@ -94,7 +85,7 @@ class ForgeTrackerImportController(BaseController):
 
 class ForgeTrackerImporter(ToolImporter):
     source = 'Allura'
-    target_app = ForgeTrackerApp
+    target_app_ep_names = 'tickets'
     controller = ForgeTrackerImportController
     tool_label = 'Tickets'
 

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2707fc38/ForgeImporters/forgeimporters/github/code.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/github/code.py b/ForgeImporters/forgeimporters/github/code.py
index 710e868..410b3bb 100644
--- a/ForgeImporters/forgeimporters/github/code.py
+++ b/ForgeImporters/forgeimporters/github/code.py
@@ -22,7 +22,6 @@ from tg import (
     expose,
     flash,
     redirect,
-    validate,
 )
 from tg.decorators import (
     with_trailing_slash,
@@ -30,14 +29,12 @@ from tg.decorators import (
 )
 
 from allura.lib.decorators import require_post
-from allura.controllers import BaseController
 from allura import model as M
 
-from forgegit.git_main import ForgeGitApp
-
 from forgeimporters.base import (
     ToolImporter,
     ToolImportForm,
+    ToolImportController,
 )
 from forgeimporters.github import (
     GitHubProjectExtractor,
@@ -51,14 +48,8 @@ class GitHubRepoImportForm(ToolImportForm):
     gh_project_name = GitHubProjectNameValidator()
 
 
-class GitHubRepoImportController(BaseController, GitHubOAuthMixin):
-
-    def __init__(self):
-        self.importer = GitHubRepoImporter()
-
-    @property
-    def target_app(self):
-        return self.importer.target_app
+class GitHubRepoImportController(ToolImportController, GitHubOAuthMixin):
+    import_form = GitHubRepoImportForm
 
     @with_trailing_slash
     @expose('jinja:forgeimporters.github:templates/code/index.html')
@@ -70,7 +61,6 @@ class GitHubRepoImportController(BaseController, GitHubOAuthMixin):
     @without_trailing_slash
     @expose()
     @require_post()
-    @validate(GitHubRepoImportForm(ForgeGitApp), error_handler=index)
     def create(self, gh_project_name, gh_user_name, mount_point, mount_label, **kw):
         if self.importer.enforce_limit(c.project):
             self.importer.post(
@@ -87,7 +77,7 @@ class GitHubRepoImportController(BaseController, GitHubOAuthMixin):
 
 
 class GitHubRepoImporter(ToolImporter):
-    target_app = ForgeGitApp
+    target_app_ep_names = 'git'
     source = 'GitHub'
     controller = GitHubRepoImportController
     tool_label = 'Source Code'

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2707fc38/ForgeImporters/forgeimporters/github/tracker.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/github/tracker.py b/ForgeImporters/forgeimporters/github/tracker.py
index 4295f2d..cbc017d 100644
--- a/ForgeImporters/forgeimporters/github/tracker.py
+++ b/ForgeImporters/forgeimporters/github/tracker.py
@@ -28,7 +28,6 @@ except ImportError:
 from formencode import validators as fev
 from tg import (
     expose,
-    validate,
     flash,
     redirect
 )
@@ -38,7 +37,6 @@ from tg.decorators import (
 )
 
 from allura import model as M
-from allura.controllers import BaseController
 from allura.lib import helpers as h
 from allura.lib.plugin import ImportIdConverter
 from allura.lib.decorators import require_post
@@ -46,11 +44,11 @@ from ming.orm import session, ThreadLocalORMSession
 from pylons import tmpl_context as c
 from pylons import app_globals as g
 
-from forgetracker.tracker_main import ForgeTrackerApp
 from forgetracker import model as TM
 from forgeimporters.base import (
-    ToolImportForm,
     ToolImporter,
+    ToolImportForm,
+    ToolImportController,
 )
 from forgeimporters.github import (
     GitHubProjectExtractor,
@@ -68,14 +66,8 @@ class GitHubTrackerImportForm(ToolImportForm):
     gh_user_name = fev.UnicodeString(not_empty=True)
 
 
-class GitHubTrackerImportController(BaseController, GitHubOAuthMixin):
-
-    def __init__(self):
-        self.importer = GitHubTrackerImporter()
-
-    @property
-    def target_app(self):
-        return self.importer.target_app
+class GitHubTrackerImportController(ToolImportController, GitHubOAuthMixin):
+    import_form = GitHubTrackerImportForm
 
     @with_trailing_slash
     @expose('jinja:forgeimporters.github:templates/tracker/index.html')
@@ -87,7 +79,6 @@ class GitHubTrackerImportController(BaseController, GitHubOAuthMixin):
     @without_trailing_slash
     @expose()
     @require_post()
-    @validate(GitHubTrackerImportForm(ForgeTrackerApp), error_handler=index)
     def create(self, gh_project_name, gh_user_name, mount_point, mount_label, **kw):
         if self.importer.enforce_limit(c.project):
             self.importer.post(
@@ -105,7 +96,7 @@ class GitHubTrackerImportController(BaseController, GitHubOAuthMixin):
 
 class GitHubTrackerImporter(ToolImporter):
     source = 'GitHub'
-    target_app = ForgeTrackerApp
+    target_app_ep_names = 'tickets'
     controller = GitHubTrackerImportController
     tool_label = 'Issues'
     max_ticket_num = 0

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2707fc38/ForgeImporters/forgeimporters/github/wiki.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/github/wiki.py b/ForgeImporters/forgeimporters/github/wiki.py
index 1891da7..f2ed923 100644
--- a/ForgeImporters/forgeimporters/github/wiki.py
+++ b/ForgeImporters/forgeimporters/github/wiki.py
@@ -31,7 +31,6 @@ from ming.orm import ThreadLocalORMSession
 from formencode import validators as fev
 from tg import (
     expose,
-    validate,
     flash,
     redirect,
 )
@@ -40,7 +39,6 @@ from tg.decorators import (
     without_trailing_slash,
 )
 
-from allura.controllers import BaseController
 from allura.lib import helpers as h
 from allura.lib import utils
 from allura.lib.plugin import ImportIdConverter
@@ -51,6 +49,7 @@ from allura import model as M
 from forgeimporters.base import (
     ToolImporter,
     ToolImportForm,
+    ToolImportController,
 )
 from forgeimporters.github import (
     GitHubProjectExtractor,
@@ -65,14 +64,6 @@ from forgewiki.converters import mediawiki2markdown
 import logging
 log = logging.getLogger(__name__)
 
-TARGET_APPS = []
-
-try:
-    from forgewiki.wiki_main import ForgeWikiApp
-    TARGET_APPS.append(ForgeWikiApp)
-except ImportError:
-    pass
-
 
 class GitHubWikiImportForm(ToolImportForm):
     gh_project_name = GitHubProjectNameValidator()
@@ -80,14 +71,8 @@ class GitHubWikiImportForm(ToolImportForm):
     tool_option = fev.UnicodeString(if_missing=u'')
 
 
-class GitHubWikiImportController(BaseController, GitHubOAuthMixin):
-
-    def __init__(self):
-        self.importer = GitHubWikiImporter()
-
-    @property
-    def target_app(self):
-        return aslist(self.importer.target_app)[0]
+class GitHubWikiImportController(ToolImportController, GitHubOAuthMixin):
+    import_form = GitHubWikiImportForm
 
     @with_trailing_slash
     @expose('jinja:forgeimporters.github:templates/wiki/index.html')
@@ -99,7 +84,6 @@ class GitHubWikiImportController(BaseController, GitHubOAuthMixin):
     @without_trailing_slash
     @expose()
     @require_post()
-    @validate(GitHubWikiImportForm(ForgeWikiApp), error_handler=index)
     def create(self, gh_project_name, gh_user_name, mount_point, mount_label, **kw):
         if self.importer.enforce_limit(c.project):
             self.importer.post(
@@ -117,7 +101,8 @@ class GitHubWikiImportController(BaseController, GitHubOAuthMixin):
 
 
 class GitHubWikiImporter(ToolImporter):
-    target_app = TARGET_APPS
+    target_app_ep_names = 'wiki'
+
     controller = GitHubWikiImportController
     source = 'GitHub'
     tool_label = 'Wiki'

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2707fc38/ForgeImporters/forgeimporters/google/code.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/google/code.py b/ForgeImporters/forgeimporters/google/code.py
index 8181c87..13d388d 100644
--- a/ForgeImporters/forgeimporters/google/code.py
+++ b/ForgeImporters/forgeimporters/google/code.py
@@ -26,70 +26,43 @@ from tg import (
     expose,
     flash,
     redirect,
-    validate,
 )
 from tg.decorators import (
     with_trailing_slash,
     without_trailing_slash,
 )
 
-from allura.controllers import BaseController
 from allura.lib import validators as v
 from allura.lib.decorators import require_post
 from allura import model as M
 
 from forgeimporters.base import (
     ToolImporter,
+    ToolImportController,
 )
 from forgeimporters.google import GoogleCodeProjectExtractor
 from forgeimporters.google import GoogleCodeProjectNameValidator
 
-REPO_APPS = {}
-TARGET_APPS = []
-try:
-    from forgehg.hg_main import ForgeHgApp
-    TARGET_APPS.append(ForgeHgApp)
-    REPO_APPS['hg'] = ForgeHgApp
-except ImportError:
-    pass
-try:
-    from forgegit.git_main import ForgeGitApp
-    TARGET_APPS.append(ForgeGitApp)
-    REPO_APPS['git'] = ForgeGitApp
-except ImportError:
-    pass
-try:
-    from forgesvn.svn_main import ForgeSVNApp
-    TARGET_APPS.append(ForgeSVNApp)
-    REPO_APPS['svn'] = ForgeSVNApp
-except ImportError:
-    pass
 
 REPO_URLS = {
     'svn': 'http://{0}.googlecode.com/svn/',
     'git': 'https://code.google.com/p/{0}/',
     'hg': 'https://code.google.com/p/{0}/',
 }
-REPO_ENTRY_POINTS = {
-    'svn': 'SVN',
-    'git': 'Git',
-    'hg': 'Hg',
-}
 
 
 def get_repo_url(project_name, type_):
     return REPO_URLS[type_].format(project_name)
 
 
-def get_repo_class(type_):
-    return REPO_APPS[type_]
-
-
 class GoogleRepoImportForm(fe.schema.Schema):
     gc_project_name = GoogleCodeProjectNameValidator()
     mount_point = fev.UnicodeString()
     mount_label = fev.UnicodeString()
 
+    def __init__(self, *args):
+        pass
+
     def _to_python(self, value, state):
         value = super(self.__class__, self)._to_python(value, state)
 
@@ -107,7 +80,7 @@ class GoogleRepoImportForm(fe.schema.Schema):
             raise fe.Invalid(msg, value, state)
         except Exception:
             raise
-        tool_class = REPO_APPS[repo_type]
+        tool_class = g.entry_points['tool'][repo_type]
         try:
             value['mount_point'] = v.MountPointValidator(
                 tool_class).to_python(mount_point)
@@ -116,14 +89,8 @@ class GoogleRepoImportForm(fe.schema.Schema):
         return value
 
 
-class GoogleRepoImportController(BaseController):
-
-    def __init__(self):
-        self.importer = GoogleRepoImporter()
-
-    @property
-    def target_app(self):
-        return self.importer.target_app[0]
+class GoogleRepoImportController(ToolImportController):
+    import_form = GoogleRepoImportForm
 
     @with_trailing_slash
     @expose('jinja:forgeimporters.google:templates/code/index.html')
@@ -134,7 +101,6 @@ class GoogleRepoImportController(BaseController):
     @without_trailing_slash
     @expose()
     @require_post()
-    @validate(GoogleRepoImportForm(), error_handler=index)
     def create(self, gc_project_name, mount_point, mount_label, **kw):
         if self.importer.enforce_limit(c.project):
             self.importer.post(
@@ -150,7 +116,7 @@ class GoogleRepoImportController(BaseController):
 
 
 class GoogleRepoImporter(ToolImporter):
-    target_app = TARGET_APPS
+    target_app_ep_names = ('git', 'hg', 'svn')
     source = 'Google Code'
     controller = GoogleRepoImportController
     tool_label = 'Source Code'
@@ -165,7 +131,7 @@ class GoogleRepoImporter(ToolImporter):
         repo_type = extractor.get_repo_type()
         repo_url = get_repo_url(project_name, repo_type)
         app = project.install_app(
-            REPO_ENTRY_POINTS[repo_type],
+            repo_type,
             mount_point=mount_point or 'code',
             mount_label=mount_label or 'Code',
             init_from_url=repo_url,

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2707fc38/ForgeImporters/forgeimporters/google/tests/test_code.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/google/tests/test_code.py b/ForgeImporters/forgeimporters/google/tests/test_code.py
index 00c5328..b52ec21 100644
--- a/ForgeImporters/forgeimporters/google/tests/test_code.py
+++ b/ForgeImporters/forgeimporters/google/tests/test_code.py
@@ -70,7 +70,7 @@ class TestGoogleRepoImporter(TestCase):
         app.url = 'foo'
         GoogleRepoImporter().import_tool(p, u, project_name='project_name')
         get_repo_url.assert_called_once_with('project_name', 'git')
-        p.install_app.assert_called_once_with('Git',
+        p.install_app.assert_called_once_with('git',
                                               mount_point='code',
                                               mount_label='Code',
                                               init_from_url='http://remote/clone/url/',

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2707fc38/ForgeImporters/forgeimporters/google/tracker.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/google/tracker.py b/ForgeImporters/forgeimporters/google/tracker.py
index b3abc10..7873aa6 100644
--- a/ForgeImporters/forgeimporters/google/tracker.py
+++ b/ForgeImporters/forgeimporters/google/tracker.py
@@ -26,26 +26,24 @@ from tg import (
     expose,
     flash,
     redirect,
-    validate,
 )
 from tg.decorators import (
     with_trailing_slash,
     without_trailing_slash,
 )
 
-from allura.controllers import BaseController
 from allura.lib import helpers as h
 from allura.lib.plugin import ImportIdConverter
 from allura.lib.decorators import require_post
 from allura import model as M
 
-from forgetracker.tracker_main import ForgeTrackerApp
 from forgetracker import model as TM
 from forgeimporters.google import GoogleCodeProjectExtractor
 from forgeimporters.google import GoogleCodeProjectNameValidator
 from forgeimporters.base import (
     ToolImporter,
     ToolImportForm,
+    ToolImportController,
 )
 
 
@@ -53,14 +51,8 @@ class GoogleCodeTrackerImportForm(ToolImportForm):
     gc_project_name = GoogleCodeProjectNameValidator()
 
 
-class GoogleCodeTrackerImportController(BaseController):
-
-    def __init__(self):
-        self.importer = GoogleCodeTrackerImporter()
-
-    @property
-    def target_app(self):
-        return self.importer.target_app
+class GoogleCodeTrackerImportController(ToolImportController):
+    import_form = GoogleCodeTrackerImportForm
 
     @with_trailing_slash
     @expose('jinja:forgeimporters.google:templates/tracker/index.html')
@@ -71,7 +63,6 @@ class GoogleCodeTrackerImportController(BaseController):
     @without_trailing_slash
     @expose()
     @require_post()
-    @validate(GoogleCodeTrackerImportForm(ForgeTrackerApp), error_handler=index)
     def create(self, gc_project_name, mount_point, mount_label, **kw):
         if self.importer.enforce_limit(c.project):
             self.importer.post(
@@ -89,7 +80,7 @@ class GoogleCodeTrackerImportController(BaseController):
 
 class GoogleCodeTrackerImporter(ToolImporter):
     source = 'Google Code'
-    target_app = ForgeTrackerApp
+    target_app_ep_names = 'tickets'
     controller = GoogleCodeTrackerImportController
     tool_label = 'Issues'
     tool_description = 'Import your public tickets from Google Code'

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2707fc38/ForgeImporters/forgeimporters/tests/forge/test_tracker.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/tests/forge/test_tracker.py b/ForgeImporters/forgeimporters/tests/forge/test_tracker.py
index 152e5bc..152f222 100644
--- a/ForgeImporters/forgeimporters/tests/forge/test_tracker.py
+++ b/ForgeImporters/forgeimporters/tests/forge/test_tracker.py
@@ -315,8 +315,8 @@ class TestForgeTrackerImportController(TestController, TestCase):
         """Mount Allura importer on the Tracker admin controller"""
         super(TestForgeTrackerImportController, self).setUp()
         from forgetracker.tracker_main import TrackerAdminController
-        TrackerAdminController._importer = tracker.ForgeTrackerImportController(
-        )
+        TrackerAdminController._importer = \
+                tracker.ForgeTrackerImportController(tracker.ForgeTrackerImporter())
 
     @with_tracker
     def test_index(self):

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2707fc38/ForgeImporters/forgeimporters/tests/google/test_tracker.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/tests/google/test_tracker.py b/ForgeImporters/forgeimporters/tests/google/test_tracker.py
index cfb8d97..e8f12bb 100644
--- a/ForgeImporters/forgeimporters/tests/google/test_tracker.py
+++ b/ForgeImporters/forgeimporters/tests/google/test_tracker.py
@@ -292,8 +292,9 @@ class TestGoogleCodeTrackerImportController(TestController, TestCase):
         """Mount Google Code importer on the Tracker admin controller"""
         super(TestGoogleCodeTrackerImportController, self).setUp()
         from forgetracker.tracker_main import TrackerAdminController
-        TrackerAdminController._importer = tracker.GoogleCodeTrackerImportController(
-        )
+        TrackerAdminController._importer = \
+                tracker.GoogleCodeTrackerImportController(
+                        tracker.GoogleCodeTrackerImporter())
 
     @with_tracker
     def test_index(self):

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2707fc38/ForgeImporters/forgeimporters/tests/test_base.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/tests/test_base.py b/ForgeImporters/forgeimporters/tests/test_base.py
index e93a6b1..d52f417 100644
--- a/ForgeImporters/forgeimporters/tests/test_base.py
+++ b/ForgeImporters/forgeimporters/tests/test_base.py
@@ -132,6 +132,7 @@ class TestProjectImporter(TestCase):
     @mock.patch.object(base, 'M')
     @mock.patch.object(base, 'c')
     def test_process(self, c, M, import_tool, flash, redirect, by_name):
+        base.ToolImporter.target_app_ep_names = []
         by_name.return_value = base.ToolImporter()
 
         pi = base.ProjectImporter(mock.Mock())
@@ -183,8 +184,7 @@ TA2 = mock.Mock(tool_label='qux', tool_description='qux_desc')
 TA3 = mock.Mock(tool_label='baz', tool_description='baz_desc')
 
 
-class TI1Controller(object):
-
+class TI1Controller(base.ToolImportController):
     @expose()
     def index(self, *a, **kw):
         return 'test importer 1 controller webpage'

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2707fc38/ForgeImporters/forgeimporters/trac/tests/test_tickets.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/trac/tests/test_tickets.py b/ForgeImporters/forgeimporters/trac/tests/test_tickets.py
index e9366f2..1ccfd98 100644
--- a/ForgeImporters/forgeimporters/trac/tests/test_tickets.py
+++ b/ForgeImporters/forgeimporters/trac/tests/test_tickets.py
@@ -111,8 +111,8 @@ class TestTracTicketImportController(TestController, TestCase):
         """Mount Trac import controller on the Tracker admin controller"""
         super(TestTracTicketImportController, self).setUp()
         from forgetracker.tracker_main import TrackerAdminController
-        self.importer = TrackerAdminController._importer = TracTicketImportController(
-        )
+        self.importer = TrackerAdminController._importer = \
+                TracTicketImportController(TracTicketImporter())
 
     @with_tracker
     def test_index(self):

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2707fc38/ForgeImporters/forgeimporters/trac/tickets.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/trac/tickets.py b/ForgeImporters/forgeimporters/trac/tickets.py
index c2c28c1..133a379 100644
--- a/ForgeImporters/forgeimporters/trac/tickets.py
+++ b/ForgeImporters/forgeimporters/trac/tickets.py
@@ -27,14 +27,12 @@ from tg import (
     expose,
     flash,
     redirect,
-    validate,
 )
 from tg.decorators import (
     with_trailing_slash,
     without_trailing_slash,
 )
 
-from allura.controllers import BaseController
 from allura.lib.decorators import require_post
 from allura.lib import validators as v
 from allura.lib import helpers as h
@@ -47,8 +45,8 @@ from allura.scripts.trac_export import (
 from forgeimporters.base import (
     ToolImporter,
     ToolImportForm,
+    ToolImportController,
 )
-from forgetracker.tracker_main import ForgeTrackerApp
 from forgetracker.import_support import ImportSupport
 from forgetracker import model as TM
 
@@ -58,14 +56,8 @@ class TracTicketImportForm(ToolImportForm):
     user_map = v.UserMapJsonFile(as_string=True)
 
 
-class TracTicketImportController(BaseController):
-
-    def __init__(self):
-        self.importer = TracTicketImporter()
-
-    @property
-    def target_app(self):
-        return self.importer.target_app
+class TracTicketImportController(ToolImportController):
+    import_form = TracTicketImportForm
 
     @with_trailing_slash
     @expose('jinja:forgeimporters.trac:templates/tickets/index.html')
@@ -76,7 +68,6 @@ class TracTicketImportController(BaseController):
     @without_trailing_slash
     @expose()
     @require_post()
-    @validate(TracTicketImportForm(ForgeTrackerApp), error_handler=index)
     def create(self, trac_url, mount_point, mount_label, user_map=None, **kw):
         if self.importer.enforce_limit(c.project):
             self.importer.post(
@@ -94,7 +85,7 @@ class TracTicketImportController(BaseController):
 
 
 class TracTicketImporter(ToolImporter):
-    target_app = ForgeTrackerApp
+    target_app_ep_names = 'tickets'
     source = 'Trac'
     controller = TracTicketImportController
     tool_label = 'Tickets'


[04/10] git commit: [#7111] Fixed failing test and added comment

Posted by tv...@apache.org.
[#7111] Fixed failing test and added comment

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/80ba5547
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/80ba5547
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/80ba5547

Branch: refs/heads/tv/7042
Commit: 80ba554700af5e1c7a3ba631e6572dd6ea5aaef4
Parents: 2707fc3
Author: Cory Johns <cj...@slashdotmedia.com>
Authored: Wed Feb 5 20:10:51 2014 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Wed Feb 5 21:24:08 2014 +0000

----------------------------------------------------------------------
 ForgeImporters/forgeimporters/base.py                   | 2 ++
 ForgeImporters/forgeimporters/github/tests/test_code.py | 2 ++
 2 files changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/80ba5547/ForgeImporters/forgeimporters/base.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/base.py b/ForgeImporters/forgeimporters/base.py
index d1fbd38..4353fd2 100644
--- a/ForgeImporters/forgeimporters/base.py
+++ b/ForgeImporters/forgeimporters/base.py
@@ -581,6 +581,8 @@ class ProjectToolsImportController(object):
         hidden = set(aslist(config.get('hidden_importers'), sep=','))
         visible = lambda ep: ep.name not in hidden
         for ep in filter(visible, h.iter_entry_points('allura.importers')):
+            # must instantiate to ensure importer.target_app is populated
+            # (see ToolImporterMeta.__call__)
             importer = ep.load()()
             for tool in aslist(importer.target_app):
                 tools_with_importers.add(tool.tool_label)

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/80ba5547/ForgeImporters/forgeimporters/github/tests/test_code.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/github/tests/test_code.py b/ForgeImporters/forgeimporters/github/tests/test_code.py
index bb8ed25..e247a5f 100644
--- a/ForgeImporters/forgeimporters/github/tests/test_code.py
+++ b/ForgeImporters/forgeimporters/github/tests/test_code.py
@@ -22,6 +22,7 @@ from ming.odm import ThreadLocalORMSession
 from allura.tests import TestController
 from allura.tests.decorators import with_tool
 from allura import model as M
+from alluratest.controller import setup_unit_test
 from forgeimporters.github.code import GitHubRepoImporter
 from forgeimporters.github import GitHubOAuthMixin
 
@@ -43,6 +44,7 @@ class TestGitHubRepoImporter(TestCase):
     @patch('forgeimporters.github.code.g')
     @patch('forgeimporters.github.code.GitHubProjectExtractor')
     def test_import_tool_happy_path(self, ghpe, g, M):
+        setup_unit_test()
         ghpe.return_value.get_repo_url.return_value = 'http://remote/clone/url/'
         p = self._make_project(gh_proj_name='myproject')
         u = Mock(name='c.user')