Merge lp:~jelmer/launchpad/621778-homepage-field into lp:launchpad/db-devel

Proposed by Jelmer Vernooij
Status: Merged
Approved by: Jelmer Vernooij
Approved revision: no longer in the source branch.
Merged at revision: 9719
Proposed branch: lp:~jelmer/launchpad/621778-homepage-field
Merge into: lp:launchpad/db-devel
Diff against target: 269 lines (+80/-10)
13 files modified
database/schema/comments.sql (+2/-0)
database/schema/patch-2208-05-0.sql (+11/-0)
lib/lp/registry/interfaces/distroseries.py (+4/-1)
lib/lp/registry/model/distroseries.py (+3/-2)
lib/lp/soyuz/interfaces/binarypackagebuild.py (+1/-1)
lib/lp/soyuz/interfaces/binarypackagerelease.py (+7/-0)
lib/lp/soyuz/interfaces/sourcepackagerelease.py (+8/-0)
lib/lp/soyuz/model/binarypackagebuild.py (+2/-2)
lib/lp/soyuz/model/binarypackagerelease.py (+1/-0)
lib/lp/soyuz/model/sourcepackagerelease.py (+1/-0)
lib/lp/soyuz/tests/test_binarypackagerelease.py (+16/-0)
lib/lp/soyuz/tests/test_sourcepackagerelease.py (+16/-0)
lib/lp/testing/factory.py (+8/-4)
To merge this branch: bzr merge lp:~jelmer/launchpad/621778-homepage-field
Reviewer Review Type Date Requested Status
Tim Penhey (community) Approve
Steve Kowalik (community) code* Approve
Stuart Bishop (community) db Approve
Robert Collins (community) db Approve
Review via email: mp+33331@code.launchpad.net

Commit message

Add SourcePackageRelease.homepage, BinaryPackageRelease.homepage.

Description of the change

This adds a "Homepage" field to SourcePackageRelease and BinaryPackageRelease.

This field was added to the Debian policy a fairly recently, see http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Homepage

I'm adding this field so that it can be used as the default value for the upstream homepage URL when creating an upstream project from an Ubuntu source package.

See: https://bugs.edge.launchpad.net/launchpad-registry/+bug/621778

To post a comment you must log in.
Revision history for this message
Robert Collins (lifeless) wrote :

If you're adding in python support for this, I think a couple of tests would be sensible: e.g. that you want it nullable.

DB side looks fine.

review: Approve (db)
Revision history for this message
Stuart Bishop (stub) wrote :

Is homepage one word or two? Both forms are in common use and I don't know if LP Style prefers homepage or home_page.

DB patch is fine. It would be lovely if we could enforce the format of the string using a CHECK constraint, but I don't think we can - we have to accept whatever rubbish the user put in the package that they uploaded. You might want to mention this in the comment before anyone attempts to naively mark it up (possible attack vector there if someone sticks Javascript in the homepage field and we don't validate the URL before marking it up).

patch-2208-05-0.sql

review: Approve (db)
Revision history for this message
Robert Collins (lifeless) wrote :

On Mon, Aug 23, 2010 at 6:25 PM, Stuart Bishop
<email address hidden> wrote:
> Review: Approve db
> Is homepage one word or two? Both forms are in common use and I don't know if LP Style prefers homepage or home_page.
>
> DB patch is fine. It would be lovely if we could enforce the format of the string using a CHECK constraint, but I don't think we can - we have to accept whatever rubbish the user put in the package that they uploaded. You might want to mention this in the comment before anyone attempts to naively mark it up (possible attack vector there if someone sticks Javascript in the homepage field and we don't validate the URL before marking it up).

Good catch: I suggest making the factory function return just such a
javascript function by default, to make it blindingly obvious :)

-Rob

Revision history for this message
Jelmer Vernooij (jelmer) wrote :

> Is homepage one word or two? Both forms are in common use and I don't know if
> LP Style prefers homepage or home_page.
Both "homepage" and "home page" are allowed according to my dictionary. "homepage" appears to be used more often in the Launchpad source code.

