This is the mail archive of the
cygwin-apps
mailing list for the Cygwin project.
[PATCH setup 01/14] Opaque how PackageDepends is stored
- From: Jon Turney <jon dot turney at dronecode dot org dot uk>
- To: cygwin-apps at cygwin dot com
- Cc: Jon Turney <jon dot turney at dronecode dot org dot uk>
- Date: Wed, 31 May 2017 11:50:02 +0100
- Subject: [PATCH setup 01/14] Opaque how PackageDepends is stored
- Authentication-results: sourceware.org; auth=none
- References: <20170531105015.162228-1-jon.turney@dronecode.org.uk>
We want to be more opaque about how the PackageDepends for a packageversion
is stored, so rather than exposing a pointer to a PackageDepends object
inside class packageversion, access it by value.
This also makes us be more explicit about set/get of package depends()
Fix some iterations to deal with depends() returning a value rather than a
pointer.
Also adjust dumpPackageDepends() appropriately
Also remove useless debug showing the dependency list before we build it.
---
IniDBBuilderPackage.cc | 30 ++++++++++++------------------
IniDBBuilderPackage.h | 2 +-
package_db.cc | 10 ++++++----
package_depends.cc | 19 ++++++++-----------
package_depends.h | 2 +-
package_meta.cc | 11 ++++-------
package_version.cc | 10 +++++-----
package_version.h | 5 ++---
prereq.cc | 4 ++--
9 files changed, 41 insertions(+), 52 deletions(-)
diff --git a/IniDBBuilderPackage.cc b/IniDBBuilderPackage.cc
index ad1cc88..0e1be78 100644
--- a/IniDBBuilderPackage.cc
+++ b/IniDBBuilderPackage.cc
@@ -34,7 +34,7 @@
using namespace std;
IniDBBuilderPackage::IniDBBuilderPackage (IniParseFeedback const &aFeedback) :
-cp (0), cbpv (), cspv (), currentSpec (0), currentNodeList (0), trust (0), _feedback (aFeedback){}
+cp (0), cbpv (), cspv (), currentSpec (0), trust (0), _feedback (aFeedback){}
IniDBBuilderPackage::~IniDBBuilderPackage()
{
@@ -92,7 +92,7 @@ IniDBBuilderPackage::buildPackage (const std::string& name)
cbpv = cygpackage::createInstance (name, package_binary);
cspv = packageversion ();
currentSpec = NULL;
- currentNodeList = NULL;
+ currentNodeList = PackageDepends();
trust = TRUST_CURR;
#if DEBUG
Log (LOG_BABBLE) << "Created package " << name << endLog;
@@ -231,12 +231,10 @@ void
IniDBBuilderPackage::buildBeginDepends ()
{
#if DEBUG
- Log (LOG_BABBLE) << "Beginning of a depends statement for " << cp->name
- << endLog;
- dumpPackageDepends (currentNodeList, Log (LOG_BABBLE));
+ Log (LOG_BABBLE) << "Beginning of a depends statement " << endLog;
#endif
currentSpec = NULL;
- currentNodeList = cbpv.depends();
+ currentNodeList = PackageDepends();
}
void
@@ -246,7 +244,7 @@ IniDBBuilderPackage::buildBeginBuildDepends ()
Log (LOG_BABBLE) << "Beginning of a Build-Depends statement" << endLog;
#endif
currentSpec = NULL;
- currentNodeList = NULL; /* there is currently nowhere to store Build-Depends information */
+ currentNodeList = PackageDepends(); /* there is currently nowhere to store Build-Depends information */
}
void
@@ -287,14 +285,11 @@ IniDBBuilderPackage::buildSourceNameVersion (const std::string& version)
void
IniDBBuilderPackage::buildPackageListNode (const std::string & name)
{
- if (currentNodeList)
- {
#if DEBUG
- Log (LOG_BABBLE) << "New node '" << name << "' for package list" << endLog;
+ Log (LOG_BABBLE) << "New node '" << name << "' for package list" << endLog;
#endif
- currentSpec = new PackageSpecification (name);
- currentNodeList->push_back (currentSpec);
- }
+ currentSpec = new PackageSpecification (name);
+ currentNodeList.push_back (currentSpec);
}
void
@@ -337,8 +332,7 @@ IniDBBuilderPackage::buildPackageListOperatorVersion (const std::string& aVersio
void
IniDBBuilderPackage::add_correct_version()
{
- if (currentNodeList)
- *cbpv.depends() = *currentNodeList;
+ cbpv.setDepends(currentNodeList);
int merged = 0;
for (set<packageversion>::iterator n = cp->versions.begin();
@@ -362,11 +356,11 @@ IniDBBuilderPackage::add_correct_version()
ver.set_sdesc (cbpv.SDesc ());
if (cbpv.LDesc ().size() && !n->LDesc ().size())
ver.set_ldesc (cbpv.LDesc ());
- if (cbpv.depends()->size() && !ver.depends ()->size())
- *ver.depends() = *cbpv.depends();
+ if (cbpv.depends().size() && !ver.depends().size())
+ ver.setDepends(cbpv.depends());
/* TODO: other package lists */
/* Prevent dangling references */
- currentNodeList = NULL;
+ currentNodeList = PackageDepends();
currentSpec = NULL;
cbpv = *n;
merged = 1;
diff --git a/IniDBBuilderPackage.h b/IniDBBuilderPackage.h
index 766a5ef..dee65d4 100644
--- a/IniDBBuilderPackage.h
+++ b/IniDBBuilderPackage.h
@@ -79,7 +79,7 @@ private:
packagemeta *csp;
packageversion cspv;
PackageSpecification *currentSpec;
- PackageDepends *currentNodeList;
+ PackageDepends currentNodeList;
int trust;
IniParseFeedback const &_feedback;
};
diff --git a/package_db.cc b/package_db.cc
index dbec17e..00395d3 100644
--- a/package_db.cc
+++ b/package_db.cc
@@ -312,8 +312,9 @@ ConnectedLoopFinder::visit(packagemeta *nodeToVisit)
nodesInStronglyConnectedComponent.push(nodeToVisit);
/* walk through each node */
- PackageDepends::const_iterator dp = nodeToVisit->installed.depends()->begin();
- while (dp != nodeToVisit->installed.depends()->end())
+ const PackageDepends deps = nodeToVisit->installed.depends();
+ PackageDepends::const_iterator dp = deps.begin();
+ while (dp != deps.end())
{
/* check for an installed match */
if (checkForInstalled (*dp))
@@ -489,8 +490,9 @@ packagedb::guessUserPicked()
continue;
/* walk through each node */
- std::vector <PackageSpecification *>::const_iterator dp = pkgm.installed.depends()->begin();
- while (dp != pkgm.installed.depends()->end())
+ const PackageDepends deps = pkgm.installed.depends();
+ std::vector <PackageSpecification *>::const_iterator dp = deps.begin();
+ while (dp != deps.end())
{
/* check for an installed match */
if (checkForInstalled(*dp))
diff --git a/package_depends.cc b/package_depends.cc
index e288c0b..a03f5a0 100644
--- a/package_depends.cc
+++ b/package_depends.cc
@@ -15,19 +15,16 @@
#include <LogSingleton.h>
void
-dumpPackageDepends (PackageDepends const *currentList,
+dumpPackageDepends (PackageDepends const ¤tList,
std::ostream &logger)
{
- if (currentList)
+ Log (LOG_BABBLE) << "( ";
+ PackageDepends::const_iterator i = currentList.begin();
+ while (true)
{
- Log (LOG_BABBLE) << "( ";
- PackageDepends::const_iterator i = currentList->begin();
- while (true)
- {
- if (i == currentList->end()) break;
- Log (LOG_BABBLE) << **i << " ";
- ++i;
- }
- Log (LOG_BABBLE) << ")";
+ if (i == currentList.end()) break;
+ Log (LOG_BABBLE) << **i << " ";
+ ++i;
}
+ Log (LOG_BABBLE) << ")";
}
diff --git a/package_depends.h b/package_depends.h
index af3fa01..36f7f6f 100644
--- a/package_depends.h
+++ b/package_depends.h
@@ -19,6 +19,6 @@
typedef std::vector <PackageSpecification *> PackageDepends;
-void dumpPackageDepends (PackageDepends const *currentList, std::ostream &);
+void dumpPackageDepends (PackageDepends const ¤tList, std::ostream &);
#endif // PACKAGE_DEPENDS_H
diff --git a/package_meta.cc b/package_meta.cc
index b35b554..1f548e2 100644
--- a/package_meta.cc
+++ b/package_meta.cc
@@ -560,13 +560,10 @@ packagemeta::logAllVersions () const
{
Log (LOG_BABBLE) << " [" << trustLabel(*i) <<
"] ver=" << i->Canonical_version() << endLog;
- if (i->depends()->size())
- {
- std::ostream & logger = Log (LOG_BABBLE);
- logger << " depends=";
- dumpPackageDepends(i->depends(), logger);
- logger << endLog;
- }
+ std::ostream & logger = Log (LOG_BABBLE);
+ logger << " depends=";
+ dumpPackageDepends(i->depends(), logger);
+ logger << endLog;
}
#if 0
Log (LOG_BABBLE) << " inst=" << i->
diff --git a/package_version.cc b/package_version.cc
index f022e70..7005850 100644
--- a/package_version.cc
+++ b/package_version.cc
@@ -229,16 +229,16 @@ packageversion::setSourcePackageSpecification (PackageSpecification const &spec)
data->setSourcePackageSpecification(spec);
}
-PackageDepends *
-packageversion::depends()
+void
+packageversion::setDepends(const PackageDepends _depends)
{
- return &data->depends;
+ data->depends = _depends;
}
-const PackageDepends *
+const PackageDepends
packageversion::depends() const
{
- return &data->depends;
+ return data->depends;
}
bool
diff --git a/package_version.h b/package_version.h
index d70eda0..c26593a 100644
--- a/package_version.h
+++ b/package_version.h
@@ -110,9 +110,8 @@ public:
PackageSpecification & sourcePackageSpecification () const;
void setSourcePackageSpecification (PackageSpecification const &);
- /* invariant: these never return NULL */
- PackageDepends *depends();
- const PackageDepends *depends() const;
+ void setDepends(const PackageDepends);
+ const PackageDepends depends() const;
bool picked() const; /* true if this version is to be installed */
void pick(bool, packagemeta *); /* trigger an install/reinsall */
diff --git a/prereq.cc b/prereq.cc
index eb8e21f..0e7fdf5 100644
--- a/prereq.cc
+++ b/prereq.cc
@@ -211,11 +211,11 @@ PrereqChecker::isMet ()
// Fetch the dependencies of the package. This assumes that the
// dependencies of all versions are all the same.
- const PackageDepends *deps = pack->curr.depends ();
+ const PackageDepends deps = pack->curr.depends ();
// go through the package's dependencies
for (PackageDepends::const_iterator d =
- deps->begin (); d != deps->end (); ++d)
+ deps.begin (); d != deps.end (); ++d)
{
PackageSpecification *dep_spec = *d;
packagemeta *dep = db.findBinary (*dep_spec);
--
2.12.3