libzypp 17.31.23
HardLocksFile.h
Go to the documentation of this file.
1/*---------------------------------------------------------------------\
2| ____ _ __ __ ___ |
3| |__ / \ / / . \ . \ |
4| / / \ V /| _/ _/ |
5| / /__ | | | | | | |
6| /_____||_| |_| |_| |
7| |
8\---------------------------------------------------------------------*/
12#ifndef ZYPP_TARGET_HARDLOCKSFILE_H
13#define ZYPP_TARGET_HARDLOCKSFILE_H
14
15#include <iosfwd>
16
17#include <zypp/base/PtrTypes.h>
18
19#include <zypp/Pathname.h>
21#include <zypp/PoolQuery.h>
22
24namespace zypp
25{
27 namespace target
28 {
29
31 //
32 // CLASS NAME : HardLocksFile
33 //
37 {
38 friend std::ostream & operator<<( std::ostream & str, const HardLocksFile & obj );
39 public:
40
42
43 public:
45 HardLocksFile( const Pathname & file_r )
46 : _file( file_r )
47 {}
48
50 const Pathname & file() const
51 { return _file; }
52
57 const Data & data() const
58 {
59 if ( !_dataPtr )
60 {
61 _dataPtr.reset( new Data );
62 Data & mydata( *_dataPtr );
63 load( _file, mydata );
64 }
65 return *_dataPtr;
66 }
67
73 void setData( const Data & data_r )
74 {
75 if ( !_dataPtr )
76 {
77 if ( data_r.empty() )
78 return; // bsc#1096803: Prevent against empty commit without Target having been been loaded (!_dataPtr )
79 _dataPtr.reset( new Data );
80 }
81
82 if ( differs( *_dataPtr, data_r ) )
83 {
84 store( _file, data_r );
85 *_dataPtr = data_r;
86 }
87 }
88
89 private:
91 bool differs( const Data & lhs, const Data & rhs ) const
92 {
93 if ( lhs.size() != rhs.size() )
94 return true;
95 // Complete diff is too expensive and not necessary here.
96 // Just check for the same sequence of items.
97 Data::const_iterator rit = rhs.begin();
98 for_( it, lhs.begin(), lhs.end() )
99 {
100 if ( *it != *rit )
101 return true;
102 ++rit;
103 }
104 return false;
105 }
107 static void load( const Pathname & file_r, Data & data_r );
109 static void store( const Pathname & file_r, const Data & data_r );
110
111 private:
113 mutable scoped_ptr<Data> _dataPtr;
114 };
116
118 std::ostream & operator<<( std::ostream & str, const HardLocksFile & obj );
119
121 } // namespace target
124} // namespace zypp
126#endif // ZYPP_TARGET_HARDLOCKSFILE_H
Save and restore hardlocks.
Definition: HardLocksFile.h:37
void setData(const Data &data_r)
Store new Data.
Definition: HardLocksFile.h:73
bool differs(const Data &lhs, const Data &rhs) const
Helper testing whether two Data differ.
Definition: HardLocksFile.h:91
const Data & data() const
Return the data.
Definition: HardLocksFile.h:57
static void load(const Pathname &file_r, Data &data_r)
Read Data from file_r.
static void store(const Pathname &file_r, const Data &data_r)
Write Data to file_r.
const Pathname & file() const
Return the file path.
Definition: HardLocksFile.h:50
pool::PoolTraits::HardLockQueries Data
Definition: HardLocksFile.h:41
scoped_ptr< Data > _dataPtr
friend std::ostream & operator<<(std::ostream &str, const HardLocksFile &obj)
HardLocksFile(const Pathname &file_r)
Ctor taking the file to read/write.
Definition: HardLocksFile.h:45
String related utilities and Regular expression matching.
std::ostream & operator<<(std::ostream &str, const CommitPackageCache &obj)
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:2
std::list< PoolQuery > HardLockQueries
hard locks from etc/zypp/locks
Definition: PoolTraits.h:88
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
Definition: Easy.h:28