libzypp
17.14.0
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
ZYppImpl.cc
Go to the documentation of this file.
1
/*---------------------------------------------------------------------\
2
| ____ _ __ __ ___ |
3
| |__ / \ / / . \ . \ |
4
| / / \ V /| _/ _/ |
5
| / /__ | | | | | | |
6
| /_____||_| |_| |_| |
7
| |
8
\---------------------------------------------------------------------*/
13
#include <iostream>
14
#include "
zypp/TmpPath.h
"
15
#include "
zypp/base/Logger.h
"
16
#include "
zypp/base/String.h
"
17
#include "
zypp/base/Env.h
"
18
19
#include "
zypp/zypp_detail/ZYppImpl.h
"
20
#include "
zypp/target/TargetImpl.h
"
21
#include "
zypp/ZYpp.h
"
22
#include "
zypp/DiskUsageCounter.h
"
23
#include "
zypp/ZConfig.h
"
24
#include "
zypp/sat/Pool.h
"
25
#include "
zypp/PoolItem.h
"
26
27
#include "
zypp/ZYppCallbacks.h
"
// JobReport::instance
28
29
using
std::endl;
30
32
namespace
zypp
33
{
34
36
namespace
media
37
{
38
ScopedDisableMediaChangeReport::ScopedDisableMediaChangeReport
(
bool
condition_r )
39
{
40
static
weak_ptr<callback::TempConnect<media::MediaChangeReport> > globalguard;
41
if
( condition_r && ! (
_guard
= globalguard.lock()) )
42
{
43
// aquire a new one....
44
_guard
.reset(
new
callback::TempConnect<media::MediaChangeReport>
() );
45
globalguard =
_guard
;
46
}
47
}
48
}
// namespace media
50
51
callback::SendReport<JobReport>
&
JobReport::instance
()
52
{
53
static
callback::SendReport<JobReport>
_report;
54
return
_report;
55
}
56
57
59
namespace
zypp_detail
60
{
61
63
//
64
// METHOD NAME : ZYppImpl::ZYppImpl
65
// METHOD TYPE : Constructor
66
//
67
ZYppImpl::ZYppImpl
()
68
: _target(
nullptr
)
69
, _resolver( new
Resolver
(
ResPool
::instance()) )
70
{
71
ZConfig::instance
().
about
(
MIL
);
72
MIL
<<
"Initializing keyring..."
<< std::endl;
73
_keyring
=
new
KeyRing
(
tmpPath
());
74
}
75
77
//
78
// METHOD NAME : ZYppImpl::~ZYppImpl
79
// METHOD TYPE : Destructor
80
//
81
ZYppImpl::~ZYppImpl
()
82
{}
83
84
//------------------------------------------------------------------------
85
// add/remove resolvables
86
87
DiskUsageCounter::MountPointSet
ZYppImpl::diskUsage
()
88
{
89
if
( !
_disk_usage
)
90
{
91
setPartitions
(
DiskUsageCounter::detectMountPoints
() );
92
}
93
return
_disk_usage
->disk_usage(
pool
());
94
}
95
96
void
ZYppImpl::setPartitions
(
const
DiskUsageCounter::MountPointSet
&mp)
97
{
98
_disk_usage
.reset(
new
DiskUsageCounter
());
99
_disk_usage
->setMountPoints(mp);
100
}
101
102
DiskUsageCounter::MountPointSet
ZYppImpl::getPartitions
()
const
103
{
104
if
(
_disk_usage
)
105
return
_disk_usage
->getMountPoints();
106
else
107
return
DiskUsageCounter::detectMountPoints
();
108
}
109
110
//------------------------------------------------------------------------
111
// target
112
113
Target_Ptr
ZYppImpl::target
()
const
114
{
115
if
(!
_target
)
116
ZYPP_THROW
(
Exception
(
"Target not initialized."
));
117
return
_target
;
118
}
119
120
void
ZYppImpl::initializeTarget
(
const
Pathname & root,
bool
doRebuild_r )
121
{
122
MIL
<<
"initTarget( "
<< root << (doRebuild_r?
", rebuilddb"
:
""
) <<
")"
<< endl;
123
if
(
_target
) {
124
if
(
_target
->root() == root) {
125
MIL
<<
"Repeated call to initializeTarget()"
<< endl;
126
return
;
127
}
128
129
_target
->unload();
130
131
}
132
_target
=
new
Target
( root, doRebuild_r );
133
_target
->buildCache();
134
}
135
136
void
ZYppImpl::finishTarget
()
137
{
138
if
(
_target
)
139
_target
->unload();
140
141
_target
=
nullptr
;
142
}
143
144
//------------------------------------------------------------------------
145
// commit
146
149
ZYppCommitResult
ZYppImpl::commit
(
const
ZYppCommitPolicy
& policy_r )
150
{
151
if
( getenv(
"ZYPP_TESTSUITE_FAKE_ARCH"
) )
152
{
153
ZYPP_THROW
(
Exception
(
"ZYPP_TESTSUITE_FAKE_ARCH set. Commit not allowed and disabled."
) );
154
}
155
156
MIL
<<
"Attempt to commit ("
<< policy_r <<
")"
<< endl;
157
if
(!
_target
)
158
ZYPP_THROW
(
Exception
(
"Target not initialized."
) );
159
160
161
env::ScopedSet
ea {
"ZYPP_IS_RUNNING"
,
str::numstring
(getpid()).c_str() };
162
env::ScopedSet
eb;
163
if
(
_target
->chrooted() )
164
eb =
env::ScopedSet
(
"SYSTEMD_OFFLINE"
,
"1"
);
// bsc#1118758 - indicate no systemd if chrooted install
165
166
ZYppCommitResult
res =
_target
->_pimpl->commit(
pool
(), policy_r );
167
168
if
(! policy_r.
dryRun
() )
169
{
170
if
( policy_r.
syncPoolAfterCommit
() )
171
{
172
// reload new status from target
173
DBG
<<
"reloading "
<<
sat::Pool::instance
().
systemRepoAlias
() <<
" repo to pool"
<< endl;
174
_target
->load();
175
}
176
else
177
{
178
DBG
<<
"unloading "
<<
sat::Pool::instance
().
systemRepoAlias
() <<
" repo from pool"
<< endl;
179
_target
->unload();
180
}
181
}
182
183
MIL
<<
"Commit ("
<< policy_r <<
") returned: "
184
<< res << endl;
185
return
res;
186
}
187
188
void
ZYppImpl::installSrcPackage
(
const
SrcPackage_constPtr & srcPackage_r )
189
{
190
if
(!
_target
)
191
ZYPP_THROW
(
Exception
(
"Target not initialized."
) );
192
_target
->_pimpl->installSrcPackage( srcPackage_r );
193
}
194
195
ManagedFile
ZYppImpl::provideSrcPackage
(
const
SrcPackage_constPtr & srcPackage_r )
196
{
197
if
(!
_target
)
198
ZYPP_THROW
(
Exception
(
"Target not initialized."
) );
199
return
_target
->_pimpl->provideSrcPackage( srcPackage_r );
200
}
201
202
//------------------------------------------------------------------------
203
// target store path
204
205
Pathname
ZYppImpl::homePath
()
const
206
{
return
_home_path
.empty() ? Pathname(
"/var/lib/zypp"
) :
_home_path
; }
207
208
void
ZYppImpl::setHomePath
(
const
Pathname & path )
209
{
_home_path
= path; }
210
211
Pathname
ZYppImpl::tmpPath
()
const
212
{
return
zypp::myTmpDir
(); }
213
214
/******************************************************************
215
**
216
** FUNCTION NAME : operator<<
217
** FUNCTION TYPE : std::ostream &
218
*/
219
std::ostream &
operator<<
( std::ostream & str,
const
ZYppImpl
& obj )
220
{
221
return
str <<
"ZYppImpl"
;
222
}
223
225
}
// namespace zypp_detail
227
228
Pathname
myTmpDir
()
// from TmpPath.h
229
{
230
static
filesystem::TmpDir
_tmpdir(
filesystem::TmpPath::defaultLocation
(),
"zypp."
);
231
return
_tmpdir.
path
();
232
}
233
235
}
// namespace zypp
zypp
zypp_detail
ZYppImpl.cc
Generated by
1.8.2