RequestedLocalesFile.cc
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00012 #include <iostream>
00013 #include <fstream>
00014
00015 #include "zypp/base/LogTools.h"
00016 #include "zypp/base/IOStream.h"
00017 #include "zypp/base/String.h"
00018
00019 #include "zypp/PathInfo.h"
00020 #include "zypp/TmpPath.h"
00021 #include "zypp/Date.h"
00022
00023 #include "zypp/target/RequestedLocalesFile.h"
00024
00025 using std::endl;
00026
00028 namespace zypp
00029 {
00030
00031 namespace target
00032 {
00033
00034 void RequestedLocalesFile::load( const Pathname & file_r, LocaleSet & locales_r )
00035 {
00036 PathInfo pi( file_r );
00037 if ( ! pi.isFile() )
00038 {
00039 WAR << "Can't read " << pi << endl;
00040 return;
00041 }
00042 std::ifstream infile( file_r.c_str() );
00043 for( iostr::EachLine in( infile ); in; in.next() )
00044 {
00045 std::string l( str::trim(*in) );
00046 if ( ! l.empty() && l[0] != '#' )
00047 {
00048 locales_r.insert( Locale(l) );
00049 }
00050 }
00051 MIL << "Read " << pi << endl;
00052 }
00053
00054 void RequestedLocalesFile::store( const Pathname & file_r, const LocaleSet & locales_r )
00055 {
00056 filesystem::TmpFile tmp( filesystem::TmpFile::makeSibling( file_r ) );
00057 filesystem::chmod( tmp.path(), 0644 );
00058
00059 std::ofstream outs( tmp.path().c_str() );
00060 outs << "# zypp::RequestedLocales generated " << Date::now() << endl;
00061 dumpRange( outs, locales_r.begin(), locales_r.end(), "#", "\n", "\n", "\n", "#\n" );
00062 outs.close();
00063
00064 if ( outs.good() )
00065 {
00066 filesystem::rename( tmp.path(), file_r );
00067 MIL << "Wrote " << PathInfo(file_r) << endl;
00068 }
00069 else
00070 {
00071 ERR << "Can't write " << PathInfo(tmp.path()) << endl;
00072 }
00073 }
00074
00075
00076
00077
00078
00079
00080 std::ostream & operator<<( std::ostream & str, const RequestedLocalesFile & obj )
00081 {
00082 str << obj.file() << ' ';
00083 if ( obj._localesPtr )
00084 str << obj.locales();
00085 else
00086 str << "(unloaded)";
00087 return str;
00088 }
00089
00091 }
00094 }