~thopiekar/zypper/libzypp-manual-import

« back to all changes in this revision

Viewing changes to zypp/zypp_detail/ZYppImpl.cc

  • Committer: Thomas-Karl Pietrowski
  • Date: 2014-01-29 22:44:28 UTC
  • Revision ID: thopiekar@googlemail.com-20140129224428-gpcqnsdakby362n8
firstĀ import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*---------------------------------------------------------------------\
 
2
|                          ____ _   __ __ ___                          |
 
3
|                         |__  / \ / / . \ . \                         |
 
4
|                           / / \ V /|  _/  _/                         |
 
5
|                          / /__ | | | | | |                           |
 
6
|                         /_____||_| |_| |_|                           |
 
7
|                                                                      |
 
8
\---------------------------------------------------------------------*/
 
9
/** \file       zypp/zypp_detail/ZYppImpl.cc
 
10
 *
 
11
*/
 
12
 
 
13
#include <iostream>
 
14
#include "zypp/TmpPath.h"
 
15
#include "zypp/base/Logger.h"
 
16
#include "zypp/base/String.h"
 
17
 
 
18
#include "zypp/zypp_detail/ZYppImpl.h"
 
19
#include "zypp/solver/detail/Helper.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
using std::endl;
 
28
 
 
29
///////////////////////////////////////////////////////////////////
 
30
namespace zypp
 
