[paludis-commits] r4554 - in trunk: . paludis paludis/repositories/cran paludis/repositories/e paludis/repositories/fake paludis/repositories/gems paludis/repositories/unpackaged paludis/repositories/virtuals src/output
ciaranm at svn.pioto.org
ciaranm at svn.pioto.org
Sat Apr 12 21:53:12 UTC 2008
Author: ciaranm
Date: 2008-04-12 21:53:11 +0000 (Sat, 12 Apr 2008)
New Revision: 4554
Added:
trunk/paludis/repositories/e/pretend_fetch_visitor.cc
trunk/paludis/repositories/e/pretend_fetch_visitor.hh
Removed:
trunk/paludis/repositories/e/distfiles_size_visitor.cc
trunk/paludis/repositories/e/distfiles_size_visitor.hh
Modified:
trunk/ChangeLog
trunk/paludis/action-fwd.hh
trunk/paludis/action.cc
trunk/paludis/action.hh
trunk/paludis/install_task.cc
trunk/paludis/install_task.hh
trunk/paludis/package_id.hh
trunk/paludis/repositories/cran/cran_installed_repository.cc
trunk/paludis/repositories/cran/cran_package_id.cc
trunk/paludis/repositories/cran/cran_package_id.hh
trunk/paludis/repositories/cran/cran_repository.cc
trunk/paludis/repositories/e/Makefile.am
trunk/paludis/repositories/e/e_installed_repository.cc
trunk/paludis/repositories/e/e_installed_repository_id.cc
trunk/paludis/repositories/e/e_installed_repository_id.hh
trunk/paludis/repositories/e/e_key.cc
trunk/paludis/repositories/e/e_key.hh
trunk/paludis/repositories/e/e_repository.cc
trunk/paludis/repositories/e/e_repository_TEST.cc
trunk/paludis/repositories/e/e_repository_entries.hh
trunk/paludis/repositories/e/ebuild_entries.cc
trunk/paludis/repositories/e/ebuild_entries.hh
trunk/paludis/repositories/e/ebuild_id.cc
trunk/paludis/repositories/e/ebuild_id.hh
trunk/paludis/repositories/fake/fake_installed_repository.cc
trunk/paludis/repositories/fake/fake_package_id.cc
trunk/paludis/repositories/fake/fake_repository.cc
trunk/paludis/repositories/gems/gem_specification.cc
trunk/paludis/repositories/gems/gem_specification.hh
trunk/paludis/repositories/gems/gems_repository.cc
trunk/paludis/repositories/gems/installed_gems_repository.cc
trunk/paludis/repositories/unpackaged/installed_id.cc
trunk/paludis/repositories/unpackaged/installed_id.hh
trunk/paludis/repositories/unpackaged/installed_repository.cc
trunk/paludis/repositories/unpackaged/unpackaged_id.cc
trunk/paludis/repositories/unpackaged/unpackaged_id.hh
trunk/paludis/repositories/virtuals/installed_virtuals_repository.cc
trunk/paludis/repositories/virtuals/package_id.cc
trunk/paludis/repositories/virtuals/package_id.hh
trunk/paludis/repositories/virtuals/virtuals_repository.cc
trunk/src/output/console_install_task.cc
trunk/src/output/console_install_task.hh
Log:
Use PretendFetchAction to get download sizes. Fixes: ticket:504
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/ChangeLog 2008-04-12 21:53:11 UTC (rev 4554)
@@ -5,6 +5,12 @@
only listed in SVN log. For a summary of what has changed between releases,
see the NEWS file. This file is occasionally pruned to ChangeLog.old.bz2.
+2008-04-12 Ciaran McCreesh
+
+ * (lots): Use PretendFetchAction to get download sizes.
+
+ + Fixes: ticket:504
+
2008-04-12 Richard Brown
* ruby/Makefile.am: Only install playman symlink with --enable-ruby.
Modified: trunk/paludis/action-fwd.hh
===================================================================
--- trunk/paludis/action-fwd.hh 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/action-fwd.hh 2008-04-12 21:53:11 UTC (rev 4554)
@@ -43,6 +43,7 @@
class ConfigAction;
class FetchAction;
class InfoAction;
+ class PretendFetchAction;
class SupportsActionTestBase;
template <typename A_> class SupportsActionTest;
Modified: trunk/paludis/action.cc
===================================================================
--- trunk/paludis/action.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/action.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -158,6 +158,30 @@
_imp->failed = true;
}
+namespace paludis
+{
+ template <>
+ struct Implementation<PretendFetchAction>
+ {
+ const FetchActionOptions options;
+
+ Implementation(const FetchActionOptions & o) :
+ options(o)
+ {
+ }
+ };
+}
+
+PretendFetchAction::PretendFetchAction(const FetchActionOptions & o) :
+ PrivateImplementationPattern<PretendFetchAction>(new Implementation<PretendFetchAction>(o)),
+ options(_imp->options)
+{
+}
+
+PretendFetchAction::~PretendFetchAction()
+{
+}
+
SupportsActionTestBase::~SupportsActionTestBase()
{
}
@@ -217,6 +241,11 @@
{
s << "fetch";
}
+
+ void visit(const PretendFetchAction &)
+ {
+ s << "pretend fetch";
+ }
};
}
Modified: trunk/paludis/action.hh
===================================================================
--- trunk/paludis/action.hh 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/action.hh 2008-04-12 21:53:11 UTC (rev 4554)
@@ -58,7 +58,8 @@
UninstallAction,
PretendAction,
ConfigAction,
- InfoAction
+ InfoAction,
+ PretendFetchAction
>
{
};
@@ -80,7 +81,8 @@
SupportsActionTest<UninstallAction>,
SupportsActionTest<PretendAction>,
SupportsActionTest<ConfigAction>,
- SupportsActionTest<InfoAction>
+ SupportsActionTest<InfoAction>,
+ SupportsActionTest<PretendFetchAction>
>
{
};
@@ -228,6 +230,35 @@
};
/**
+ * A PretendFetchAction is used to get information about a fetch that will take
+ * place on a PackageID.
+ *
+ * \since 0.26
+ * \ingroup g_actions
+ * \nosubgrouping
+ */
+ class PALUDIS_VISIBLE PretendFetchAction :
+ public Action,
+ private PrivateImplementationPattern<PretendFetchAction>,
+ public AcceptInterfaceVisitsThis<ActionVisitorTypes, PretendFetchAction>
+ {
+ public:
+ ///\name Basic operations
+ ///\{
+
+ PretendFetchAction(const FetchActionOptions &);
+ ~PretendFetchAction();
+
+ ///\}
+
+ /// Options for the FetchAction we will use.
+ const FetchActionOptions & options;
+
+ /// Signal that we will fetch a particular file.
+ virtual void will_fetch(const FSEntry & destination, const unsigned long size_in_bytes) = 0;
+ };
+
+ /**
* A ConfigAction is used via PackageID::perform_action to execute
* post-install configuration (for example, via 'paludis --config')
* on a PackageID.
Modified: trunk/paludis/install_task.cc
===================================================================
--- trunk/paludis/install_task.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/install_task.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -1654,3 +1654,9 @@
return v.result;
}
+FetchActionOptions &
+InstallTask::fetch_action_options()
+{
+ return _imp->fetch_options;
+}
+
Modified: trunk/paludis/install_task.hh
===================================================================
--- trunk/paludis/install_task.hh 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/install_task.hh 2008-04-12 21:53:11 UTC (rev 4554)
@@ -81,6 +81,7 @@
///\}
bool already_done(const DepListEntry &) const PALUDIS_ATTRIBUTE((warn_unused_result));
+ FetchActionOptions & fetch_action_options() PALUDIS_ATTRIBUTE((warn_unused_result));
public:
///\name Basic operations
Modified: trunk/paludis/package_id.hh
===================================================================
--- trunk/paludis/package_id.hh 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/package_id.hh 2008-04-12 21:53:11 UTC (rev 4554)
@@ -273,20 +273,6 @@
virtual const tr1::shared_ptr<const MetadataValueKey<FSEntry> > fs_location_key() const = 0;
/**
- * The size_of_download_required_key, if non-zero, contains a
- * long integer representing the size of distfiles that still need
- * to be downloaded.
- */
- virtual const tr1::shared_ptr<const MetadataValueKey<long> > size_of_download_required_key() const = 0;
-
- /**
- * The size_of_all_distfiles_key, if non-zero, contains a long
- * integer representing the size of all distfiles used by the
- * package with the current USE settings.
- */
- virtual const tr1::shared_ptr<const MetadataValueKey<long> > size_of_all_distfiles_key() const = 0;
-
- /**
* The transient_key, if non-zero, indicates whether this
* PackageID's originating repository is volatile.
*/
Modified: trunk/paludis/repositories/cran/cran_installed_repository.cc
===================================================================
--- trunk/paludis/repositories/cran/cran_installed_repository.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/cran/cran_installed_repository.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -538,6 +538,10 @@
{
}
+ void visit(const SupportsActionTest<PretendFetchAction> &)
+ {
+ }
+
void visit(const SupportsActionTest<UninstallAction> &)
{
result = true;
Modified: trunk/paludis/repositories/cran/cran_package_id.cc
===================================================================
--- trunk/paludis/repositories/cran/cran_package_id.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/cran/cran_package_id.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -486,6 +486,11 @@
result = cran_repository;
}
+ void visit(const SupportsActionTest<PretendFetchAction> &)
+ {
+ result = cran_repository;
+ }
+
void visit(const SupportsActionTest<InstallAction> &)
{
result = cran_repository;
@@ -541,18 +546,6 @@
return _imp->fs_location_key;
}
-const tr1::shared_ptr<const MetadataValueKey<long> >
-CRANPackageID::size_of_download_required_key() const
-{
- return tr1::shared_ptr<const MetadataValueKey<long> >();
-}
-
-const tr1::shared_ptr<const MetadataValueKey<long> >
-CRANPackageID::size_of_all_distfiles_key() const
-{
- return tr1::shared_ptr<const MetadataValueKey<long> >();
-}
-
const tr1::shared_ptr<const MetadataValueKey<bool> >
CRANPackageID::transient_key() const
{
Modified: trunk/paludis/repositories/cran/cran_package_id.hh
===================================================================
--- trunk/paludis/repositories/cran/cran_package_id.hh 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/cran/cran_package_id.hh 2008-04-12 21:53:11 UTC (rev 4554)
@@ -76,8 +76,6 @@
virtual const tr1::shared_ptr<const MetadataCollectionKey<PackageIDSequence> > contains_key() const;
virtual const tr1::shared_ptr<const MetadataValueKey<tr1::shared_ptr<const PackageID> > > contained_in_key() const;
virtual const tr1::shared_ptr<const MetadataValueKey<FSEntry> > fs_location_key() const;
- virtual const tr1::shared_ptr<const MetadataValueKey<long> > size_of_download_required_key() const;
- virtual const tr1::shared_ptr<const MetadataValueKey<long> > size_of_all_distfiles_key() const;
virtual const tr1::shared_ptr<const MetadataValueKey<bool> > transient_key() const;
Modified: trunk/paludis/repositories/cran/cran_repository.cc
===================================================================
--- trunk/paludis/repositories/cran/cran_repository.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/cran/cran_repository.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -491,6 +491,11 @@
result = true;
}
+ void visit(const SupportsActionTest<PretendFetchAction> &)
+ {
+ result = true;
+ }
+
void visit(const SupportsActionTest<UninstallAction> &)
{
}
Modified: trunk/paludis/repositories/e/Makefile.am
===================================================================
--- trunk/paludis/repositories/e/Makefile.am 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/e/Makefile.am 2008-04-12 21:53:11 UTC (rev 4554)
@@ -73,6 +73,7 @@
exndbam_repository.hh \
exndbam_repository-sr.hh \
fetch_visitor.hh \
+ pretend_fetch_visitor.hh \
fix_locked_dependencies.hh \
glsa-sr.hh \
glsa.hh \
@@ -80,7 +81,6 @@
make_ebuild_repository.hh \
manifest2_entry-sr.hh \
manifest2_reader.hh \
- distfiles_size_visitor.hh \
package_dep_spec.hh \
pipe_command_handler.hh \
source_uri_finder.hh \
@@ -128,12 +128,12 @@
exndbam_repository.cc \
exheres_layout.cc \
fetch_visitor.cc \
+ pretend_fetch_visitor.cc \
fix_locked_dependencies.cc \
glsa.cc \
layout.cc \
make_ebuild_repository.cc \
manifest2_reader.cc \
- distfiles_size_visitor.cc \
package_dep_spec.cc \
pipe_command_handler.cc \
registration.cc \
Deleted: trunk/paludis/repositories/e/distfiles_size_visitor.cc
===================================================================
--- trunk/paludis/repositories/e/distfiles_size_visitor.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/e/distfiles_size_visitor.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -1,148 +0,0 @@
-/* vim: set sw=4 sts=4 et foldmethod=syntax : */
-
-/*
- * Copyright (c) 2007 Mike Kelly
- *
- * This file is part of the Paludis package manager. Paludis is free software;
- * you can redistribute it and/or modify it under the terms of the GNU General
- * Public License version 2, as published by the Free Software Foundation.
- *
- * Paludis is distributed in the hope that it will be useful, but WITHOUT ANY
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include <paludis/repositories/e/distfiles_size_visitor.hh>
-#include <paludis/repositories/e/source_uri_finder.hh>
-#include <paludis/repositories/e/e_repository_id.hh>
-#include <paludis/repositories/e/dep_parser.hh>
-#include <paludis/repositories/e/manifest2_reader.hh>
-#include <paludis/dep_spec.hh>
-#include <paludis/environment.hh>
-#include <paludis/package_id.hh>
-#include <paludis/action.hh>
-#include <paludis/repository.hh>
-#include <paludis/about.hh>
-#include <paludis/util/visitor-impl.hh>
-#include <paludis/util/system.hh>
-#include <paludis/util/private_implementation_pattern-impl.hh>
-#include <paludis/util/fs_entry.hh>
-#include <paludis/util/log.hh>
-#include <paludis/util/join.hh>
-#include <paludis/util/stringify.hh>
-#include <paludis/util/make_shared_ptr.hh>
-#include <iostream>
-#include <list>
-
-using namespace paludis;
-using namespace paludis::erepository;
-
-namespace paludis
-{
- template <>
- struct Implementation<DistfilesSizeVisitor>
- {
- const Environment * const env;
- const tr1::shared_ptr<const PackageID> id;
- const FSEntry distdir;
- tr1::shared_ptr<const URILabel> default_label;
- bool everything;
- const tr1::shared_ptr<Manifest2Reader> m2r;
-
- std::list<const URILabel *> labels;
- size_t size;
-
- Implementation(
- const Environment * const e,
- const tr1::shared_ptr<const PackageID> & i,
- const FSEntry & d,
- const tr1::shared_ptr<const URILabel> & n,
- const bool ev,
- const tr1::shared_ptr<Manifest2Reader> mr) :
- env(e),
- id(i),
- distdir(d),
- default_label(n),
- everything(ev),
- m2r(mr),
- size(0)
- {
- labels.push_front(default_label.get());
- }
- };
-}
-
-DistfilesSizeVisitor::DistfilesSizeVisitor(
- const Environment * const e,
- const tr1::shared_ptr<const PackageID> & i,
- const FSEntry & d,
- const tr1::shared_ptr<const URILabel> & n,
- const bool ev,
- const tr1::shared_ptr<Manifest2Reader> mr) :
- PrivateImplementationPattern<DistfilesSizeVisitor>(new Implementation<DistfilesSizeVisitor>(e, i, d, n, ev, mr))
-{
-}
-
-DistfilesSizeVisitor::~DistfilesSizeVisitor()
-{
-}
-
-void
-DistfilesSizeVisitor::visit_sequence(const ConditionalDepSpec & u,
- FetchableURISpecTree::ConstSequenceIterator cur,
- FetchableURISpecTree::ConstSequenceIterator end)
-{
- if (u.condition_met())
- {
- _imp->labels.push_front(* _imp->labels.begin());
- std::for_each(cur, end, accept_visitor(*this));
- _imp->labels.pop_front();
- }
-}
-
-void
-DistfilesSizeVisitor::visit_sequence(const AllDepSpec &,
- FetchableURISpecTree::ConstSequenceIterator cur,
- FetchableURISpecTree::ConstSequenceIterator end)
-{
- _imp->labels.push_front(* _imp->labels.begin());
- std::for_each(cur, end, accept_visitor(*this));
- _imp->labels.pop_front();
-}
-
-void
-DistfilesSizeVisitor::visit_leaf(const URILabelsDepSpec & l)
-{
- for (URILabelsDepSpec::ConstIterator i(l.begin()), i_end(l.end()) ;
- i != i_end ; ++i)
- *_imp->labels.begin() = i->get();
-}
-
-void
-DistfilesSizeVisitor::visit_leaf(const FetchableURIDepSpec & u)
-{
- Context context("When visiting URI dep spec '" + stringify(u.text()) + "':");
-
- FSEntry destination(_imp->distdir / u.filename());
-
- if (destination.exists() && ! _imp->everything)
- return;
- Manifest2Reader::ConstIterator m(_imp->m2r->find("DIST", u.filename()));
- if (_imp->m2r->end() == m)
- return;
- long s(m->size);
- Log::get_instance()->message(ll_debug, lc_context) << "Adding " << s << " to size. Was "
- << _imp->size << ", is now " << (_imp->size + s);
- _imp->size += s;
-}
-
-long
-DistfilesSizeVisitor::size()
-{
- return _imp->size;
-}
Deleted: trunk/paludis/repositories/e/distfiles_size_visitor.hh
===================================================================
--- trunk/paludis/repositories/e/distfiles_size_visitor.hh 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/e/distfiles_size_visitor.hh 2008-04-12 21:53:11 UTC (rev 4554)
@@ -1,71 +0,0 @@
-/* vim: set sw=4 sts=4 et foldmethod=syntax : */
-
-/*
- * Copyright (c) 2007 Mike Kelly
- *
- * This file is part of the Paludis package manager. Paludis is free software;
- * you can redistribute it and/or modify it under the terms of the GNU General
- * Public License version 2, as published by the Free Software Foundation.
- *
- * Paludis is distributed in the hope that it will be useful, but WITHOUT ANY
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef PALUDIS_GUARD_PALUDIS_REPOSITORIES_E_FETCH_VISITOR_HH
-#define PALUDIS_GUARD_PALUDIS_REPOSITORIES_E_FETCH_VISITOR_HH 1
-
-#include <paludis/repositories/e/eapi-fwd.hh>
-#include <paludis/repositories/e/manifest2_reader.hh>
-#include <paludis/util/attributes.hh>
-#include <paludis/util/private_implementation_pattern.hh>
-#include <paludis/util/visitor-fwd.hh>
-#include <paludis/util/fs_entry-fwd.hh>
-#include <paludis/util/tr1_memory.hh>
-#include <paludis/dep_spec.hh>
-#include <paludis/dep_tree.hh>
-#include <paludis/package_id-fwd.hh>
-#include <paludis/environment-fwd.hh>
-
-namespace paludis
-{
- namespace erepository
- {
- class PALUDIS_VISIBLE DistfilesSizeVisitor :
- private PrivateImplementationPattern<DistfilesSizeVisitor>,
- public ConstVisitor<FetchableURISpecTree>
- {
- public:
- DistfilesSizeVisitor(
- const Environment * const,
- const tr1::shared_ptr<const PackageID> &,
- const FSEntry &,
- const tr1::shared_ptr<const URILabel> &,
- const bool,
- const tr1::shared_ptr<Manifest2Reader>);
-
- ~DistfilesSizeVisitor();
-
- void visit_sequence(const AllDepSpec &,
- FetchableURISpecTree::ConstSequenceIterator,
- FetchableURISpecTree::ConstSequenceIterator);
-
- void visit_sequence(const ConditionalDepSpec &,
- FetchableURISpecTree::ConstSequenceIterator,
- FetchableURISpecTree::ConstSequenceIterator);
-
- void visit_leaf(const URILabelsDepSpec &);
-
- void visit_leaf(const FetchableURIDepSpec &);
-
- long size();
- };
- }
-}
-
-#endif
Modified: trunk/paludis/repositories/e/e_installed_repository.cc
===================================================================
--- trunk/paludis/repositories/e/e_installed_repository.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/e/e_installed_repository.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -113,6 +113,11 @@
result = false;
}
+ void visit(const SupportsActionTest<PretendFetchAction> &)
+ {
+ result = false;
+ }
+
void visit(const SupportsActionTest<InstallAction> &)
{
result = false;
Modified: trunk/paludis/repositories/e/e_installed_repository_id.cc
===================================================================
--- trunk/paludis/repositories/e/e_installed_repository_id.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/e/e_installed_repository_id.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -640,19 +640,6 @@
return _imp->fs_location;
}
-const tr1::shared_ptr<const MetadataValueKey<long> >
-EInstalledRepositoryID::size_of_download_required_key() const
-{
- return tr1::shared_ptr<const MetadataValueKey<long> >();
-}
-
-const tr1::shared_ptr<const MetadataValueKey<long> >
-EInstalledRepositoryID::size_of_all_distfiles_key() const
-{
- return tr1::shared_ptr<const MetadataValueKey<long> >();
-}
-
-
bool
EInstalledRepositoryID::arbitrary_less_than_comparison(const PackageID &) const
{
@@ -695,6 +682,10 @@
{
}
+ void visit(const SupportsActionTest<PretendFetchAction> &)
+ {
+ }
+
void visit(const SupportsActionTest<PretendAction> &)
{
}
@@ -754,6 +745,7 @@
void visit(const InstallAction & a) PALUDIS_ATTRIBUTE((noreturn));
void visit(const PretendAction & a) PALUDIS_ATTRIBUTE((noreturn));
void visit(const FetchAction & a) PALUDIS_ATTRIBUTE((noreturn));
+ void visit(const PretendFetchAction & a) PALUDIS_ATTRIBUTE((noreturn));
};
void PerformAction::visit(const InstallAction & a)
@@ -770,6 +762,11 @@
{
throw UnsupportedActionError(*id, a);
}
+
+ void PerformAction::visit(const PretendFetchAction & a)
+ {
+ throw UnsupportedActionError(*id, a);
+ }
}
void
Modified: trunk/paludis/repositories/e/e_installed_repository_id.hh
===================================================================
--- trunk/paludis/repositories/e/e_installed_repository_id.hh 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/e/e_installed_repository_id.hh 2008-04-12 21:53:11 UTC (rev 4554)
@@ -79,8 +79,6 @@
virtual const tr1::shared_ptr<const MetadataCollectionKey<PackageIDSequence> > contains_key() const;
virtual const tr1::shared_ptr<const MetadataValueKey<tr1::shared_ptr<const PackageID> > > contained_in_key() const;
virtual const tr1::shared_ptr<const MetadataValueKey<FSEntry> > fs_location_key() const;
- virtual const tr1::shared_ptr<const MetadataValueKey<long> > size_of_download_required_key() const;
- virtual const tr1::shared_ptr<const MetadataValueKey<long> > size_of_all_distfiles_key() const;
virtual const tr1::shared_ptr<const MetadataCollectionKey<UseFlagNameSet> > use_key() const;
virtual const tr1::shared_ptr<const MetadataCollectionKey<Set<std::string> > > inherited_key() const;
Modified: trunk/paludis/repositories/e/e_key.cc
===================================================================
--- trunk/paludis/repositories/e/e_key.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/e/e_key.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -1091,58 +1091,3 @@
return *_imp->value;
}
-namespace paludis
-{
- template <>
- struct Implementation<EDistSizeKey>
- {
- const tr1::shared_ptr<const EFetchableURIKey> src_uri;
- const tr1::shared_ptr<DistfilesSizeVisitor> dsv;
- mutable Mutex value_mutex;
- mutable tr1::shared_ptr<long> value;
-
- Implementation(const tr1::shared_ptr<const EFetchableURIKey> & s,
- const tr1::shared_ptr<DistfilesSizeVisitor> & d) :
- src_uri(s),
- dsv(d)
- {
- }
- };
-}
-
-EDistSizeKey::EDistSizeKey(const std::string & r, const std::string & h, const MetadataKeyType t,
- const tr1::shared_ptr<const EFetchableURIKey> & s,
- const tr1::shared_ptr<DistfilesSizeVisitor> & d) :
- MetadataValueKey<long> (r, h, t),
- PrivateImplementationPattern<EDistSizeKey>(new Implementation<EDistSizeKey>(s, d)),
- _imp(PrivateImplementationPattern<EDistSizeKey>::_imp)
-{
-}
-
-EDistSizeKey::~EDistSizeKey()
-{
-}
-
-const long
-EDistSizeKey::value() const
-{
- Lock l(_imp->value_mutex);
-
- if (_imp->value)
- return *_imp->value;
-
- _imp->value.reset(new long(0));
-
- if (_imp->src_uri)
- _imp->src_uri->value()->accept(*_imp->dsv);
-
- *_imp->value = _imp->dsv->size();
-
- return *_imp->value;
-}
-
-std::string
-EDistSizeKey::pretty_print() const
-{
- return pretty_print_bytes(value());
-}
Modified: trunk/paludis/repositories/e/e_key.hh
===================================================================
--- trunk/paludis/repositories/e/e_key.hh 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/e/e_key.hh 2008-04-12 21:53:11 UTC (rev 4554)
@@ -24,8 +24,6 @@
#include <paludis/util/fs_entry.hh>
#include <paludis/util/set.hh>
-#include <paludis/repositories/e/distfiles_size_visitor.hh>
-
namespace paludis
{
namespace erepository
@@ -318,27 +316,6 @@
time_t value() const
PALUDIS_ATTRIBUTE((warn_unused_result));
};
-
- class EDistSizeKey:
- public MetadataValueKey<long>,
- private PrivateImplementationPattern<EDistSizeKey>
- {
- private:
- PrivateImplementationPattern<EDistSizeKey>::ImpPtr & _imp;
-
- public:
- EDistSizeKey(const std::string &, const std::string &, const MetadataKeyType,
- const tr1::shared_ptr<const EFetchableURIKey> &,
- const tr1::shared_ptr<DistfilesSizeVisitor> &);
-
- ~EDistSizeKey();
-
- const long value() const
- PALUDIS_ATTRIBUTE((warn_unused_result));
-
- std::string pretty_print() const
- PALUDIS_ATTRIBUTE((warn_unused_result));
- };
}
}
Modified: trunk/paludis/repositories/e/e_repository.cc
===================================================================
--- trunk/paludis/repositories/e/e_repository.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/e/e_repository.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -1276,6 +1276,11 @@
result = true;
}
+ void visit(const SupportsActionTest<PretendFetchAction> &)
+ {
+ result = true;
+ }
+
void visit(const SupportsActionTest<UninstallAction> &)
{
}
Modified: trunk/paludis/repositories/e/e_repository_TEST.cc
===================================================================
--- trunk/paludis/repositories/e/e_repository_TEST.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/e/e_repository_TEST.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -1628,50 +1628,6 @@
}
} test_e_repository_install_exheres_0;
- /**
- * \test Test ERepository Distfile Size querying (total needed to
- * download, and amount downloaded.
- */
- struct ERepositoryDistSizeTest : TestCase
- {
- ERepositoryDistSizeTest() : TestCase("dist_size") { }
-
- void run()
- {
- TestEnvironment env;
- env.set_paludis_command("/bin/false");
- tr1::shared_ptr<Map<std::string, std::string> > keys(
- new Map<std::string, std::string>);
- keys->insert("format", "ebuild");
- keys->insert("names_cache", "/var/empty");
- keys->insert("location", "e_repository_TEST_dir/repo16");
- keys->insert("profiles", "e_repository_TEST_dir/repo16/profiles/profile");
- tr1::shared_ptr<ERepository> repo(make_ebuild_repository(
- &env, keys));
- env.package_database()->add_repository(1, repo);
-
- const tr1::shared_ptr<const PackageID> ida(*env.package_database()->
- query(query::Matches(
- PackageDepSpec(parse_user_package_dep_spec("category/package-a",
- UserPackageDepSpecOptions()))), qo_order_by_version)->last());
- const tr1::shared_ptr<const PackageID> idb(*env.package_database()->
- query(query::Matches(
- PackageDepSpec(parse_user_package_dep_spec("category/package-b",
- UserPackageDepSpecOptions()))), qo_order_by_version)->last());
- const tr1::shared_ptr<const PackageID> idc(*env.package_database()->
- query(query::Matches(
- PackageDepSpec(parse_user_package_dep_spec("category/package-c",
- UserPackageDepSpecOptions()))), qo_order_by_version)->last());
-
- TEST_CHECK_EQUAL(ida->size_of_download_required_key()->value(), 0);
- TEST_CHECK_EQUAL(ida->size_of_all_distfiles_key()->value(), 10);
- TEST_CHECK_EQUAL(idb->size_of_download_required_key()->value(),
- idb->size_of_all_distfiles_key()->value());
- TEST_CHECK_EQUAL(idc->size_of_download_required_key()->value(), 12);
- TEST_CHECK_EQUAL(idc->size_of_all_distfiles_key()->value(), 22);
- }
- } test_e_repository_dist_size;
-
struct ERepositoryDependenciesRewriterTest : TestCase
{
ERepositoryDependenciesRewriterTest() : TestCase("dependencies_rewriter") { }
Modified: trunk/paludis/repositories/e/e_repository_entries.hh
===================================================================
--- trunk/paludis/repositories/e/e_repository_entries.hh 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/e/e_repository_entries.hh 2008-04-12 21:53:11 UTC (rev 4554)
@@ -93,6 +93,12 @@
tr1::shared_ptr<const ERepositoryProfile>) const = 0;
/**
+ * Handle a pretend fetch.
+ */
+ virtual void pretend_fetch(const tr1::shared_ptr<const ERepositoryID> &, PretendFetchAction &,
+ tr1::shared_ptr<const ERepositoryProfile>) const = 0;
+
+ /**
* Handle a pretend.
*/
virtual bool pretend(const tr1::shared_ptr<const ERepositoryID> &,
Modified: trunk/paludis/repositories/e/ebuild_entries.cc
===================================================================
--- trunk/paludis/repositories/e/ebuild_entries.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/e/ebuild_entries.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -26,6 +26,7 @@
#include <paludis/repositories/e/eapi.hh>
#include <paludis/repositories/e/dep_parser.hh>
#include <paludis/repositories/e/fetch_visitor.hh>
+#include <paludis/repositories/e/pretend_fetch_visitor.hh>
#include <paludis/repositories/e/check_fetched_files_visitor.hh>
#include <paludis/repositories/e/aa_visitor.hh>
#include <paludis/repositories/e/e_stripper.hh>
@@ -475,6 +476,23 @@
}
void
+EbuildEntries::pretend_fetch(const tr1::shared_ptr<const ERepositoryID> & id,
+ PretendFetchAction & a, tr1::shared_ptr<const ERepositoryProfile>) const
+{
+ using namespace tr1::placeholders;
+
+ Context context("When pretending to fetch ID '" + stringify(*id) + "':");
+
+ if (id->fetches_key())
+ {
+ PretendFetchVisitor f(_imp->params.environment, id, *id->eapi(),
+ _imp->e_repository->params().distdir, a.options[k::fetch_unneeded()],
+ id->fetches_key()->initial_label(), a);
+ id->fetches_key()->value()->accept(f);
+ }
+}
+
+void
EbuildEntries::install(const tr1::shared_ptr<const ERepositoryID> & id,
const InstallActionOptions & o, tr1::shared_ptr<const ERepositoryProfile> p) const
{
Modified: trunk/paludis/repositories/e/ebuild_entries.hh
===================================================================
--- trunk/paludis/repositories/e/ebuild_entries.hh 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/e/ebuild_entries.hh 2008-04-12 21:53:11 UTC (rev 4554)
@@ -84,6 +84,9 @@
virtual void fetch(const tr1::shared_ptr<const ERepositoryID> &, const FetchActionOptions &,
tr1::shared_ptr<const ERepositoryProfile>) const;
+ virtual void pretend_fetch(const tr1::shared_ptr<const ERepositoryID> &, PretendFetchAction &,
+ tr1::shared_ptr<const ERepositoryProfile>) const;
+
virtual void install(const tr1::shared_ptr<const ERepositoryID> &, const InstallActionOptions &,
tr1::shared_ptr<const ERepositoryProfile>) const;
Modified: trunk/paludis/repositories/e/ebuild_id.cc
===================================================================
--- trunk/paludis/repositories/e/ebuild_id.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/e/ebuild_id.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -26,7 +26,6 @@
#include <paludis/repositories/e/e_key.hh>
#include <paludis/repositories/e/e_mask.hh>
#include <paludis/repositories/e/eapi.hh>
-#include <paludis/repositories/e/distfiles_size_visitor.hh>
#include <paludis/repositories/e/manifest2_reader.hh>
#include <paludis/name.hh>
@@ -77,8 +76,6 @@
mutable tr1::shared_ptr<const EDependenciesKey> build_dependencies;
mutable tr1::shared_ptr<const EDependenciesKey> run_dependencies;
mutable tr1::shared_ptr<const EDependenciesKey> post_dependencies;
- mutable tr1::shared_ptr<const EDistSizeKey> size_of_download_required;
- mutable tr1::shared_ptr<const EDistSizeKey> size_of_all_distfiles;
mutable tr1::shared_ptr<const EProvideKey> provide;
mutable tr1::shared_ptr<const ERestrictKey> restrictions;
mutable tr1::shared_ptr<const EFetchableURIKey> src_uri;
@@ -264,33 +261,6 @@
_imp->profile_mask = make_shared_ptr(new EMutableRepositoryMaskInfoKey(shared_from_this(), "profile_mask", "Profile masked",
tr1::static_pointer_cast<const ERepository>(repository())->profile()->profile_masked(*this), mkt_internal));
add_metadata_key(_imp->profile_mask);
-
- FSEntry m2(_imp->repository->layout()->package_directory(_imp->name) / "Manifest");
- if (_imp->src_uri && m2.exists())
- {
- tr1::shared_ptr<Manifest2Reader> m2r(new Manifest2Reader(m2));
-
- tr1::shared_ptr<DistfilesSizeVisitor> dsv(new DistfilesSizeVisitor(_imp->environment,
- shared_from_this(),
- _imp->repository->params().distdir,
- _imp->src_uri->initial_label(),
- false,
- m2r));
- tr1::shared_ptr<DistfilesSizeVisitor> dsv2(new DistfilesSizeVisitor(_imp->environment,
- shared_from_this(),
- _imp->repository->params().distdir,
- _imp->src_uri->initial_label(),
- true,
- m2r));
-
- _imp->size_of_download_required.reset(new EDistSizeKey("UNDOWNLOADEDDISTFILESIZE",
- "Undownloaded Size", mkt_normal, _imp->src_uri, dsv));
- add_metadata_key(_imp->size_of_download_required);
-
- _imp->size_of_all_distfiles.reset(new EDistSizeKey("TOTALDISTFILESIZE",
- "Total Distfiles Size", mkt_normal, _imp->src_uri, dsv2));
- add_metadata_key(_imp->size_of_all_distfiles);
- }
}
namespace
@@ -654,20 +624,6 @@
return _imp->fs_location;
}
-const tr1::shared_ptr<const MetadataValueKey<long> >
-EbuildID::size_of_download_required_key() const
-{
- need_keys_added();
- return _imp->size_of_download_required;
-}
-
-const tr1::shared_ptr<const MetadataValueKey<long> >
-EbuildID::size_of_all_distfiles_key() const
-{
- need_keys_added();
- return _imp->size_of_all_distfiles;
-}
-
bool
EbuildID::arbitrary_less_than_comparison(const PackageID &) const
{
@@ -836,6 +792,11 @@
result = true;
}
+ void visit(const SupportsActionTest<PretendFetchAction> &)
+ {
+ result = true;
+ }
+
void visit(const SupportsActionTest<InstallAction> &)
{
result = true;
@@ -873,7 +834,7 @@
namespace
{
struct PerformAction :
- ConstVisitor<ActionVisitorTypes>
+ Visitor<ActionVisitorTypes>
{
const tr1::shared_ptr<const PackageID> id;
@@ -882,7 +843,7 @@
{
}
- void visit(const InstallAction & a)
+ void visit(InstallAction & a)
{
tr1::static_pointer_cast<const ERepository>(id->repository())->entries()->install(
tr1::static_pointer_cast<const ERepositoryID>(id),
@@ -890,7 +851,7 @@
tr1::static_pointer_cast<const ERepository>(id->repository())->profile());
}
- void visit(const FetchAction & a)
+ void visit(FetchAction & a)
{
tr1::static_pointer_cast<const ERepository>(id->repository())->entries()->fetch(
tr1::static_pointer_cast<const ERepositoryID>(id),
@@ -898,36 +859,44 @@
tr1::static_pointer_cast<const ERepository>(id->repository())->profile());
}
- void visit(const PretendAction &)
+ void visit(PretendFetchAction & a)
{
+ tr1::static_pointer_cast<const ERepository>(id->repository())->entries()->pretend_fetch(
+ tr1::static_pointer_cast<const ERepositoryID>(id),
+ a,
+ tr1::static_pointer_cast<const ERepository>(id->repository())->profile());
+ }
+
+ void visit(PretendAction &)
+ {
tr1::static_pointer_cast<const ERepository>(id->repository())->entries()->pretend(
tr1::static_pointer_cast<const ERepositoryID>(id),
tr1::static_pointer_cast<const ERepository>(id->repository())->profile());
}
- void visit(const InfoAction &)
+ void visit(InfoAction &)
{
tr1::static_pointer_cast<const ERepository>(id->repository())->entries()->info(
tr1::static_pointer_cast<const ERepositoryID>(id),
tr1::static_pointer_cast<const ERepository>(id->repository())->profile());
}
- void visit(const InstalledAction & a) PALUDIS_ATTRIBUTE((noreturn));
- void visit(const UninstallAction & a) PALUDIS_ATTRIBUTE((noreturn));
- void visit(const ConfigAction & a) PALUDIS_ATTRIBUTE((noreturn));
+ void visit(InstalledAction & a) PALUDIS_ATTRIBUTE((noreturn));
+ void visit(UninstallAction & a) PALUDIS_ATTRIBUTE((noreturn));
+ void visit(ConfigAction & a) PALUDIS_ATTRIBUTE((noreturn));
};
- void PerformAction::visit(const InstalledAction & a)
+ void PerformAction::visit(InstalledAction & a)
{
throw UnsupportedActionError(*id, a);
}
- void PerformAction::visit(const UninstallAction & a)
+ void PerformAction::visit(UninstallAction & a)
{
throw UnsupportedActionError(*id, a);
}
- void PerformAction::visit(const ConfigAction & a)
+ void PerformAction::visit(ConfigAction & a)
{
throw UnsupportedActionError(*id, a);
}
Modified: trunk/paludis/repositories/e/ebuild_id.hh
===================================================================
--- trunk/paludis/repositories/e/ebuild_id.hh 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/e/ebuild_id.hh 2008-04-12 21:53:11 UTC (rev 4554)
@@ -83,8 +83,6 @@
virtual const tr1::shared_ptr<const MetadataCollectionKey<PackageIDSequence> > contains_key() const;
virtual const tr1::shared_ptr<const MetadataValueKey<tr1::shared_ptr<const PackageID> > > contained_in_key() const;
virtual const tr1::shared_ptr<const MetadataValueKey<FSEntry> > fs_location_key() const;
- virtual const tr1::shared_ptr<const MetadataValueKey<long> > size_of_download_required_key() const;
- virtual const tr1::shared_ptr<const MetadataValueKey<long> > size_of_all_distfiles_key() const;
const tr1::shared_ptr<const MetadataCollectionKey<Set<std::string> > > inherited_key() const;
const tr1::shared_ptr<const MetadataSpecTreeKey<LicenseSpecTree> > license_key() const;
Copied: trunk/paludis/repositories/e/pretend_fetch_visitor.cc (from rev 4553, trunk/paludis/repositories/e/distfiles_size_visitor.cc)
===================================================================
--- trunk/paludis/repositories/e/pretend_fetch_visitor.cc (rev 0)
+++ trunk/paludis/repositories/e/pretend_fetch_visitor.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -0,0 +1,142 @@
+/* vim: set sw=4 sts=4 et foldmethod=syntax : */
+
+/*
+ * Copyright (c) 2008 Ciaran McCreesh
+ *
+ * This file is part of the Paludis package manager. Paludis is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU General
+ * Public License version 2, as published by the Free Software Foundation.
+ *
+ * Paludis is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <paludis/repositories/e/pretend_fetch_visitor.hh>
+#include <paludis/repositories/e/e_repository_id.hh>
+#include <paludis/repositories/e/manifest2_reader.hh>
+#include <paludis/dep_spec.hh>
+#include <paludis/environment.hh>
+#include <paludis/package_id.hh>
+#include <paludis/action.hh>
+#include <paludis/metadata_key.hh>
+#include <paludis/util/visitor-impl.hh>
+#include <paludis/util/private_implementation_pattern-impl.hh>
+#include <paludis/util/fs_entry.hh>
+#include <paludis/util/log.hh>
+#include <paludis/util/stringify.hh>
+#include <paludis/util/make_shared_ptr.hh>
+#include <list>
+#include <set>
+
+using namespace paludis;
+using namespace paludis::erepository;
+
+namespace paludis
+{
+ template <>
+ struct Implementation<PretendFetchVisitor>
+ {
+ const Environment * const env;
+ const tr1::shared_ptr<const PackageID> id;
+ const EAPI & eapi;
+ const FSEntry distdir;
+ const bool fetch_unneeded;
+ tr1::shared_ptr<const URILabel> default_label;
+ PretendFetchAction & action;
+
+ std::set<std::string> already_done;
+ std::list<const URILabel *> labels;
+ Manifest2Reader manifest;
+
+ Implementation(
+ const Environment * const e,
+ const tr1::shared_ptr<const PackageID> & i,
+ const EAPI & p,
+ const FSEntry & d,
+ const bool f,
+ const tr1::shared_ptr<const URILabel> & n,
+ PretendFetchAction & a) :
+ env(e),
+ id(i),
+ eapi(p),
+ distdir(d),
+ fetch_unneeded(f),
+ default_label(n),
+ action(a),
+ manifest(id->fs_location_key()->value().dirname() / "Manifest")
+ {
+ labels.push_front(default_label.get());
+ }
+ };
+}
+
+PretendFetchVisitor::PretendFetchVisitor(
+ const Environment * const e,
+ const tr1::shared_ptr<const PackageID> & i,
+ const EAPI & p,
+ const FSEntry & d,
+ const bool f,
+ const tr1::shared_ptr<const URILabel> & n,
+ PretendFetchAction & a) :
+ PrivateImplementationPattern<PretendFetchVisitor>(new Implementation<PretendFetchVisitor>(e, i, p, d, f, n, a))
+{
+}
+
+PretendFetchVisitor::~PretendFetchVisitor()
+{
+}
+
+void
+PretendFetchVisitor::visit_sequence(const ConditionalDepSpec & u,
+ FetchableURISpecTree::ConstSequenceIterator cur,
+ FetchableURISpecTree::ConstSequenceIterator end)
+{
+ if ((_imp->fetch_unneeded) || (u.condition_met()))
+ {
+ _imp->labels.push_front(* _imp->labels.begin());
+ std::for_each(cur, end, accept_visitor(*this));
+ _imp->labels.pop_front();
+ }
+}
+
+void
+PretendFetchVisitor::visit_sequence(const AllDepSpec &,
+ FetchableURISpecTree::ConstSequenceIterator cur,
+ FetchableURISpecTree::ConstSequenceIterator end)
+{
+ _imp->labels.push_front(* _imp->labels.begin());
+ std::for_each(cur, end, accept_visitor(*this));
+ _imp->labels.pop_front();
+}
+
+void
+PretendFetchVisitor::visit_leaf(const URILabelsDepSpec & l)
+{
+ for (URILabelsDepSpec::ConstIterator i(l.begin()), i_end(l.end()) ;
+ i != i_end ; ++i)
+ *_imp->labels.begin() = i->get();
+}
+
+void
+PretendFetchVisitor::visit_leaf(const FetchableURIDepSpec & u)
+{
+ if (! _imp->already_done.insert(u.filename()).second)
+ return;
+
+ FSEntry destination(_imp->distdir / u.filename());
+ if (destination.exists())
+ return;
+
+ Manifest2Reader::ConstIterator m(_imp->manifest.find("DIST", u.filename()));
+ if (_imp->manifest.end() == m)
+ return;
+
+ _imp->action.will_fetch(destination, m->size);
+}
+
Copied: trunk/paludis/repositories/e/pretend_fetch_visitor.hh (from rev 4553, trunk/paludis/repositories/e/distfiles_size_visitor.hh)
===================================================================
--- trunk/paludis/repositories/e/pretend_fetch_visitor.hh (rev 0)
+++ trunk/paludis/repositories/e/pretend_fetch_visitor.hh 2008-04-12 21:53:11 UTC (rev 4554)
@@ -0,0 +1,67 @@
+/* vim: set sw=4 sts=4 et foldmethod=syntax : */
+
+/*
+ * Copyright (c) 2008 Ciaran McCreesh
+ *
+ * This file is part of the Paludis package manager. Paludis is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU General
+ * Public License version 2, as published by the Free Software Foundation.
+ *
+ * Paludis is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef PALUDIS_GUARD_PALUDIS_REPOSITORIES_E_PRETEND_FETCH_VISITOR_HH
+#define PALUDIS_GUARD_PALUDIS_REPOSITORIES_E_PRETEND_FETCH_VISITOR_HH 1
+
+#include <paludis/action-fwd.hh>
+#include <paludis/dep_label-fwd.hh>
+#include <paludis/dep_tree.hh>
+#include <paludis/package_id-fwd.hh>
+#include <paludis/repositories/e/eapi-fwd.hh>
+#include <paludis/util/fs_entry-fwd.hh>
+#include <paludis/util/private_implementation_pattern.hh>
+
+namespace paludis
+{
+ namespace erepository
+ {
+ class PALUDIS_VISIBLE PretendFetchVisitor :
+ private PrivateImplementationPattern<PretendFetchVisitor>,
+ public ConstVisitor<FetchableURISpecTree>
+ {
+ public:
+ PretendFetchVisitor(
+ const Environment * const,
+ const tr1::shared_ptr<const PackageID> &,
+ const EAPI & eapi,
+ const FSEntry & distdir,
+ const bool fetch_unneeded,
+ const tr1::shared_ptr<const URILabel> & initial_label,
+ PretendFetchAction & action);
+
+ ~PretendFetchVisitor();
+
+ void visit_sequence(const AllDepSpec &,
+ FetchableURISpecTree::ConstSequenceIterator,
+ FetchableURISpecTree::ConstSequenceIterator);
+
+ void visit_sequence(const ConditionalDepSpec &,
+ FetchableURISpecTree::ConstSequenceIterator,
+ FetchableURISpecTree::ConstSequenceIterator);
+
+ void visit_leaf(const URILabelsDepSpec &);
+
+ void visit_leaf(const FetchableURIDepSpec &);
+ };
+
+ }
+}
+
+#endif
Modified: trunk/paludis/repositories/fake/fake_installed_repository.cc
===================================================================
--- trunk/paludis/repositories/fake/fake_installed_repository.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/fake/fake_installed_repository.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -169,6 +169,10 @@
{
}
+ void visit(const SupportsActionTest<PretendFetchAction> &)
+ {
+ }
+
void visit(const SupportsActionTest<InfoAction> &)
{
}
Modified: trunk/paludis/repositories/fake/fake_package_id.cc
===================================================================
--- trunk/paludis/repositories/fake/fake_package_id.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/fake/fake_package_id.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -903,6 +903,13 @@
if (! id->repository()->some_ids_might_support_action(t))
throw UnsupportedActionError(*id, a);
}
+
+ void visit(const PretendFetchAction & a)
+ {
+ SupportsActionTest<PretendFetchAction> t;
+ if (! id->repository()->some_ids_might_support_action(t))
+ throw UnsupportedActionError(*id, a);
+ }
};
}
Modified: trunk/paludis/repositories/fake/fake_repository.cc
===================================================================
--- trunk/paludis/repositories/fake/fake_repository.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/fake/fake_repository.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -163,6 +163,10 @@
{
}
+ void visit(const SupportsActionTest<PretendFetchAction> &)
+ {
+ }
+
void visit(const SupportsActionTest<FetchAction> &)
{
}
Modified: trunk/paludis/repositories/gems/gem_specification.cc
===================================================================
--- trunk/paludis/repositories/gems/gem_specification.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/gems/gem_specification.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -444,18 +444,6 @@
return tr1::shared_ptr<const MetadataValueKey<tr1::shared_ptr<const PackageID> > >();
}
-const tr1::shared_ptr<const MetadataValueKey<long> >
-GemSpecification::size_of_download_required_key() const
-{
- return tr1::shared_ptr<const MetadataValueKey<long> >();
-}
-
-const tr1::shared_ptr<const MetadataValueKey<long> >
-GemSpecification::size_of_all_distfiles_key() const
-{
- return tr1::shared_ptr<const MetadataValueKey<long> >();
-}
-
const tr1::shared_ptr<const MetadataValueKey<bool> >
GemSpecification::transient_key() const
{
@@ -581,6 +569,13 @@
if (! id->repository()->some_ids_might_support_action(t))
throw UnsupportedActionError(*id, a);
}
+
+ void visit(const PretendFetchAction & a)
+ {
+ SupportsActionTest<PretendFetchAction> t;
+ if (! id->repository()->some_ids_might_support_action(t))
+ throw UnsupportedActionError(*id, a);
+ }
};
}
Modified: trunk/paludis/repositories/gems/gem_specification.hh
===================================================================
--- trunk/paludis/repositories/gems/gem_specification.hh 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/gems/gem_specification.hh 2008-04-12 21:53:11 UTC (rev 4554)
@@ -111,8 +111,6 @@
virtual const tr1::shared_ptr<const MetadataValueKey<std::string> > source_origin_key() const;
virtual const tr1::shared_ptr<const MetadataValueKey<std::string> > binary_origin_key() const;
- virtual const tr1::shared_ptr<const MetadataValueKey<long> > size_of_download_required_key() const;
- virtual const tr1::shared_ptr<const MetadataValueKey<long> > size_of_all_distfiles_key() const;
virtual const tr1::shared_ptr<const MetadataValueKey<bool> > transient_key() const;
virtual bool supports_action(const SupportsActionTestBase &) const PALUDIS_ATTRIBUTE((warn_unused_result));
Modified: trunk/paludis/repositories/gems/gems_repository.cc
===================================================================
--- trunk/paludis/repositories/gems/gems_repository.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/gems/gems_repository.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -302,6 +302,10 @@
{
}
+ void visit(const SupportsActionTest<PretendFetchAction> &)
+ {
+ }
+
void visit(const SupportsActionTest<ConfigAction> &)
{
}
Modified: trunk/paludis/repositories/gems/installed_gems_repository.cc
===================================================================
--- trunk/paludis/repositories/gems/installed_gems_repository.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/gems/installed_gems_repository.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -328,6 +328,10 @@
{
}
+ void visit(const SupportsActionTest<PretendFetchAction> &)
+ {
+ }
+
void visit(const SupportsActionTest<InfoAction> &)
{
}
Modified: trunk/paludis/repositories/unpackaged/installed_id.cc
===================================================================
--- trunk/paludis/repositories/unpackaged/installed_id.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/unpackaged/installed_id.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -506,18 +506,6 @@
return _imp->fs_location_key;
}
-const tr1::shared_ptr<const MetadataValueKey<long> >
-InstalledUnpackagedID::size_of_download_required_key() const
-{
- return tr1::shared_ptr<const MetadataValueKey<long> >();
-}
-
-const tr1::shared_ptr<const MetadataValueKey<long> >
-InstalledUnpackagedID::size_of_all_distfiles_key() const
-{
- return tr1::shared_ptr<const MetadataValueKey<long> >();
-}
-
namespace paludis
{
class InstalledUnpackagedTransientKey :
@@ -594,6 +582,11 @@
{
result = false;
}
+
+ void visit(const SupportsActionTest<PretendFetchAction> &)
+ {
+ result = false;
+ }
};
struct PerformAction :
@@ -626,6 +619,11 @@
throw UnsupportedActionError(*id, a);
}
+ void visit(PretendFetchAction & a) PALUDIS_ATTRIBUTE((noreturn))
+ {
+ throw UnsupportedActionError(*id, a);
+ }
+
void visit(InfoAction & a) PALUDIS_ATTRIBUTE((noreturn))
{
throw UnsupportedActionError(*id, a);
Modified: trunk/paludis/repositories/unpackaged/installed_id.hh
===================================================================
--- trunk/paludis/repositories/unpackaged/installed_id.hh 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/unpackaged/installed_id.hh 2008-04-12 21:53:11 UTC (rev 4554)
@@ -76,8 +76,6 @@
virtual const tr1::shared_ptr<const MetadataValueKey<std::string> > source_origin_key() const;
virtual const tr1::shared_ptr<const MetadataValueKey<std::string> > binary_origin_key() const;
virtual const tr1::shared_ptr<const MetadataValueKey<FSEntry> > fs_location_key() const;
- virtual const tr1::shared_ptr<const MetadataValueKey<long> > size_of_download_required_key() const;
- virtual const tr1::shared_ptr<const MetadataValueKey<long> > size_of_all_distfiles_key() const;
virtual const tr1::shared_ptr<const MetadataValueKey<bool> > transient_key() const;
virtual bool supports_action(const SupportsActionTestBase &) const PALUDIS_ATTRIBUTE((warn_unused_result));
Modified: trunk/paludis/repositories/unpackaged/installed_repository.cc
===================================================================
--- trunk/paludis/repositories/unpackaged/installed_repository.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/unpackaged/installed_repository.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -203,6 +203,11 @@
result = false;
}
+ void visit(const SupportsActionTest<PretendFetchAction> &)
+ {
+ result = false;
+ }
+
void visit(const SupportsActionTest<InstallAction> &)
{
result = false;
Modified: trunk/paludis/repositories/unpackaged/unpackaged_id.cc
===================================================================
--- trunk/paludis/repositories/unpackaged/unpackaged_id.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/unpackaged/unpackaged_id.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -277,18 +277,6 @@
return _imp->fs_location_key;
}
-const tr1::shared_ptr<const MetadataValueKey<long> >
-UnpackagedID::size_of_download_required_key() const
-{
- return tr1::shared_ptr<const MetadataValueKey<long> >();
-}
-
-const tr1::shared_ptr<const MetadataValueKey<long> >
-UnpackagedID::size_of_all_distfiles_key() const
-{
- return tr1::shared_ptr<const MetadataValueKey<long> >();
-}
-
const tr1::shared_ptr<const MetadataValueKey<bool> >
UnpackagedID::transient_key() const
{
Modified: trunk/paludis/repositories/unpackaged/unpackaged_id.hh
===================================================================
--- trunk/paludis/repositories/unpackaged/unpackaged_id.hh 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/unpackaged/unpackaged_id.hh 2008-04-12 21:53:11 UTC (rev 4554)
@@ -74,8 +74,6 @@
virtual const tr1::shared_ptr<const MetadataValueKey<std::string> > source_origin_key() const;
virtual const tr1::shared_ptr<const MetadataValueKey<std::string> > binary_origin_key() const;
virtual const tr1::shared_ptr<const MetadataValueKey<FSEntry> > fs_location_key() const;
- virtual const tr1::shared_ptr<const MetadataValueKey<long> > size_of_download_required_key() const;
- virtual const tr1::shared_ptr<const MetadataValueKey<long> > size_of_all_distfiles_key() const;
virtual const tr1::shared_ptr<const MetadataValueKey<bool> > transient_key() const;
virtual bool supports_action(const SupportsActionTestBase &) const PALUDIS_ATTRIBUTE((warn_unused_result));
Modified: trunk/paludis/repositories/virtuals/installed_virtuals_repository.cc
===================================================================
--- trunk/paludis/repositories/virtuals/installed_virtuals_repository.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/virtuals/installed_virtuals_repository.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -298,6 +298,10 @@
{
}
+ void visit(const SupportsActionTest<PretendFetchAction> &)
+ {
+ }
+
void visit(const SupportsActionTest<InfoAction> &)
{
}
Modified: trunk/paludis/repositories/virtuals/package_id.cc
===================================================================
--- trunk/paludis/repositories/virtuals/package_id.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/virtuals/package_id.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -418,6 +418,13 @@
if (! id->repository()->some_ids_might_support_action(t))
throw UnsupportedActionError(*id, a);
}
+
+ void visit(const PretendFetchAction & a)
+ {
+ SupportsActionTest<PretendFetchAction> t;
+ if (! id->repository()->some_ids_might_support_action(t))
+ throw UnsupportedActionError(*id, a);
+ }
};
}
@@ -515,18 +522,6 @@
return tr1::shared_ptr<const MetadataValueKey<FSEntry> >();
}
-const tr1::shared_ptr<const MetadataValueKey<long> >
-VirtualsPackageID::size_of_download_required_key() const
-{
- return tr1::shared_ptr<const MetadataValueKey<long> >();
-}
-
-const tr1::shared_ptr<const MetadataValueKey<long> >
-VirtualsPackageID::size_of_all_distfiles_key() const
-{
- return tr1::shared_ptr<const MetadataValueKey<long> >();
-}
-
const tr1::shared_ptr<const MetadataValueKey<bool> >
VirtualsPackageID::transient_key() const
{
Modified: trunk/paludis/repositories/virtuals/package_id.hh
===================================================================
--- trunk/paludis/repositories/virtuals/package_id.hh 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/virtuals/package_id.hh 2008-04-12 21:53:11 UTC (rev 4554)
@@ -102,8 +102,6 @@
virtual const tr1::shared_ptr<const MetadataCollectionKey<PackageIDSequence> > contains_key() const;
virtual const tr1::shared_ptr<const MetadataValueKey<tr1::shared_ptr<const PackageID> > > contained_in_key() const;
virtual const tr1::shared_ptr<const MetadataValueKey<FSEntry> > fs_location_key() const;
- virtual const tr1::shared_ptr<const MetadataValueKey<long> > size_of_download_required_key() const;
- virtual const tr1::shared_ptr<const MetadataValueKey<long> > size_of_all_distfiles_key() const;
virtual const tr1::shared_ptr<const MetadataValueKey<bool> > transient_key() const;
virtual bool supports_action(const SupportsActionTestBase &) const PALUDIS_ATTRIBUTE((warn_unused_result));
Modified: trunk/paludis/repositories/virtuals/virtuals_repository.cc
===================================================================
--- trunk/paludis/repositories/virtuals/virtuals_repository.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/paludis/repositories/virtuals/virtuals_repository.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -394,6 +394,10 @@
void visit(const SupportsActionTest<UninstallAction> &)
{
}
+
+ void visit(const SupportsActionTest<PretendFetchAction> &)
+ {
+ }
};
}
Modified: trunk/src/output/console_install_task.cc
===================================================================
--- trunk/src/output/console_install_task.cc 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/src/output/console_install_task.cc 2008-04-12 21:53:11 UTC (rev 4554)
@@ -38,6 +38,7 @@
#include <paludis/util/visitor_cast.hh>
#include <paludis/util/kc.hh>
#include <paludis/util/make_shared_ptr.hh>
+#include <paludis/util/pretty_print.hh>
#include <paludis/query.hh>
#include <paludis/action.hh>
#include <paludis/repository.hh>
@@ -127,9 +128,11 @@
tr1::shared_ptr<const DestinationsSet> d) :
InstallTask(env, options, d),
_download_size(0),
+ _download_size_overflow(false),
_all_tags(new Set<DepTagEntry>),
_all_use_descriptions(new Set<UseDescription, UseDescriptionComparator>),
_all_expand_prefixes(new UseFlagNameSet),
+ _already_downloaded(new Set<FSEntry>),
_resolution_finished(false)
{
std::fill_n(_counts, static_cast<int>(last_count), 0);
@@ -625,7 +628,10 @@
if (get_download_size())
{
- s << ", at most " << pretty_print_bytes(get_download_size()) << " to download";
+ if (_download_size_overflow)
+ s << ", more than " << pretty_print_bytes(std::numeric_limits<unsigned long>::max()) << " to download";
+ else
+ s << ", at most " << pretty_print_bytes(get_download_size()) << " to download";
}
}
@@ -1229,6 +1235,37 @@
_all_expand_prefixes->inserter());
}
+namespace
+{
+ struct FindDistfilesSize :
+ PretendFetchAction
+ {
+ tr1::shared_ptr<Set<FSEntry> > already_downloaded;
+ unsigned long size;
+ bool overflow;
+
+ FindDistfilesSize(const FetchActionOptions & o, const tr1::shared_ptr<Set<FSEntry> > & a) :
+ PretendFetchAction(o),
+ already_downloaded(a),
+ size(0),
+ overflow(false)
+ {
+ }
+
+ void will_fetch(const FSEntry & destination, const unsigned long size_in_bytes)
+ {
+ if (already_downloaded->end() != already_downloaded->find(destination))
+ return;
+ already_downloaded->insert(destination);
+ unsigned long new_size(size + size_in_bytes);
+ if (new_size < size)
+ overflow = true;
+ else
+ size = new_size;
+ }
+ };
+}
+
void
ConsoleInstallTask::display_merge_list_entry_distsize(const DepListEntry & d,
const DisplayMode m)
@@ -1236,9 +1273,16 @@
if (normal_entry != m && suggested_entry != m)
return;
- if (! d.package_id->size_of_download_required_key() || d.package_id->size_of_download_required_key()->value() == 0)
+ SupportsActionTest<PretendFetchAction> action_test;
+ if (! d.package_id->supports_action(action_test))
return;
+ FindDistfilesSize action(fetch_action_options(), _already_downloaded);
+ d.package_id->perform_action(action);
+
+ if (! action.size)
+ return;
+
if (want_compact())
output_no_endl(" ");
else
@@ -1247,9 +1291,22 @@
output_no_endl(" ");
}
- output_stream() << d.package_id->size_of_download_required_key()->pretty_print()
- << " to download";
- set_download_size(get_download_size() + d.package_id->size_of_download_required_key()->value());
+ if (action.overflow)
+ output_stream() << "more than " << pretty_print_bytes(std::numeric_limits<unsigned long>::max())
+ << " to download";
+ else
+ output_stream() << pretty_print_bytes(action.size) << " to download";
+
+ if (action.overflow)
+ _download_size_overflow = true;
+ else
+ {
+ unsigned long new_size(_download_size + action.size);
+ if (new_size < _download_size)
+ _download_size_overflow = true;
+ else
+ _download_size = new_size;
+ }
}
void
Modified: trunk/src/output/console_install_task.hh
===================================================================
--- trunk/src/output/console_install_task.hh 2008-04-12 16:21:19 UTC (rev 4553)
+++ trunk/src/output/console_install_task.hh 2008-04-12 21:53:11 UTC (rev 4554)
@@ -113,10 +113,12 @@
private:
int _counts[last_count];
- long _download_size;
+ unsigned long _download_size;
+ bool _download_size_overflow;
tr1::shared_ptr<Set<DepTagEntry> > _all_tags;
tr1::shared_ptr<Set<UseDescription, UseDescriptionComparator> > _all_use_descriptions;
tr1::shared_ptr<UseFlagNameSet> _all_expand_prefixes;
+ tr1::shared_ptr<Set<FSEntry> > _already_downloaded;
void _add_descriptions(tr1::shared_ptr<const UseFlagNameSet>,
const tr1::shared_ptr<const PackageID> &, UseDescriptionState);
@@ -284,11 +286,6 @@
return _download_size;
}
- void set_download_size(const long value)
- {
- _download_size = value;
- }
-
tr1::shared_ptr<Set<DepTagEntry> > all_tags()
{
return _all_tags;
More information about the paludis-commits
mailing list