Merge lp:~stevenk/launchpad/double-word-death into lp:launchpad

Proposed by Steve Kowalik
Status: Merged
Approved by: Curtis Hovey
Approved revision: no longer in the source branch.
Merged at revision: 14852
Proposed branch: lp:~stevenk/launchpad/double-word-death
Merge into: lp:launchpad
Diff against target: 926 lines (+89/-89)
53 files modified
lib/lp/answers/browser/question.py (+2/-2)
lib/lp/answers/errors.py (+3/-3)
lib/lp/answers/stories/question-search-multiple-languages.txt (+1/-1)
lib/lp/answers/stories/question-workflow.txt (+1/-1)
lib/lp/app/longpoll/__init__.py (+2/-2)
lib/lp/app/widgets/launchpadtarget.py (+3/-3)
lib/lp/app/widgets/tests/test_launchpadtarget.py (+2/-2)
lib/lp/archivepublisher/tests/test_customupload.py (+2/-2)
lib/lp/archiveuploader/nascentuploadfile.py (+2/-2)
lib/lp/blueprints/tests/test_specification.py (+2/-2)
lib/lp/bugs/browser/bugtarget.py (+2/-2)
lib/lp/bugs/browser/tests/bug-views.txt (+1/-1)
lib/lp/bugs/browser/tests/bugtask-edit-views.txt (+2/-2)
lib/lp/bugs/doc/bug-watch-activity.txt (+1/-1)
lib/lp/bugs/doc/distribution-upstream-bug-report.txt (+1/-1)
lib/lp/bugs/doc/filebug-data-parser.txt (+1/-1)
lib/lp/bugs/javascript/bug_subscription_portlet.js (+3/-3)
lib/lp/bugs/model/bugwatch.py (+2/-2)
lib/lp/bugs/stories/webservice/xx-bug-tracker.txt (+2/-2)
lib/lp/bugs/templates/bug-mute.pt (+1/-1)
lib/lp/bugs/tests/test_apportjob.py (+2/-2)
lib/lp/code/browser/tests/test_sourcepackagerecipe.py (+1/-1)
lib/lp/code/errors.py (+1/-1)
lib/lp/code/model/tests/test_branch_privacy_triggers.py (+2/-2)
lib/lp/code/stories/branches/xx-subscribing-branches.txt (+1/-1)
lib/lp/code/windmill/tests/test_recipe_inline_distroseries_edit.py (+2/-2)
lib/lp/code/windmill/tests/test_recipe_request_build.py (+2/-2)
lib/lp/code/xmlrpc/tests/test_codehosting.py (+2/-2)
lib/lp/codehosting/scanner/tests/test_bzrsync.py (+2/-2)
lib/lp/registry/browser/mailinglists.py (+2/-2)
lib/lp/registry/browser/milestone.py (+2/-2)
lib/lp/registry/browser/person.py (+1/-1)
lib/lp/registry/browser/tests/browser-views.txt (+1/-1)
lib/lp/registry/browser/tests/productrelease-views.txt (+1/-1)
lib/lp/registry/browser/tests/test_person.py (+2/-2)
lib/lp/registry/browser/tests/test_team.py (+2/-2)
lib/lp/registry/doc/distroseries.txt (+1/-1)
lib/lp/registry/javascript/milestonetable.js (+2/-2)
lib/lp/registry/javascript/tests/test_distroseriesdifferences_details.js (+2/-2)
lib/lp/registry/model/person.py (+1/-1)
lib/lp/registry/model/teammembership.py (+2/-2)
lib/lp/registry/stories/milestone/object-milestones.txt (+1/-1)
lib/lp/registry/tests/test_commercialprojects_vocabularies.py (+2/-2)
lib/lp/registry/tests/test_team.py (+2/-2)
lib/lp/services/database/sqlbase.py (+2/-2)
lib/lp/services/doc/limitedlist.txt (+1/-1)
lib/lp/services/gpg/doc/gpghandler.txt (+1/-1)
lib/lp/services/webapp/interfaces.py (+2/-2)
lib/lp/soyuz/scripts/packagecopier.py (+1/-1)
lib/lp/soyuz/stories/distribution/xx-distribution-packages.txt (+1/-1)
utilities/format-imports (+2/-2)
utilities/paste (+2/-2)
utilities/top-tests.py (+2/-2)
To merge this branch: bzr merge lp:~stevenk/launchpad/double-word-death
Reviewer Review Type Date Requested Status
Curtis Hovey (community) code Approve
Review via email: mp+94065@code.launchpad.net

Commit message

[r=sinzui][bug=931575,934778] Remove some double words and fix some grammar errors.

Description of the change

Remove double words of: "be the for we will of".

Fix grammar errors that I noticed.

To post a comment you must log in.
Revision history for this message
Curtis Hovey (sinzui) wrote :

Thank you. I think I am responsible for 40% of these mistakes.

