[paludis-commits] paludis.git (master) -- a13d7d6 by Ciaran McCreesh

git at git.pioto.org git at git.pioto.org
Mon Aug 4 23:45:30 EDT 2008


Module:    paludis.git
Branch:    master
Commit:    a13d7d63e7c9b24f65fdcf343cbe64e8a7076087
URL:       http://git.pioto.org/?p=paludis.git;a=commit;h=a13d7d63e7c9b24f65fdcf343cbe64e8a7076087

Author:    Ciaran McCreesh <ciaran.mccreesh at googlemail.com>
Committer: Ciaran McCreesh <ciaran.mccreesh at googlemail.com>
Date:      Tue Aug  5 04:43:35 2008 +0100

----

Tinker with exheres metadata lots.

DESCRIPTION is now SUMMARY. DESCRIPTION is now for long descriptions. Added
UPSTREAM_CHANGELOG, UPSTREAM_RELEASE_NOTES, UPSTREAM_DOCUMENTATION,
BUGS_TO, REMOTE_IDS.

----

 .../repositories/e/e_installed_repository_id.cc    |   96 +++++++++++-
 paludis/repositories/e/e_repository_TEST.cc        |   14 ++-
 paludis/repositories/e/e_repository_TEST_setup.sh  |  166 ++++++++++++++------
 paludis/repositories/e/eapi.cc                     |    8 +-
 paludis/repositories/e/eapi.hh                     |   15 ++-
 paludis/repositories/e/eapis/0.conf                |   12 +-
 paludis/repositories/e/eapis/exheres-0.conf        |   34 +++-
 paludis/repositories/e/eapis/paludis-1.conf        |    9 +-
 paludis/repositories/e/ebuild.cc                   |   45 +++++-
 paludis/repositories/e/ebuild/ebuild.bash          |    4 +-
 .../repositories/e/ebuild_flat_metadata_cache.cc   |  106 ++++++++++++-
 paludis/repositories/e/ebuild_id.cc                |   92 +++++++++++-
 paludis/repositories/e/ebuild_id.hh                |   12 ++
 13 files changed, 534 insertions(+), 79 deletions(-)


diff --git a/paludis/repositories/e/e_installed_repository_id.cc b/paludis/repositories/e/e_installed_repository_id.cc
index 08f207d..dd8d579 100644
--- a/paludis/repositories/e/e_installed_repository_id.cc
+++ b/paludis/repositories/e/e_installed_repository_id.cc
@@ -84,13 +84,19 @@ namespace paludis
         std::tr1::shared_ptr<const MetadataSpecTreeKey<DependencySpecTree> > build_dependencies;
         std::tr1::shared_ptr<const MetadataSpecTreeKey<DependencySpecTree> > run_dependencies;
         std::tr1::shared_ptr<const MetadataSpecTreeKey<DependencySpecTree> > post_dependencies;
-        std::tr1::shared_ptr<const MetadataSpecTreeKey<RestrictSpecTree> > restrictions;
+        std::tr1::shared_ptr<const MetadataSpecTreeKey<PlainTextSpecTree> > restrictions;
         std::tr1::shared_ptr<const MetadataSpecTreeKey<FetchableURISpecTree> > src_uri;
         std::tr1::shared_ptr<const MetadataSpecTreeKey<SimpleURISpecTree> > homepage;
         std::tr1::shared_ptr<const MetadataValueKey<std::string> > short_description;
+        std::tr1::shared_ptr<const MetadataValueKey<std::string> > long_description;
         std::tr1::shared_ptr<const MetadataValueKey<std::tr1::shared_ptr<const Contents> > > contents;
         std::tr1::shared_ptr<const MetadataTimeKey> installed_time;
         std::tr1::shared_ptr<const MetadataCollectionKey<Set<std::string> > > from_repositories;
+        std::tr1::shared_ptr<const MetadataSpecTreeKey<SimpleURISpecTree> > upstream_changelog;
+        std::tr1::shared_ptr<const MetadataSpecTreeKey<SimpleURISpecTree> > upstream_documentation;
+        std::tr1::shared_ptr<const MetadataSpecTreeKey<SimpleURISpecTree> > upstream_release_notes;
+        std::tr1::shared_ptr<const MetadataSpecTreeKey<PlainTextSpecTree> > remote_ids;
+        std::tr1::shared_ptr<const MetadataSpecTreeKey<PlainTextSpecTree> > bugs_to;
 
         std::tr1::shared_ptr<const MetadataValueKey<std::string> > asflags;
         std::tr1::shared_ptr<const MetadataValueKey<std::string> > cbuild;
@@ -278,14 +284,91 @@ EInstalledRepositoryID::need_keys_added() const
             add_metadata_key(_imp->src_uri);
         }
 
-    if (! vars->description().name().empty())
-        if ((_imp->dir / vars->description().name()).exists())
+    if (! vars->short_description().name().empty())
+        if ((_imp->dir / vars->short_description().name()).exists())
         {
-            _imp->short_description.reset(new LiteralMetadataValueKey<std::string> (vars->description().name(),
-                        vars->description().description(), mkt_significant, file_contents(_imp->dir / vars->description().name())));
+            _imp->short_description.reset(new LiteralMetadataValueKey<std::string> (vars->short_description().name(),
+                        vars->short_description().description(), mkt_significant, file_contents(_imp->dir / vars->short_description().name())));
             add_metadata_key(_imp->short_description);
         }
 
