launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #13092
[Merge] lp:~wallyworld/launchpad/die-hg-die into lp:launchpad
Ian Booth has proposed merging lp:~wallyworld/launchpad/die-hg-die into lp:launchpad.
Commit message:
Remove support for Mercurial code imports; fix code import ui bug.
Requested reviews:
Launchpad code reviewers (launchpad-reviewers)
Related bugs:
Bug #1021276 in Launchpad itself: "Branch url field disabled when returning to Bazaar repository type on request code import page"
https://bugs.launchpad.net/launchpad/+bug/1021276
Bug #1063510 in Launchpad itself: "Remove support for Mecurial imports"
https://bugs.launchpad.net/launchpad/+bug/1063510
For more details, see:
https://code.launchpad.net/~wallyworld/launchpad/die-hg-die/+merge/128408
Mercurial imports are dead. Remove support for the functionality in Launchpad.
Take the earlier work by Jelmer and get rid of the bit rot.
When doing some smoke tests, I found and fixes an existing bug related to the code imports page ui.
--
https://code.launchpad.net/~wallyworld/launchpad/die-hg-die/+merge/128408
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~wallyworld/launchpad/die-hg-die into lp:launchpad.
=== modified file 'lib/lp/code/browser/branch.py'
--- lib/lp/code/browser/branch.py 2012-10-02 23:20:29 +0000
+++ lib/lp/code/browser/branch.py 2012-10-08 03:05:29 +0000
@@ -659,7 +659,7 @@
@property
def url_is_web(self):
"""True if an imported branch's URL is HTTP or HTTPS."""
- # You should only be calling this if it's an SVN, BZR, GIT or HG code
+ # You should only be calling this if it's an SVN, BZR or GIT code
# import
assert self.context.code_import
url = self.context.code_import.url
=== modified file 'lib/lp/code/browser/codeimport.py'
--- lib/lp/code/browser/codeimport.py 2012-10-02 23:20:29 +0000
+++ lib/lp/code/browser/codeimport.py 2012-10-08 03:05:29 +0000
@@ -244,18 +244,6 @@
allow_fragment=False,
trailing_slash=False)
- hg_repo_url = URIField(
- title=_("Repo URL"), required=False,
- description=_(
- "The URL of the Mercurial repository. The tip branch will be "
- "imported."),
- allowed_schemes=["http", "https"],
- allow_userinfo=True,
- allow_port=True,
- allow_query=False, # Query makes no sense in Bazaar.
- allow_fragment=False, # Fragment makes no sense in Bazaar.
- trailing_slash=False) # See http://launchpad.net/bugs/56357.
-
bzr_branch_url = URIField(
title=_("Branch URL"), required=False,
description=_("The URL of the Bazaar branch."),
@@ -342,20 +330,19 @@
# display them separately in the form.
soup = BeautifulSoup(self.widgets['rcs_type']())
fields = soup.findAll('input')
- [cvs_button, svn_button, git_button, hg_button, bzr_button,
+ [cvs_button, svn_button, git_button, bzr_button,
empty_marker] = [
field for field in fields
if field.get('value') in [
- 'CVS', 'BZR_SVN', 'GIT', 'HG', 'BZR', '1']]
+ 'CVS', 'BZR_SVN', 'GIT', 'BZR', '1']]
+ bzr_button['onclick'] = 'updateWidgets()'
cvs_button['onclick'] = 'updateWidgets()'
svn_button['onclick'] = 'updateWidgets()'
git_button['onclick'] = 'updateWidgets()'
- hg_button['onclick'] = 'updateWidgets()'
# The following attributes are used only in the page template.
self.rcs_type_cvs = str(cvs_button)
self.rcs_type_svn = str(svn_button)
self.rcs_type_git = str(git_button)
- self.rcs_type_hg = str(hg_button)
self.rcs_type_bzr = str(bzr_button)
self.rcs_type_emptymarker = str(empty_marker)
@@ -368,8 +355,6 @@
return None, None, data.get('svn_branch_url')
elif rcs_type == RevisionControlSystems.GIT:
return None, None, data.get('git_repo_url')
- elif rcs_type == RevisionControlSystems.HG:
- return None, None, data.get('hg_repo_url')
elif rcs_type == RevisionControlSystems.BZR:
return None, None, data.get('bzr_branch_url')
else:
@@ -461,9 +446,6 @@
elif rcs_type == RevisionControlSystems.GIT:
self._validateURL(
data.get('git_repo_url'), field_name='git_repo_url')
- elif rcs_type == RevisionControlSystems.HG:
- self._validateURL(
- data.get('hg_repo_url'), field_name='hg_repo_url')
elif rcs_type == RevisionControlSystems.BZR:
self._validateURL(
data.get('bzr_branch_url'), field_name='bzr_branch_url')
@@ -561,7 +543,6 @@
elif self.code_import.rcs_type in (RevisionControlSystems.SVN,
RevisionControlSystems.BZR_SVN,
RevisionControlSystems.GIT,
- RevisionControlSystems.HG,
RevisionControlSystems.BZR):
self.form_fields = self.form_fields.omit(
'cvs_root', 'cvs_module')
@@ -597,7 +578,6 @@
elif self.code_import.rcs_type in (RevisionControlSystems.SVN,
RevisionControlSystems.BZR_SVN,
RevisionControlSystems.GIT,
- RevisionControlSystems.HG,
RevisionControlSystems.BZR):
self._validateURL(data.get('url'), self.code_import)
else:
=== modified file 'lib/lp/code/doc/codeimport-event.txt'
--- lib/lp/code/doc/codeimport-event.txt 2011-12-24 17:49:30 +0000
+++ lib/lp/code/doc/codeimport-event.txt 2012-10-08 03:05:29 +0000
@@ -163,20 +163,6 @@
UPDATE_INTERVAL None
URL u'git://git.example.org/main.git'
-And for a Mercurial import, the hg details are recorded.
-
- >>> hg_import = factory.makeCodeImport(
- ... hg_repo_url='http://hg.example.org/main')
- >>> hg_create_event = event_set.newCreate(hg_import, nopriv)
- >>> print_items(hg_create_event)
- CODE_IMPORT <muted>
- OWNER ...
- REVIEW_STATUS u'REVIEWED'
- ASSIGNEE None
- UPDATE_INTERVAL None
- URL u'http://hg.example.org/main'
-
-
MODIFY
------
=== modified file 'lib/lp/code/doc/codeimport.txt'
--- lib/lp/code/doc/codeimport.txt 2011-12-29 05:29:36 +0000
+++ lib/lp/code/doc/codeimport.txt 2012-10-08 03:05:29 +0000
@@ -61,7 +61,6 @@
Subversion via CSCVS
Subversion via bzr-svn
Git
- Mercurial
Bazaar
@@ -203,34 +202,6 @@
>>> git_import == existing_import
True
-Import from Mercurial
-+++++++++++++++++++++
-
-Code imports from Mercurial specify the URL used with "hg clone" to
-retrieve the branch to import.
-
- >>> hg = RevisionControlSystems.HG
- >>> hg_url = 'http://hg.example.com/metallic'
- >>> hg_import = code_import_set.new(
- ... registrant=nopriv, target=target, branch_name='trunk-hg',
- ... rcs_type=hg, url=hg_url)
- >>> verifyObject(ICodeImport, removeSecurityProxy(hg_import))
- True
-
-Creating a CodeImport object creates a corresponding CodeImportEvent.
-
- >>> hg_events = event_set.getEventsForCodeImport(hg_import)
- >>> [event.event_type.name for event in hg_events]
- ['CREATE']
-
-The CodeImportSet is also able to retrieve the code imports with the
-specified hg repo url.
-
- >>> existing_import = code_import_set.getByURL(url=hg_url)
- >>> hg_import == existing_import
- True
-
-
Updating code import details
----------------------------
@@ -345,8 +316,6 @@
... seconds=config.codeimport.default_interval_subversion)
>>> default_interval_git = timedelta(
... seconds=config.codeimport.default_interval_git)
- >>> default_interval_hg = timedelta(
- ... seconds=config.codeimport.default_interval_hg)
By default, code imports are created with an unspecified update interval.
@@ -376,11 +345,6 @@
>>> git_import.effective_update_interval
datetime.timedelta(0, 21600)
- >>> default_interval_hg
- datetime.timedelta(0, 21600)
- >>> hg_import.effective_update_interval
- datetime.timedelta(0, 21600)
-
If the update interval is set, then it overrides the default value.
@@ -557,17 +521,6 @@
instead of:
svn://svn.example.com/for-bzr-svn/trunk
-And for Mercurial.
-
- >>> data = {'url': 'http://metal.example.com/byebye.hg'}
- >>> modify_event = hg_import.updateFromData(data, nopriv)
- >>> print make_email_body_for_code_import_update(
- ... hg_import, modify_event, None)
- ~import-person/widget/trunk-hg is now being imported from:
- http://metal.example.com/byebye.hg
- instead of:
- http://hg.example.com/metallic
-
In addition, updateFromData can be used to set the branch whiteboard,
which is also described in the email that is sent.
=== modified file 'lib/lp/code/enums.py'
--- lib/lp/code/enums.py 2011-09-13 10:07:59 +0000
+++ lib/lp/code/enums.py 2012-10-08 03:05:29 +0000
@@ -374,7 +374,7 @@
HG = DBItem(5, """
Mercurial
- Imports from Mercurial using bzr-hg.
+ Imports from Mercurial using bzr-hg. (no longer supported)
""")
BZR = DBItem(6, """
=== modified file 'lib/lp/code/mail/codeimport.py'
--- lib/lp/code/mail/codeimport.py 2012-01-01 02:58:52 +0000
+++ lib/lp/code/mail/codeimport.py 2012-10-08 03:05:29 +0000
@@ -50,7 +50,6 @@
RevisionControlSystems.SVN: 'subversion',
RevisionControlSystems.BZR_SVN: 'subversion',
RevisionControlSystems.GIT: 'git',
- RevisionControlSystems.HG: 'mercurial',
RevisionControlSystems.BZR: 'bazaar',
}
body = get_email_template('new-code-import.txt', app='code') % {
@@ -124,7 +123,6 @@
elif code_import.rcs_type in (RevisionControlSystems.SVN,
RevisionControlSystems.BZR_SVN,
RevisionControlSystems.GIT,
- RevisionControlSystems.HG,
RevisionControlSystems.BZR):
if CodeImportEventDataType.OLD_URL in event_data:
old_url = event_data[CodeImportEventDataType.OLD_URL]
=== modified file 'lib/lp/code/mail/tests/test_codeimport.py'
--- lib/lp/code/mail/tests/test_codeimport.py 2012-01-01 02:58:52 +0000
+++ lib/lp/code/mail/tests/test_codeimport.py 2012-10-08 03:05:29 +0000
@@ -90,29 +90,6 @@
'-- \nYou are getting this email because you are a member of the '
'vcs-imports team.\n', msg.get_payload(decode=True))
- def test_hg_import(self):
- # Test the email for a new hg import.
- eric = self.factory.makePerson(name='eric')
- fooix = self.factory.makeProduct(name='fooix')
- # Eric needs to be logged in for the mail to be sent.
- login_person(eric)
- code_import = self.factory.makeProductCodeImport(
- hg_repo_url='http://hg.example.com/fooix.hg',
- branch_name='master', product=fooix, registrant=eric)
- transaction.commit()
- msg = message_from_string(stub.test_emails[0][2])
- self.assertEqual('code-import', msg['X-Launchpad-Notification-Type'])
- self.assertEqual('~eric/fooix/master', msg['X-Launchpad-Branch'])
- self.assertEqual(
- 'A new mercurial code import has been requested '
- 'by Eric:\n'
- ' http://code.launchpad.dev/~eric/fooix/master\n'
- 'from\n'
- ' http://hg.example.com/fooix.hg\n'
- '\n'
- '-- \nYou are getting this email because you are a member of the '
- 'vcs-imports team.\n', msg.get_payload(decode=True))
-
def test_new_source_package_import(self):
# Test the email for a new sourcepackage import.
eric = self.factory.makePerson(name='eric')
@@ -124,7 +101,7 @@
# Eric needs to be logged in for the mail to be sent.
login_person(eric)
code_import = self.factory.makePackageCodeImport(
- hg_repo_url='http://hg.example.com/fooix.hg',
+ git_repo_url='http://hg.example.com/fooix.hg',
branch_name='master', sourcepackage=fooix, registrant=eric)
transaction.commit()
msg = message_from_string(stub.test_emails[0][2])
@@ -132,7 +109,7 @@
self.assertEqual(
'~eric/foobuntu/manic/fooix/master', msg['X-Launchpad-Branch'])
self.assertEqual(
- 'A new mercurial code import has been requested '
+ 'A new Git code import has been requested '
'by Eric:\n'
' http://code.launchpad.dev/~eric/foobuntu/manic/fooix/master\n'
'from\n'
=== modified file 'lib/lp/code/model/codeimport.py'
--- lib/lp/code/model/codeimport.py 2012-10-02 23:20:29 +0000
+++ lib/lp/code/model/codeimport.py 2012-10-08 03:05:29 +0000
@@ -112,8 +112,6 @@
config.codeimport.default_interval_subversion,
RevisionControlSystems.GIT:
config.codeimport.default_interval_git,
- RevisionControlSystems.HG:
- config.codeimport.default_interval_hg,
RevisionControlSystems.BZR:
config.codeimport.default_interval_bzr,
}
@@ -133,7 +131,6 @@
RevisionControlSystems.SVN,
RevisionControlSystems.GIT,
RevisionControlSystems.BZR_SVN,
- RevisionControlSystems.HG,
RevisionControlSystems.BZR):
return self.url
else:
@@ -247,7 +244,6 @@
elif rcs_type in (RevisionControlSystems.SVN,
RevisionControlSystems.BZR_SVN,
RevisionControlSystems.GIT,
- RevisionControlSystems.HG,
RevisionControlSystems.BZR):
assert cvs_root is None and cvs_module is None
assert url is not None
=== modified file 'lib/lp/code/model/codeimportevent.py'
--- lib/lp/code/model/codeimportevent.py 2011-12-30 06:14:56 +0000
+++ lib/lp/code/model/codeimportevent.py 2012-10-08 03:05:29 +0000
@@ -272,7 +272,6 @@
if code_import.rcs_type in (RevisionControlSystems.SVN,
RevisionControlSystems.BZR_SVN,
RevisionControlSystems.GIT,
- RevisionControlSystems.HG,
RevisionControlSystems.BZR):
yield 'URL', code_import.url
elif code_import.rcs_type == RevisionControlSystems.CVS:
=== modified file 'lib/lp/code/model/tests/test_codeimport.py'
--- lib/lp/code/model/tests/test_codeimport.py 2012-01-01 02:58:52 +0000
+++ lib/lp/code/model/tests/test_codeimport.py 2012-10-08 03:05:29 +0000
@@ -131,21 +131,6 @@
# A job is created for the import.
self.assertIsNot(None, code_import.import_job)
- def test_hg_import_reviewed(self):
- """A new hg import is always reviewed by default."""
- code_import = CodeImportSet().new(
- registrant=self.factory.makePerson(),
- target=IBranchTarget(self.factory.makeProduct()),
- branch_name='imported',
- rcs_type=RevisionControlSystems.HG,
- url=self.factory.getUniqueURL(),
- review_status=None)
- self.assertEqual(
- CodeImportReviewStatus.REVIEWED,
- code_import.review_status)
- # A job is created for the import.
- self.assertIsNot(None, code_import.import_job)
-
def test_bzr_import_reviewed(self):
"""A new bzr import is always reviewed by default."""
code_import = CodeImportSet().new(
@@ -168,7 +153,7 @@
registrant=registrant,
target=IBranchTarget(registrant),
branch_name='imported',
- rcs_type=RevisionControlSystems.HG,
+ rcs_type=RevisionControlSystems.GIT,
url=self.factory.getUniqueURL(),
review_status=None)
@@ -181,7 +166,7 @@
registrant=registrant,
target=target,
branch_name='imported',
- rcs_type=RevisionControlSystems.HG,
+ rcs_type=RevisionControlSystems.GIT,
url=self.factory.getUniqueURL(),
review_status=None)
code_import = removeSecurityProxy(code_import)
@@ -203,7 +188,7 @@
registrant=registrant,
target=target,
branch_name='imported',
- rcs_type=RevisionControlSystems.HG,
+ rcs_type=RevisionControlSystems.GIT,
url=self.factory.getUniqueURL(),
review_status=None, owner=owner)
code_import = removeSecurityProxy(code_import)
@@ -227,7 +212,7 @@
registrant=registrant,
target=target,
branch_name='imported',
- rcs_type=RevisionControlSystems.HG,
+ rcs_type=RevisionControlSystems.GIT,
url=self.factory.getUniqueURL(),
review_status=None, owner=owner)
=== modified file 'lib/lp/code/stories/branches/xx-product-branches.txt'
--- lib/lp/code/stories/branches/xx-product-branches.txt 2012-10-02 20:01:11 +0000
+++ lib/lp/code/stories/branches/xx-product-branches.txt 2012-10-08 03:05:29 +0000
@@ -49,7 +49,7 @@
by registering a Mirrored branch. Read more.
Launchpad can also act as a primary location for Bazaar branches of
Gnome Applets. Read more.
- Launchpad can import code from CVS, Subversion, Mercurial or Git
+ Launchpad can import code from CVS, Subversion or Git
into Bazaar branches. Read more...
The 'Help' links go to the help wiki.
=== modified file 'lib/lp/code/stories/codeimport/xx-admin-codeimport.txt'
--- lib/lp/code/stories/codeimport/xx-admin-codeimport.txt 2011-12-24 17:49:30 +0000
+++ lib/lp/code/stories/codeimport/xx-admin-codeimport.txt 2012-10-08 03:05:29 +0000
@@ -33,13 +33,8 @@
>>> git_import_location = str(canonical_url(git_import.branch))
>>> git_import_branch_unique_name = git_import.branch.unique_name
- >>> hg_import = factory.makeProductCodeImport(
- ... hg_repo_url="http://hg.example.org/bar")
- >>> hg_import_location = str(canonical_url(hg_import.branch))
- >>> hg_import_branch_unique_name = hg_import.branch.unique_name
-
>>> package_import = factory.makePackageCodeImport(
- ... hg_repo_url="http://hg.example.org/zap")
+ ... git_repo_url="http://git.example.org/zap")
>>> package_import_location = str(canonical_url(package_import.branch))
>>> package_import_branch_unique_name = package_import.branch.unique_name
@@ -110,15 +105,10 @@
>>> print_form_fields(import_browser)
field.url: git://git.example.org/fooix
- >>> import_browser.open(hg_import_location)
- >>> import_browser.getLink('Edit import source or review import').click()
- >>> print_form_fields(import_browser)
- field.url: http://hg.example.org/bar
-
>>> import_browser.open(package_import_location)
>>> import_browser.getLink('Edit import source or review import').click()
>>> print_form_fields(import_browser)
- field.url: http://hg.example.org/zap
+ field.url: http://git.example.org/zap
Editing the import location
@@ -170,16 +160,6 @@
... print extract_text(message)
The code import has been updated.
-Mercurial imports,
-
- >>> import_browser.open(hg_import_location + '/+edit-import')
- >>> import_browser.getControl('URL').value = \
- ... 'http://user:password@xxxxxxxxxxxxxxxxx/bar'
- >>> import_browser.getControl('Update').click()
- >>> for message in get_feedback_messages(import_browser.contents):
- ... print extract_text(message)
- The code import has been updated.
-
and imports targetting source packages.
>>> import_browser.open(package_import_location + '/+edit-import')
=== modified file 'lib/lp/code/stories/codeimport/xx-create-codeimport.txt'
--- lib/lp/code/stories/codeimport/xx-create-codeimport.txt 2011-10-03 15:35:14 +0000
+++ lib/lp/code/stories/codeimport/xx-create-codeimport.txt 2012-10-08 03:05:29 +0000
@@ -59,7 +59,6 @@
>>> print_radio_button_field(browser.contents, "rcs_type")
(*) Bazaar
( ) Git
- ( ) Mercurial
( ) Subversion
( ) CVS
@@ -175,29 +174,6 @@
The next import is scheduled to run as soon as possible.
-Requesting a Mercurial import
-=======================
-
-The user is required to enter a project that the import is for,
-a name for the import branch, and a mercurial branch location.
-
- >>> browser.open("http://code.launchpad.dev/+code-imports/+new")
- >>> browser.getControl('Project').value = "firefox"
- >>> browser.getControl('Branch Name').value = "hg-import"
- >>> browser.getControl('Mercurial').click()
- >>> browser.getControl('Repo URL', index=1).value = (
- ... "http://example.com/firefox.hg")
- >>> browser.getControl('Request Import').click()
-
-When the user clicks continue, the approved import branch is created
-
- >>> print extract_text(find_tag_by_id(browser.contents, "import-details"))
- Import Status: Reviewed
- This branch is an import of the tip branch of the Mercurial repository at
- http://example.com/firefox.hg.
- The next import is scheduled to run as soon as possible.
-
-
Requesting a CVS import
=======================
=== modified file 'lib/lp/code/stories/webservice/xx-code-import.txt'
--- lib/lp/code/stories/webservice/xx-code-import.txt 2012-10-02 20:22:55 +0000
+++ lib/lp/code/stories/webservice/xx-code-import.txt 2012-10-08 03:05:29 +0000
@@ -182,7 +182,7 @@
... + source_package.name)
>>> new_remote_url = factory.getUniqueURL()
>>> response = import_webservice.named_post(source_package_url,
- ... 'newCodeImport', branch_name='new-import', rcs_type='Mercurial',
+ ... 'newCodeImport', branch_name='new-import', rcs_type='Git',
... url=new_remote_url)
>>> print response.status
201
@@ -194,7 +194,7 @@
>>> print representation['branch_link']
http://.../~import-owner/scruffbuntu/manic/scruff/new-import
>>> print representation['rcs_type']
- Mercurial
+ Git
>>> print representation['url'] == new_remote_url
True
>>> print representation['cvs_root']
=== modified file 'lib/lp/code/templates/bazaar-index.pt'
--- lib/lp/code/templates/bazaar-index.pt 2012-09-12 06:13:41 +0000
+++ lib/lp/code/templates/bazaar-index.pt 2012-10-08 03:05:29 +0000
@@ -47,7 +47,7 @@
# the URL produced.
</tal:XXX>
<a href="/+recently-imported-branches">over 2000
- <abbr>CVS</abbr>, <abbr>SVN</abbr>, Git and Mercurial projects</a>,
+ <abbr>CVS</abbr>, <abbr>SVN</abbr> and Git projects</a>,
so you can use Bazaar with those too.
(<a href="https://help.launchpad.net/Code">Read our guide</a>)
</p>
=== modified file 'lib/lp/code/templates/branch-import-details.pt'
--- lib/lp/code/templates/branch-import-details.pt 2012-08-21 01:06:31 +0000
+++ lib/lp/code/templates/branch-import-details.pt 2012-10-08 03:05:29 +0000
@@ -50,18 +50,6 @@
</p>
</tal:git-import>
- <tal:hg-import condition="code_import/rcs_type/enumvalue:HG">
- <p>This branch is an import of the tip branch of the Mercurial repository at
- <tal:is-web-url condition="view/url_is_web">
- <a tal:attributes="href code_import/url"
- tal:content="code_import/url" />.
- </tal:is-web-url>
- <tal:not-web-url condition="not: view/url_is_web">
- <span tal:replace="code_import/url" />.
- </tal:not-web-url>
- </p>
- </tal:hg-import>
-
<tal:bzr-import condition="code_import/rcs_type/enumvalue:BZR">
<p>This branch is an import of the Bazaar branch at
<tal:is-web-url condition="view/url_is_web">
=== modified file 'lib/lp/code/templates/codeimport-new.pt'
--- lib/lp/code/templates/codeimport-new.pt 2012-03-29 17:37:33 +0000
+++ lib/lp/code/templates/codeimport-new.pt 2012-10-08 03:05:29 +0000
@@ -81,20 +81,6 @@
<tr>
<td>
<label>
- <input tal:replace="structure view/rcs_type_hg" />
- Mercurial
- </label>
- <table class="importdetails">
- <tal:widget define="widget nocall:view/widgets/hg_repo_url">
- <metal:block use-macro="context/@@launchpad_form/widget_row" />
- </tal:widget>
- </table>
- </td>
- </tr>
-
- <tr>
- <td>
- <label>
<input tal:replace="structure view/rcs_type_svn" />
Subversion
</label>
@@ -145,7 +131,6 @@
}
}
updateField(form['field.git_repo_url'], rcs_type === 'GIT');
- updateField(form['field.hg_repo_url'], rcs_type === 'HG');
updateField(form['field.cvs_root'], rcs_type === 'CVS');
updateField(form['field.cvs_module'], rcs_type === 'CVS');
updateField(form['field.svn_branch_url'], rcs_type === 'BZR_SVN');
=== modified file 'lib/lp/codehosting/codeimport/tests/servers.py'
--- lib/lp/codehosting/codeimport/tests/servers.py 2012-06-29 08:40:05 +0000
+++ lib/lp/codehosting/codeimport/tests/servers.py 2012-10-08 03:05:29 +0000
@@ -7,7 +7,6 @@
'BzrServer',
'CVSServer',
'GitServer',
- 'MercurialServer',
'SubversionServer',
]
@@ -45,12 +44,6 @@
DictBackend,
TCPGitServer,
)
-from mercurial.hgweb import (
- hgweb,
- server as hgweb_server,
- )
-from mercurial.localrepo import localrepository
-from mercurial.ui import ui as hg_ui
import subvertpy.ra
import subvertpy.repos
@@ -290,73 +283,6 @@
message=u'<The commit message>', tree=root_id)
-class MercurialServerThread(threading.Thread):
- """A thread which runs a Mercurial http server."""
-
- def __init__(self, path, address, port=0):
- super(MercurialServerThread, self).__init__()
- self.ui = hg_ui()
- self.ui.setconfig("web", "address", address)
- self.ui.setconfig("web", "port", port)
- self.app = hgweb(path, baseui=self.ui)
- self.httpd = hgweb_server.create_server(self.ui, self.app)
- # By default the Mercurial server output goes to stdout,
- # redirect it to prevent a lot of spurious output.
- self.httpd.errorlog = StringIO()
- self.httpd.accesslog = StringIO()
-
- def get_address(self):
- return (self.httpd.addr, self.httpd.port)
-
- def run(self):
- self.httpd.serve_forever()
-
- def stop(self):
- self.httpd.shutdown()
-
-
-class MercurialServer(Server):
-
- def __init__(self, repository_path, use_server=False):
- super(MercurialServer, self).__init__()
- self.repository_path = repository_path
- self._use_server = use_server
-
- def get_url(self):
- if self._use_server:
- return "http://%s:%d/" % self._hgserver.get_address()
- else:
- return local_path_to_url(self.repository_path)
-
- def start_server(self):
- super(MercurialServer, self).start_server()
- self.createRepository(self.repository_path)
- if self._use_server:
- self._hgserver = MercurialServerThread(self.repository_path,
- "localhost")
- self._hgserver.start()
-
- def stop_server(self):
- super(MercurialServer, self).stop_server()
- if self._use_server:
- self._hgserver.stop()
-
- def createRepository(self, path):
- localrepository(hg_ui(), self.repository_path, create=1)
-
- def makeRepo(self, tree_contents):
- repo = localrepository(hg_ui(), self.repository_path)
- for filename, contents in tree_contents:
- f = open(os.path.join(self.repository_path, filename), 'w')
- try:
- f.write(contents)
- finally:
- f.close()
- repo[None].add([filename])
- repo.commit(
- text='<The commit message>', user='jane Foo <joe@xxxxxxx>')
-
-
class BzrServer(Server):
def __init__(self, repository_path, use_server=False):
=== modified file 'lib/lp/codehosting/codeimport/tests/test_worker.py'
--- lib/lp/codehosting/codeimport/tests/test_worker.py 2012-09-18 19:41:02 +0000
+++ lib/lp/codehosting/codeimport/tests/test_worker.py 2012-10-08 03:05:29 +0000
@@ -62,7 +62,6 @@
BzrServer,
CVSServer,
GitServer,
- MercurialServer,
SubversionServer,
)
from lp.codehosting.codeimport.worker import (
@@ -76,7 +75,6 @@
ForeignTreeStore,
get_default_bazaar_branch_store,
GitImportWorker,
- HgImportWorker,
ImportDataStore,
ImportWorker,
)
@@ -1095,8 +1093,7 @@
self.pushConfig(
'codeimport',
git_revisions_import_limit=import_limit,
- svn_revisions_import_limit=import_limit,
- hg_revisions_import_limit=import_limit)
+ svn_revisions_import_limit=import_limit)
self.assertEqual(
CodeImportWorkerExitCode.SUCCESS_PARTIAL, worker.run())
self.assertEqual(
@@ -1209,87 +1206,6 @@
self.assertEquals(lastrev.message, "Message for other")
-class TestMercurialImport(WorkerTest, TestActualImportMixin,
- PullingImportWorkerTests):
-
- rcstype = 'hg'
-
- def setUp(self):
- super(TestMercurialImport, self).setUp()
- self.setUpImport()
-
- def tearDown(self):
- """Clear bzr-hg's cache of sqlite connections.
-
- This is rather obscure: different test runs tend to re-use the same
- paths on disk, which confuses bzr-hg as it keeps a cache that maps
- paths to database connections, which happily returns the connection
- that corresponds to a path that no longer exists.
- """
- from bzrlib.plugins.hg.idmap import mapdbs
- mapdbs().clear()
- WorkerTest.tearDown(self)
-
- def makeImportWorker(self, source_details, opener_policy):
- """Make a new `ImportWorker`."""
- return HgImportWorker(
- source_details, self.get_transport('import_data'),
- self.bazaar_store, logging.getLogger(),
- opener_policy=opener_policy)
-
- def makeForeignCommit(self, source_details, message=None, branch=None):
- """Change the foreign tree, generating exactly one commit."""
- from mercurial.ui import ui
- from mercurial.localrepo import localrepository
- repo = localrepository(ui(), local_path_from_url(source_details.url))
- extra = {}
- if branch is not None:
- extra = {"branch": branch}
- if message is None:
- message = self.factory.getUniqueString()
- repo.commit(
- text=message, user="Jane Random Hacker", force=1, extra=extra)
- self.foreign_commit_count += 1
-
- def makeSourceDetails(self, branch_name, files, stacked_on_url=None):
- """Make a Mercurial `CodeImportSourceDetails` pointing at a real repo.
- """
- repository_path = self.makeTemporaryDirectory()
- hg_server = MercurialServer(repository_path)
- hg_server.start_server()
- self.addCleanup(hg_server.stop_server)
-
- hg_server.makeRepo(files)
- self.foreign_commit_count = 1
-
- return self.factory.makeCodeImportSourceDetails(
- rcstype='hg', url=hg_server.get_url(),
- stacked_on_url=stacked_on_url)
-
- def test_non_default(self):
- # non-default branches can be specified in the import URL.
- source_details = self.makeSourceDetails(
- 'trunk', [('README', 'Original contents')])
- self.makeForeignCommit(source_details, branch="other",
- message="Message for other")
- self.makeForeignCommit(source_details, branch="default",
- message="Message for default")
- source_details.url = urlutils.join_segment_parameters(
- source_details.url, {"branch": "other"})
- source_transport = get_transport_from_url(source_details.url)
- self.assertEquals(
- {"branch": "other"},
- source_transport.get_segment_parameters())
- worker = self.makeImportWorker(source_details,
- opener_policy=AcceptAnythingPolicy())
- self.assertTrue(self.foreign_commit_count > 1)
- self.assertEqual(
- CodeImportWorkerExitCode.SUCCESS, worker.run())
- branch = worker.getBazaarBranch()
- lastrev = branch.repository.get_revision(branch.last_revision())
- self.assertEquals(lastrev.message, "Message for other")
-
-
class TestBzrSvnImport(WorkerTest, SubversionImportHelpers,
TestActualImportMixin, PullingImportWorkerTests):
@@ -1500,15 +1416,6 @@
str(code_import.branch.id), 'bzr', 'http://example.com/foo'],
arguments)
- def test_hg_arguments(self):
- code_import = self.factory.makeCodeImport(
- hg_repo_url="http://example.com/foo")
- arguments = CodeImportSourceDetails.fromCodeImport(
- code_import).asArguments()
- self.assertEquals([
- str(code_import.branch.id), 'hg', 'http://example.com/foo'],
- arguments)
-
def test_git_arguments(self):
code_import = self.factory.makeCodeImport(
git_repo_url="git://git.example.com/project.git")
=== modified file 'lib/lp/codehosting/codeimport/tests/test_workermonitor.py'
--- lib/lp/codehosting/codeimport/tests/test_workermonitor.py 2012-06-25 15:34:46 +0000
+++ lib/lp/codehosting/codeimport/tests/test_workermonitor.py 2012-10-08 03:05:29 +0000
@@ -46,7 +46,6 @@
BzrServer,
CVSServer,
GitServer,
- MercurialServer,
SubversionServer,
)
from lp.codehosting.codeimport.tests.test_worker import (
@@ -751,18 +750,6 @@
return self.factory.makeCodeImport(
git_repo_url=self.git_server.get_url())
- def makeHgCodeImport(self):
- """Make a `CodeImport` that points to a real Mercurial repository."""
- self.hg_server = MercurialServer(self.repo_path, use_server=False)
- self.hg_server.start_server()
- self.addCleanup(self.hg_server.stop_server)
-
- self.hg_server.makeRepo([('README', 'contents')])
- self.foreign_commit_count = 1
-
- return self.factory.makeCodeImport(
- hg_repo_url=self.hg_server.get_url())
-
def makeBzrCodeImport(self):
"""Make a `CodeImport` that points to a real Bazaar branch."""
self.bzr_server = BzrServer(self.repo_path)
@@ -874,17 +861,6 @@
result = self.performImport(job_id)
return result.addCallback(self.assertImported, code_import_id)
- # XXX 2011-09-09 gary, bug=841556: This test fails
- # occasionally in buildbot.
- def DISABLED_test_import_hg(self):
- # Create a Mercurial CodeImport and import it.
- job = self.getStartedJobForImport(self.makeHgCodeImport())
- code_import_id = job.code_import.id
- job_id = job.id
- self.layer.txn.commit()
- result = self.performImport(job_id)
- return result.addCallback(self.assertImported, code_import_id)
-
# XXX 2011-09-05 wgrant, bug=841556: This test fails
# occasionally in buildbot.
def DISABLED_test_import_bzr(self):
=== modified file 'lib/lp/codehosting/codeimport/worker.py'
--- lib/lp/codehosting/codeimport/worker.py 2012-06-29 08:40:05 +0000
+++ lib/lp/codehosting/codeimport/worker.py 2012-10-08 03:05:29 +0000
@@ -330,10 +330,6 @@
return cls(
branch.id, 'git', str(code_import.url),
stacked_on_url=stacked_on_url)
- elif code_import.rcs_type == RevisionControlSystems.HG:
- return cls(
- branch.id, 'hg', str(code_import.url),
- stacked_on_url=stacked_on_url)
elif code_import.rcs_type == RevisionControlSystems.BZR:
return cls(
branch.id, 'bzr', str(code_import.url),
@@ -850,79 +846,6 @@
return non_trivial
-class HgImportWorker(PullingImportWorker):
- """An import worker for Mercurial imports.
-
- The only behaviour we add is preserving the id-sha map between runs.
- """
-
- @property
- def invalid_branch_exceptions(self):
- return [
- NoRepositoryPresent,
- NotBranchError,
- ConnectionError,
- ]
-
- @property
- def unsupported_feature_exceptions(self):
- return [
- InvalidEntryName,
- ]
-
- @property
- def broken_remote_exceptions(self):
- return []
-
- @property
- def probers(self):
- """See `PullingImportWorker.probers`."""
- from bzrlib.plugins.hg import HgProber
- return [HgProber]
-
- def getRevisionLimit(self):
- """See `PullingImportWorker.getRevisionLimit`."""
- return config.codeimport.hg_revisions_import_limit
-
- def getBazaarBranch(self):
- """See `ImportWorker.getBazaarBranch`.
-
- In addition to the superclass' behaviour, we retrieve the bzr-hg's
- caches, both legacy and current and put them where bzr-hg will find
- them in the Bazaar tree, that is at '.bzr/repository/hg-v2.db' and
- '.bzr/repository/hg'.
- """
- branch = PullingImportWorker.getBazaarBranch(self)
- # Fetch the legacy cache from the store, if present.
- self.import_data_store.fetch(
- 'hg-v2.db', branch.repository._transport)
- # The cache dir from newer bzr-hgs is stored as a tarball.
- local_name = 'hg-cache.tar.gz'
- if self.import_data_store.fetch(local_name):
- repo_transport = branch.repository._transport
- repo_transport.mkdir('hg')
- hg_db_dir = os.path.join(
- local_path_from_url(repo_transport.base), 'hg')
- extract_tarball(local_name, hg_db_dir)
- return branch
-
- def pushBazaarBranch(self, bazaar_branch):
- """See `ImportWorker.pushBazaarBranch`.
-
- In addition to the superclass' behaviour, we store the hg cache
- that bzr-hg will have created at .bzr/repository/hg into
- the import data store.
- """
- non_trivial = PullingImportWorker.pushBazaarBranch(
- self, bazaar_branch)
- repo_base = bazaar_branch.repository._transport.base
- hg_db_dir = os.path.join(local_path_from_url(repo_base), 'hg')
- local_name = 'hg-cache.tar.gz'
- create_tarball(hg_db_dir, local_name)
- self.import_data_store.put(local_name)
- return non_trivial
-
-
class BzrSvnImportWorker(PullingImportWorker):
"""An import worker for importing Subversion via bzr-svn."""
=== modified file 'lib/lp/registry/browser/productseries.py'
--- lib/lp/registry/browser/productseries.py 2012-10-05 07:10:15 +0000
+++ lib/lp/registry/browser/productseries.py 2012-10-08 03:05:29 +0000
@@ -909,8 +909,6 @@
widget, vocab.BZR_SVN, current_value, 'SVN')
self.rcs_type_git = render_radio_widget_part(
widget, vocab.GIT, current_value)
- self.rcs_type_hg = render_radio_widget_part(
- widget, vocab.HG, current_value)
self.rcs_type_bzr = render_radio_widget_part(
widget, vocab.BZR, current_value)
self.rcs_type_emptymarker = widget._emptyMarker()
=== modified file 'lib/lp/registry/browser/tests/productseries-setbranch-view.txt'
--- lib/lp/registry/browser/tests/productseries-setbranch-view.txt 2012-10-05 07:29:54 +0000
+++ lib/lp/registry/browser/tests/productseries-setbranch-view.txt 2012-10-08 03:05:29 +0000
@@ -97,7 +97,7 @@
--------------------------------
Importing an externally hosted branch can either be a mirror, if a
-Bazaar branch, or an import, if a git, hg, cvs, or svn branch.
+Bazaar branch, or an import, if a git, cvs, or svn branch.
Lots of data are required to create an import.
@@ -245,28 +245,6 @@
>>> print series.branch.name
suburban-branch
-Mercurial branches must use http or https as the scheme.
-
- >>> series = factory.makeProductSeries(name="malibu", product=product)
- >>> transaction.commit()
- >>> form = {
- ... 'field.branch_type': 'import-external',
- ... 'field.rcs_type': 'HG',
- ... 'field.branch_name': 'malibu-branch',
- ... 'field.branch_owner': team.name,
- ... 'field.repo_url': 'https://mercurial.com/branch',
- ... 'field.actions.update': 'Update',
- ... }
- >>> view = create_initialized_view(
- ... series, name='+setbranch', principal=driver, form=form)
- >>> for error in view.errors:
- ... print error
- >>> for notification in view.request.response.notifications:
- ... print notification.message
- Code import created and branch linked to the series.
- >>> print series.branch.name
- malibu-branch
-
CVS branches must use http or https as the scheme and must have the
CVS module field specified.
=== modified file 'lib/lp/registry/stories/productseries/xx-productseries-link-branch.txt'
--- lib/lp/registry/stories/productseries/xx-productseries-link-branch.txt 2012-06-20 17:17:58 +0000
+++ lib/lp/registry/stories/productseries/xx-productseries-link-branch.txt 2012-10-08 03:05:29 +0000
@@ -16,7 +16,7 @@
>>> external_code = find_tag_by_id(sample_browser.contents, 'external-code')
>>> print extract_text(external_code)
- If the code is in Git, Mercurial, CVS or Subversion you can
+ If the code is in Git, CVS or Subversion you can
request that the branch be imported to Bazaar.
This link is only shown to those that have edit permissions on the
=== modified file 'lib/lp/registry/stories/productseries/xx-productseries-set-branch.txt'
--- lib/lp/registry/stories/productseries/xx-productseries-set-branch.txt 2012-03-08 19:35:12 +0000
+++ lib/lp/registry/stories/productseries/xx-productseries-set-branch.txt 2012-10-08 03:05:29 +0000
@@ -3,9 +3,9 @@
A product series should have a branch set for it. The branch can be
hosted on Launchpad or somewhere else. Foreign branches can be in
-Bazaar, Git, Mercurial, Subversion, or CVS. Though internally
-Launchpad treats those scenarios differently we provide a single page
-to the user to set up the branch.
+Bazaar, Git, Subversion, or CVS. Though internally Launchpad treats those
+scenarios differently we provide a single page to the user to set up the
+branch.
At present, the unified page for setting up the branch is not linked
from anywhere, so it must be navigated to directly.
@@ -49,7 +49,7 @@
-----------------------------
An external branch can be linked. The branch can be a Bazaar branch
-or be a Git, Mercurial, Subversion, or CVS branch.
+or be a Git, Subversion, or CVS branch.
Each of these types must provide the URL of the external repository,
the branch name to use in Launchpad, and the branch owner.
@@ -102,10 +102,10 @@
>>> browser.open('http://launchpad.dev/firefox/trunk/+setbranch')
>>> browser.getControl('Import a branch hosted somewhere else').click()
- >>> browser.getControl('Branch name').value = 'hg-firefox-branch'
- >>> browser.getControl('Mercurial').click()
+ >>> browser.getControl('Branch name').value = 'git-firefox-branch'
+ >>> browser.getControl('Git').click()
>>> browser.getControl('Branch URL').value = (
- ... 'http://hg.example.com/branch')
+ ... 'http://git.example.com/branch')
>>> browser.getControl('Branch owner').value = ['hwdb-team']
>>> browser.getControl('Update').click()
>>> for message in get_feedback_messages(browser.contents):
@@ -116,7 +116,7 @@
>>> login('test@xxxxxxxxxxxxx')
>>> firefox_trunk = firefox.getSeries('trunk')
>>> print firefox_trunk.branch.unique_name
- ~hwdb-team/firefox/hg-firefox-branch
+ ~hwdb-team/firefox/git-firefox-branch
>>> print firefox_trunk.branch.owner.name
hwdb-team
>>> logout()
=== modified file 'lib/lp/registry/templates/productseries-codesummary.pt'
--- lib/lp/registry/templates/productseries-codesummary.pt 2012-06-19 18:27:50 +0000
+++ lib/lp/registry/templates/productseries-codesummary.pt 2012-10-08 03:05:29 +0000
@@ -41,7 +41,7 @@
</li>
<li>
- If the code is in Git, Mercurial, CVS, Subversion or an external Bazaar branch you can
+ If the code is in Git, CVS, Subversion or an external Bazaar branch you can
<a tal:attributes="href view/request_import_link">request that the branch be imported to Bazaar</a>.
</li>
</ul>
=== modified file 'lib/lp/registry/templates/productseries-linkbranch.pt'
--- lib/lp/registry/templates/productseries-linkbranch.pt 2012-03-10 13:11:43 +0000
+++ lib/lp/registry/templates/productseries-linkbranch.pt 2012-10-08 03:05:29 +0000
@@ -30,7 +30,7 @@
</li>
<li id="external-code">
- If the code is in Git, Mercurial, CVS or Subversion you can
+ If the code is in Git, CVS or Subversion you can
<a tal:attributes="href view/request_import_link">request that the branch be imported to Bazaar</a>.
</li>
</ul>
=== modified file 'lib/lp/registry/templates/productseries-setbranch.pt'
--- lib/lp/registry/templates/productseries-setbranch.pt 2012-03-10 13:11:43 +0000
+++ lib/lp/registry/templates/productseries-setbranch.pt 2012-10-08 03:05:29 +0000
@@ -86,14 +86,6 @@
<tr>
<td>
- <label tal:replace="structure view/rcs_type_hg">
- Mercurial
- </label>
- </td>
- </tr>
-
- <tr>
- <td>
<label tal:replace="structure view/rcs_type_cvs">
CVS
</label>
=== modified file 'lib/lp/services/config/schema-lazr.conf'
--- lib/lp/services/config/schema-lazr.conf 2012-10-01 05:29:04 +0000
+++ lib/lp/services/config/schema-lazr.conf 2012-10-08 03:05:29 +0000
@@ -355,11 +355,6 @@
default_interval_git: 21600
# The default value of the update interval of a code import from
-# Mercurial, in seconds.
-# datatype: integer
-default_interval_hg: 21600
-
-# The default value of the update interval of a code import from
# CVS, in seconds.
# datatype: integer
default_interval_cvs: 43200
=== modified file 'lib/lp/testing/factory.py'
--- lib/lp/testing/factory.py 2012-10-04 17:37:33 +0000
+++ lib/lp/testing/factory.py 2012-10-08 03:05:29 +0000
@@ -2251,7 +2251,7 @@
def makeCodeImport(self, svn_branch_url=None, cvs_root=None,
cvs_module=None, target=None, branch_name=None,
- git_repo_url=None, hg_repo_url=None,
+ git_repo_url=None,
bzr_branch_url=None, registrant=None,
rcs_type=None, review_status=None):
"""Create and return a new, arbitrary code import.
@@ -2260,8 +2260,7 @@
passed in, but defaults to a Subversion import from an arbitrary
unique URL.
"""
- if (svn_branch_url is cvs_root is cvs_module is git_repo_url is
- hg_repo_url is bzr_branch_url is None):
+ if svn_branch_url is cvs_root is cvs_module is git_repo_url is None:
svn_branch_url = self.getUniqueURL()
if target is None:
@@ -2287,11 +2286,6 @@
registrant, target, branch_name,
rcs_type=RevisionControlSystems.GIT,
url=git_repo_url, review_status=review_status)
- elif hg_repo_url is not None:
- return code_import_set.new(
- registrant, target, branch_name,
- rcs_type=RevisionControlSystems.HG,
- url=hg_repo_url, review_status=review_status)
elif bzr_branch_url is not None:
return code_import_set.new(
registrant, target, branch_name,
=== modified file 'scripts/code-import-worker.py'
--- scripts/code-import-worker.py 2012-01-01 03:13:08 +0000
+++ scripts/code-import-worker.py 2012-10-08 03:05:29 +0000
@@ -31,7 +31,6 @@
CSCVSImportWorker,
get_default_bazaar_branch_store,
GitImportWorker,
- HgImportWorker,
)
from lp.codehosting.safe_open import AcceptAnythingPolicy
from lp.services import scripts
@@ -77,8 +76,6 @@
import_worker_cls = GitImportWorker
elif source_details.rcstype == 'bzr-svn':
import_worker_cls = BzrSvnImportWorker
- elif source_details.rcstype == 'hg':
- import_worker_cls = HgImportWorker
elif source_details.rcstype == 'bzr':
import_worker_cls = BzrImportWorker
elif source_details.rcstype in ['cvs', 'svn']:
=== modified file 'setup.py'
--- setup.py 2012-08-15 05:24:35 +0000
+++ setup.py 2012-10-08 03:05:29 +0000
@@ -61,7 +61,6 @@
'Markdown',
'mechanize',
'meliae',
- 'mercurial',
'mocker',
'oauth',
'oops',
=== modified file 'utilities/sourcedeps.conf'
--- utilities/sourcedeps.conf 2012-08-30 09:09:21 +0000
+++ utilities/sourcedeps.conf 2012-10-08 03:05:29 +0000
@@ -9,7 +9,6 @@
bzr-builder lp:~launchpad-pqm/bzr-builder/trunk;revno=70
bzr-git lp:~launchpad-pqm/bzr-git/devel;revno=276
-bzr-hg lp:~launchpad-pqm/bzr-hg/devel;revno=295
bzr-loom lp:~launchpad-pqm/bzr-loom/trunk;revno=55
bzr-svn lp:~launchpad-pqm/bzr-svn/devel;revno=2724
cscvs lp:~launchpad-pqm/launchpad-cscvs/devel;revno=432
=== modified file 'versions.cfg'
--- versions.cfg 2012-10-02 01:25:48 +0000
+++ versions.cfg 2012-10-08 03:05:29 +0000
@@ -60,7 +60,6 @@
martian = 0.11
mechanize = 0.1.11
meliae = 0.2.0.final.0
-mercurial = 1.6.2
mocker = 0.10.1
mozrunner = 1.3.4
oauth = 1.0
Follow ups