> DB patch is fine. It would be lovely if we could enforce the format of the
> string using a CHECK constraint, but I don't think we can - we have to accept
> whatever rubbish the user put in the package that they uploaded. You might
> want to mention this in the comment before anyone attempts to naively mark it
> up (possible attack vector there if someone sticks Javascript in the homepage
> field and we don't validate the URL before marking it up).
Makes sense, updated in the database comment and the API interface.

Revision history for this message
Jelmer Vernooij (jelmer) wrote :

> > Is homepage one word or two? Both forms are in common use and I don't know
> if
> > LP Style prefers homepage or home_page.
> Both "homepage" and "home page" are allowed according to my dictionary.
> "homepage" appears to be used more often in the Launchpad source code.
"Homepage" is also the name of the field in the Debian control file from which this field will be set.

Revision history for this message
Steve Kowalik (stevenk) wrote :

Hi,

These changes look pretty good, I just have some concerns:

* There exists lp.services.fields.URIField that allows for validation of URIs that are passed to it. Does that sound like a better fit than TextField?
* Why is homepage not exported over the API?

review: Needs Information (code*)
Revision history for this message
Steve Kowalik (stevenk) wrote :

One thing I forgot to mention is the you aren't using the patch filename that stub mentioned.

Revision history for this message
Jelmer Vernooij (jelmer) wrote :

> These changes look pretty good, I just have some concerns:
>
> * There exists lp.services.fields.URIField that allows for validation of URIs
> that are passed to it. Does that sound like a better fit than TextField?
Since we're importing the homepage field from the user-provided Debian package control fields, we can't rely on the homepage field containing a valid URL.

> * Why is homepage not exported over the API?
Mainly because the rest of SourcePackageRelease/BinaryPackageRelease isn't exported either, it seemed out of scope for this branch.

Revision history for this message
Steve Kowalik (stevenk) wrote :

Okay, this looks good to me!

review: Approve (code*)
Revision history for this message
Tim Penhey (thumper) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'database/schema/comments.sql'
--- database/schema/comments.sql 2010-08-23 04:51:48 +0000
+++ database/schema/comments.sql 2010-08-25 12:22:47 +0000
@@ -1339,6 +1339,7 @@
1339COMMENT ON COLUMN SourcePackageRelease.build_conflicts_indep IS 'The list of packages that will conflict with this source while building in architecture independent environment, as mentioned in the control file "Build-Conflicts-Indep:" field.';1339COMMENT ON COLUMN SourcePackageRelease.build_conflicts_indep IS 'The list of packages that will conflict with this source while building in architecture independent environment, as mentioned in the control file "Build-Conflicts-Indep:" field.';
1340COMMENT ON COLUMN SourcePackageRelease.changelog IS 'The LibraryFileAlias ID of changelog associated with this sourcepackage. Often in the case of debian packages and will be found after the installation in /usr/share/doc/<binarypackagename>/changelog.Debian.gz';1340COMMENT ON COLUMN SourcePackageRelease.changelog IS 'The LibraryFileAlias ID of changelog associated with this sourcepackage. Often in the case of debian packages and will be found after the installation in /usr/share/doc/<binarypackagename>/changelog.Debian.gz';
1341COMMENT ON COLUMN SourcePackageRelease.user_defined_fields IS 'A JSON struct containing a sequence of key-value pairs with user defined fields in the control file.';1341COMMENT ON COLUMN SourcePackageRelease.user_defined_fields IS 'A JSON struct containing a sequence of key-value pairs with user defined fields in the control file.';
1342COMMENT ON COLUMN SourcePackageRelease.homepage IS 'Upstream project homepage URL, not checked for validity.';
13421343
1343-- SourcePackageName1344-- SourcePackageName
13441345
@@ -1480,6 +1481,7 @@
1480COMMENT ON COLUMN BinaryPackageRelease.breaks IS 'The list of packages which will be broken by the installtion of this package, as it is in the control file "Breaks:" field.';1481COMMENT ON COLUMN BinaryPackageRelease.breaks IS 'The list of packages which will be broken by the installtion of this package, as it is in the control file "Breaks:" field.';
1481COMMENT ON COLUMN BinaryPackageRelease.debug_package IS 'The corresponding binary package release containing debug symbols for this binary, if any.';1482COMMENT ON COLUMN BinaryPackageRelease.debug_package IS 'The corresponding binary package release containing debug symbols for this binary, if any.';
1482COMMENT ON COLUMN BinaryPackageRelease.user_defined_fields IS 'A JSON struct containing a sequence of key-value pairs with user defined fields in the control file.';1483COMMENT ON COLUMN BinaryPackageRelease.user_defined_fields IS 'A JSON struct containing a sequence of key-value pairs with user defined fields in the control file.';
1484COMMENT ON COLUMN BinaryPackageRelease.homepage IS 'Upstream project homepage URL, not checked for validity.';
14831485
14841486
1485-- BinaryPackageFile1487-- BinaryPackageFile
14861488
=== added file 'database/schema/patch-2208-05-0.sql'
--- database/schema/patch-2208-05-0.sql 1970-01-01 00:00:00 +0000
+++ database/schema/patch-2208-05-0.sql 2010-08-25 12:22:47 +0000
@@ -0,0 +1,11 @@
1-- Copyright 2010 Canonical Ltd. This software is licensed under the
2-- GNU Affero General Public License version 3 (see the file LICENSE).
3SET client_min_messages=ERROR;
4
5ALTER TABLE BinaryPackageRelease
6 ADD COLUMN homepage TEXT;
7
8ALTER TABLE SourcePackageRelease
9 ADD COLUMN homepage TEXT;
10
11INSERT INTO LaunchpadDatabaseRevision VALUES (2208, 05, 0);
012
=== modified file 'lib/lp/registry/interfaces/distroseries.py'
--- lib/lp/registry/interfaces/distroseries.py 2010-08-21 13:54:20 +0000
+++ lib/lp/registry/interfaces/distroseries.py 2010-08-25 12:22:47 +0000
@@ -602,7 +602,8 @@
602 dsc_maintainer_rfc822, dsc_standards_version, dsc_format,602 dsc_maintainer_rfc822, dsc_standards_version, dsc_format,
603 dsc_binaries, archive, copyright, build_conflicts,603 dsc_binaries, archive, copyright, build_conflicts,
604 build_conflicts_indep, dateuploaded=None,604 build_conflicts_indep, dateuploaded=None,
605 source_package_recipe_build=None, user_defined_fields=None):605 source_package_recipe_build=None, user_defined_fields=None,
606 homepage=None):
606 """Create an uploads `SourcePackageRelease`.607 """Create an uploads `SourcePackageRelease`.
607608
608 Set this distroseries set to be the uploadeddistroseries.609 Set this distroseries set to be the uploadeddistroseries.
@@ -640,6 +641,8 @@
640 :param source_package_recipe_build: optional SourcePackageRecipeBuild641 :param source_package_recipe_build: optional SourcePackageRecipeBuild
641 :param user_defined_fields: optional sequence of key-value pairs with642 :param user_defined_fields: optional sequence of key-value pairs with
642 user defined fields.643 user defined fields.
644 :param homepage: optional string with (unchecked) upstream homepage
645 URL
643 :return: the just creates `SourcePackageRelease`646 :return: the just creates `SourcePackageRelease`
644 """647 """
645648
646649
=== modified file 'lib/lp/registry/model/distroseries.py'
--- lib/lp/registry/model/distroseries.py 2010-08-24 20:30:48 +0000
+++ lib/lp/registry/model/distroseries.py 2010-08-25 12:22:47 +0000
@@ -1186,7 +1186,8 @@
1186 dsc_maintainer_rfc822, dsc_standards_version, dsc_format,1186 dsc_maintainer_rfc822, dsc_standards_version, dsc_format,
1187 dsc_binaries, archive, copyright, build_conflicts,1187 dsc_binaries, archive, copyright, build_conflicts,
1188 build_conflicts_indep, dateuploaded=DEFAULT,1188 build_conflicts_indep, dateuploaded=DEFAULT,
1189 source_package_recipe_build=None, user_defined_fields=None):1189 source_package_recipe_build=None, user_defined_fields=None,
1190 homepage=None):
1190 """See `IDistroSeries`."""1191 """See `IDistroSeries`."""
1191 return SourcePackageRelease(1192 return SourcePackageRelease(
1192 upload_distroseries=self, sourcepackagename=sourcepackagename,1193 upload_distroseries=self, sourcepackagename=sourcepackagename,
@@ -1203,7 +1204,7 @@
1203 build_conflicts=build_conflicts,1204 build_conflicts=build_conflicts,
1204 build_conflicts_indep=build_conflicts_indep,1205 build_conflicts_indep=build_conflicts_indep,
1205 source_package_recipe_build=source_package_recipe_build,1206 source_package_recipe_build=source_package_recipe_build,
1206 user_defined_fields=user_defined_fields)1207 user_defined_fields=user_defined_fields, homepage=homepage)
12071208
1208 def getComponentByName(self, name):1209 def getComponentByName(self, name):
1209 """See `IDistroSeries`."""1210 """See `IDistroSeries`."""
12101211
=== modified file 'lib/lp/soyuz/interfaces/binarypackagebuild.py'
--- lib/lp/soyuz/interfaces/binarypackagebuild.py 2010-08-21 13:54:20 +0000
+++ lib/lp/soyuz/interfaces/binarypackagebuild.py 2010-08-25 12:22:47 +0000
@@ -140,7 +140,7 @@
140 shlibdeps=None, depends=None, recommends=None, suggests=None,140 shlibdeps=None, depends=None, recommends=None, suggests=None,
141 conflicts=None, replaces=None, provides=None, pre_depends=None,141 conflicts=None, replaces=None, provides=None, pre_depends=None,
142 enhances=None, breaks=None, essential=False, debug_package=None,142 enhances=None, breaks=None, essential=False, debug_package=None,
143 user_defined_fields=None):143 user_defined_fields=None, homepage=None):
144 """Create and return a `BinaryPackageRelease`.144 """Create and return a `BinaryPackageRelease`.
145145
146 The binarypackagerelease will be attached to this specific build.146 The binarypackagerelease will be attached to this specific build.
147147
=== modified file 'lib/lp/soyuz/interfaces/binarypackagerelease.py'
--- lib/lp/soyuz/interfaces/binarypackagerelease.py 2010-08-21 13:56:34 +0000
+++ lib/lp/soyuz/interfaces/binarypackagerelease.py 2010-08-25 12:22:47 +0000
@@ -80,6 +80,13 @@
80 user_defined_fields = List(80 user_defined_fields = List(
81 title=_("Sequence of user-defined fields as key-value pairs."))81 title=_("Sequence of user-defined fields as key-value pairs."))
8282
83 homepage = TextLine(
84 title=_("Homepage"),
85 description=_(
86 "Upstream project homepage as set in the package. This URL is not "
87 "sanitized."),
88 required=False)
89
83 files = Attribute("Related list of IBinaryPackageFile entries")90 files = Attribute("Related list of IBinaryPackageFile entries")
8491
85 title = TextLine(required=True, readonly=True)92 title = TextLine(required=True, readonly=True)
8693
=== modified file 'lib/lp/soyuz/interfaces/sourcepackagerelease.py'
--- lib/lp/soyuz/interfaces/sourcepackagerelease.py 2010-08-21 13:56:34 +0000
+++ lib/lp/soyuz/interfaces/sourcepackagerelease.py 2010-08-25 12:22:47 +0000
@@ -104,6 +104,14 @@
104104
105 user_defined_fields = List(105 user_defined_fields = List(
106 title=_("Sequence of user-defined fields as key-value pairs."))106 title=_("Sequence of user-defined fields as key-value pairs."))
107
108 homepage = TextLine(
109 title=_("Homepage"),
110 description=_(
111 "Upstream project homepage as set in the package. This URL is not "
112 "sanitized."),
113 required=False)
114
107 # read-only properties115 # read-only properties
108 name = Attribute('The sourcepackagename for this release, as text')116 name = Attribute('The sourcepackagename for this release, as text')
109 title = Attribute('The title of this sourcepackagerelease')117 title = Attribute('The title of this sourcepackagerelease')
110118
=== modified file 'lib/lp/soyuz/model/binarypackagebuild.py'
--- lib/lp/soyuz/model/binarypackagebuild.py 2010-08-25 00:30:21 +0000
+++ lib/lp/soyuz/model/binarypackagebuild.py 2010-08-25 12:22:47 +0000
@@ -485,7 +485,7 @@
485 architecturespecific, shlibdeps=None, depends=None, recommends=None,485 architecturespecific, shlibdeps=None, depends=None, recommends=None,
486 suggests=None, conflicts=None, replaces=None, provides=None,486 suggests=None, conflicts=None, replaces=None, provides=None,
487 pre_depends=None, enhances=None, breaks=None, essential=False,487 pre_depends=None, enhances=None, breaks=None, essential=False,
488 debug_package=None, user_defined_fields=None):488 debug_package=None, user_defined_fields=None, homepage=None):
489 """See IBuild."""489 """See IBuild."""
490 return BinaryPackageRelease(490 return BinaryPackageRelease(
491 build=self, binarypackagename=binarypackagename, version=version,491 build=self, binarypackagename=binarypackagename, version=version,
@@ -498,7 +498,7 @@
498 breaks=breaks, essential=essential, installedsize=installedsize,498 breaks=breaks, essential=essential, installedsize=installedsize,
499 architecturespecific=architecturespecific,499 architecturespecific=architecturespecific,
500 debug_package=debug_package,500 debug_package=debug_package,
501 user_defined_fields=user_defined_fields)501 user_defined_fields=user_defined_fields, homepage=homepage)
502502
503 def estimateDuration(self):503 def estimateDuration(self):
504 """See `IPackageBuild`."""504 """See `IPackageBuild`."""
505505
=== modified file 'lib/lp/soyuz/model/binarypackagerelease.py'
--- lib/lp/soyuz/model/binarypackagerelease.py 2010-08-21 13:56:34 +0000
+++ lib/lp/soyuz/model/binarypackagerelease.py 2010-08-25 12:22:47 +0000
@@ -81,6 +81,7 @@
81 installedsize = IntCol(dbName='installedsize')81 installedsize = IntCol(dbName='installedsize')
82 architecturespecific = BoolCol(dbName='architecturespecific',82 architecturespecific = BoolCol(dbName='architecturespecific',
83 notNull=True)83 notNull=True)
84 homepage = StringCol(dbName='homepage')
84 datecreated = UtcDateTimeCol(notNull=True, default=UTC_NOW)85 datecreated = UtcDateTimeCol(notNull=True, default=UTC_NOW)
85 debug_package = ForeignKey(dbName='debug_package',86 debug_package = ForeignKey(dbName='debug_package',
86 foreignKey='BinaryPackageRelease')87 foreignKey='BinaryPackageRelease')
8788
=== modified file 'lib/lp/soyuz/model/sourcepackagerelease.py'
--- lib/lp/soyuz/model/sourcepackagerelease.py 2010-08-21 13:56:34 +0000
+++ lib/lp/soyuz/model/sourcepackagerelease.py 2010-08-25 12:22:47 +0000
@@ -146,6 +146,7 @@
146 build_conflicts = StringCol(dbName='build_conflicts')146 build_conflicts = StringCol(dbName='build_conflicts')
147 build_conflicts_indep = StringCol(dbName='build_conflicts_indep')147 build_conflicts_indep = StringCol(dbName='build_conflicts_indep')
148 architecturehintlist = StringCol(dbName='architecturehintlist')148 architecturehintlist = StringCol(dbName='architecturehintlist')
149 homepage = StringCol(dbName='homepage')
149 format = EnumCol(dbName='format', schema=SourcePackageType,150 format = EnumCol(dbName='format', schema=SourcePackageType,
150 default=SourcePackageType.DPKG, notNull=True)151 default=SourcePackageType.DPKG, notNull=True)
151 upload_distroseries = ForeignKey(foreignKey='DistroSeries',152 upload_distroseries = ForeignKey(foreignKey='DistroSeries',
152153
=== modified file 'lib/lp/soyuz/tests/test_binarypackagerelease.py'
--- lib/lp/soyuz/tests/test_binarypackagerelease.py 2010-08-21 13:56:34 +0000
+++ lib/lp/soyuz/tests/test_binarypackagerelease.py 2010-08-25 12:22:47 +0000
@@ -49,3 +49,19 @@
49 self.assertEquals([49 self.assertEquals([
50 ["Python-Version", ">= 2.4"],50 ["Python-Version", ">= 2.4"],
51 ["Other", "Bla"]], release.user_defined_fields)51 ["Other", "Bla"]], release.user_defined_fields)
52
53 def test_homepage_default(self):
54 # By default, no homepage is set.
55 bpr = self.factory.makeBinaryPackageRelease()
56 self.assertEquals(None, bpr.homepage)
57
58 def test_homepage_empty(self):
59 # The homepage field can be empty.
60 bpr = self.factory.makeBinaryPackageRelease(homepage="")
61 self.assertEquals("", bpr.homepage)
62
63 def test_homepage_set_invalid(self):
64 # As the homepage field is inherited from the .deb, the URL
65 # does not have to be valid.
66 bpr = self.factory.makeBinaryPackageRelease(homepage="<invalid<url")
67 self.assertEquals("<invalid<url", bpr.homepage)
5268
=== modified file 'lib/lp/soyuz/tests/test_sourcepackagerelease.py'
--- lib/lp/soyuz/tests/test_sourcepackagerelease.py 2010-08-21 13:54:20 +0000
+++ lib/lp/soyuz/tests/test_sourcepackagerelease.py 2010-08-25 12:22:47 +0000
@@ -38,3 +38,19 @@
38 self.assertEquals([38 self.assertEquals([
39 ["Python-Version", ">= 2.4"],39 ["Python-Version", ">= 2.4"],
40 ["Other", "Bla"]], release.user_defined_fields)40 ["Other", "Bla"]], release.user_defined_fields)
41
42 def test_homepage_default(self):
43 # By default, no homepage is set.
44 spr = self.factory.makeSourcePackageRelease()
45 self.assertEquals(None, spr.homepage)
46
47 def test_homepage_empty(self):
48 # The homepage field can be empty.
49 spr = self.factory.makeSourcePackageRelease(homepage="")
50 self.assertEquals("", spr.homepage)
51
52 def test_homepage_set_invalid(self):
53 # As the homepage field is inherited from the DSCFile, the URL
54 # does not have to be valid.
55 spr = self.factory.makeSourcePackageRelease(homepage="<invalid<url")
56 self.assertEquals("<invalid<url", spr.homepage)
4157
=== modified file 'lib/lp/testing/factory.py'
--- lib/lp/testing/factory.py 2010-08-23 08:12:39 +0000
+++ lib/lp/testing/factory.py 2010-08-25 12:22:47 +0000
@@ -2408,7 +2408,8 @@
2408 date_uploaded=UTC_NOW,2408 date_uploaded=UTC_NOW,
2409 source_package_recipe_build=None,2409 source_package_recipe_build=None,
2410 dscsigningkey=None,2410 dscsigningkey=None,
2411 user_defined_fields=None):2411 user_defined_fields=None,
2412 homepage=None):
2412 """Make a `SourcePackageRelease`."""2413 """Make a `SourcePackageRelease`."""
2413 if distroseries is None:2414 if distroseries is None:
2414 if source_package_recipe_build is not None:2415 if source_package_recipe_build is not None:
@@ -2476,7 +2477,8 @@
2476 archive=archive,2477 archive=archive,
2477 dateuploaded=date_uploaded,2478 dateuploaded=date_uploaded,
2478 source_package_recipe_build=source_package_recipe_build,2479 source_package_recipe_build=source_package_recipe_build,
2479 user_defined_fields=user_defined_fields)2480 user_defined_fields=user_defined_fields,
2481 homepage=homepage)
24802482
2481 def makeSourcePackageReleaseFile(self, sourcepackagerelease=None,2483 def makeSourcePackageReleaseFile(self, sourcepackagerelease=None,
2482 library_file=None, filetype=None):2484 library_file=None, filetype=None):
@@ -2704,7 +2706,8 @@
2704 provides=None, pre_depends=None,2706 provides=None, pre_depends=None,
2705 enhances=None, breaks=None,2707 enhances=None, breaks=None,
2706 essential=False, installed_size=None,2708 essential=False, installed_size=None,
2707 date_created=None, debug_package=None):2709 date_created=None, debug_package=None,
2710 homepage=None):
2708 """Make a `BinaryPackageRelease`."""2711 """Make a `BinaryPackageRelease`."""
2709 if build is None:2712 if build is None:
2710 build = self.makeBinaryPackageBuild()2713 build = self.makeBinaryPackageBuild()
@@ -2735,7 +2738,8 @@
2735 suggests=suggests, conflicts=conflicts, replaces=replaces,2738 suggests=suggests, conflicts=conflicts, replaces=replaces,
2736 provides=provides, pre_depends=pre_depends,2739 provides=provides, pre_depends=pre_depends,
2737 enhances=enhances, breaks=breaks, essential=essential,2740 enhances=enhances, breaks=breaks, essential=essential,
2738 installedsize=installed_size, debug_package=debug_package)2741 installedsize=installed_size, debug_package=debug_package,
2742 homepage=homepage)
2739 if date_created is not None:2743 if date_created is not None:
2740 removeSecurityProxy(bpr).datecreated = date_created2744 removeSecurityProxy(bpr).datecreated = date_created
2741 return bpr2745 return bpr

Subscribers

People subscribed via source and target branches

to status/vote changes: