53 ,
type(repo::RepoType::NONE_e)
81 std::string licenseStem(
"license" );
82 if ( !name_r.empty() )
85 licenseStem += name_r;
104 if (
_baseUrls.empty() && ! mlurl.asString().empty() )
143 if ( PathInfo( (master=
metadataPath()/
"/repodata/repomd.xml") ).isFile() )
154 else if ( PathInfo( (master=
metadataPath()/
"/content") ).isFile() )
158 [
this](
int num_r, std::string line_r )->
bool
162 std::vector<std::string> words;
163 if (
str::split( line_r, std::back_inserter(words) ) > 1
164 && words[0].length() == 12 )
166 this->
_keywords.second.insert( ++words.begin(), words.end() );
197 return indeterminate;
204 Pathname gpgcheckFile(
metadataPath() /
".repo_gpgcheck" );
205 if ( PathInfo(gpgcheckFile).isExist() )
207 TriBool linkval( indeterminate );
230 static const Pathname truePath(
"true" );
231 static const Pathname falsePath(
"false" );
232 static const Pathname indeterminatePath(
"indeterminate" );
235 static const ssize_t bufsiz = 63;
236 static char buf[bufsiz+1];
237 ssize_t ret =
::readlink( path_r.c_str(), buf, bufsiz );
238 buf[ret == -1 ? 0 : ret] =
'\0';
240 Pathname linkval( buf );
243 if ( linkval == truePath )
245 else if ( linkval == falsePath )
247 else if ( linkval == indeterminatePath )
248 ret_r = indeterminate;
323 mutable std::pair<FalseBool, std::set<std::string> >
_keywords;
327 friend Impl * rwcowClone<Impl>(
const Impl * rhs );
330 {
return new Impl( *
this ); }
337 return str <<
"RepoInfo::Impl";
349 : _pimpl( new
Impl() )
425 {
if ( ! sameTriboolState( lhs, rhs ) ) { lhs = rhs;
return true; }
return false; }
429 bool changed =
false;
430 if ( changeGpgCheckTo( ogpg[0], g ) ) changed =
true;
431 if ( changeGpgCheckTo( ogpg[1], r ) ) changed =
true;
432 if ( changeGpgCheckTo( ogpg[2], p ) ) changed =
true;
442 bool changed =
false;
446 changed = changeGpgCheckTo( ogpg,
true, indeterminate, indeterminate );
449 changed = changeGpgCheckTo( ogpg,
true,
true,
true );
452 changed = changeGpgCheckTo( ogpg,
true,
false,
false );
455 changed = changeGpgCheckTo( ogpg,
true,
false, indeterminate );
458 changed = changeGpgCheckTo( ogpg,
true, indeterminate,
false );
461 changed = changeGpgCheckTo( ogpg, indeterminate, indeterminate, indeterminate );
464 changed = changeGpgCheckTo( ogpg,
false, indeterminate, indeterminate );
635 if ( licenseTgz.empty() )
639 cmd.push_back(
"tar" );
640 cmd.push_back(
"-t" );
641 cmd.push_back(
"-z" );
642 cmd.push_back(
"-f" );
643 cmd.push_back( licenseTgz.asString() );
647 static const std::string noAcceptanceFile =
"no-acceptance-needed\n";
650 if ( output == noAcceptanceFile )
656 MIL <<
"License(" << name_r <<
") in " <<
name() <<
" has to be accepted: " << (accept?
"true":
"false" ) << endl;
665 {
return getLicense( std::string(), lang_r ); }
670 if ( avlocales.empty() )
671 return std::string();
674 if ( !getLang && avlocales.find(
Locale::noCode ) == avlocales.end() )
676 WAR <<
"License(" << name_r <<
") in " <<
name() <<
" contains no fallback text!" << endl;
680 getLang = *avlocales.begin();
684 static const std::string licenseFileFallback(
"license.txt" );
685 std::string licenseFile( !getLang ? licenseFileFallback
689 cmd.push_back(
"tar" );
690 cmd.push_back(
"-x" );
691 cmd.push_back(
"-z" );
692 cmd.push_back(
"-O" );
693 cmd.push_back(
"-f" );
695 cmd.push_back( licenseFile );
714 if ( licenseTgz.empty() )
718 cmd.push_back(
"tar" );
719 cmd.push_back(
"-t" );
720 cmd.push_back(
"-z" );
721 cmd.push_back(
"-f" );
722 cmd.push_back( licenseTgz.asString() );
728 static const C_Str license(
"license." );
729 static const C_Str dotTxt(
".txt\n" );
732 if ( output.size() <= license.
size() + dotTxt.
size() )
735 ret.insert(
Locale( std::string( output.c_str()+license.
size(), output.size()- license.
size() - dotTxt.
size() ) ) );
751 str <<
"- url : " <<
url << std::endl;
756 auto strif( [&] (
const std::string & tag_r,
const std::string & value_r ) {
757 if ( ! value_r.empty() )
758 str << tag_r << value_r << std::endl;
763 str <<
"- type : " <<
type() << std::endl;
764 str <<
"- priority : " <<
priority() << std::endl;
767 #define OUTS(T,B) ( indeterminate(T) ? (std::string("D(")+(B?"Y":"N")+")") : ((bool)T?"Y":"N") )
777 str <<
"- gpgkey : " <<
url << std::endl;
781 str <<
"- keeppackages: " <<
keepPackages() << std::endl;
783 strif(
"- service : ",
service() );
794 RepoInfoBase::dumpAsIniOn(str);
802 str << indent <<
url << endl;
803 if ( indent.empty() ) indent =
" ";
808 str <<
"path="<<
path() << endl;
816 str <<
"priority=" <<
priority() << endl;
828 std::string indent(
"gpgkey=");
831 str << indent <<
url << endl;
832 if ( indent[0] !=
' ' )
841 str <<
"service=" <<
service() << endl;
856 <<
" priority=\"" <<
priority() <<
"\""
857 <<
" enabled=\"" <<
enabled() <<
"\""
859 <<
" gpgcheck=\"" <<
gpgCheck() <<
"\""
863 str <<
" gpgkey=\"" <<
escape(tmpstr) <<
"\"";
871 str <<
"<url>" <<
escape((*it).asString()) <<
"</url>" << endl;
874 str <<
"</repo>" << endl;
888 #define OUTS( V ) case RepoInfo::V: return str << #V; break
889 OUTS( GpgCheck::On );
890 OUTS( GpgCheck::Strict );
891 OUTS( GpgCheck::AllowUnsigned );
892 OUTS( GpgCheck::AllowUnsignedRepo );
893 OUTS( GpgCheck::AllowUnsignedPackage );
895 OUTS( GpgCheck::Off );
896 OUTS( GpgCheck::indeterminate );
899 return str <<
"GpgCheck::UNKNOWN";
static const Locale noCode
Empty code.
LocaleSet getLicenseLocales() const
Return the locales the license is available for.
TriBool internalValidRepoSignature() const
Signature check result needs to be stored/retrieved from _metadataPath.
std::string name() const
Repository name.
std::string targetDistribution() const
Distribution for which is this repository meant.
bool gpgKeyUrlsEmpty() const
Whether gpgkey URLs are defined.
void setGpgKeyUrl(const Url &gpgkey)
(leagcy API) Set the gpgkey URL defined for this repo
static unsigned defaultPriority()
The default priority (99).
std::string alias() const
unique identifier for this source.
TriBool repoGpgCheck() const
Check repo matadata signatures (indeterminate - according to gpgcheck)
Url rawUrl() const
Pars pro toto: The first repository raw url (no variables replaced)
virtual std::ostream & dumpAsIniOn(std::ostream &str) const
Write this RepoInfo object into str in a .repo file format.
void packagesPath(Pathname new_r)
std::string asString(const DefaultIntegral< Tp, TInitial > &obj)
bool _mirrorListForceMetalink
static ZConfig & instance()
Singleton ctor.
void setPriority(unsigned newval_r)
Set repository priority for solver.
int readlink(const Pathname &symlink_r, Pathname &target_r)
Like 'readlink'.
void rawGpgCheck(TriBool val_r)
RWCOW_pointer< Impl > _pimpl
Pointer to implementation.
Pathname filepath() const
File where this repo was read from.
Pathname licenseTgz(const std::string &name_r) const
Path to a license tarball in case it exists in the repo.
Pathname metadataPath() const
url_set gpgKeyUrls() const
The list of gpgkey URLs defined for this repo.
void setMirrorListUrl(const Url &url)
Set mirror list url.
repo::RepoVariablesUrlReplacer replacer
urls_const_iterator baseUrlsBegin() const
iterator that points at begin of repository urls
std::string escape(const C_Str &str_r, const char sep_r)
Escape desired character c using a backslash.
std::ostream & dumpOn(std::ostream &str, const zypp::shared_ptr< void > &obj)
Pathname metadataPath() const
Path where this repo metadata was read from.
std::ostream & operator<<(std::ostream &str, const RepoInfo::Impl &obj)
bool pkgGpgCheck() const
Whether the signature of rpm packages should be checked for this repo.
void setProbedType(const repo::RepoType &t) const
This allows to adjust the RepoType lazy, from NONE to some probed value, even for const objects...
TriBool rawPkgGpgCheck() const
What is known about a repository.
void getRawGpgChecks(TriBool &g_r, TriBool &r_r, TriBool &p_r) const
Raw values for RepoManager.
void setGpgCheck(TriBool value_r)
Set the value for gpgCheck (or indeterminate to use the default).
TriBool _rawPkgGpgCheck
need to check pkg sign.: Y/N/(ZConf(Y/N/gpgCheck))
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
Request the standard behavior (as defined in zypp.conf or 'Job')
void setBaseUrl(const Url &url)
Clears current base URL list and adds url.
bool enabled() const
If enabled is false, then this repository must be ignored as if does not exists, except when checking...
urls_const_iterator baseUrlsEnd() const
iterator that points at end of repository urls
std::string form(const char *format,...) __attribute__((format(printf
Printf style construction of std::string.
void internalSetValidRepoSignature(TriBool value_r)
Pathname packagesPath() const
Path where this repo packages are cached.
base::ValueTransform< Url, repo::RepoVariablesUrlReplacer > RepoVariablesReplacedUrl
unsigned priority() const
Repository priority for solver.
Pathname packagesPath() const
TriBool triBoolFromPath(const Pathname &path_r) const
void setValidRepoSignature(TriBool value_r)
Set the value for validRepoSignature (or indeterminate if unsigned).
std::vector< std::string > Arguments
bool repoGpgCheck() const
Whether the signature of repo metadata should be checked for this repo.
bool seekToNode(int depth_r, const std::string &name_r)
url_set rawGpgKeyUrls() const
The list of raw gpgkey URLs defined for this repo (no variables replaced)
boost::logic::tribool TriBool
3-state boolean logic (true, false and indeterminate).
transform_iterator< repo::RepoVariablesUrlReplacer, url_set::const_iterator > urls_const_iterator
bool pkgGpgCheckIsMandatory() const
Mandatory check (pkgGpgCheck is not off) must ask to confirm using unsigned packages.
RepoVariablesReplacedUrlList _baseUrls
static Locale bestMatch(const LocaleSet &avLocales_r, Locale requested_r=Locale())
Return the best match for Locale requested_r within the available avLocales_r.
bool keepPackages() const
Whether packages downloaded from this repository will be kept in local cache.
bool needToAcceptLicense() const
Whether the repo license has to be accepted, e.g.
Url rawMirrorListUrl() const
The raw mirrorListUrl (no variables replaced).
unsigned split(const C_Str &line_r, TOutputIterator result_r, const C_Str &sepchars_r=" \t")
Split line_r into words.
GpgCheck
Some predefined settings.
bool gpgCheck() const
Turn signature checking on/off (on)
std::ostream & operator<<(std::ostream &str, const Exception &obj)
Execute a program and give access to its io An object of this class encapsulates the execution of an ...
int unlink(const Pathname &path)
Like 'unlink'.
RepoVariablesReplacedUrlList & baseUrls()
void setRepoGpgCheck(TriBool value_r)
Set the value for repoGpgCheck (or indeterminate to use the default).
Url mirrorListUrl() const
Url of a file which contains a list of repository urls.
void addContent(const std::string &keyword_r)
bool internalUnsignedConfirmed() const
We definitely have a symlink pointing to "indeterminate" (for repoGpgCheckIsMandatory)? I.e.
Convenience char* constructible from std::string and char*, it maps (char*)0 to an empty string...
int forEachLine(std::istream &str_r, function< bool(int, std::string)> consume_r)
Simple lineparser: Call functor consume_r for each line.
TriBool pkgGpgCheck() const
Check rpm package signatures (indeterminate - according to gpgcheck)
void setPath(const Pathname &path)
set the product path.
bool hasContent() const
Check for content keywords.
void setService(const std::string &name)
sets service which added this repository
void setMetadataPath(const Pathname &path)
Set the path where the local metadata is stored.
bool gpgCheck() const
Whether default signature checking should be performed.
RepoVariablesReplacedUrlList & gpgKeyUrls()
urls_size_type gpgKeyUrlsSize() const
Number of gpgkey URLs defined.
bool startsWith(const C_Str &str_r, const C_Str &prefix_r)
alias for hasPrefix
void setType(const repo::RepoType &t)
set the repository type
TriBool _rawGpgCheck
default gpgcheck behavior: Y/N/ZConf
TriBool _validRepoSignature
have signed and valid repo metadata
bool baseUrlSet() const
Whether there are manualy configured repository urls.
Impl * clone() const
clone for RWCOW_pointer
std::pair< FalseBool, std::set< std::string > > _keywords
void setKeepPackages(bool keep)
Set if packaqes downloaded from this repository will be kept in local cache.
std::string service() const
Gets name of the service to which this repository belongs or empty string if it has been added manual...
bool baseurl2dump() const
const std::string & asString() const
TriBool cfgRepoGpgCheck() const
bool seekToEndNode(int depth_r, const std::string &name_r)
int symlink(const Pathname &oldpath, const Pathname &newpath)
Like 'symlink'.
void addBaseUrl(const Url &url)
Add a base url.
std::string receiveLine()
Read one line from the input stream.
TriBool _rawRepoGpgCheck
need to check repo sign.: Y/N/(ZConf(Y/N/gpgCheck))
Find pathnames matching a pattern.
bool empty() const
Whether matches were found.
static const RepoType NONE
static const unsigned noPriority
base::ContainerTransform< std::list< Url >, repo::RepoVariablesUrlReplacer > RepoVariablesReplacedUrlList
const_iterator begin() const
Iterator pointing to the first result.
int add(const Pathname &pattern_r, Flags flags_r=Flags())
Add pathnames matching pattern_r to the current result.
void setPackagesPath(const Pathname &path)
set the path where the local packages are stored
url_set baseUrls() const
The complete set of repository urls.
const std::vector< Url > & getUrls() const
url_set rawBaseUrls() const
The complete set of raw repository urls (no variables replaced)
std::string asString() const
Explicit conversion to std::string.
'Language[_Country]' codes.
int close()
Wait for the progamm to complete.
void setMetalinkUrl(const Url &url)
Like setMirrorListUrl but expect metalink format.
bool baseUrlsEmpty() const
whether repository urls are available
void setGpgKeyUrls(url_set urls)
Set a list of gpgkey URLs defined for this repo.
repo::RepoType type() const
Type of repository,.
void setProbedType(const repo::RepoType &t) const
bool triBoolFromPath(const Pathname &path_r, TriBool &ret_r) const
const char * c_str() const
url_set::size_type urls_size_type
bool hasSuffix(const C_Str &str_r, const C_Str &suffix_r)
Return whether str_r has suffix suffix_r.
void rawRepoGpgCheck(TriBool val_r)
const std::set< std::string > & contentKeywords() const
void setTargetDistribution(const std::string &targetDistribution)
Sets the distribution for which is this repository meant.
std::string getLicense(const Locale &lang_r=Locale()) const
Return the best license for the current (or a specified) locale.
bool autorefresh() const
If true, the repostory must be refreshed before creating resolvables from it.
XmlString nodeText()
If the current node is not empty, advances the reader to the next node, and returns the value...
bool hasLicense() const
Whether there is a license associated with the repo.
RepoVariablesReplacedUrlList _gpgKeyUrls
bool hasContent(const std::string &keyword_r) const
bool repoGpgCheckIsMandatory() const
Mandatory check (repoGpgCheck is on) must ask to confirm using unsigned repos.
Url gpgKeyUrl() const
(leagcy API) The 1st gpgkey URL defined for this repo
RepoVariablesReplacedUrl _mirrorListUrl
DefaultIntegral< unsigned, defaultPriority > priority
Url url() const
Pars pro toto: The first repository url.
const std::set< std::string > & contentKeywords() const
Content keywords defined.
bool usesAutoMethadataPaths() const
void setBaseUrls(url_set urls)
Clears current base URL list and adds an url_set.
bool usesAutoMethadataPaths() const
Whether metadataPath uses AUTO% setup.
static const RepoInfo noRepo
Represents no Repository (one with an empty alias).
void addContent(const std::string &keyword_r)
Add content keywords.
void rawPkgGpgCheck(TriBool val_r)
virtual std::ostream & dumpAsXmlOn(std::ostream &str, const std::string &content="") const
Write an XML representation of this RepoInfo object.
TriBool validRepoSignature() const
Whether the repo metadata are signed and successfully validated or indeterminate if unsigned...
Functor replacing repository variables.
urls_size_type baseUrlsSize() const
number of repository urls
TriBool rawRepoGpgCheck() const
static const unsigned defaultPriority
const RepoVariablesReplacedUrlList & gpgKeyUrls() const
static unsigned noPriority()
The least priority (unsigned(-1)).
bool hasPrefix(const C_Str &str_r, const C_Str &prefix_r)
Return whether str_r has prefix prefix_r.
TriBool rawGpgCheck() const
const RepoVariablesReplacedUrlList & baseUrls() const
void setPkgGpgCheck(TriBool value_r)
Set the value for pkgGpgCheck (or indeterminate to use the default).
std::unordered_set< Locale > LocaleSet
Url rawGpgKeyUrl() const
(leagcy API) The 1st raw gpgkey URL defined for this repo (no variables replaced) ...
TriBool cfgPkgGpgCheck() const
void metadataPath(Pathname new_r)
Pathname path() const
Repository path.
virtual std::ostream & dumpOn(std::ostream &str) const
Write a human-readable representation of this RepoInfo object into the str stream.
detail::EscapedString escape(const std::string &in_r)
Escape xml special charaters (& -> &; from IoBind library).
Repository type enumeration.
xmlTextReader based interface to iterate xml streams.