+    if (! vars->long_description().name().empty())
+        if ((_imp->dir / vars->long_description().name()).exists())
+        {
+            std::string value(file_contents(_imp->dir / vars->long_description().name()));
+            if (! value.empty())
+            {
+                _imp->long_description.reset(new LiteralMetadataValueKey<std::string> (vars->long_description().name(),
+                            vars->long_description().description(), mkt_significant, value));
+                add_metadata_key(_imp->long_description);
+            }
+        }
+
+    if (! vars->upstream_changelog().name().empty())
+        if ((_imp->dir / vars->upstream_changelog().name()).exists())
+        {
+            std::string value(file_contents(_imp->dir / vars->upstream_changelog().name()));
+            if (! value.empty())
+            {
+                _imp->upstream_changelog.reset(new ESimpleURIKey(_imp->environment, shared_from_this(),
+                            vars->upstream_changelog().name(),
+                            vars->upstream_changelog().description(), value, mkt_normal));
+                add_metadata_key(_imp->upstream_changelog);
+            }
+        }
+
+    if (! vars->upstream_release_notes().name().empty())
+        if ((_imp->dir / vars->upstream_release_notes().name()).exists())
+        {
+            std::string value(file_contents(_imp->dir / vars->upstream_release_notes().name()));
+            if (! value.empty())
+            {
+                _imp->upstream_release_notes.reset(new ESimpleURIKey(_imp->environment, shared_from_this(),
+                            vars->upstream_release_notes().name(),
+                            vars->upstream_release_notes().description(), value, mkt_normal));
+                add_metadata_key(_imp->upstream_release_notes);
+            }
+        }
+
+    if (! vars->upstream_documentation().name().empty())
+        if ((_imp->dir / vars->upstream_documentation().name()).exists())
+        {
+            std::string value(file_contents(_imp->dir / vars->upstream_documentation().name()));
+            if (! value.empty())
+            {
+                _imp->upstream_documentation.reset(new ESimpleURIKey(_imp->environment, shared_from_this(),
+                            vars->upstream_documentation().name(),
+                            vars->upstream_documentation().description(), value, mkt_normal));
+                add_metadata_key(_imp->upstream_documentation);
+            }
+        }
+
+    if (! vars->bugs_to().name().empty())
+        if ((_imp->dir / vars->bugs_to().name()).exists())
+        {
+            std::string value(file_contents(_imp->dir / vars->bugs_to().name()));
+            if (! value.empty())
+            {
+                _imp->bugs_to.reset(new EPlainTextSpecKey(_imp->environment, shared_from_this(),
+                            vars->bugs_to().name(),
+                            vars->bugs_to().description(), value, mkt_normal));
+                add_metadata_key(_imp->bugs_to);
+            }
+        }
+
+    if (! vars->remote_ids().name().empty())
+        if ((_imp->dir / vars->remote_ids().name()).exists())
+        {
+            std::string value(file_contents(_imp->dir / vars->remote_ids().name()));
+            if (! value.empty())
+            {
+                _imp->remote_ids.reset(new EPlainTextSpecKey(_imp->environment, shared_from_this(),
+                            vars->remote_ids().name(),
+                            vars->remote_ids().description(), value, mkt_internal));
+                add_metadata_key(_imp->remote_ids);
+            }
+        }
+
     if (! vars->homepage().name().empty())
         if ((_imp->dir / vars->homepage().name()).exists())
         {
@@ -582,7 +665,8 @@ EInstalledRepositoryID::short_description_key() const
 const std::tr1::shared_ptr<const MetadataValueKey<std::string> >
 EInstalledRepositoryID::long_description_key() const
 {
-    return std::tr1::shared_ptr<const MetadataValueKey<std::string> >();
+    need_keys_added();
+    return _imp->long_description;
 }
 
 const std::tr1::shared_ptr<const MetadataValueKey<std::tr1::shared_ptr<const Contents> > >
diff --git a/paludis/repositories/e/e_repository_TEST.cc b/paludis/repositories/e/e_repository_TEST.cc
index f7aa903..f78d6c8 100644
--- a/paludis/repositories/e/e_repository_TEST.cc
+++ b/paludis/repositories/e/e_repository_TEST.cc
@@ -526,6 +526,16 @@ namespace test_cases
                     TEST_CHECK(id2->run_dependencies_key());
                     id2->run_dependencies_key()->value()->accept(pr2);
                     TEST_CHECK_STRINGIFY_EQUAL(pr2, "foo/bar");
+
+                    const std::tr1::shared_ptr<const PackageID> id3(*env[selection::RequireExactlyOne(generator::Matches(
+                                    PackageDepSpec(parse_user_package_dep_spec("=cat-one/pkg-one-3",
+                                            &env, UserPackageDepSpecOptions()))))]->begin());
+
+                    TEST_CHECK(id3->end_metadata() != id3->find_metadata("EAPI"));
+                    TEST_CHECK(id3->short_description_key());
+                    TEST_CHECK_EQUAL(id3->short_description_key()->value(), "This is the short description");
+                    TEST_CHECK(id3->long_description_key());
+                    TEST_CHECK_EQUAL(id3->long_description_key()->value(), "This is the long description");
                 }
             }
         }
@@ -955,7 +965,7 @@ namespace test_cases
                                         &env, UserPackageDepSpecOptions()))))]->last());
                 TEST_CHECK(no_files_id);
                 TEST_CHECK(no_files_id->short_description_key());
-                TEST_CHECK_EQUAL(no_files_id->short_description_key()->value(), "The Description");
+                TEST_CHECK_EQUAL(no_files_id->short_description_key()->value(), "The Short Description");
                 no_files_id->perform_action(action);
             }
 
@@ -1938,7 +1948,7 @@ namespace test_cases
                                         &env, UserPackageDepSpecOptions()))))]->last());
                 TEST_CHECK(id);
                 TEST_CHECK(id->short_description_key());
-                TEST_CHECK_EQUAL(id->short_description_key()->value(), "The Description");
+                TEST_CHECK_EQUAL(id->short_description_key()->value(), "The Short Description");
                 id->perform_action(action);
             }
 
diff --git a/paludis/repositories/e/e_repository_TEST_setup.sh b/paludis/repositories/e/e_repository_TEST_setup.sh
index 3bcbe31..c14db30 100755
--- a/paludis/repositories/e/e_repository_TEST_setup.sh
+++ b/paludis/repositories/e/e_repository_TEST_setup.sh
@@ -169,6 +169,22 @@ LICENSE="GPL-2"
 KEYWORDS="test"
 DEPEND="foo/bar"
 END
+cat <<"END" > cat-one/pkg-one/pkg-one-3.ebuild || exit 1
+EAPI="exheres-0"
+SUMMARY="This is the short description"
+DESCRIPTION="This is the long description"
+HOMEPAGE="http://example.com/"
+SRC_URI=""
+SLOT="0"
+MYOPTIONS=""
+LICENSE="GPL-2"
+PLATFORMS="test"
+BUGS_TO="fred at example.com joe at example.com"
+UPSTREAM_CHANGELOG="http://example.com/foo"
+UPSTREAM_RELEASE_NOTES="http://example.com/bar"
+UPSTREAM_DOCUMENTATION="http://example.com/baz"
+REMOTE_IDS="freshmeat:fnord"
+END
 cat <<END > eclass/mine.eclass
 DEPEND="bar/baz"
 END
@@ -415,7 +431,8 @@ cat <<END > profiles/profile/make.defaults
 END
 mkdir -p packages/cat/no-files
 cat <<END > packages/cat/no-files/no-files-1.exheres-0 || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -426,7 +443,8 @@ DEPENDENCIES=""
 END
 mkdir -p packages/cat/fetched-files
 cat <<END > packages/cat/fetched-files/fetched-files-1.exheres-0 || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI="file:///var/empty/already-fetched.txt"
 SLOT="0"
@@ -437,7 +455,8 @@ DEPENDENCIES=""
 END
 mkdir -p packages/cat/fetchable-files
 cat <<END > packages/cat/fetchable-files/fetchable-files-1.exheres-0 || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI="file:///$(dirname $(pwd ) )/fetchable/fetchable-1.txt"
 SLOT="0"
@@ -448,7 +467,8 @@ DEPENDENCIES=""
 END
 mkdir -p packages/cat/arrow-files
 cat <<END > packages/cat/arrow-files/arrow-files-1.exheres-0 || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI="file:///$(dirname $(pwd ) )/fetchable/fetchable-1.txt -> arrowed.txt"
 SLOT="0"
@@ -459,7 +479,8 @@ DEPENDENCIES=""
 END
 mkdir -p packages/cat/unfetchable-files
 cat <<END > packages/cat/unfetchable-files/unfetchable-files-1.exheres-0 || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI="file:///var/empty/unfetchable-file.txt"
 SLOT="0"