31
{ /////////////////////////////////////////////////////////////////
 
32
  ///////////////////////////////////////////////////////////////////
 
33
  namespace zypp_detail
 
34
  { /////////////////////////////////////////////////////////////////
 
35
 
 
36
    ///////////////////////////////////////////////////////////////////
 
37
    //
 
38
    //  METHOD NAME : ZYppImpl::ZYppImpl
 
39
    //  METHOD TYPE : Constructor
 
40
    //
 
41
    ZYppImpl::ZYppImpl()
 
42
    : _target(0)
 
43
    , _resolver( new Resolver( ResPool::instance()) )
 
44
    {
 
45
      ZConfig::instance().about( MIL );
 
46
      MIL << "Initializing keyring..." << std::endl;
 
47
      _keyring = new KeyRing(tmpPath());
 
48
    }
 
49
 
 
50
    ///////////////////////////////////////////////////////////////////
 
51
    //
 
52
    //  METHOD NAME : ZYppImpl::~ZYppImpl
 
53
    //  METHOD TYPE : Destructor
 
54
    //
 
55
    ZYppImpl::~ZYppImpl()
 
56
    {}
 
57
 
 
58
    //------------------------------------------------------------------------
 
59
    // add/remove resolvables
 
60
 
 
61
    DiskUsageCounter::MountPointSet ZYppImpl::diskUsage()
 
62
    {
 
63
      if ( ! _disk_usage )
 
64
      {
 
65
        setPartitions( DiskUsageCounter::detectMountPoints() );
 
66
      }
 
67
      return _disk_usage->disk_usage(pool());
 
68
    }
 
69
 
 
70
    void ZYppImpl::setPartitions(const DiskUsageCounter::MountPointSet &mp)
 
71
    {
 
72
      _disk_usage.reset(new DiskUsageCounter());
 
73
      _disk_usage->setMountPoints(mp);
 
74
    }
 
75
 
 
76
    DiskUsageCounter::MountPointSet ZYppImpl::getPartitions() const
 
77
    {
 
78
      if (_disk_usage)
 
79
        return _disk_usage->getMountPoints();
 
80
      else
 
81
        return DiskUsageCounter::detectMountPoints();
 
82
    }
 
83
 
 
84
    //------------------------------------------------------------------------
 
85
    // target
 
86
 
 
87
    Target_Ptr ZYppImpl::target() const
 
88
    {
 
89
      if (! _target)
 
90
        ZYPP_THROW(Exception("Target not initialized."));
 
91
      return _target;
 
92
     }
 
93
 
 
94
    void ZYppImpl::initializeTarget( const Pathname & root, bool doRebuild_r )
 
95
    {
 
96
      MIL << "initTarget( " << root << (doRebuild_r?", rebuilddb":"") << ")" << endl;
 
97
      if (_target) {
 
98
          if (_target->root() == root) {
 
99
              MIL << "Repeated call to initializeTarget()" << endl;
 
100
              return;
 
101
          }
 
102
 
 
103
          _target->unload();
 
104
 
 
105
      }
 
106
      _target = new Target( root, doRebuild_r );
 
107
      _target->buildCache();
 
108
    }
 
109
 
 
110
    void ZYppImpl::finishTarget()
 
111
    {
 
112
      if (_target)
 
113
          _target->unload();
 
114
 
 
115
      _target = 0;
 
116
    }
 
117
 
 
118
    //------------------------------------------------------------------------
 
119
    // commit
 
120
 
 
121
    /** \todo Remove workflow from target, lot's of it could be done here,
 
122
     * and target used for transact. */
 
123
    ZYppCommitResult ZYppImpl::commit( const ZYppCommitPolicy & policy_r )
 
124
    {
 
125
      setenv( "ZYPP_IS_RUNNING", str::numstring(getpid()).c_str(), 1 );
 
126
 
 
127
      if ( getenv("ZYPP_TESTSUITE_FAKE_ARCH") )
 
128
      {
 
129
        ZYPP_THROW( Exception("ZYPP_TESTSUITE_FAKE_ARCH set. Commit not allowed and disabled.") );
 
130
      }
 
131
 
 
132
      MIL << "Attempt to commit (" << policy_r << ")" << endl;
 
133
      if (! _target)
 
134
        ZYPP_THROW( Exception("Target not initialized.") );
 
135
 
 
136
      ZYppCommitResult res = _target->_pimpl->commit( pool(), policy_r );
 
137
 
 
138
      if (! policy_r.dryRun() )
 
139
      {
 
140
        if ( policy_r.syncPoolAfterCommit() )
 
141
          {
 
142
            // reload new status from target
 
143
            DBG << "reloading " << sat::Pool::instance().systemRepoAlias() << " repo to pool" << endl;
 
144
            _target->load();
 
145
          }
 
146
        else
 
147
          {
 
148
            DBG << "unloading " << sat::Pool::instance().systemRepoAlias() << " repo from pool" << endl;
 
149
            _target->unload();
 
150
          }
 
151
      }
 
152
 
 
153
      MIL << "Commit (" << policy_r << ") returned: "
 
154
          << res << endl;
 
155
      return res;
 
156
    }
 
157
 
 
158
    void ZYppImpl::installSrcPackage( const SrcPackage_constPtr & srcPackage_r )
 
159
    {
 
160
      if (! _target)
 
161
        ZYPP_THROW( Exception("Target not initialized.") );
 
162
      _target->_pimpl->installSrcPackage( srcPackage_r );
 
163
    }
 
164
 
 
165
    ManagedFile ZYppImpl::provideSrcPackage( const SrcPackage_constPtr & srcPackage_r )
 
166
    {
 
167
      if (! _target)
 
168
        ZYPP_THROW( Exception("Target not initialized.") );
 
169
      return _target->_pimpl->provideSrcPackage( srcPackage_r );
 
170
    }
 
171
 
 
172
    //------------------------------------------------------------------------
 
173
    // target store path
 
174
 
 
175
    Pathname ZYppImpl::homePath() const
 
176
    { return _home_path.empty() ? Pathname("/var/lib/zypp") : _home_path; }
 
177
 
 
178
    void ZYppImpl::setHomePath( const Pathname & path )
 
179
    { _home_path = path; }
 
180
 
 
181
    Pathname ZYppImpl::tmpPath() const
 
182
    {
 
183
      static TmpDir zypp_tmp_dir( TmpPath::defaultLocation(), "zypp." );
 
184
      return zypp_tmp_dir.path();
 
185
    }
 
186
 
 
187
    /******************************************************************
 
188
     **
 
189
     ** FUNCTION NAME : operator<<
 
190
     ** FUNCTION TYPE : std::ostream &
 
191
    */
 
192
    std::ostream & operator<<( std::ostream & str, const ZYppImpl & obj )
 
193
    {
 
194
      return str << "ZYppImpl";
 
195
    }
 
196
 
 
197
    /////////////////////////////////////////////////////////////////
 
198
  } // namespace zypp_detail
 
199
  ///////////////////////////////////////////////////////////////////
 
200
  /////////////////////////////////////////////////////////////////
 
201
} // namespace zypp
 
202
///////////////////////////////////////////////////////////////////