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 2013/08/21 18:06:13 UTC

[21/25] git commit: [#6464] Force ticket numbers to match when importing from GC

[#6464] Force ticket numbers to match when importing from GC

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

Branch: refs/heads/master
Commit: fa955f4c00f5e524be6c7588b67475c0960231ce
Parents: ef4918b
Author: Cory Johns <cj...@slashdotmedia.com>
Authored: Tue Aug 20 21:39:30 2013 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Tue Aug 20 21:39:30 2013 +0000

----------------------------------------------------------------------
 ForgeImporters/forgeimporters/base.py            |  1 +
 ForgeImporters/forgeimporters/google/__init__.py |  2 +-
 ForgeImporters/forgeimporters/google/tracker.py  | 19 +++++++++++++------
 .../tests/google/functional/test_tracker.py      |  7 ++++---
 .../forgeimporters/tests/google/test_tracker.py  | 17 +++++++++--------
 5 files changed, 28 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/fa955f4c/ForgeImporters/forgeimporters/base.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/base.py b/ForgeImporters/forgeimporters/base.py
index ee34ab3..49397a5 100644
--- a/ForgeImporters/forgeimporters/base.py
+++ b/ForgeImporters/forgeimporters/base.py
@@ -47,6 +47,7 @@ class ProjectImportForm(schema.Schema):
         provider = ProjectRegistrationProvider.get()
         self.add_field('tools', ToolsValidator(source))
         self.add_field('project_shortname', provider.shortname_validator)
+        self.allow_extra_fields = True
 
     neighborhood = fev.PlainText(not_empty=True)
     project_name = fev.UnicodeString(not_empty=True, max=40)

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/fa955f4c/ForgeImporters/forgeimporters/google/__init__.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/google/__init__.py b/ForgeImporters/forgeimporters/google/__init__.py
index 18a6209..902683a 100644
--- a/ForgeImporters/forgeimporters/google/__init__.py
+++ b/ForgeImporters/forgeimporters/google/__init__.py
@@ -177,7 +177,7 @@ class GoogleCodeProjectExtractor(ProjectExtractor):
             if len(issue_ids) <= 0:
                 return
             for issue_id in issue_ids:
-                yield cls(project_name, 'issue', issue_id=issue_id)
+                yield (int(issue_id), cls(project_name, 'issue', issue_id=issue_id))
             start += limit
 
     def get_issue_summary(self):

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/fa955f4c/ForgeImporters/forgeimporters/google/tracker.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/google/tracker.py b/ForgeImporters/forgeimporters/google/tracker.py
index fb2c845..e96678f 100644
--- a/ForgeImporters/forgeimporters/google/tracker.py
+++ b/ForgeImporters/forgeimporters/google/tracker.py
@@ -43,6 +43,12 @@ class GoogleCodeTrackerImporter(ToolImporter):
             type='select',
         )
 
+    def __init__(self, *args, **kwargs):
+        super(GoogleCodeTrackerImporter, self).__init__(*args, **kwargs)
+        self.open_milestones = set()
+        self.custom_fields = {}
+        self.max_ticket_num = 0
+
     def import_tool(self, project, user, project_name, mount_point=None,
             mount_label=None, **kw):
         app = project.install_app('tickets', mount_point, mount_label,
@@ -51,21 +57,22 @@ class GoogleCodeTrackerImporter(ToolImporter):
                 closed_status_names='Fixed Verified Invalid Duplicate WontFix Done',
             )
         ThreadLocalORMSession.flush_all()
-        self.open_milestones = set()
-        self.custom_fields = {}
         try:
             M.session.artifact_orm_session._get().skip_mod_date = True
             with h.push_config(c, user=M.User.anonymous(), app=app):
-                for issue in GoogleCodeProjectExtractor.iter_issues(project_name):
-                    ticket = TM.Ticket.new()
+                for ticket_num, issue in GoogleCodeProjectExtractor.iter_issues(project_name):
+                    self.max_ticket_num = max(ticket_num, self.max_ticket_num)
+                    ticket = TM.Ticket(
+                        app_config_id=app.config._id,
+                        custom_fields=dict(),
+                        ticket_num=ticket_num)
                     self.process_fields(ticket, issue)
                     self.process_labels(ticket, issue)
                     self.process_comments(ticket, issue)
                     session(ticket).flush(ticket)
                     session(ticket).expunge(ticket)
-                # app.globals gets expunged every time Ticket.new() is called :-(
-                app.globals = TM.Globals.query.get(app_config_id=app.config._id)
                 app.globals.custom_fields = self.postprocess_custom_fields()
+                app.globals.last_ticket_num = self.max_ticket_num
                 ThreadLocalORMSession.flush_all()
             g.post_event('project_updated')
             return app

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/fa955f4c/ForgeImporters/forgeimporters/tests/google/functional/test_tracker.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/tests/google/functional/test_tracker.py b/ForgeImporters/forgeimporters/tests/google/functional/test_tracker.py
index d2e423c..813a8b0 100644
--- a/ForgeImporters/forgeimporters/tests/google/functional/test_tracker.py
+++ b/ForgeImporters/forgeimporters/tests/google/functional/test_tracker.py
@@ -46,12 +46,12 @@ class TestGCTrackerImporter(TestCase):
         extractor.url = "http://test/issue/?id=1"
         return extractor
 
-    def _make_ticket(self, issue):
+    def _make_ticket(self, issue, issue_id=1):
         self.assertIsNone(self.project.app_instance('test-issue'))
         with mock.patch.object(base.h, 'urlopen') as urlopen,\
              mock.patch.object(google.tracker, 'GoogleCodeProjectExtractor') as GPE:
             urlopen.side_effect = lambda req, **kw: mock.Mock(read=req.get_full_url)
-            GPE.iter_issues.return_value = [issue]
+            GPE.iter_issues.return_value = [(issue_id, issue)]
             gti = google.tracker.GoogleCodeTrackerImporter()
             gti.import_tool(self.project, self.user, 'test-issue-project', mount_point='test-issue')
         c.app = self.project.app_instance('test-issue')
@@ -237,9 +237,10 @@ class TestGCTrackerImporter(TestCase):
                 self._assert_attachments(actual.attachments, *expected['attachments'])
 
     def test_globals(self):
-        globals = self._make_ticket(self.test_issue).globals
+        globals = self._make_ticket(self.test_issue, issue_id=6).globals
         self.assertEqual(globals.open_status_names, 'New Accepted Started')
         self.assertEqual(globals.closed_status_names, 'Fixed Verified Invalid Duplicate WontFix Done')
+        self.assertEqual(globals.last_ticket_num, 6)
         self.assertItemsEqual(globals.custom_fields, [
                 {
                     'label': 'Milestone',

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/fa955f4c/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 3d0774f..48ddc44 100644
--- a/ForgeImporters/forgeimporters/tests/google/test_tracker.py
+++ b/ForgeImporters/forgeimporters/tests/google/test_tracker.py
@@ -39,8 +39,8 @@ class TestTrackerImporter(TestCase):
         importer.postprocess_custom_fields = mock.Mock()
         project, user = mock.Mock(), mock.Mock()
         app = project.install_app.return_value
-        issues = gpe.iter_issues.return_value = [mock.Mock(), mock.Mock()]
-        tickets = TM.Ticket.new.side_effect = [mock.Mock(), mock.Mock()]
+        issues = gpe.iter_issues.return_value = [(50, mock.Mock()), (100, mock.Mock())]
+        tickets = TM.Ticket.side_effect = [mock.Mock(), mock.Mock()]
 
         importer.import_tool(project, user, project_name='project_name',
                 mount_point='mount_point', mount_label='mount_label')
@@ -52,16 +52,16 @@ class TestTrackerImporter(TestCase):
             )
         gpe.iter_issues.assert_called_once_with('project_name')
         self.assertEqual(importer.process_fields.call_args_list, [
-                mock.call(tickets[0], issues[0]),
-                mock.call(tickets[1], issues[1]),
+                mock.call(tickets[0], issues[0][1]),
+                mock.call(tickets[1], issues[1][1]),
             ])
         self.assertEqual(importer.process_labels.call_args_list, [
-                mock.call(tickets[0], issues[0]),
-                mock.call(tickets[1], issues[1]),
+                mock.call(tickets[0], issues[0][1]),
+                mock.call(tickets[1], issues[1][1]),
             ])
         self.assertEqual(importer.process_comments.call_args_list, [
-                mock.call(tickets[0], issues[0]),
-                mock.call(tickets[1], issues[1]),
+                mock.call(tickets[0], issues[0][1]),
+                mock.call(tickets[1], issues[1][1]),
             ])
         self.assertEqual(tlos.flush_all.call_args_list, [
                 mock.call(),
@@ -75,6 +75,7 @@ class TestTrackerImporter(TestCase):
                 mock.call(tickets[0]),
                 mock.call(tickets[1]),
             ])
+        self.assertEqual(app.globals.last_ticket_num, 100)
         g.post_event.assert_called_once_with('project_updated')
 
     def test_custom_fields(self):