29 #undef ZYPP_BASE_LOGGER_LOGGROUP
30 #define ZYPP_BASE_LOGGER_LOGGROUP "zypp::posttrans"
61 WAR <<
"Unexpectedly this is no package: " << rpmPackage_r << endl;
65 std::string prog( pkg->tag_posttransprog() );
66 if ( prog.empty() || prog ==
"<lua>" )
73 std::ofstream out( script.
path().
c_str() );
74 out <<
"#! " << pkg->tag_posttransprog() << endl
75 << pkg->tag_posttrans() << endl;
78 MIL <<
"COLLECT posttrans: '" <<
PathInfo( script.
path() ) <<
"' for package: '" << pkg->tag_name() <<
"'" << endl;
98 bool firstScript =
true;
101 const auto &scriptPair =
_scripts.front();
102 const std::string & script = scriptPair.first;
103 const std::string & pkgident( script.substr( 0, script.size()-6 ) );
105 scriptProgress.
name(
str::Format(
_(
"Executing %%posttrans script '%1%'")) % pkgident );
107 bool canContinue =
true;
110 canContinue = scriptProgress.
toMin();
112 canContinue = scriptProgress.
incr();
117 msg <<
"Execution of %posttrans scripts cancelled";
119 historylog.
comment( msg,
true );
126 for ( it.
findByName( scriptPair.second ); *it; ++it )
129 MIL <<
"EXECUTE posttrans: " << script <<
" with argument: " << npkgs << endl;
132 (noRootScriptDir/script).
asString(),
141 collect <<
" " << line;
147 int ret = prog.
close();
148 const std::string & scriptmsg( collect );
150 if ( ret != 0 || ! scriptmsg.empty() )
152 if ( ! scriptmsg.empty() )
155 msg <<
"Output of " << pkgident <<
" %posttrans script:\n" << scriptmsg;
156 historylog.
comment( msg,
true );
164 msg << pkgident <<
" %posttrans script failed (returned " << ret <<
")";
166 historylog.
comment( msg,
true );
173 scriptProgress.
name(
_(
"Executing %posttrans scripts") );
174 scriptProgress.
toMax();
188 msg <<
"%posttrans scripts skipped while aborting:\n";
189 for (
const auto & script :
_scripts )
191 const std::string & pkgident( script.first.substr( 0, script.first.size()-6 ) );
192 WAR <<
"UNEXECUTED posttrans: " << script.first << endl;
193 msg <<
" " << pkgident <<
"\n";
196 historylog.
comment( msg,
true );
214 std::list< std::pair< std::string, std::string > >
_scripts;
220 {
return str <<
"RpmPostTransCollector::Impl"; }
224 {
return str << obj; }
233 : _pimpl( new
Impl( root_r ) )
240 {
return _pimpl->collectScriptFromPackage( rpmPackage_r ); }
243 {
return _pimpl->executeScripts(); }
246 {
return _pimpl->discardScripts(); }
Reference counted access to a Tp object calling a custom Dispose function when the last AutoDispose h...
Execute a program and give access to its io An object of this class encapsulates the execution of an ...
std::vector< std::string > Arguments
int close()
Wait for the progamm to complete.
Writing the zypp history file.
void comment(const std::string &comment, bool timestamp=false)
Log a comment (even multiline).
Maintain [min,max] and counter (value) for progress counting.
void sendTo(const ReceiverFnc &fnc_r)
Set ReceiverFnc.
bool toMax()
Set counter value to current max value (unless no range).
void name(const std::string &name_r)
Set counter name.
function< bool(const ProgressData &)> ReceiverFnc
Most simple version of progress reporting The percentage in most cases.
bool incr(value_type val_r=1)
Increment counter value (default by 1).
bool toMin()
Set counter value to current min value.
static ZConfig & instance()
Singleton ctor.
Typesafe passing of user data via callbacks.
std::string receiveLine()
Read one line from the input stream.
Wrapper class for ::stat/::lstat.
std::string basename() const
Return the last component of this path.
const char * c_str() const
String representation.
Provide a new empty temporary directory and recursively delete it when no longer needed.
Provide a new empty temporary file and delete it when no longer needed.
bool autoCleanup() const
Whether path is valid and deleted when the last reference drops.
RpmPostTransCollector implementation.
bool executeScripts()
Execute the remembered scripts.
void discardScripts()
Discard all remembered scrips.
boost::scoped_ptr< filesystem::TmpDir > _ptrTmpdir
Pathname tmpDir()
Lazy create tmpdir on demand.
std::list< std::pair< std::string, std::string > > _scripts
friend std::ostream & dumpOn(std::ostream &str, const Impl &obj)
bool collectScriptFromPackage(ManagedFile rpmPackage_r)
Extract and remember a packages posttrans script for later execution.
friend std::ostream & operator<<(std::ostream &str, const Impl &obj)
std::ostream & dumpOn(std::ostream &str, const RpmPostTransCollector::Impl &obj)
Verbose stream output.
std::ostream & operator<<(std::ostream &str, const RpmPostTransCollector::Impl &obj)
Stream output.
Impl(const Pathname &root_r)
Extract and remember posttrans scripts for later execution.
RpmPostTransCollector(const Pathname &root_r)
Default ctor.
RW_pointer< Impl > _pimpl
Implementation class.
bool collectScriptFromPackage(ManagedFile rpmPackage_r)
Extract and remember a packages posttrans script for later execution.
bool executeScripts()
Execute the remembered scripts.
~RpmPostTransCollector()
Dtor.
void discardScripts()
Discard all remembered scrips.
Subclass to retrieve database content.
bool findByName(const std::string &name_r)
Reset to iterate all packages with a certain name.
String related utilities and Regular expression matching.
boost::noncopyable NonCopyable
Ensure derived classes cannot be copied.
int addmod(const Pathname &path, mode_t mode)
Add the mode bits to the file given by path.
std::string numstring(char n, int w=0)
std::ostream & dumpOn(std::ostream &str, const RpmPostTransCollector &obj)
std::ostream & operator<<(std::ostream &str, const CommitPackageCache &obj)
Easy-to use interface to the ZYPP dependency resolver.
std::string asString(const DefaultIntegral< Tp, TInitial > &obj)
static bool warning(const std::string &msg_r, const UserData &userData_r=UserData())
send warning text
static bool info(const std::string &msg_r, const UserData &userData_r=UserData())
send message text
Convenient building of std::string via std::ostringstream Basically a std::ostringstream autoconverti...