You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by je...@apache.org on 2015/02/24 12:48:10 UTC

[16/50] [abbrv] allura git commit: [#4542] ticket:723 Change repo-push hook payload

[#4542] ticket:723 Change repo-push hook payload


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

Branch: refs/heads/ib/7827
Commit: 13a8a607ac69ef602ed0ef9992af310a58f92051
Parents: 1b1dcfd
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Feb 10 13:55:28 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Mon Feb 16 10:17:39 2015 +0000

----------------------------------------------------------------------
 Allura/allura/model/repository.py               | 35 +++++++-
 Allura/allura/tests/test_webhooks.py            | 12 ++-
 Allura/allura/webhooks.py                       | 11 ++-
 .../forgegit/tests/model/test_repository.py     | 88 ++++++++++++++++----
 .../forgesvn/tests/model/test_repository.py     | 73 ++++++++++++----
 5 files changed, 174 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/13a8a607/Allura/allura/model/repository.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/repository.py b/Allura/allura/model/repository.py
index 5650d35..0030aa5 100644
--- a/Allura/allura/model/repository.py
+++ b/Allura/allura/model/repository.py
@@ -939,14 +939,22 @@ class Commit(RepoObject, ActivityObject):
         self.repo = repo
 
     @LazyProperty
+    def authored_user(self):
+        return User.by_email_address(self.authored.email)
+
+    @LazyProperty
+    def committed_user(self):
+        return User.by_email_address(self.committed.email)
+
+    @LazyProperty
     def author_url(self):
-        u = User.by_email_address(self.authored.email)
+        u = self.authored_user
         if u:
             return u.url()
 
     @LazyProperty
     def committer_url(self):
-        u = User.by_email_address(self.committed.email)
+        u = self.committed_user
         if u:
             return u.url()
 
@@ -1222,6 +1230,29 @@ class Commit(RepoObject, ActivityObject):
             summary=self.summary
         )
 
+    @LazyProperty
+    def webhook_info(self):
+        return {
+            'id': self._id,
+            'url': h.absurl(self.url()),
+            'timestamp': self.authored.date,
+            'message': self.summary,
+            'author': {
+                'name': self.authored.name,
+                'email': self.authored.email,
+                'username': self.authored_user.username if self.authored_user else u'',
+            },
+            'committer': {
+                'name': self.committed.name,
+                'email': self.committed.email,
+                'username': self.committed_user.username if self.committed_user else u'',
+            },
+            'added': self.diffs.added,
+            'removed': self.diffs.removed,
+            'modified': self.diffs.changed,
+            'copied': self.diffs.copied,
+        }
+
 
 class Tree(RepoObject):
     # Ephemeral attrs

http://git-wip-us.apache.org/repos/asf/allura/blob/13a8a607/Allura/allura/tests/test_webhooks.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/test_webhooks.py b/Allura/allura/tests/test_webhooks.py
index 1879beb..5362da7 100644
--- a/Allura/allura/tests/test_webhooks.py
+++ b/Allura/allura/tests/test_webhooks.py
@@ -541,14 +541,18 @@ class TestRepoPushWebhookSender(TestWebhookBase):
     def test_get_payload(self):
         sender = RepoPushWebhookSender()
         _ci = list(range(1, 4))
-        _se = [Mock(info=str(x)) for x in _ci]
+        _se = [Mock(webhook_info=str(x)) for x in _ci]
         with patch.object(self.git.repo, 'commit', autospec=True, side_effect=_se):
             with h.push_config(c, app=self.git):
                 result = sender.get_payload(commit_ids=_ci)
         expected_result = {
-            'url': 'http://localhost/adobe/adobe-1/src/',
-            'count': 3,
-            'revisions': ['1', '2', '3'],
+            'size': 3,
+            'commits': ['1', '2', '3'],
+            'repository': {
+                'full_name': u'/adobe/adobe-1/src/',
+                'name': u'Git',
+                'url': u'http://localhost/adobe/adobe-1/src/',
+            },
         }
         assert_equal(result, expected_result)
 

http://git-wip-us.apache.org/repos/asf/allura/blob/13a8a607/Allura/allura/webhooks.py
----------------------------------------------------------------------
diff --git a/Allura/allura/webhooks.py b/Allura/allura/webhooks.py
index 0f9b54d..17d7ebf 100644
--- a/Allura/allura/webhooks.py
+++ b/Allura/allura/webhooks.py
@@ -356,9 +356,14 @@ class RepoPushWebhookSender(WebhookSender):
 
     def get_payload(self, commit_ids, **kw):
         app = kw.get('app') or c.app
+        commits = [app.repo.commit(ci).webhook_info for ci in commit_ids]
         payload = {
-            'url': h.absurl(app.url),
-            'count': len(commit_ids),
-            'revisions': [app.repo.commit(ci).info for ci in commit_ids],
+            'size': len(commits),
+            'commits': commits,
+            'repository': {
+                'name': app.config.options.mount_label,
+                'full_name': app.url,
+                'url': h.absurl(app.url),
+            },
         }
         return payload

http://git-wip-us.apache.org/repos/asf/allura/blob/13a8a607/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 5e86ab0..b67a7ae 100644
--- a/ForgeGit/forgegit/tests/model/test_repository.py
+++ b/ForgeGit/forgegit/tests/model/test_repository.py
@@ -113,6 +113,20 @@ class TestNewGit(unittest.TestCase):
                 '/p/test/src-git/ci/'
                 '1e146e67985dcd71c74de79613719bef7bddca4a/')
 
