libzypp 17.31.1
RequestedLocalesFile.cc
Go to the documentation of this file.
1/*---------------------------------------------------------------------\
2| ____ _ __ __ ___ |
3| |__ / \ / / . \ . \ |
4| / / \ V /| _/ _/ |
5| / /__ | | | | | | |
6| /_____||_| |_| |_| |
7| |
8\---------------------------------------------------------------------*/
12#include <iostream>
13#include <fstream>
14
15#include <zypp/base/LogTools.h>
16#include <zypp/base/IOStream.h>
17#include <zypp/base/String.h>
18
19#include <zypp/PathInfo.h>
20#include <zypp/TmpPath.h>
21#include <zypp/Date.h>
22
24
25using std::endl;
26
28namespace zypp
29{
31 namespace target
32 {
33
34 void RequestedLocalesFile::load( const Pathname & file_r, LocaleSet & locales_r )
35 {
36 PathInfo pi( file_r );
37 if ( ! pi.isFile() )
38 {
39 WAR << "Can't read " << pi << endl;
40 return;
41 }
42 std::ifstream infile( file_r.c_str() );
43 for( iostr::EachLine in( infile ); in; in.next() )
44 {
45 std::string l( str::trim(*in) );
46 if ( ! l.empty() && l[0] != '#' )
47 {
48 locales_r.insert( Locale(l) );
49 }
50 }
51 MIL << "Read " << pi << endl;
52 }
53
54 void RequestedLocalesFile::store( const Pathname & file_r, const LocaleSet & locales_r )
55 {
57 filesystem::chmod( tmp.path(), 0644 );
58
59 std::ofstream outs( tmp.path().c_str() );
60 outs << "# zypp::RequestedLocales generated " << Date::now() << endl;
61 dumpRange( outs, locales_r.begin(), locales_r.end(), "#", "\n", "\n", "\n", "#\n" );
62 outs.close();
63
64 if ( outs.good() )
65 {
66 filesystem::rename( tmp.path(), file_r );
67 MIL << "Wrote " << PathInfo(file_r) << endl;
68 }
69 else
70 {
71 ERR << "Can't write " << PathInfo(tmp.path()) << endl;
72 }
73 }
74
75 /******************************************************************
76 **
77 ** FUNCTION NAME : operator<<
78 ** FUNCTION TYPE : std::ostream &
79 */
80 std::ostream & operator<<( std::ostream & str, const RequestedLocalesFile & obj )
81 {
82 str << obj.file() << ' ';
83 if ( obj._localesPtr )
84 str << obj.locales();
85 else
86 str << "(unloaded)";
87 return str;
88 }
89
91 } // namespace target
94} // namespace zypp
static Date now()
Return the current time.
Definition: Date.h:78
'Language[_Country]' codes.
Definition: Locale.h:50
Wrapper class for ::stat/::lstat.
Definition: PathInfo.h:221
const char * c_str() const
String representation.
Definition: Pathname.h:110
Provide a new empty temporary file and delete it when no longer needed.
Definition: TmpPath.h:128
static TmpFile makeSibling(const Pathname &sibling_r)
Provide a new empty temporary directory as sibling.
Definition: TmpPath.cc:218
Pathname path() const
Definition: TmpPath.cc:146
Simple lineparser: Traverse each line in a file.
Definition: IOStream.h:112
bool next()
Advance to next line.
Definition: IOStream.cc:72
Save and restore locale set from file.
const LocaleSet & locales() const
Return the loacale set.
static void load(const Pathname &file_r, LocaleSet &locales_r)
Read LocaleSet from file_r.
static void store(const Pathname &file_r, const LocaleSet &locales_r)
Write LocaleSet to file_r.
const Pathname & file() const
Return the file path.
String related utilities and Regular expression matching.
int chmod(const Pathname &path, mode_t mode)
Like 'chmod'.
Definition: PathInfo.cc:1092
int rename(const Pathname &oldpath, const Pathname &newpath)
Like 'rename'.
Definition: PathInfo.cc:742
std::string trim(const std::string &s, const Trim trim_r)
Definition: String.cc:223
std::ostream & operator<<(std::ostream &str, const CommitPackageCache &obj)
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:2
std::ostream & dumpRange(std::ostream &str, TIterator begin, TIterator end, const std::string &intro="{", const std::string &pfx="\n ", const std::string &sep="\n ", const std::string &sfx="\n", const std::string &extro="}")
Print range defined by iterators (multiline style).
Definition: LogTools.h:91
std::unordered_set< Locale > LocaleSet
Definition: Locale.h:27
#define MIL
Definition: Logger.h:96
#define ERR
Definition: Logger.h:98
#define WAR
Definition: Logger.h:97