From f49084a6a95ecbed8137ee1320f62e6b9d66e315 Mon Sep 17 00:00:00 2001 From: Laurent Bachelier Date: Sun, 10 Mar 2013 23:45:25 +0100 Subject: [PATCH] redmine: Add support for the revision argument refs #1067 --- modules/redmine/backend.py | 5 +++-- modules/redmine/browser.py | 40 +++++++++++++++++++++----------------- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/modules/redmine/backend.py b/modules/redmine/backend.py index 5f0d8b65..75533c31 100644 --- a/modules/redmine/backend.py +++ b/modules/redmine/backend.py @@ -57,7 +57,7 @@ class RedmineBackend(BaseBackend, ICapContent, ICapBugTracker, ICapCollection): def id2path(self, id): return id.split('/', 2) - def get_content(self, id): + def get_content(self, id, revision=None): if isinstance(id, basestring): content = Content(id) else: @@ -69,8 +69,9 @@ class RedmineBackend(BaseBackend, ICapContent, ICapBugTracker, ICapCollection): except ValueError: return None + version = revision.id if revision else None with self.browser: - data = self.browser.get_wiki_source(project, page) + data = self.browser.get_wiki_source(project, page, version) content.content = data return content diff --git a/modules/redmine/browser.py b/modules/redmine/browser.py index e526b0b3..b93a34d3 100644 --- a/modules/redmine/browser.py +++ b/modules/redmine/browser.py @@ -36,21 +36,22 @@ __all__ = ['RedmineBrowser'] # Browser class RedmineBrowser(BaseBrowser): ENCODING = 'utf-8' - PAGES = {'https?://[^/]+/': IndexPage, - 'https?://[^/]+/login': LoginPage, - # compatibility with redmine 0.9 - 'https?://[^/]+/login\?back_url.*': MyPage, - 'https?://[^/]+/my/page': MyPage, - 'https?://[^/]+/projects': ProjectsPage, - 'https?://[^/]+/projects/([\w-]+)/wiki/([^\/]+)/edit': WikiEditPage, - 'https?://[^/]+/projects/[\w-]+/wiki/[^\/]*': WikiPage, - 'https?://[^/]+/projects/[\w-]+/issues/new': NewIssuePage, - 'https?://[^/]+/projects/[\w-]+/issues': IssuesPage, - 'https?://[^/]+/issues(|/?\?.*)': IssuesPage, - 'https?://[^/]+/issues/(\d+)': IssuePage, - 'https?://[^/]+/issues/(\d+)/time_entries/new': IssueLogTimePage, - 'https?://[^/]+/projects/[\w-]+/time_entries': IssueTimeEntriesPage, - } + PAGES = { + 'https?://[^/]+/': IndexPage, + 'https?://[^/]+/login': LoginPage, + # compatibility with redmine 0.9 + 'https?://[^/]+/login\?back_url.*': MyPage, + 'https?://[^/]+/my/page': MyPage, + 'https?://[^/]+/projects': ProjectsPage, + 'https?://[^/]+/projects/([\w-]+)/wiki/([^\/]+)/edit(?:\?version=\d+)?': WikiEditPage, + 'https?://[^/]+/projects/[\w-]+/wiki/[^\/]*': WikiPage, + 'https?://[^/]+/projects/[\w-]+/issues/new': NewIssuePage, + 'https?://[^/]+/projects/[\w-]+/issues': IssuesPage, + 'https?://[^/]+/issues(|/?\?.*)': IssuesPage, + 'https?://[^/]+/issues/(\d+)': IssuePage, + 'https?://[^/]+/issues/(\d+)/time_entries/new': IssueLogTimePage, + 'https?://[^/]+/projects/[\w-]+/time_entries': IssueTimeEntriesPage, + } def __init__(self, url, *args, **kwargs): self._userid = 0 @@ -86,8 +87,11 @@ class RedmineBrowser(BaseBrowser): def get_userid(self): return self._userid - def get_wiki_source(self, project, page): - self.location('%s/projects/%s/wiki/%s/edit' % (self.BASEPATH, project, urllib.quote(page.encode('utf-8')))) + def get_wiki_source(self, project, page, version=None): + url = '%s/projects/%s/wiki/%s/edit' % (self.BASEPATH, project, urllib.quote(page.encode('utf-8'))) + if version: + url += '?version=%s' % version + self.location(url) return self.page.get_source() def set_wiki_source(self, project, page, data, message): @@ -96,7 +100,7 @@ class RedmineBrowser(BaseBrowser): def get_wiki_preview(self, project, page, data): if (not self.is_on_page(WikiEditPage) or self.page.groups[0] != project - or self.page.groups[1] != page): + or self.page.groups[1] != page): self.location('%s/projects/%s/wiki/%s/edit' % (self.BASEPATH, project, urllib.quote(page.encode('utf-8')))) url = '%s/projects/%s/wiki/%s/preview' % (self.BASEPATH, project, urllib.quote(page.encode('utf-8')))