+        assert_equal(self.rev.authored_user, None)
+        assert_equal(self.rev.committed_user, None)
+        user = M.User.upsert('rick')
+        email = user.claim_address('rcopeland@geek.net')
+        email.confirmed = True
+        session(email).flush(email)
+        rev = self.repo.commit(self.rev._id)  # to update cached values of LazyProperty
+        assert_equal(rev.authored_user, user)
+        assert_equal(rev.committed_user, user)
+        assert_equal(
+            sorted(rev.webhook_info.keys()),
+            sorted(['id', 'url', 'timestamp', 'message', 'author',
+                    'committer', 'added', 'removed', 'modified', 'copied']))
+
 
 class TestGitRepo(unittest.TestCase, RepoImplTestBase):
 
@@ -521,28 +535,66 @@ class TestGitRepo(unittest.TestCase, RepoImplTestBase):
                 'https://user@foo.com/')
 
     def test_webhook_payload(self):
+        user = M.User.upsert('cory')
+        email = user.claim_address('cjohns@slashdotmedia.com')
+        email.confirmed = True
+        session(email).flush(email)
+        user = M.User.upsert('rick')
+        email = user.claim_address('rcopeland@geek.net')
+        email.confirmed = True
+        session(email).flush(email)
+
         sender = RepoPushWebhookSender()
         cids = list(self.repo.all_commit_ids())[:2]
         payload = sender.get_payload(commit_ids=cids)
         expected_payload = {
-            'url': 'http://localhost/p/test/src-git/',
-            'count': 2,
-            'revisions': [
-                {'author': u'Cory Johns',
-                 'author_email': u'cjohns@slashdotmedia.com',
-                 'author_url': None,
-                 'date': datetime.datetime(2013, 3, 28, 18, 54, 16),
-                 'id': u'5c47243c8e424136fd5cdd18cd94d34c66d1955c',
-                 'shortlink': u'[5c4724]',
-                 'summary': u'Not repo root'},
-                {'author': u'Rick Copeland',
-                 'author_email': u'rcopeland@geek.net',
-                 'author_url': None,
-                 'date': datetime.datetime(2010, 10, 7, 18, 44, 11),
-                 'id': u'1e146e67985dcd71c74de79613719bef7bddca4a',
-                 'shortlink': u'[1e146e]',
-                 'summary': u'Change README'}]}
-        assert_equal(payload, expected_payload)
+            'size': 2,
+            'commits': [{
+                'id': u'5c47243c8e424136fd5cdd18cd94d34c66d1955c',
+                'url': u'http://localhost/p/test/src-git/ci/5c47243c8e424136fd5cdd18cd94d34c66d1955c/',
+                'timestamp': datetime.datetime(2013, 3, 28, 18, 54, 16),
+                'message': u'Not repo root',
+                'author': {'name': u'Cory Johns',
+                           'email': u'cjohns@slashdotmedia.com',
+                           'username': 'cory'},
+                'committer': {'name': u'Cory Johns',
+                              'email': u'cjohns@slashdotmedia.com',
+                              'username': 'cory'},
+                'added': [u'bad'],
+                'removed': [],
+                'modified': [],
+                'copied': []
+            }, {
+                'id': u'1e146e67985dcd71c74de79613719bef7bddca4a',
+                'url': u'http://localhost/p/test/src-git/ci/1e146e67985dcd71c74de79613719bef7bddca4a/',
+                'timestamp': datetime.datetime(2010, 10, 7, 18, 44, 11),
+                'message': u'Change README',
+                'author': {'name': u'Rick Copeland',
+                           'email': u'rcopeland@geek.net',
+                           'username': 'rick'},
+                'committer': {'name': u'Rick Copeland',
+                              'email': u'rcopeland@geek.net',
+                              'username': 'rick'},
+                'added': [],
+                'removed': [],
+                'modified': [u'README'],
+                'copied': []
+            }],
+            'repository': {
+                'name': u'Git',
+                'full_name': u'/p/test/src-git/',
+                'url': u'http://localhost/p/test/src-git/',
+            },
+        }
+
+        def _diff(one, two):
+            from difflib import Differ
+            from pprint import pformat
+            one, two = pformat(one), pformat(two)
+            diff = Differ().compare(one.splitlines(), two.splitlines())
+            print '\n'.join(diff)
+
+        assert payload == expected_payload, _diff(expected_payload, payload)
 
 
 class TestGitImplementation(unittest.TestCase):