@@ -470,7 +491,8 @@ DEPENDENCIES=""
 END
 mkdir -p packages/cat/no-files-restricted
 cat <<END > packages/cat/no-files-restricted/no-files-restricted-1.exheres-0 || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -481,7 +503,8 @@ DEPENDENCIES=""
 END
 mkdir -p packages/cat/fetched-files-restricted
 cat <<END > packages/cat/fetched-files-restricted/fetched-files-restricted-1.exheres-0 || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI="manual: file:///var/empty/already-fetched.txt"
 SLOT="0"
@@ -492,7 +515,8 @@ DEPENDENCIES=""
 END
 mkdir -p packages/cat/fetchable-files-restricted
 cat <<END > packages/cat/fetchable-files-restricted/fetchable-files-restricted-1.exheres-0 || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI="manual: file:///$(dirname $(pwd ) )/fetchable/fetchable-2.txt"
 SLOT="0"
@@ -1128,7 +1152,8 @@ OPTIONS="weasel spinach"
 END
 mkdir -p "packages/cat/in-ebuild-die"
 cat <<END > packages/cat/in-ebuild-die/in-ebuild-die-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1142,7 +1167,8 @@ pkg_setup() {
 END
 mkdir -p "packages/cat/in-subshell-die"
 cat <<END > packages/cat/in-subshell-die/in-subshell-die-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1156,7 +1182,8 @@ pkg_setup() {
 END
 mkdir -p "packages/cat/success"
 cat <<END > packages/cat/success/success-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1170,7 +1197,8 @@ pkg_setup() {
 END
 mkdir -p "packages/cat/expatch-success"
 cat <<"END" > packages/cat/expatch-success/expatch-success-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1188,7 +1216,8 @@ src_prepare() {
 END
 mkdir -p "packages/cat/expatch-die"
 cat <<END > packages/cat/expatch-die/expatch-die-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1202,7 +1231,8 @@ src_prepare() {
 END
 mkdir -p "packages/cat/nonfatal-expatch-fail"
 cat <<END > packages/cat/nonfatal-expatch-fail/nonfatal-expatch-fail-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1216,7 +1246,8 @@ src_prepare() {
 END
 mkdir -p "packages/cat/nonfatal-expatch-die"
 cat <<END > packages/cat/nonfatal-expatch-die/nonfatal-expatch-die-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1230,7 +1261,8 @@ src_prepare() {
 END
 mkdir -p "packages/cat/unpack-die"
 cat <<END > packages/cat/unpack-die/unpack-die-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1245,7 +1277,8 @@ src_unpack() {
 END
 mkdir -p "packages/cat/nonfatal-unpack-fail"
 cat <<END > packages/cat/nonfatal-unpack-fail/nonfatal-unpack-fail-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1260,7 +1293,8 @@ src_unpack() {
 END
 mkdir -p "packages/cat/nonfatal-unpack-die"
 cat <<END > packages/cat/nonfatal-unpack-die/nonfatal-unpack-die-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1275,7 +1309,8 @@ src_unpack() {
 END
 mkdir -p "packages/cat/econf-fail"
 cat <<END > packages/cat/econf-fail/econf-fail-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1289,7 +1324,8 @@ src_configure() {
 END
 mkdir -p "packages/cat/nonfatal-econf"
 cat <<END > packages/cat/nonfatal-econf/nonfatal-econf-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1303,7 +1339,8 @@ src_configure() {
 END
 mkdir -p "packages/cat/nonfatal-econf-die"
 cat <<END > packages/cat/nonfatal-econf-die/nonfatal-econf-die-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1317,7 +1354,8 @@ src_configure() {
 END
 mkdir -p "packages/cat/emake-fail"
 cat <<END > packages/cat/emake-fail/emake-fail-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1331,7 +1369,8 @@ src_compile() {
 END
 mkdir -p "packages/cat/nonfatal-emake"
 cat <<END > packages/cat/nonfatal-emake/nonfatal-emake-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1345,7 +1384,8 @@ src_compile() {
 END
 mkdir -p "packages/cat/nonfatal-emake-die"
 cat <<END > packages/cat/nonfatal-emake-die/nonfatal-emake-die-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1359,7 +1399,8 @@ src_compile() {
 END
 mkdir -p "packages/cat/keepdir-success"
 cat <<END > packages/cat/keepdir-success/keepdir-success-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1373,7 +1414,8 @@ src_install() {
 END
 mkdir -p "packages/cat/keepdir-fail"
 cat <<"END" > packages/cat/keepdir-fail/keepdir-fail-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1389,7 +1431,8 @@ src_install() {
 END
 mkdir -p "packages/cat/nonfatal-keepdir"
 cat <<"END" > packages/cat/nonfatal-keepdir/nonfatal-keepdir-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1405,7 +1448,8 @@ src_install() {
 END
 mkdir -p "packages/cat/nonfatal-keepdir-die"
 cat <<"END" > packages/cat/nonfatal-keepdir-die/nonfatal-keepdir-die-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1421,7 +1465,8 @@ src_install() {
 END
 mkdir -p "packages/cat/einstall-fail"
 cat <<END > packages/cat/einstall-fail/einstall-fail-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1435,7 +1480,8 @@ src_install() {
 END
 mkdir -p "packages/cat/nonfatal-einstall"
 cat <<END > packages/cat/nonfatal-einstall/nonfatal-einstall-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1449,7 +1495,8 @@ src_install() {
 END
 mkdir -p "packages/cat/nonfatal-einstall-die"
 cat <<END > packages/cat/nonfatal-einstall-die/nonfatal-einstall-die-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1463,7 +1510,8 @@ src_install() {
 END
 mkdir -p "packages/cat/dobin-success"
 cat <<END > packages/cat/dobin-success/dobin-success-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1481,7 +1529,8 @@ src_install() {
 END
 mkdir -p "packages/cat/dobin-fail"
 cat <<END > packages/cat/dobin-fail/dobin-fail-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1495,7 +1544,8 @@ src_install() {
 END
 mkdir -p "packages/cat/nonfatal-dobin-success"
 cat <<END > packages/cat/nonfatal-dobin-success/nonfatal-dobin-success-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Lnog Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1513,7 +1563,8 @@ src_install() {
 END
 mkdir -p "packages/cat/nonfatal-dobin-fail"
 cat <<END > packages/cat/nonfatal-dobin-fail/nonfatal-dobin-fail-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1527,7 +1578,8 @@ src_install() {
 END
 mkdir -p "packages/cat/nonfatal-dobin-die"
 cat <<END > packages/cat/nonfatal-dobin-die/nonfatal-dobin-die-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1541,7 +1593,8 @@ src_install() {
 END
 mkdir -p "packages/cat/fperms-success"
 cat <<END > packages/cat/fperms-success/fperms-success-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1559,7 +1612,8 @@ src_install() {
 END
 mkdir -p "packages/cat/fperms-fail"
 cat <<END > packages/cat/fperms-fail/fperms-fail-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1573,7 +1627,8 @@ src_install() {
 END
 mkdir -p "packages/cat/nonfatal-fperms-success"
 cat <<END > packages/cat/nonfatal-fperms-success/nonfatal-fperms-success-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1591,7 +1646,8 @@ src_install() {
 END
 mkdir -p "packages/cat/nonfatal-fperms-fail"
 cat <<END > packages/cat/nonfatal-fperms-fail/nonfatal-fperms-fail-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1605,7 +1661,8 @@ src_install() {
 END
 mkdir -p "packages/cat/nonfatal-fperms-die"
 cat <<END > packages/cat/nonfatal-fperms-die/nonfatal-fperms-die-1.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1619,7 +1676,8 @@ src_install() {
 END
 mkdir -p "packages/cat/best-version"
 cat <<'END' > packages/cat/best-version/best-version-0.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1662,7 +1720,8 @@ pkg_setup() {
 END
 mkdir -p "packages/cat/has-version"
 cat <<'END' > packages/cat/has-version/has-version-0.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1682,7 +1741,8 @@ pkg_setup() {
 END
 mkdir -p "packages/cat/match"
 cat <<'END' > packages/cat/match/match-0.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
@@ -1699,11 +1759,14 @@ END
 mkdir -p "packages/cat/ever"
 cat <<'END' > packages/cat/ever/ever-1.3.ebuild || exit 1
 if ever at_least 2 ; then
-    DESCRIPTION="Really Not The Description"
+    DESCRIPTION="Really Not The Long Description"
+    SUMMARY="Really Not The Short Description"
 elif ever at_least 1.2.3 ; then
-    DESCRIPTION="The Description"
+    DESCRIPTION="The Long Description"
+    SUMMARY="The Short Description"
 else
-    DESCRIPTION="Not The Description"
+    DESCRIPTION="Not The Long Description"
+    SUMMARY="Not The Short Description"
 fi
 
 HOMEPAGE="http://example.com/"
@@ -1725,7 +1788,8 @@ pkg_setup() {
 END
 mkdir -p "packages/cat/econf-phase"
 cat <<'END' > packages/cat/econf-phase/econf-phase-0.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 
 HOMEPAGE="http://example.com/"
 SRC_URI=""
@@ -1746,7 +1810,8 @@ src_compile() {
 END
 mkdir -p "packages/cat/econf-vars"
 cat <<'END' > packages/cat/econf-vars/econf-vars-0.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+DESCRIPTION="The Short Description"
 
 HOMEPAGE="http://example.com/"
 SRC_URI=""
@@ -1774,7 +1839,8 @@ END2
 END
 mkdir -p "packages/cat/expand-vars"
 cat <<"END" > packages/cat/expand-vars/expand-vars-0.ebuild || exit 1
-DESCRIPTION="The Description"
+DESCRIPTION="The Long Description"
+SUMMARY="The Short Description"
 HOMEPAGE="http://example.com/"
 SRC_URI=""
 SLOT="0"
diff --git a/paludis/repositories/e/eapi.cc b/paludis/repositories/e/eapi.cc
index cb1079f..0731e0d 100644
--- a/paludis/repositories/e/eapi.cc
+++ b/paludis/repositories/e/eapi.cc
@@ -96,22 +96,28 @@ namespace
     std::tr1::shared_ptr<const EAPIEbuildMetadataVariables> make_ebuild_metadata_variables(const KeyValueConfigFile & k)
     {
         return make_shared_ptr(new EAPIEbuildMetadataVariables(make_named_values<EAPIEbuildMetadataVariables>(
+            value_for<n::bugs_to>(make_metadata_variable(k, "bugs_to")),
             value_for<n::build_depend>(make_metadata_variable(k, "build_depend")),
             value_for<n::dependencies>(make_metadata_variable(k, "dependencies")),
-            value_for<n::description>(make_metadata_variable(k, "description")),
             value_for<n::eapi>(make_metadata_variable(k, "eapi")),
             value_for<n::homepage>(make_metadata_variable(k, "homepage")),
             value_for<n::inherited>(make_metadata_variable(k, "inherited")),
             value_for<n::iuse>(make_metadata_variable(k, "iuse")),
             value_for<n::keywords>(make_metadata_variable(k, "keywords")),
             value_for<n::license>(make_metadata_variable(k, "license")),
+            value_for<n::long_description>(make_metadata_variable(k, "long_description")),
             value_for<n::minimum_flat_cache_size>(destringify_key<int>(k, "flat_cache_minimum_size")),
             value_for<n::pdepend>(make_metadata_variable(k, "pdepend")),
             value_for<n::provide>(make_metadata_variable(k, "provide")),
+            value_for<n::remote_ids>(make_metadata_variable(k, "remote_ids")),
             value_for<n::restrictions>(make_metadata_variable(k, "restrict")),
             value_for<n::run_depend>(make_metadata_variable(k, "run_depend")),
+            value_for<n::short_description>(make_metadata_variable(k, "short_description")),
             value_for<n::slot>(make_metadata_variable(k, "slot")),
             value_for<n::src_uri>(make_metadata_variable(k, "src_uri")),
+            value_for<n::upstream_changelog>(make_metadata_variable(k, "upstream_changelog")),
+            value_for<n::upstream_documentation>(make_metadata_variable(k, "upstream_documentation")),
+            value_for<n::upstream_release_notes>(make_metadata_variable(k, "upstream_release_notes")),
             value_for<n::use>(make_metadata_variable(k, "use"))
             )));
     }
diff --git a/paludis/repositories/e/eapi.hh b/paludis/repositories/e/eapi.hh
index ad2ab88..4b808e0 100644
--- a/paludis/repositories/e/eapi.hh
+++ b/paludis/repositories/e/eapi.hh
@@ -40,6 +40,7 @@ namespace paludis
         struct binary_from_env_variables;
         struct bracket_merged_variables;
         struct breaks_portage;
+        struct bugs_to;
         struct build_depend;
         struct can_be_pbin;
         struct dependencies;
@@ -88,6 +89,7 @@ namespace paludis
         struct iuse_flag_parse_options;
         struct keywords;
         struct license;
+        struct long_description;
         struct merger_options;
         struct metadata_key;
         struct minimum_flat_cache_size;
@@ -100,6 +102,7 @@ namespace paludis
         struct pipe_commands;
         struct provide;
         struct rdepend_defaults_to_depend;
+        struct remote_ids;
         struct require_use_expand_in_iuse;
         struct restrict_fetch;
         struct restrict_mirror;
@@ -110,6 +113,7 @@ namespace paludis
         struct save_base_variables;
         struct save_unmodifiable_variables;
         struct save_variables;
+        struct short_description;
         struct slot;
         struct source_merged_variables;
         struct src_uri;
@@ -119,6 +123,9 @@ namespace paludis
         struct tools_options;
         struct unpack_fix_permissions;
         struct unpack_unrecognised_is_fatal;
+        struct upstream_changelog;
+        struct upstream_documentation;
+        struct upstream_release_notes;
         struct uri_labels;
         struct use;
         struct use_expand_separator;
@@ -233,22 +240,28 @@ namespace paludis
 
         struct EAPIEbuildMetadataVariables
         {
+            NamedValue<n::bugs_to, EAPIMetadataVariable> bugs_to;
             NamedValue<n::build_depend, EAPIMetadataVariable> build_depend;
             NamedValue<n::dependencies, EAPIMetadataVariable> dependencies;
-            NamedValue<n::description, EAPIMetadataVariable> description;
             NamedValue<n::eapi, EAPIMetadataVariable> eapi;
             NamedValue<n::homepage, EAPIMetadataVariable> homepage;
             NamedValue<n::inherited, EAPIMetadataVariable> inherited;
             NamedValue<n::iuse, EAPIMetadataVariable> iuse;
             NamedValue<n::keywords, EAPIMetadataVariable> keywords;
             NamedValue<n::license, EAPIMetadataVariable> license;
+            NamedValue<n::long_description, EAPIMetadataVariable> long_description;
             NamedValue<n::minimum_flat_cache_size, int> minimum_flat_cache_size;
             NamedValue<n::pdepend, EAPIMetadataVariable> pdepend;
             NamedValue<n::provide, EAPIMetadataVariable> provide;
+            NamedValue<n::remote_ids, EAPIMetadataVariable> remote_ids;
             NamedValue<n::restrictions, EAPIMetadataVariable> restrictions;
             NamedValue<n::run_depend, EAPIMetadataVariable> run_depend;
+            NamedValue<n::short_description, EAPIMetadataVariable> short_description;
             NamedValue<n::slot, EAPIMetadataVariable> slot;
             NamedValue<n::src_uri, EAPIMetadataVariable> src_uri;
+            NamedValue<n::upstream_changelog, EAPIMetadataVariable> upstream_changelog;
+            NamedValue<n::upstream_documentation, EAPIMetadataVariable> upstream_documentation;
+            NamedValue<n::upstream_release_notes, EAPIMetadataVariable> upstream_release_notes;
             NamedValue<n::use, EAPIMetadataVariable> use;
         };
 
diff --git a/paludis/repositories/e/eapis/0.conf b/paludis/repositories/e/eapis/0.conf
index 33faa29..5c38dd1 100644
--- a/paludis/repositories/e/eapis/0.conf
+++ b/paludis/repositories/e/eapis/0.conf
@@ -126,7 +126,7 @@ ebuild_config = \
     : tidyupmisc
 
 description_build_depend = Build dependencies
-description_description = Description
+description_short_description = Description
 description_eapi = EAPI
 description_homepage = Homepage
 description_inherited = Inherited
@@ -143,7 +143,7 @@ description_use =
 description_dependencies =
 
 metadata_build_depend = DEPEND
-metadata_description = DESCRIPTION
+metadata_short_description = DESCRIPTION
 metadata_eapi = EAPI
 metadata_homepage = HOMEPAGE
 metadata_inherited = INHERITED
@@ -161,7 +161,8 @@ metadata_dependencies =
 
 flat_cache_minimum_size = 15
 flat_cache_build_depend = 0
-flat_cache_description = 7
+flat_cache_short_description = 7
+flat_cache_long_description = -1
 flat_cache_eapi = 14
 flat_cache_dependencies = -1
 flat_cache_homepage = 5
@@ -176,6 +177,11 @@ flat_cache_run_depend = 1
 flat_cache_slot = 2
 flat_cache_src_uri = 3
 flat_cache_use = -1
+flat_cache_bugs_to = -1
+flat_cache_remote_ids = -1
+flat_cache_upstream_changelog = -1
+flat_cache_upstream_release_notes = -1
+flat_cache_upstream_documentation = -1
 
 env_use = USE
 env_use_expand = USE_EXPAND
diff --git a/paludis/repositories/e/eapis/exheres-0.conf b/paludis/repositories/e/eapis/exheres-0.conf
index dfa1d43..0b0d9a9 100644
--- a/paludis/repositories/e/eapis/exheres-0.conf
+++ b/paludis/repositories/e/eapis/exheres-0.conf
@@ -25,7 +25,7 @@ ignore_pivot_env_functions =
 ignore_pivot_env_variables =
 
 vdb_from_env_variables = \
-    CATEGORY CHOST DEPENDENCIES DESCRIPTION EAPI \
+    CATEGORY CHOST DEPENDENCIES SUMMARY EAPI \
     HOMEPAGE INHERITED MYOPTIONS PLATFORMS LICENSE PF \
     SLOT SRC_URI OPTIONS CONFIG_PROTECT CONFIG_PROTECT_MASK \
     VDB_FORMAT PKGMANAGER SUBOPTIONS
@@ -33,14 +33,16 @@ vdb_from_env_variables = \
 vdb_from_env_unless_empty_variables = \
     ASFLAGS CBUILD CC CFLAGS CHOST CTARGET CXX CXXFLAGS \
     EXTRA_ECONF EXTRA_EINSTALL EXTRA_EMAKE LDFLAGS LIBCXXFLAGS \
-    REPOSITORY RESTRICT
+    REPOSITORY RESTRICT BUGS_TO REMOTE_IDS UPSTREAM_CHANGELOG \
+    UPSTREAM_RELEASE_NOTES UPSTREAM_DOCUMENTATION DESCRIPTION
 
 binary_from_env_variables = \
     CHOST DEPENDENCIES DESCRIPTION EAPI HOMEPAGE INHERITED MYOPTIONS PLATFORMS LICENSE \
     SLOT SRC_URI OPTIONS GENERATED_USING GENERATED_TIME SUBOPTIONS \
     ASFLAGS CBUILD CC CFLAGS CHOST CTARGET CXX CXXFLAGS \
     EXTRA_ECONF EXTRA_EINSTALL EXTRA_EMAKE LDFLAGS LIBCXXFLAGS \
-    GENERATED_FROM_REPOSITORY PLATFORMS BINARY_PLATFORMS
+    GENERATED_FROM_REPOSITORY PLATFORMS BINARY_PLATFORMS \
+    SUMMARY BUGS_TO REMOTE_IDS UPSTREAM_CHANGELOG UPSTREAM_RELEASE_NOTES UPSTREAM_DOCUMENTATION
 
 non_empty_variables = \
     P PV PR PN PVR PF CATEGORY build:FILESDIR build:EXLIBSDIRS build:FETCHEDDIR build:REPODIR \
@@ -137,7 +139,8 @@ metadata_src_uri = SRC_URI
 metadata_restrict = RESTRICT
 metadata_homepage = HOMEPAGE
 metadata_license = LICENSE
-metadata_description = DESCRIPTION
+metadata_short_description = SUMMARY
+metadata_long_description = DESCRIPTION
 metadata_keywords = PLATFORMS
 metadata_inherited = INHERITED
 metadata_iuse = MYOPTIONS
@@ -146,9 +149,15 @@ metadata_provide =
 metadata_eapi = EAPI
 metadata_dependencies = DEPENDENCIES
 metadata_use =
+metadata_bugs_to = BUGS_TO
+metadata_remote_ids = REMOTE_IDS
+metadata_upstream_changelog = UPSTREAM_CHANGELOG
+metadata_upstream_release_notes = UPSTREAM_RELEASE_NOTES
+metadata_upstream_documentation = UPSTREAM_DOCUMENTATION
 
 description_build_depend =
-description_description = Description
+description_short_description = Summary
+description_long_description = Description
 description_eapi = EAPI
 description_homepage = Homepage
 description_inherited = Inherited
@@ -163,10 +172,16 @@ description_slot = Slot
 description_src_uri = Source URI
 description_use = Selected option flags
 description_dependencies = Dependencies
+description_bugs_to = Bugs to
+description_remote_ids = Remote IDs
+description_upstream_changelog = Upstream changelog
+description_upstream_release_notes = Upstream release notes
+description_upstream_documentation = Upstream documentation
 
-flat_cache_minimum_size = 15
+flat_cache_minimum_size = 18
 flat_cache_build_depend = -1
-flat_cache_description = 7
+flat_cache_short_description = 7
+flat_cache_long_description = 11
 flat_cache_eapi = 14
 flat_cache_dependencies = 1
 flat_cache_homepage = 5
@@ -181,6 +196,11 @@ flat_cache_run_depend = -1
 flat_cache_slot = 2
 flat_cache_src_uri = 3
 flat_cache_use = -1
+flat_cache_bugs_to = 12
+flat_cache_remote_ids = 13
+flat_cache_upstream_changelog = 15
+flat_cache_upstream_release_notes = 16
+flat_cache_upstream_documentation = 17
 
 env_use = OPTIONS
 env_use_expand = SUBOPTIONS
diff --git a/paludis/repositories/e/eapis/paludis-1.conf b/paludis/repositories/e/eapis/paludis-1.conf
index 5559de5..4a8f066 100644
--- a/paludis/repositories/e/eapis/paludis-1.conf
+++ b/paludis/repositories/e/eapis/paludis-1.conf
@@ -166,7 +166,8 @@ description_dependencies =
 
 flat_cache_minimum_size = 15
 flat_cache_build_depend = 0
-flat_cache_description = 7
+flat_cache_short_description = 7
+flat_cache_long_description = -1
 flat_cache_eapi = 14
 flat_cache_dependencies = -1
 flat_cache_homepage = 5
@@ -181,6 +182,12 @@ flat_cache_run_depend = 1
 flat_cache_slot = 2
 flat_cache_src_uri = 3
 flat_cache_use = -1
+flat_cache_use = -1
+flat_cache_bugs_to = -1
+flat_cache_remote_ids = -1
+flat_cache_upstream_changelog = -1
+flat_cache_upstream_release_notes = -1
+flat_cache_upstream_documentation = -1
 
 env_use = USE
 env_use_expand = USE_EXPAND
diff --git a/paludis/repositories/e/ebuild.cc b/paludis/repositories/e/ebuild.cc
index ac46393..70c4dc6 100644
--- a/paludis/repositories/e/ebuild.cc
+++ b/paludis/repositories/e/ebuild.cc
@@ -392,9 +392,15 @@ EbuildMetadataCommand::load(const std::tr1::shared_ptr<const EbuildID> & id)
 
     const EAPIEbuildMetadataVariables & m(*id->eapi()->supported()->ebuild_metadata_variables());
 
-    if (! m.description().name().empty())
-        id->load_short_description(m.description().name(), m.description().description(), get(keys, m.description().name()));
+    if (! m.short_description().name().empty())
+        id->load_short_description(m.short_description().name(), m.short_description().description(), get(keys, m.short_description().name()));
 
+    if (! m.long_description().name().empty())
+    {
+        std::string value(get(keys, m.long_description().name()));
+        if (! value.empty())
+            id->load_long_description(m.long_description().name(), m.long_description().description(), value);
+    }
 
     if (! m.dependencies().name().empty())
     {
@@ -469,6 +475,41 @@ EbuildMetadataCommand::load(const std::tr1::shared_ptr<const EbuildID> & id)
 
     if (! m.use().name().empty())
         id->load_use(m.use().name(), m.use().description(), get(keys, m.use().name()));
+
+    if (! m.upstream_changelog().name().empty())
+    {
+        std::string value(get(keys, m.upstream_changelog().name()));
+        if (! value.empty())
+            id->load_upstream_changelog(m.upstream_changelog().name(), m.upstream_changelog().description(), value);
+    }
+
+    if (! m.upstream_documentation().name().empty())
+    {
+        std::string value(get(keys, m.upstream_documentation().name()));
+        if (! value.empty())
+            id->load_upstream_documentation(m.upstream_documentation().name(), m.upstream_documentation().description(), value);
+    }
+
+    if (! m.upstream_release_notes().name().empty())
+    {
+        std::string value(get(keys, m.upstream_release_notes().name()));
+        if (! value.empty())
+            id->load_upstream_release_notes(m.upstream_release_notes().name(), m.upstream_release_notes().description(), value);
+    }
+
+    if (! m.bugs_to().name().empty())
+    {
+        std::string value(get(keys, m.bugs_to().name()));
+        if (! value.empty())
+            id->load_bugs_to(m.bugs_to().name(), m.bugs_to().description(), value);
+    }
+
+    if (! m.remote_ids().name().empty())
+    {
+        std::string value(get(keys, m.remote_ids().name()));
+        if (! value.empty())
+            id->load_remote_ids(m.remote_ids().name(), m.remote_ids().description(), value);
+    }
 }
 
 EbuildVariableCommand::EbuildVariableCommand(const EbuildCommandParams & p,
diff --git a/paludis/repositories/e/ebuild/ebuild.bash b/paludis/repositories/e/ebuild/ebuild.bash
index 78a00ee..60dffe4 100755
--- a/paludis/repositories/e/ebuild/ebuild.bash
+++ b/paludis/repositories/e/ebuild/ebuild.bash
@@ -31,7 +31,9 @@ EBUILD_METADATA_VARIABLES="DEPEND RDEPEND PDEPEND IUSE SRC_URI RESTRICT \
     LICENSE KEYWORDS INHERITED PROVIDE HOMEPAGE DESCRIPTION DEPENDENCIES \
     E_IUSE E_DEPEND E_RDEPEND E_PDEPEND PLATFORMS \
     MYOPTIONS E_MYOPTIONS E_DEPENDENCIES BINARY_KEYWORDS BINARY_URI \
-    GENERATED_USING GENERATED_TIME BINARY_PLATFORMS"
+    GENERATED_USING GENERATED_TIME BINARY_PLATFORMS REMOTE_IDS \
+    SUMMARY BUGS_TO UPSTREAM_DOCUMENTATION UPSTREAM_CHANGELOG \
+    UPSTREAM_RELEASE_NOTES"
 unset -v ${EBUILD_METADATA_VARIABLES} ${PALUDIS_EBUILD_MUST_NOT_SET_VARIABLES}
 # These can be set by C++
 EBUILD_METADATA_VARIABLES="${EBUILD_METADATA_VARIABLES} SLOT EAPI OPTIONS USE"
diff --git a/paludis/repositories/e/ebuild_flat_metadata_cache.cc b/paludis/repositories/e/ebuild_flat_metadata_cache.cc
index f0ce4ef..0ad3366 100644
--- a/paludis/repositories/e/ebuild_flat_metadata_cache.cc
+++ b/paludis/repositories/e/ebuild_flat_metadata_cache.cc
@@ -132,9 +132,20 @@ EbuildFlatMetadataCache::load(const std::tr1::shared_ptr<const EbuildID> & id)
                             if (! m.license().name().empty())
                                 id->load_license(m.license().name(), m.license().description(), lines.at(m.license().flat_cache_index()));
 
-                        if (-1 != m.description().flat_cache_index())
-                            if (! m.description().name().empty())
-                                id->load_short_description(m.description().name(), m.description().description(), lines.at(m.description().flat_cache_index()));
+                        if (-1 != m.short_description().flat_cache_index())
+                            if (! m.short_description().name().empty())
+                                id->load_short_description(m.short_description().name(),
+                                        m.short_description().description(),
+                                        lines.at(m.short_description().flat_cache_index()));
+
+                        if (-1 != m.long_description().flat_cache_index())
+                            if (! m.long_description().name().empty())
+                            {
+                                std::string value(lines.at(m.long_description().flat_cache_index()));
+                                if (! value.empty())
+                                    id->load_long_description(m.long_description().name(),
+                                            m.long_description().description(), value);
+                            }
 
                         if (-1 != m.keywords().flat_cache_index())
                             if (! m.keywords().name().empty())
@@ -159,6 +170,51 @@ EbuildFlatMetadataCache::load(const std::tr1::shared_ptr<const EbuildID> & id)
                         if (-1 != m.use().flat_cache_index())
                             if (! m.use().name().empty())
                                 id->load_use(m.use().name(), m.use().description(), lines.at(m.use().flat_cache_index()));
+
+                        if (-1 != m.upstream_changelog().flat_cache_index())
+                            if (! m.upstream_changelog().name().empty())
+                            {
+                                std::string value(lines.at(m.upstream_changelog().flat_cache_index()));
+                                if (! value.empty())
+                                    id->load_upstream_changelog(m.upstream_changelog().name(),
+                                            m.upstream_changelog().description(), value);
+                            }
+
+                        if (-1 != m.upstream_documentation().flat_cache_index())
+                            if (! m.upstream_documentation().name().empty())
+                            {
+                                std::string value(lines.at(m.upstream_documentation().flat_cache_index()));
+                                if (! value.empty())
+                                    id->load_upstream_documentation(m.upstream_documentation().name(),
+                                            m.upstream_documentation().description(), value);
+                            }
+
+                        if (-1 != m.upstream_release_notes().flat_cache_index())
+                            if (! m.upstream_release_notes().name().empty())
+                            {
+                                std::string value(lines.at(m.upstream_release_notes().flat_cache_index()));
+                                if (! value.empty())
+                                    id->load_upstream_release_notes(m.upstream_release_notes().name(),
+                                            m.upstream_release_notes().description(), value);
+                            }
+
+                        if (-1 != m.bugs_to().flat_cache_index())
+                            if (! m.bugs_to().name().empty())
+                            {
+                                std::string value(lines.at(m.bugs_to().flat_cache_index()));
+                                if (! value.empty())
+                                    id->load_bugs_to(m.bugs_to().name(),
+                                            m.bugs_to().description(), value);
+                            }
+
+                        if (-1 != m.remote_ids().flat_cache_index())
+                            if (! m.remote_ids().name().empty())
+                            {
+                                std::string value(lines.at(m.remote_ids().flat_cache_index()));
+                                if (! value.empty())
+                                    id->load_remote_ids(m.remote_ids().name(),
+                                            m.remote_ids().description(), value);
+                            }
                     }
                 }
                 else
@@ -311,7 +367,7 @@ EbuildFlatMetadataCache::save(const std::tr1::shared_ptr<const EbuildID> & id)
                 else
                     cache << std::endl;
             }
-            else if (x == m.description().flat_cache_index())
+            else if (x == m.short_description().flat_cache_index())
             {
                 if (id->short_description_key())
                     cache << normalise(id->short_description_key()->value()) << std::endl;
@@ -357,6 +413,48 @@ EbuildFlatMetadataCache::save(const std::tr1::shared_ptr<const EbuildID> & id)
             {
                 cache << normalise(id->eapi()->name()) << std::endl;
             }
+            else if (x == m.long_description().flat_cache_index())
+            {
+                if (id->long_description_key())
+                    cache << normalise(id->long_description_key()->value()) << std::endl;
+                else
+                    cache << std::endl;
+            }
+            else if (x == m.bugs_to().flat_cache_index())
+            {
+                if (id->bugs_to_key())
+                    cache << flatten(id->bugs_to_key()->value()) << std::endl;
+                else
+                    cache << std::endl;
+            }
+            else if (x == m.remote_ids().flat_cache_index())
+            {
+                if (id->remote_ids_key())
+                    cache << flatten(id->remote_ids_key()->value()) << std::endl;
+                else
+                    cache << std::endl;
+            }
+            else if (x == m.upstream_changelog().flat_cache_index())
+            {
+                if (id->upstream_changelog_key())
+                    cache << flatten(id->upstream_changelog_key()->value()) << std::endl;
+                else
+                    cache << std::endl;
+            }
+            else if (x == m.upstream_documentation().flat_cache_index())
+            {
+                if (id->upstream_documentation_key())
+                    cache << flatten(id->upstream_documentation_key()->value()) << std::endl;
+                else
+                    cache << std::endl;
+            }
+            else if (x == m.upstream_release_notes().flat_cache_index())
+            {
+                if (id->upstream_release_notes_key())
+                    cache << flatten(id->upstream_release_notes_key()->value()) << std::endl;
+                else
+                    cache << std::endl;
+            }
             else
                 cache << std::endl;
         }
diff --git a/paludis/repositories/e/ebuild_id.cc b/paludis/repositories/e/ebuild_id.cc
index c0d19e9..511e52e 100644
--- a/paludis/repositories/e/ebuild_id.cc
+++ b/paludis/repositories/e/ebuild_id.cc
@@ -74,6 +74,7 @@ namespace paludis
 
         mutable std::tr1::shared_ptr<const LiteralMetadataValueKey<FSEntry> > fs_location;
         mutable std::tr1::shared_ptr<const LiteralMetadataValueKey<std::string> > short_description;
+        mutable std::tr1::shared_ptr<const LiteralMetadataValueKey<std::string> > long_description;
         mutable std::tr1::shared_ptr<const EDependenciesKey> build_dependencies;
         mutable std::tr1::shared_ptr<const EDependenciesKey> run_dependencies;
         mutable std::tr1::shared_ptr<const EDependenciesKey> post_dependencies;
@@ -88,6 +89,11 @@ namespace paludis
         mutable std::tr1::shared_ptr<const EUseKey> use;
         mutable std::tr1::shared_ptr<EMutableRepositoryMaskInfoKey> repository_mask;
         mutable std::tr1::shared_ptr<EMutableRepositoryMaskInfoKey> profile_mask;
+        mutable std::tr1::shared_ptr<const EPlainTextSpecKey> remote_ids;
+        mutable std::tr1::shared_ptr<const EPlainTextSpecKey> bugs_to;
+        mutable std::tr1::shared_ptr<const ESimpleURIKey> upstream_changelog;
+        mutable std::tr1::shared_ptr<const ESimpleURIKey> upstream_documentation;
+        mutable std::tr1::shared_ptr<const ESimpleURIKey> upstream_release_notes;
 
         std::tr1::shared_ptr<DependencyLabelSequence> build_dependencies_labels;
         std::tr1::shared_ptr<DependencyLabelSequence> run_dependencies_labels;
@@ -571,7 +577,8 @@ EbuildID::short_description_key() const
 const std::tr1::shared_ptr<const MetadataValueKey<std::string> >
 EbuildID::long_description_key() const
 {
-    return std::tr1::shared_ptr<const MetadataValueKey<std::string> >();
+    need_keys_added();
+    return _imp->long_description;
 }
 
 const std::tr1::shared_ptr<const MetadataValueKey<std::tr1::shared_ptr<const Contents> > >
@@ -654,6 +661,14 @@ EbuildID::load_short_description(const std::string & r, const std::string & h, c
 }
 
 void
+EbuildID::load_long_description(const std::string & r, const std::string & h, const std::string & v) const
+{
+    Lock l(_imp->mutex);
+    _imp->long_description.reset(new LiteralMetadataValueKey<std::string> (r, h, mkt_normal, v));
+    add_metadata_key(_imp->long_description);
+}
+
+void
 EbuildID::load_build_depend(const std::string & r, const std::string & h, const std::string & v) const
 {
     Lock l(_imp->mutex);
@@ -752,6 +767,46 @@ EbuildID::load_inherited(const std::string & r, const std::string & h, const std
     add_metadata_key(_imp->inherited);
 }
 
+void
+EbuildID::load_upstream_changelog(const std::string & r, const std::string & h, const std::string & v) const
+{
+    Lock l(_imp->mutex);
+    _imp->upstream_changelog.reset(new ESimpleURIKey(_imp->environment, shared_from_this(), r, h, v, mkt_normal));
+    add_metadata_key(_imp->upstream_changelog);
+}
+
+void
+EbuildID::load_upstream_documentation(const std::string & r, const std::string & h, const std::string & v) const
+{
+    Lock l(_imp->mutex);
+    _imp->upstream_documentation.reset(new ESimpleURIKey(_imp->environment, shared_from_this(), r, h, v, mkt_normal));
+    add_metadata_key(_imp->upstream_documentation);
+}
+
+void
+EbuildID::load_upstream_release_notes(const std::string & r, const std::string & h, const std::string & v) const
+{
+    Lock l(_imp->mutex);
+    _imp->upstream_release_notes.reset(new ESimpleURIKey(_imp->environment, shared_from_this(), r, h, v, mkt_normal));
+    add_metadata_key(_imp->upstream_release_notes);
+}
+
+void
+EbuildID::load_bugs_to(const std::string & r, const std::string & h, const std::string & v) const
+{
+    Lock l(_imp->mutex);
+    _imp->bugs_to.reset(new EPlainTextSpecKey(_imp->environment, shared_from_this(), r, h, v, mkt_normal));
+    add_metadata_key(_imp->bugs_to);
+}
+
+void
+EbuildID::load_remote_ids(const std::string & r, const std::string & h, const std::string & v) const
+{
+    Lock l(_imp->mutex);
+    _imp->remote_ids.reset(new EPlainTextSpecKey(_imp->environment, shared_from_this(), r, h, v, mkt_internal));
+    add_metadata_key(_imp->remote_ids);
+}
+
 namespace
 {
     struct SupportsActionQuery :
@@ -906,3 +961,38 @@ EbuildID::contained_in_key() const
     return std::tr1::shared_ptr<const MetadataValueKey<std::tr1::shared_ptr<const PackageID> > >();
 }
 
+const std::tr1::shared_ptr<const MetadataSpecTreeKey<PlainTextSpecTree> >
+EbuildID::remote_ids_key() const
+{
+    need_keys_added();
+    return _imp->remote_ids;
+}
+
+const std::tr1::shared_ptr<const MetadataSpecTreeKey<PlainTextSpecTree> >
+EbuildID::bugs_to_key() const
+{
+    need_keys_added();
+    return _imp->bugs_to;
+}
+
+const std::tr1::shared_ptr<const MetadataSpecTreeKey<SimpleURISpecTree> >
+EbuildID::upstream_changelog_key() const
+{
+    need_keys_added();
+    return _imp->upstream_changelog;
+}
+
+const std::tr1::shared_ptr<const MetadataSpecTreeKey<SimpleURISpecTree> >
+EbuildID::upstream_documentation_key() const
+{
+    need_keys_added();
+    return _imp->upstream_documentation;
+}
+
+const std::tr1::shared_ptr<const MetadataSpecTreeKey<SimpleURISpecTree> >
+EbuildID::upstream_release_notes_key() const
+{
+    need_keys_added();
+    return _imp->upstream_release_notes;
+}
+
diff --git a/paludis/repositories/e/ebuild_id.hh b/paludis/repositories/e/ebuild_id.hh
index a09c871..df76ca4 100644
--- a/paludis/repositories/e/ebuild_id.hh
+++ b/paludis/repositories/e/ebuild_id.hh
@@ -89,6 +89,12 @@ namespace paludis
 
                 virtual const std::tr1::shared_ptr<const MetadataValueKey<bool> > transient_key() const;
 
+                const std::tr1::shared_ptr<const MetadataSpecTreeKey<PlainTextSpecTree> > remote_ids_key() const;
+                const std::tr1::shared_ptr<const MetadataSpecTreeKey<PlainTextSpecTree> > bugs_to_key() const;
+                const std::tr1::shared_ptr<const MetadataSpecTreeKey<SimpleURISpecTree> > upstream_changelog_key() const;
+                const std::tr1::shared_ptr<const MetadataSpecTreeKey<SimpleURISpecTree> > upstream_documentation_key() const;
+                const std::tr1::shared_ptr<const MetadataSpecTreeKey<SimpleURISpecTree> > upstream_release_notes_key() const;
+
                 virtual bool arbitrary_less_than_comparison(const PackageID &) const
                     PALUDIS_ATTRIBUTE((warn_unused_result));
 
@@ -113,6 +119,12 @@ namespace paludis
                 void load_inherited(const std::string &, const std::string &, const std::string &) const;
                 void load_keywords(const std::string &, const std::string &, const std::string &) const;
                 void load_restrict(const std::string &, const std::string &, const std::string &) const;
+                void load_long_description(const std::string &, const std::string &, const std::string &) const;
+                void load_upstream_changelog(const std::string &, const std::string &, const std::string &) const;
+                void load_upstream_documentation(const std::string &, const std::string &, const std::string &) const;
+                void load_upstream_release_notes(const std::string &, const std::string &, const std::string &) const;
+                void load_bugs_to(const std::string &, const std::string &, const std::string &) const;
+                void load_remote_ids(const std::string &, const std::string &, const std::string &) const;
 
                 virtual bool supports_action(const SupportsActionTestBase &) const PALUDIS_ATTRIBUTE((warn_unused_result));
                 virtual void perform_action(Action &) const;
---


More information about the paludis-commits mailing list