review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/lp/answers/browser/question.py'
2--- lib/lp/answers/browser/question.py 2012-01-01 02:58:52 +0000
3+++ lib/lp/answers/browser/question.py 2012-02-22 01:28:20 +0000
4@@ -1,4 +1,4 @@
5-# Copyright 2009-2011 Canonical Ltd. This software is licensed under the
6+# Copyright 2009-2012 Canonical Ltd. This software is licensed under the
7 # GNU Affero General Public License version 3 (see the file LICENSE).
8
9 """Question views."""
10@@ -1299,7 +1299,7 @@
11
12 Those found in `values` are marked as selected. The list of rendered
13 values is controlled by the search query. The currently selected
14- value is always added the the set.
15+ value is always added to the set.
16 """
17 rendered_items = []
18 rendered_values = set()
19
20=== modified file 'lib/lp/answers/errors.py'
21--- lib/lp/answers/errors.py 2011-06-16 18:51:45 +0000
22+++ lib/lp/answers/errors.py 2012-02-22 01:28:20 +0000
23@@ -1,4 +1,4 @@
24-# Copyright 2011 Canonical Ltd. This software is licensed under the
25+# Copyright 2011-2012 Canonical Ltd. This software is licensed under the
26 # GNU Affero General Public License version 3 (see the file LICENSE).
27
28 __metaclass__ = type
29@@ -47,12 +47,12 @@
30
31 @error_status(httplib.BAD_REQUEST)
32 class NotMessageOwnerError(ValueError):
33- """The person be the the message owner."""
34+ """The person must be the message owner."""
35
36
37 @error_status(httplib.BAD_REQUEST)
38 class NotQuestionOwnerError(ValueError):
39- """The person be the the question owner."""
40+ """The person must be the question owner."""
41
42
43 @error_status(httplib.BAD_REQUEST)
44
45=== modified file 'lib/lp/answers/stories/question-search-multiple-languages.txt'
46--- lib/lp/answers/stories/question-search-multiple-languages.txt 2012-01-15 11:06:57 +0000
47+++ lib/lp/answers/stories/question-search-multiple-languages.txt 2012-02-22 01:28:20 +0000
48@@ -31,7 +31,7 @@
49
50 The questions match the languages inferred from by GeoIP
51 127.0.0.1 is mapped to South Africa in the test suite. The language
52-control shows the intersection of the the user's languages and the
53+control shows the intersection of the user's languages and the
54 languages of the target's questions. In this example:
55 set(['af', 'en', 'st', 'xh', 'zu']) & set(['en', 'es']) == set(en).
56
57
58=== modified file 'lib/lp/answers/stories/question-workflow.txt'
59--- lib/lp/answers/stories/question-workflow.txt 2011-11-30 23:31:25 +0000
60+++ lib/lp/answers/stories/question-workflow.txt 2012-02-22 01:28:20 +0000
61@@ -159,7 +159,7 @@
62 ... "support enabled. You can use apt-get or adept to upgrade.")
63 >>> support_browser.getControl('Propose Answer').click()
64
65-This moves the the question to the Answered state and adds the answer to
66+This moves the question to the Answered state and adds the answer to
67 the end of the discussion:
68
69 >>> print find_request_status(support_browser.contents)
70
71=== modified file 'lib/lp/app/longpoll/__init__.py'
72--- lib/lp/app/longpoll/__init__.py 2011-09-20 15:30:54 +0000
73+++ lib/lp/app/longpoll/__init__.py 2012-02-22 01:28:20 +0000
74@@ -1,4 +1,4 @@
75-# Copyright 2011 Canonical Ltd. This software is licensed under the
76+# Copyright 2011-2012 Canonical Ltd. This software is licensed under the
77 # GNU Affero General Public License version 3 (see the file LICENSE).
78
79 """Long-poll infrastructure."""
80@@ -39,7 +39,7 @@
81 def emit(source, event_name=u"", **data):
82 """Convenience method to emit a message for an event.
83
84- :param source: Something that can be be adapted to `ILongPollEvent`.
85+ :param source: Something that can be adapted to `ILongPollEvent`.
86 :param event_name: The name of the event to subscribe to. This is used to
87 look up a named adapter from `target` to `ILongPollEvent`.
88 :param data: See `ILongPollEvent.emit`.
89
90=== modified file 'lib/lp/app/widgets/launchpadtarget.py'
91--- lib/lp/app/widgets/launchpadtarget.py 2012-01-01 02:58:52 +0000
92+++ lib/lp/app/widgets/launchpadtarget.py 2012-02-22 01:28:20 +0000
93@@ -1,4 +1,4 @@
94-# Copyright 2009-2011 Canonical Ltd. This software is licensed under the
95+# Copyright 2009-2012 Canonical Ltd. This software is licensed under the
96 # GNU Affero General Public License version 3 (see the file LICENSE).
97
98 __metaclass__ = type
99@@ -144,7 +144,7 @@
100 entered_name = self.request.form_ng.getOne(
101 '%s.package' % self.name)
102 raise LaunchpadValidationError(
103- "There is no package name '%s' published in %s"
104+ "There is no package named '%s' published in %s."
105 % (entered_name, distribution.displayname))
106 if package_name is None:
107 return distribution
108@@ -158,7 +158,7 @@
109 dsp = distribution.getSourcePackage(source_name)
110 except NotFoundError:
111 raise LaunchpadValidationError(
112- "There is no package name '%s' published in %s"
113+ "There is no package named '%s' published in %s."
114 % (package_name.name, distribution.displayname))
115 return dsp
116 else:
117
118=== modified file 'lib/lp/app/widgets/tests/test_launchpadtarget.py'
119--- lib/lp/app/widgets/tests/test_launchpadtarget.py 2012-01-01 02:58:52 +0000
120+++ lib/lp/app/widgets/tests/test_launchpadtarget.py 2012-02-22 01:28:20 +0000
121@@ -1,4 +1,4 @@
122-# Copyright 2011 Canonical Ltd. This software is licensed under the
123+# Copyright 2011-2012 Canonical Ltd. This software is licensed under the
124 # GNU Affero General Public License version 3 (see the file LICENSE).
125
126 __metaclass__ = type
127@@ -213,7 +213,7 @@
128 form['field.target.package'] = 'non-existent'
129 self.widget.request = LaunchpadTestRequest(form=form)
130 message = (
131- "There is no package name 'non-existent' published in Fnord")
132+ "There is no package named 'non-existent' published in Fnord.")
133 self.assertRaisesWithContent(
134 LaunchpadValidationError, message, self.widget.getInputValue)
135 self.assertEqual(message, self.widget.error())
136
137=== modified file 'lib/lp/archivepublisher/tests/test_customupload.py'
138--- lib/lp/archivepublisher/tests/test_customupload.py 2010-08-20 20:31:18 +0000
139+++ lib/lp/archivepublisher/tests/test_customupload.py 2012-02-22 01:28:20 +0000
140@@ -1,4 +1,4 @@
141-# Copyright 2009-2010 Canonical Ltd. This software is licensed under the
142+# Copyright 2009-2012 Canonical Ltd. This software is licensed under the
143 # GNU Affero General Public License version 3 (see the file LICENSE).
144
145 """Tests for `CustomUploads`."""
146@@ -57,7 +57,7 @@
147 self.assertEntries(['1.0', '1.1', '1.2', '1.3'])
148
149 # `fixCurrentSymlink` will keep only the latest 3 and create a
150- # 'current' symbolic link the the highest one.
151+ # 'current' symbolic link the highest one.
152 custom_processor.fixCurrentSymlink()
153 self.assertEntries(['1.1', '1.2', '1.3', 'current'])
154 self.assertEqual(
155
156=== modified file 'lib/lp/archiveuploader/nascentuploadfile.py'
157--- lib/lp/archiveuploader/nascentuploadfile.py 2012-01-06 11:08:30 +0000
158+++ lib/lp/archiveuploader/nascentuploadfile.py 2012-02-22 01:28:20 +0000
159@@ -1,4 +1,4 @@
160-# Copyright 2009-2011 Canonical Ltd. This software is licensed under the
161+# Copyright 2009-2012 Canonical Ltd. This software is licensed under the
162 # GNU Affero General Public License version 3 (see the file LICENSE).
163
164 """Specific models for uploaded files"""
165@@ -579,7 +579,7 @@
166
167 # Since DDEBs are generated after the original DEBs are processed
168 # and considered by `dpkg-genchanges` they are only half-incorporated
169- # the the binary upload changes file. DDEBs are only listed in the
170+ # the binary upload changes file. DDEBs are only listed in the
171 # Files/Checksums-Sha1/ChecksumsSha256 sections and missing from
172 # Binary/Description.
173 if not self.filename.endswith('.ddeb'):
174
175=== modified file 'lib/lp/blueprints/tests/test_specification.py'
176--- lib/lp/blueprints/tests/test_specification.py 2012-01-01 02:58:52 +0000
177+++ lib/lp/blueprints/tests/test_specification.py 2012-02-22 01:28:20 +0000
178@@ -1,4 +1,4 @@
179-# Copyright 2010-2011 Canonical Ltd. This software is licensed under the
180+# Copyright 2010-2012 Canonical Ltd. This software is licensed under the
181 # GNU Affero General Public License version 3 (see the file LICENSE).
182
183 """Unit tests for Specification."""
184@@ -118,7 +118,7 @@
185 self.new_names = NewSpecificationDefinitionStatus.items.mapping.keys()
186
187 def test_new_with_open_definition_status_creates_specification(self):
188- # Calling new() with an open definition status will will create
189+ # Calling new() with an open definition status will create
190 # a specification.
191 self.assertTrue(
192 SpecificationDefinitionStatus.NEW.name in self.new_names)
193
194=== modified file 'lib/lp/bugs/browser/bugtarget.py'
195--- lib/lp/bugs/browser/bugtarget.py 2012-02-09 12:42:00 +0000
196+++ lib/lp/bugs/browser/bugtarget.py 2012-02-22 01:28:20 +0000
197@@ -774,7 +774,7 @@
198 def inline_filebug_form_url(self):
199 """Return the URL to the inline filebug form.
200
201- If a token was passed to this view, it will be be passed through
202+ If a token was passed to this view, it will be passed through
203 to the inline bug filing form via the returned URL.
204 """
205 url = canonical_url(self.context, view_name='+filebug-inline-form')
206@@ -1173,7 +1173,7 @@
207 def inline_filebug_form_url(self):
208 """Return the URL to the inline filebug form.
209
210- If a token was passed to this view, it will be be passed through
211+ If a token was passed to this view, it will be passed through
212 to the inline bug filing form via the returned URL.
213
214 The URL returned will be the URL of the first of the current
215
216=== modified file 'lib/lp/bugs/browser/tests/bug-views.txt'
217--- lib/lp/bugs/browser/tests/bug-views.txt 2011-12-30 07:38:46 +0000
218+++ lib/lp/bugs/browser/tests/bug-views.txt 2012-02-22 01:28:20 +0000
219@@ -358,7 +358,7 @@
220 'edit'
221
222 If we now unsubscribe Foo Bar, it will say 'Subscribe', since team
223-unsubsription is handled by the remove icon next the the team in the
224+unsubsription is handled by the remove icon next the team in the
225 subscribers portlet.
226
227 >>> bug_one.unsubscribe(foo_bar, foo_bar)
228
229=== modified file 'lib/lp/bugs/browser/tests/bugtask-edit-views.txt'
230--- lib/lp/bugs/browser/tests/bugtask-edit-views.txt 2011-12-24 17:49:30 +0000
231+++ lib/lp/bugs/browser/tests/bugtask-edit-views.txt 2012-02-22 01:28:20 +0000
232@@ -83,8 +83,8 @@
233 >>> for error in edit_view.errors:
234 ... print error
235 (u'ubuntu_thunderbird.target', u'Target',
236- LaunchpadValidationError(u"There is no package name 'no-such-package'
237- published in Ubuntu"))
238+ LaunchpadValidationError(u"There is no package named 'no-such-package'
239+ published in Ubuntu."))
240
241 An error is reported to the user when a bug is retargeted and there is
242 an existing task for the same target.
243
244=== modified file 'lib/lp/bugs/doc/bug-watch-activity.txt'
245--- lib/lp/bugs/doc/bug-watch-activity.txt 2012-01-20 16:11:11 +0000
246+++ lib/lp/bugs/doc/bug-watch-activity.txt 2012-02-22 01:28:20 +0000
247@@ -114,7 +114,7 @@
248 >>> print bug_watch.activity.count()
249 3
250
251-And this time its result field will record that the the remote bug was
252+And this time its result field will record that the remote bug was
253 not found.
254
255 >>> most_recent_activity = bug_watch.activity.first()
256
257=== modified file 'lib/lp/bugs/doc/distribution-upstream-bug-report.txt'
258--- lib/lp/bugs/doc/distribution-upstream-bug-report.txt 2011-12-24 15:28:06 +0000
259+++ lib/lp/bugs/doc/distribution-upstream-bug-report.txt 2012-02-22 01:28:20 +0000
260@@ -225,7 +225,7 @@
261 Deltas
262 ......
263
264-BugReportData also offers a set of of *_delta properties along with the
265+BugReportData also offers a set of *_delta properties along with the
266 *_percentage properties.
267
268 BugReportData.triaged_bugs_delta is the difference between the number of
269
270=== modified file 'lib/lp/bugs/doc/filebug-data-parser.txt'
271--- lib/lp/bugs/doc/filebug-data-parser.txt 2010-02-23 15:10:04 +0000
272+++ lib/lp/bugs/doc/filebug-data-parser.txt 2012-02-22 01:28:20 +0000
273@@ -189,7 +189,7 @@
274
275 ==== HWDB submission keys ====
276
277-The HWDB-Submission key is turned into a list of of strings, available
278+The HWDB-Submission key is turned into a list of strings, available
279 through the hwdb_submission_keys attribute.
280
281 >>> data = FileBugData()
282
283=== modified file 'lib/lp/bugs/javascript/bug_subscription_portlet.js'
284--- lib/lp/bugs/javascript/bug_subscription_portlet.js 2011-09-27 06:06:13 +0000
285+++ lib/lp/bugs/javascript/bug_subscription_portlet.js 2012-02-22 01:28:20 +0000
286@@ -1,4 +1,4 @@
287-/* Copyright 2011 Canonical Ltd. This software is licensed under the
288+/* Copyright 2011-2012 Canonical Ltd. This software is licensed under the
289 * GNU Affero General Public License version 3 (see the file LICENSE).
290 *
291 * Provide information and actions on all bug subscriptions a person holds.
292@@ -309,7 +309,7 @@
293 .setStyle('textOverflow', 'ellipsis')
294 .setStyle('whiteSpace', 'nowrap')
295 .setStyle('width', '21em');
296- // This is the the node that description of the current subscription
297+ // This is the node that description of the current subscription
298 // status.
299 var status_node = tag('div')
300 .addClass('subscription-status')
301@@ -328,7 +328,7 @@
302 .set('text',
303 'You currently only receive email when this bug is closed.')
304 );
305- // This is the the node that contains the links to subscribe at a certain
306+ // This is the node that contains the links to subscribe at a certain
307 // level.
308 var actions_node = tag('div')
309 .addClass('subscription-actions')
310
311=== modified file 'lib/lp/bugs/model/bugwatch.py'
312--- lib/lp/bugs/model/bugwatch.py 2011-12-30 06:14:56 +0000
313+++ lib/lp/bugs/model/bugwatch.py 2012-02-22 01:28:20 +0000
314@@ -1,4 +1,4 @@
315-# Copyright 2009 Canonical Ltd. This software is licensed under the
316+# Copyright 2009-2012 Canonical Ltd. This software is licensed under the
317 # GNU Affero General Public License version 3 (see the file LICENSE).
318
319 # pylint: disable-msg=E0611,W0212
320@@ -331,7 +331,7 @@
321 self.next_check <= datetime.now(utc)):
322 # If the watch is already scheduled for a time in the past
323 # (or for right now) it can't be rescheduled, since it
324- # should be be checked by the next checkwatches run anyway.
325+ # should be checked by the next checkwatches run anyway.
326 return False
327
328 if self.activity.is_empty():
329
330=== modified file 'lib/lp/bugs/stories/webservice/xx-bug-tracker.txt'
331--- lib/lp/bugs/stories/webservice/xx-bug-tracker.txt 2011-07-13 06:08:16 +0000
332+++ lib/lp/bugs/stories/webservice/xx-bug-tracker.txt 2012-02-22 01:28:20 +0000
333@@ -31,7 +31,7 @@
334 web_link: u'http://bugs.launchpad.dev/bugs/bugtrackers/mozilla.org'
335 --- ...
336
337-A bug tracker can be retrieved using the the bug tracker collection's
338+A bug tracker can be retrieved using the bug tracker collection's
339 getByName named operation.
340
341 >>> bug_tracker = anon_webservice.named_get(
342@@ -40,7 +40,7 @@
343 >>> print bug_tracker['name']
344 gnome-bugzilla
345
346-A bug tracker can be retrieved using the the bug tracker collection's
347+A bug tracker can be retrieved using the bug tracker collection's
348 queryByBaseURL named operation.
349
350 >>> bug_tracker = anon_webservice.named_get(
351
352=== modified file 'lib/lp/bugs/templates/bug-mute.pt'
353--- lib/lp/bugs/templates/bug-mute.pt 2011-03-23 16:28:51 +0000
354+++ lib/lp/bugs/templates/bug-mute.pt 2012-02-22 01:28:20 +0000
355@@ -16,7 +16,7 @@
356 <div id="maincontent">
357 <div id="nonportlets" class="readable">
358 <p>
359- If you mute a bug you will receive no mail about the the bug
360+ If you mute a bug you will receive no mail about the bug
361 at all until you unmute it again.
362 </p>
363
364
365=== modified file 'lib/lp/bugs/tests/test_apportjob.py'
366--- lib/lp/bugs/tests/test_apportjob.py 2012-01-01 02:58:52 +0000
367+++ lib/lp/bugs/tests/test_apportjob.py 2012-02-22 01:28:20 +0000
368@@ -1,4 +1,4 @@
369-# Copyright 2010-2011 Canonical Ltd. This software is licensed under the
370+# Copyright 2010-2012 Canonical Ltd. This software is licensed under the
371 # GNU Affero General Public License version 3 (see the file LICENSE).
372
373 """Tests for ApportJobs."""
374@@ -126,7 +126,7 @@
375 data_dict['hwdb_submission_keys'],
376 "Values for hwdb_submission_keys do not match")
377
378- # The attachments list of of the data_dict dict will be of
379+ # The attachments list of the data_dict dict will be of
380 # the same length as the attachments list in the filebug_data
381 # object.
382 self.assertEqual(
383
384=== modified file 'lib/lp/code/browser/tests/test_sourcepackagerecipe.py'
385--- lib/lp/code/browser/tests/test_sourcepackagerecipe.py 2012-01-15 13:32:27 +0000
386+++ lib/lp/code/browser/tests/test_sourcepackagerecipe.py 2012-02-22 01:28:20 +0000
387@@ -1255,7 +1255,7 @@
388 naked_build.date_created + timedelta(minutes=10))
389 set_status(build6, BuildStatus.FULLYBUILT)
390 set_status(build5, BuildStatus.FAILEDTOBUILD)
391- # When there are 4+ pending builds, only the the most
392+ # When there are 4+ pending builds, only the most
393 # recently-completed build is returned (i.e. build1, not build2)
394 self.assertEqual(
395 [build4, build3, build2, build1, build6],
396
397=== modified file 'lib/lp/code/errors.py'
398--- lib/lp/code/errors.py 2012-02-06 05:33:31 +0000
399+++ lib/lp/code/errors.py 2012-02-22 01:28:20 +0000
400@@ -297,7 +297,7 @@
401
402
403 class UpdatePreviewDiffNotReady(Exception):
404- """Raised if the the preview diff is not ready to run."""
405+ """Raised if the preview diff is not ready to run."""
406
407
408 class UserHasExistingReview(Exception):
409
410=== modified file 'lib/lp/code/model/tests/test_branch_privacy_triggers.py'
411--- lib/lp/code/model/tests/test_branch_privacy_triggers.py 2012-01-20 15:42:44 +0000
412+++ lib/lp/code/model/tests/test_branch_privacy_triggers.py 2012-02-22 01:28:20 +0000
413@@ -1,4 +1,4 @@
414-# Copyright 2011 Canonical Ltd. This software is licensed under the
415+# Copyright 2011-2012 Canonical Ltd. This software is licensed under the
416 # GNU Affero General Public License version 3 (see the file LICENSE).
417
418 """Tests that the triggers to maintain the branch table transitively_private
419@@ -133,7 +133,7 @@
420 def testRemoveStackedOn(self):
421 # 5 is private, 1 stacked on 5, so 1 is transitively private.
422 # Unstack 1.
423- # 1 should no longer be be transitively private.
424+ # 1 should no longer be transitively private.
425 self.createBranches()
426 self.updateStackedOnForBranch(1, 5)
427 self.updatePrivacyForBranch(5, True)
428
429=== modified file 'lib/lp/code/stories/branches/xx-subscribing-branches.txt'
430--- lib/lp/code/stories/branches/xx-subscribing-branches.txt 2012-01-15 13:32:27 +0000
431+++ lib/lp/code/stories/branches/xx-subscribing-branches.txt 2012-02-22 01:28:20 +0000
432@@ -218,7 +218,7 @@
433 ===========================
434
435 In order to edit a team subscription the logged in user needs to be a member
436-of the team that is subscribed, or must the the person who subscribed the team
437+of the team that is subscribed, or must the person who subscribed the team
438 to the branch. There is a link shown in the subscriptions portlet to edit the
439 subscription of a team that the logged in user is a member of.
440
441
442=== modified file 'lib/lp/code/windmill/tests/test_recipe_inline_distroseries_edit.py'
443--- lib/lp/code/windmill/tests/test_recipe_inline_distroseries_edit.py 2012-01-15 13:32:27 +0000
444+++ lib/lp/code/windmill/tests/test_recipe_inline_distroseries_edit.py 2012-02-22 01:28:20 +0000
445@@ -1,4 +1,4 @@
446-# Copyright 2011 Canonical Ltd. This software is licensed under the
447+# Copyright 2011-2012 Canonical Ltd. This software is licensed under the
448 # GNU Affero General Public License version 3 (see the file LICENSE).
449
450 """Tests for requesting recipe builds."""
451@@ -51,7 +51,7 @@
452 # Save it
453 client.click(jquery=u'("#edit-distroseries-save")[0]')
454
455- # Wait for the the new one that is added.
456+ # Wait for the new one that is added.
457 client.waits.forElement(
458 jquery=u"('#edit-distroseries-items ul li a')[0]",
459 timeout=FOR_ELEMENT)
460
461=== modified file 'lib/lp/code/windmill/tests/test_recipe_request_build.py'
462--- lib/lp/code/windmill/tests/test_recipe_request_build.py 2012-01-15 13:32:27 +0000
463+++ lib/lp/code/windmill/tests/test_recipe_request_build.py 2012-02-22 01:28:20 +0000
464@@ -1,4 +1,4 @@
465-# Copyright 2011 Canonical Ltd. This software is licensed under the
466+# Copyright 2011-2012 Canonical Ltd. This software is licensed under the
467 # GNU Affero General Public License version 3 (see the file LICENSE).
468
469 """Tests for requesting recipe builds."""
470@@ -78,7 +78,7 @@
471 def test_recipe_build_request_already_pending(self):
472 """Test that already pending builds are correctly highlighted.
473
474- If all possible builds are pending, the the Request Builds button
475+ If all possible builds are pending, the Request Builds button
476 should be hidden.
477 """
478
479
480=== modified file 'lib/lp/code/xmlrpc/tests/test_codehosting.py'
481--- lib/lp/code/xmlrpc/tests/test_codehosting.py 2012-01-06 11:08:30 +0000
482+++ lib/lp/code/xmlrpc/tests/test_codehosting.py 2012-02-22 01:28:20 +0000
483@@ -1,4 +1,4 @@
484-# Copyright 2009-2011 Canonical Ltd. This software is licensed under the
485+# Copyright 2009-2012 Canonical Ltd. This software is licensed under the
486 # GNU Affero General Public License version 3 (see the file LICENSE).
487
488 """Tests for the internal codehosting API."""
489@@ -1041,7 +1041,7 @@
490 self.assertEqual(expected, translation)
491
492 def test_translatePath_branch_id_alias_owned(self):
493- # Even if the the requester is the owner, the branch is read only.
494+ # Even if the requester is the owner, the branch is read only.
495 requester = self.factory.makePerson()
496 branch = removeSecurityProxy(
497 self.factory.makeAnyBranch(
498
499=== modified file 'lib/lp/codehosting/scanner/tests/test_bzrsync.py'
500--- lib/lp/codehosting/scanner/tests/test_bzrsync.py 2012-02-15 17:29:54 +0000
501+++ lib/lp/codehosting/scanner/tests/test_bzrsync.py 2012-02-22 01:28:20 +0000
502@@ -1,6 +1,6 @@
503 #!/usr/bin/python
504 #
505-# Copyright 2009-2011 Canonical Ltd. This software is licensed under the
506+# Copyright 2009-2012 Canonical Ltd. This software is licensed under the
507 # GNU Affero General Public License version 3 (see the file LICENSE).
508
509 # pylint: disable-msg=W0141
510@@ -620,7 +620,7 @@
511
512 def _makeProductSeries(self, mode=None):
513 """Switch to the Launchpad db user to create and configure a
514- product series that is linked to the the branch.
515+ product series that is linked to the branch.
516 """
517 with lp_dbuser():
518 self.product_series = self.factory.makeProductSeries()
519
520=== modified file 'lib/lp/registry/browser/mailinglists.py'
521--- lib/lp/registry/browser/mailinglists.py 2012-01-01 02:58:52 +0000
522+++ lib/lp/registry/browser/mailinglists.py 2012-02-22 01:28:20 +0000
523@@ -1,4 +1,4 @@
524-# Copyright 2009-2010 Canonical Ltd. This software is licensed under the
525+# Copyright 2009-2012 Canonical Ltd. This software is licensed under the
526 # GNU Affero General Public License version 3 (see the file LICENSE).
527
528 """Browser views for handling mailing lists."""
529@@ -28,7 +28,7 @@
530
531
532 class HeldMessageView(LaunchpadView):
533- """A little helper view for for held messages."""
534+ """A little helper view for held messages."""
535
536 def __init__(self, context, request):
537 super(HeldMessageView, self).__init__(context, request)
538
539=== modified file 'lib/lp/registry/browser/milestone.py'
540--- lib/lp/registry/browser/milestone.py 2012-01-14 09:00:20 +0000
541+++ lib/lp/registry/browser/milestone.py 2012-02-22 01:28:20 +0000
542@@ -1,4 +1,4 @@
543-# Copyright 2009-2011 Canonical Ltd. This software is licensed under the
544+# Copyright 2009-2012 Canonical Ltd. This software is licensed under the
545 # GNU Affero General Public License version 3 (see the file LICENSE).
546
547 """Milestone views."""
548@@ -496,7 +496,7 @@
549 def _field_names(self):
550 """See `LaunchpadFormView`.
551
552- There are two series fields, one for for product milestones and the
553+ There are two series fields, one for product milestones and the
554 other for distribution milestones. The product milestone may change
555 its productseries. The distribution milestone may change its
556 distroseries.
557
558=== modified file 'lib/lp/registry/browser/person.py'
559--- lib/lp/registry/browser/person.py 2012-02-21 12:43:54 +0000
560+++ lib/lp/registry/browser/person.py 2012-02-22 01:28:20 +0000
561@@ -2244,7 +2244,7 @@
562 else:
563 merge_action = 'merged'
564 self.request.response.addInfoNotification(
565- "%s is queued to be be %s in a few minutes." % (
566+ "%s is queued to be %s in a few minutes." % (
567 self.context.displayname, merge_action))
568 if self.request.method == "POST":
569 self.processForm()
570
571=== modified file 'lib/lp/registry/browser/tests/browser-views.txt'
572--- lib/lp/registry/browser/tests/browser-views.txt 2011-12-24 17:49:30 +0000
573+++ lib/lp/registry/browser/tests/browser-views.txt 2012-02-22 01:28:20 +0000
574@@ -8,7 +8,7 @@
575 ---------------------
576
577 The MilestoneOverlayMixin provides data that is needed by milestoneoverlay.js.
578-The milestone_form_uri property is the location of of the rendered form. The
579+The milestone_form_uri property is the location of the rendered form. The
580 javascript calls newMilestone on the object at series_api_uri.
581
582 >>> from lp.services.webapp import LaunchpadView
583
584=== modified file 'lib/lp/registry/browser/tests/productrelease-views.txt'
585--- lib/lp/registry/browser/tests/productrelease-views.txt 2012-02-02 12:30:53 +0000
586+++ lib/lp/registry/browser/tests/productrelease-views.txt 2012-02-22 01:28:20 +0000
587@@ -102,7 +102,7 @@
588 It is possible to create a release directly from a series, the release's
589 milestone can be created via an AJAX command.
590
591-The view collects the the required release fields, and adds fields to to
592+The view collects the required release fields, and adds fields to to
593 set the milestone.
594
595 >>> view = create_initialized_view(series, '+addrelease', principal=owner)
596
597=== modified file 'lib/lp/registry/browser/tests/test_person.py'
598--- lib/lp/registry/browser/tests/test_person.py 2012-02-01 15:26:32 +0000
599+++ lib/lp/registry/browser/tests/test_person.py 2012-02-22 01:28:20 +0000
600@@ -123,7 +123,7 @@
601 job_source.create(from_person=dupe_person, to_person=target_person)
602 view = create_initialized_view(dupe_person, name="+index")
603 notifications = view.request.response.notifications
604- message = 'Finch is queued to be be merged in a few minutes.'
605+ message = 'Finch is queued to be merged in a few minutes.'
606 self.assertEqual(1, len(notifications))
607 self.assertEqual(message, notifications[0].message)
608
609@@ -423,7 +423,7 @@
610 self.view.field_names)
611
612 def test_init_registry_expert(self):
613- # Registry experts do not see the the displayname field.
614+ # Registry experts do not see the displayname field.
615 login_celebrity('registry_experts')
616 self.view.setUpFields()
617 self.assertEqual(
618
619=== modified file 'lib/lp/registry/browser/tests/test_team.py'
620--- lib/lp/registry/browser/tests/test_team.py 2012-02-17 17:11:57 +0000
621+++ lib/lp/registry/browser/tests/test_team.py 2012-02-22 01:28:20 +0000
622@@ -465,7 +465,7 @@
623 ['name', 'displayname'], view.field_names)
624
625 def test_init_registry_expert(self):
626- # Registry experts do not see the the displayname field.
627+ # Registry experts do not see the displayname field.
628 team = self.factory.makeTeam()
629 login_celebrity('registry_experts')
630 view = create_initialized_view(team, name=self.view_name)
631@@ -811,7 +811,7 @@
632 view = create_initialized_view(self.team, name="+index")
633 notifications = view.request.response.notifications
634 message = (
635- 'Test Team is queued to be be merged or deleted '
636+ 'Test Team is queued to be merged or deleted '
637 'in a few minutes.')
638 self.assertEqual(1, len(notifications))
639 self.assertEqual(message, notifications[0].message)
640
641=== modified file 'lib/lp/registry/doc/distroseries.txt'
642--- lib/lp/registry/doc/distroseries.txt 2012-01-06 11:08:30 +0000
643+++ lib/lp/registry/doc/distroseries.txt 2012-02-22 01:28:20 +0000
644@@ -448,7 +448,7 @@
645
646 The distroseries getPrioritizedUnlinkedSourcePackages() method returns
647 a prioritized list of `ISourcePackage` objects that need a packaging link to
648-an `IProductSeries` to provide the the upstream information to share bugs,
649+an `IProductSeries` to provide the upstream information to share bugs,
650 translations, and code. Each item in the list is a dict with the 'package',
651 total_bugs, and total_messages (translatable messages).
652
653
654=== modified file 'lib/lp/registry/javascript/milestonetable.js'
655--- lib/lp/registry/javascript/milestonetable.js 2011-08-09 14:18:02 +0000
656+++ lib/lp/registry/javascript/milestonetable.js 2012-02-22 01:28:20 +0000
657@@ -1,4 +1,4 @@
658-/* Copyright 2010 Canonical Ltd. This software is licensed under the
659+/* Copyright 2010-2012 Canonical Ltd. This software is licensed under the
660 * GNU Affero General Public License version 3 (see the file LICENSE).
661 *
662 * Dynamically add milestones to an HTML table.
663@@ -95,7 +95,7 @@
664 * @param {Object} parameters Object literal of config name/value pairs.
665 * config.milestone_row_uri_template is the Y.substitute template
666 * that is used to create the URL to get the milestone row.
667- * config.milestone_rows_id is the id the the tbody that the
668+ * config.milestone_rows_id is the id the tbody that the
669 * milestone row will be added too.
670 */
671 module.setup = function(config) {
672
673=== modified file 'lib/lp/registry/javascript/tests/test_distroseriesdifferences_details.js'
674--- lib/lp/registry/javascript/tests/test_distroseriesdifferences_details.js 2011-08-30 16:41:31 +0000
675+++ lib/lp/registry/javascript/tests/test_distroseriesdifferences_details.js 2012-02-22 01:28:20 +0000
676@@ -1,4 +1,4 @@
677-/* Copyright 2009-2011 Canonical Ltd. This software is licensed under the
678+/* Copyright 2009-2012 Canonical Ltd. This software is licensed under the
679 GNU Affero General Public License version 3 (see the file LICENSE). */
680
681 YUI().use(
682@@ -905,7 +905,7 @@
683
684 test_request_wrong_click: function() {
685 // Click on the placeholder has no effect.
686- // The listeners are on the the link with class
687+ // The listeners are on the link with class
688 // '.package-diff-compute-request'.
689 // bug=746277.
690 var placeholder = Y.one('#placeholder');
691
692=== modified file 'lib/lp/registry/model/person.py'
693--- lib/lp/registry/model/person.py 2012-02-20 10:32:23 +0000
694+++ lib/lp/registry/model/person.py 2012-02-22 01:28:20 +0000
695@@ -1050,7 +1050,7 @@
696 return contributions
697
698 def _getProjectsWithTheMostKarma(self, limit=10):
699- """Return the names and karma points of of this person on the
700+ """Return the names and karma points of this person on the
701 product/distribution with that name.
702
703 The results are ordered descending by the karma points and limited to
704
705=== modified file 'lib/lp/registry/model/teammembership.py'
706--- lib/lp/registry/model/teammembership.py 2012-01-04 14:40:15 +0000
707+++ lib/lp/registry/model/teammembership.py 2012-02-22 01:28:20 +0000
708@@ -1,4 +1,4 @@
709-# Copyright 2009-2011 Canonical Ltd. This software is licensed under the
710+# Copyright 2009-2012 Canonical Ltd. This software is licensed under the
711 # GNU Affero General Public License version 3 (see the file LICENSE).
712
713 # pylint: disable-msg=E0611,W0212
714@@ -531,7 +531,7 @@
715 """
716 # Delete participation entries for the child and the child's
717 # direct/indirect members in other ancestor teams, unless those
718- # ancestor teams have another path the the child besides the
719+ # ancestor teams have another path the child besides the
720 # membership that has just been deactivated.
721 store = Store.of(parent)
722 store.execute("""
723
724=== modified file 'lib/lp/registry/stories/milestone/object-milestones.txt'
725--- lib/lp/registry/stories/milestone/object-milestones.txt 2011-12-28 17:03:06 +0000
726+++ lib/lp/registry/stories/milestone/object-milestones.txt 2012-02-22 01:28:20 +0000
727@@ -83,7 +83,7 @@
728 Mozilla Firefox 1.0 trunk A date
729 not yet released
730
731-When the project is a member of a project group, the the user can see a
732+When the project is a member of a project group, the user can see a
733 link to the project groups's milestone's page.
734
735 >>> anon_browser.getLink(
736
737=== modified file 'lib/lp/registry/tests/test_commercialprojects_vocabularies.py'
738--- lib/lp/registry/tests/test_commercialprojects_vocabularies.py 2012-02-13 21:01:51 +0000
739+++ lib/lp/registry/tests/test_commercialprojects_vocabularies.py 2012-02-22 01:28:20 +0000
740@@ -1,4 +1,4 @@
741-# Copyright 2009-2011 Canonical Ltd. This software is licensed under the
742+# Copyright 2009-2012 Canonical Ltd. This software is licensed under the
743 # GNU Affero General Public License version 3 (see the file LICENSE).
744
745 """Test the commercial projects vocabularies."""
746@@ -65,7 +65,7 @@
747 len(results)))
748
749 def test_searchForTerms_success(self):
750- # Search for for active maintained projects success.
751+ # Search for active maintained projects success.
752 results = self.vocab.searchForTerms('widget')
753 self.assertEqual(
754 self.num_commercial, len(results),
755
756=== modified file 'lib/lp/registry/tests/test_team.py'
757--- lib/lp/registry/tests/test_team.py 2012-01-17 21:45:24 +0000
758+++ lib/lp/registry/tests/test_team.py 2012-02-22 01:28:20 +0000
759@@ -1,4 +1,4 @@
760-# Copyright 2010-2011 Canonical Ltd. This software is licensed under the
761+# Copyright 2010-2012 Canonical Ltd. This software is licensed under the
762 # GNU Affero General Public License version 3 (see the file LICENSE).
763
764 """Tests for PersonSet."""
765@@ -120,7 +120,7 @@
766 def test_setContactAddress_after_purged_mailing_list_and_rename(self):
767 # This is the rare case where a list is purged for a team rename,
768 # then the contact address is set/unset sometime afterwards.
769- # The old mailing list address belongs the the team, but not the list.
770+ # The old mailing list address belongs the team, but not the list.
771 # 1. Create then purge a mailing list.
772 self.createMailingListAndGetAddress()
773 mailing_list = self.team.mailing_list
774
775=== modified file 'lib/lp/services/database/sqlbase.py'
776--- lib/lp/services/database/sqlbase.py 2012-02-07 14:39:27 +0000
777+++ lib/lp/services/database/sqlbase.py 2012-02-22 01:28:20 +0000
778@@ -1,4 +1,4 @@
779-# Copyright 2009-2011 Canonical Ltd. This software is licensed under the
780+# Copyright 2009-2012 Canonical Ltd. This software is licensed under the
781 # GNU Affero General Public License version 3 (see the file LICENSE).
782
783 __metaclass__ = type
784@@ -164,7 +164,7 @@
785 def __init__(self, *args, **kwargs):
786 """Extended version of the SQLObjectBase constructor.
787
788- We we force use of the the master Store.
789+ We force use of the master Store.
790
791 We refetch any parameters from different stores from the
792 correct master Store.
793
794=== modified file 'lib/lp/services/doc/limitedlist.txt'
795--- lib/lp/services/doc/limitedlist.txt 2010-03-22 13:07:05 +0000
796+++ lib/lp/services/doc/limitedlist.txt 2012-02-22 01:28:20 +0000
797@@ -32,7 +32,7 @@
798 <LimitedList(2, [2, 3])>
799
800 If we add two LimitedLists, the result is a LimitedList too, its maximum
801-length is the same as the the maximum length of the left operand. If the
802+length is the same as the maximum length of the left operand. If the
803 concatenated lists have more elements than left_operand.max_length, only
804 the last elements are stored.
805
806
807=== modified file 'lib/lp/services/gpg/doc/gpghandler.txt'
808--- lib/lp/services/gpg/doc/gpghandler.txt 2011-12-24 17:49:30 +0000
809+++ lib/lp/services/gpg/doc/gpghandler.txt 2012-02-22 01:28:20 +0000
810@@ -303,7 +303,7 @@
811 >>> len(list(gpghandler.localKeys()))
812 0
813
814-When we we need the public key again we use retrieveKey(), which will
815+When we need the public key again we use retrieveKey(), which will
816 hit the keyserver and import it automatically.
817
818 >>> retrieved_key = gpghandler.retrieveKey(new_key.fingerprint)
819
820=== modified file 'lib/lp/services/webapp/interfaces.py'
821--- lib/lp/services/webapp/interfaces.py 2012-01-15 12:22:55 +0000
822+++ lib/lp/services/webapp/interfaces.py 2012-02-22 01:28:20 +0000
823@@ -1,4 +1,4 @@
824-# Copyright 2009-2011 Canonical Ltd. This software is licensed under the
825+# Copyright 2009-2012 Canonical Ltd. This software is licensed under the
826 # GNU Affero General Public License version 3 (see the file LICENSE).
827
828 # pylint: disable-msg=E0211,E0213
829@@ -170,7 +170,7 @@
830
831 hidden = Attribute(
832 "Boolean to say whether this link is hidden. This is separate from "
833- "being enabled and is used to support links which need to be be "
834+ "being enabled and is used to support links which need to be "
835 "enabled but not viewable in the rendered HTML. The link may be "
836 "changed to visible by JavaScript or some other means.")
837
838
839=== modified file 'lib/lp/soyuz/scripts/packagecopier.py'
840--- lib/lp/soyuz/scripts/packagecopier.py 2012-01-09 13:25:02 +0000
841+++ lib/lp/soyuz/scripts/packagecopier.py 2012-02-22 01:28:20 +0000
842@@ -66,7 +66,7 @@
843 # XXX cprov 2009-06-12: This function could be incorporated in ILFA.
844 # I just don't see a clear benefit in doing that right now.
845
846- # Open the the libraryfile for reading.
847+ # Open the libraryfile for reading.
848 libraryfile.open()
849
850 # Make a temporary file to hold the download. It's annoying
851
852=== modified file 'lib/lp/soyuz/stories/distribution/xx-distribution-packages.txt'
853--- lib/lp/soyuz/stories/distribution/xx-distribution-packages.txt 2011-12-30 06:14:56 +0000
854+++ lib/lp/soyuz/stories/distribution/xx-distribution-packages.txt 2012-02-22 01:28:20 +0000
855@@ -581,7 +581,7 @@
856 ------------------
857
858 Users can inspect the full publishing history by clicking on a link in
859-the action menu on the the distribution source package index page.
860+the action menu on the distribution source package index page.
861
862 >>> anon_browser.getLink('View full publishing history').click()
863
864
865=== modified file 'utilities/format-imports'
866--- utilities/format-imports 2012-01-01 03:20:03 +0000
867+++ utilities/format-imports 2012-02-22 01:28:20 +0000
868@@ -1,6 +1,6 @@
869 #!/usr/bin/python
870 #
871-# Copyright 2010 Canonical Ltd. This software is licensed under the
872+# Copyright 2010-2012 Canonical Ltd. This software is licensed under the
873 # GNU Affero General Public License version 3 (see the file LICENSE).
874
875 """ Format import sections in python files
876@@ -65,7 +65,7 @@
877 length.
878
879 Comments stick with the import statement that followed them. Comments at the
880-end of one-line statements are moved to be be in front of it, .i.e.
881+end of one-line statements are moved to be in front of it, .i.e.
882 {{{
883 from sys import exit # Have a way out
884 }}}
885
886=== modified file 'utilities/paste'
887--- utilities/paste 2012-01-01 03:10:25 +0000
888+++ utilities/paste 2012-02-22 01:28:20 +0000
889@@ -1,6 +1,6 @@
890 #!/usr/bin/python -S
891 #
892-# Copyright 2009 Canonical Ltd. This software is licensed under the
893+# Copyright 2009-2012 Canonical Ltd. This software is licensed under the
894 # GNU Affero General Public License version 3 (see the file LICENSE).
895
896 import _pythonpath
897@@ -131,7 +131,7 @@
898 cookiejar.set_cookie(lp_cookie)
899 browser.mech_browser.set_cookiejar(cookiejar)
900
901- # Remove the the check for robots.txt, since the one on
902+ # Remove the check for robots.txt, since the one on
903 # pastebin.ubuntu.com doesn't allow us to open the page. We're not
904 # really a robot.
905 browser.mech_browser.handlers = [
906
907=== modified file 'utilities/top-tests.py'
908--- utilities/top-tests.py 2012-01-01 03:10:25 +0000
909+++ utilities/top-tests.py 2012-02-22 01:28:20 +0000
910@@ -1,6 +1,6 @@
911 #!/usr/bin/python
912 #
913-# Copyright 2009 Canonical Ltd. This software is licensed under the
914+# Copyright 2009-2012 Canonical Ltd. This software is licensed under the
915 # GNU Affero General Public License version 3 (see the file LICENSE).
916
917 """top-tests.py - Report about slowest tests in the test suite.
918@@ -112,7 +112,7 @@
919 raise ParseException('End of file before end of test run.')
920
921 def handleStartTestRunner(self, line, ignored):
922- """Switch the the layer state."""
923+ """Switch the layer state."""
924
925 def handleLayerStart(self, line, match):
926 """Create a new stats container for the layer."""