http://git-wip-us.apache.org/repos/asf/allura/blob/13a8a607/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 5267614..030931a 100644
--- a/ForgeSVN/forgesvn/tests/model/test_repository.py
+++ b/ForgeSVN/forgesvn/tests/model/test_repository.py
@@ -1,3 +1,4 @@
+# coding: utf-8
 #       Licensed to the Apache Software Foundation (ASF) under one
 #       or more contributor license agreements.  See the NOTICE file
 #       distributed with this work for additional information
@@ -98,6 +99,13 @@ class TestNewRepo(unittest.TestCase):
         assert self.rev.tree['a']['b']['c'].ls() == []
         self.assertRaises(KeyError, lambda: self.rev.tree['a']['b']['d'])
 
+        assert_equal(self.rev.authored_user, None)
+        assert_equal(self.rev.committed_user, None)
+        assert_equal(
+            sorted(self.rev.webhook_info.keys()),
+            sorted(['id', 'url', 'timestamp', 'message', 'author',
+                    'committer', 'added', 'removed', 'modified', 'copied']))
+
 
 class TestSVNRepo(unittest.TestCase, RepoImplTestBase):
 
@@ -575,24 +583,53 @@ class TestSVNRepo(unittest.TestCase, RepoImplTestBase):
         cids = list(self.repo.all_commit_ids())[:2]
         payload = sender.get_payload(commit_ids=cids)
         expected_payload = {
-            'url': 'http://localhost/p/test/src/',
-            'count': 2,
-            'revisions': [
-                {'author': u'coldmind',
-                 'author_email': u'',
-                 'author_url': None,
-                 'date': datetime(2013, 11, 8, 13, 38, 11, 152000),
-                 'id': u'{}:6'.format(self.repo._id),
-                 'shortlink': '[r6]',
-                 'summary': ''},
-                {'author': u'rick446',
-                 'author_email': u'',
-                 'author_url': None,
-                 'date': datetime(2010, 11, 18, 20, 14, 21, 515000),
-                 'id': u'{}:5'.format(self.repo._id),
-                 'shortlink': '[r5]',
-                 'summary': u'Copied a => b'}]}
-        assert_equal(payload, expected_payload)
+            'size': 2,
+            'commits': [{
+                'id': u'{}:6'.format(self.repo._id),
+                'url': u'http://localhost/p/test/src/6/',
+                'timestamp': datetime(2013, 11, 8, 13, 38, 11, 152000),
+                'message': u'',
+                'author': {'name': u'coldmind',
+                           'email': u'',
+                           'username': u''},
+                'committer': {'name': u'coldmind',
+                              'email': u'',
+                              'username': u''},
+                'added': [u'/ЗРЯЧИЙ_ТА_ПОБАЧИТЬ'],
+                'removed': [],
+                'modified': [],
+                'copied': []
+            }, {
+                'id': u'{}:5'.format(self.repo._id),
+                'url': u'http://localhost/p/test/src/5/',
+                'timestamp': datetime(2010, 11, 18, 20, 14, 21, 515000),
+                'message': u'Copied a => b',
+                'author': {'name': u'rick446',
+                           'email': u'',
+                           'username': u''},
+                'committer': {'name': u'rick446',
+                              'email': u'',
+                              'username': u''},
+                'added': [u'/b'],
+                'removed': [],
+                'modified': [],
+                'copied': []
+            }],
+            'repository': {
+                'name': u'SVN',
+                'full_name': u'/p/test/src/',
+                'url': u'http://localhost/p/test/src/',
+            },
+        }
+
+        def _diff(one, two):
+            from difflib import Differ
+            from pprint import pformat
+            one, two = pformat(one), pformat(two)
+            diff = Differ().compare(one.splitlines(), two.splitlines())
+            print '\n'.join(diff)
+
+        assert payload == expected_payload, _diff(expected_payload, payload)
 
 
 class TestSVNRev(unittest.TestCase):