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 2013/07/31 15:18:56 UTC
[1/4] git commit: [#6441] ticket:398 fixed hyperlinks in tickets
imported from trac
Updated Branches:
refs/heads/master fff526fe7 -> 53e35eb9f
[#6441] ticket:398 fixed hyperlinks in tickets imported from trac
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/b3fea697
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/b3fea697
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/b3fea697
Branch: refs/heads/master
Commit: b3fea697bf281649e6dc8cd63a878f9cb45859f3
Parents: fff526f
Author: Yuriy Arhipov <yu...@yandex.ru>
Authored: Fri Jul 19 14:39:19 2013 +0400
Committer: Tim Van Steenburgh <tv...@gmail.com>
Committed: Wed Jul 31 12:21:13 2013 +0000
----------------------------------------------------------------------
ForgeTracker/forgetracker/import_support.py | 37 +++++++++++-
.../forgetracker/tests/functional/data/sf.json | 6 ++
.../tests/functional/test_import.py | 59 ++++++++++++++++++++
3 files changed, 101 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/b3fea697/ForgeTracker/forgetracker/import_support.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/import_support.py b/ForgeTracker/forgetracker/import_support.py
index a94e70c..268f727 100644
--- a/ForgeTracker/forgetracker/import_support.py
+++ b/ForgeTracker/forgetracker/import_support.py
@@ -18,6 +18,7 @@
#-*- python -*-
import logging
import json
+import re
from datetime import datetime
from cStringIO import StringIO
@@ -211,9 +212,43 @@ class ImportSupport(object):
ticket.update(remapped)
return ticket
+ def ticket_link(self, m):
+ return '(%s)' % m.groups()[0]
+
+ def get_slug_by_id(self, ticket, comment):
+ comment = int(comment)
+ ticket = TM.Ticket.query.get(app_config_id=c.app.config._id,
+ ticket_num=int(ticket))
+ if not ticket:
+ return ''
+ comments = ticket.discussion_thread.post_class().query.find(dict(
+ discussion_id=ticket.discussion_thread.discussion_id,
+ thread_id=ticket.discussion_thread._id,
+ status={'$in': ['ok', 'pending']})).sort('timestamp')
+
+ if comment <= comments.count():
+ return comments.all()[comment-1].slug
+
+ def comment_link(self, m):
+ ticket, comment = m.groups()
+ return '(%s#%s)' % (ticket, self.get_slug_by_id(ticket, comment))
+
+ def brackets_escaping(self, m):
+ return '[%s]' % m.groups()[0]
+
+ def link_processing(self, text):
+ comment_pattern = re.compile('\(\S*/(\d+)#comment:(\d+)\)')
+ ticket_pattern = re.compile('(?<=\])\(\S*ticket/(\d+)\)')
+ brackets_pattern = re.compile('\[\[(.*)\]\]')
+
+ text = comment_pattern.sub(self.comment_link, text.replace('\n', ''))
+ text = ticket_pattern.sub(self.ticket_link, text)
+ text = brackets_pattern.sub(self.brackets_escaping, text)
+ return text
+
def make_comment(self, thread, comment_dict):
ts = self.parse_date(comment_dict['date'])
- comment = thread.post(text=comment_dict['comment'], timestamp=ts)
+ comment = thread.post(text=self.link_processing(comment_dict['comment']), timestamp=ts)
comment.author_id = self.get_user_id(comment_dict['submitter'])
comment.import_id = c.api_token.api_key
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/b3fea697/ForgeTracker/forgetracker/tests/functional/data/sf.json
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/data/sf.json b/ForgeTracker/forgetracker/tests/functional/data/sf.json
index 58e322c..5a11379 100644
--- a/ForgeTracker/forgetracker/tests/functional/data/sf.json
+++ b/ForgeTracker/forgetracker/tests/functional/data/sf.json
@@ -41,6 +41,12 @@
"comment": " * **status** changed from _accepted_ to _closed_\n\n * **resolution** set to _fixed_\n\nHello,\n\nThis issue is should be resolved with the site redesign.\n\nRegards, Chris Tsai, SourceForge.net Support\n\n",
"date": "2009-07-20T15:44:32Z",
"submitter": "ctsai"
+ },
+ {
+ "class": "COMMENT",
+ "comment": "test link [[2496]](http://testlink.com) test ticket ([#201](http://sourceforge.net/apps/trac/sourceforge/ticket/201)) \n [test comment](http://sourceforge.net/apps/trac/sourceforge/ticket/204#comment:1)",
+ "date": "2009-07-21T15:44:32Z",
+ "submitter": "ctsai"
}
],
"date": "2009-04-13T08:49:13Z",
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/b3fea697/ForgeTracker/forgetracker/tests/functional/test_import.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/test_import.py b/ForgeTracker/forgetracker/tests/functional/test_import.py
index 06fde25..202c757 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_import.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_import.py
@@ -24,10 +24,13 @@ from nose.tools import assert_equal
import ming
from pylons import app_globals as g
+from pylons import tmpl_context as c
from allura import model as M
from alluratest.controller import TestRestApiBase
from allura.tests import decorators as td
+from forgetracker import model as TM
+from forgetracker.import_support import ImportSupport
class TestImportController(TestRestApiBase):
@@ -164,3 +167,59 @@ class TestImportController(TestRestApiBase):
assert ticket_json['summary'] in r
r = self.app.get('/p/test/bugs/')
assert ticket_json['summary'] in r
+
+ @td.with_tracker
+ def test_link_processing(self):
+ import_support = ImportSupport()
+ result = import_support.link_processing('''test link [[2496]](http://testlink.com)
+ test ticket ([#201](http://sourceforge.net/apps/trac/sourceforge/ticket/201))
+ [test comment](http://sourceforge.net/apps/trac/sourceforge/ticket/204#comment:1)''')
+
+ assert "test link [2496](http://testlink.com)" in result
+ assert '[test comment](204#)' in result
+ assert 'test link [2496](http://testlink.com)' in result
+ assert 'test ticket ([#201](201))' in result
+
+ @td.with_tracker
+ def test_links(self):
+ api_ticket = M.ApiTicket(user_id=self.user._id, capabilities={'import': ['Projects','test']},
+ expires=datetime.utcnow() + timedelta(days=1))
+ ming.orm.session(api_ticket).flush()
+ self.set_api_token(api_ticket)
+
+ doc_text = open(os.path.dirname(__file__) + '/data/sf.json').read()
+ self.api_post('/rest/p/test/bugs/perform_import',
+ doc=doc_text, options='{"user_map": {"hinojosa4": "test-admin", "ma_boehm": "test-user"}}')
+
+ r = self.app.get('/p/test/bugs/204/')
+ ticket = TM.Ticket.query.get(app_config_id=c.app.config._id,
+ ticket_num=204)
+ slug = ticket.discussion_thread.post_class().query.find(dict(
+ discussion_id=ticket.discussion_thread.discussion_id,
+ thread_id=ticket.discussion_thread._id,
+ status={'$in': ['ok', 'pending']})).sort('timestamp').all()[0].slug
+
+ assert '[test comment](204#%s)' % slug in r
+ assert 'test link [2496](http://testlink.com)' in r
+ assert 'test ticket ([#201](201))' in r
+
+ @td.with_tracker
+ def test_slug(self):
+ api_ticket = M.ApiTicket(user_id=self.user._id, capabilities={'import': ['Projects','test']},
+ expires=datetime.utcnow() + timedelta(days=1))
+ ming.orm.session(api_ticket).flush()
+ self.set_api_token(api_ticket)
+
+ doc_text = open(os.path.dirname(__file__) + '/data/sf.json').read()
+ self.api_post('/rest/p/test/bugs/perform_import',
+ doc=doc_text, options='{"user_map": {"hinojosa4": "test-admin", "ma_boehm": "test-user"}}')
+ ticket = TM.Ticket.query.get(app_config_id=c.app.config._id,
+ ticket_num=204)
+ comments = ticket.discussion_thread.post_class().query.find(dict(
+ discussion_id=ticket.discussion_thread.discussion_id,
+ thread_id=ticket.discussion_thread._id,
+ status={'$in': ['ok', 'pending']})).sort('timestamp').all()
+
+ import_support = ImportSupport()
+ assert_equal(import_support.get_slug_by_id('204', '1'), comments[0].slug)
+ assert_equal(import_support.get_slug_by_id('204', '2'), comments[1].slug)
[2/4] git commit: [#6441] ticket:398 refactored hyperlinks in tickets
imported from trac
Posted by tv...@apache.org.
[#6441] ticket:398 refactored hyperlinks in tickets imported from trac
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/70ee25a6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/70ee25a6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/70ee25a6
Branch: refs/heads/master
Commit: 70ee25a6fe029c6443d9aca632bcf9f1972a2fb0
Parents: b3fea69
Author: Yuriy Arhipov <yu...@yandex.ru>
Authored: Mon Jul 22 15:09:42 2013 +0400
Committer: Tim Van Steenburgh <tv...@gmail.com>
Committed: Wed Jul 31 12:21:14 2013 +0000
----------------------------------------------------------------------
ForgeTracker/forgetracker/import_support.py | 16 +++++++++++++---
.../forgetracker/tests/functional/data/sf.json | 4 ++--
.../forgetracker/tests/functional/test_import.py | 12 +++++++-----
3 files changed, 22 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/70ee25a6/ForgeTracker/forgetracker/import_support.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/import_support.py b/ForgeTracker/forgetracker/import_support.py
index 268f727..8735f40 100644
--- a/ForgeTracker/forgetracker/import_support.py
+++ b/ForgeTracker/forgetracker/import_support.py
@@ -193,6 +193,7 @@ class ImportSupport(object):
new_f, conv = transform
remapped[new_f] = conv(v)
+ remapped['description'] = self.link_processing(remapped['description'])
ticket_num = ticket_dict['id']
existing_ticket = TM.Ticket.query.get(app_config_id=c.app.config._id,
ticket_num=ticket_num)
@@ -215,6 +216,9 @@ class ImportSupport(object):
def ticket_link(self, m):
return '(%s)' % m.groups()[0]
+ def ticket_bracket_link(self, m):
+ return '[#%s]' % m.groups()[0]
+
def get_slug_by_id(self, ticket, comment):
comment = int(comment)
ticket = TM.Ticket.query.get(app_config_id=c.app.config._id,
@@ -231,17 +235,23 @@ class ImportSupport(object):
def comment_link(self, m):
ticket, comment = m.groups()
- return '(%s#%s)' % (ticket, self.get_slug_by_id(ticket, comment))
+ slug = self.get_slug_by_id(ticket, comment)
+ if slug:
+ return '(%s#%s)' % (ticket, self.get_slug_by_id(ticket, comment))
+ else:
+ return '\(%s#comment:%s\)' % (ticket, comment)
def brackets_escaping(self, m):
- return '[%s]' % m.groups()[0]
+ return '[\[%s\]]' % m.groups()[0]
def link_processing(self, text):
+ short_link_ticket_pattern = re.compile('(?<!\[)#(\d+)(?!\])')
comment_pattern = re.compile('\(\S*/(\d+)#comment:(\d+)\)')
ticket_pattern = re.compile('(?<=\])\(\S*ticket/(\d+)\)')
brackets_pattern = re.compile('\[\[(.*)\]\]')
- text = comment_pattern.sub(self.comment_link, text.replace('\n', ''))
+ text = short_link_ticket_pattern.sub(self.ticket_bracket_link, text)
+ text = comment_pattern.sub(self.comment_link, text)
text = ticket_pattern.sub(self.ticket_link, text)
text = brackets_pattern.sub(self.brackets_escaping, text)
return text
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/70ee25a6/ForgeTracker/forgetracker/tests/functional/data/sf.json
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/data/sf.json b/ForgeTracker/forgetracker/tests/functional/data/sf.json
index 5a11379..82d7b89 100644
--- a/ForgeTracker/forgetracker/tests/functional/data/sf.json
+++ b/ForgeTracker/forgetracker/tests/functional/data/sf.json
@@ -44,14 +44,14 @@
},
{
"class": "COMMENT",
- "comment": "test link [[2496]](http://testlink.com) test ticket ([#201](http://sourceforge.net/apps/trac/sourceforge/ticket/201)) \n [test comment](http://sourceforge.net/apps/trac/sourceforge/ticket/204#comment:1)",
+ "comment": "test link [[2496]](http://testlink.com) test ticket ([#201](http://sourceforge.net/apps/trac/sourceforge/ticket/201)) \n [test comment](http://sourceforge.net/apps/trac/sourceforge/ticket/204#comment:1) \n [test comment](http://sourceforge.net/apps/trac/sourceforge/ticket/204#comment:45)",
"date": "2009-07-21T15:44:32Z",
"submitter": "ctsai"
}
],
"date": "2009-04-13T08:49:13Z",
"date_updated": "2009-07-20T15:44:32Z",
- "description": "This problem occurs with IE 7, Windows Vista:\r\nOn the project's public info page (for example:\r\nhttps://sourceforge.net/project/admin/public_info.php?group_id=258655), the text boxes next to \"Descriptive Name\" and \"Project Description\" are not aligned properly; see the screenshot attached. ",
+ "description": "This problem occurs with IE 7, Windows Vista:\r\nOn the project's public info page (for example:\r\nhttps://sourceforge.net/project/admin/public_info.php?group_id=258655), the text boxes next to \"Descriptive Name\" and \"Project Description\" are not aligned properly; see the screenshot attached. ",
"id": 204,
"keywords": "ENGR",
"milestone": "test_milestone",
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/70ee25a6/ForgeTracker/forgetracker/tests/functional/test_import.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/test_import.py b/ForgeTracker/forgetracker/tests/functional/test_import.py
index 202c757..1fc7331 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_import.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_import.py
@@ -173,12 +173,14 @@ class TestImportController(TestRestApiBase):
import_support = ImportSupport()
result = import_support.link_processing('''test link [[2496]](http://testlink.com)
test ticket ([#201](http://sourceforge.net/apps/trac/sourceforge/ticket/201))
- [test comment](http://sourceforge.net/apps/trac/sourceforge/ticket/204#comment:1)''')
+ [test comment](http://sourceforge.net/apps/trac/sourceforge/ticket/204#comment:1)
+ #200''')
- assert "test link [2496](http://testlink.com)" in result
- assert '[test comment](204#)' in result
- assert 'test link [2496](http://testlink.com)' in result
+ assert "test link [\[2496\]](http://testlink.com)" in result
+ assert '[test comment]\(204#comment:1\)' in result
+ assert 'test link [\[2496\]](http://testlink.com)' in result
assert 'test ticket ([#201](201))' in result
+ assert '[#200]' in result
@td.with_tracker
def test_links(self):
@@ -200,7 +202,7 @@ class TestImportController(TestRestApiBase):
status={'$in': ['ok', 'pending']})).sort('timestamp').all()[0].slug
assert '[test comment](204#%s)' % slug in r
- assert 'test link [2496](http://testlink.com)' in r
+ assert 'test link [\[2496\]](http://testlink.com)' in r
assert 'test ticket ([#201](201))' in r
@td.with_tracker
[3/4] git commit: [#6441] ticket:398 fixed link with comments in
tickets imported from trac
Posted by tv...@apache.org.
[#6441] ticket:398 fixed link with comments in tickets imported from trac
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/7975c7c7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/7975c7c7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/7975c7c7
Branch: refs/heads/master
Commit: 7975c7c778e2ca346a3084513ee2fdb24ae253db
Parents: 70ee25a
Author: Yuriy Arhipov <yu...@yandex.ru>
Authored: Tue Jul 23 07:19:47 2013 +0400
Committer: Tim Van Steenburgh <tv...@gmail.com>
Committed: Wed Jul 31 12:21:14 2013 +0000
----------------------------------------------------------------------
ForgeTracker/forgetracker/import_support.py | 13 ++++++++-----
.../forgetracker/tests/functional/test_import.py | 4 ++--
2 files changed, 10 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/7975c7c7/ForgeTracker/forgetracker/import_support.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/import_support.py b/ForgeTracker/forgetracker/import_support.py
index 8735f40..26e182e 100644
--- a/ForgeTracker/forgetracker/import_support.py
+++ b/ForgeTracker/forgetracker/import_support.py
@@ -217,7 +217,8 @@ class ImportSupport(object):
return '(%s)' % m.groups()[0]
def ticket_bracket_link(self, m):
- return '[#%s]' % m.groups()[0]
+ text = m.groups()[0]
+ return '[\[%s\]](%s:#%s)' % (text, c.app.config.options.mount_point, text)
def get_slug_by_id(self, ticket, comment):
comment = int(comment)
@@ -234,19 +235,21 @@ class ImportSupport(object):
return comments.all()[comment-1].slug
def comment_link(self, m):
- ticket, comment = m.groups()
+ text, ticket, comment = m.groups()
+ ticket = ticket.replace('\n', '')
+ text = text.replace('\n', ' ')
slug = self.get_slug_by_id(ticket, comment)
if slug:
- return '(%s#%s)' % (ticket, self.get_slug_by_id(ticket, comment))
+ return '[%s](%s#%s)' % (text, ticket, slug)
else:
- return '\(%s#comment:%s\)' % (ticket, comment)
+ return text
def brackets_escaping(self, m):
return '[\[%s\]]' % m.groups()[0]
def link_processing(self, text):
short_link_ticket_pattern = re.compile('(?<!\[)#(\d+)(?!\])')
- comment_pattern = re.compile('\(\S*/(\d+)#comment:(\d+)\)')
+ comment_pattern = re.compile('\[(\S*\s*\S*)\]\(\S*/(\d+\n*\d*)#comment:(\d+)\)')
ticket_pattern = re.compile('(?<=\])\(\S*ticket/(\d+)\)')
brackets_pattern = re.compile('\[\[(.*)\]\]')
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/7975c7c7/ForgeTracker/forgetracker/tests/functional/test_import.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/test_import.py b/ForgeTracker/forgetracker/tests/functional/test_import.py
index 1fc7331..f876b93 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_import.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_import.py
@@ -177,10 +177,10 @@ class TestImportController(TestRestApiBase):
#200''')
assert "test link [\[2496\]](http://testlink.com)" in result
- assert '[test comment]\(204#comment:1\)' in result
+ assert 'test comment' in result
assert 'test link [\[2496\]](http://testlink.com)' in result
assert 'test ticket ([#201](201))' in result
- assert '[#200]' in result
+ assert '[\[200\]](bugs:#200)' in result, result
@td.with_tracker
def test_links(self):
[4/4] git commit: [#6441] ScriptTask doc parser chokes on %d
Posted by tv...@apache.org.
[#6441] ScriptTask doc parser chokes on %d
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/53e35eb9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/53e35eb9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/53e35eb9
Branch: refs/heads/master
Commit: 53e35eb9fcc2ac8b9bdc6541404c0392414966cb
Parents: 7975c7c
Author: Tim Van Steenburgh <tv...@gmail.com>
Authored: Wed Jul 31 13:17:36 2013 +0000
Committer: Tim Van Steenburgh <tv...@gmail.com>
Committed: Wed Jul 31 13:17:36 2013 +0000
----------------------------------------------------------------------
ForgeTracker/forgetracker/scripts/import_tracker.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/53e35eb9/ForgeTracker/forgetracker/scripts/import_tracker.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/scripts/import_tracker.py b/ForgeTracker/forgetracker/scripts/import_tracker.py
index a84bede..506e771 100644
--- a/ForgeTracker/forgetracker/scripts/import_tracker.py
+++ b/ForgeTracker/forgetracker/scripts/import_tracker.py
@@ -106,7 +106,7 @@ class ImportTracker(ScriptTask):
parser.add_argument('-s', '--secret-key', action='store', dest='secret_key', help='Secret key')
parser.add_argument('-p', '--project', action='store', dest='project', help='Project to import to')
parser.add_argument('-t', '--tracker', action='store', dest='tracker', help='Tracker to import to')
- parser.add_argument('-u', '--base-url', dest='base_url', default='https://sourceforge.net', help='Base Allura URL (%default)')
+ parser.add_argument('-u', '--base-url', dest='base_url', default='https://sourceforge.net', help='Base Allura URL (https://sourceforge.net)')
parser.add_argument('-o', dest='import_opts', default=[], action='store', help='Specify import option(s)', metavar='opt=val')
parser.add_argument('--user-map', dest='user_map_file', help='Map original users to SF.net users', metavar='JSON_FILE')
parser.add_argument('--file_data', dest='file_data', help='json file', metavar='JSON_FILE')