Zypp Commits
Threads by month
- ----- 2024 -----
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
June 2009
- 5 participants
- 171 discussions
[zypp-commit] <sat-solver> master : - add support for homepage aka (solvable:url)
by Michael Schroeder 30 Jun '09
by Michael Schroeder 30 Jun '09
30 Jun '09
ref: refs/heads/master
commit 3977a8b6accc0a2c6336a0ed3dfc9cdc7a824dcc
Author: Michael Schroeder <mls(a)suse.de>
Date: Tue Jun 30 18:07:47 2009 +0200
- add support for homepage aka (solvable:url)
---
ext/repo_deb.c | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/ext/repo_deb.c b/ext/repo_deb.c
index e35740c..2bd3f4c 100644
--- a/ext/repo_deb.c
+++ b/ext/repo_deb.c
@@ -232,6 +232,10 @@ control2solvable(Solvable *s, Repodata *data, char *control)
if (!strcasecmp(tag, "enhances"))
s->enhances = makedeps(repo, q, s->enhances, 0);
break;
+ case 'H' << 8 | 'O':
+ if (!strcasecmp(tag, "homepage"))
+ repodata_set_str(data, s - pool->solvables, SOLVABLE_URL, q);
+ break;
case 'I' << 8 | 'N':
if (!strcasecmp(tag, "installed-size"))
repodata_set_num(data, s - pool->solvables, SOLVABLE_INSTALLSIZE, atoi(q));
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
30 Jun '09
ref: refs/heads/master
commit 8db96768a5556498bbf963b898de8232aaf27770
Author: Michael Schroeder <mls(a)suse.de>
Date: Tue Jun 30 16:56:11 2009 +0200
- no endless loops, please
---
ext/repo_deb.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/ext/repo_deb.c b/ext/repo_deb.c
index da352ba..e35740c 100644
--- a/ext/repo_deb.c
+++ b/ext/repo_deb.c
@@ -140,9 +140,10 @@ makedeps(Repo *repo, char *deps, unsigned int olddeps, Id marker)
if (!id)
id = name;
else
- id = rel2id(pool, id, name, REL_OR, 1);
+ id = rel2id(pool, id, name, REL_OR, 1);
if (*p != '|')
break;
+ p++;
}
if (!id)
return olddeps;
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
ref: refs/heads/master
commit 0c2547e1e24ad97f3e91037937b49e0df13027c9
Author: Michael Andres <ma(a)suse.de>
Date: Tue Jun 30 16:41:21 2009 +0200
changes
---
package/libzypp.changes | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/package/libzypp.changes b/package/libzypp.changes
index 954aa11..5cb4c26 100644
--- a/package/libzypp.changes
+++ b/package/libzypp.changes
@@ -1,4 +1,10 @@
-------------------------------------------------------------------
+Tue Jun 30 16:32:08 CEST 2009 - ma(a)suse.de
+
+- Enhance LookupAttr to allow direct query of attributes within
+ sub-structures (flexarrays).
+
+-------------------------------------------------------------------
Fri Jun 26 12:06:51 CEST 2009 - ma(a)suse.de
- Enhance PoolQueryIterator to allow detailed inspection of attribute
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
ref: refs/heads/ma-misc
commit 0c2547e1e24ad97f3e91037937b49e0df13027c9
Author: Michael Andres <ma(a)suse.de>
Date: Tue Jun 30 16:41:21 2009 +0200
changes
---
package/libzypp.changes | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/package/libzypp.changes b/package/libzypp.changes
index 954aa11..5cb4c26 100644
--- a/package/libzypp.changes
+++ b/package/libzypp.changes
@@ -1,4 +1,10 @@
-------------------------------------------------------------------
+Tue Jun 30 16:32:08 CEST 2009 - ma(a)suse.de
+
+- Enhance LookupAttr to allow direct query of attributes within
+ sub-structures (flexarrays).
+
+-------------------------------------------------------------------
Fri Jun 26 12:06:51 CEST 2009 - ma(a)suse.de
- Enhance PoolQueryIterator to allow detailed inspection of attribute
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
[zypp-commit] <sat-solver> master : - add repo_deb to CMakeLists.txt
by Michael Schroeder 30 Jun '09
by Michael Schroeder 30 Jun '09
30 Jun '09
ref: refs/heads/master
commit 25c49541d4a5f14a15728014395f6af9dc81fdf8
Author: Michael Schroeder <mls(a)suse.de>
Date: Tue Jun 30 16:39:54 2009 +0200
- add repo_deb to CMakeLists.txt
---
ext/CMakeLists.txt | 5 +++--
ext/repo_deb.c | 11 +++++------
ext/repo_rpmdb.c | 3 ++-
src/chksum.c | 8 ++++----
src/poolid.c | 8 ++++++++
5 files changed, 22 insertions(+), 13 deletions(-)
diff --git a/ext/CMakeLists.txt b/ext/CMakeLists.txt
index 1f53aa8..c6bd1bc 100644
--- a/ext/CMakeLists.txt
+++ b/ext/CMakeLists.txt
@@ -1,7 +1,8 @@
SET(libsatsolverext_SRCS
pool_fileconflicts.c repo_content.c repo_deltainfoxml.c repo_helix.c repo_products.c
repo_releasefile_products.c repo_repomdxml.c repo_rpmdb.c repo_rpmmd.c
- repo_susetags.c repo_updateinfoxml.c repo_write.c repo_zyppdb.c)
+ repo_susetags.c repo_updateinfoxml.c repo_write.c repo_zyppdb.c
+ repo_deb.c)
ADD_LIBRARY(satsolverext STATIC ${libsatsolverext_SRCS})
@@ -9,7 +10,7 @@ SET(libsatsolver_HEADERS
pool_fileconflicts.h repo_content.h repo_deltainfoxml.h repo_helix.h repo_products.h
repo_releasefile_products.h repo_repomdxml.h repo_rpmdb.h repo_rpmmd.h
repo_susetags.h repo_updateinfoxml.h repo_write.h repo_zyppdb.h
- tools_util.h)
+ tools_util.h repo_deb.h)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
diff --git a/ext/repo_deb.c b/ext/repo_deb.c
index 59807ac..da352ba 100644
--- a/ext/repo_deb.c
+++ b/ext/repo_deb.c
@@ -69,7 +69,6 @@ makedeps(Repo *repo, char *deps, unsigned int olddeps, Id marker)
Pool *pool = repo->pool;
char *p, *n, *ne, *e, *ee;
Id id, name, evr;
- int c;
int flags;
while ((p = strchr(deps, ',')) != 0)
@@ -296,13 +295,13 @@ repo_add_debs(Repo *repo, const char **debs, int ndebs, int flags)
continue;
}
l = fread(buf, 1, sizeof(buf), fp);
- if (l < 8 + 60 || strncmp(buf, "!<arch>\ndebian-binary ", 8 + 16) != 0)
+ if (l < 8 + 60 || strncmp((char *)buf, "!<arch>\ndebian-binary ", 8 + 16) != 0)
{
fprintf(stderr, "%s: not a deb package\n", debs[i]);
fclose(fp);
continue;
}
- vlen = atoi(buf + 8 + 48);
+ vlen = atoi((char *)buf + 8 + 48);
if (vlen < 0 || vlen > l)
{
fprintf(stderr, "%s: not a deb package\n", debs[i]);
@@ -316,13 +315,13 @@ repo_add_debs(Repo *repo, const char **debs, int ndebs, int flags)
fclose(fp);
continue;
}
- if (strncmp(buf + 8 + 60 + vlen, "control.tar.gz ", 16) != 0)
+ if (strncmp((char *)buf + 8 + 60 + vlen, "control.tar.gz ", 16) != 0)
{
fprintf(stderr, "%s: control.tar.gz is not second entry\n", debs[i]);
fclose(fp);
continue;
}
- clen = atoi(buf + 8 + 60 + vlen + 48);
+ clen = atoi((char *)buf + 8 + 60 + vlen + 48);
if (clen <= 0)
{
fprintf(stderr, "%s: control.tar.gz has illegal size\n", debs[i]);
@@ -411,7 +410,7 @@ repo_add_debs(Repo *repo, const char **debs, int ndebs, int flags)
for (j = 124; j < 124 + 12; j++)
if (bp[j] >= '0' && bp[j] <= '7')
l2 = l2 * 8 + (bp[j] - '0');
- if (!strcmp(bp, "./control"))
+ if (!strcmp((char *)bp, "./control"))
break;
l2 = 512 + ((l2 + 511) & ~511);
l -= l2;
diff --git a/ext/repo_rpmdb.c b/ext/repo_rpmdb.c
index 48a8d1e..7216685 100644
--- a/ext/repo_rpmdb.c
+++ b/ext/repo_rpmdb.c
@@ -1816,7 +1816,8 @@ repo_add_rpms(Repo *repo, const char **rpms, int nrpms, int flags)
{
Id handle = s - pool->solvables;
repodata_set_location(data, handle, 0, 0, rpms[i]);
- repodata_set_num(data, handle, SOLVABLE_DOWNLOADSIZE, (unsigned int)((stb.st_size + 1023) / 1024));
+ if (S_ISREG(stb.st_mode))
+ repodata_set_num(data, handle, SOLVABLE_DOWNLOADSIZE, (unsigned int)((stb.st_size + 1023) / 1024));
repodata_set_num(data, handle, SOLVABLE_HEADEREND, headerend);
if (gotpkgid)
repodata_set_bin_checksum(data, handle, SOLVABLE_PKGID, REPOKEY_TYPE_MD5, pkgid);
diff --git a/src/chksum.c b/src/chksum.c
index a66de46..2b917dd 100644
--- a/src/chksum.c
+++ b/src/chksum.c
@@ -76,23 +76,23 @@ sat_chksum_get(void *handle, int *lenp)
case REPOKEY_TYPE_MD5:
sat_MD5_Final(h->result, &h->c.md5);
h->done = 1;
- if (*lenp)
+ if (lenp)
*lenp = 16;
return h->result;
case REPOKEY_TYPE_SHA1:
sat_SHA1_Final(&h->c.sha1, h->result);
h->done = 1;
- if (*lenp)
+ if (lenp)
*lenp = 20;
return h->result;
case REPOKEY_TYPE_SHA256:
sat_SHA256_Final(h->result, &h->c.sha256);
h->done = 1;
- if (*lenp)
+ if (lenp)
*lenp = 32;
return h->result;
default:
- if (*lenp)
+ if (lenp)
*lenp = 0;
return 0;
}
diff --git a/src/poolid.c b/src/poolid.c
index 9ed14d1..0503224 100644
--- a/src/poolid.c
+++ b/src/poolid.c
@@ -135,10 +135,18 @@ id2str(const Pool *pool, Id id)
static const char *rels[] = {
" ! ",
+#ifndef DEBIAN_SEMANTICS
" > ",
+#else
+ " >> ",
+#endif
" = ",
" >= ",
+#ifndef DEBIAN_SEMANTICS
" < ",
+#else
+ " << ",
+#endif
" <> ",
" <= ",
" <=> "
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
[zypp-commit] <libzypp> master : Enhance LookupAttr to allow direct query of attributes within flexarrays.
by Michael Andres 30 Jun '09
by Michael Andres 30 Jun '09
30 Jun '09
ref: refs/heads/master
commit e4e79389d3652d62784fe0bf5828f58993f23993
Author: Michael Andres <ma(a)suse.de>
Date: Tue Jun 30 16:38:23 2009 +0200
Enhance LookupAttr to allow direct query of attributes within flexarrays.
---
tests/sat/LookupAttr_test.cc | 28 ++++++++++++
zypp/sat/LookupAttr.cc | 99 +++++++++++++++++++++++++++++++++++-------
zypp/sat/LookupAttr.h | 37 +++++++++++++++-
3 files changed, 146 insertions(+), 18 deletions(-)
diff --git a/tests/sat/LookupAttr_test.cc b/tests/sat/LookupAttr_test.cc
index ab8c545..6ee003d 100644
--- a/tests/sat/LookupAttr_test.cc
+++ b/tests/sat/LookupAttr_test.cc
@@ -180,7 +180,35 @@ BOOST_AUTO_TEST_CASE(LookupAttr_solvable_attribute_substructure)
BOOST_CHECK_EQUAL( res.subFind( sat::SolvAttr::updateReferenceHref ), res.subFind( "href" ) );
BOOST_CHECK_EQUAL( res.subFind( sat::SolvAttr::updateReferenceId ), res.subFind( "id" ) );
BOOST_CHECK_EQUAL( res.subFind( sat::SolvAttr::updateReferenceTitle ), res.subFind( "title" ) );
+
+ // NOTE: Unfortunately the satsolver dataiterator loses constect information when
+ // entering a sub-structure. That's why one can't invoke e.g subBegin on an iterator
+ // that was retieved by subFind.
+ // The test below will fail, once libsatsolver fixes the dataiterator. The expected
+ // result then is, that subBegin brings you to the beginning again.
+ BOOST_CHECK_EQUAL( res.subFind( sat::SolvAttr::updateReferenceType ).subBegin(), res.subEnd() );
+ // BOOST_CHECK_EQUAL( res.subFind( sat::SolvAttr::updateReferenceType ).subBegin(), res.subBegin() );
}
+
+ // search substructure id without parent-structure won't work:
+ q = sat::LookupAttr( sat::SolvAttr::updateReferenceId );
+ BOOST_CHECK_EQUAL( q.size(), 0 );
+
+ // search id in parent-structure:
+ q = sat::LookupAttr( sat::SolvAttr::updateReferenceId, sat::SolvAttr::updateReference );
+ BOOST_CHECK_EQUAL( q.size(), 303 );
+
+ // search id in any parent-structure:
+ q = sat::LookupAttr( sat::SolvAttr::updateReferenceId, sat::SolvAttr::allAttr );
+ BOOST_CHECK_EQUAL( q.size(), 303 );
+
+ // search any id in parent-structure: (4 ids per updateReference)
+ q = sat::LookupAttr( sat::SolvAttr::allAttr, sat::SolvAttr::updateReference );
+ BOOST_CHECK_EQUAL( q.size(), 1212 );
+
+ // search any id in any parent-structure:
+ q = sat::LookupAttr( sat::SolvAttr::allAttr, sat::SolvAttr::allAttr );
+ BOOST_CHECK_EQUAL( q.size(), 10473 );
}
BOOST_AUTO_TEST_CASE(LookupAttr_repoattr)
diff --git a/zypp/sat/LookupAttr.cc b/zypp/sat/LookupAttr.cc
index 750b081..71acfab 100644
--- a/zypp/sat/LookupAttr.cc
+++ b/zypp/sat/LookupAttr.cc
@@ -58,13 +58,13 @@ namespace zypp
Impl()
{}
Impl( SolvAttr attr_r, Location loc_r )
- : _attr( attr_r ), _solv( loc_r == REPO_ATTR ? SOLVID_META : noSolvableId )
+ : _attr( attr_r ), _parent( SolvAttr::noAttr ), _solv( loc_r == REPO_ATTR ? SOLVID_META : noSolvableId )
{}
Impl( SolvAttr attr_r, Repository repo_r, Location loc_r )
- : _attr( attr_r ), _repo( repo_r ), _solv( loc_r == REPO_ATTR ? SOLVID_META : noSolvableId )
+ : _attr( attr_r ), _parent( SolvAttr::noAttr ), _repo( repo_r ), _solv( loc_r == REPO_ATTR ? SOLVID_META : noSolvableId )
{}
Impl( SolvAttr attr_r, Solvable solv_r )
- : _attr( attr_r ), _solv( solv_r )
+ : _attr( attr_r ), _parent( SolvAttr::noAttr ), _solv( solv_r )
{}
public:
@@ -111,6 +111,13 @@ namespace zypp
_solv = solv_r;
}
+ SolvAttr parent() const
+ { return _parent; }
+
+ void setParent( SolvAttr attr_r )
+ { _parent = attr_r; }
+
+ public:
LookupAttr::iterator begin() const
{
if ( _attr == SolvAttr::noAttr || sat::Pool::instance().reposEmpty() )
@@ -123,6 +130,8 @@ namespace zypp
whichRepo = _repo.id();
detail::DIWrap dip( whichRepo, _solv.id(), _attr.id(), _attrMatcher.searchstring(), _attrMatcher.flags().get() );
+ if ( _parent != SolvAttr::noAttr )
+ ::dataiterator_prepend_keyname( dip.get(), _parent.id() );
return iterator( dip ); // iterator takes over ownership!
}
@@ -131,6 +140,7 @@ namespace zypp
private:
SolvAttr _attr;
+ SolvAttr _parent;
Repository _repo;
Solvable _solv;
AttrMatcher _attrMatcher;
@@ -155,14 +165,24 @@ namespace zypp
LookupAttr::LookupAttr( SolvAttr attr_r, Location loc_r )
: _pimpl( new Impl( attr_r, loc_r ) )
{}
+ LookupAttr::LookupAttr( SolvAttr attr_r, SolvAttr parent_r, Location loc_r )
+ : _pimpl( new Impl( attr_r, loc_r ) )
+ { _pimpl->setParent( parent_r ); }
LookupAttr::LookupAttr( SolvAttr attr_r, Repository repo_r, Location loc_r )
: _pimpl( new Impl( attr_r, repo_r, loc_r ) )
{}
+ LookupAttr::LookupAttr( SolvAttr attr_r, SolvAttr parent_r, Repository repo_r, Location loc_r )
+ : _pimpl( new Impl( attr_r, repo_r, loc_r ) )
+ { _pimpl->setParent( parent_r ); }
LookupAttr::LookupAttr( SolvAttr attr_r, Solvable solv_r )
: _pimpl( new Impl( attr_r, solv_r ) )
{}
+ LookupAttr::LookupAttr( SolvAttr attr_r, SolvAttr parent_r, Solvable solv_r )
+ : _pimpl( new Impl( attr_r, solv_r ) )
+ { _pimpl->setParent( parent_r ); }
+
///////////////////////////////////////////////////////////////////
@@ -198,6 +218,12 @@ namespace zypp
void LookupAttr::setSolvable( Solvable solv_r )
{ _pimpl->setSolvable( solv_r ); }
+ SolvAttr LookupAttr::parent() const
+ { return _pimpl->parent(); }
+
+ void LookupAttr::setParent( SolvAttr attr_r )
+ { _pimpl->setParent( attr_r ); }
+
///////////////////////////////////////////////////////////////////
LookupAttr::iterator LookupAttr::begin() const
@@ -417,10 +443,25 @@ namespace zypp
return false;
}
- bool LookupAttr::iterator::solvAttrSubEntry() const
+ ///////////////////////////////////////////////////////////////////
+ namespace
{
- return solvAttrType() == REPOKEY_TYPE_FLEXARRAY;
+ enum SubType { ST_NONE, // no sub-structure
+ ST_FLEX, // flexarray
+ ST_SUB }; // inside sub-structure
+ SubType subType( const detail::DIWrap & dip )
+ {
+ if ( ! dip )
+ return ST_NONE;
+ if ( dip.get()->key->type == REPOKEY_TYPE_FLEXARRAY )
+ return ST_FLEX;
+ return dip.get()->kv.parent ? ST_SUB : ST_NONE;
+ }
}
+ ///////////////////////////////////////////////////////////////////
+
+ bool LookupAttr::iterator::solvAttrSubEntry() const
+ { return subType( _dip ) != ST_NONE; }
///////////////////////////////////////////////////////////////////
// Iterate sub-structures.
@@ -439,12 +480,18 @@ namespace zypp
LookupAttr::iterator LookupAttr::iterator::subBegin() const
{
- if ( ! solvAttrSubEntry() )
- return subEnd();
-
- // remember this position
- ::dataiterator_setpos( _dip.get() );
-
+ switch ( subType( _dip ) )
+ {
+ case ST_NONE:
+ return subEnd();
+ break;
+ case ST_FLEX:
+ ::dataiterator_setpos( _dip.get() );
+ break;
+ case ST_SUB:
+ ::dataiterator_setpos_parent( _dip.get() );
+ break;
+ }
// setup the new sub iterator with the remembered position
detail::DIWrap dip( 0, SOLVID_POS, 0, 0, 0 );
return iterator( dip ); // iterator takes over ownership!
@@ -471,9 +518,29 @@ namespace zypp
if ( attrname_r.empty() )
return subBegin();
+ SubType subtype( subType( _dip ) );
+ if ( subtype == ST_NONE )
+ return subBegin();
+
std::string subattr( inSolvAttr().asString() );
- subattr += ":";
- subattr += attrname_r;
+ if ( subtype == ST_FLEX )
+ {
+ // append ":attrname"
+ subattr += ":";
+ subattr += attrname_r;
+ }
+ else
+ {
+ // replace "oldname" after ':' with "attrname"
+ std::string::size_type pos( subattr.rfind( ':' ) );
+ if ( pos != std::string::npos )
+ {
+ subattr.erase( pos+1 );
+ subattr += attrname_r;
+ }
+ else
+ subattr = attrname_r; // no ':' so replace all.
+ }
return subFind( SolvAttr( subattr ) );
}
@@ -577,7 +644,7 @@ namespace zypp
{
str << " " << it.inSolvAttr() << " = " << it.asString() << endl;
}
- str << "}" << endl;
+ str << "}";
return str.str();
}
break;
@@ -695,8 +762,8 @@ namespace zypp
else if ( obj.inRepo() )
str << obj.inRepo();
- str << '<' << obj.inSolvAttr()
- << ">(" << IdString(obj.solvAttrType()) << ") = " << obj.asString();
+ str << '<' << obj.inSolvAttr() << (obj.solvAttrSubEntry() ? ">(*" : ">(")
+ << IdString(obj.solvAttrType()) << ") = " << obj.asString();
return str;
}
diff --git a/zypp/sat/LookupAttr.h b/zypp/sat/LookupAttr.h
index 944563b..5af9688 100644
--- a/zypp/sat/LookupAttr.h
+++ b/zypp/sat/LookupAttr.h
@@ -60,6 +60,20 @@ namespace zypp
*
* Use \ref SolvAttr::allAttr to search all attributes.
*
+ * To search for attributes located in a sub-structure (flexarray)
+ * you also have to pass the sub-structures attribute as parent.
+ * Passing \ref SolvAttr::allAttr a parent will lookup the attribute
+ * in \c any sub-structure.
+ *
+ * \code
+ * // Lookup all 'name' attributes:
+ * sat::LookupAttr q( sat::SolvAttr::name );
+ * // Lookup all 'name' attributes within a sub-structure 'data':
+ * sat::LookupAttr q( sat::SolvAttr::name, sat::SolvAttr::data );
+ * // Lookup all 'name' attributes within any sub-structure:
+ * sat::LookupAttr q( sat::SolvAttr::name, sat::SolvAttr::allAttr );
+ * \endcode
+ *
* \code
* // look for all attributes of one solvable
* void ditest( sat::Solvable slv_r )
@@ -113,12 +127,18 @@ namespace zypp
/** Lookup \ref SolvAttr in \ref Pool (all repositories). */
explicit LookupAttr( SolvAttr attr_r, Location = SOLV_ATTR );
+ /** \overload SolvAttr within sub-structure \a parent_r. */
+ LookupAttr( SolvAttr attr_r, SolvAttr parent_r, Location = SOLV_ATTR );
/** Lookup \ref SolvAttr in one\ref Repository. */
- explicit LookupAttr( SolvAttr attr_r, Repository repo_r, Location = SOLV_ATTR );
+ LookupAttr( SolvAttr attr_r, Repository repo_r, Location = SOLV_ATTR );
+ /** \overload SolvAttr within sub-structure \a parent_r. */
+ LookupAttr( SolvAttr attr_r, SolvAttr parent_r, Repository repo_r, Location = SOLV_ATTR );
/** Lookup \ref SolvAttr in one \ref Solvable. */
LookupAttr( SolvAttr attr_r, Solvable solv_r );
+ /** \overload SolvAttr within sub-structure \a parent_r. */
+ LookupAttr( SolvAttr attr_r, SolvAttr parent_r, Solvable solv_r );
public:
/** \name Search result. */
@@ -196,6 +216,12 @@ namespace zypp
/** Set search in one \ref Solvable. */
void setSolvable( Solvable solv_r );
+
+ /** Whether to search within a sub-structure (\ref SolvAttr::noAttr if not) */
+ SolvAttr parent() const;
+
+ /** Set search within a sub-structure (\ref SolvAttr::noAttr for none) */
+ void setParent( SolvAttr attr_r );
//@}
private:
@@ -376,7 +402,7 @@ namespace zypp
/** The current \ref SolvAttr. */
SolvAttr inSolvAttr() const;
- /** Whether this points to the end of a query. */
+ /** Whether this points to the end of a query (Iterator is invalid). */
bool atEnd() const
{ return !_dip; }
//@}
@@ -409,6 +435,13 @@ namespace zypp
*
* These are usable iff \ref solvAttrSubEntry is \c true.
*
+ * \note Unfortunately the underlying satsolver dataiterator as returned
+ * by \ref subBegin and \ref subFind loses some context when being created.
+ * Thus it's not possible to invoke \ref subBegin and \ref subFind on an
+ * iterator that was previously returned by one of those methods. The result
+ * will be an \c end iterator. For the same reason it is not possible for an
+ * iterator to leave the sub-structure again.
+ *
* \code
* // Lookup all "update:reference" entries for a specific solvable
* sat::LookupAttr q( sat::SolvAttr::updateReference, p->satSolvable() );
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
[zypp-commit] <libzypp> ma-misc : Enhance LookupAttr to allow direct query of attributes within flexarrays.
by Michael Andres 30 Jun '09
by Michael Andres 30 Jun '09
30 Jun '09
ref: refs/heads/ma-misc
commit e4e79389d3652d62784fe0bf5828f58993f23993
Author: Michael Andres <ma(a)suse.de>
Date: Tue Jun 30 16:38:23 2009 +0200
Enhance LookupAttr to allow direct query of attributes within flexarrays.
---
tests/sat/LookupAttr_test.cc | 28 ++++++++++++
zypp/sat/LookupAttr.cc | 99 +++++++++++++++++++++++++++++++++++-------
zypp/sat/LookupAttr.h | 37 +++++++++++++++-
3 files changed, 146 insertions(+), 18 deletions(-)
diff --git a/tests/sat/LookupAttr_test.cc b/tests/sat/LookupAttr_test.cc
index ab8c545..6ee003d 100644
--- a/tests/sat/LookupAttr_test.cc
+++ b/tests/sat/LookupAttr_test.cc
@@ -180,7 +180,35 @@ BOOST_AUTO_TEST_CASE(LookupAttr_solvable_attribute_substructure)
BOOST_CHECK_EQUAL( res.subFind( sat::SolvAttr::updateReferenceHref ), res.subFind( "href" ) );
BOOST_CHECK_EQUAL( res.subFind( sat::SolvAttr::updateReferenceId ), res.subFind( "id" ) );
BOOST_CHECK_EQUAL( res.subFind( sat::SolvAttr::updateReferenceTitle ), res.subFind( "title" ) );
+
+ // NOTE: Unfortunately the satsolver dataiterator loses constect information when
+ // entering a sub-structure. That's why one can't invoke e.g subBegin on an iterator
+ // that was retieved by subFind.
+ // The test below will fail, once libsatsolver fixes the dataiterator. The expected
+ // result then is, that subBegin brings you to the beginning again.
+ BOOST_CHECK_EQUAL( res.subFind( sat::SolvAttr::updateReferenceType ).subBegin(), res.subEnd() );
+ // BOOST_CHECK_EQUAL( res.subFind( sat::SolvAttr::updateReferenceType ).subBegin(), res.subBegin() );
}
+
+ // search substructure id without parent-structure won't work:
+ q = sat::LookupAttr( sat::SolvAttr::updateReferenceId );
+ BOOST_CHECK_EQUAL( q.size(), 0 );
+
+ // search id in parent-structure:
+ q = sat::LookupAttr( sat::SolvAttr::updateReferenceId, sat::SolvAttr::updateReference );
+ BOOST_CHECK_EQUAL( q.size(), 303 );
+
+ // search id in any parent-structure:
+ q = sat::LookupAttr( sat::SolvAttr::updateReferenceId, sat::SolvAttr::allAttr );
+ BOOST_CHECK_EQUAL( q.size(), 303 );
+
+ // search any id in parent-structure: (4 ids per updateReference)
+ q = sat::LookupAttr( sat::SolvAttr::allAttr, sat::SolvAttr::updateReference );
+ BOOST_CHECK_EQUAL( q.size(), 1212 );
+
+ // search any id in any parent-structure:
+ q = sat::LookupAttr( sat::SolvAttr::allAttr, sat::SolvAttr::allAttr );
+ BOOST_CHECK_EQUAL( q.size(), 10473 );
}
BOOST_AUTO_TEST_CASE(LookupAttr_repoattr)
diff --git a/zypp/sat/LookupAttr.cc b/zypp/sat/LookupAttr.cc
index 750b081..71acfab 100644
--- a/zypp/sat/LookupAttr.cc
+++ b/zypp/sat/LookupAttr.cc
@@ -58,13 +58,13 @@ namespace zypp
Impl()
{}
Impl( SolvAttr attr_r, Location loc_r )
- : _attr( attr_r ), _solv( loc_r == REPO_ATTR ? SOLVID_META : noSolvableId )
+ : _attr( attr_r ), _parent( SolvAttr::noAttr ), _solv( loc_r == REPO_ATTR ? SOLVID_META : noSolvableId )
{}
Impl( SolvAttr attr_r, Repository repo_r, Location loc_r )
- : _attr( attr_r ), _repo( repo_r ), _solv( loc_r == REPO_ATTR ? SOLVID_META : noSolvableId )
+ : _attr( attr_r ), _parent( SolvAttr::noAttr ), _repo( repo_r ), _solv( loc_r == REPO_ATTR ? SOLVID_META : noSolvableId )
{}
Impl( SolvAttr attr_r, Solvable solv_r )
- : _attr( attr_r ), _solv( solv_r )
+ : _attr( attr_r ), _parent( SolvAttr::noAttr ), _solv( solv_r )
{}
public:
@@ -111,6 +111,13 @@ namespace zypp
_solv = solv_r;
}
+ SolvAttr parent() const
+ { return _parent; }
+
+ void setParent( SolvAttr attr_r )
+ { _parent = attr_r; }
+
+ public:
LookupAttr::iterator begin() const
{
if ( _attr == SolvAttr::noAttr || sat::Pool::instance().reposEmpty() )
@@ -123,6 +130,8 @@ namespace zypp
whichRepo = _repo.id();
detail::DIWrap dip( whichRepo, _solv.id(), _attr.id(), _attrMatcher.searchstring(), _attrMatcher.flags().get() );
+ if ( _parent != SolvAttr::noAttr )
+ ::dataiterator_prepend_keyname( dip.get(), _parent.id() );
return iterator( dip ); // iterator takes over ownership!
}
@@ -131,6 +140,7 @@ namespace zypp
private:
SolvAttr _attr;
+ SolvAttr _parent;
Repository _repo;
Solvable _solv;
AttrMatcher _attrMatcher;
@@ -155,14 +165,24 @@ namespace zypp
LookupAttr::LookupAttr( SolvAttr attr_r, Location loc_r )
: _pimpl( new Impl( attr_r, loc_r ) )
{}
+ LookupAttr::LookupAttr( SolvAttr attr_r, SolvAttr parent_r, Location loc_r )
+ : _pimpl( new Impl( attr_r, loc_r ) )
+ { _pimpl->setParent( parent_r ); }
LookupAttr::LookupAttr( SolvAttr attr_r, Repository repo_r, Location loc_r )
: _pimpl( new Impl( attr_r, repo_r, loc_r ) )
{}
+ LookupAttr::LookupAttr( SolvAttr attr_r, SolvAttr parent_r, Repository repo_r, Location loc_r )
+ : _pimpl( new Impl( attr_r, repo_r, loc_r ) )
+ { _pimpl->setParent( parent_r ); }
LookupAttr::LookupAttr( SolvAttr attr_r, Solvable solv_r )
: _pimpl( new Impl( attr_r, solv_r ) )
{}
+ LookupAttr::LookupAttr( SolvAttr attr_r, SolvAttr parent_r, Solvable solv_r )
+ : _pimpl( new Impl( attr_r, solv_r ) )
+ { _pimpl->setParent( parent_r ); }
+
///////////////////////////////////////////////////////////////////
@@ -198,6 +218,12 @@ namespace zypp
void LookupAttr::setSolvable( Solvable solv_r )
{ _pimpl->setSolvable( solv_r ); }
+ SolvAttr LookupAttr::parent() const
+ { return _pimpl->parent(); }
+
+ void LookupAttr::setParent( SolvAttr attr_r )
+ { _pimpl->setParent( attr_r ); }
+
///////////////////////////////////////////////////////////////////
LookupAttr::iterator LookupAttr::begin() const
@@ -417,10 +443,25 @@ namespace zypp
return false;
}
- bool LookupAttr::iterator::solvAttrSubEntry() const
+ ///////////////////////////////////////////////////////////////////
+ namespace
{
- return solvAttrType() == REPOKEY_TYPE_FLEXARRAY;
+ enum SubType { ST_NONE, // no sub-structure
+ ST_FLEX, // flexarray
+ ST_SUB }; // inside sub-structure
+ SubType subType( const detail::DIWrap & dip )
+ {
+ if ( ! dip )
+ return ST_NONE;
+ if ( dip.get()->key->type == REPOKEY_TYPE_FLEXARRAY )
+ return ST_FLEX;
+ return dip.get()->kv.parent ? ST_SUB : ST_NONE;
+ }
}
+ ///////////////////////////////////////////////////////////////////
+
+ bool LookupAttr::iterator::solvAttrSubEntry() const
+ { return subType( _dip ) != ST_NONE; }
///////////////////////////////////////////////////////////////////
// Iterate sub-structures.
@@ -439,12 +480,18 @@ namespace zypp
LookupAttr::iterator LookupAttr::iterator::subBegin() const
{
- if ( ! solvAttrSubEntry() )
- return subEnd();
-
- // remember this position
- ::dataiterator_setpos( _dip.get() );
-
+ switch ( subType( _dip ) )
+ {
+ case ST_NONE:
+ return subEnd();
+ break;
+ case ST_FLEX:
+ ::dataiterator_setpos( _dip.get() );
+ break;
+ case ST_SUB:
+ ::dataiterator_setpos_parent( _dip.get() );
+ break;
+ }
// setup the new sub iterator with the remembered position
detail::DIWrap dip( 0, SOLVID_POS, 0, 0, 0 );
return iterator( dip ); // iterator takes over ownership!
@@ -471,9 +518,29 @@ namespace zypp
if ( attrname_r.empty() )
return subBegin();
+ SubType subtype( subType( _dip ) );
+ if ( subtype == ST_NONE )
+ return subBegin();
+
std::string subattr( inSolvAttr().asString() );
- subattr += ":";
- subattr += attrname_r;
+ if ( subtype == ST_FLEX )
+ {
+ // append ":attrname"
+ subattr += ":";
+ subattr += attrname_r;
+ }
+ else
+ {
+ // replace "oldname" after ':' with "attrname"
+ std::string::size_type pos( subattr.rfind( ':' ) );
+ if ( pos != std::string::npos )
+ {
+ subattr.erase( pos+1 );
+ subattr += attrname_r;
+ }
+ else
+ subattr = attrname_r; // no ':' so replace all.
+ }
return subFind( SolvAttr( subattr ) );
}
@@ -577,7 +644,7 @@ namespace zypp
{
str << " " << it.inSolvAttr() << " = " << it.asString() << endl;
}
- str << "}" << endl;
+ str << "}";
return str.str();
}
break;
@@ -695,8 +762,8 @@ namespace zypp
else if ( obj.inRepo() )
str << obj.inRepo();
- str << '<' << obj.inSolvAttr()
- << ">(" << IdString(obj.solvAttrType()) << ") = " << obj.asString();
+ str << '<' << obj.inSolvAttr() << (obj.solvAttrSubEntry() ? ">(*" : ">(")
+ << IdString(obj.solvAttrType()) << ") = " << obj.asString();
return str;
}
diff --git a/zypp/sat/LookupAttr.h b/zypp/sat/LookupAttr.h
index 944563b..5af9688 100644
--- a/zypp/sat/LookupAttr.h
+++ b/zypp/sat/LookupAttr.h
@@ -60,6 +60,20 @@ namespace zypp
*
* Use \ref SolvAttr::allAttr to search all attributes.
*
+ * To search for attributes located in a sub-structure (flexarray)
+ * you also have to pass the sub-structures attribute as parent.
+ * Passing \ref SolvAttr::allAttr a parent will lookup the attribute
+ * in \c any sub-structure.
+ *
+ * \code
+ * // Lookup all 'name' attributes:
+ * sat::LookupAttr q( sat::SolvAttr::name );
+ * // Lookup all 'name' attributes within a sub-structure 'data':
+ * sat::LookupAttr q( sat::SolvAttr::name, sat::SolvAttr::data );
+ * // Lookup all 'name' attributes within any sub-structure:
+ * sat::LookupAttr q( sat::SolvAttr::name, sat::SolvAttr::allAttr );
+ * \endcode
+ *
* \code
* // look for all attributes of one solvable
* void ditest( sat::Solvable slv_r )
@@ -113,12 +127,18 @@ namespace zypp
/** Lookup \ref SolvAttr in \ref Pool (all repositories). */
explicit LookupAttr( SolvAttr attr_r, Location = SOLV_ATTR );
+ /** \overload SolvAttr within sub-structure \a parent_r. */
+ LookupAttr( SolvAttr attr_r, SolvAttr parent_r, Location = SOLV_ATTR );
/** Lookup \ref SolvAttr in one\ref Repository. */
- explicit LookupAttr( SolvAttr attr_r, Repository repo_r, Location = SOLV_ATTR );
+ LookupAttr( SolvAttr attr_r, Repository repo_r, Location = SOLV_ATTR );
+ /** \overload SolvAttr within sub-structure \a parent_r. */
+ LookupAttr( SolvAttr attr_r, SolvAttr parent_r, Repository repo_r, Location = SOLV_ATTR );
/** Lookup \ref SolvAttr in one \ref Solvable. */
LookupAttr( SolvAttr attr_r, Solvable solv_r );
+ /** \overload SolvAttr within sub-structure \a parent_r. */
+ LookupAttr( SolvAttr attr_r, SolvAttr parent_r, Solvable solv_r );
public:
/** \name Search result. */
@@ -196,6 +216,12 @@ namespace zypp
/** Set search in one \ref Solvable. */
void setSolvable( Solvable solv_r );
+
+ /** Whether to search within a sub-structure (\ref SolvAttr::noAttr if not) */
+ SolvAttr parent() const;
+
+ /** Set search within a sub-structure (\ref SolvAttr::noAttr for none) */
+ void setParent( SolvAttr attr_r );
//@}
private:
@@ -376,7 +402,7 @@ namespace zypp
/** The current \ref SolvAttr. */
SolvAttr inSolvAttr() const;
- /** Whether this points to the end of a query. */
+ /** Whether this points to the end of a query (Iterator is invalid). */
bool atEnd() const
{ return !_dip; }
//@}
@@ -409,6 +435,13 @@ namespace zypp
*
* These are usable iff \ref solvAttrSubEntry is \c true.
*
+ * \note Unfortunately the underlying satsolver dataiterator as returned
+ * by \ref subBegin and \ref subFind loses some context when being created.
+ * Thus it's not possible to invoke \ref subBegin and \ref subFind on an
+ * iterator that was previously returned by one of those methods. The result
+ * will be an \c end iterator. For the same reason it is not possible for an
+ * iterator to leave the sub-structure again.
+ *
* \code
* // Lookup all "update:reference" entries for a specific solvable
* sat::LookupAttr q( sat::SolvAttr::updateReference, p->satSolvable() );
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
30 Jun '09
ref: refs/heads/master
commit bdcc02d5803556b45106758dcea3fbacca5a981b
Author: Michael Schroeder <mls(a)suse.de>
Date: Tue Jun 30 16:37:19 2009 +0200
- finish repo_deb.[ch]
---
ext/repo_deb.c | 213 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 200 insertions(+), 13 deletions(-)
diff --git a/ext/repo_deb.c b/ext/repo_deb.c
index 3ed362b..59807ac 100644
--- a/ext/repo_deb.c
+++ b/ext/repo_deb.c
@@ -63,9 +63,205 @@ decompress(unsigned char *in, int inl, int *outlp)
return out;
}
+static unsigned int
+makedeps(Repo *repo, char *deps, unsigned int olddeps, Id marker)
+{
+ Pool *pool = repo->pool;
+ char *p, *n, *ne, *e, *ee;
+ Id id, name, evr;
+ int c;
+ int flags;
+
+ while ((p = strchr(deps, ',')) != 0)
+ {
+ *p++ = 0;
+ olddeps = makedeps(repo, deps, olddeps, marker);
+ deps = p;
+ }
+ id = 0;
+ p = deps;
+ for (;;)
+ {
+ while (*p == ' ' || *p == '\t' || *p == '\n')
+ p++;
+ if (!*p || *p == '(')
+ break;
+ n = p;
+ while (*p && *p != ' ' && *p != '\t' && *p != '\n' && *p != '(' && *p != '|')
+ p++;
+ ne = p;
+ while (*p == ' ' || *p == '\t' || *p == '\n')
+ p++;
+ evr = 0;
+ flags = 0;
+ e = ee = 0;
+ if (*p == '(')
+ {
+ p++;
+ while (*p == ' ' || *p == '\t' || *p == '\n')
+ p++;
+ if (*p == '>')
+ flags |= REL_GT;
+ else if (*p == '=')
+ flags |= REL_EQ;
+ else if (*p == '<')
+ flags |= REL_LT;
+ if (flags)
+ {
+ p++;
+ if (*p == '>')
+ flags |= REL_GT;
+ else if (*p == '=')
+ flags |= REL_EQ;
+ else if (*p == '<')
+ flags |= REL_LT;
+ else
+ p--;
+ p++;
+ }
+ while (*p == ' ' || *p == '\t' || *p == '\n')
+ p++;
+ e = p;
+ while (*p && *p != ' ' && *p != '\t' && *p != '\n' && *p != ')')
+ p++;
+ ee = p;
+ while (*p && *p != ')')
+ p++;
+ if (*p)
+ p++;
+ while (*p == ' ' || *p == '\t' || *p == '\n')
+ p++;
+ }
+ name = strn2id(pool, n, ne - n, 1);
+ if (e)
+ {
+ evr = strn2id(pool, e, ee - e, 1);
+ name = rel2id(pool, name, evr, flags, 1);
+ }
+ if (!id)
+ id = name;
+ else
+ id = rel2id(pool, id, name, REL_OR, 1);
+ if (*p != '|')
+ break;
+ }
+ if (!id)
+ return olddeps;
+ return repo_addid_dep(repo, olddeps, id, marker);
+}
+
+
+/* put data from control file into the solvable */
+/* warning: does inplace changes */
static void
-control2solvable(Solvable *s, char *control)
+control2solvable(Solvable *s, Repodata *data, char *control)
{
+ Repo *repo = s->repo;
+ Pool *pool = repo->pool;
+ char *p, *q, *end, *tag;
+ int x, l;
+
+ p = control;
+ while (*p)
+ {
+ p = strchr(p, '\n');
+ if (!p)
+ break;
+ if (p[1] == ' ' || p[1] == '\t')
+ {
+ char *q;
+ /* continuation line */
+ q = p - 1;
+ while (q >= control && *q == ' ' && *q == '\t')
+ q--;
+ l = q + 1 - control;
+ if (l)
+ memmove(p + 1 - l, control, l);
+ control = p + 1 - l;
+ p[1] = '\n';
+ p += 2;
+ continue;
+ }
+ end = p - 1;
+ if (*p)
+ *p++ = 0;
+ /* strip trailing space */
+ while (end >= control && *end == ' ' && *end == '\t')
+ *end-- = 0;
+ tag = control;
+ control = p;
+ q = strchr(tag, ':');
+ if (!q || q - tag < 4)
+ continue;
+ *q++ = 0;
+ while (*q == ' ' || *q == '\t')
+ q++;
+ x = '@' + (tag[0] & 0x1f);
+ x = (x << 8) + '@' + (tag[1] & 0x1f);
+ switch(x)
+ {
+ case 'A' << 8 | 'R':
+ if (!strcasecmp(tag, "architecture"))
+ s->arch = str2id(pool, q, 1);
+ break;
+ case 'B' << 8 | 'R':
+ if (!strcasecmp(tag, "breaks"))
+ s->conflicts = makedeps(repo, q, s->conflicts, 0);
+ break;
+ case 'C' << 8 | 'O':
+ if (!strcasecmp(tag, "conflicts"))
+ s->conflicts = makedeps(repo, q, s->conflicts, 0);
+ break;
+ case 'D' << 8 | 'E':
+ if (!strcasecmp(tag, "depends"))
+ s->requires = makedeps(repo, q, s->requires, -SOLVABLE_PREREQMARKER);
+ else if (!strcasecmp(tag, "description"))
+ {
+ char *ld = strchr(q, '\n');
+ if (ld)
+ {
+ *ld++ = 0;
+ repodata_set_str(data, s - pool->solvables, SOLVABLE_DESCRIPTION, ld);
+ }
+ else
+ repodata_set_str(data, s - pool->solvables, SOLVABLE_DESCRIPTION, q);
+ repodata_set_str(data, s - pool->solvables, SOLVABLE_SUMMARY, q);
+ }
+ break;
+ case 'E' << 8 | 'N':
+ if (!strcasecmp(tag, "enhances"))
+ s->enhances = makedeps(repo, q, s->enhances, 0);
+ break;
+ case 'I' << 8 | 'N':
+ if (!strcasecmp(tag, "installed-size"))
+ repodata_set_num(data, s - pool->solvables, SOLVABLE_INSTALLSIZE, atoi(q));
+ break;
+ case 'P' << 8 | 'A':
+ if (!strcasecmp(tag, "package"))
+ s->name = str2id(pool, q, 1);
+ break;
+ case 'P' << 8 | 'R':
+ if (!strcasecmp(tag, "pre-depends"))
+ s->requires = makedeps(repo, q, s->requires, SOLVABLE_PREREQMARKER);
+ else if (!strcasecmp(tag, "provides"))
+ s->provides = makedeps(repo, q, s->provides, 0);
+ break;
+ case 'R' << 8 | 'E':
+ if (!strcasecmp(tag, "replaces"))
+ s->obsoletes = makedeps(repo, q, s->conflicts, 0);
+ else if (!strcasecmp(tag, "recommends"))
+ s->recommends = makedeps(repo, q, s->recommends, 0);
+ break;
+ case 'S' << 8 | 'U':
+ if (!strcasecmp(tag, "suggests"))
+ s->suggests = makedeps(repo, q, s->suggests, 0);
+ break;
+ case 'V' << 8 | 'E':
+ if (!strcasecmp(tag, "version"))
+ s->evr = str2id(pool, q, 1);
+ break;
+ }
+ }
}
void
@@ -231,9 +427,10 @@ repo_add_debs(Repo *repo, const char **debs, int ndebs, int flags)
ctar = sat_realloc(ctar, l2 + 1);
ctar[l2] = 0;
s = pool_id2solvable(pool, repo_add_solvable(repo));
- control2solvable(s, (char *)ctar);
+ control2solvable(s, data, (char *)ctar);
repodata_set_location(data, s - pool->solvables, 0, 0, debs[i]);
- repodata_set_num(data, s - pool->solvables, SOLVABLE_DOWNLOADSIZE, (unsigned int)((stb.st_size + 1023) / 1024));
+ if (S_ISREG(stb.st_mode))
+ repodata_set_num(data, s - pool->solvables, SOLVABLE_DOWNLOADSIZE, (unsigned int)((stb.st_size + 1023) / 1024));
if (gotpkgid)
repodata_set_bin_checksum(data, s - pool->solvables, SOLVABLE_PKGID, REPOKEY_TYPE_MD5, pkgid);
sat_free(ctar);
@@ -241,13 +438,3 @@ repo_add_debs(Repo *repo, const char **debs, int ndebs, int flags)
if (!(flags & REPO_NO_INTERNALIZE))
repodata_internalize(data);
}
-
-int
-main(int argc, const char **argv)
-{
- Pool *pool = pool_create();
- Repo *repo = repo_create(pool, "debs2solv");
- repo_add_debs(repo, argv + 1, argc - 1, DEBS_ADD_WITH_PKGID);
- repo_write(repo, stdout, 0, 0, 0);
- pool_free(pool);
-}
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
30 Jun '09
ref: refs/heads/master
commit 50c8f37d6190c43a95049c6a5378d4b8405ac8bc
Author: Michael Andres <ma(a)suse.de>
Date: Tue Jun 30 13:00:14 2009 +0200
Adapt to changed satsolver api.
---
zypp/sat/LookupAttr.cc | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/zypp/sat/LookupAttr.cc b/zypp/sat/LookupAttr.cc
index f184502..750b081 100644
--- a/zypp/sat/LookupAttr.cc
+++ b/zypp/sat/LookupAttr.cc
@@ -541,7 +541,7 @@ namespace zypp
case REPOKEY_TYPE_IDARRAY:
case REPOKEY_TYPE_CONSTANTID:
{
- detail::IdType id = ::repodata_globalize_id( _dip->data, _dip->kv.id );
+ detail::IdType id = ::repodata_globalize_id( _dip->data, _dip->kv.id, 1 );
return ISRELDEP(id) ? Capability( id ).asString()
: IdString( id ).asString();
}
@@ -595,7 +595,7 @@ namespace zypp
case REPOKEY_TYPE_ID:
case REPOKEY_TYPE_IDARRAY:
case REPOKEY_TYPE_CONSTANTID:
- return IdString( ::repodata_globalize_id( _dip->data, _dip->kv.id ) );
+ return IdString( ::repodata_globalize_id( _dip->data, _dip->kv.id, 1 ) );
break;
}
}
@@ -671,7 +671,7 @@ namespace zypp
detail::IdType LookupAttr::iterator::dereference() const
{
- return _dip ? ::repodata_globalize_id( _dip->data, _dip->kv.id )
+ return _dip ? ::repodata_globalize_id( _dip->data, _dip->kv.id, 1 )
: detail::noId;
}
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
30 Jun '09
ref: refs/heads/ma-misc
commit 50c8f37d6190c43a95049c6a5378d4b8405ac8bc
Author: Michael Andres <ma(a)suse.de>
Date: Tue Jun 30 13:00:14 2009 +0200
Adapt to changed satsolver api.
---
zypp/sat/LookupAttr.cc | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/zypp/sat/LookupAttr.cc b/zypp/sat/LookupAttr.cc
index f184502..750b081 100644
--- a/zypp/sat/LookupAttr.cc
+++ b/zypp/sat/LookupAttr.cc
@@ -541,7 +541,7 @@ namespace zypp
case REPOKEY_TYPE_IDARRAY:
case REPOKEY_TYPE_CONSTANTID:
{
- detail::IdType id = ::repodata_globalize_id( _dip->data, _dip->kv.id );
+ detail::IdType id = ::repodata_globalize_id( _dip->data, _dip->kv.id, 1 );
return ISRELDEP(id) ? Capability( id ).asString()
: IdString( id ).asString();
}
@@ -595,7 +595,7 @@ namespace zypp
case REPOKEY_TYPE_ID:
case REPOKEY_TYPE_IDARRAY:
case REPOKEY_TYPE_CONSTANTID:
- return IdString( ::repodata_globalize_id( _dip->data, _dip->kv.id ) );
+ return IdString( ::repodata_globalize_id( _dip->data, _dip->kv.id, 1 ) );
break;
}
}
@@ -671,7 +671,7 @@ namespace zypp
detail::IdType LookupAttr::iterator::dereference() const
{
- return _dip ? ::repodata_globalize_id( _dip->data, _dip->kv.id )
+ return _dip ? ::repodata_globalize_id( _dip->data, _dip->kv.id, 1 )
: detail::noId;
}
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
30 Jun '09
ref: refs/heads/master
commit 561ca5f6ae0c0df8378bee2f4823855945fb7fec
Author: Michael Schroeder <mls(a)suse.de>
Date: Tue Jun 30 12:15:48 2009 +0200
- fix sidedata segfault
---
src/repo.h | 34 ++++++++++++----------------------
1 files changed, 12 insertions(+), 22 deletions(-)
diff --git a/src/repo.h b/src/repo.h
index b5329e9..bb6eabd 100644
--- a/src/repo.h
+++ b/src/repo.h
@@ -65,19 +65,14 @@ static inline Id repo_add_solvable(Repo *repo)
extern Id pool_add_solvable(Pool *pool);
Id p = pool_add_solvable(repo->pool);
if (!repo->start || repo->start == repo->end)
- {
- repo->start = p;
- repo->end = p + 1;
- }
- else
- {
- if (p < repo->start)
- repo->start = p;
- if (p + 1 > repo->end)
- repo->end = p + 1;
- }
+ repo->start = repo->end = p;
+ /* warning: sidedata must be extended before adapting start/end */
if (repo->rpmdbid)
repo->rpmdbid = (Id *)repo_sidedata_extend(repo, repo->rpmdbid, sizeof(Id), p, 1);
+ if (p < repo->start)
+ repo->start = p;
+ if (p + 1 > repo->end)
+ repo->end = p + 1;
repo->nsolvables++;
repo->pool->solvables[p].repo = repo;
return p;
@@ -92,19 +87,14 @@ static inline Id repo_add_solvable_block(Repo *repo, int count)
return 0;
p = pool_add_solvable_block(repo->pool, count);
if (!repo->start || repo->start == repo->end)
- {
- repo->start = p;
- repo->end = p + count;
- }
- else
- {
- if (p < repo->start)
- repo->start = p;
- if (p + count > repo->end)
- repo->end = p + count;
- }
+ repo->start = repo->end = p;
+ /* warning: sidedata must be extended before adapting start/end */
if (repo->rpmdbid)
repo->rpmdbid = (Id *)repo_sidedata_extend(repo, repo->rpmdbid, sizeof(Id), p, count);
+ if (p < repo->start)
+ repo->start = p;
+ if (p + count > repo->end)
+ repo->end = p + count;
repo->nsolvables += count;
for (s = repo->pool->solvables + p; count--; s++)
s->repo = repo;
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
30 Jun '09
ref: refs/heads/master
commit bfdd45dc8e67c383b8fc81ec15b79921f6484905
Author: Ján Kupec <jkupec(a)suse.cz>
Date: Tue Jun 30 11:51:02 2009 +0200
Improved package summary and description.
---
zypper.spec.cmake | 9 +++++++--
1 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/zypper.spec.cmake b/zypper.spec.cmake
index 333390f..4e38b9d 100644
--- a/zypper.spec.cmake
+++ b/zypper.spec.cmake
@@ -21,7 +21,7 @@ Group: System/Packages
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Autoreqprov: on
PreReq: permissions
-Summary: Command line package management tool using libzypp
+Summary: Command line software manager using libzypp
Version: @VERSION@
Release: 0
Source: @PACKAGE@-@VERSION@.tar.bz2
@@ -31,7 +31,12 @@ Provides: y2pmsh
Obsoletes: y2pmsh
%description
-Command line package management tool using libzypp.
+Zypper is a command line tool for managing software. It can be used to add
+package repositories, search for packages, install, remove, or update packages,
+install patches, hardware drivers, verify dependencies, and more.
+
+Zypper can be used interactively or non-interactively by user, from scripts,
+or front-ends.
Authors:
--------
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
[zypp-commit] <zypper> master : Show verbose summary when -v is used (bnc #517171)
by Ján Kupec 30 Jun '09
by Ján Kupec 30 Jun '09
30 Jun '09
ref: refs/heads/master
commit 3b5d0fe64c2a4b343335b76696d56902792e01a6
Author: Ján Kupec <jkupec(a)suse.cz>
Date: Tue Jun 30 11:17:22 2009 +0200
Show verbose summary when -v is used (bnc #517171)
---
src/solve-commit.cc | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/src/solve-commit.cc b/src/solve-commit.cc
index 4969129..2653526 100755
--- a/src/solve-commit.cc
+++ b/src/solve-commit.cc
@@ -425,6 +425,11 @@ void solve_and_commit (Zypper & zypper)
if (platform && platform->name().find("SUSE_SLE") != string::npos)
summary.setViewOption(Summary::SHOW_UNSUPPORTED);
+ if (zypper.out().verbosity() == Out::HIGH)
+ summary.setViewOption(Summary::SHOW_VERSION);
+ else if (zypper.out().verbosity() == Out::DEBUG)
+ summary.setViewOption(Summary::SHOW_ALL);
+
// show the summary
if (zypper.out().type() == Out::TYPE_XML)
summary.dumpAsXmlTo(cout);
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
[zypp-commit] <sat-solver> master : - do not enter solvable data when not in leaf level
by Michael Schroeder 29 Jun '09
by Michael Schroeder 29 Jun '09
29 Jun '09
ref: refs/heads/master
commit cf1d6ba3c1a262c80a1113ba708b9269e6ee7a0a
Author: Michael Schroeder <mls(a)suse.de>
Date: Mon Jun 29 19:19:24 2009 +0200
- do not enter solvable data when not in leaf level
---
src/repodata.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/src/repodata.c b/src/repodata.c
index 319f9ab..fb88153 100644
--- a/src/repodata.c
+++ b/src/repodata.c
@@ -1069,7 +1069,7 @@ dataiterator_step(Dataiterator *di)
if (di->repodataid >= 0)
{
di->repodataid = 0; /* reset repodata iterator */
- if (di->solvid > 0 && !(di->flags & SEARCH_NO_STORAGE_SOLVABLE) && (!di->keyname || (di->keyname >= SOLVABLE_NAME && di->keyname <= RPM_RPMDBID)))
+ if (di->solvid > 0 && !(di->flags & SEARCH_NO_STORAGE_SOLVABLE) && (!di->keyname || (di->keyname >= SOLVABLE_NAME && di->keyname <= RPM_RPMDBID)) && di->nparents == di->nkeynames)
{
di->key = solvablekeys + (di->keyname ? di->keyname - SOLVABLE_NAME : 0);
di->data = 0;
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
29 Jun '09
ref: refs/heads/master
commit 71468b51e6e1f1e7decbe86904fc570b4c0936ed
Author: Michael Schroeder <mls(a)suse.de>
Date: Mon Jun 29 17:54:15 2009 +0200
- somehow didn't add sha2.h
---
src/sha2.h | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 86 insertions(+), 0 deletions(-)
diff --git a/src/sha2.h b/src/sha2.h
new file mode 100644
index 0000000..2c139ae
--- /dev/null
+++ b/src/sha2.h
@@ -0,0 +1,86 @@
+/*
+ * FILE: sha2.h
+ * AUTHOR: Aaron D. Gifford <me(a)aarongifford.com>
+ *
+ * Copyright (c) 2000-2001, Aaron D. Gifford
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the copyright holder nor the names of contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $Id: sha2.h,v 1.1 2001/11/08 00:02:01 adg Exp adg $
+ */
+
+#include <inttypes.h>
+
+
+/*** SHA-256/384/512 Various Length Definitions ***********************/
+#define SHA256_BLOCK_LENGTH 64
+#define SHA256_DIGEST_LENGTH 32
+#define SHA256_DIGEST_STRING_LENGTH (SHA256_DIGEST_LENGTH * 2 + 1)
+#define SHA384_BLOCK_LENGTH 128
+#define SHA384_DIGEST_LENGTH 48
+#define SHA384_DIGEST_STRING_LENGTH (SHA384_DIGEST_LENGTH * 2 + 1)
+#define SHA512_BLOCK_LENGTH 128
+#define SHA512_DIGEST_LENGTH 64
+#define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1)
+
+
+/*** SHA-256/384/512 Context Structures *******************************/
+/* NOTE: If your architecture does not define either u_intXX_t types or
+ * uintXX_t (from inttypes.h), you may need to define things by hand
+ * for your system:
+ */
+typedef struct _SHA256_CTX {
+ uint32_t state[8];
+ uint64_t bitcount;
+ uint8_t buffer[SHA256_BLOCK_LENGTH];
+} SHA256_CTX;
+typedef struct _SHA512_CTX {
+ uint64_t state[8];
+ uint64_t bitcount[2];
+ uint8_t buffer[SHA512_BLOCK_LENGTH];
+} SHA512_CTX;
+
+typedef SHA512_CTX SHA384_CTX;
+
+
+/*** SHA-256/384/512 Function Prototypes ******************************/
+void sat_SHA256_Init(SHA256_CTX *);
+void sat_SHA256_Update(SHA256_CTX*, const uint8_t*, size_t);
+void sat_SHA256_Final(uint8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*);
+char* sat_SHA256_End(SHA256_CTX*, char[SHA256_DIGEST_STRING_LENGTH]);
+char* sat_SHA256_Data(const uint8_t*, size_t, char[SHA256_DIGEST_STRING_LENGTH]);
+
+void sat_SHA384_Init(SHA384_CTX*);
+void sat_SHA384_Update(SHA384_CTX*, const uint8_t*, size_t);
+void sat_SHA384_Final(uint8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*);
+char* sat_SHA384_End(SHA384_CTX*, char[SHA384_DIGEST_STRING_LENGTH]);
+char* sat_SHA384_Data(const uint8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]);
+
+void sat_SHA512_Init(SHA512_CTX*);
+void sat_SHA512_Update(SHA512_CTX*, const uint8_t*, size_t);
+void sat_SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*);
+char* sat_SHA512_End(SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]);
+char* sat_SHA512_Data(const uint8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]);
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
[zypp-commit] <sat-solver> master : - add repo_deb.[ch], needed for build service code
by Michael Schroeder 29 Jun '09
by Michael Schroeder 29 Jun '09
29 Jun '09
ref: refs/heads/master
commit 12468ba6fa286f4e35dc2328af1a65ce9e5bc9c2
Author: Michael Schroeder <mls(a)suse.de>
Date: Mon Jun 29 17:49:11 2009 +0200
- add repo_deb.[ch], needed for build service code
---
ext/repo_deb.c | 253 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ext/repo_deb.h | 10 ++
src/chksum.c | 9 ++-
src/chksum.h | 2 +-
4 files changed, 272 insertions(+), 2 deletions(-)
diff --git a/ext/repo_deb.c b/ext/repo_deb.c
new file mode 100644
index 0000000..3ed362b
--- /dev/null
+++ b/ext/repo_deb.c
@@ -0,0 +1,253 @@
+/*
+ * Copyright (c) 2009, Novell Inc.
+ *
+ * This program is licensed under the BSD license, read LICENSE.BSD
+ * for further information
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <zlib.h>
+
+#include "pool.h"
+#include "repo.h"
+#include "util.h"
+#include "chksum.h"
+#include "repo_deb.h"
+
+static unsigned char *
+decompress(unsigned char *in, int inl, int *outlp)
+{
+ z_stream strm;
+ int outl, ret;
+ unsigned char *out;
+
+ memset(&strm, 0, sizeof(strm));
+ strm.next_in = in;
+ strm.avail_in = inl;
+ out = sat_malloc(4096);
+ strm.next_out = out;
+ strm.avail_out = 4096;
+ outl = 0;
+ ret = inflateInit2(&strm, -MAX_WBITS);
+ if (ret != Z_OK)
+ {
+ free(out);
+ return 0;
+ }
+ for (;;)
+ {
+ if (strm.avail_out == 0)
+ {
+ outl += 4096;
+ out = sat_realloc(out, outl + 4096);
+ strm.next_out = out + outl;
+ strm.avail_out = 4096;
+ }
+ ret = inflate(&strm, Z_NO_FLUSH);
+ if (ret == Z_STREAM_END)
+ break;
+ if (ret != Z_OK)
+ {
+ free(out);
+ return 0;
+ }
+ }
+ outl += 4096 - strm.avail_out;
+ inflateEnd(&strm);
+ *outlp = outl;
+ return out;
+}
+
+static void
+control2solvable(Solvable *s, char *control)
+{
+}
+
+void
+repo_add_debs(Repo *repo, const char **debs, int ndebs, int flags)
+{
+ Pool *pool = repo->pool;
+ Repodata *data;
+ unsigned char buf[4096], *bp;
+ int i, l, l2, vlen, clen, ctarlen;
+ unsigned char *ctgz;
+ unsigned char pkgid[16];
+ unsigned char *ctar;
+ int gotpkgid;
+ FILE *fp;
+ Solvable *s;
+ struct stat stb;
+
+ if (!(flags & REPO_REUSE_REPODATA))
+ data = repo_add_repodata(repo, 0);
+ else
+ data = repo_last_repodata(repo);
+ for (i = 0; i < ndebs; i++)
+ {
+ if ((fp = fopen(debs[i], "r")) == 0)
+ {
+ perror(debs[i]);
+ continue;
+ }
+ if (fstat(fileno(fp), &stb))
+ {
+ perror("stat");
+ continue;
+ }
+ l = fread(buf, 1, sizeof(buf), fp);
+ if (l < 8 + 60 || strncmp(buf, "!<arch>\ndebian-binary ", 8 + 16) != 0)
+ {
+ fprintf(stderr, "%s: not a deb package\n", debs[i]);
+ fclose(fp);
+ continue;
+ }
+ vlen = atoi(buf + 8 + 48);
+ if (vlen < 0 || vlen > l)
+ {
+ fprintf(stderr, "%s: not a deb package\n", debs[i]);
+ fclose(fp);
+ continue;
+ }
+ vlen += vlen & 1;
+ if (l < 8 + 60 + vlen + 60)
+ {
+ fprintf(stderr, "%s: unhandled deb package\n", debs[i]);
+ fclose(fp);
+ continue;
+ }
+ if (strncmp(buf + 8 + 60 + vlen, "control.tar.gz ", 16) != 0)
+ {
+ fprintf(stderr, "%s: control.tar.gz is not second entry\n", debs[i]);
+ fclose(fp);
+ continue;
+ }
+ clen = atoi(buf + 8 + 60 + vlen + 48);
+ if (clen <= 0)
+ {
+ fprintf(stderr, "%s: control.tar.gz has illegal size\n", debs[i]);
+ fclose(fp);
+ continue;
+ }
+ ctgz = sat_calloc(1, clen + 4);
+ bp = buf + 8 + 60 + vlen + 60;
+ l -= 8 + 60 + vlen + 60;
+ if (l > clen)
+ l = clen;
+ if (l)
+ memcpy(ctgz, bp, l);
+ if (l < clen)
+ {
+ if (fread(ctgz + l, clen - l, 1, fp) != 1)
+ {
+ fprintf(stderr, "%s: unexpected EOF\n", debs[i]);
+ sat_free(ctgz);
+ fclose(fp);
+ continue;
+ }
+ }
+ fclose(fp);
+ gotpkgid = 0;
+ if (flags & DEBS_ADD_WITH_PKGID)
+ {
+ void *handle = sat_chksum_create(REPOKEY_TYPE_MD5);
+ sat_chksum_add(handle, ctgz, clen);
+ sat_chksum_free(handle, pkgid);
+ gotpkgid = 1;
+ }
+ if (ctgz[0] != 0x1f || ctgz[1] != 0x8b)
+ {
+ fprintf(stderr, "%s: control.tar.gz is not gzipped\n", debs[i]);
+ sat_free(ctgz);
+ continue;
+ }
+ if (ctgz[2] != 8 || (ctgz[3] & 0xe0) != 0)
+ {
+ fprintf(stderr, "%s: control.tar.gz is compressed in a strange way\n", debs[i]);
+ sat_free(ctgz);
+ continue;
+ }
+ bp = ctgz + 4;
+ bp += 6; /* skip time, xflags and OS code */
+ if (ctgz[3] & 0x04)
+ {
+ /* skip extra field */
+ l = bp[0] | bp[1] << 8;
+ bp += l + 2;
+ if (bp >= ctgz + clen)
+ {
+ fprintf(stderr, "%s: corrupt gzip\n", debs[i]);
+ sat_free(ctgz);
+ continue;
+ }
+ }
+ if (ctgz[3] & 0x08) /* orig filename */
+ while (*bp)
+ bp++;
+ if (ctgz[3] & 0x10) /* file comment */
+ while (*bp)
+ bp++;
+ if (ctgz[3] & 0x02) /* header crc */
+ bp += 2;
+ if (bp >= ctgz + clen)
+ {
+ fprintf(stderr, "%s: corrupt control.tar.gz\n", debs[i]);
+ sat_free(ctgz);
+ continue;
+ }
+ ctar = decompress(bp, ctgz + clen - bp, &ctarlen);
+ sat_free(ctgz);
+ if (!ctar)
+ {
+ fprintf(stderr, "%s: corrupt control.tar.gz\n", debs[i]);
+ continue;
+ }
+ bp = ctar;
+ l = ctarlen;
+ while (l > 512)
+ {
+ int j;
+ l2 = 0;
+ for (j = 124; j < 124 + 12; j++)
+ if (bp[j] >= '0' && bp[j] <= '7')
+ l2 = l2 * 8 + (bp[j] - '0');
+ if (!strcmp(bp, "./control"))
+ break;
+ l2 = 512 + ((l2 + 511) & ~511);
+ l -= l2;
+ bp += l2;
+ }
+ if (l <= 512 || l - 512 - l2 <= 0 || l2 <= 0)
+ {
+ fprintf(stderr, "%s: control.tar.gz contains no ./control file\n", debs[i]);
+ free(ctar);
+ continue;
+ }
+ memmove(ctar, bp + 512, l2);
+ ctar = sat_realloc(ctar, l2 + 1);
+ ctar[l2] = 0;
+ s = pool_id2solvable(pool, repo_add_solvable(repo));
+ control2solvable(s, (char *)ctar);
+ repodata_set_location(data, s - pool->solvables, 0, 0, debs[i]);
+ repodata_set_num(data, s - pool->solvables, SOLVABLE_DOWNLOADSIZE, (unsigned int)((stb.st_size + 1023) / 1024));
+ if (gotpkgid)
+ repodata_set_bin_checksum(data, s - pool->solvables, SOLVABLE_PKGID, REPOKEY_TYPE_MD5, pkgid);
+ sat_free(ctar);
+ }
+ if (!(flags & REPO_NO_INTERNALIZE))
+ repodata_internalize(data);
+}
+
+int
+main(int argc, const char **argv)
+{
+ Pool *pool = pool_create();
+ Repo *repo = repo_create(pool, "debs2solv");
+ repo_add_debs(repo, argv + 1, argc - 1, DEBS_ADD_WITH_PKGID);
+ repo_write(repo, stdout, 0, 0, 0);
+ pool_free(pool);
+}
diff --git a/ext/repo_deb.h b/ext/repo_deb.h
new file mode 100644
index 0000000..d06dbeb
--- /dev/null
+++ b/ext/repo_deb.h
@@ -0,0 +1,10 @@
+/*
+ * Copyright (c) 2009, Novell Inc.
+ *
+ * This program is licensed under the BSD license, read LICENSE.BSD
+ * for further information
+ */
+
+extern void repo_add_debs(Repo *repo, const char **debs, int ndebs, int flags);
+
+#define DEBS_ADD_WITH_PKGID (1 << 8)
diff --git a/src/chksum.c b/src/chksum.c
index e2043f3..a66de46 100644
--- a/src/chksum.c
+++ b/src/chksum.c
@@ -99,8 +99,15 @@ sat_chksum_get(void *handle, int *lenp)
}
void *
-sat_chksum_free(void *handle)
+sat_chksum_free(void *handle, unsigned char *cp)
{
+ if (cp)
+ {
+ unsigned char *res;
+ int l;
+ res = sat_chksum_get(handle, &l);
+ memcpy(cp, res, l);
+ }
sat_free(handle);
return 0;
}
diff --git a/src/chksum.h b/src/chksum.h
index 0b3a289..89bdf86 100644
--- a/src/chksum.h
+++ b/src/chksum.h
@@ -3,7 +3,7 @@
void *sat_chksum_create(Id type);
void sat_chksum_add(void *handle, const void *data, int len);
unsigned char *sat_chksum_get(void *handle, int *lenp);
-void *sat_chksum_free(void *handle);
+void *sat_chksum_free(void *handle, unsigned char *cp);
static inline int sat_chksum_len(Id type)
{
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
ref: refs/heads/master
commit b2a0ea979c297d0cf416733039cccbca80109693
Author: Ján Kupec <jkupec(a)suse.cz>
Date: Mon Jun 29 17:41:57 2009 +0200
Changes & version.
---
VERSION.cmake | 4 ++--
package/zypper.changes | 6 ++++++
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/VERSION.cmake b/VERSION.cmake
index 66066a4..478e6ac 100644
--- a/VERSION.cmake
+++ b/VERSION.cmake
@@ -31,7 +31,7 @@
#
SET(VERSION_MAJOR "1")
SET(VERSION_MINOR "2")
-SET(VERSION_PATCH "0")
+SET(VERSION_PATCH "1")
-# LAST RELEASED: 1.1.1
+# LAST RELEASED: 1.2.1
#=======
diff --git a/package/zypper.changes b/package/zypper.changes
index 8a9edc7..772e706 100644
--- a/package/zypper.changes
+++ b/package/zypper.changes
@@ -1,4 +1,10 @@
-------------------------------------------------------------------
+Mon Jun 29 17:40:23 CEST 2009 - jkupec(a)suse.cz
+
+- Updated translations.
+- 1.2.1
+
+-------------------------------------------------------------------
Mon Jun 29 13:59:41 CEST 2009 - jkupec(a)suse.cz
- now 'list-patches' does not hide other updates if software
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
ref: refs/heads/master
commit 3f8f4aec8b5a2d47cb81eb9c76bcdad8243bbbb6
Author: Ján Kupec <jkupec(a)suse.cz>
Date: Mon Jun 29 17:39:53 2009 +0200
Translations update.
---
po/fr.po | 636 +++++++++++++++++++++++++++++++++++---------------------------
po/ja.po | 219 +---------------------
po/nl.po | 387 ++++++++++++++++++--------------------
po/pl.po | 295 ++++-------------------------
po/ru.po | 259 +++----------------------
po/sk.po | 225 +----------------------
po/uk.po | 245 +++++++-----------------
7 files changed, 674 insertions(+), 1592 deletions(-)
diff --git a/po/fr.po b/po/fr.po
index 939bc42..db9de83 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -13,8 +13,8 @@ msgstr ""
"Project-Id-Version: zypper.fr\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-06-08 16:44+0200\n"
-"PO-Revision-Date: 2008-10-27 21:15+0100\n"
-"Last-Translator: Rémy Marquis <remy.marquis(a)opensuse.org>\n"
+"PO-Revision-Date: 2009-06-17 19:11+0100\n"
+"Last-Translator: Guillaume GARDET <guillaume.gardet(a)free.fr>\n"
"Language-Team: French <opensuse-fr(a)opensuse.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -168,8 +168,10 @@ msgstr "Pas de digest pour le fichier %s."
# internal key used: Ok
#. translators: help text for 'x' option in the 'Continue?' prompt
#. popts.setOptionHelp(8, _("Explain why the packages are going to be installed."));
-#: ../src/callbacks/keyring.h:256 ../src/callbacks/keyring.h:266
-#: ../src/callbacks/keyring.h:288 ../src/callbacks/rpm.h:61
+#: ../src/callbacks/keyring.h:256
+#: ../src/callbacks/keyring.h:266
+#: ../src/callbacks/keyring.h:288
+#: ../src/callbacks/rpm.h:61
#: ../src/solve-commit.cc:498
msgid "Continue?"
msgstr "Continuer ?"
@@ -210,45 +212,45 @@ msgstr "Veuillez insérer le media [%s] #%d et tapez 'y' pour continuer ou 'n' p
#. Translate the a/r/i part exactly as you did the a/r/i string.
#. the 'u' reply means 'Change URI'.
#: ../src/callbacks/media.h:106
-#, fuzzy
#| msgid "a/r/i"
msgid "a/r/i/u"
-msgstr "a/r/i"
+msgstr "a/r/i/u"
#. help text for the "Abort, retry, ignore?" prompt for media errors
#: ../src/callbacks/media.h:108
msgid "Skip retrieval of the file and abort current operation."
-msgstr ""
+msgstr "Sauter la récupération du fichier et abandonner l'opération en cours."
#. help text for the "Abort, retry, ignore?" prompt for media errors
#: ../src/callbacks/media.h:110
msgid "Try to retrieve the file again."
-msgstr ""
+msgstr "Essayer de récupérer le fichier à nouveau."
#. help text for the "Abort, retry, ignore?" prompt for media errors
#: ../src/callbacks/media.h:112
msgid "Skip retrieval of the file and try to continue with the operation without the file."
-msgstr ""
+msgstr "Sauter la récupération du fichier et essayer de continuer l'opération sans le fichier."
#. help text for the "Abort, retry, ignore?" prompt for media errors
#: ../src/callbacks/media.h:114
msgid "Change current base URI and try retrieving the file again."
-msgstr ""
+msgstr "Changer l'URI de base actuelle et essayer de récupérer le fichier à nouveau."
#. translators: this is a prompt text
-#: ../src/callbacks/media.h:119 ../src/utils/prompt.cc:178
+#: ../src/callbacks/media.h:119
+#: ../src/utils/prompt.cc:178
#: ../src/utils/prompt.cc:266
msgid "Abort, retry, ignore?"
msgstr "Abandonner, réessayer, ignorer ?"
#. translators: this is a prompt label, will appear as "New URI: "
#: ../src/callbacks/media.h:130
-#, fuzzy
#| msgid "URI"
msgid "New URI"
-msgstr "URI"
+msgstr "Nouvelle URI"
-#: ../src/callbacks/media.h:267 ../src/callbacks/media.h:274
+#: ../src/callbacks/media.h:267
+#: ../src/callbacks/media.h:274
msgid "User Name"
msgstr "Nom d'utilisateur"
@@ -287,8 +289,10 @@ msgstr "(%s decompressé)"
msgid "Running: %s (%s, %s)"
msgstr "En cours d'exécution : %s (%s, %s)"
-#: ../src/callbacks/rpm.h:139 ../src/callbacks/rpm.h:148
-#: ../src/callbacks/rpm.h:156 ../src/callbacks/rpm.h:163
+#: ../src/callbacks/rpm.h:139
+#: ../src/callbacks/rpm.h:148
+#: ../src/callbacks/rpm.h:156
+#: ../src/callbacks/rpm.h:163
msgid "Reading installed packages"
msgstr "Lecture des paquets installés"
@@ -331,10 +335,10 @@ msgid "Unknown command '%s'"
msgstr "Commande '%s' inconnue"
#: ../src/Config.cc:73
-#, fuzzy, c-format
+#, c-format
#| msgid "Unknown command option"
msgid "Unknown configuration option '%s'"
-msgstr "Option command inconnue"
+msgstr "Option de configuration '%s' inconnue"
#: ../src/info.cc:40
msgid "Name: "
@@ -427,17 +431,22 @@ msgstr "Nécessite:"
#, fuzzy
#| msgid "Recommends"
msgid "Recommends:"
-msgstr "Recommande"
+msgstr "Recommande :"
-#: ../src/info.cc:181 ../src/info.cc:325 ../src/info.cc:396
+#: ../src/info.cc:181
+#: ../src/info.cc:325
+#: ../src/info.cc:396
msgid "Catalog: "
msgstr "Catalogue: "
-#: ../src/info.cc:181 ../src/info.cc:325 ../src/info.cc:396
+#: ../src/info.cc:181
+#: ../src/info.cc:325
+#: ../src/info.cc:396
msgid "Repository: "
msgstr "Dépot: "
-#: ../src/info.cc:186 ../src/info.cc:330
+#: ../src/info.cc:186
+#: ../src/info.cc:330
msgid "Installed: "
msgstr "Installé: "
@@ -446,24 +455,45 @@ msgstr "Installé: "
#. enabled?
#. autorefresh?
#. is base
-#: ../src/info.cc:186 ../src/info.cc:257 ../src/info.cc:263 ../src/info.cc:265
-#: ../src/info.cc:330 ../src/info.cc:403 ../src/info.cc:407
-#: ../src/repos.cc:735 ../src/repos.cc:737 ../src/repos.cc:1346
-#: ../src/repos.cc:1348 ../src/repos.cc:2024 ../src/repos.cc:2026
-#: ../src/search.cc:608 ../src/solve-commit.cc:256
+#: ../src/info.cc:186
+#: ../src/info.cc:257
+#: ../src/info.cc:263
+#: ../src/info.cc:265
+#: ../src/info.cc:330
+#: ../src/info.cc:403
+#: ../src/info.cc:407
+#: ../src/repos.cc:735
+#: ../src/repos.cc:737
+#: ../src/repos.cc:1346
+#: ../src/repos.cc:1348
+#: ../src/repos.cc:2024
+#: ../src/repos.cc:2026
+#: ../src/search.cc:608
+#: ../src/solve-commit.cc:256
msgid "Yes"
msgstr "Oui"
-#: ../src/info.cc:186 ../src/info.cc:257 ../src/info.cc:263 ../src/info.cc:265
-#: ../src/info.cc:330 ../src/info.cc:403 ../src/info.cc:407
-#: ../src/repos.cc:735 ../src/repos.cc:737 ../src/repos.cc:1346
-#: ../src/repos.cc:1348 ../src/repos.cc:2024 ../src/repos.cc:2026
-#: ../src/search.cc:608 ../src/solve-commit.cc:256
+#: ../src/info.cc:186
+#: ../src/info.cc:257
+#: ../src/info.cc:263
+#: ../src/info.cc:265
+#: ../src/info.cc:330
+#: ../src/info.cc:403
+#: ../src/info.cc:407
+#: ../src/repos.cc:735
+#: ../src/repos.cc:737
+#: ../src/repos.cc:1346
+#: ../src/repos.cc:1348
+#: ../src/repos.cc:2024
+#: ../src/repos.cc:2026
+#: ../src/search.cc:608
+#: ../src/solve-commit.cc:256
msgid "No"
msgstr "Non"
#. ! \todo fix this - arch?
-#: ../src/info.cc:189 ../src/info.cc:252
+#: ../src/info.cc:189
+#: ../src/info.cc:252
msgid "Status: "
msgstr "État: "
@@ -518,43 +548,65 @@ msgstr "Fournit:"
#, fuzzy
#| msgid "Conflicts"
msgid "Conflicts:"
-msgstr "Conflits"
+msgstr "Conflits :"
-#: ../src/info.cc:297 ../src/search.cc:327
+#: ../src/info.cc:297
+#: ../src/search.cc:327
msgid "Recommended"
msgstr "Recommandé"
-#: ../src/info.cc:299 ../src/search.cc:329
+#: ../src/info.cc:299
+#: ../src/search.cc:329
msgid "Suggested"
msgstr "Suggeré"
#. translators: S for 'installed Status'
#. translators: S for installed Status
#. TranslatorExplanation S stands for Status
-#: ../src/info.cc:340 ../src/search.cc:38 ../src/search.cc:54
-#: ../src/search.cc:218 ../src/search.cc:389 ../src/search.cc:445
-#: ../src/search.cc:537 ../src/update.cc:477
+#: ../src/info.cc:340
+#: ../src/search.cc:38
+#: ../src/search.cc:54
+#: ../src/search.cc:218
+#: ../src/search.cc:389
+#: ../src/search.cc:445
+#: ../src/search.cc:537
+#: ../src/update.cc:477
msgid "S"
msgstr "S"
#. translators: name (general header)
-#: ../src/info.cc:340 ../src/locks.cc:39 ../src/repos.cc:655
-#: ../src/repos.cc:704 ../src/repos.cc:2091 ../src/search.cc:44
-#: ../src/search.cc:56 ../src/search.cc:219 ../src/search.cc:268
-#: ../src/search.cc:390 ../src/search.cc:451 ../src/search.cc:540
-#: ../src/update.cc:155 ../src/update.cc:485 ../src/Zypper.cc:4066
+#: ../src/info.cc:340
+#: ../src/locks.cc:39
+#: ../src/repos.cc:655
+#: ../src/repos.cc:704
+#: ../src/repos.cc:2091
+#: ../src/search.cc:44
+#: ../src/search.cc:56
+#: ../src/search.cc:219
+#: ../src/search.cc:268
+#: ../src/search.cc:390
+#: ../src/search.cc:451
+#: ../src/search.cc:540
+#: ../src/update.cc:155
+#: ../src/update.cc:485
+#: ../src/Zypper.cc:4066
msgid "Name"
msgstr "Nom"
#. translators: type (general header)
-#: ../src/info.cc:340 ../src/locks.cc:43 ../src/repos.cc:655
-#: ../src/repos.cc:713 ../src/repos.cc:2099 ../src/search.cc:58
+#: ../src/info.cc:340
+#: ../src/locks.cc:43
+#: ../src/repos.cc:655
+#: ../src/repos.cc:713
+#: ../src/repos.cc:2099
+#: ../src/search.cc:58
#: ../src/search.cc:222
msgid "Type"
msgstr "Type"
# TLABEL packages_2002_03_14_2340__36
-#: ../src/info.cc:340 ../src/search.cc:392
+#: ../src/info.cc:340
+#: ../src/search.cc:392
msgid "Dependency"
msgstr "Dépendance"
@@ -566,7 +618,8 @@ msgstr "Contenus"
msgid "(empty)"
msgstr "(vide)"
-#: ../src/info.cc:402 ../src/search.cc:548
+#: ../src/info.cc:402
+#: ../src/search.cc:548
msgid "Is Base"
msgstr ""
@@ -574,7 +627,8 @@ msgstr ""
msgid "Flavor"
msgstr "Saveur"
-#: ../src/info.cc:406 ../src/utils/misc.cc:134
+#: ../src/info.cc:406
+#: ../src/utils/misc.cc:134
msgid "Installed"
msgstr "installé"
@@ -583,7 +637,8 @@ msgid "Short Name"
msgstr "Nom court"
#. translators: meaning a package %s or provider of capability %s
-#: ../src/install.cc:72 ../src/install.cc:186
+#: ../src/install.cc:72
+#: ../src/install.cc:186
#, c-format
msgid "'%s' not found"
msgstr "'%s' introuvable"
@@ -612,14 +667,16 @@ msgstr "L'ajout de '%s' à la liste des paquets à installer a échoué."
msgid "Failed to add '%s' to the list of packages to be removed."
msgstr "L'ajout de '%s' à la liste des paquets à supprimer a échoué."
-#: ../src/install.cc:378 ../src/install.cc:718
+#: ../src/install.cc:378
+#: ../src/install.cc:718
#, c-format
msgid "'%s' is already installed."
msgstr "'%s' est déjà installé."
# TLABEL partitioning_2002_01_04_0147__180
#. translators: meaning a package %s or provider of capability %s
-#: ../src/install.cc:418 ../src/install.cc:732
+#: ../src/install.cc:418
+#: ../src/install.cc:732
#, c-format
msgid "'%s' is not installed."
msgstr "'%s' n'est pas installé."
@@ -655,7 +712,8 @@ msgid "%s cannot currently be used with %s"
msgstr "%s ne peut pas actuellement être utilisé avec %s"
#. translators: meaning a package %s or provider of capability %s
-#: ../src/install.cc:524 ../src/install.cc:689
+#: ../src/install.cc:524
+#: ../src/install.cc:689
#, c-format
msgid "'%s' not found."
msgstr "'%s' introuvable."
@@ -677,18 +735,25 @@ msgstr "'%s' fournissant '%s' est déjà installé."
#. translators: locks table value
#. importance
-#: ../src/locks.cc:22 ../src/locks.cc:63 ../src/locks.cc:76
+#: ../src/locks.cc:22
+#: ../src/locks.cc:63
+#: ../src/locks.cc:76
msgid "(any)"
msgstr "(aucun)"
#. translators: locks table value
-#: ../src/locks.cc:24 ../src/locks.cc:60 ../src/search.cc:315
+#: ../src/locks.cc:24
+#: ../src/locks.cc:60
+#: ../src/search.cc:315
msgid "(multiple)"
msgstr "(multiple)"
#. translators: catalog (rug's word for repository) (header)
-#: ../src/locks.cc:41 ../src/search.cc:40 ../src/search.cc:267
-#: ../src/update.cc:154 ../src/update.cc:479
+#: ../src/locks.cc:41
+#: ../src/search.cc:40
+#: ../src/search.cc:267
+#: ../src/update.cc:154
+#: ../src/update.cc:479
msgid "Catalog"
msgstr "Catalogue"
@@ -698,8 +763,12 @@ msgid "Importance"
msgstr "Importance"
#. translators: package's repository (header)
-#: ../src/locks.cc:43 ../src/search.cc:64 ../src/search.cc:392
-#: ../src/search.cc:450 ../src/search.cc:539 ../src/update.cc:154
+#: ../src/locks.cc:43
+#: ../src/search.cc:64
+#: ../src/search.cc:392
+#: ../src/search.cc:450
+#: ../src/search.cc:539
+#: ../src/update.cc:154
#: ../src/update.cc:479
msgid "Repository"
msgstr "Dépot"
@@ -810,7 +879,8 @@ msgid "Installed packages with EULAs: %d"
msgstr "Paquets installés avec EULA: %d"
# TLABEL linuxrc_2002_03_29_0036__117
-#: ../src/misc.cc:378 ../src/misc.cc:402
+#: ../src/misc.cc:378
+#: ../src/misc.cc:402
#, c-format
msgid "Source package '%s' not found."
msgstr "Paquet source '%s' introuvable."
@@ -834,17 +904,20 @@ msgstr "Problème lors de l'installation des paquets sources %s-%s :"
msgid "Warning: "
msgstr "Avertissement: "
-#: ../src/output/OutNormal.cc:181 ../src/output/OutNormal.cc:263
+#: ../src/output/OutNormal.cc:181
+#: ../src/output/OutNormal.cc:263
#: ../src/output/OutNormal.cc:268
msgid "error"
msgstr "erreur"
-#: ../src/output/OutNormal.cc:183 ../src/output/OutNormal.cc:265
+#: ../src/output/OutNormal.cc:183
+#: ../src/output/OutNormal.cc:265
#: ../src/output/OutNormal.cc:268
msgid "done"
msgstr "fait"
-#: ../src/output/OutNormal.cc:201 ../src/output/OutNormal.cc:227
+#: ../src/output/OutNormal.cc:201
+#: ../src/output/OutNormal.cc:227
#: ../src/output/OutNormal.cc:256
msgid "Retrieving:"
msgstr "Récupération:"
@@ -893,8 +966,11 @@ msgstr "Recupération des méta-données du dépôt '%s'"
msgid "Problem retrieving files from '%s'."
msgstr "Problème de récupération de fichiers depuis '%s'."
-#: ../src/repos.cc:160 ../src/repos.cc:2871 ../src/solve-commit.cc:623
-#: ../src/solve-commit.cc:652 ../src/solve-commit.cc:686
+#: ../src/repos.cc:160
+#: ../src/repos.cc:2871
+#: ../src/solve-commit.cc:623
+#: ../src/solve-commit.cc:652
+#: ../src/solve-commit.cc:686
msgid "Please see the above error message for a hint."
msgstr "Veuillez consulter le message d'erreur ci-dessus pour une indication."
@@ -963,12 +1039,14 @@ msgstr "Le dépot '%s' n'a pas été trouvé par son alias, numéro, ou URL."
msgid "Use '%s' to get the list of defined repositories."
msgstr "Utilisez '%s' pour obtenir la liste des dépôts définis."
-#: ../src/repos.cc:490 ../src/repos.cc:497
+#: ../src/repos.cc:490
+#: ../src/repos.cc:497
#, c-format
msgid "Ignoring repository '%s' because of '%s' option."
msgstr "Ignore le dépôt '%s' à cause de l'option '%s'."
-#: ../src/repos.cc:527 ../src/repos.cc:563
+#: ../src/repos.cc:527
+#: ../src/repos.cc:563
#, c-format
msgid "Disabling repository '%s' because of the above error."
msgstr "Désactivation du dépôt '%s' à cause de l'erreur ci-dessus."
@@ -996,13 +1074,16 @@ msgstr "Initialisation de la cible"
msgid "Target initialization failed:"
msgstr "Échec de l'initialisation de la cible:"
-#: ../src/repos.cc:635 ../src/Zypper.cc:3430
+#: ../src/repos.cc:635
+#: ../src/Zypper.cc:3430
msgid "Running 'zypper refresh' as root might resolve the problem."
msgstr "Lancer 'zypper refresh' en tant que root peut résoudre le problème."
# TLABEL lan_inetd_2002_01_04_0147__28
#. translators: patch status (installed, uninstalled, needed)
-#: ../src/repos.cc:655 ../src/search.cc:273 ../src/update.cc:155
+#: ../src/repos.cc:655
+#: ../src/search.cc:273
+#: ../src/update.cc:155
msgid "Status"
msgstr "État"
@@ -1017,26 +1098,33 @@ msgstr "Actif"
msgid "Disabled"
msgstr "Désactivé"
-#: ../src/repos.cc:703 ../src/repos.cc:2090 ../src/Zypper.cc:4066
+#: ../src/repos.cc:703
+#: ../src/repos.cc:2090
+#: ../src/Zypper.cc:4066
msgid "Alias"
msgstr "Alias"
#. TranslatorExplanation used as e.g. "Enabled: Yes"
-#: ../src/repos.cc:705 ../src/repos.cc:1346 ../src/repos.cc:2092
+#: ../src/repos.cc:705
+#: ../src/repos.cc:1346
+#: ../src/repos.cc:2092
msgid "Enabled"
msgstr "Activé"
#. translators: 'zypper repos' column - whether autorefresh is enabled for the repository
-#: ../src/repos.cc:707 ../src/repos.cc:2094
+#: ../src/repos.cc:707
+#: ../src/repos.cc:2094
msgid "Refresh"
msgstr "Rafraîchir"
#. translators: repository priority (in zypper repos -p or -d)
-#: ../src/repos.cc:711 ../src/repos.cc:2098
+#: ../src/repos.cc:711
+#: ../src/repos.cc:2098
msgid "Priority"
msgstr "Priorité"
-#: ../src/repos.cc:715 ../src/repos.cc:2101
+#: ../src/repos.cc:715
+#: ../src/repos.cc:2101
msgid "URI"
msgstr "URI"
@@ -1048,26 +1136,32 @@ msgstr "Service"
msgid "No repositories defined. Use the 'zypper addrepo' command to add one or more repositories."
msgstr "Pas de dépots définis. Utilisez la commande 'zypper addrepo' pour ajouter un ou plusieurs dépots."
-#: ../src/repos.cc:837 ../src/repos.cc:909 ../src/repos.cc:1079
+#: ../src/repos.cc:837
+#: ../src/repos.cc:909
+#: ../src/repos.cc:1079
msgid "Error reading repositories:"
msgstr "Erreur lors de la lecture des dépots:"
# TLABEL kinternet_2002_02_20_2255__39
-#: ../src/repos.cc:865 ../src/repos.cc:2223
+#: ../src/repos.cc:865
+#: ../src/repos.cc:2223
#, c-format
msgid "Can't open %s for writing."
msgstr "Impossible d'ouvrir le fichier %s en écriture."
-#: ../src/repos.cc:867 ../src/repos.cc:2225
+#: ../src/repos.cc:867
+#: ../src/repos.cc:2225
msgid "Maybe you do not have write permissions?"
msgstr "Peut-être que vous n'avez pas les permissions d'écriture ?"
-#: ../src/repos.cc:874 ../src/repos.cc:2232
+#: ../src/repos.cc:874
+#: ../src/repos.cc:2232
#, c-format
msgid "Repositories have been successfully exported to %s."
msgstr "Les dépôts ont correctement été éxportés vers %s."
-#: ../src/repos.cc:927 ../src/repos.cc:1097
+#: ../src/repos.cc:927
+#: ../src/repos.cc:1097
msgid "Specified repositories: "
msgstr "Dépôts spécifiés: "
@@ -1121,10 +1215,10 @@ msgid "Cleaning raw metadata cache for '%s'."
msgstr "Nettoyage du cache des méta-données brutes pour '%s'."
#: ../src/repos.cc:1171
-#, fuzzy, c-format
+#, c-format
#| msgid "Cleaning raw metadata cache for '%s'."
msgid "Keeping raw metadata cache for %s '%s'."
-msgstr "Nettoyage du cache des méta-données brutes pour '%s'."
+msgstr "Conservation du cache des méta-données brutes pour %s '%s'."
# TLABEL restore_2002_08_07_0216__60
#. translators: meaning the cached rpm files
@@ -1166,7 +1260,8 @@ msgstr "Tous les dépots ont été nettoyés."
msgid "This is a changeable read-only media (CD/DVD), disabling autorefresh."
msgstr "Ceci est un support amovible en lecture seule (CD/DVD), désactivation de la mise à jour automatique."
-#: ../src/repos.cc:1292 ../src/repos.cc:1553
+#: ../src/repos.cc:1292
+#: ../src/repos.cc:1553
#, c-format
msgid "Repository named '%s' already exists. Please use another alias."
msgstr "Un dépôt nommé '%s' existe déjà. Veuillez utiliser un autre alias."
@@ -1175,7 +1270,8 @@ msgstr "Un dépôt nommé '%s' existe déjà. Veuillez utiliser un autre alias."
msgid "Could not determine the type of the repository. Please check if the defined URIs (see below) point to a valid repository:"
msgstr "Impossible de déterminer le type de dépôt. Veuillez vérfier si les URI définis (voir ci-après) pointent vers un dépôt valide:"
-#: ../src/repos.cc:1310 ../src/Zypper.cc:2486
+#: ../src/repos.cc:1310
+#: ../src/Zypper.cc:2486
msgid "Can't find a valid repository at given location:"
msgstr "Impossible de trouver un dépôt valide à l'endroit indiqué:"
@@ -1264,7 +1360,8 @@ msgstr "Ne peut pas changer l'alias du dépôt '%s'. Le dépôt appartient au se
msgid "Repository '%s' renamed to '%s'."
msgstr "Le dépôt '%s' a été renommé en '%s'."
-#: ../src/repos.cc:1559 ../src/repos.cc:1779
+#: ../src/repos.cc:1559
+#: ../src/repos.cc:1779
msgid "Error while modifying the repository:"
msgstr "Erreur lors de la modification du dépot:"
@@ -1284,13 +1381,13 @@ msgid "Repository '%s' priority has been left unchanged (%d)"
msgstr "La priorité du dépot '%s' a été laissée inchangée (%d)"
#: ../src/repos.cc:1731
-#, fuzzy, c-format
+#, c-format
#| msgid "Repository '%s' has been sucessfully enabled."
msgid "Repository '%s' has been successfully enabled."
msgstr "Le dépot '%s' a été activé avec succès."
#: ../src/repos.cc:1734
-#, fuzzy, c-format
+#, c-format
#| msgid "Repository '%s' has been sucessfully disabled."
msgid "Repository '%s' has been successfully disabled."
msgstr "Le dépot '%s' a été désactivé avec succès."
@@ -1515,12 +1612,14 @@ msgid "Repository '%s' not cached. Caching..."
msgstr "Le dépôt '%s' n'a pas été mis en cache. Mise en cache..."
# TLABEL restore_2002_08_07_0216__60
-#: ../src/repos.cc:2816 ../src/repos.cc:2844
+#: ../src/repos.cc:2816
+#: ../src/repos.cc:2844
#, c-format
msgid "Problem loading data from '%s'"
msgstr "Problème lors du chargement des données depuis '%s'"
-#: ../src/repos.cc:2817 ../src/repos.cc:2850
+#: ../src/repos.cc:2817
+#: ../src/repos.cc:2850
#, c-format
msgid "Resolvables from '%s' not loaded because of error."
msgstr "Les éléments de '%s' n'ont pas pu être chargés en raison d'une erreur."
@@ -1557,24 +1656,35 @@ msgstr ""
"Utilisez rug ou yast2 pour cela."
#. translators: Bundle is a term used in rug. See rug for how to translate it.
-#: ../src/search.cc:42 ../src/search.cc:448 ../src/update.cc:482
+#: ../src/search.cc:42
+#: ../src/search.cc:448
+#: ../src/update.cc:482
msgid "Bundle"
msgstr "Ensemble"
#. translators: package version (header)
-#: ../src/search.cc:46 ../src/search.cc:60 ../src/search.cc:269
-#: ../src/search.cc:390 ../src/search.cc:451 ../src/search.cc:541
-#: ../src/update.cc:155 ../src/update.cc:488
+#: ../src/search.cc:46
+#: ../src/search.cc:60
+#: ../src/search.cc:269
+#: ../src/search.cc:390
+#: ../src/search.cc:451
+#: ../src/search.cc:541
+#: ../src/update.cc:155
+#: ../src/update.cc:488
msgid "Version"
msgstr "Version"
#. translators: package architecture (header)
-#: ../src/search.cc:48 ../src/search.cc:62 ../src/search.cc:451
-#: ../src/search.cc:547 ../src/update.cc:488
+#: ../src/search.cc:48
+#: ../src/search.cc:62
+#: ../src/search.cc:451
+#: ../src/search.cc:547
+#: ../src/update.cc:488
msgid "Arch"
msgstr "Arch"
-#: ../src/search.cc:183 ../src/search.cc:197
+#: ../src/search.cc:183
+#: ../src/search.cc:197
msgid "System Packages"
msgstr "Paquets système"
@@ -1586,7 +1696,9 @@ msgstr "Résumé"
#. translators: patch category (recommended, security)
#. translators: product category (base/addon), the rug term
-#: ../src/search.cc:271 ../src/search.cc:544 ../src/update.cc:155
+#: ../src/search.cc:271
+#: ../src/search.cc:544
+#: ../src/update.cc:155
msgid "Category"
msgstr "Catégorie"
@@ -1598,7 +1710,8 @@ msgstr "Aucun patch nécessaire trouvé."
msgid "No patterns found."
msgstr "Aucun pattern trouvé."
-#: ../src/search.cc:501 ../src/Zypper.cc:3388
+#: ../src/search.cc:501
+#: ../src/Zypper.cc:3388
msgid "No packages found."
msgstr "Aucun paquet trouvé."
@@ -1740,23 +1853,22 @@ msgstr "Les privilèges root sont nécessaires pour réparer les dépendances de
#. The answers should be lower case letters.
#. ! \todo add c for changelog and x for explain (show the dep tree)
#: ../src/solve-commit.cc:473
+#, fuzzy
msgid "y/n/p/v/a/r/m/d/g"
-msgstr ""
+msgstr "o/n/p/v/a/r/m/d/g"
# TLABEL linuxrc_2002_03_29_0036__95
#. translators: help text for 'y' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:478
-#, fuzzy
#| msgid "Accept the summary and proceed with installation/removal of packages."
msgid "Yes, accept the summary and proceed with installation/removal of packages."
-msgstr "Accepte les changements et procède à l'installation/désinstallation des paquets."
+msgstr "Oui, accepter les changements et procèder à l'installation/désinstallation des paquets."
#. translators: help text for 'n' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:480
-#, fuzzy
#| msgid "Cancel the operation."
msgid "No, cancel the operation."
-msgstr "Annule l'opération."
+msgstr "Non, annuler l'opération."
#. translators: help text for 'p' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:482
@@ -1765,35 +1877,40 @@ msgstr "Redémarre le solveur en mode no-force afin de montrer les problèmes de
#. translators: help text for 'v' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:484
+#, fuzzy
msgid "Toggle display of package versions."
-msgstr ""
+msgstr "Bascule vers l'affichage des versions des paquets."
#. translators: help text for 'a' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:486
+#, fuzzy
msgid "Toggle display of package architectures."
-msgstr ""
+msgstr "Bascule vers l'affichage des architectures des paquets."
#. translators: help text for 'r' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:488
#, fuzzy
#| msgid "The following packages will be installed:\n"
msgid "Toggle display of repositories from which the packages will be installed."
-msgstr "Les paquetages suivants seront installés :\n"
+msgstr "Bascule vers l'affichage des dépôts depuis lesquels les paquets seront installés."
#. translators: help text for 'm' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:490
+#, fuzzy
msgid "Toggle display of package vendor names."
-msgstr ""
+msgstr "Bascule vers l'affichage des noms des fournisseurs des paquets."
#. translators: help text for 'd' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:492
+#, fuzzy
msgid "Toggle between showing all details and as few details as possible."
-msgstr ""
+msgstr "Commute entre l'affichage de tous les détails et aussi peu de détails que possible."
#. translators: help text for 'g' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:494
+#, fuzzy
msgid "View the summary in pager."
-msgstr ""
+msgstr "Affiche le sommaire"
#: ../src/solve-commit.cc:587
msgid "committing"
@@ -1804,7 +1921,8 @@ msgid "(dry run)"
msgstr "(test)"
# TLABEL restore_2002_08_07_0216__60
-#: ../src/solve-commit.cc:622 ../src/solve-commit.cc:662
+#: ../src/solve-commit.cc:622
+#: ../src/solve-commit.cc:662
msgid "Problem retrieving the package file from the repository:"
msgstr "Problème de récupération du paquet depuis le dépôt:"
@@ -2056,12 +2174,11 @@ msgstr "Après l'opération, %s sera libéré."
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:628
-#, fuzzy
#| msgid "No packages to update"
msgid "package to upgrade"
msgid_plural "packages to upgrade"
-msgstr[0] "Pas de paquets à mettre à jour"
-msgstr[1] "Pas de paquets à mettre à jour"
+msgstr[0] "paquet à mettre à jour"
+msgstr[1] "paquets à mettre à jour"
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:640
@@ -2081,90 +2198,83 @@ msgstr[1] "Pas de paquets à mettre à jour"
#. translators: this text will be preceded by a number e.g. "5 new"
#: ../src/Summary.cc:654
-#, fuzzy
#| msgid "New"
msgid "new"
msgid_plural "new"
-msgstr[0] "Nouveau"
-msgstr[1] "Nouveau"
+msgstr[0] "nouveau"
+msgstr[1] "nouveaux"
#. translators: this text will be preceded by a number e.g. "5 new to install"
#: ../src/Summary.cc:657
-#, fuzzy
#| msgid "The package is not installed"
msgid "new package to install"
msgid_plural "new packages to install"
-msgstr[0] "Le paquet n'est pas installé"
-msgstr[1] "Le paquet n'est pas installé"
+msgstr[0] "paquet à installer"
+msgstr[1] "paquets à installer"
# TLABEL online_update_2002_01_04_0147__92
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:669
-#, fuzzy
#| msgid "_Force install"
msgid "to reinstall"
msgid_plural "to reinstall"
-msgstr[0] "_Forcer l'installation"
-msgstr[1] "_Forcer l'installation"
+msgstr[0] "à réinstaller"
+msgstr[1] "à réinstaller"
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:672
-#, fuzzy
#| msgid "The package is not installed"
msgid "package to reinstall"
msgid_plural "packages to reinstall"
-msgstr[0] "Le paquet n'est pas installé"
-msgstr[1] "Le paquet n'est pas installé"
+msgstr[0] "paquet à réinstaller"
+msgstr[1] "paquets à réinstaller"
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:684
-#, fuzzy
#| msgid "%s remove ok"
msgid "to remove"
msgid_plural "to remove"
-msgstr[0] "Réussite du retrait de %s"
-msgstr[1] "Réussite du retrait de %s"
+msgstr[0] "à supprimer"
+msgstr[1] "à supprimer"
# TLABEL profile-manager_2002_08_07_0216__9
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:687
-#, fuzzy
#| msgid "Unable to remove ^%s\n"
msgid "package to remove"
msgid_plural "packages to remove"
-msgstr[0] "Impossible de supprimer %s\n"
-msgstr[1] "Impossible de supprimer %s\n"
+msgstr[0] "paquet à supprimer"
+msgstr[1] "paquets à supprimer"
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:699
msgid "to change vendor"
msgid_plural " to change vendor"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "à changer de fournisseur"
+msgstr[1] " à changer de fournisseur"
#. translators: this text will be preceded by a number e.g. "5 packages ..."
#: ../src/Summary.cc:702
-#, fuzzy
#| msgid "The following package is going to change vendor:"
#| msgid_plural "The following packages are going to change vendor:"
msgid "package will change vendor"
msgid_plural "packages will change vendor"
-msgstr[0] "Le paquet suivant va changer de fournisseur:"
-msgstr[1] "Les paquets suivants vont changer de fournisseur:"
+msgstr[0] "paquet va changer de fournisseur"
+msgstr[1] "paquets vont changer de fournisseur"
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:714
msgid "to change arch"
msgid_plural "to change arch"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "à changer d'architecture"
+msgstr[1] "à changer d'architecture"
#. translators: this text will be preceded by a number e.g. "5 packages ..."
#: ../src/Summary.cc:717
msgid "package will change arch"
msgid_plural "packages will change arch"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "paquet va changer d'architecture"
+msgstr[1] "paquets vont changer d'architecture"
#. translators: %d is the number of needed patches
#: ../src/update.cc:67
@@ -2183,7 +2293,8 @@ msgid_plural "%d security patches"
msgstr[0] "%d mise à jour de sécurité"
msgstr[1] "%d mises à jour de sécurité"
-#: ../src/update.cc:177 ../src/utils/misc.cc:136
+#: ../src/update.cc:177
+#: ../src/utils/misc.cc:136
msgid "Needed"
msgstr "Nécessaire"
@@ -2195,7 +2306,8 @@ msgstr ""
"Il ne s'agit que des mises à jour qui affectent l'outil de mise à jour.\n"
"D'autres sont également disponibles.\n"
-#: ../src/update.cc:203 ../src/update.cc:529
+#: ../src/update.cc:203
+#: ../src/update.cc:529
msgid "No updates found."
msgstr "Aucune mise à jour trouvée."
@@ -2253,36 +2365,33 @@ msgid "No update candidate for '%s'."
msgstr "Pas de candidat à la mise à jour pour '%s'."
#: ../src/utils/Augeas.cc:26
-#, fuzzy
#| msgid "Cannot copy the configuration template."
msgid "Cannot initialize configuration file parser."
-msgstr "Impossible de créer le modèle de configuration."
+msgstr "Impossible d'initialiser l'analyseur de fichier de configuration."
-#: ../src/utils/Augeas.cc:43 ../src/utils/Augeas.cc:55
+#: ../src/utils/Augeas.cc:43
+#: ../src/utils/Augeas.cc:55
#, fuzzy
#| msgid "Reading the config file failed"
msgid "Augeas error: setting config file to load failed."
msgstr "Échec de lecture du fichier de configuration"
#: ../src/utils/Augeas.cc:61
-#, fuzzy
#| msgid "Cannot parse the certificate."
msgid "Could not parse the config files."
-msgstr "Impossible d'analyser le certificat."
+msgstr "Impossible d'analyser le fichier de configuration."
# TLABEL linuxrc_2002_03_29_0036__153
# %s is either BOOTP or DHCP
#: ../src/utils/Augeas.cc:95
-#, fuzzy
#| msgid "An idmapd configuration file is required."
msgid "No configuration file exists or could be parsed."
-msgstr "Un fichier de configuration d'idmapd est requis."
+msgstr "Aucun fichier de configuration n'existe ou peut être analiysé."
#: ../src/utils/Augeas.cc:98
-#, fuzzy
#| msgid "Error parsing the CRL."
msgid "Error parsing zypper.conf:"
-msgstr "Erreur lors de l'analyse de la CRL."
+msgstr "Erreur lors de l'analyse de zypper.conf :"
#. For '-garbage' argument, with 'a', 'b', and 'e' as known options,
#. getopt_long reports 'a', 'b', and 'e' as known options.
@@ -2314,8 +2423,10 @@ msgstr "Rédigez un rapport de bogue sur ce sujet."
msgid "See http://en.opensuse.org/Zypper#Troubleshooting for instructions."
msgstr "Consultez http://en.opensuse.org/Zypper#Troubleshooting pour des instructions."
-#: ../src/utils/messages.cc:40 ../src/utils/messages.cc:50
-#: ../src/utils/messages.cc:68 ../src/Zypper.cc:3757
+#: ../src/utils/messages.cc:40
+#: ../src/utils/messages.cc:50
+#: ../src/utils/messages.cc:68
+#: ../src/Zypper.cc:3757
msgid "Usage"
msgstr "Usage"
@@ -2323,7 +2434,9 @@ msgstr "Usage"
msgid "Too many arguments."
msgstr "Trop d'arguments."
-#: ../src/utils/messages.cc:48 ../src/Zypper.cc:2772 ../src/Zypper.cc:3754
+#: ../src/utils/messages.cc:48
+#: ../src/Zypper.cc:2772
+#: ../src/Zypper.cc:3754
msgid "Required argument missing."
msgstr "Argument requis manquant."
@@ -2427,20 +2540,23 @@ msgstr "Utilisez les flèches ou les touches pgUp/pgDown pour faire défiler le
msgid "Use the Enter or Space key to scroll the text by lines or pages."
msgstr "Utilisez les touches Entrée ou Espace pour faire défiler le texte par lignes ou par pages."
-#: ../src/utils/prompt.cc:147 ../src/utils/prompt.cc:275
+#: ../src/utils/prompt.cc:147
+#: ../src/utils/prompt.cc:275
#: ../src/utils/prompt.cc:345
msgid "yes"
msgstr "oui"
-#: ../src/utils/prompt.cc:148 ../src/utils/prompt.cc:275
+#: ../src/utils/prompt.cc:148
+#: ../src/utils/prompt.cc:275
#: ../src/utils/prompt.cc:345
msgid "no"
msgstr "non"
-#: ../src/utils/prompt.cc:171 ../src/utils/prompt.cc:216
+#: ../src/utils/prompt.cc:171
+#: ../src/utils/prompt.cc:216
#, c-format
msgid "Retrying in %u seconds..."
-msgstr ""
+msgstr "Nouvel essai dans %u secondes..."
#. translators: "a/r/i" are the answers to the
#. "Abort, retry, ignore?" prompt
@@ -2448,24 +2564,24 @@ msgstr ""
#. the answers must be separated by slash characters '/' and must
#. correspond to abort/retry/ignore in that order.
#. The answers should be lower case letters.
-#: ../src/utils/prompt.cc:177 ../src/utils/prompt.cc:265
+#: ../src/utils/prompt.cc:177
+#: ../src/utils/prompt.cc:265
msgid "a/r/i"
msgstr "a/r/i"
#: ../src/utils/prompt.cc:228
-#, fuzzy, c-format
+#, c-format
#| msgid "autoselect %s after %u "
msgid "Autoselecting '%s' after %u second."
msgid_plural "Autoselecting '%s' after %u seconds."
-msgstr[0] "sélectionner automatiquement %s après %u "
-msgstr[1] "sélectionner automatiquement %s après %u "
+msgstr[0] "Sélection automatique de '%s' après %u seconde"
+msgstr[1] "Sélection automatique de '%s' après %u secondes"
# TLABEL linuxrc_2002_03_29_0036__110
#: ../src/utils/prompt.cc:247
-#, fuzzy
#| msgid "Preparing installation..."
msgid "Trying again..."
-msgstr "Préparation de l'installation..."
+msgstr "Nouvel essai...."
#: ../src/utils/prompt.cc:338
#, c-format
@@ -2474,10 +2590,10 @@ msgstr "Réponse '%s' invalide."
#. translators: the %s are: 'y', 'yes' (translated), 'n', and 'no' (translated).
#: ../src/utils/prompt.cc:344
-#, fuzzy, c-format
+#, c-format
#| msgid "Enter 'y' for '%s' or 'n' for '%s' if nothing else works for you."
msgid "Enter '%s' for '%s' or '%s' for '%s' if nothing else works for you."
-msgstr "Entrez 'y' pour '%s' ou 'n' pour '%s' si rien d'autre ne fonctionne pour vous."
+msgstr "Entrez '%s' pour '%s' ou '%s' pour '%s' si rien d'autre ne fonctionne pour vous."
#: ../src/utils/prompt.cc:358
#, c-format
@@ -2544,19 +2660,23 @@ msgid ""
"\t--cache-dir, -C <dir>\tUse alternative meta-data cache directory.\n"
"\t--raw-cache-dir <dir>\tUse alternative raw meta-data cache directory.\n"
msgstr ""
-" Options globales:\n"
+" Options globales :\n"
"\t--help, -h\t\tAide.\n"
"\t--version, -V\t\tAffiche le numéro de version.\n"
-"\t--quiet, -q\t\tSupprime la sortie normale, affiche seulement les messages d'erreur.\n"
+"\t--config, -c <fichier>\tUtilise le fichier de config. spécifié au lieu de celui par défaut.\n"
+"\t--quiet, -q\t\tSupprime la sortie normale, affiche seulement les\n"
+"\t\t\tmessages d'erreur.\n"
"\t--verbose, -v\t\tAugmente la verbosité.\n"
-"\t--no-abbrev, -A\t\tN'abbrève pas le texte dans les tableaux.\n"
+"\t--no-abbrev, -A\t\tN'abbrege pas le texte dans les tableaux.\n"
"\t--table-style, -s\tPaginé sous forme de tableau (entier).\n"
"\t--rug-compatible, -r\tActive la compatibilité rug.\n"
-"\t--non-interactive, -n\tNe demande rien, utilise les réponses par défaut automatiquement.\n"
+"\t--non-interactive, -n\tNe demande rien, utilise les réponses par défaut\n"
+"\t\t\tautomatiquement.\n"
"\t--xmlout, -x\t\tBascule vers la sortie XML.\n"
-"\t--reposd-dir, -D <dir>\tUtilise un dossier alternatif des fichiers de définition de dépôt.\n"
-"\t--cache-dir, -C <dir>\tUtilise un dossier cache alternatif des données de meta-données.\n"
-"\t--raw-cache-dir <dir>\tUtilise un dossier cache alternatif de meta-données brutes.\n"
+"\t--reposd-dir, -D <dossier>\tUtilise un dossier alternatif de fichiers\n"
+"\t\t\tde définition de dépôt.\n"
+"\t--cache-dir, -C <dossier>\tUtilise un dossier cache alternatif des données de meta-données.\n"
+"\t--raw-cache-dir <dossier>\tUtilise un dossier cache alternatif de meta-données brutes.\n"
#: ../src/Zypper.cc:172
msgid ""
@@ -2703,7 +2823,6 @@ msgstr ""
"\twhat-provides, wp\tListe les paquets fournissants la capacité spécifiée.\n"
#: ../src/Zypper.cc:248
-#, fuzzy
#| msgid ""
#| " Package Locks:\n"
#| "\taddlock, al\t\tAdd a package lock.\n"
@@ -2716,10 +2835,11 @@ msgid ""
"\tlocks, ll\t\tList current package locks.\n"
"\tcleanlocks, cl\t\tRemove unused locks.\n"
msgstr ""
-" Verrouillage de paquets:\n"
+" Verrouillage de paquets :\n"
"\taddlock, al\t\tAjoute un verrouillage sur un paquet.\n"
"\tremovelock, rl\t\tSupprime un verrouillage sur un paquet.\n"
"\tlocks, ll\t\tListe les verrouillages de paquets actuels.\n"
+"\tcleanlocks, cl\t\tSupprime les verrous inutilisés.\n"
#: ../src/Zypper.cc:255
msgid ""
@@ -2817,7 +2937,7 @@ msgstr "Exception inattendue."
#. TranslatorExplanation the first %s = "package, patch, pattern, product"
#. and the second %s = "package"
#: ../src/Zypper.cc:912
-#, fuzzy, c-format
+#, c-format
#| msgid ""
#| "install (in) [options] <capability|rpm_file_uri> ...\n"
#| "\n"
@@ -2869,22 +2989,32 @@ msgid ""
msgstr ""
"install (in) [options] <capacite|rpm_file_uri> ...\n"
"\n"
-"Installe des paquets répondant aux capacités spécifiées ou des fichiers RPM avec l'endroit spécifié. Une capacité s'écrit NOM[OP<VERSION>], où OP est choisi parmi <, <=, =, >=, >.\n"
-"\n"
-" Options de la commande:\n"
-"-r, --repo <alias|#|URI> Installe les élements uniquement depuis le dépôt spécifié par l'alias.\n"
-"-t, --type <type> Type d'élément (%s).\n"
-" Défaut : %s\n"
-"-n, --name Choisi les éléments par leur nom et non par leur capacité.\n"
-"-C, --capability Choisi les éléments par leur capacité.\n"
-"-f, --force Installe même si l'élement est déjà installé (réinstalle).\n"
-"-l, --auto-agree-with-licenses Accepte automatiquement les licences.\n"
-" Veuillez consulter 'man zypper' pour plus d'information.\n"
-" --debug-solver Génère un cas de test pour le débogage.\n"
-" --no-recommends Ne pas installer les paquets recommandés, seulement les paquets requis.\n"
-"-R, --no-force-resolution Ne pas forcer le solver à trouver une solution, le laisser demander.\n"
-" --force-resolution Force le résolveur à trouver une solution (même agressive).\n"
-"-D, --dry-run Teste l'installation, n'effectue pas l'installation.\n"
+"Installe des paquets répondant aux capacités spécifiées ou des fichiers RPM\n"
+"avec l'endroit spécifié. Une capacité s'écrit NOM[.ARCH][OP<VERSION>], où\n"
+"OP est choisi parmi <, <=, =, >=, >.\n"
+"\n"
+" Options de la commande :\n"
+" --from <alias|#|URI> Sélectionne les paquets depuis le dépôt spécifié.\n"
+"-r, --repo <alias|#|URI> Charge uniquement le dépôt spécifié.\n"
+"-t, --type <type> Type de paquet (%s).\n"
+" Défaut : %s\n"
+"-n, --name Sélectionne les paquets par leur nom et non par leur capacité.\n"
+"-C, --capability Sélectionne les paquets par leur capacité.\n"
+"-f, --force Réinstalle le paquet si la version exacte est\n"
+" disponible dans les dépôts.\n"
+"-l, --auto-agree-with-licenses\n"
+" Accepte automatiquement les licences\n"
+" des tierces parties.\n"
+" Consultez 'man zypper' pour plus d'information.\n"
+" --debug-solver Génère un cas de test pour le débogage.\n"
+" --no-recommends N'installe pas les paquets recommandés, seulement les paquets requis.\n"
+" --recommends Installe aussi les pauets recommandés en plus\n"
+" de ceux requis.\n"
+" --no-force-resolution Ne force pas le résolveur à trouver une solution,\n"
+" le laisser demander.\n"
+"-R, --force-resolution Force le résolveur à trouver une solution\n"
+" (même agressive).\n"
+"-D, --dry-run Teste l'installation, n'effectue pas l'installation.\n"
#. TranslatorExplanation the first %s = "package, patch, pattern, product"
#. and the second %s = "package"
@@ -3208,7 +3338,8 @@ msgstr ""
#. translators: this is just a rug compatiblity command
#. translators: this is just a rug-compatiblity command
-#: ../src/Zypper.cc:1291 ../src/Zypper.cc:2188
+#: ../src/Zypper.cc:1291
+#: ../src/Zypper.cc:2188
msgid ""
"list-resolvables (lr)\n"
"\n"
@@ -3956,6 +4087,13 @@ msgid ""
"-d, --only-duplicates Clean only duplicate locks.\n"
"-e, --only-empty Clean only locks which doesn't lock anything.\n"
msgstr ""
+"cleanlocks (cl)\n"
+"\n"
+"Supprime les verrous sans utilité.\n"
+"\n"
+" Options de commande :\n"
+"-d, --only-duplicates Supprime seulement les verrous dupliqués.\n"
+"-e, --only-empty Supprime seulement les verrous qui ne verrouillent rien.\n"
#: ../src/Zypper.cc:2082
msgid ""
@@ -3987,7 +4125,6 @@ msgstr ""
"Cette commande n'a pas d'autre option.\n"
#: ../src/Zypper.cc:2120
-#, fuzzy
#| msgid ""
#| "licenses\n"
#| "\n"
@@ -4093,7 +4230,8 @@ msgstr ""
"
Cette commande a une implementation préliminaire qui renvoie toujours 0.\n"
"
Elle est fournie pour la compatibilité avec rug.\n"
-#: ../src/Zypper.cc:2273 ../src/Zypper.cc:4052
+#: ../src/Zypper.cc:2273
+#: ../src/Zypper.cc:4052
msgid "Unexpected program flow."
msgstr "Flot de programme inattendu."
@@ -4140,7 +4278,9 @@ msgstr ""
msgid "Root privileges are required for refreshing services."
msgstr "Les privilèges root sont requis pour rafraîchir les services."
-#: ../src/Zypper.cc:2418 ../src/Zypper.cc:2538 ../src/Zypper.cc:2765
+#: ../src/Zypper.cc:2418
+#: ../src/Zypper.cc:2538
+#: ../src/Zypper.cc:2765
msgid "Root privileges are required for modifying system services."
msgstr "Les privilèges root sont requis pour modifier les services du système."
@@ -4162,7 +4302,8 @@ msgstr "Regardez '%s' ou '%s' pour avoir une liste des types de services connus.
#. followed by ms command help text which will explain it
#. translators: aggregate option is e.g. "--all". This message will be
#. followed by mr command help text which will explain it
-#: ../src/Zypper.cc:2550 ../src/Zypper.cc:2919
+#: ../src/Zypper.cc:2550
+#: ../src/Zypper.cc:2919
msgid "Alias or an aggregate option is required."
msgstr "L'alias ou une option globale est nécessaire."
@@ -4171,12 +4312,15 @@ msgstr "L'alias ou une option globale est nécessaire."
msgid "Service '%s' not found."
msgstr "Service '%s' introuvable."
-#: ../src/Zypper.cc:2620 ../src/Zypper.cc:2764 ../src/Zypper.cc:2850
+#: ../src/Zypper.cc:2620
+#: ../src/Zypper.cc:2764
+#: ../src/Zypper.cc:2850
#: ../src/Zypper.cc:2906
msgid "Root privileges are required for modifying system repositories."
msgstr "Vous devez avoir les privilèges root pour modifier les dépots du système."
-#: ../src/Zypper.cc:2669 ../src/Zypper.cc:3032
+#: ../src/Zypper.cc:2669
+#: ../src/Zypper.cc:3032
msgid "Too few arguments."
msgstr "Pas assez d'arguments."
@@ -4290,7 +4434,8 @@ msgstr "Cache local des fichiers RPM"
msgid "No valid arguments specified."
msgstr "Aucun argument valide spécifié."
-#: ../src/Zypper.cc:3186 ../src/Zypper.cc:3265
+#: ../src/Zypper.cc:3186
+#: ../src/Zypper.cc:3265
msgid "Warning: No repositories defined. Operating only with the installed resolvables. Nothing can be installed."
msgstr "Avertissement : Pas de dépôt défini. Ne fonctionne qu'avec les éléments installés. Rien ne peut être installé."
@@ -4298,8 +4443,11 @@ msgstr "Avertissement : Pas de dépôt défini. Ne fonctionne qu'avec les élém
msgid "Source package name is a required argument."
msgstr "Le nom du paquet source est un argument requis."
-#: ../src/Zypper.cc:3322 ../src/Zypper.cc:3582 ../src/Zypper.cc:3662
-#: ../src/Zypper.cc:3782 ../src/Zypper.cc:3862
+#: ../src/Zypper.cc:3322
+#: ../src/Zypper.cc:3582
+#: ../src/Zypper.cc:3662
+#: ../src/Zypper.cc:3782
+#: ../src/Zypper.cc:3862
#, c-format
msgid "Unknown package type '%s'."
msgstr "Type de paquet '%s' inconnu."
@@ -4313,7 +4461,8 @@ msgid "See the above message for a hint."
msgstr "Voir le message ci-dessus pour une indication."
#. translators: Running as 'rug', cannot use 'best-effort' option.
-#: ../src/Zypper.cc:3601 ../src/Zypper.cc:3680
+#: ../src/Zypper.cc:3601
+#: ../src/Zypper.cc:3680
#, c-format
msgid "Running as '%s', cannot use '%s' option."
msgstr "Exécution comme '%s', ne peut pas utiliser l'option '%s'."
@@ -4327,12 +4476,13 @@ msgid "Root privileges are required for performing a distribution upgrade."
msgstr "Les privilèges root sont nécessaires pour effectuer la mise à jour de la distribution vers la nouvelle version."
#: ../src/Zypper.cc:3794
-#, fuzzy, c-format
+#, c-format
#| msgid "'%1' does not exist."
msgid "Type '%s' does not support %s."
-msgstr "'%1' n'existe pas."
+msgstr "Le type '%s' ne supporte pas %s."
-#: ../src/Zypper.cc:3824 ../src/Zypper.cc:3885
+#: ../src/Zypper.cc:3824
+#: ../src/Zypper.cc:3885
msgid "Root privileges are required for adding of package locks."
msgstr "Les privilèges root sont nécessaires pour ajouter des verrouillages sur les paquets."
@@ -4373,114 +4523,38 @@ msgstr "Type d'élément"
# internal key used: Cancel
#~ msgid "abort"
#~ msgstr "abandonner"
-
#~ msgid "retry"
#~ msgstr "réessayer"
-
# TLABEL security_2002_01_04_0147__46
#~ msgid "ignore"
#~ msgstr "ignorer"
-
#~ msgid "Abort, retry, ignore?\n"
#~ msgstr "Abandonner, réessayer, ignorer?\n"
-
#~ msgid " --from <alias|#|URI> Select packages only from specified repository.\n"
#~ msgstr " --from <alias|#|URI> Sélection des paquets uniquement depuis le dépôt spécifié.\n"
-
#~ msgid "Root privileges are required for modifying services."
#~ msgstr "Les privilèges root sont requis pour modifier les services."
-
# power-off message
#~ msgid "Do you want to trust the key?"
#~ msgstr "Voulez-vous faire confiance à la clé ?"
-
#~ msgid "n/t/i"
#~ msgstr "n/t/i"
-
#~ msgid "Running as 'rug', can't do 'best-effort' approach to update."
#~ msgstr "Exécution comme 'rug', ne peut pas effectuer une approche 'best-effort' pour la mise à jour."
-
#~ msgid "Automatically trusting key id %s, %s, fingerprint %s"
#~ msgstr "Faire automatiquement confiance à la clé id %s, %s, empreinte digitale %s"
-
# TLABEL sound_2002_01_04_0147__0
#~ msgid "Do you want to trust key id %s, %s, fingerprint %s"
#~ msgstr "Voulez-vous faire confiance à l'ID de clé %s, %s, empreinte digitale %s"
-
#, fuzzy
#~ msgid "Specified type is not a valid service type:"
#~ msgstr "Le type de dépôt spécifié n'est pas valide :"
-
#~ msgid "Downloading delta"
#~ msgstr "Téléchargement du delta"
-
#~ msgid "Long Name: "
#~ msgstr "Nom long: "
-
#~ msgid "Downloading:"
#~ msgstr "Téléchargement:"
-
#~ msgid "Downloading repository '%s' metadata"
#~ msgstr "Téléchargement des meta-données du dépôt '%s'"
-# TLABEL restore_2002_08_07_0216__60
-#~ msgid "Error downloading metadata for '%s':"
-#~ msgstr "Erreur de téléchargement des méta-données pour '%s':"
-
-#~ msgid "script"
-#~ msgid_plural "scripts"
-#~ msgstr[0] "script"
-#~ msgstr[1] "scripts"
-
-#~ msgid "message"
-#~ msgid_plural "messages"
-#~ msgstr[0] "message"
-#~ msgstr[1] "messages"
-
-#~ msgid "atom"
-#~ msgid_plural "atoms"
-#~ msgstr[0] "atom"
-#~ msgstr[1] "atoms"
-
-#~ msgid "'%s' option is deprecated and will be dropped soon."
-#~ msgstr "L'option '%s' est obsolète et va être abandonnée prochainement."
-
-#~ msgid "No resolvables found."
-#~ msgstr "Aucun élément trouvé."
-
-#~ msgid "The updater could not access the package manager engine. This usually happens when you have another application (like YaST) using it at the same time. Please close the other applications and check again for updates."
-#~ msgstr "L'outil de mise à jour n'a pas pu accéder au moteur du gestionnaire de paquets. Cela se produit généralement lorsqu'une autre application (telle que YaST) l'utilise au même moment. Fermez les autres applications et relancez la vérification des mises à jour."
-
-#~ msgid ""
-#~ "Couldn't restore repository.\n"
-#~ "Detail: %s"
-#~ msgstr ""
-#~ "Impossible de restaurer le dépot.\n"
-#~ "Détail: %s"
-
-#~ msgid "There are no update repositories defined. Please add one or more update repositories in order to be notified of updates."
-#~ msgstr "Aucune dépot de mise à jour n'est défini. Veuillez ajoutez un ou plusieurs dépot(s) de mise à jour pour être averti des mises à jour."
-
-#~ msgid ""
-#~ "xml-updates\n"
-#~ "\n"
-#~ "Show updates and patches in xml format. This command is deprecated and will eventually be dropped in favor of '%s'.\n"
-#~ "\n"
-#~ " Command options:\n"
-#~ "-r, --repo <alias|#|URI> Work only with updates from the specified repository.\n"
-#~ msgstr ""
-#~ "xml-updates\n"
-#~ "\n"
-#~ "Affiche les mises à jour et les correctifs au format xml. Cette commande est obsolète et va éventuellement être abandonnée au profit de '%s'.\n"
-#~ "\n"
-#~ " Options de la commande:\n"
-#~ "-r, --repo <alias|#|URI> Fonctionne uniquement avec les mises à jour du dépôt spécifié.\n"
-
-#~ msgid "A ZYpp transaction is already in progress. This means, there is another application using the libzypp library for package management running. All such applications must be closed before using this command."
-#~ msgstr "Une transaction ZYpp est déjà en cours. Cela signifie qu'il y une autre application, utilisant la librairie libzypp pour la gestion des paquets, qui est en cours d'utilisation. Toutes ces applications doivent être fermées avant l'utilisation de cette commande."
-
-#~ msgid "Only the first command argument considered. Zypper currently does not support versioned locks."
-#~ msgstr "Seul le premier argument de commande est considéré. Zypper ne supporte pas actuellement les verrouillages versionés."
-
-#~ msgid "%s %s license:"
-#~ msgstr "licence %s %s:"
diff --git a/po/ja.po b/po/ja.po
index 518fc3f..8439948 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -208,7 +208,6 @@ msgstr "メディア [%s] #%d を挿入し 'y' を入力して続行するか、
#. Translate the a/r/i part exactly as you did the a/r/i string.
#. the 'u' reply means 'Change URI'.
#: ../src/callbacks/media.h:106
-#| msgid "a/r/i"
msgid "a/r/i/u"
msgstr "a/r/i/u"
@@ -240,7 +239,6 @@ msgstr "中止(A), 再試行(R), 無視(I)?"
#. translators: this is a prompt label, will appear as "New URI: "
#: ../src/callbacks/media.h:130
-#| msgid "URI"
msgid "New URI"
msgstr "新しい URI"
@@ -327,7 +325,6 @@ msgstr "不明なコマンド '%s'"
#: ../src/Config.cc:73
#, c-format
-#| msgid "Unknown command option"
msgid "Unknown configuration option '%s'"
msgstr "不明な設定オプション '%s'"
@@ -412,7 +409,6 @@ msgid "Requires:"
msgstr "必要:"
#: ../src/info.cc:144
-#| msgid "Recommends"
msgid "Recommends:"
msgstr "推奨:"
@@ -500,7 +496,6 @@ msgid "Provides:"
msgstr "提供:"
#: ../src/info.cc:276
-#| msgid "Conflicts"
msgid "Conflicts:"
msgstr "競合:"
@@ -1090,7 +1085,6 @@ msgstr "'%s' に対する未加工のメタデータのキャッシュを削除
#: ../src/repos.cc:1171
#, c-format
-#| msgid "Cleaning raw metadata cache for '%s'."
msgid "Keeping raw metadata cache for %s '%s'."
msgstr "%s '%s' に対する未加工のメタデータのキャッシュを保持しています。"
@@ -1249,13 +1243,11 @@ msgstr "リポジトリ '%s' の優先順位を変更しませんでした (%d)"
#: ../src/repos.cc:1731
#, c-format
-#| msgid "Repository '%s' has been sucessfully enabled."
msgid "Repository '%s' has been successfully enabled."
msgstr "リポジトリ '%s' を有効に設定しました。"
#: ../src/repos.cc:1734
#, c-format
-#| msgid "Repository '%s' has been sucessfully disabled."
msgid "Repository '%s' has been successfully disabled."
msgstr "リポジトリ '%s' を無効に設定しました。"
@@ -1698,13 +1690,11 @@ msgstr "y/n/p/v/a/r/m/d/g"
#. translators: help text for 'y' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:478
-#| msgid "Accept the summary and proceed with installation/removal of packages."
msgid "Yes, accept the summary and proceed with installation/removal of packages."
msgstr "はい、概要に表示されている内容を受け入れ、パッケージのインストール/削除を行なう"
#. translators: help text for 'n' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:480
-#| msgid "Cancel the operation."
msgid "No, cancel the operation."
msgstr "いいえ、操作をキャンセルする"
@@ -1725,7 +1715,6 @@ msgstr "パッケージアーキテクチャの表示を切り替える"
#. translators: help text for 'r' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:488
-#| msgid "The following packages will be installed:\n"
msgid "Toggle display of repositories from which the packages will be installed."
msgstr "パッケージのインストール元リポジトリの表示を切り替える"
@@ -1972,7 +1961,6 @@ msgstr "この操作を行なうと、%s の容量が開放されます。"
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:628
-#| msgid "No packages to update"
msgid "package to upgrade"
msgid_plural "packages to upgrade"
msgstr[0] "個のアップグレードすべきパッケージ"
@@ -1985,49 +1973,42 @@ msgstr[0] "個のダウングレード"
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:643
-#| msgid "The package download failed"
msgid "package to downgrade"
msgid_plural "packages to downgrade"
msgstr[0] "個のダウングレードすべきパッケージ"
#. translators: this text will be preceded by a number e.g. "5 new"
#: ../src/Summary.cc:654
-#| msgid "New"
msgid "new"
msgid_plural "new"
msgstr[0] "新規"
#. translators: this text will be preceded by a number e.g. "5 new to install"
#: ../src/Summary.cc:657
-#| msgid "The package is not installed"
msgid "new package to install"
msgid_plural "new packages to install"
msgstr[0] "個のインストールすべきパッケージ"
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:669
-#| msgid "_Force install"
msgid "to reinstall"
msgid_plural "to reinstall"
msgstr[0] "個の再インストール"
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:672
-#| msgid "Package installer"
msgid "package to reinstall"
msgid_plural "packages to reinstall"
msgstr[0] "個の再インストールすべきパッケージ"
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:684
-#| msgid "%s remove ok"
msgid "to remove"
msgid_plural "to remove"
msgstr[0] "個の削除"
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:687
-#| msgid "Unable to remove ^%s\n"
msgid "package to remove"
msgid_plural "packages to remove"
msgstr[0] "個の削除すべきパッケージ"
@@ -2040,8 +2021,6 @@ msgstr[0] "個の製造元変更"
#. translators: this text will be preceded by a number e.g. "5 packages ..."
#: ../src/Summary.cc:702
-#| msgid "The following package is going to change vendor:"
-#| msgid_plural "The following packages are going to change vendor:"
msgid "package will change vendor"
msgid_plural "packages will change vendor"
msgstr[0] "個の製造元を変更すべきパッケージ"
@@ -2141,28 +2120,23 @@ msgid "No update candidate for '%s'."
msgstr "'%s' に対する更新候補がありません"
#: ../src/utils/Augeas.cc:26
-#| msgid "Cannot copy the configuration template."
msgid "Cannot initialize configuration file parser."
msgstr "設定ファイル処理システムを準備することができません。"
#: ../src/utils/Augeas.cc:43 ../src/utils/Augeas.cc:55
-#| msgid "Reading the config file failed"
msgid "Augeas error: setting config file to load failed."
msgstr "Augeas エラー: 読み込むべき設定ファイルの設定に失敗しました。"
#: ../src/utils/Augeas.cc:61
-#| msgid "Cannot parse the certificate."
msgid "Could not parse the config files."
msgstr "設定ファイルを処理することができませんでした。"
# %s is either BOOTP or DHCP
#: ../src/utils/Augeas.cc:95
-#| msgid "An idmapd configuration file is required."
msgid "No configuration file exists or could be parsed."
msgstr "設定ファイルが存在しないか、処理できません。"
#: ../src/utils/Augeas.cc:98
-#| msgid "Error parsing the CRL."
msgid "Error parsing zypper.conf:"
msgstr "zypper.conf の処理時にエラー:"
@@ -2327,13 +2301,11 @@ msgstr "a/r/i"
#: ../src/utils/prompt.cc:228
#, c-format
-#| msgid "autoselect %s after %u "
msgid "Autoselecting '%s' after %u second."
msgid_plural "Autoselecting '%s' after %u seconds."
msgstr[0] "%2$u 秒後に '%1$s' を自動選択します。"
#: ../src/utils/prompt.cc:247
-#| msgid "Preparing installation..."
msgid "Trying again..."
msgstr "再試行しています..."
@@ -2345,7 +2317,6 @@ msgstr "回答 '%s' が正しくありません。"
#. translators: the %s are: 'y', 'yes' (translated), 'n', and 'no' (translated).
#: ../src/utils/prompt.cc:344
#, c-format
-#| msgid "Enter 'y' for '%s' or 'n' for '%s' if nothing else works for you."
msgid "Enter '%s' for '%s' or '%s' for '%s' if nothing else works for you."
msgstr "うまく動作しない場合、 '%2$s' に対しては '%1$s' を、 '%4$s' に対しては '%3$s' を入力してください。"
@@ -2377,23 +2348,6 @@ msgid "Error"
msgstr "エラー"
#: ../src/Zypper.cc:153
-#| msgid ""
-#| " Global Options:\n"
-#| "\t--help, -h\t\tHelp.\n"
-#| "\t--version, -V\t\tOutput the version number.\n"
-#| "\t--quiet, -q\t\tSuppress normal output, print only error\n"
-#| "\t\t\t\tmessages.\n"
-#| "\t--verbose, -v\t\tIncrease verbosity.\n"
-#| "\t--no-abbrev, -A\t\tDo not abbreviate text in tables.\n"
-#| "\t--table-style, -s\tTable style (integer).\n"
-#| "\t--rug-compatible, -r\tTurn on rug compatibility.\n"
-#| "\t--non-interactive, -n\tDo not ask anything, use default answers\n"
-#| "\t\t\t\tautomatically.\n"
-#| "\t--xmlout, -x\t\tSwitch to XML output.\n"
-#| "\t--reposd-dir, -D <dir>\tUse alternative repository definition files\n"
-#| "\t\t\t\tdirectory.\n"
-#| "\t--cache-dir, -C <dir>\tUse alternative meta-data cache directory.\n"
-#| "\t--raw-cache-dir <dir>\tUse alternative raw meta-data cache directory.\n"
msgid ""
" Global Options:\n"
"\t--help, -h\t\tHelp.\n"
@@ -2573,11 +2527,6 @@ msgstr ""
"\twhat-provides, wp\t指定した能力設定が提供するパッケージを表示する\n"
#: ../src/Zypper.cc:248
-#| msgid ""
-#| " Package Locks:\n"
-#| "\taddlock, al\t\tAdd a package lock.\n"
-#| "\tremovelock, rl\t\tRemove a package lock.\n"
-#| "\tlocks, ll\t\tList current package locks.\n"
msgid ""
" Package Locks:\n"
"\taddlock, al\t\tAdd a package lock.\n"
@@ -2687,25 +2636,6 @@ msgstr "予期しない例外が発生しました。"
#. and the second %s = "package"
#: ../src/Zypper.cc:912
#, c-format
-#| msgid ""
-#| "install (in) [options] <capability|rpm_file_uri> ...\n"
-#| "\n"
-#| "Install packages with specified capabilities or RPM files with specified location. A capability is NAME[OP<VERSION>], where OP is one of <, <=, =, >=, >.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-r, --repo <alias|#|URI> Install packages only from the specified repository.\n"
-#| "-t, --type <type> Type of package (%s).\n"
-#| " Default: %s.\n"
-#| "-n, --name Select packages by plain name, not by capability.\n"
-#| "-C, --capability Select packages by capability.\n"
-#| "-f, --force Install even if the item is already installed (reinstall).\n"
-#| "-l, --auto-agree-with-licenses Automatically say 'yes' to third party license confirmation prompt.\n"
-#| " See 'man zypper' for more details.\n"
-#| " --debug-solver Create solver test case for debugging.\n"
-#| " --no-recommends Do not install recommended packages, only required.\n"
-#| "-R, --no-force-resolution Do not force the solver to find solution, let it ask.\n"
-#| " --force-resolution Force the solver to find a solution (even an agressive).\n"
-#| "-D, --dry-run Test the installation, do not actually install.\n"
msgid ""
"install (in) [options] <capability|rpm_file_uri> ...\n"
"\n"
@@ -2770,21 +2700,6 @@ msgstr ""
#. and the second %s = "package"
#: ../src/Zypper.cc:969
#, c-format
-#| msgid ""
-#| "remove (rm) [options] <capability> ...\n"
-#| "\n"
-#| "Remove packages with specified capabilities. A capability is NAME[OP<VERSION>], where OP is one of <, <=, =, >=, >.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-r, --repo <alias|#|URI> Operate only with packages from the specified repository.\n"
-#| "-t, --type <type> Type of package (%s).\n"
-#| " Default: %s.\n"
-#| "-n, --name Select packages by plain name, not by capability.\n"
-#| "-C, --capability Select packages by capability.\n"
-#| " --debug-solver Create solver test case for debugging.\n"
-#| "-R, --no-force-resolution Do not force the solver to find solution, let it ask.\n"
-#| " --force-resolution Force the solver to find a solution (even an agressive).\n"
-#| "-D, --dry-run Test the removal, do not actually remove.\n"
msgid ""
"remove (rm) [options] <capability> ...\n"
"\n"
@@ -2841,15 +2756,6 @@ msgstr ""
"-r, --repo <alias|#|URI> 指定したリポジトリからのパッケージのみをインストールする\n"
#: ../src/Zypper.cc:1028
-#| msgid ""
-#| "verify (ve) [options]\n"
-#| "\n"
-#| "Check whether dependencies of installed packages are satisfied and repair eventual dependency problems.\n"
-#| "\n"
-#| " Command options:\n"
-#| " --no-recommends Do not install recommended packages, only required.\n"
-#| "-D, --dry-run Test the repair, do not actually do anything to the system.\n"
-#| "-r, --repo <alias|#|URI> Use only specified repositories to install missing packages.\n"
msgid ""
"verify (ve) [options]\n"
"\n"
@@ -2898,15 +2804,6 @@ msgstr ""
#. translators: the %s = "ris" (the only service type currently supported)
#: ../src/Zypper.cc:1081
#, c-format
-#| msgid ""
-#| "addservice (as) [options] <URI> <alias>\n"
-#| "\n"
-#| "Add a repository index service to the system.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-t, --type <TYPE> Type of the service (%s).\n"
-#| "-d, --disable Add the service as disabled.\n"
-#| "-n, --name Specify descriptive name for the service.\n"
msgid ""
"addservice (as) [options] <URI> <alias>\n"
"\n"
@@ -3045,22 +2942,6 @@ msgstr ""
#. translators: the %s = "yast2, rpm-md, plaindir"
#: ../src/Zypper.cc:1242
#, c-format
-#| msgid ""
-#| "addrepo (ar) [options] <URI> <alias>\n"
-#| "addrepo (ar) [options] <FILE.repo>\n"
-#| "\n"
-#| "Add a repository to the sytem. The repository can be specified by its URI or can be read from specified .repo file (even remote).\n"
-#| "\n"
-#| " Command options:\n"
-#| "-r, --repo <FILE.repo> Just another means to specify a .repo file to read.\n"
-#| "-t, --type <TYPE> Type of repository (%s).\n"
-#| "-d, --disable Add the repository as disabled.\n"
-#| "-c, --check Probe URI.\n"
-#| "-C, --no-check Don't probe URI, probe later during refresh.\n"
-#| "-n, --name Specify descriptive name for the repository.\n"
-#| "-k, --keep-packages Enable RPM files caching.\n"
-#| "-K, --no-keep-packages Disable RPM files caching.\n"
-#| "-f, --refresh Enable autorefresh of the repository.\n"
msgid ""
"addrepo (ar) [options] <URI> <alias>\n"
"addrepo (ar) [options] <file.repo>\n"
@@ -3177,27 +3058,6 @@ msgstr ""
#. and "--all, --remote, --local, --medium-type"
#: ../src/Zypper.cc:1379
#, c-format
-#| msgid ""
-#| "modifyrepo (mr) <options> <alias|#|URI>\n"
-#| "modifyrepo (mr) <options> <%s>\n"
-#| "\n"
-#| "Modify properties of repositories specified by alias, number, or URI, or by the\n"
-#| "'%s' aggregate options.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-d, --disable Disable the repository (but don't remove it).\n"
-#| "-e, --enable Enable a disabled repository.\n"
-#| "-r, --refresh Enable auto-refresh of the repository.\n"
-#| "-R, --no-refresh Disable auto-refresh of the repository.\n"
-#| "-n, --name Set a descriptive name for the repository.\n"
-#| "-p, --priority <1-99> Set priority of the repository.\n"
-#| "-k, --keep-packages Enable RPM files caching.\n"
-#| "-K, --no-keep-packages Disable RPM files caching.\n"
-#| "\n"
-#| "-a, --all Apply changes to all repositories.\n"
-#| "-l, --local Apply changes to all local repositories.\n"
-#| "-t, --remote Apply changes to all remote repositories.\n"
-#| "-m, --medium-type <type> Apply changes to repositories of specified type.\n"
msgid ""
"modifyrepo (mr) <options> <alias|#|URI> ...\n"
"modifyrepo (mr) <options> <%s>\n"
@@ -3269,16 +3129,6 @@ msgstr ""
"-s, --services リポジトリを更新する前にサービスも更新する\n"
#: ../src/Zypper.cc:1448
-#| msgid ""
-#| "clean [alias|#|URI] ...\n"
-#| "\n"
-#| "Clean local caches.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-r, --repo <alias|#|URI> Clean only specified repositories.\n"
-#| "-m, --metadata Clean metadata cache.\n"
-#| "-M, --raw-metadata Clean raw metadata cache.\n"
-#| "-a, --all Clean both metadata and package caches.\n"
msgid ""
"clean (cc) [alias|#|URI] ...\n"
"\n"
@@ -3338,28 +3188,6 @@ msgstr ""
#. and the second %s = "patch"
#: ../src/Zypper.cc:1529
#, c-format
-#| msgid ""
-#| "update (up) [options] ...\n"
-#| "\n"
-#| "Update all or specified installed packages with newer versions, if possible.\n"
-#| "\n"
-#| " Command options:\n"
-#| "\n"
-#| "-t, --type <type> Type of package (%s).\n"
-#| " Default: %s.\n"
-#| "-r, --repo <alias|#|URI> Limit updates to the specified repository.\n"
-#| " --skip-interactive Skip interactive updates.\n"
-#| "-l, --auto-agree-with-licenses Automatically say 'yes' to third party license\n"
-#| " confirmation prompt.\n"
-#| " See man zypper for more details.\n"
-#| " --best-effort Do a 'best effort' approach to update. Updates\n"
-#| " to a lower than the latest version are\n"
-#| " also acceptable.\n"
-#| " --debug-solver Create solver test case for debugging.\n"
-#| " --no-recommends Do not install recommended packages, only required.\n"
-#| "-R, --no-force-resolution Do not force the solver to find solution, let it ask.\n"
-#| " --force-resolution Force the solver to find a solution (even an agressive).\n"
-#| "-D, --dry-run Test the update, do not actually update.\n"
msgid ""
"update (up) [options] ...\n"
"\n"
@@ -3414,20 +3242,6 @@ msgstr ""
"-D, --dry-run 更新をテストするだけで実際には何もしない\n"
#: ../src/Zypper.cc:1574
-#| msgid ""
-#| "patch [options]\n"
-#| "\n"
-#| "Install all available needed patches.\n"
-#| "\n"
-#| " Command options:\n"
-#| "\n"
-#| "-r, --repo <alias|#|URI> Work only with specified repository.\n"
-#| " --skip-interactive Skip interactive patches.\n"
-#| "-l, --auto-agree-with-licenses Automatically say 'yes' to third party license\n"
-#| " confirmation prompt.\n"
-#| " See man zypper for more details.\n"
-#| " --debug-solver Create solver test case for debugging.\n"
-#| "-D, --dry-run Test the update, do not actually update.\n"
msgid ""
"patch [options]\n"
"\n"
@@ -3483,19 +3297,6 @@ msgstr ""
"-r, --repo <alias|#|URI> 指定したリポジトリからの修正のみを表示する\n"
#: ../src/Zypper.cc:1630
-#| msgid ""
-#| "dist-upgrade (dup) [options]\n"
-#| "\n"
-#| "Perform a distribution upgrade.\n"
-#| "\n"
-#| " Command options:\n"
-#| "\n"
-#| "-r, --repo <alias|#|URI> Limit the upgrade to the specified repository.\n"
-#| " --no-recommends Do not install recommended packages, only required.\n"
-#| "-l, --auto-agree-with-licenses Automatically say 'yes' to third party license confirmation prompt.\n"
-#| " See man zypper for more details.\n"
-#| " --debug-solver Create solver test case for debugging\n"
-#| "-D, --dry-run Test the upgrade, do not actually upgrade\n"
msgid ""
"dist-upgrade (dup) [options]\n"
"\n"
@@ -3688,15 +3489,6 @@ msgstr ""
#: ../src/Zypper.cc:1843
#, c-format
-#| msgid ""
-#| "info (if) [options] <name> ...\n"
-#| "\n"
-#| "Show detailed information for specified packages.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-r, --repo <alias|#|URI> Work only with the specified repository.\n"
-#| "-t, --type <type> Type of package (%s).\n"
-#| " Default: %s."
msgid ""
"info (if) [options] <name> ...\n"
"\n"
@@ -3716,8 +3508,7 @@ msgstr ""
" コマンドオプション:\n"
"-r, --repo <alias|#|URI> 指定したリポジトリからのもののみに対して作業を行なう\n"
"-t, --type <type> パッケージの種類 (%s) \n"
-" 既定: %s"
-" --requires 必要とするパッケージと事前に必要とするパッケージも表示する\n"
+" 既定: %s --requires 必要とするパッケージと事前に必要とするパッケージも表示する\n"
" --recommends 推奨パッケージも表示する"
#: ../src/Zypper.cc:1868
@@ -3894,12 +3685,6 @@ msgstr ""
"-m, --match リリース番号が存在しないときはどんなリリースでもかまわないものとする\n"
#: ../src/Zypper.cc:2120
-#| msgid ""
-#| "licenses\n"
-#| "\n"
-#| "Report Licenses and EULA of currently installed software packages.\n"
-#| "\n"
-#| "This command has no additional options.\n"
msgid ""
"licenses\n"
"\n"
@@ -4207,7 +3992,6 @@ msgstr "ディストリビューションのアップグレード処理を行な
#: ../src/Zypper.cc:3794
#, c-format
-#| msgid "'%1' does not exist."
msgid "Type '%s' does not support %s."
msgstr "種類 '%s' は %s に対応していません。"
@@ -4245,4 +4029,3 @@ msgstr "説明"
#: ../src/Zypper.cc:4129
msgid "Resolvable Type"
msgstr "解決方法の種類"
-
diff --git a/po/nl.po b/po/nl.po
index b47271f..6f6998b 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -5,14 +5,13 @@
# This file is distributed under the same license as @PACKAGE@ package. FIRST
#
# Rinse de Vries <rinsedevries(a)kde.nl>, 2007, 2008.
-# Freek de Kruijf <f.de.kruijf(a)hetnet.nl>, 2008.
-# Freek de Kruijf <freek(a)opensuse.org>, 2008.
+# Freek de Kruijf <freek(a)opensuse.org>, 2008, 2009.
msgid ""
msgstr ""
"Project-Id-Version: zypper.nl\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-06-08 16:44+0200\n"
-"PO-Revision-Date: 2008-12-12 09:45+0100\n"
+"PO-Revision-Date: 2009-06-22 13:32+0200\n"
"Last-Translator: Freek de Kruijf <freek(a)opensuse.org>\n"
"Language-Team: Dutch <Yast-nl-l10n(a)lists.sf.kovoks.nl>\n"
"MIME-Version: 1.0\n"
@@ -208,30 +207,28 @@ msgstr "Plaats medium [%s] # %d en typ 'y' om verder te gaan of 'n' om de operat
#. Translate the a/r/i part exactly as you did the a/r/i string.
#. the 'u' reply means 'Change URI'.
#: ../src/callbacks/media.h:106
-#, fuzzy
-#| msgid "a/r/i"
msgid "a/r/i/u"
-msgstr "a/o/n"
+msgstr "a/o/n/u"
#. help text for the "Abort, retry, ignore?" prompt for media errors
#: ../src/callbacks/media.h:108
msgid "Skip retrieval of the file and abort current operation."
-msgstr ""
+msgstr "Sla het ophalen van het bestand over en beëindig de huidige operatie."
#. help text for the "Abort, retry, ignore?" prompt for media errors
#: ../src/callbacks/media.h:110
msgid "Try to retrieve the file again."
-msgstr ""
+msgstr "Probeer het bestand opnieuw op te halen."
#. help text for the "Abort, retry, ignore?" prompt for media errors
#: ../src/callbacks/media.h:112
msgid "Skip retrieval of the file and try to continue with the operation without the file."
-msgstr ""
+msgstr "Sla het ophalen van het bestand over en probeer verder te gaan met de operatie zonder het bestand."
#. help text for the "Abort, retry, ignore?" prompt for media errors
#: ../src/callbacks/media.h:114
msgid "Change current base URI and try retrieving the file again."
-msgstr ""
+msgstr "Wijzig de huidige basis-URI en probeer het bestand opnieuw op te halen."
#. translators: this is a prompt text
#: ../src/callbacks/media.h:119 ../src/utils/prompt.cc:178
@@ -241,10 +238,8 @@ msgstr "Afbreken, opnieuw, negeren?"
#. translators: this is a prompt label, will appear as "New URI: "
#: ../src/callbacks/media.h:130
-#, fuzzy
-#| msgid "URI"
msgid "New URI"
-msgstr "URI"
+msgstr "Nieuw URI"
# inlognaam/gebruikersnaam
#: ../src/callbacks/media.h:267 ../src/callbacks/media.h:274
@@ -329,10 +324,9 @@ msgid "Unknown command '%s'"
msgstr "Onbekend commando '%s'"
#: ../src/Config.cc:73
-#, fuzzy, c-format
-#| msgid "Unknown command option"
+#, c-format
msgid "Unknown configuration option '%s'"
-msgstr "Onbekende commando optie"
+msgstr "Onbekende configuratieoptie '%s'"
#: ../src/info.cc:40
msgid "Name: "
@@ -415,10 +409,8 @@ msgid "Requires:"
msgstr "Benodigd:"
#: ../src/info.cc:144
-#, fuzzy
-#| msgid "Recommends"
msgid "Recommends:"
-msgstr "Beveelt aan"
+msgstr "Adviseert:"
#: ../src/info.cc:181 ../src/info.cc:325 ../src/info.cc:396
msgid "Catalog: "
@@ -506,10 +498,8 @@ msgid "Provides:"
msgstr "Levert:"
#: ../src/info.cc:276
-#, fuzzy
-#| msgid "Conflicts"
msgid "Conflicts:"
-msgstr "In conflict met"
+msgstr "In conflict met:"
#: ../src/info.cc:297 ../src/search.cc:327
msgid "Recommended"
@@ -558,7 +548,7 @@ msgstr "(leeg)"
#: ../src/info.cc:402 ../src/search.cc:548
msgid "Is Base"
-msgstr ""
+msgstr "In de basis"
#: ../src/info.cc:404
msgid "Flavor"
@@ -1101,10 +1091,9 @@ msgid "Cleaning raw metadata cache for '%s'."
msgstr "Opschonen van rauwe metagegevenscache voor '%s'."
#: ../src/repos.cc:1171
-#, fuzzy, c-format
-#| msgid "Cleaning raw metadata cache for '%s'."
+#, c-format
msgid "Keeping raw metadata cache for %s '%s'."
-msgstr "Opschonen van rauwe metagegevenscache voor '%s'."
+msgstr "Bewaren van ruwe metagegevenscache voor %s '%s'."
#. translators: meaning the cached rpm files
#: ../src/repos.cc:1179
@@ -1260,14 +1249,12 @@ msgid "Repository '%s' priority has been left unchanged (%d)"
msgstr "Prioriteit van installatiebron '%s' is ongewijzigd (%d)"
#: ../src/repos.cc:1731
-#, fuzzy, c-format
-#| msgid "Repository '%s' has been sucessfully enabled."
+#, c-format
msgid "Repository '%s' has been successfully enabled."
msgstr "Installatiebron '%s' is met succes geactiveerd."
#: ../src/repos.cc:1734
-#, fuzzy, c-format
-#| msgid "Repository '%s' has been sucessfully disabled."
+#, c-format
msgid "Repository '%s' has been successfully disabled."
msgstr "Installatiebron '%s' is met succes gedeactiveerd."
@@ -1713,62 +1700,56 @@ msgstr "Er zijn root-privileges vereist voor het repareren van niet kloppende pa
#. ! \todo add c for changelog and x for explain (show the dep tree)
#: ../src/solve-commit.cc:473
msgid "y/n/p/v/a/r/m/d/g"
-msgstr ""
+msgstr "j/n/p/v/a/i/l/d/g"
#. translators: help text for 'y' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:478
-#, fuzzy
-#| msgid "Accept the summary and proceed with installation/removal of packages."
msgid "Yes, accept the summary and proceed with installation/removal of packages."
-msgstr "Accepteer de samenvatting en vervolg met de installatie of verwijdering van pakketten."
+msgstr "Ja ,accepteer de samenvatting en vervolg met de installatie of verwijdering van pakketten."
#. translators: help text for 'n' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:480
-#, fuzzy
-#| msgid "Cancel the operation."
msgid "No, cancel the operation."
-msgstr "Annuleer de operatie."
+msgstr "Nee, annuleer de operatie."
#. translators: help text for 'p' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:482
msgid "Restart solver in no-force-resolution mode in order to show dependency problems."
-msgstr "Herstart de oplosser in de modus niet-forceren om de afhankelijkheidsproblemen te tonen."
+msgstr "P, herstart de oplosser in de modus niet-forceren om de afhankelijkheidsproblemen te tonen."
#. translators: help text for 'v' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:484
msgid "Toggle display of package versions."
-msgstr ""
+msgstr "V, schakel het tonen van pakketversies om."
#. translators: help text for 'a' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:486
msgid "Toggle display of package architectures."
-msgstr ""
+msgstr "A, schakel het tonen van pakketarchitecturen om."
#. translators: help text for 'r' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:488
-#, fuzzy
-#| msgid "The following packages will be installed:\n"
msgid "Toggle display of repositories from which the packages will be installed."
-msgstr "De volgende pakketten zullen worden geïnstalleerd:\n"
+msgstr "I, Schakel het tonen van de installatiebronnen waaruit de pakketten geïnstalleerd zullen worden om."
#. translators: help text for 'm' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:490
msgid "Toggle display of package vendor names."
-msgstr ""
+msgstr "L, schakel het tonen van de leverancier van de pakketten om."
#. translators: help text for 'd' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:492
msgid "Toggle between showing all details and as few details as possible."
-msgstr ""
+msgstr "D, schakel het tonen van alle details en zo weinig als mogelijk om."
#. translators: help text for 'g' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:494
msgid "View the summary in pager."
-msgstr ""
+msgstr "G, toon de samenvatting in de pager."
#: ../src/solve-commit.cc:587
msgid "committing"
-msgstr "toewijzen"
+msgstr "goedkeuren"
#: ../src/solve-commit.cc:592
msgid "(dry run)"
@@ -2024,113 +2005,94 @@ msgstr "Na de operatie zal %s worden vrijgemaakt."
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:628
-#, fuzzy
-#| msgid "No packages to update"
msgid "package to upgrade"
msgid_plural "packages to upgrade"
-msgstr[0] "Geen pakketten om te opwaarderen"
-msgstr[1] "Geen pakketten om te opwaarderen"
+msgstr[0] "te opwaarderen pakket"
+msgstr[1] "te opwaarderen pakketten"
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:640
msgid "to downgrade"
msgid_plural "to downgrade"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "te afwaarderen"
+msgstr[1] "te afwaarderen"
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:643
-#, fuzzy
-#| msgid "The package download failed"
msgid "package to downgrade"
msgid_plural "packages to downgrade"
-msgstr[0] "Het downloaden van het pakket is mislukt"
-msgstr[1] "Het downloaden van het pakket is mislukt"
+msgstr[0] "te afwaarderen pakket"
+msgstr[1] "te afwaarderen pakketten"
#. translators: this text will be preceded by a number e.g. "5 new"
#: ../src/Summary.cc:654
-#, fuzzy
-#| msgid "New"
msgid "new"
msgid_plural "new"
-msgstr[0] "Nieuw"
-msgstr[1] "Nieuw"
+msgstr[0] "nieuw"
+msgstr[1] "nieuw"
#. translators: this text will be preceded by a number e.g. "5 new to install"
#: ../src/Summary.cc:657
-#, fuzzy
-#| msgid "The package is not installed"
msgid "new package to install"
msgid_plural "new packages to install"
-msgstr[0] "Het pakket is niet geïnstalleerd"
-msgstr[1] "Het pakket is niet geïnstalleerd"
+msgstr[0] "nieuw te installeren pakket"
+msgstr[1] "nieuw te installeren pakketten"
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:669
-#, fuzzy
-#| msgid "_Force install"
msgid "to reinstall"
msgid_plural "to reinstall"
-msgstr[0] "_Forceer installatie"
-msgstr[1] "_Forceer installatie"
+msgstr[0] "opnieuw te installeren"
+msgstr[1] "opnieuw te installeren"
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:672
-#, fuzzy
-#| msgid "Package installer"
msgid "package to reinstall"
msgid_plural "packages to reinstall"
-msgstr[0] "Pakketinstallatieprogramma"
-msgstr[1] "Pakketinstallatieprogramma"
+msgstr[0] "opnieuw te installeren pakket"
+msgstr[1] "opnieuw te installeren pakketten"
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:684
-#, fuzzy
-#| msgid "%s remove ok"
msgid "to remove"
msgid_plural "to remove"
-msgstr[0] "%s is met succes verwijderd"
-msgstr[1] "%s is met succes verwijderd"
+msgstr[0] "te verwijderen"
+msgstr[1] "te verwijderen"
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:687
-#, fuzzy
-#| msgid "Unable to remove ^%s\n"
msgid "package to remove"
msgid_plural "packages to remove"
-msgstr[0] "Kon ^%s niet verwijderen\n"
-msgstr[1] "Kon ^%s niet verwijderen\n"
+msgstr[0] "te verwijderen pakket"
+msgstr[1] "te verwijderen pakketten"
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:699
msgid "to change vendor"
msgid_plural " to change vendor"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "te wijzigen van leverancier"
+msgstr[1] "te wijzigen van leverancier"
#. translators: this text will be preceded by a number e.g. "5 packages ..."
#: ../src/Summary.cc:702
-#, fuzzy
-#| msgid "The following package is going to change vendor:"
-#| msgid_plural "The following packages are going to change vendor:"
msgid "package will change vendor"
msgid_plural "packages will change vendor"
-msgstr[0] "Het volgende pakket zal de leverancier wijzigen:"
-msgstr[1] "De volgende pakketten zullen de leverancier wijzigen:"
+msgstr[0] "pakket zal van leverancier wijzigen"
+msgstr[1] "pakketten zullen van leverancier wijzigen"
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:714
msgid "to change arch"
msgid_plural "to change arch"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "te wijzigen van architectuur"
+msgstr[1] "te wijzigen van architectuur"
#. translators: this text will be preceded by a number e.g. "5 packages ..."
#: ../src/Summary.cc:717
msgid "package will change arch"
msgid_plural "packages will change arch"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "pakket zal van architectuur wijzigen"
+msgstr[1] "pakketten zullen van architectuur wijzigen"
#. translators: %d is the number of needed patches
#: ../src/update.cc:67
@@ -2219,35 +2181,25 @@ msgid "No update candidate for '%s'."
msgstr "Geen opwaardering voor '%s'."
#: ../src/utils/Augeas.cc:26
-#, fuzzy
-#| msgid "Cannot copy the configuration template."
msgid "Cannot initialize configuration file parser."
-msgstr "Kan de configuratiesjabloon niet kopiëren."
+msgstr "Kan de configuratiebestandsontleder niet initialiseren."
#: ../src/utils/Augeas.cc:43 ../src/utils/Augeas.cc:55
-#, fuzzy
-#| msgid "Reading the config file failed"
msgid "Augeas error: setting config file to load failed."
-msgstr "Lezen van het configuratiebestand is mislukt"
+msgstr "Augeas-fout: instellen van te laden configuratiebestand is mislukt."
#: ../src/utils/Augeas.cc:61
-#, fuzzy
-#| msgid "Cannot parse the certificate."
msgid "Could not parse the config files."
-msgstr "Kan certificaat niet ontleden."
+msgstr "Kan de configuratiebestanden niet ontleden."
# %s is either BOOTP or DHCP
#: ../src/utils/Augeas.cc:95
-#, fuzzy
-#| msgid "An idmapd configuration file is required."
msgid "No configuration file exists or could be parsed."
-msgstr "Een idmapd-configuratiebestand is vereist."
+msgstr "Er bestaat geen configuratiebestand of deze was niet te ontleden."
#: ../src/utils/Augeas.cc:98
-#, fuzzy
-#| msgid "Error parsing the CRL."
msgid "Error parsing zypper.conf:"
-msgstr "Fout bij ontleden van de CRL."
+msgstr "Fout bij het ontleden van zypper.conf:"
#. For '-garbage' argument, with 'a', 'b', and 'e' as known options,
#. getopt_long reports 'a', 'b', and 'e' as known options.
@@ -2403,7 +2355,7 @@ msgstr "nee"
#: ../src/utils/prompt.cc:171 ../src/utils/prompt.cc:216
#, c-format
msgid "Retrying in %u seconds..."
-msgstr ""
+msgstr "Opnieuw proberen na %u seconden..."
#. translators: "a/r/i" are the answers to the
#. "Abort, retry, ignore?" prompt
@@ -2416,18 +2368,15 @@ msgid "a/r/i"
msgstr "a/o/n"
#: ../src/utils/prompt.cc:228
-#, fuzzy, c-format
-#| msgid "autoselect %s after %u "
+#, c-format
msgid "Autoselecting '%s' after %u second."
msgid_plural "Autoselecting '%s' after %u seconds."
-msgstr[0] "autoselecteer %s na %u "
-msgstr[1] "autoselecteer %s na %u "
+msgstr[0] "Autoselecteren '%s' na %u seconde."
+msgstr[1] "Autoselecteren '%s' na %u seconden."
#: ../src/utils/prompt.cc:247
-#, fuzzy
-#| msgid "Preparing installation..."
msgid "Trying again..."
-msgstr "Installatie wordt voorbereid..."
+msgstr "Opnieuw proberen..."
#: ../src/utils/prompt.cc:338
#, c-format
@@ -2436,10 +2385,9 @@ msgstr "Ongeldig antwoord '%s'."
#. translators: the %s are: 'y', 'yes' (translated), 'n', and 'no' (translated).
#: ../src/utils/prompt.cc:344
-#, fuzzy, c-format
-#| msgid "Enter 'y' for '%s' or 'n' for '%s' if nothing else works for you."
+#, c-format
msgid "Enter '%s' for '%s' or '%s' for '%s' if nothing else works for you."
-msgstr "Voer 'y' in voor '%s' of 'n' voor '%s' als niets anders voor u werkt."
+msgstr "Voer '%s' in voor '%s' of '%s' voor '%s' als niets anders voor u werkt."
#: ../src/utils/prompt.cc:358
#, c-format
@@ -2469,7 +2417,6 @@ msgid "Error"
msgstr "Fout"
#: ../src/Zypper.cc:153
-#, fuzzy
#| msgid ""
#| " Global Options:\n"
#| "\t--help, -h\t\tHelp.\n"
@@ -2509,6 +2456,7 @@ msgstr ""
" Globale opties:\n"
"\t--help, -h\t\thulp\n"
"\t--version, -V\t\ttoon versienummer\n"
+"\t--config, -c <bestand>\tGebruik het gespecificeerde configbestand in plaats van de standaard.\n"
"\t--quiet, -q\t\tonderdruk normale uitvoer, toon alleen\n"
"\t\t\t\tfoutmeldingen\n"
"\t--verbose, -v\t\ttoon meer uitvoer\n"
@@ -2673,7 +2621,6 @@ msgstr ""
"\twhat-provides, wp\ttoon pakketten die een gespecificeerde capaciteit leveren\n"
#: ../src/Zypper.cc:248
-#, fuzzy
#| msgid ""
#| " Package Locks:\n"
#| "\taddlock, al\t\tAdd a package lock.\n"
@@ -2690,6 +2637,7 @@ msgstr ""
"\taddlock, al\t\tvoeg een pakketblokkering toe\n"
"\tremovelock, rl\t\tverwijder een pakketblokkering\n"
"\tlocks, ll\t\ttoon de huidige pakketblokkeringen\n"
+"\tcleanlocks, cl\t\tVerwijder ongebruikte blokkeringen.\n"
#: ../src/Zypper.cc:255
msgid ""
@@ -2786,8 +2734,7 @@ msgstr "Onverwachte uitzondering."
#. TranslatorExplanation the first %s = "package, patch, pattern, product"
#. and the second %s = "package"
-#: ../src/Zypper.cc:912
-#, fuzzy, c-format
+#: ../src/Zypper.cc:912, c-format
#| msgid ""
#| "install (in) [options] <capability|rpm_file_uri> ...\n"
#| "\n"
@@ -2839,27 +2786,36 @@ msgid ""
msgstr ""
"install (in) [opties] <capaciteit|rpm_bestand_uri> ...\n"
"\n"
-"Installeer pakketten met opgegeven capaciteiten of RPM-bestanden met een specifieke locatie. Een capaciteit is NAAM[OP<VERSIE>], waarbij OP een is van <, <=, =, >=, >.\n"
+"Installeer pakketten met opgegeven capaciteiten of RPM-bestanden uit een\n"
+"specifieke locatie. Een capaciteit is NAAM[OP<VERSIE>], waarbij OP er één\n"
+"is uit <, <=, =, >=, >.\n"
"\n"
" Opdrachtopties:\n"
-"-r, --repo <alias|#|URI> installeer pakketten alleen uit de gespecificeerde installatiebron\n"
-"-t, --type <type> type pakket (%s)\n"
-" standaard: %s\n"
-"-n, --name selecteer pakketten op hun gewone naam, niet op hun capaciteit\n"
-"-C, --capability selecteer pakketten op hun capaciteit\n"
-"-f, --force installeer zelfs als het item reeds is geïnstalleerd (herinstalleren)\n"
-"-l, --auto-agree-with-licenses zeg automatisch 'ja' tegen licenties van derden die daarom vragen\n"
-" zie 'man zypper' voor meer details\n"
-" --debug-solver voer een test uit voor foutopsporing\n"
-" --no-recommends installeer geen aanbevolen pakketten, alleen vereiste\n"
-"-R, --noforce-resolution forceer de oplosser niet tot het vinden van een oplossing, laat het vragen\n"
-" --force-resolution forceer de oplosser om een oplossing te vinden (zelfs agressief)\n"
-"-D, --dry-run test de installatie, maar doe het niet echt\n"
+" --from <alias|#|URI> selecteer pakketten uit de gespecificeerde installatiebron.\n"
+"-r, --repo <alias|#|URI> laadt alleen de gespecificeerde installatiebron\n"
+"-t, --type <type> type pakket (%s)\n"
+" standaard: %s\n"
+"-n, --name selecteer pakketten op hun gewone naam, niet op hun capaciteit\n"
+"-C, --capability selecteer pakketten op hun capaciteit\n"
+"-f, --force herinstalleer het pakket als de exacte versie beschikbaar\n"
+" is in de installatiebronnen\n"
+"-l, --auto-agree-with-licenses\n"
+" zeg automatisch 'ja' tegen licenties van derden\n"
+" die daarom vragen\n"
+" zie 'man zypper' voor meer details\n"
+" --debug-solver voer een test uit voor foutopsporing\n"
+" --no-recommends installeer geen aanbevolen pakketten, alleen vereiste\n"
+" --recommends installeer ook aanbevolen pakketten bovenop\n"
+" de vereiste"
+" --noforce-resolution forceer de oplosser niet tot het vinden van een oplossing,\n"
+" laat het vragen\n"
+"-R, --force-resolution forceer de oplosser om een oplossing te vinden\n"
+" (zelfs agressief)\n"
+"-D, --dry-run test de installatie, maar doe het niet echt\n"
#. TranslatorExplanation the first %s = "package, patch, pattern, product"
#. and the second %s = "package"
-#: ../src/Zypper.cc:969
-#, fuzzy, c-format
+#: ../src/Zypper.cc:969, c-format
#| msgid ""
#| "remove (rm) [options] <capability> ...\n"
#| "\n"
@@ -2895,7 +2851,9 @@ msgid ""
msgstr ""
"remove (rm) [opties] <capaciteit> ...\n"
"\n"
-"Verwijder pakketten met gespecificeerde capaciteiten. Een capaciteit is NAAM[OP<VERSIE>], waarbij OP een is van <, <=, =, >=, >.\n"
+"Verwijder pakketten met gespecificeerde capaciteiten.\n"
+" Een capaciteit is NAAM[.ARCH][OP<VERSIE>], waarbij OP éen\n"
+" is van <, <=, =, >=, >.\n"
"\n"
" Opdrachtopties:\n"
"-r, --repo <alias|#|URI> werk alleen met pakketten van de gespecificeeerde installatiebron\n"
@@ -2929,7 +2887,6 @@ msgstr ""
"-r, --repo <alias|#|URI> installeer alleen pakketten uit gespecificeerde pakketbronnen\n"
#: ../src/Zypper.cc:1028
-#, fuzzy
#| msgid ""
#| "verify (ve) [options]\n"
#| "\n"
@@ -2957,9 +2914,11 @@ msgstr ""
"Controleer of afhankelijkheden van geïnstalleerde pakketten kloppen en repareer afhankelijkheidsproblemen.\n"
"\n"
" Opdrachtopties:\n"
+"-r, --repo <alias|#|URI> gebruik alleen gespecificeerde installatiebronnen\n"
" --no-recommends installeer geen aanbevolen pakketten, alleen vereiste\n"
+" --recommends installeer ook aanbevolen pakketten bovenop\n"
+" de vereiste.\n"
"-D, --dry-run test de reparatie, maar verander niets aan het systeem\n"
-"-r, --repo <alias|#|URI> gebruik alleen gespecificeerde installatiebronnen om ontbrekende pakketten te installeren\n"
#: ../src/Zypper.cc:1055
msgid ""
@@ -2982,8 +2941,7 @@ msgstr ""
" --debug-solver maak een solver-testcase voor debugging.\n"
#. translators: the %s = "ris" (the only service type currently supported)
-#: ../src/Zypper.cc:1081
-#, fuzzy, c-format
+#: ../src/Zypper.cc:1081, c-format
#| msgid ""
#| "addservice (as) [options] <URI> <alias>\n"
#| "\n"
@@ -3008,9 +2966,9 @@ msgstr ""
"Voeg een index-service van een installatiebron toe aan het systeem.\n"
"\n"
" Opdrachtopties:\n"
-"-t, --type <TYPE> type service (%s).\n"
+"-t, --type <type> type service (%s).\n"
"-d, --disable voeg de service toe als uitgeschakeld.\n"
-"-n, --name specificeer een beschrijvende naam voor de service.\n"
+"-n, --name <alias> specificeer een beschrijvende naam voor de service.\n"
#. TranslatorExplanation the %s = "yast2, rpm-md, plaindir"
#: ../src/Zypper.cc:1104
@@ -3130,8 +3088,7 @@ msgstr ""
"-r, --with-repos ververs ook installatiebronnen\n"
#. translators: the %s = "yast2, rpm-md, plaindir"
-#: ../src/Zypper.cc:1242
-#, fuzzy, c-format
+#: ../src/Zypper.cc:1242, c-format
#| msgid ""
#| "addrepo (ar) [options] <URI> <alias>\n"
#| "addrepo (ar) [options] <FILE.repo>\n"
@@ -3166,13 +3123,13 @@ msgid ""
"-f, --refresh Enable autorefresh of the repository.\n"
msgstr ""
"addrepo (ar) [opties] <URI> <alias>\n"
-"addrepo (ar) [opties] <BESTAND.repo>\n"
+"addrepo (ar) [opties] <bestand.repo>\n"
"\n"
"Voeg een installatiebron toe. Deze kan gespecificeerd zijn door de URI of wordt gelezen uit het .repo-bestand (zelfs extern).\n"
"\n"
" Opdrachtopties:\n"
-"-r, --repo <BESTAND.repo> alleen maar een andere manier om een .repo-bestand te lezen\n"
-"-t, --type <TYPE> type installatiebron (%s)\n"
+"-r, --repo <bestand.repo> alleen maar een andere manier om een .repo-bestand te lezen\n"
+"-t, --type <type> type installatiebron (%s)\n"
"-d, --disable voeg de bron toe als uitgeschakeld\n"
"-c, --check test de URI\n"
"-x, --no-check test de URI niet, doe dat later bij een verversing\n"
@@ -3214,14 +3171,14 @@ msgstr ""
"Toon alle gedefiniëerde installatiebronnen.\n"
"\n"
" Opdrachtopties:\n"
-"-e, --export <BESTAND.repo> exporteer alle gedefiniëerde installatiebronnen als een enkel lokaal repo-betand\n"
-"-u, --uri toon ook de basis URI van installatiebronnen\n"
-"-p, --priority toon ook installatiebronprioriteit\n"
-"-d, --details toon meer informatie zoals URI, prioriteit en type\n"
-"-U, --sort-by-uri sorteer de lijst op URI\n"
-"-P, --sort-by-priority sorteer de lijst op installatiebronprioriteit\n"
-"-A, --sort-by-alias sorteer de lijst op alias\n"
-"-N, --sort-by-name sorteer de lijst op naam\n"
+"-e, --export <BESTAND.repo> exporteer alle gedefiniëerde installatiebronnen als een enkel lokaal repo-betand\n"
+"-u, --uri toon ook de basis URI van installatiebronnen\n"
+"-p, --priority toon ook installatiebronprioriteit\n"
+"-d, --details toon meer informatie zoals URI, prioriteit en type\n"
+"-U, --sort-by-uri sorteer de lijst op URI\n"
+"-P, --sort-by-priority sorteer de lijst op installatiebronprioriteit\n"
+"-A, --sort-by-alias sorteer de lijst op alias\n"
+"-N, --sort-by-name sorteer de lijst op naam\n"
#. translators: this option belongs to 'lr' command help
#: ../src/Zypper.cc:1314
@@ -3243,8 +3200,8 @@ msgstr ""
"Verwijder de installatiebron die is opgegeven door alias, nummer of URI.\n"
"\n"
" Opdrachtopties:\n"
-" --loose-auth negeer authenticatiegegevens in de URI\n"
-" --loose-query negeer de query-tekenreeks in de URI\n"
+" --loose-auth negeer authenticatiegegevens in de URI\n"
+" --loose-query negeer de query-tekenreeks in de URI\n"
#: ../src/Zypper.cc:1348
msgid ""
@@ -3262,8 +3219,7 @@ msgstr ""
#. translators: %s is "--all|--remote|--local|--medium-type"
#. and "--all, --remote, --local, --medium-type"
-#: ../src/Zypper.cc:1379
-#, fuzzy, c-format
+#: ../src/Zypper.cc:1379, c-format
#| msgid ""
#| "modifyrepo (mr) <options> <alias|#|URI>\n"
#| "modifyrepo (mr) <options> <%s>\n"
@@ -3307,7 +3263,7 @@ msgid ""
"-t, --remote Apply changes to all remote repositories.\n"
"-m, --medium-type <type> Apply changes to repositories of specified type.\n"
msgstr ""
-"modifyrepo (mr) <opties> <alias|#|URI>\n"
+"modifyrepo (mr) <opties> <alias|#|URI> ...\n"
"modifyrepo (mr) <opties> <%s>\n"
"\n"
"Wijzig de eigenschappen van de bron die is opgegeven door alias, nummer of URI of door de agregatie-opties '%s'\n"
@@ -3317,14 +3273,14 @@ msgstr ""
"-e, --enable activeer een uitgeschakelde bron\n"
"-r, --refresh activeer het automatisch vernieuwen van de bron\n"
"-n, --no-refresh schakel het automatisch vernieuwen van de bron uit\n"
-"-p, --priority <1-99> zet de prioriteit van de bron\n"
+"-p, --priority <geheel getal> zet de prioriteit van de bron\n"
"-k, --keep-packages schakel het cachen van RPM-bestanden in\n"
"-K, --no-keep-packages schakel het cachen van RPM-bestanden uit\n"
"\n"
"-a, --all doe wijzigingen op alle installatiebronnen\n"
-"-l, --local doe wijzigingen op alle lokale installatiebronnen\n"
-"-t, --remote doe wijzigingen op alle installatiebronnen op afstand\n"
-"-m, --medium-type <type> doe wijzigingen op installatiebronnen van een specifiek type.\n"
+"-l, --local doe wijzigingen op alle lokale installatiebronnen\n"
+"-t, --remote doe wijzigingen op alle installatiebronnen op afstand\n"
+"-m, --medium-type <type> doe wijzigingen op installatiebronnen van een specifiek type.\n"
#: ../src/Zypper.cc:1419
msgid ""
@@ -3355,7 +3311,6 @@ msgstr ""
"-s, --services ververs ook services alvorens de installatiebronnen te verversen.\n"
#: ../src/Zypper.cc:1448
-#, fuzzy
#| msgid ""
#| "clean [alias|#|URI] ...\n"
#| "\n"
@@ -3377,7 +3332,7 @@ msgid ""
"-M, --raw-metadata Clean raw metadata cache.\n"
"-a, --all Clean both metadata and package caches.\n"
msgstr ""
-"clean [alias|#|URI] ...\n"
+"clean (cc) [alias|#|URI] ...\n"
"\n"
"Schoon lokale caches op.\n"
"\n"
@@ -3412,7 +3367,7 @@ msgstr ""
"Toon alle beschikbare opwaarderingen\n"
"\n"
" Opdrachtopties:\n"
-"-t, --type <type> type oplosbare (%s)\n"
+"-t, --type <type> type pakket (%s)\n"
" standaard: %s\n"
"-r, --repo <alias|#|URI> toon alleen opwaarderingen van de gespecificeerde bron\n"
" --best-effort gebruik het best-mogelijke resultaat bij het\n"
@@ -3424,8 +3379,7 @@ msgstr ""
#. TranslatorExplanation the first %s = "package, patch, pattern, product"
#. and the second %s = "patch"
-#: ../src/Zypper.cc:1529
-#, fuzzy, c-format
+#: ../src/Zypper.cc:1529, c-format
#| msgid ""
#| "update (up) [options] ...\n"
#| "\n"
@@ -3482,23 +3436,25 @@ msgstr ""
"\n"
" Opdrachtopties:\n"
"\n"
-"-t, --type <type> type pakket (%s)\n"
-" standaard: %s\n"
-"-r, --repo <alias|#|URI> beperk opwaarderingen tot de gespecificeerde bron\n"
-" --skip-interactive sla interactieve opwaarderingen over\n"
-"-l, --auto-agree-with-licenses zeg automatisch ja op licenties van derden die daar om vragen\n"
-" zie man zypper voor meer informatie\n"
-" --best-effort gebruik het best-mogelijke resultaat bij het\n"
-" opwaarderen. Opwaarderen naar een lagere versie\n"
-" dan de hoogste is ook acceptabel\n"
-" --debug-solver maak een oplossertestbestand aan voor foutopsporing\n"
-" --no-recommends installeer geen aanbevolen pakketten, alleen vereiste\n"
-"-R, --no-force-resolution forceer de oplosser niet tot het vinden van een oplossing, vraag erom\n"
-" --force-resolution forceer de oplosser tot het vinden van een oplossing (zelfs agressief)\n"
-"-D, --dry-run test de opwaardering, maar voer deze niet uit\n"
+"-t, --type <type> type pakket (%s)\n"
+" standaard: %s\n"
+"-r, --repo <alias|#|URI> alleen uit de gespecificeerde bron laden\n"
+" --skip-interactive sla interactieve opwaarderingen over\n"
+"-l, --auto-agree-with-licenses\n"
+" zeg automatisch ja op licenties van derden die daar om vragen\n"
+" zie man zypper voor meer informatie\n"
+" --best-effort gebruik het best-mogelijke resultaat bij het\n"
+" opwaarderen. Opwaarderen naar een lagere versie\n"
+" dan de hoogste is ook acceptabel\n"
+" --debug-solver maak een oplossertestbestand aan voor foutopsporing\n"
+" --no-recommends installeer geen aanbevolen pakketten, alleen vereiste.\n"
+" --recommends installeer ook aanbevolen pakketten bovenop\n"
+" de vereiste"
+"-R, --no-force-resolution forceer de oplosser niet tot het vinden van een oplossing, vraag erom\n"
+" --force-resolution forceer de oplosser tot het vinden van een oplossing (zelfs agressief)\n"
+"-D, --dry-run test de opwaardering, maar voer deze niet uit\n"
#: ../src/Zypper.cc:1574
-#, fuzzy
#| msgid ""
#| "patch [options]\n"
#| "\n"
@@ -3538,13 +3494,17 @@ msgstr ""
"\n"
" Opdrachtoptions:\n"
"\n"
-"-r, --repo <alias|#|URI> werk alleen met de gespecificeerde installatiebron\n"
-" --skip-interactive sla interactieve patches over\n"
-"-l, --auto-agree-with-licenses zeg automatisch 'ja' tegen licenties van derden die\n"
-" daarom vragen\n"
-" zie 'man zypper' voor meer details\n"
-" --debug-solver voer een test uit voor foutopsporing\n"
-"-D, --dry-run test de installatie, maar doe het niet echt\n"
+"-r, --repo <alias|#|URI> werk alleen met de gespecificeerde installatiebron\n"
+" --skip-interactive sla interactieve patches over\n"
+"-l, --auto-agree-with-licenses\n"
+" zeg automatisch 'ja' tegen licenties van derden die\n"
+" daarom vragen\n"
+" zie 'man zypper' voor meer details\n"
+" --debug-solver voer een test uit voor foutopsporing\n"
+" --no-recommends installeer geen aanbevolen pakketten, alleen vereiste.\n"
+" --recommends installeer ook aanbevolen pakketten bovenop\n"
+" de vereiste\n"
+"-D, --dry-run test de installatie, maar doe het niet echt\n"
#: ../src/Zypper.cc:1604
msgid ""
@@ -3563,7 +3523,6 @@ msgstr ""
"-r, --repo <alias|#|URI> toon alleen patches van de gespecificeerde installatiebron.\n"
#: ../src/Zypper.cc:1630
-#, fuzzy
#| msgid ""
#| "dist-upgrade (dup) [options]\n"
#| "\n"
@@ -3601,12 +3560,15 @@ msgstr ""
"\n"
" Opdrachtopties:\n"
"\n"
-"-r, --repo <alias|#|URI> beperk de upgrade tot de gespecificeerd bron\n"
-" --no-recommends installeer geen aanbevolen pakketten, alleen vereiste\n"
-"-l, --auto-agree-with-licenses zeg automatisch ja op licenties van derden die daar om vragen\n"
-" zie man zypper voor meer informatie\n"
-" --debug-solver maak een oplossertestbestand aan voor foutopsporing\n"
-"-D, --dry-run test de upgrade, maar voer deze niet uit\n"
+"-r, --repo <alias|#|URI> beperk de upgrade tot de gespecificeerd bron\n"
+"-l, --auto-agree-with-licenses\n"
+" zeg automatisch ja op licenties van derden die daar om vragen\n"
+" zie man zypper voor meer informatie\n"
+" --debug-solver maak een oplossertestbestand aan voor foutopsporing\n"
+" --no-recommends installeer geen aanbevolen pakketten, alleen vereiste\n"
+" --recommends installeer ook aanbevolen pakketten bovenop\n"
+" de vereiste.\n"
+"-D, --dry-run test de upgrade, maar voer deze niet uit\n"
#: ../src/Zypper.cc:1676
msgid ""
@@ -3762,8 +3724,7 @@ msgstr ""
"-i, --installed-only toon alleen geïnstalleerde producten\n"
"-u, --uninstalled-only toon alleen niet geïnstalleerde producten\n"
-#: ../src/Zypper.cc:1843
-#, fuzzy, c-format
+#: ../src/Zypper.cc:1843, c-format
#| msgid ""
#| "info (if) [options] <name> ...\n"
#| "\n"
@@ -3793,6 +3754,8 @@ msgstr ""
"-r, --repo <alias|#|URI> werk alleen met de gespecificeerde bron.\n"
"-t, --type <type> type van pakketten (%s).\n"
" standaard: %s."
+" --requires toon ook vereiste en noodzakelijke.\n"
+" --recommends toon ook aanbevolene."
#: ../src/Zypper.cc:1868
#, c-format
@@ -3929,6 +3892,13 @@ msgid ""
"-d, --only-duplicates Clean only duplicate locks.\n"
"-e, --only-empty Clean only locks which doesn't lock anything.\n"
msgstr ""
+"cleanlocks (cl)\n"
+"\n"
+"Verwijder onbruikbare vergrendelingen.\n"
+"\n"
+" Opdrachtopties:\n"
+"-d, --only-duplicates Maak alleen dubbele vergrendelingen schoon.\n"
+"-e, --only-empty Maak alleen vergrendelingen schoon die niets vergrendelen.\n"
#: ../src/Zypper.cc:2082
msgid ""
@@ -3958,10 +3928,9 @@ msgstr ""
"Vergelijk de versies in de argumenten.\n"
"\n"
" Opdrachtopties:\n"
-"-m, --match Neem een ontbrekend release-nummer als elke release.\n"
+"-m, --match Neemt een ontbrekend release-nummer als elke release.\n"
#: ../src/Zypper.cc:2120
-#, fuzzy
#| msgid ""
#| "licenses\n"
#| "\n"
@@ -3977,7 +3946,7 @@ msgid ""
msgstr ""
"licenses\n"
"\n"
-"Toon de licenties en EULA van de huidige geïnstalleerde softwarepakketten.\n"
+"Toon de licenties en EULA's van de huidige geïnstalleerde softwarepakketten.\n"
"\n"
"Dit commando heeft geen additionele opties.\n"
@@ -4274,10 +4243,9 @@ msgid "Root privileges are required for performing a distribution upgrade."
msgstr "Er zijn root-privileges vereist voor het uitvoeren van een distributie-upgrade."
#: ../src/Zypper.cc:3794
-#, fuzzy, c-format
-#| msgid "'%1' does not exist."
+#, c-format
msgid "Type '%s' does not support %s."
-msgstr "'%1' bestaat niet."
+msgstr "Type '%s' ondersteunt geen %s."
#: ../src/Zypper.cc:3824 ../src/Zypper.cc:3885
msgid "Root privileges are required for adding of package locks."
@@ -4334,3 +4302,4 @@ msgstr "Oplosbaartype"
#~ msgid "Root privileges are required for modifying services."
#~ msgstr "Er zijn root-privileges nodig om de services te wijzigen."
+
diff --git a/po/pl.po b/po/pl.po
index 4336cb4..88a3f7a 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -213,7 +213,6 @@ msgstr "Proszę włożyć nośnik [%s] #%d i nacisnąć 't' aby kontynuować lub
#. the 'u' reply means 'Change URI'.
#: ../src/callbacks/media.h:106
#, fuzzy
-#| msgid "a/r/i"
msgid "a/r/i/u"
msgstr "p/s/i"
@@ -246,7 +245,6 @@ msgstr "Przerwij, spróbuj ponownie, ignoruj?"
#. translators: this is a prompt label, will appear as "New URI: "
#: ../src/callbacks/media.h:130
#, fuzzy
-#| msgid "URI"
msgid "New URI"
msgstr "Adres URL"
@@ -333,9 +331,8 @@ msgstr "Nieznane polecenie '%s'"
#: ../src/Config.cc:73
#, fuzzy, c-format
-#| msgid "Unknown command option"
msgid "Unknown configuration option '%s'"
-msgstr "Nieznana opcja polecenia"
+msgstr "Nieznane polecenie '%s'"
#: ../src/info.cc:40
msgid "Name: "
@@ -419,9 +416,8 @@ msgstr "Wymaga:"
#: ../src/info.cc:144
#, fuzzy
-#| msgid "Recommends"
msgid "Recommends:"
-msgstr "Zaleca"
+msgstr "Zalecany"
#: ../src/info.cc:181 ../src/info.cc:325 ../src/info.cc:396
msgid "Catalog: "
@@ -508,7 +504,6 @@ msgstr "Dostarcza:"
#: ../src/info.cc:276
#, fuzzy
-#| msgid "Conflicts"
msgid "Conflicts:"
msgstr "Konfliktuje"
@@ -1104,7 +1099,6 @@ msgstr "Czyszczenie bufora metadanych dla '%s'."
#: ../src/repos.cc:1171
#, fuzzy, c-format
-#| msgid "Cleaning raw metadata cache for '%s'."
msgid "Keeping raw metadata cache for %s '%s'."
msgstr "Czyszczenie bufora metadanych dla '%s'."
@@ -1263,13 +1257,11 @@ msgstr "Nie zmieniono priorytetu '%s' (%d)"
#: ../src/repos.cc:1731
#, fuzzy, c-format
-#| msgid "Repository '%s' has been sucessfully enabled."
msgid "Repository '%s' has been successfully enabled."
msgstr "Odblokowano repozytorium '%s'."
#: ../src/repos.cc:1734
#, fuzzy, c-format
-#| msgid "Repository '%s' has been sucessfully disabled."
msgid "Repository '%s' has been successfully disabled."
msgstr "Zablokowano repozytorium '%s'."
@@ -1727,14 +1719,12 @@ msgstr ""
#. translators: help text for 'y' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:478
#, fuzzy
-#| msgid "Accept the summary and proceed with installation/removal of packages."
msgid "Yes, accept the summary and proceed with installation/removal of packages."
msgstr "Akceptuje podsumowanie i kontynuuje instalację lub usunięcie pakietów."
#. translators: help text for 'n' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:480
#, fuzzy
-#| msgid "Cancel the operation."
msgid "No, cancel the operation."
msgstr "Zatrzymanie czynności."
@@ -1755,10 +1745,8 @@ msgstr ""
#. translators: help text for 'r' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:488
-#, fuzzy
-#| msgid "The following packages will be installed:\n"
msgid "Toggle display of repositories from which the packages will be installed."
-msgstr "Zainstalowane zostaną następujące pakiety:\n"
+msgstr ""
#. translators: help text for 'm' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:490
@@ -2065,12 +2053,11 @@ msgstr "Po wykonaniu operacji zwolnione zostanie %s."
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:628
#, fuzzy
-#| msgid "No packages to update"
msgid "package to upgrade"
msgid_plural "packages to upgrade"
-msgstr[0] "Brak pakietów do zaktualizowania"
-msgstr[1] "Brak pakietów do zaktualizowania"
-msgstr[2] "Brak pakietów do zaktualizowania"
+msgstr[0] "Aktualizacje pakietów"
+msgstr[1] "Aktualizacje pakietów"
+msgstr[2] "Aktualizacje pakietów"
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:640
@@ -2082,73 +2069,62 @@ msgstr[2] ""
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:643
-#, fuzzy
-#| msgid "The package download failed"
msgid "package to downgrade"
msgid_plural "packages to downgrade"
-msgstr[0] "Pobranie pakietu zakończone niepowodzeniem"
-msgstr[1] "Pobranie pakietu zakończone niepowodzeniem"
-msgstr[2] "Pobranie pakietu zakończone niepowodzeniem"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
#. translators: this text will be preceded by a number e.g. "5 new"
#: ../src/Summary.cc:654
-#, fuzzy
-#| msgid "New"
msgid "new"
msgid_plural "new"
-msgstr[0] "Nowy"
-msgstr[1] "Nowy"
-msgstr[2] "Nowy"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
#. translators: this text will be preceded by a number e.g. "5 new to install"
#: ../src/Summary.cc:657
#, fuzzy
-#| msgid "The package is not installed"
msgid "new package to install"
msgid_plural "new packages to install"
-msgstr[0] "Pakiet nie jest zainstalowany"
-msgstr[1] "Pakiet nie jest zainstalowany"
-msgstr[2] "Pakiet nie jest zainstalowany"
+msgstr[0] "Pakiet '%s' nie jest zainstalowany."
+msgstr[1] "Pakiet '%s' nie jest zainstalowany."
+msgstr[2] "Pakiet '%s' nie jest zainstalowany."
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:669
#, fuzzy
-#| msgid "_Force install"
msgid "to reinstall"
msgid_plural "to reinstall"
-msgstr[0] "_Wymuś instalację"
-msgstr[1] "_Wymuś instalację"
-msgstr[2] "_Wymuś instalację"
+msgstr[0] "niezainstalowany"
+msgstr[1] "niezainstalowany"
+msgstr[2] "niezainstalowany"
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:672
#, fuzzy
-#| msgid "Package installer"
msgid "package to reinstall"
msgid_plural "packages to reinstall"
-msgstr[0] "Instalator pakietów"
-msgstr[1] "Instalator pakietów"
-msgstr[2] "Instalator pakietów"
+msgstr[0] "Pakiet '%s' nie jest zainstalowany."
+msgstr[1] "Pakiet '%s' nie jest zainstalowany."
+msgstr[2] "Pakiet '%s' nie jest zainstalowany."
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:684
-#, fuzzy
-#| msgid "%s remove ok"
msgid "to remove"
msgid_plural "to remove"
-msgstr[0] "Usunięcie %s powiodło się"
-msgstr[1] "Usunięcie %s powiodło się"
-msgstr[2] "Usunięcie %s powiodło się"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:687
-#, fuzzy
-#| msgid "Unable to remove ^%s\n"
msgid "package to remove"
msgid_plural "packages to remove"
-msgstr[0] "Nie można usunąć ^%s\n"
-msgstr[1] "Nie można usunąć ^%s\n"
-msgstr[2] "Nie można usunąć ^%s\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:699
@@ -2161,8 +2137,6 @@ msgstr[2] ""
#. translators: this text will be preceded by a number e.g. "5 packages ..."
#: ../src/Summary.cc:702
#, fuzzy
-#| msgid "The following package is going to change vendor:"
-#| msgid_plural "The following packages are going to change vendor:"
msgid "package will change vendor"
msgid_plural "packages will change vendor"
msgstr[0] "Zostanie zmieniony dostawca następującego pakietu:"
@@ -2273,34 +2247,25 @@ msgstr "Brak aktualizacji dla '%s'."
#: ../src/utils/Augeas.cc:26
#, fuzzy
-#| msgid "Cannot copy the configuration template."
msgid "Cannot initialize configuration file parser."
-msgstr "Nie można skopiować szablonu konfiguracji."
+msgstr "Inicjalizacja nie powiodła się:"
#: ../src/utils/Augeas.cc:43 ../src/utils/Augeas.cc:55
-#, fuzzy
-#| msgid "Reading the config file failed"
msgid "Augeas error: setting config file to load failed."
-msgstr "Odczytanie pliku konfiguracyjnego zakończone niepowodzeniem"
+msgstr ""
#: ../src/utils/Augeas.cc:61
-#, fuzzy
-#| msgid "Cannot parse the certificate."
msgid "Could not parse the config files."
-msgstr "Analiza certyfikatu nie powiodła się."
+msgstr ""
-# %s is either BOOTP or DHCP
#: ../src/utils/Augeas.cc:95
-#, fuzzy
-#| msgid "An idmapd configuration file is required."
msgid "No configuration file exists or could be parsed."
-msgstr "Wymagany jest plik konfiguracyjny idmapd."
+msgstr ""
#: ../src/utils/Augeas.cc:98
#, fuzzy
-#| msgid "Error parsing the CRL."
msgid "Error parsing zypper.conf:"
-msgstr "Wystąpił błąd podczas analizy CRL."
+msgstr "Błąd podczas odczytu serwerów:"
#. For '-garbage' argument, with 'a', 'b', and 'e' as known options,
#. getopt_long reports 'a', 'b', and 'e' as known options.
@@ -2475,7 +2440,6 @@ msgstr "p/s/i"
#: ../src/utils/prompt.cc:228
#, fuzzy, c-format
-#| msgid "autoselect %s after %u "
msgid "Autoselecting '%s' after %u second."
msgid_plural "Autoselecting '%s' after %u seconds."
msgstr[0] "automatyczny wybór %s po %u"
@@ -2483,10 +2447,8 @@ msgstr[1] "automatyczny wybór %s po %u"
msgstr[2] "automatyczny wybór %s po %u"
#: ../src/utils/prompt.cc:247
-#, fuzzy
-#| msgid "Preparing installation..."
msgid "Trying again..."
-msgstr "Przygotowywanie instalacji..."
+msgstr ""
#: ../src/utils/prompt.cc:338
#, c-format
@@ -2496,7 +2458,6 @@ msgstr "Nieprawidłowa odpowiedź '%s'."
#. translators: the %s are: 'y', 'yes' (translated), 'n', and 'no' (translated).
#: ../src/utils/prompt.cc:344
#, fuzzy, c-format
-#| msgid "Enter 'y' for '%s' or 'n' for '%s' if nothing else works for you."
msgid "Enter '%s' for '%s' or '%s' for '%s' if nothing else works for you."
msgstr "Proszę wybrać 't' dla '%s' lub 'n' dla '%s' jeśli nic innego nie działa"
@@ -2529,23 +2490,6 @@ msgstr "Błąd"
#: ../src/Zypper.cc:153
#, fuzzy
-#| msgid ""
-#| " Global Options:\n"
-#| "\t--help, -h\t\tHelp.\n"
-#| "\t--version, -V\t\tOutput the version number.\n"
-#| "\t--quiet, -q\t\tSuppress normal output, print only error\n"
-#| "\t\t\t\tmessages.\n"
-#| "\t--verbose, -v\t\tIncrease verbosity.\n"
-#| "\t--no-abbrev, -A\t\tDo not abbreviate text in tables.\n"
-#| "\t--table-style, -s\tTable style (integer).\n"
-#| "\t--rug-compatible, -r\tTurn on rug compatibility.\n"
-#| "\t--non-interactive, -n\tDo not ask anything, use default answers\n"
-#| "\t\t\t\tautomatically.\n"
-#| "\t--xmlout, -x\t\tSwitch to XML output.\n"
-#| "\t--reposd-dir, -D <dir>\tUse alternative repository definition files\n"
-#| "\t\t\t\tdirectory.\n"
-#| "\t--cache-dir, -C <dir>\tUse alternative meta-data cache directory.\n"
-#| "\t--raw-cache-dir <dir>\tUse alternative raw meta-data cache directory.\n"
msgid ""
" Global Options:\n"
"\t--help, -h\t\tHelp.\n"
@@ -2730,11 +2674,6 @@ msgstr ""
#: ../src/Zypper.cc:248
#, fuzzy
-#| msgid ""
-#| " Package Locks:\n"
-#| "\taddlock, al\t\tAdd a package lock.\n"
-#| "\tremovelock, rl\t\tRemove a package lock.\n"
-#| "\tlocks, ll\t\tList current package locks.\n"
msgid ""
" Package Locks:\n"
"\taddlock, al\t\tAdd a package lock.\n"
@@ -2845,25 +2784,6 @@ msgstr "Niespodziewany wyjątek."
#. and the second %s = "package"
#: ../src/Zypper.cc:912
#, fuzzy, c-format
-#| msgid ""
-#| "install (in) [options] <capability|rpm_file_uri> ...\n"
-#| "\n"
-#| "Install packages with specified capabilities or RPM files with specified location. A capability is NAME[OP<VERSION>], where OP is one of <, <=, =, >=, >.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-r, --repo <alias|#|URI> Install packages only from the specified repository.\n"
-#| "-t, --type <type> Type of package (%s).\n"
-#| " Default: %s.\n"
-#| "-n, --name Select packages by plain name, not by capability.\n"
-#| "-C, --capability Select packages by capability.\n"
-#| "-f, --force Install even if the item is already installed (reinstall).\n"
-#| "-l, --auto-agree-with-licenses Automatically say 'yes' to third party license confirmation prompt.\n"
-#| " See 'man zypper' for more details.\n"
-#| " --debug-solver Create solver test case for debugging.\n"
-#| " --no-recommends Do not install recommended packages, only required.\n"
-#| "-R, --no-force-resolution Do not force the solver to find solution, let it ask.\n"
-#| " --force-resolution Force the solver to find a solution (even an agressive).\n"
-#| "-D, --dry-run Test the installation, do not actually install.\n"
msgid ""
"install (in) [options] <capability|rpm_file_uri> ...\n"
"\n"
@@ -2917,21 +2837,6 @@ msgstr ""
#. and the second %s = "package"
#: ../src/Zypper.cc:969
#, fuzzy, c-format
-#| msgid ""
-#| "remove (rm) [options] <capability> ...\n"
-#| "\n"
-#| "Remove packages with specified capabilities. A capability is NAME[OP<VERSION>], where OP is one of <, <=, =, >=, >.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-r, --repo <alias|#|URI> Operate only with packages from the specified repository.\n"
-#| "-t, --type <type> Type of package (%s).\n"
-#| " Default: %s.\n"
-#| "-n, --name Select packages by plain name, not by capability.\n"
-#| "-C, --capability Select packages by capability.\n"
-#| " --debug-solver Create solver test case for debugging.\n"
-#| "-R, --no-force-resolution Do not force the solver to find solution, let it ask.\n"
-#| " --force-resolution Force the solver to find a solution (even an agressive).\n"
-#| "-D, --dry-run Test the removal, do not actually remove.\n"
msgid ""
"remove (rm) [options] <capability> ...\n"
"\n"
@@ -2987,15 +2892,6 @@ msgstr ""
#: ../src/Zypper.cc:1028
#, fuzzy
-#| msgid ""
-#| "verify (ve) [options]\n"
-#| "\n"
-#| "Check whether dependencies of installed packages are satisfied and repair eventual dependency problems.\n"
-#| "\n"
-#| " Command options:\n"
-#| " --no-recommends Do not install recommended packages, only required.\n"
-#| "-D, --dry-run Test the repair, do not actually do anything to the system.\n"
-#| "-r, --repo <alias|#|URI> Use only specified repositories to install missing packages.\n"
msgid ""
"verify (ve) [options]\n"
"\n"
@@ -3041,15 +2937,6 @@ msgstr ""
#. translators: the %s = "ris" (the only service type currently supported)
#: ../src/Zypper.cc:1081
#, fuzzy, c-format
-#| msgid ""
-#| "addservice (as) [options] <URI> <alias>\n"
-#| "\n"
-#| "Add a repository index service to the system.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-t, --type <TYPE> Type of the service (%s).\n"
-#| "-d, --disable Add the service as disabled.\n"
-#| "-n, --name Specify descriptive name for the service.\n"
msgid ""
"addservice (as) [options] <URI> <alias>\n"
"\n"
@@ -3188,22 +3075,6 @@ msgstr ""
#. translators: the %s = "yast2, rpm-md, plaindir"
#: ../src/Zypper.cc:1242
#, fuzzy, c-format
-#| msgid ""
-#| "addrepo (ar) [options] <URI> <alias>\n"
-#| "addrepo (ar) [options] <FILE.repo>\n"
-#| "\n"
-#| "Add a repository to the sytem. The repository can be specified by its URI or can be read from specified .repo file (even remote).\n"
-#| "\n"
-#| " Command options:\n"
-#| "-r, --repo <FILE.repo> Just another means to specify a .repo file to read.\n"
-#| "-t, --type <TYPE> Type of repository (%s).\n"
-#| "-d, --disable Add the repository as disabled.\n"
-#| "-c, --check Probe URI.\n"
-#| "-C, --no-check Don't probe URI, probe later during refresh.\n"
-#| "-n, --name Specify descriptive name for the repository.\n"
-#| "-k, --keep-packages Enable RPM files caching.\n"
-#| "-K, --no-keep-packages Disable RPM files caching.\n"
-#| "-f, --refresh Enable autorefresh of the repository.\n"
msgid ""
"addrepo (ar) [options] <URI> <alias>\n"
"addrepo (ar) [options] <file.repo>\n"
@@ -3319,27 +3190,6 @@ msgstr ""
#. and "--all, --remote, --local, --medium-type"
#: ../src/Zypper.cc:1379
#, fuzzy, c-format
-#| msgid ""
-#| "modifyrepo (mr) <options> <alias|#|URI>\n"
-#| "modifyrepo (mr) <options> <%s>\n"
-#| "\n"
-#| "Modify properties of repositories specified by alias, number, or URI, or by the\n"
-#| "'%s' aggregate options.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-d, --disable Disable the repository (but don't remove it).\n"
-#| "-e, --enable Enable a disabled repository.\n"
-#| "-r, --refresh Enable auto-refresh of the repository.\n"
-#| "-R, --no-refresh Disable auto-refresh of the repository.\n"
-#| "-n, --name Set a descriptive name for the repository.\n"
-#| "-p, --priority <1-99> Set priority of the repository.\n"
-#| "-k, --keep-packages Enable RPM files caching.\n"
-#| "-K, --no-keep-packages Disable RPM files caching.\n"
-#| "\n"
-#| "-a, --all Apply changes to all repositories.\n"
-#| "-l, --local Apply changes to all local repositories.\n"
-#| "-t, --remote Apply changes to all remote repositories.\n"
-#| "-m, --medium-type <type> Apply changes to repositories of specified type.\n"
msgid ""
"modifyrepo (mr) <options> <alias|#|URI> ...\n"
"modifyrepo (mr) <options> <%s>\n"
@@ -3412,16 +3262,6 @@ msgstr ""
#: ../src/Zypper.cc:1448
#, fuzzy
-#| msgid ""
-#| "clean [alias|#|URI] ...\n"
-#| "\n"
-#| "Clean local caches.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-r, --repo <alias|#|URI> Clean only specified repositories.\n"
-#| "-m, --metadata Clean metadata cache.\n"
-#| "-M, --raw-metadata Clean raw metadata cache.\n"
-#| "-a, --all Clean both metadata and package caches.\n"
msgid ""
"clean (cc) [alias|#|URI] ...\n"
"\n"
@@ -3482,28 +3322,6 @@ msgstr ""
#. and the second %s = "patch"
#: ../src/Zypper.cc:1529
#, fuzzy, c-format
-#| msgid ""
-#| "update (up) [options] ...\n"
-#| "\n"
-#| "Update all or specified installed packages with newer versions, if possible.\n"
-#| "\n"
-#| " Command options:\n"
-#| "\n"
-#| "-t, --type <type> Type of package (%s).\n"
-#| " Default: %s.\n"
-#| "-r, --repo <alias|#|URI> Limit updates to the specified repository.\n"
-#| " --skip-interactive Skip interactive updates.\n"
-#| "-l, --auto-agree-with-licenses Automatically say 'yes' to third party license\n"
-#| " confirmation prompt.\n"
-#| " See man zypper for more details.\n"
-#| " --best-effort Do a 'best effort' approach to update. Updates\n"
-#| " to a lower than the latest version are\n"
-#| " also acceptable.\n"
-#| " --debug-solver Create solver test case for debugging.\n"
-#| " --no-recommends Do not install recommended packages, only required.\n"
-#| "-R, --no-force-resolution Do not force the solver to find solution, let it ask.\n"
-#| " --force-resolution Force the solver to find a solution (even an agressive).\n"
-#| "-D, --dry-run Test the update, do not actually update.\n"
msgid ""
"update (up) [options] ...\n"
"\n"
@@ -3555,20 +3373,6 @@ msgstr ""
#: ../src/Zypper.cc:1574
#, fuzzy
-#| msgid ""
-#| "patch [options]\n"
-#| "\n"
-#| "Install all available needed patches.\n"
-#| "\n"
-#| " Command options:\n"
-#| "\n"
-#| "-r, --repo <alias|#|URI> Work only with specified repository.\n"
-#| " --skip-interactive Skip interactive patches.\n"
-#| "-l, --auto-agree-with-licenses Automatically say 'yes' to third party license\n"
-#| " confirmation prompt.\n"
-#| " See man zypper for more details.\n"
-#| " --debug-solver Create solver test case for debugging.\n"
-#| "-D, --dry-run Test the update, do not actually update.\n"
msgid ""
"patch [options]\n"
"\n"
@@ -3620,19 +3424,6 @@ msgstr ""
#: ../src/Zypper.cc:1630
#, fuzzy
-#| msgid ""
-#| "dist-upgrade (dup) [options]\n"
-#| "\n"
-#| "Perform a distribution upgrade.\n"
-#| "\n"
-#| " Command options:\n"
-#| "\n"
-#| "-r, --repo <alias|#|URI> Limit the upgrade to the specified repository.\n"
-#| " --no-recommends Do not install recommended packages, only required.\n"
-#| "-l, --auto-agree-with-licenses Automatically say 'yes' to third party license confirmation prompt.\n"
-#| " See man zypper for more details.\n"
-#| " --debug-solver Create solver test case for debugging\n"
-#| "-D, --dry-run Test the upgrade, do not actually upgrade\n"
msgid ""
"dist-upgrade (dup) [options]\n"
"\n"
@@ -3820,15 +3611,6 @@ msgstr ""
#: ../src/Zypper.cc:1843
#, fuzzy, c-format
-#| msgid ""
-#| "info (if) [options] <name> ...\n"
-#| "\n"
-#| "Show detailed information for specified packages.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-r, --repo <alias|#|URI> Work only with the specified repository.\n"
-#| "-t, --type <type> Type of package (%s).\n"
-#| " Default: %s."
msgid ""
"info (if) [options] <name> ...\n"
"\n"
@@ -4018,12 +3800,6 @@ msgstr ""
#: ../src/Zypper.cc:2120
#, fuzzy
-#| msgid ""
-#| "licenses\n"
-#| "\n"
-#| "Report Licenses and EULA of currently installed software packages.\n"
-#| "\n"
-#| "This command has no additional options.\n"
msgid ""
"licenses\n"
"\n"
@@ -4329,10 +4105,9 @@ msgid "Root privileges are required for performing a distribution upgrade."
msgstr "Do przeprowadzenia aktualizacji dystrybucji wymagane są uprawnienia administratora."
#: ../src/Zypper.cc:3794
-#, fuzzy, c-format
-#| msgid "'%1' does not exist."
+#, c-format
msgid "Type '%s' does not support %s."
-msgstr "\"%1\" nie istnieje."
+msgstr ""
#: ../src/Zypper.cc:3824 ../src/Zypper.cc:3885
msgid "Root privileges are required for adding of package locks."
diff --git a/po/ru.po b/po/ru.po
index 4a83f73..e541cb2 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -14,7 +14,7 @@ msgstr ""
"Project-Id-Version: zypper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-06-08 16:44+0200\n"
-"PO-Revision-Date: 2009-06-11 01:53+0400\n"
+"PO-Revision-Date: 2009-06-18 13:19+0400\n"
"Last-Translator: Alexander Melentiev <alex239(a)gmail.com>\n"
"Language-Team: Russian <opensuse-translation-ru(a)opensuse.org>\n"
"MIME-Version: 1.0\n"
@@ -211,7 +211,6 @@ msgstr "Вставьте носитель [%s] #%d и введите 'y' для
#. Translate the a/r/i part exactly as you did the a/r/i string.
#. the 'u' reply means 'Change URI'.
#: ../src/callbacks/media.h:106
-#| msgid "a/r/i"
msgid "a/r/i/u"
msgstr "a/r/i/u"
@@ -243,7 +242,6 @@ msgstr "Прервать, повторить, игнорировать?"
#. translators: this is a prompt label, will appear as "New URI: "
#: ../src/callbacks/media.h:130
-#| msgid "URI"
msgid "New URI"
msgstr "Новый URI"
@@ -329,8 +327,8 @@ msgstr "Сбой при установке %s-%s:"
msgid "Unknown command '%s'"
msgstr "Неизвестная команда '%s'"
-#: ../src/Config.cc:73, c-format
-#| msgid "Unknown command option"
+#: ../src/Config.cc:73
+#, c-format
msgid "Unknown configuration option '%s'"
msgstr "Неизвестный параметр настройки '%s'"
@@ -415,7 +413,6 @@ msgid "Requires:"
msgstr "Требует:"
#: ../src/info.cc:144
-#| msgid "Recommends"
msgid "Recommends:"
msgstr "Рекомендует:"
@@ -506,7 +503,6 @@ msgid "Provides:"
msgstr "Предоставляет:"
#: ../src/info.cc:276
-#| msgid "Conflicts"
msgid "Conflicts:"
msgstr "Конфликтует:"
@@ -1106,9 +1102,9 @@ msgid "Cleaning raw metadata cache for '%s'."
msgstr "Очистка кэша необработанных метаданных для '%s'."
#: ../src/repos.cc:1171, c-format
-#| msgid "Cleaning raw metadata cache for '%s'."
+#| msgid "Keeping raw metadata cache for %s '%s'."
msgid "Keeping raw metadata cache for %s '%s'."
-msgstr "Сохранение кэша необработанных метаданных для '%s'."
+msgstr "Сохранение кэша необработанных метаданных для %s '%s'."
#. translators: meaning the cached rpm files
#: ../src/repos.cc:1179
@@ -1264,13 +1260,13 @@ msgstr "Неверный приоритет '%s'. Используйте пол
msgid "Repository '%s' priority has been left unchanged (%d)"
msgstr "Приоритет репозитория '%s' не изменён (%d)"
-#: ../src/repos.cc:1731, c-format
-#| msgid "Repository '%s' has been sucessfully enabled."
+#: ../src/repos.cc:1731
+#, c-format
msgid "Repository '%s' has been successfully enabled."
msgstr "Репозиторий '%s' успешно включён."
-#: ../src/repos.cc:1734, c-format
-#| msgid "Repository '%s' has been sucessfully disabled."
+#: ../src/repos.cc:1734
+#, c-format
msgid "Repository '%s' has been successfully disabled."
msgstr "Репозиторий '%s' успешно отключён."
@@ -1730,13 +1726,11 @@ msgstr "y/n/p/v/a/r/m/d/g"
#. translators: help text for 'y' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:478
-#| msgid "Accept the summary and proceed with installation/removal of packages."
msgid "Yes, accept the summary and proceed with installation/removal of packages."
msgstr "Да, принять сводную информацию и приступить к установке/удалению пакетов."
#. translators: help text for 'n' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:480
-#| msgid "Cancel the operation."
msgid "No, cancel the operation."
msgstr "Нет, отменить операцию."
@@ -1757,7 +1751,6 @@ msgstr "Переключить отображение архитектур па
#. translators: help text for 'r' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:488
-#| msgid "The following packages will be installed:\n"
msgid "Toggle display of repositories from which the packages will be installed."
msgstr "Переключить отображение репозиториев, из которых будут установлены пакеты."
@@ -2064,7 +2057,6 @@ msgstr "После этой операции будет освобождено %
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:628
-#| msgid "No packages to update"
msgid "package to upgrade"
msgid_plural "packages to upgrade"
msgstr[0] "пакет для обновления"
@@ -2081,7 +2073,6 @@ msgstr[2] "для отката"
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:643
-#| msgid "No packages to update"
msgid "package to downgrade"
msgid_plural "packages to downgrade"
msgstr[0] "пакет для отката"
@@ -2090,7 +2081,6 @@ msgstr[2] "пакетов для отката"
#. translators: this text will be preceded by a number e.g. "5 new"
#: ../src/Summary.cc:654
-#| msgid "New"
msgid "new"
msgid_plural "new"
msgstr[0] "новый"
@@ -2099,7 +2089,6 @@ msgstr[2] "новых"
#. translators: this text will be preceded by a number e.g. "5 new to install"
#: ../src/Summary.cc:657
-#| msgid "The package is not installed"
msgid "new package to install"
msgid_plural "new packages to install"
msgstr[0] "новый пакет для установки"
@@ -2108,7 +2097,6 @@ msgstr[2] "новых пакетов для установки"
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:669
-#| msgid "_Force install"
msgid "to reinstall"
msgid_plural "to reinstall"
msgstr[0] "для переустановки"
@@ -2117,7 +2105,6 @@ msgstr[2] "для переустановки"
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:672
-#| msgid "The package is not installed"
msgid "package to reinstall"
msgid_plural "packages to reinstall"
msgstr[0] "пакет для переустановки"
@@ -2126,7 +2113,6 @@ msgstr[2] "пакетов для переустановки"
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:684
-#| msgid "%s remove ok"
msgid "to remove"
msgid_plural "to remove"
msgstr[0] "для удаления"
@@ -2135,7 +2121,6 @@ msgstr[2] "для удаления"
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:687
-#| msgid "Unable to remove ^%s\n"
msgid "package to remove"
msgid_plural "packages to remove"
msgstr[0] "пакет для удаления"
@@ -2152,8 +2137,6 @@ msgstr[2] "для смены производителя"
#. translators: this text will be preceded by a number e.g. "5 packages ..."
#: ../src/Summary.cc:702
-#| msgid "The following package is going to change vendor:"
-#| msgid_plural "The following packages are going to change vendor:"
msgid "package will change vendor"
msgid_plural "packages will change vendor"
msgstr[0] "пакет сменит производителя"
@@ -2265,28 +2248,23 @@ msgid "No update candidate for '%s'."
msgstr "Нет кандидатов на обновление '%s'."
#: ../src/utils/Augeas.cc:26
-#| msgid "Cannot copy the configuration template."
msgid "Cannot initialize configuration file parser."
msgstr "Невозможно инициализировать обработчик файла конфигурации."
#: ../src/utils/Augeas.cc:43 ../src/utils/Augeas.cc:55
-#| msgid "Reading the config file failed"
msgid "Augeas error: setting config file to load failed."
msgstr "Ошибка Augeas: сбой задания загрузки конфигурационного файла."
#: ../src/utils/Augeas.cc:61
-#| msgid "Cannot parse the certificate."
msgid "Could not parse the config files."
msgstr "Невозможно обработать конфигурационные файлы."
# %s is either BOOTP or DHCP
#: ../src/utils/Augeas.cc:95
-#| msgid "An idmapd configuration file is required."
msgid "No configuration file exists or could be parsed."
msgstr "Конфигурационные файлы не существуют или не моут быть обработаны."
#: ../src/utils/Augeas.cc:98
-#| msgid "Error parsing the CRL."
msgid "Error parsing zypper.conf:"
msgstr "Ошибка при обработке zypper.conf:"
@@ -2461,8 +2439,8 @@ msgstr "Повтор через %u секунд..."
msgid "a/r/i"
msgstr "a/r/i"
-#: ../src/utils/prompt.cc:228, c-format
-#| msgid "autoselect %s after %u "
+#: ../src/utils/prompt.cc:228
+#, c-format
msgid "Autoselecting '%s' after %u second."
msgid_plural "Autoselecting '%s' after %u seconds."
msgstr[0] "автоматический выбор '%s' через %u секунду."
@@ -2470,7 +2448,6 @@ msgstr[1] "автоматический выбор '%s' через %u секун
msgstr[2] "автоматический выбор '%s' через %u секунд."
#: ../src/utils/prompt.cc:247
-#| msgid "Preparing installation..."
msgid "Trying again..."
msgstr "Повторная попытка..."
@@ -2480,8 +2457,8 @@ msgid "Invalid answer '%s'."
msgstr "Неверный ответ '%s'."
#. translators: the %s are: 'y', 'yes' (translated), 'n', and 'no' (translated).
-#: ../src/utils/prompt.cc:344, c-format
-#| msgid "Enter 'y' for '%s' or 'n' for '%s' if nothing else works for you."
+#: ../src/utils/prompt.cc:344
+#, c-format
msgid "Enter '%s' for '%s' or '%s' for '%s' if nothing else works for you."
msgstr "Введите '%s' для '%s' или '%s' для '%s', если больше ничего не работает."
@@ -2513,23 +2490,6 @@ msgid "Error"
msgstr "Ошибка"
#: ../src/Zypper.cc:153
-#| msgid ""
-#| " Global Options:\n"
-#| "\t--help, -h\t\tHelp.\n"
-#| "\t--version, -V\t\tOutput the version number.\n"
-#| "\t--quiet, -q\t\tSuppress normal output, print only error\n"
-#| "\t\t\t\tmessages.\n"
-#| "\t--verbose, -v\t\tIncrease verbosity.\n"
-#| "\t--no-abbrev, -A\t\tDo not abbreviate text in tables.\n"
-#| "\t--table-style, -s\tTable style (integer).\n"
-#| "\t--rug-compatible, -r\tTurn on rug compatibility.\n"
-#| "\t--non-interactive, -n\tDo not ask anything, use default answers\n"
-#| "\t\t\t\tautomatically.\n"
-#| "\t--xmlout, -x\t\tSwitch to XML output.\n"
-#| "\t--reposd-dir, -D <dir>\tUse alternative repository definition files\n"
-#| "\t\t\t\tdirectory.\n"
-#| "\t--cache-dir, -C <dir>\tUse alternative meta-data cache directory.\n"
-#| "\t--raw-cache-dir <dir>\tUse alternative raw meta-data cache directory.\n"
msgid ""
" Global Options:\n"
"\t--help, -h\t\tHelp.\n"
@@ -2712,11 +2672,6 @@ msgstr ""
"\twhat-provides, wp\tВывести список пакетов, предоставляющих указанную способность.\n"
#: ../src/Zypper.cc:248
-#| msgid ""
-#| " Package Locks:\n"
-#| "\taddlock, al\t\tAdd a package lock.\n"
-#| "\tremovelock, rl\t\tRemove a package lock.\n"
-#| "\tlocks, ll\t\tList current package locks.\n"
msgid ""
" Package Locks:\n"
"\taddlock, al\t\tAdd a package lock.\n"
@@ -2825,26 +2780,8 @@ msgstr "Неожиданное исключение."
#. TranslatorExplanation the first %s = "package, patch, pattern, product"
#. and the second %s = "package"
-#: ../src/Zypper.cc:912, c-format
-#| msgid ""
-#| "install (in) [options] <capability|rpm_file_uri> ...\n"
-#| "\n"
-#| "Install packages with specified capabilities or RPM files with specified location. A capability is NAME[OP<VERSION>], where OP is one of <, <=, =, >=, >.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-r, --repo <alias|#|URI> Install packages only from the specified repository.\n"
-#| "-t, --type <type> Type of package (%s).\n"
-#| " Default: %s.\n"
-#| "-n, --name Select packages by plain name, not by capability.\n"
-#| "-C, --capability Select packages by capability.\n"
-#| "-f, --force Install even if the item is already installed (reinstall).\n"
-#| "-l, --auto-agree-with-licenses Automatically say 'yes' to third party license confirmation prompt.\n"
-#| " See 'man zypper' for more details.\n"
-#| " --debug-solver Create solver test case for debugging.\n"
-#| " --no-recommends Do not install recommended packages, only required.\n"
-#| "-R, --no-force-resolution Do not force the solver to find solution, let it ask.\n"
-#| " --force-resolution Force the solver to find a solution (even an agressive).\n"
-#| "-D, --dry-run Test the installation, do not actually install.\n"
+#: ../src/Zypper.cc:912
+#, c-format
msgid ""
"install (in) [options] <capability|rpm_file_uri> ...\n"
"\n"
@@ -2905,22 +2842,8 @@ msgstr ""
#. TranslatorExplanation the first %s = "package, patch, pattern, product"
#. and the second %s = "package"
-#: ../src/Zypper.cc:969, c-format
-#| msgid ""
-#| "remove (rm) [options] <capability> ...\n"
-#| "\n"
-#| "Remove packages with specified capabilities. A capability is NAME[OP<VERSION>], where OP is one of <, <=, =, >=, >.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-r, --repo <alias|#|URI> Operate only with packages from the specified repository.\n"
-#| "-t, --type <type> Type of package (%s).\n"
-#| " Default: %s.\n"
-#| "-n, --name Select packages by plain name, not by capability.\n"
-#| "-C, --capability Select packages by capability.\n"
-#| " --debug-solver Create solver test case for debugging.\n"
-#| "-R, --no-force-resolution Do not force the solver to find solution, let it ask.\n"
-#| " --force-resolution Force the solver to find a solution (even an agressive).\n"
-#| "-D, --dry-run Test the removal, do not actually remove.\n"
+#: ../src/Zypper.cc:969
+#, c-format
msgid ""
"remove (rm) [options] <capability> ...\n"
"\n"
@@ -2977,15 +2900,6 @@ msgstr ""
"-r, --repo <псевдоним|#|URI> Установить пакеты только из указанных репозиториев.\n"
#: ../src/Zypper.cc:1028
-#| msgid ""
-#| "verify (ve) [options]\n"
-#| "\n"
-#| "Check whether dependencies of installed packages are satisfied and repair eventual dependency problems.\n"
-#| "\n"
-#| " Command options:\n"
-#| " --no-recommends Do not install recommended packages, only required.\n"
-#| "-D, --dry-run Test the repair, do not actually do anything to the system.\n"
-#| "-r, --repo <alias|#|URI> Use only specified repositories to install missing packages.\n"
msgid ""
"verify (ve) [options]\n"
"\n"
@@ -3032,16 +2946,8 @@ msgstr ""
" --debug-solver Создать набор тестовых данных решающей программы для отладки.\n"
#. translators: the %s = "ris" (the only service type currently supported)
-#: ../src/Zypper.cc:1081, c-format
-#| msgid ""
-#| "addservice (as) [options] <URI> <alias>\n"
-#| "\n"
-#| "Add a repository index service to the system.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-t, --type <TYPE> Type of the service (%s).\n"
-#| "-d, --disable Add the service as disabled.\n"
-#| "-n, --name Specify descriptive name for the service.\n"
+#: ../src/Zypper.cc:1081
+#, c-format
msgid ""
"addservice (as) [options] <URI> <alias>\n"
"\n"
@@ -3179,23 +3085,8 @@ msgstr ""
"-r, --with-repos Обновить также и репозитории.\n"
#. translators: the %s = "yast2, rpm-md, plaindir"
-#: ../src/Zypper.cc:1242, c-format
-#| msgid ""
-#| "addrepo (ar) [options] <URI> <alias>\n"
-#| "addrepo (ar) [options] <FILE.repo>\n"
-#| "\n"
-#| "Add a repository to the sytem. The repository can be specified by its URI or can be read from specified .repo file (even remote).\n"
-#| "\n"
-#| " Command options:\n"
-#| "-r, --repo <FILE.repo> Just another means to specify a .repo file to read.\n"
-#| "-t, --type <TYPE> Type of repository (%s).\n"
-#| "-d, --disable Add the repository as disabled.\n"
-#| "-c, --check Probe URI.\n"
-#| "-C, --no-check Don't probe URI, probe later during refresh.\n"
-#| "-n, --name Specify descriptive name for the repository.\n"
-#| "-k, --keep-packages Enable RPM files caching.\n"
-#| "-K, --no-keep-packages Disable RPM files caching.\n"
-#| "-f, --refresh Enable autorefresh of the repository.\n"
+#: ../src/Zypper.cc:1242
+#, c-format
msgid ""
"addrepo (ar) [options] <URI> <alias>\n"
"addrepo (ar) [options] <file.repo>\n"
@@ -3310,28 +3201,8 @@ msgstr ""
#. translators: %s is "--all|--remote|--local|--medium-type"
#. and "--all, --remote, --local, --medium-type"
-#: ../src/Zypper.cc:1379, c-format
-#| msgid ""
-#| "modifyrepo (mr) <options> <alias|#|URI>\n"
-#| "modifyrepo (mr) <options> <%s>\n"
-#| "\n"
-#| "Modify properties of repositories specified by alias, number, or URI, or by the\n"
-#| "'%s' aggregate options.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-d, --disable Disable the repository (but don't remove it).\n"
-#| "-e, --enable Enable a disabled repository.\n"
-#| "-r, --refresh Enable auto-refresh of the repository.\n"
-#| "-R, --no-refresh Disable auto-refresh of the repository.\n"
-#| "-n, --name Set a descriptive name for the repository.\n"
-#| "-p, --priority <1-99> Set priority of the repository.\n"
-#| "-k, --keep-packages Enable RPM files caching.\n"
-#| "-K, --no-keep-packages Disable RPM files caching.\n"
-#| "\n"
-#| "-a, --all Apply changes to all repositories.\n"
-#| "-l, --local Apply changes to all local repositories.\n"
-#| "-t, --remote Apply changes to all remote repositories.\n"
-#| "-m, --medium-type <type> Apply changes to repositories of specified type.\n"
+#: ../src/Zypper.cc:1379
+#, c-format
msgid ""
"modifyrepo (mr) <options> <alias|#|URI> ...\n"
"modifyrepo (mr) <options> <%s>\n"
@@ -3403,16 +3274,6 @@ msgstr ""
"-s, --services Обновить службы перед обновлением репозиториев.\n"
#: ../src/Zypper.cc:1448
-#| msgid ""
-#| "clean [alias|#|URI] ...\n"
-#| "\n"
-#| "Clean local caches.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-r, --repo <alias|#|URI> Clean only specified repositories.\n"
-#| "-m, --metadata Clean metadata cache.\n"
-#| "-M, --raw-metadata Clean raw metadata cache.\n"
-#| "-a, --all Clean both metadata and package caches.\n"
msgid ""
"clean (cc) [alias|#|URI] ...\n"
"\n"
@@ -3470,29 +3331,8 @@ msgstr ""
#. TranslatorExplanation the first %s = "package, patch, pattern, product"
#. and the second %s = "patch"
-#: ../src/Zypper.cc:1529, c-format
-#| msgid ""
-#| "update (up) [options] ...\n"
-#| "\n"
-#| "Update all or specified installed packages with newer versions, if possible.\n"
-#| "\n"
-#| " Command options:\n"
-#| "\n"
-#| "-t, --type <type> Type of package (%s).\n"
-#| " Default: %s.\n"
-#| "-r, --repo <alias|#|URI> Limit updates to the specified repository.\n"
-#| " --skip-interactive Skip interactive updates.\n"
-#| "-l, --auto-agree-with-licenses Automatically say 'yes' to third party license\n"
-#| " confirmation prompt.\n"
-#| " See man zypper for more details.\n"
-#| " --best-effort Do a 'best effort' approach to update. Updates\n"
-#| " to a lower than the latest version are\n"
-#| " also acceptable.\n"
-#| " --debug-solver Create solver test case for debugging.\n"
-#| " --no-recommends Do not install recommended packages, only required.\n"
-#| "-R, --no-force-resolution Do not force the solver to find solution, let it ask.\n"
-#| " --force-resolution Force the solver to find a solution (even an agressive).\n"
-#| "-D, --dry-run Test the update, do not actually update.\n"
+#: ../src/Zypper.cc:1529
+#, c-format
msgid ""
"update (up) [options] ...\n"
"\n"
@@ -3547,20 +3387,6 @@ msgstr ""
"-D, --dry-run Проверить обновление, не обновлять на самом деле.\n"
#: ../src/Zypper.cc:1574
-#| msgid ""
-#| "patch [options]\n"
-#| "\n"
-#| "Install all available needed patches.\n"
-#| "\n"
-#| " Command options:\n"
-#| "\n"
-#| "-r, --repo <alias|#|URI> Work only with specified repository.\n"
-#| " --skip-interactive Skip interactive patches.\n"
-#| "-l, --auto-agree-with-licenses Automatically say 'yes' to third party license\n"
-#| " confirmation prompt.\n"
-#| " See man zypper for more details.\n"
-#| " --debug-solver Create solver test case for debugging.\n"
-#| "-D, --dry-run Test the update, do not actually update.\n"
msgid ""
"patch [options]\n"
"\n"
@@ -3615,19 +3441,6 @@ msgstr ""
"-r, --repo <псевдоним|#|URI> Вывести список исправлений только из указанного репозитория.\n"
#: ../src/Zypper.cc:1630
-#| msgid ""
-#| "dist-upgrade (dup) [options]\n"
-#| "\n"
-#| "Perform a distribution upgrade.\n"
-#| "\n"
-#| " Command options:\n"
-#| "\n"
-#| "-r, --repo <alias|#|URI> Limit the upgrade to the specified repository.\n"
-#| " --no-recommends Do not install recommended packages, only required.\n"
-#| "-l, --auto-agree-with-licenses Automatically say 'yes' to third party license confirmation prompt.\n"
-#| " See man zypper for more details.\n"
-#| " --debug-solver Create solver test case for debugging\n"
-#| "-D, --dry-run Test the upgrade, do not actually upgrade\n"
msgid ""
"dist-upgrade (dup) [options]\n"
"\n"
@@ -3816,16 +3629,8 @@ msgstr ""
"-i, --installed-only Показывать только установленные продукты.\n"
"-u, --uninstalled-only Показывать только неустановленные продукты.\n"
-#: ../src/Zypper.cc:1843, c-format
-#| msgid ""
-#| "info (if) [options] <name> ...\n"
-#| "\n"
-#| "Show detailed information for specified packages.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-r, --repo <alias|#|URI> Work only with the specified repository.\n"
-#| "-t, --type <type> Type of package (%s).\n"
-#| " Default: %s."
+#: ../src/Zypper.cc:1843
+#, c-format
msgid ""
"info (if) [options] <name> ...\n"
"\n"
@@ -4023,12 +3828,6 @@ msgstr ""
"-m, --match Считать отсутствующий номер релиза любым релизом.\n"
#: ../src/Zypper.cc:2120
-#| msgid ""
-#| "licenses\n"
-#| "\n"
-#| "Report Licenses and EULA of currently installed software packages.\n"
-#| "\n"
-#| "This command has no additional options.\n"
msgid ""
"licenses\n"
"\n"
@@ -4333,8 +4132,8 @@ msgstr "Для обновления пакетов требуются права
msgid "Root privileges are required for performing a distribution upgrade."
msgstr "Для обновления дистрибутива требуются права администратора."
-#: ../src/Zypper.cc:3794, c-format
-#| msgid "'%1' does not exist."
+#: ../src/Zypper.cc:3794
+#, c-format
msgid "Type '%s' does not support %s."
msgstr "Тип '%s' не поддерживает %s."
diff --git a/po/sk.po b/po/sk.po
index a129147..1208c7e 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -1,19 +1,17 @@
-# translation of zypper.sk.po to Slovak
# Slovak language translation of zypper messages.
#
# Copyright (C) 2006, SUSE Linux GmbH, Nuremberg
#
# Rastislav Krupansky <ra100(a)atlas.sk>, 2008.
# Ladislav Michnovič <lmichnovic(a)suse.cz>, 2008.
-# Ján Kupec <jkupec(a)suse.cz>, 2008.
-# Jan Kupec <jkupec(a)suse.cz>, 2009.
+# Ján Kupec <jkupec(a)suse.cz>, 2008, 2009.
msgid ""
msgstr ""
-"Project-Id-Version: zypper.sk\n"
+"Project-Id-Version: zypper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-06-08 16:44+0200\n"
"PO-Revision-Date: 2009-06-12 16:09+0200\n"
-"Last-Translator: Jan Kupec <jkupec(a)suse.cz>\n"
+"Last-Translator: Ján Kupec <jkupec(a)suse.cz>\n"
"Language-Team: Slovak <sk-i18n(a)lists.linux.sk>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -209,7 +207,6 @@ msgstr "Prosím vložte médium [%s] #%d a napíšte 'a' pre pokračovanie alebo
#. Translate the a/r/i part exactly as you did the a/r/i string.
#. the 'u' reply means 'Change URI'.
#: ../src/callbacks/media.h:106
-#| msgid "a/r/i"
msgid "a/r/i/u"
msgstr "k/z/i/u"
@@ -241,7 +238,6 @@ msgstr "Ukončiť, znova, ignorovať?"
#. translators: this is a prompt label, will appear as "New URI: "
#: ../src/callbacks/media.h:130
-#| msgid "URI"
msgid "New URI"
msgstr "Nová URI adresa"
@@ -328,7 +324,6 @@ msgstr "Neznámy príkaz '%s'"
#: ../src/Config.cc:73
#, c-format
-#| msgid "Unknown command option"
msgid "Unknown configuration option '%s'"
msgstr "Neznáma konfiguračná voľba '%s'"
@@ -416,7 +411,6 @@ msgid "Requires:"
msgstr "Vyžaduje:"
#: ../src/info.cc:144
-#| msgid "Recommended"
msgid "Recommends:"
msgstr "Odporúča:"
@@ -504,7 +498,6 @@ msgid "Provides:"
msgstr "Poskytuje:"
#: ../src/info.cc:276
-#| msgid "Conflicts"
msgid "Conflicts:"
msgstr "Vylučuje:"
@@ -1106,7 +1099,6 @@ msgstr "Čistím medzipamať surových údajov repozitára '%s'."
#: ../src/repos.cc:1171
#, c-format
-#| msgid "Cleaning raw metadata cache for '%s'."
msgid "Keeping raw metadata cache for %s '%s'."
msgstr "Ponechávam si medzipamať surových údajov repozitára %s '%s'."
@@ -1265,13 +1257,11 @@ msgstr "Priorita repozitára '%s' zostáva nezmenená (%d)."
#: ../src/repos.cc:1731
#, c-format
-#| msgid "Repository '%s' has been sucessfully enabled."
msgid "Repository '%s' has been successfully enabled."
msgstr "Repozitár '%s' bol úspešne zapnutý."
#: ../src/repos.cc:1734
#, c-format
-#| msgid "Repository '%s' has been sucessfully disabled."
msgid "Repository '%s' has been successfully disabled."
msgstr "Repozitár '%s' bol úspešne vypnutý."
@@ -1728,13 +1718,11 @@ msgstr "a/n/p/v/c/r/m/d/g"
#. translators: help text for 'y' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:478
-#| msgid "Accept the summary and proceed with installation/removal of packages."
msgid "Yes, accept the summary and proceed with installation/removal of packages."
msgstr "Áno, prijať návrh a pokračovať v inštalácii/odstraňovaní balíkov."
#. translators: help text for 'n' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:480
-#| msgid "Cancel the operation."
msgid "No, cancel the operation."
msgstr "Nie, zrušiť operáciu."
@@ -2061,7 +2049,6 @@ msgstr "Po tejto operácii sa uvoľní %s."
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:628
-#| msgid "No packages to update"
msgid "package to upgrade"
msgid_plural "packages to upgrade"
msgstr[0] "balík bude aktualizovaný"
@@ -2078,7 +2065,6 @@ msgstr[2] "deaktualizovaných"
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:643
-#| msgid "No packages to update"
msgid "package to downgrade"
msgid_plural "packages to downgrade"
msgstr[0] "balík bude deaktualizovaný"
@@ -2095,7 +2081,6 @@ msgstr[2] "nových"
#. translators: this text will be preceded by a number e.g. "5 new to install"
#: ../src/Summary.cc:657
-#| msgid "The package is not installed"
msgid "new package to install"
msgid_plural "new packages to install"
msgstr[0] "nový balík bude nainštalovaný"
@@ -2104,7 +2089,6 @@ msgstr[2] "nových balíkov bude nainštalovaných"
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:669
-#| msgid "install"
msgid "to reinstall"
msgid_plural "to reinstall"
msgstr[0] "preinštalovaný"
@@ -2113,7 +2097,6 @@ msgstr[2] "preinštalovaných"
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:672
-#| msgid "The package is not installed"
msgid "package to reinstall"
msgid_plural "packages to reinstall"
msgstr[0] "balík bude preinštalovaný"
@@ -2122,7 +2105,6 @@ msgstr[2] "balíkov bude preinštalovaných"
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:684
-#| msgid "%s remove ok"
msgid "to remove"
msgid_plural "to remove"
msgstr[0] "odstránený"
@@ -2131,7 +2113,6 @@ msgstr[2] "odstránených"
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:687
-#| msgid "No packages to update"
msgid "package to remove"
msgid_plural "packages to remove"
msgstr[0] "balík bude odstránený"
@@ -2148,8 +2129,6 @@ msgstr[2] "zmení dodávateľa"
#. translators: this text will be preceded by a number e.g. "5 packages ..."
#: ../src/Summary.cc:702
-#| msgid "The following package is going to change vendor:"
-#| msgid_plural "The following packages are going to change vendor:"
msgid "package will change vendor"
msgid_plural "packages will change vendor"
msgstr[0] "balík zmení dodávateľa"
@@ -2259,28 +2238,23 @@ msgstr "Pre '%s' neexistuje žiadny kandidát na aktualizáciu."
# progress stage
#: ../src/utils/Augeas.cc:26
-#| msgid "Changed configuration files for %s:"
msgid "Cannot initialize configuration file parser."
msgstr "Nepodarilo sa spustiť čítač konfiguračných súborov."
#: ../src/utils/Augeas.cc:43 ../src/utils/Augeas.cc:55
-#| msgid "Reading the config file failed"
msgid "Augeas error: setting config file to load failed."
msgstr "Chyba Augeasu: nepodarilo sa nastaviť konfiguračný súbor pre načítanie."
#: ../src/utils/Augeas.cc:61
-#| msgid "Could not load the global configuration."
msgid "Could not parse the config files."
msgstr "Nepodarilo sa načítať konfiguračné súbory."
# progress stage
#: ../src/utils/Augeas.cc:95
-#| msgid "Changed configuration files for %s:"
msgid "No configuration file exists or could be parsed."
msgstr "Konfiguračné súbory neexistujú alebo sa ich nepodarilo načítať."
#: ../src/utils/Augeas.cc:98
-#| msgid "Error reading services:"
msgid "Error parsing zypper.conf:"
msgstr "Chyba pri čítaní zypper.conf:"
@@ -2457,7 +2431,6 @@ msgstr "k/z/i"
#: ../src/utils/prompt.cc:228
#, c-format
-#| msgid "autoselect %s after %u "
msgid "Autoselecting '%s' after %u second."
msgid_plural "Autoselecting '%s' after %u seconds."
msgstr[0] "Automatická odpoveď '%s' po '%u' sekunde."
@@ -2465,7 +2438,6 @@ msgstr[1] "Automatická odpoveď '%s' po '%u' sekundách."
msgstr[2] "Automatická odpoveď '%s' po '%u' sekundách."
#: ../src/utils/prompt.cc:247
-#| msgid "Preparing installation..."
msgid "Trying again..."
msgstr "Skúšam znova..."
@@ -2477,7 +2449,6 @@ msgstr "Neplatná odpoveď '%s'."
#. translators: the %s are: 'y', 'yes' (translated), 'n', and 'no' (translated).
#: ../src/utils/prompt.cc:344
#, c-format
-#| msgid "Enter 'y' for '%s' or 'n' for '%s' if nothing else works for you."
msgid "Enter '%s' for '%s' or '%s' for '%s' if nothing else works for you."
msgstr "Zadajte '%s' pre '%s' alebo '%s' pre '%s', ak nič iné nefunguje."
@@ -2507,23 +2478,6 @@ msgid "Error"
msgstr "Chyba"
#: ../src/Zypper.cc:153
-#| msgid ""
-#| " Global Options:\n"
-#| "\t--help, -h\t\tHelp.\n"
-#| "\t--version, -V\t\tOutput the version number.\n"
-#| "\t--quiet, -q\t\tSuppress normal output, print only error\n"
-#| "\t\t\t\tmessages.\n"
-#| "\t--verbose, -v\t\tIncrease verbosity.\n"
-#| "\t--no-abbrev, -A\t\tDo not abbreviate text in tables.\n"
-#| "\t--table-style, -s\tTable style (integer).\n"
-#| "\t--rug-compatible, -r\tTurn on rug compatibility.\n"
-#| "\t--non-interactive, -n\tDo not ask anything, use default answers\n"
-#| "\t\t\t\tautomatically.\n"
-#| "\t--xmlout, -x\t\tSwitch to XML output.\n"
-#| "\t--reposd-dir, -D <dir>\tUse alternative repository definition files\n"
-#| "\t\t\t\tdirectory.\n"
-#| "\t--cache-dir, -C <dir>\tUse alternative meta-data cache directory.\n"
-#| "\t--raw-cache-dir <dir>\tUse alternative raw meta-data cache directory.\n"
msgid ""
" Global Options:\n"
"\t--help, -h\t\tHelp.\n"
@@ -2704,11 +2658,6 @@ msgstr ""
"\twhat-provides, wp\tZobraz zoznam balíkov, ktoré poskytujú zadanú schopnosť.\n"
#: ../src/Zypper.cc:248
-#| msgid ""
-#| " Package Locks:\n"
-#| "\taddlock, al\t\tAdd a package lock.\n"
-#| "\tremovelock, rl\t\tRemove a package lock.\n"
-#| "\tlocks, ll\t\tList current package locks.\n"
msgid ""
" Package Locks:\n"
"\taddlock, al\t\tAdd a package lock.\n"
@@ -2818,25 +2767,6 @@ msgstr "Neočakávaná výnimka. "
#. and the second %s = "package"
#: ../src/Zypper.cc:912
#, c-format
-#| msgid ""
-#| "install (in) [options] <capability|rpm_file_uri> ...\n"
-#| "\n"
-#| "Install packages with specified capabilities or RPM files with specified location. A capability is NAME[OP<VERSION>], where OP is one of <, <=, =, >=, >.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-r, --repo <alias|#|URI> Install packages only from the specified repository.\n"
-#| "-t, --type <type> Type of package (%s).\n"
-#| " Default: %s.\n"
-#| "-n, --name Select packages by plain name, not by capability.\n"
-#| "-C, --capability Select packages by capability.\n"
-#| "-f, --force Install even if the item is already installed (reinstall).\n"
-#| "-l, --auto-agree-with-licenses Automatically say 'yes' to third party license confirmation prompt.\n"
-#| " See 'man zypper' for more details.\n"
-#| " --debug-solver Create solver test case for debugging.\n"
-#| " --no-recommends Do not install recommended packages, only required.\n"
-#| "-R, --no-force-resolution Do not force the solver to find solution, let it ask.\n"
-#| " --force-resolution Force the solver to find a solution (even an agressive).\n"
-#| "-D, --dry-run Test the installation, do not actually install.\n"
msgid ""
"install (in) [options] <capability|rpm_file_uri> ...\n"
"\n"
@@ -2892,21 +2822,6 @@ msgstr ""
#. and the second %s = "package"
#: ../src/Zypper.cc:969
#, c-format
-#| msgid ""
-#| "remove (rm) [options] <capability> ...\n"
-#| "\n"
-#| "Remove packages with specified capabilities. A capability is NAME[OP<VERSION>], where OP is one of <, <=, =, >=, >.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-r, --repo <alias|#|URI> Operate only with packages from the specified repository.\n"
-#| "-t, --type <type> Type of package (%s).\n"
-#| " Default: %s.\n"
-#| "-n, --name Select packages by plain name, not by capability.\n"
-#| "-C, --capability Select packages by capability.\n"
-#| " --debug-solver Create solver test case for debugging.\n"
-#| "-R, --no-force-resolution Do not force the solver to find solution, let it ask.\n"
-#| " --force-resolution Force the solver to find a solution (even an agressive).\n"
-#| "-D, --dry-run Test the removal, do not actually remove.\n"
msgid ""
"remove (rm) [options] <capability> ...\n"
"\n"
@@ -2961,15 +2876,6 @@ msgstr ""
"-r, --repo <alias|#|URI> Inštaluj len balíky zo zadaných repozitárov.\n"
#: ../src/Zypper.cc:1028
-#| msgid ""
-#| "verify (ve) [options]\n"
-#| "\n"
-#| "Check whether dependencies of installed packages are satisfied and repair eventual dependency problems.\n"
-#| "\n"
-#| " Command options:\n"
-#| " --no-recommends Do not install recommended packages, only required.\n"
-#| "-D, --dry-run Test the repair, do not actually do anything to the system.\n"
-#| "-r, --repo <alias|#|URI> Use only specified repositories to install missing packages.\n"
msgid ""
"verify (ve) [options]\n"
"\n"
@@ -3016,15 +2922,6 @@ msgstr ""
#. translators: the %s = "ris" (the only service type currently supported)
#: ../src/Zypper.cc:1081
#, c-format
-#| msgid ""
-#| "addservice (as) [options] <URI> <alias>\n"
-#| "\n"
-#| "Add a repository index service to the system.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-t, --type <TYPE> Type of the service (%s).\n"
-#| "-d, --disable Add the service as disabled.\n"
-#| "-n, --name Specify descriptive name for the service.\n"
msgid ""
"addservice (as) [options] <URI> <alias>\n"
"\n"
@@ -3164,22 +3061,6 @@ msgstr ""
#. translators: the %s = "yast2, rpm-md, plaindir"
#: ../src/Zypper.cc:1242
#, c-format
-#| msgid ""
-#| "addrepo (ar) [options] <URI> <alias>\n"
-#| "addrepo (ar) [options] <FILE.repo>\n"
-#| "\n"
-#| "Add a repository to the sytem. The repository can be specified by its URI or can be read from specified .repo file (even remote).\n"
-#| "\n"
-#| " Command options:\n"
-#| "-r, --repo <FILE.repo> Just another means to specify a .repo file to read.\n"
-#| "-t, --type <TYPE> Type of repository (%s).\n"
-#| "-d, --disable Add the repository as disabled.\n"
-#| "-c, --check Probe URI.\n"
-#| "-C, --no-check Don't probe URI, probe later during refresh.\n"
-#| "-n, --name Specify descriptive name for the repository.\n"
-#| "-k, --keep-packages Enable RPM files caching.\n"
-#| "-K, --no-keep-packages Disable RPM files caching.\n"
-#| "-f, --refresh Enable autorefresh of the repository.\n"
msgid ""
"addrepo (ar) [options] <URI> <alias>\n"
"addrepo (ar) [options] <file.repo>\n"
@@ -3296,27 +3177,6 @@ msgstr ""
#. and "--all, --remote, --local, --medium-type"
#: ../src/Zypper.cc:1379
#, c-format
-#| msgid ""
-#| "modifyrepo (mr) <options> <alias|#|URI>\n"
-#| "modifyrepo (mr) <options> <%s>\n"
-#| "\n"
-#| "Modify properties of repositories specified by alias, number, or URI, or by the\n"
-#| "'%s' aggregate options.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-d, --disable Disable the repository (but don't remove it).\n"
-#| "-e, --enable Enable a disabled repository.\n"
-#| "-r, --refresh Enable auto-refresh of the repository.\n"
-#| "-R, --no-refresh Disable auto-refresh of the repository.\n"
-#| "-n, --name Set a descriptive name for the repository.\n"
-#| "-p, --priority <1-99> Set priority of the repository.\n"
-#| "-k, --keep-packages Enable RPM files caching.\n"
-#| "-K, --no-keep-packages Disable RPM files caching.\n"
-#| "\n"
-#| "-a, --all Apply changes to all repositories.\n"
-#| "-l, --local Apply changes to all local repositories.\n"
-#| "-t, --remote Apply changes to all remote repositories.\n"
-#| "-m, --medium-type <type> Apply changes to repositories of specified type.\n"
msgid ""
"modifyrepo (mr) <options> <alias|#|URI> ...\n"
"modifyrepo (mr) <options> <%s>\n"
@@ -3387,16 +3247,6 @@ msgstr ""
"-s, --services Aktualizuj aj služby pred aktualizáciou repozitárov.\n"
#: ../src/Zypper.cc:1448
-#| msgid ""
-#| "clean [alias|#|URI] ...\n"
-#| "\n"
-#| "Clean local caches.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-r, --repo <alias|#|URI> Clean only specified repositories.\n"
-#| "-m, --metadata Clean metadata cache.\n"
-#| "-M, --raw-metadata Clean raw metadata cache.\n"
-#| "-a, --all Clean both metadata and package caches.\n"
msgid ""
"clean (cc) [alias|#|URI] ...\n"
"\n"
@@ -3454,28 +3304,6 @@ msgstr ""
#. and the second %s = "patch"
#: ../src/Zypper.cc:1529
#, c-format
-#| msgid ""
-#| "update (up) [options] ...\n"
-#| "\n"
-#| "Update all or specified installed packages with newer versions, if possible.\n"
-#| "\n"
-#| " Command options:\n"
-#| "\n"
-#| "-t, --type <type> Type of package (%s).\n"
-#| " Default: %s.\n"
-#| "-r, --repo <alias|#|URI> Limit updates to the specified repository.\n"
-#| " --skip-interactive Skip interactive updates.\n"
-#| "-l, --auto-agree-with-licenses Automatically say 'yes' to third party license\n"
-#| " confirmation prompt.\n"
-#| " See man zypper for more details.\n"
-#| " --best-effort Do a 'best effort' approach to update. Updates\n"
-#| " to a lower than the latest version are\n"
-#| " also acceptable.\n"
-#| " --debug-solver Create solver test case for debugging.\n"
-#| " --no-recommends Do not install recommended packages, only required.\n"
-#| "-R, --no-force-resolution Do not force the solver to find solution, let it ask.\n"
-#| " --force-resolution Force the solver to find a solution (even an agressive).\n"
-#| "-D, --dry-run Test the update, do not actually update.\n"
msgid ""
"update (up) [options] ...\n"
"\n"
@@ -3527,20 +3355,6 @@ msgstr ""
"-D, --dry-run Beh naprázdno. Len otestuj aktualizáciu, ale nič skutočne neaktualizuj.\n"
#: ../src/Zypper.cc:1574
-#| msgid ""
-#| "patch [options]\n"
-#| "\n"
-#| "Install all available needed patches.\n"
-#| "\n"
-#| " Command options:\n"
-#| "\n"
-#| "-r, --repo <alias|#|URI> Work only with specified repository.\n"
-#| " --skip-interactive Skip interactive patches.\n"
-#| "-l, --auto-agree-with-licenses Automatically say 'yes' to third party license\n"
-#| " confirmation prompt.\n"
-#| " See man zypper for more details.\n"
-#| " --debug-solver Create solver test case for debugging.\n"
-#| "-D, --dry-run Test the update, do not actually update.\n"
msgid ""
"patch [options]\n"
"\n"
@@ -3593,19 +3407,6 @@ msgstr ""
"-r, --repo <alias|#|URI> Pracuj len so zadaným repozitárom.\n"
#: ../src/Zypper.cc:1630
-#| msgid ""
-#| "dist-upgrade (dup) [options]\n"
-#| "\n"
-#| "Perform a distribution upgrade.\n"
-#| "\n"
-#| " Command options:\n"
-#| "\n"
-#| "-r, --repo <alias|#|URI> Limit the upgrade to the specified repository.\n"
-#| " --no-recommends Do not install recommended packages, only required.\n"
-#| "-l, --auto-agree-with-licenses Automatically say 'yes' to third party license confirmation prompt.\n"
-#| " See man zypper for more details.\n"
-#| " --debug-solver Create solver test case for debugging\n"
-#| "-D, --dry-run Test the upgrade, do not actually upgrade\n"
msgid ""
"dist-upgrade (dup) [options]\n"
"\n"
@@ -3794,15 +3595,6 @@ msgstr ""
#: ../src/Zypper.cc:1843
#, c-format
-#| msgid ""
-#| "info (if) [options] <name> ...\n"
-#| "\n"
-#| "Show detailed information for specified packages.\n"
-#| "\n"
-#| " Command options:\n"
-#| "-r, --repo <alias|#|URI> Work only with the specified repository.\n"
-#| "-t, --type <type> Type of package (%s).\n"
-#| " Default: %s."
msgid ""
"info (if) [options] <name> ...\n"
"\n"
@@ -3822,8 +3614,7 @@ msgstr ""
" Voľby príkazu:\n"
"-r, --repo <alias|#|URI> Pracuj len so zadaným repozitárom.\n"
"-t, --type <type> Typ balíka (%s).\n"
-" Prednastavený typ: %s. "
-" --requires Zobraz aj požadované závislosti.\n"
+" Prednastavený typ: %s. --requires Zobraz aj požadované závislosti.\n"
" --recommends Zobraz aj odporúčané závislosti."
#: ../src/Zypper.cc:1868
@@ -4003,12 +3794,6 @@ msgstr ""
"-m, --match Berie chýbajúce číslo vydania ako akékoľvek vydanie.\n"
#: ../src/Zypper.cc:2120
-#| msgid ""
-#| "licenses\n"
-#| "\n"
-#| "Report Licenses and EULA of currently installed software packages.\n"
-#| "\n"
-#| "This command has no additional options.\n"
msgid ""
"licenses\n"
"\n"
@@ -4315,7 +4100,6 @@ msgstr "Pre kompletnú aktualizáciu systému sú potrebné práva správcu syst
#: ../src/Zypper.cc:3794
#, c-format
-#| msgid "The disk does not exist."
msgid "Type '%s' does not support %s."
msgstr "Typ '%s' nepodporuje %s."
@@ -4353,4 +4137,3 @@ msgstr "Popis"
#: ../src/Zypper.cc:4129
msgid "Resolvable Type"
msgstr "Typ balíka"
-
diff --git a/po/uk.po b/po/uk.po
index 35215ef..fc650d7 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -13,7 +13,7 @@ msgstr ""
"Project-Id-Version: zypper.uk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-06-08 16:44+0200\n"
-"PO-Revision-Date: 2009-01-17 00:39-0800\n"
+"PO-Revision-Date: 2009-06-15 23:28-0700\n"
"Last-Translator: Ivan Petrouchtchak <fr.ivan(a)ukrainian-orthodox.org>\n"
"Language-Team: Ukrainian <translation(a)linux.org.ua>\n"
"MIME-Version: 1.0\n"
@@ -210,30 +210,28 @@ msgstr "Будь ласка, вставте носій [%s] # %d і введіт
#. Translate the a/r/i part exactly as you did the a/r/i string.
#. the 'u' reply means 'Change URI'.
#: ../src/callbacks/media.h:106
-#, fuzzy
-#| msgid "a/r/i"
msgid "a/r/i/u"
-msgstr "п/с/і"
+msgstr "п/с/і/з"
#. help text for the "Abort, retry, ignore?" prompt for media errors
#: ../src/callbacks/media.h:108
msgid "Skip retrieval of the file and abort current operation."
-msgstr ""
+msgstr "Пропустити отримання файла і перервати дію."
#. help text for the "Abort, retry, ignore?" prompt for media errors
#: ../src/callbacks/media.h:110
msgid "Try to retrieve the file again."
-msgstr ""
+msgstr "Спробувати знову дістати файл."
#. help text for the "Abort, retry, ignore?" prompt for media errors
#: ../src/callbacks/media.h:112
msgid "Skip retrieval of the file and try to continue with the operation without the file."
-msgstr ""
+msgstr "Перервати отримання файла і спробувати продовжити дію без файла."
#. help text for the "Abort, retry, ignore?" prompt for media errors
#: ../src/callbacks/media.h:114
msgid "Change current base URI and try retrieving the file again."
-msgstr ""
+msgstr "Змінити поточну базову адресу (URI) і знову спробувати отримати файл."
#. translators: this is a prompt text
#: ../src/callbacks/media.h:119 ../src/utils/prompt.cc:178
@@ -243,10 +241,8 @@ msgstr "Перервати, спробувати знов, ігнорувати?
#. translators: this is a prompt label, will appear as "New URI: "
#: ../src/callbacks/media.h:130
-#, fuzzy
-#| msgid "URI"
msgid "New URI"
-msgstr "URI"
+msgstr "Нова адреса (URI)"
#: ../src/callbacks/media.h:267 ../src/callbacks/media.h:274
msgid "User Name"
@@ -330,10 +326,9 @@ msgid "Unknown command '%s'"
msgstr "Невідома команда «%s»"
#: ../src/Config.cc:73
-#, fuzzy, c-format
-#| msgid "Unknown command option"
+#, c-format
msgid "Unknown configuration option '%s'"
-msgstr "Невідомий параметр для команди"
+msgstr "Невідомий параметр «%s»"
#: ../src/info.cc:40
msgid "Name: "
@@ -416,10 +411,8 @@ msgid "Requires:"
msgstr "Потребує:"
#: ../src/info.cc:144
-#, fuzzy
-#| msgid "Recommends"
msgid "Recommends:"
-msgstr "Рекомендує"
+msgstr "Рекомендує:"
#: ../src/info.cc:181 ../src/info.cc:325 ../src/info.cc:396
msgid "Catalog: "
@@ -505,10 +498,8 @@ msgid "Provides:"
msgstr "Надає:"
#: ../src/info.cc:276
-#, fuzzy
-#| msgid "Conflicts"
msgid "Conflicts:"
-msgstr "Конфліктує"
+msgstr "Конфліктує:"
#: ../src/info.cc:297 ../src/search.cc:327
msgid "Recommended"
@@ -557,7 +548,7 @@ msgstr "(порожній)"
#: ../src/info.cc:402 ../src/search.cc:548
msgid "Is Base"
-msgstr ""
+msgstr "Є базовий"
#: ../src/info.cc:404
msgid "Flavor"
@@ -1100,10 +1091,9 @@ msgid "Cleaning raw metadata cache for '%s'."
msgstr "Очищення кешу сирих метаданих для \"%s\"."
#: ../src/repos.cc:1171
-#, fuzzy, c-format
-#| msgid "Cleaning raw metadata cache for '%s'."
+#, c-format
msgid "Keeping raw metadata cache for %s '%s'."
-msgstr "Очищення кешу сирих метаданих для \"%s\"."
+msgstr "Збереження кешу сирих метаданих для %s «%s»."
#. translators: meaning the cached rpm files
#: ../src/repos.cc:1179
@@ -1259,14 +1249,12 @@ msgid "Repository '%s' priority has been left unchanged (%d)"
msgstr "Пріоритет сховища «%s» було залишено без змін (%d)"
#: ../src/repos.cc:1731
-#, fuzzy, c-format
-#| msgid "Repository '%s' has been sucessfully enabled."
+#, c-format
msgid "Repository '%s' has been successfully enabled."
msgstr "Сховище «%s» було успішно увімкнено."
#: ../src/repos.cc:1734
-#, fuzzy, c-format
-#| msgid "Repository '%s' has been sucessfully disabled."
+#, c-format
msgid "Repository '%s' has been successfully disabled."
msgstr "Сховище «%s» було успішно вимкнено."
@@ -1719,21 +1707,17 @@ msgstr "Для виправлення порушених залежностей
#. ! \todo add c for changelog and x for explain (show the dep tree)
#: ../src/solve-commit.cc:473
msgid "y/n/p/v/a/r/m/d/g"
-msgstr ""
+msgstr "т/н/п/в/а/с/м/д/з"
#. translators: help text for 'y' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:478
-#, fuzzy
-#| msgid "Accept the summary and proceed with installation/removal of packages."
msgid "Yes, accept the summary and proceed with installation/removal of packages."
-msgstr "Взяти до уваги резюме і продовжити встановлення або вилучення пакунків."
+msgstr "Так, взяти до уваги резюме і продовжити встановлення або вилучення пакунків."
#. translators: help text for 'n' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:480
-#, fuzzy
-#| msgid "Cancel the operation."
msgid "No, cancel the operation."
-msgstr "Скасувати дію."
+msgstr "Ні, скасувати дію."
#. translators: help text for 'p' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:482
@@ -1743,34 +1727,32 @@ msgstr "Перезапустити розв’язувач у режимі бе
#. translators: help text for 'v' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:484
msgid "Toggle display of package versions."
-msgstr ""
+msgstr "Перемкнути показ версій пакунків."
#. translators: help text for 'a' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:486
msgid "Toggle display of package architectures."
-msgstr ""
+msgstr "Перемкнути показ архітектур пакунків."
#. translators: help text for 'r' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:488
-#, fuzzy
-#| msgid "The following packages will be installed:\n"
msgid "Toggle display of repositories from which the packages will be installed."
-msgstr "Буде встановлено наступні пакунки:\n"
+msgstr "Перемкнути показ сховищ, з яких буде встановлено пакунки."
#. translators: help text for 'm' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:490
msgid "Toggle display of package vendor names."
-msgstr ""
+msgstr "Перемкнути показ назв постачальників пакунків."
#. translators: help text for 'd' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:492
msgid "Toggle between showing all details and as few details as possible."
-msgstr ""
+msgstr "Перемкнути показ всіх подробиць або мало подробиць."
#. translators: help text for 'g' option in the 'Continue?' prompt
#: ../src/solve-commit.cc:494
msgid "View the summary in pager."
-msgstr ""
+msgstr "Перегляд зведення в пейджері."
#: ../src/solve-commit.cc:587
msgid "committing"
@@ -2060,126 +2042,107 @@ msgstr "Після дії, %s буде вивільнено."
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:628
-#, fuzzy
-#| msgid "No packages to update"
msgid "package to upgrade"
msgid_plural "packages to upgrade"
-msgstr[0] "Немає пакунків для оновлення"
-msgstr[1] "Немає пакунків для оновлення"
-msgstr[2] "Немає пакунків для оновлення"
+msgstr[0] "пакунок оновити"
+msgstr[1] "пакунки оновити"
+msgstr[2] "пакунків оновити"
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:640
msgid "to downgrade"
msgid_plural "to downgrade"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "вернути до старішої версії"
+msgstr[1] "вернути до старішої версії"
+msgstr[2] "вернути до старішої версії"
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:643
-#, fuzzy
-#| msgid "The package download failed"
msgid "package to downgrade"
msgid_plural "packages to downgrade"
-msgstr[0] "Завантаження пакунка зазнало невдачі"
-msgstr[1] "Завантаження пакунка зазнало невдачі"
-msgstr[2] "Завантаження пакунка зазнало невдачі"
+msgstr[0] "пакунок вернути до старішої версії"
+msgstr[1] "пакунки вернути до старішої версії"
+msgstr[2] "пакунків вернути до старішої версії"
#. translators: this text will be preceded by a number e.g. "5 new"
#: ../src/Summary.cc:654
-#, fuzzy
-#| msgid "New"
msgid "new"
msgid_plural "new"
-msgstr[0] "Новий"
-msgstr[1] "Новий"
-msgstr[2] "Новий"
+msgstr[0] "новий"
+msgstr[1] "нові"
+msgstr[2] "нових"
#. translators: this text will be preceded by a number e.g. "5 new to install"
#: ../src/Summary.cc:657
-#, fuzzy
-#| msgid "The package is not installed"
msgid "new package to install"
msgid_plural "new packages to install"
-msgstr[0] "Пакунок не встановлено"
-msgstr[1] "Пакунок не встановлено"
-msgstr[2] "Пакунок не встановлено"
+msgstr[0] "новий пакунок встановити"
+msgstr[1] "нові пакунки встановити"
+msgstr[2] "нових пакунків встановити"
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:669
-#, fuzzy
-#| msgid "_Force install"
msgid "to reinstall"
msgid_plural "to reinstall"
-msgstr[0] "Встановити _примусово"
-msgstr[1] "Встановити _примусово"
-msgstr[2] "Встановити _примусово"
+msgstr[0] "перевстановити"
+msgstr[1] "перевстановити"
+msgstr[2] "перевстановити"
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:672
-#, fuzzy
-#| msgid "Package installer"
msgid "package to reinstall"
msgid_plural "packages to reinstall"
-msgstr[0] "Встановлення пакунків"
-msgstr[1] "Встановлення пакунків"
-msgstr[2] "Встановлення пакунків"
+msgstr[0] "пакунок перевстановити"
+msgstr[1] "пакунки перевстановити"
+msgstr[2] "пакунків перевстановити"
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:684
-#, fuzzy
-#| msgid "%s remove ok"
msgid "to remove"
msgid_plural "to remove"
-msgstr[0] "%s вилучено без помилок"
-msgstr[1] "%s вилучено без помилок"
-msgstr[2] "%s вилучено без помилок"
+msgstr[0] "вилучити"
+msgstr[1] "вилучити"
+msgstr[2] "вилучити"
#. translators: this text will be preceded by a number e.g. "5 packages to ..."
#: ../src/Summary.cc:687
-#, fuzzy
-#| msgid "Unable to remove ^%s\n"
msgid "package to remove"
msgid_plural "packages to remove"
-msgstr[0] "Не вдалося вилучити ^%s\n"
-msgstr[1] "Не вдалося вилучити ^%s\n"
-msgstr[2] "Не вдалося вилучити ^%s\n"
+msgstr[0] "пакунок вилучити"
+msgstr[1] "пакунки вилучити"
+msgstr[2] "пакунків вилучити"
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:699
msgid "to change vendor"
msgid_plural " to change vendor"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "змінить постачальника"
+msgstr[1] "змінить постачальників"
+msgstr[2] "змінять постачальників"
#. translators: this text will be preceded by a number e.g. "5 packages ..."
#: ../src/Summary.cc:702
-#, fuzzy
-#| msgid "The following package is going to change vendor:"
-#| msgid_plural "The following packages are going to change vendor:"
msgid "package will change vendor"
msgid_plural "packages will change vendor"
-msgstr[0] "Буде змінено постачальника пакунка:"
-msgstr[1] "Буде змінено постачальника таких пакунків:"
-msgstr[2] "Буде змінено постачальника таких пакунків:"
+msgstr[0] "пакунок змінить постачальника"
+msgstr[1] "пакунки змінить постачальника"
+msgstr[2] "пакунків змінить постачальника"
#. translators: this text will be preceded by a number e.g. "5 to ..."
#: ../src/Summary.cc:714
msgid "to change arch"
msgid_plural "to change arch"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "змінить архітектуру"
+msgstr[1] "змінить архітектуру"
+msgstr[2] "змінять архітектуру"
#. translators: this text will be preceded by a number e.g. "5 packages ..."
#: ../src/Summary.cc:717
msgid "package will change arch"
msgid_plural "packages will change arch"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "пакунок змінить архітектуру"
+msgstr[1] "пакунки змінять архітектуру"
+msgstr[2] "пакунків змінять архітектуру"
#. translators: %d is the number of needed patches
#: ../src/update.cc:67
@@ -2268,35 +2231,25 @@ msgid "No update candidate for '%s'."
msgstr "Не знайдено кандидатури для оновлення «%s»"
#: ../src/utils/Augeas.cc:26
-#, fuzzy
-#| msgid "Cannot copy the configuration template."
msgid "Cannot initialize configuration file parser."
-msgstr "Неможливо скопіювати шаблон конфігурації."
+msgstr "Неможливо започаткувати аналізатор файлів конфігурації."
#: ../src/utils/Augeas.cc:43 ../src/utils/Augeas.cc:55
-#, fuzzy
-#| msgid "Reading the config file failed"
msgid "Augeas error: setting config file to load failed."
-msgstr "Спроба читання файла налаштувань зазнала невдачі"
+msgstr "Помилка: спроба завантаження файла налаштувань зазнала невдачі."
#: ../src/utils/Augeas.cc:61
-#, fuzzy
-#| msgid "Cannot parse the certificate."
msgid "Could not parse the config files."
-msgstr "Неможливо проаналізувати сертифікат."
+msgstr "Неможливо проаналізувати файли конфігурації."
# %s is either BOOTP or DHCP
#: ../src/utils/Augeas.cc:95
-#, fuzzy
-#| msgid "An idmapd configuration file is required."
msgid "No configuration file exists or could be parsed."
-msgstr "Потрібний файл конфігурації idmapd."
+msgstr "Файл конфігурації неможливо проаналізувати або він не існує."
#: ../src/utils/Augeas.cc:98
-#, fuzzy
-#| msgid "Error parsing the CRL."
msgid "Error parsing zypper.conf:"
-msgstr "Помилка аналізу CRL."
+msgstr "Помилка аналізу zypper.conf:"
#. For '-garbage' argument, with 'a', 'b', and 'e' as known options,
#. getopt_long reports 'a', 'b', and 'e' as known options.
@@ -2479,10 +2432,8 @@ msgstr[1] "автоматично вибрати %s після %u "
msgstr[2] "автоматично вибрати %s після %u "
#: ../src/utils/prompt.cc:247
-#, fuzzy
-#| msgid "Preparing installation..."
msgid "Trying again..."
-msgstr "Підготувати встановлення..."
+msgstr "Повторна спроба..."
#: ../src/utils/prompt.cc:338
#, c-format
@@ -4009,13 +3960,6 @@ msgstr ""
"-m, --match Приймає відсутній номер версії як будь-який випуск.\n"
#: ../src/Zypper.cc:2120
-#, fuzzy
-#| msgid ""
-#| "licenses\n"
-#| "\n"
-#| "Report Licenses and EULA of currently installed software packages.\n"
-#| "\n"
-#| "This command has no additional options.\n"
msgid ""
"licenses\n"
"\n"
@@ -4321,10 +4265,9 @@ msgid "Root privileges are required for performing a distribution upgrade."
msgstr "Для проведення оновлення дистрибутива вам слід мати привілеї адміністратора."
#: ../src/Zypper.cc:3794
-#, fuzzy, c-format
-#| msgid "'%1' does not exist."
+#, c-format
msgid "Type '%s' does not support %s."
-msgstr "\"%1\" не існує."
+msgstr "Тип «%s» не підтримує %s."
#: ../src/Zypper.cc:3824 ../src/Zypper.cc:3885
msgid "Root privileges are required for adding of package locks."
@@ -4360,47 +4303,3 @@ msgstr "Опис"
#: ../src/Zypper.cc:4129
msgid "Resolvable Type"
msgstr "Тип розв’язувача"
-
-#~ msgid "y/n/p"
-#~ msgstr "y/n/p"
-
-#~ msgid "abort"
-#~ msgstr "перервати"
-
-#~ msgid "retry"
-#~ msgstr "повторити"
-
-#~ msgid "ignore"
-#~ msgstr "ігнорувати"
-
-#~ msgid "Abort, retry, ignore?\n"
-#~ msgstr "Перервати, спробувати знов, ігнорувати?\n"
-
-#~ msgid " --from <alias|#|URI> Select packages only from specified repository.\n"
-#~ msgstr " --from <псевдонім|#|URI> Вибрати пакунки тільки з указаного сховища.\n"
-
-#~ msgid ""
-#~ "dist-upgrade (dup) [options]\n"
-#~ "\n"
-#~ "Perform a distribution upgrade.\n"
-#~ "\n"
-#~ " Command options:\n"
-#~ "\n"
-#~ "-r, --repo <alias|#|URI> Limit the upgrade to the specified repository.\n"
-#~ " --no-recommends Do not install recommended packages, only required.\n"
-#~ "-l, --auto-agree-with-licenses Automatically say 'yes' to third party license confirmation prompt.\n"
-#~ " See man zypper for more details.\n"
-#~ " --debug-solver Create solver test case for debugging\n"
-#~ "-D, --dry-run Test the upgrade, do not actually upgrade\n"
-#~ msgstr ""
-#~ "dist-upgrade (dup) [параметри]\n"
-#~ "\n"
-#~ "Виконати оновлення дистрибутива.\n"
-#~ "\n"
-#~ " Параметри команди:\n"
-#~ "\n"
-#~ "-r, --repo <псевдонім|#|URI> Обмежити оновлення вказаним сховищем.\n"
-#~ "-l, --auto-agree-with-licenses Автоматично відповісти «так» на питання про згоду на умови ліцензуванняt.\n"
-#~ " Щоб дізнатися більше, виконайте команду «man zypper».\n"
-#~ " --debug-solver Створити тестовий приклад для зневадження розв’язання.\n"
-#~ "-D, --dry-run Випробувати можливість оновлення, не оновлювати насправді.\n"
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
29 Jun '09
ref: refs/heads/master
commit 9e67b33b7e5a51c7df471a4a7663717feb4f2edf
Author: Michael Schroeder <mls(a)suse.de>
Date: Mon Jun 29 15:29:36 2009 +0200
- add checksum functions
---
ext/repo_rpmdb.c | 3 -
src/CMakeLists.txt | 6 +-
src/chksum.c | 107 ++++++
src/chksum.h | 21 +
src/md5.c | 270 +++++++++++++
src/md5.h | 21 +
src/sha1.c | 230 +++++++++++
src/sha1.h | 16 +
src/sha2.c | 1065 ++++++++++++++++++++++++++++++++++++++++++++++++++++
9 files changed, 1734 insertions(+), 5 deletions(-)
diff --git a/ext/repo_rpmdb.c b/ext/repo_rpmdb.c
index 5de20b0..48a8d1e 100644
--- a/ext/repo_rpmdb.c
+++ b/ext/repo_rpmdb.c
@@ -1677,9 +1677,6 @@ repo_add_rpms(Repo *repo, const char **rpms, int nrpms, int flags)
else
data = repo_last_repodata(repo);
- if (nrpms <= 0)
- return;
-
for (i = 0; i < nrpms; i++)
{
if ((fp = fopen(rpms[i], "r")) == 0)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index bc42602..70e18c5 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -3,7 +3,8 @@ SET(libsatsolver_SRCS
bitmap.c poolarch.c poolvendor.c poolid.c strpool.c dirpool.c
solver.c solverdebug.c repo_solv.c evr.c pool.c
queue.c repo.c repodata.c repopage.c util.c policy.c solvable.c
- transaction.c rules.c problems.c)
+ transaction.c rules.c problems.c
+ chksum.c md5.c sha1.c sha2.c)
ADD_LIBRARY(satsolver STATIC ${libsatsolver_SRCS})
@@ -11,7 +12,8 @@ SET(libsatsolver_HEADERS
bitmap.h evr.h hash.h policy.h poolarch.h poolvendor.h pool.h
poolid.h pooltypes.h queue.h solvable.h solver.h solverdebug.h
repo.h repodata.h repopage.h repo_solv.h util.h
- strpool.h dirpool.h knownid.h transaction.h rules.h problems.h)
+ strpool.h dirpool.h knownid.h transaction.h rules.h problems.h
+ chksum.h md5.h sha1.h sha2.h)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
diff --git a/src/chksum.c b/src/chksum.c
new file mode 100644
index 0000000..e2043f3
--- /dev/null
+++ b/src/chksum.c
@@ -0,0 +1,107 @@
+#include <sys/types.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "pool.h"
+#include "util.h"
+#include "chksum.h"
+
+#include "md5.h"
+#include "sha1.h"
+#include "sha2.h"
+
+struct ctxhandle {
+ Id type;
+ int done;
+ unsigned char result[64];
+ union {
+ MD5_CTX md5;
+ SHA1_CTX sha1;
+ SHA256_CTX sha256;
+ } c;
+};
+
+void *
+sat_chksum_create(Id type)
+{
+ struct ctxhandle *h;
+ h = sat_calloc(1, sizeof(*h));
+ h->type = type;
+ switch(type)
+ {
+ case REPOKEY_TYPE_MD5:
+ sat_MD5_Init(&h->c.md5);
+ return h;
+ case REPOKEY_TYPE_SHA1:
+ sat_SHA1_Init(&h->c.sha1);
+ return h;
+ case REPOKEY_TYPE_SHA256:
+ sat_SHA256_Init(&h->c.sha256);
+ return h;
+ }
+ free(h);
+ return 0;
+}
+
+void
+sat_chksum_add(void *handle, const void *data, int len)
+{
+ struct ctxhandle *h = handle;
+ switch(h->type)
+ {
+ case REPOKEY_TYPE_MD5:
+ sat_MD5_Update(&h->c.md5, (void *)data, len);
+ return;
+ case REPOKEY_TYPE_SHA1:
+ sat_SHA1_Update(&h->c.sha1, data, len);
+ return;
+ case REPOKEY_TYPE_SHA256:
+ sat_SHA256_Update(&h->c.sha256, data, len);
+ return;
+ default:
+ return;
+ }
+}
+
+unsigned char *
+sat_chksum_get(void *handle, int *lenp)
+{
+ struct ctxhandle *h = handle;
+ if (h->done)
+ return h->result;
+ switch(h->type)
+ {
+ case REPOKEY_TYPE_MD5:
+ sat_MD5_Final(h->result, &h->c.md5);
+ h->done = 1;
+ if (*lenp)
+ *lenp = 16;
+ return h->result;
+ case REPOKEY_TYPE_SHA1:
+ sat_SHA1_Final(&h->c.sha1, h->result);
+ h->done = 1;
+ if (*lenp)
+ *lenp = 20;
+ return h->result;
+ case REPOKEY_TYPE_SHA256:
+ sat_SHA256_Final(h->result, &h->c.sha256);
+ h->done = 1;
+ if (*lenp)
+ *lenp = 32;
+ return h->result;
+ default:
+ if (*lenp)
+ *lenp = 0;
+ return 0;
+ }
+}
+
+void *
+sat_chksum_free(void *handle)
+{
+ sat_free(handle);
+ return 0;
+}
+
diff --git a/src/chksum.h b/src/chksum.h
new file mode 100644
index 0000000..0b3a289
--- /dev/null
+++ b/src/chksum.h
@@ -0,0 +1,21 @@
+#include "pool.h"
+
+void *sat_chksum_create(Id type);
+void sat_chksum_add(void *handle, const void *data, int len);
+unsigned char *sat_chksum_get(void *handle, int *lenp);
+void *sat_chksum_free(void *handle);
+
+static inline int sat_chksum_len(Id type)
+{
+ switch (type)
+ {
+ case REPOKEY_TYPE_MD5:
+ return 16;
+ case REPOKEY_TYPE_SHA1:
+ return 20;
+ case REPOKEY_TYPE_SHA256:
+ return 32;
+ default:
+ return 0;
+ }
+}
diff --git a/src/md5.c b/src/md5.c
new file mode 100644
index 0000000..8378a47
--- /dev/null
+++ b/src/md5.c
@@ -0,0 +1,270 @@
+/*
+ * This is an OpenSSL-compatible implementation of the RSA Data Security,
+ * Inc. MD5 Message-Digest Algorithm.
+ *
+ * Written by Solar Designer <solar(a)openwall.com> in 2001, and placed in
+ * the public domain.
+ *
+ * This differs from Colin Plumb's older public domain implementation in
+ * that no 32-bit integer data type is required, there's no compile-time
+ * endianness configuration, and the function prototypes match OpenSSL's.
+ * The primary goals are portability and ease of use.
+ *
+ * This implementation is meant to be fast, but not as fast as possible.
+ * Some known optimizations are not included to reduce source code size
+ * and avoid compile-time configuration.
+ */
+
+#include <string.h>
+#include "md5.h"
+
+
+/*
+ * The basic MD5 functions.
+ *
+ * F is optimized compared to its RFC 1321 definition just like in Colin
+ * Plumb's implementation.
+ */
+#define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z))))
+#define G(x, y, z) ((y) ^ ((z) & ((x) ^ (y))))
+#define H(x, y, z) ((x) ^ (y) ^ (z))
+#define I(x, y, z) ((y) ^ ((x) | ~(z)))
+
+/*
+ * The MD5 transformation for all four rounds.
+ */
+#define STEP(f, a, b, c, d, x, t, s) \
+ (a) += f((b), (c), (d)) + (x) + (t); \
+ (a) = (((a) << (s)) | (((a) & 0xffffffff) >> (32 - (s)))); \
+ (a) += (b);
+
+/*
+ * SET reads 4 input bytes in little-endian byte order and stores them
+ * in a properly aligned word in host byte order.
+ *
+ * The check for little-endian architectures which tolerate unaligned
+ * memory accesses is just an optimization. Nothing will break if it
+ * doesn't work.
+ */
+#if defined(__i386__) || defined(__vax__)
+#define SET(n) \
+ (*(MD5_u32plus *)&ptr[(n) * 4])
+#define GET(n) \
+ SET(n)
+#else
+#define SET(n) \
+ (ctx->block[(n)] = \
+ (MD5_u32plus)ptr[(n) * 4] | \
+ ((MD5_u32plus)ptr[(n) * 4 + 1] << 8) | \
+ ((MD5_u32plus)ptr[(n) * 4 + 2] << 16) | \
+ ((MD5_u32plus)ptr[(n) * 4 + 3] << 24))
+#define GET(n) \
+ (ctx->block[(n)])
+#endif
+
+/*
+ * This processes one or more 64-byte data blocks, but does NOT update
+ * the bit counters. There're no alignment requirements.
+ */
+static void *body(MD5_CTX *ctx, void *data, unsigned long size)
+{
+ unsigned char *ptr;
+ MD5_u32plus a, b, c, d;
+ MD5_u32plus saved_a, saved_b, saved_c, saved_d;
+
+ ptr = data;
+
+ a = ctx->a;
+ b = ctx->b;
+ c = ctx->c;
+ d = ctx->d;
+
+ do {
+ saved_a = a;
+ saved_b = b;
+ saved_c = c;
+ saved_d = d;
+
+/* Round 1 */
+ STEP(F, a, b, c, d, SET(0), 0xd76aa478, 7)
+ STEP(F, d, a, b, c, SET(1), 0xe8c7b756, 12)
+ STEP(F, c, d, a, b, SET(2), 0x242070db, 17)
+ STEP(F, b, c, d, a, SET(3), 0xc1bdceee, 22)
+ STEP(F, a, b, c, d, SET(4), 0xf57c0faf, 7)
+ STEP(F, d, a, b, c, SET(5), 0x4787c62a, 12)
+ STEP(F, c, d, a, b, SET(6), 0xa8304613, 17)
+ STEP(F, b, c, d, a, SET(7), 0xfd469501, 22)
+ STEP(F, a, b, c, d, SET(8), 0x698098d8, 7)
+ STEP(F, d, a, b, c, SET(9), 0x8b44f7af, 12)
+ STEP(F, c, d, a, b, SET(10), 0xffff5bb1, 17)
+ STEP(F, b, c, d, a, SET(11), 0x895cd7be, 22)
+ STEP(F, a, b, c, d, SET(12), 0x6b901122, 7)
+ STEP(F, d, a, b, c, SET(13), 0xfd987193, 12)
+ STEP(F, c, d, a, b, SET(14), 0xa679438e, 17)
+ STEP(F, b, c, d, a, SET(15), 0x49b40821, 22)
+
+/* Round 2 */
+ STEP(G, a, b, c, d, GET(1), 0xf61e2562, 5)
+ STEP(G, d, a, b, c, GET(6), 0xc040b340, 9)
+ STEP(G, c, d, a, b, GET(11), 0x265e5a51, 14)
+ STEP(G, b, c, d, a, GET(0), 0xe9b6c7aa, 20)
+ STEP(G, a, b, c, d, GET(5), 0xd62f105d, 5)
+ STEP(G, d, a, b, c, GET(10), 0x02441453, 9)
+ STEP(G, c, d, a, b, GET(15), 0xd8a1e681, 14)
+ STEP(G, b, c, d, a, GET(4), 0xe7d3fbc8, 20)
+ STEP(G, a, b, c, d, GET(9), 0x21e1cde6, 5)
+ STEP(G, d, a, b, c, GET(14), 0xc33707d6, 9)
+ STEP(G, c, d, a, b, GET(3), 0xf4d50d87, 14)
+ STEP(G, b, c, d, a, GET(8), 0x455a14ed, 20)
+ STEP(G, a, b, c, d, GET(13), 0xa9e3e905, 5)
+ STEP(G, d, a, b, c, GET(2), 0xfcefa3f8, 9)
+ STEP(G, c, d, a, b, GET(7), 0x676f02d9, 14)
+ STEP(G, b, c, d, a, GET(12), 0x8d2a4c8a, 20)
+
+/* Round 3 */
+ STEP(H, a, b, c, d, GET(5), 0xfffa3942, 4)
+ STEP(H, d, a, b, c, GET(8), 0x8771f681, 11)
+ STEP(H, c, d, a, b, GET(11), 0x6d9d6122, 16)
+ STEP(H, b, c, d, a, GET(14), 0xfde5380c, 23)
+ STEP(H, a, b, c, d, GET(1), 0xa4beea44, 4)
+ STEP(H, d, a, b, c, GET(4), 0x4bdecfa9, 11)
+ STEP(H, c, d, a, b, GET(7), 0xf6bb4b60, 16)
+ STEP(H, b, c, d, a, GET(10), 0xbebfbc70, 23)
+ STEP(H, a, b, c, d, GET(13), 0x289b7ec6, 4)
+ STEP(H, d, a, b, c, GET(0), 0xeaa127fa, 11)
+ STEP(H, c, d, a, b, GET(3), 0xd4ef3085, 16)
+ STEP(H, b, c, d, a, GET(6), 0x04881d05, 23)
+ STEP(H, a, b, c, d, GET(9), 0xd9d4d039, 4)
+ STEP(H, d, a, b, c, GET(12), 0xe6db99e5, 11)
+ STEP(H, c, d, a, b, GET(15), 0x1fa27cf8, 16)
+ STEP(H, b, c, d, a, GET(2), 0xc4ac5665, 23)
+
+/* Round 4 */
+ STEP(I, a, b, c, d, GET(0), 0xf4292244, 6)
+ STEP(I, d, a, b, c, GET(7), 0x432aff97, 10)
+ STEP(I, c, d, a, b, GET(14), 0xab9423a7, 15)
+ STEP(I, b, c, d, a, GET(5), 0xfc93a039, 21)
+ STEP(I, a, b, c, d, GET(12), 0x655b59c3, 6)
+ STEP(I, d, a, b, c, GET(3), 0x8f0ccc92, 10)
+ STEP(I, c, d, a, b, GET(10), 0xffeff47d, 15)
+ STEP(I, b, c, d, a, GET(1), 0x85845dd1, 21)
+ STEP(I, a, b, c, d, GET(8), 0x6fa87e4f, 6)
+ STEP(I, d, a, b, c, GET(15), 0xfe2ce6e0, 10)
+ STEP(I, c, d, a, b, GET(6), 0xa3014314, 15)
+ STEP(I, b, c, d, a, GET(13), 0x4e0811a1, 21)
+ STEP(I, a, b, c, d, GET(4), 0xf7537e82, 6)
+ STEP(I, d, a, b, c, GET(11), 0xbd3af235, 10)
+ STEP(I, c, d, a, b, GET(2), 0x2ad7d2bb, 15)
+ STEP(I, b, c, d, a, GET(9), 0xeb86d391, 21)
+
+ a += saved_a;
+ b += saved_b;
+ c += saved_c;
+ d += saved_d;
+
+ ptr += 64;
+ } while (size -= 64);
+
+ ctx->a = a;
+ ctx->b = b;
+ ctx->c = c;
+ ctx->d = d;
+
+ return ptr;
+}
+
+void sat_MD5_Init(MD5_CTX *ctx)
+{
+ ctx->a = 0x67452301;
+ ctx->b = 0xefcdab89;
+ ctx->c = 0x98badcfe;
+ ctx->d = 0x10325476;
+
+ ctx->lo = 0;
+ ctx->hi = 0;
+}
+
+void sat_MD5_Update(MD5_CTX *ctx, void *data, unsigned long size)
+{
+ MD5_u32plus saved_lo;
+ unsigned long used, free;
+
+ saved_lo = ctx->lo;
+ if ((ctx->lo = (saved_lo + size) & 0x1fffffff) < saved_lo)
+ ctx->hi++;
+ ctx->hi += size >> 29;
+
+ used = saved_lo & 0x3f;
+
+ if (used) {
+ free = 64 - used;
+
+ if (size < free) {
+ memcpy(&ctx->buffer[used], data, size);
+ return;
+ }
+
+ memcpy(&ctx->buffer[used], data, free);
+ data = (unsigned char *)data + free;
+ size -= free;
+ body(ctx, ctx->buffer, 64);
+ }
+
+ if (size >= 64) {
+ data = body(ctx, data, size & ~(unsigned long)0x3f);
+ size &= 0x3f;
+ }
+
+ memcpy(ctx->buffer, data, size);
+}
+
+void sat_MD5_Final(unsigned char *result, MD5_CTX *ctx)
+{
+ unsigned long used, free;
+
+ used = ctx->lo & 0x3f;
+
+ ctx->buffer[used++] = 0x80;
+
+ free = 64 - used;
+
+ if (free < 8) {
+ memset(&ctx->buffer[used], 0, free);
+ body(ctx, ctx->buffer, 64);
+ used = 0;
+ free = 64;
+ }
+
+ memset(&ctx->buffer[used], 0, free - 8);
+
+ ctx->lo <<= 3;
+ ctx->buffer[56] = ctx->lo;
+ ctx->buffer[57] = ctx->lo >> 8;
+ ctx->buffer[58] = ctx->lo >> 16;
+ ctx->buffer[59] = ctx->lo >> 24;
+ ctx->buffer[60] = ctx->hi;
+ ctx->buffer[61] = ctx->hi >> 8;
+ ctx->buffer[62] = ctx->hi >> 16;
+ ctx->buffer[63] = ctx->hi >> 24;
+
+ body(ctx, ctx->buffer, 64);
+
+ result[0] = ctx->a;
+ result[1] = ctx->a >> 8;
+ result[2] = ctx->a >> 16;
+ result[3] = ctx->a >> 24;
+ result[4] = ctx->b;
+ result[5] = ctx->b >> 8;
+ result[6] = ctx->b >> 16;
+ result[7] = ctx->b >> 24;
+ result[8] = ctx->c;
+ result[9] = ctx->c >> 8;
+ result[10] = ctx->c >> 16;
+ result[11] = ctx->c >> 24;
+ result[12] = ctx->d;
+ result[13] = ctx->d >> 8;
+ result[14] = ctx->d >> 16;
+ result[15] = ctx->d >> 24;
+
+ memset(ctx, 0, sizeof(ctx));
+}
diff --git a/src/md5.h b/src/md5.h
new file mode 100644
index 0000000..a304003
--- /dev/null
+++ b/src/md5.h
@@ -0,0 +1,21 @@
+/*
+ * This is an OpenSSL-compatible implementation of the RSA Data Security,
+ * Inc. MD5 Message-Digest Algorithm.
+ *
+ * Written by Solar Designer <solar(a)openwall.com> in 2001, and placed in
+ * the public domain. See md5.c for more information.
+ */
+
+/* Any 32-bit or wider unsigned integer data type will do */
+typedef unsigned long MD5_u32plus;
+
+typedef struct {
+ MD5_u32plus lo, hi;
+ MD5_u32plus a, b, c, d;
+ unsigned char buffer[64];
+ MD5_u32plus block[16];
+} MD5_CTX;
+
+extern void sat_MD5_Init(MD5_CTX *ctx);
+extern void sat_MD5_Update(MD5_CTX *ctx, void *data, unsigned long size);
+extern void sat_MD5_Final(unsigned char *result, MD5_CTX *ctx);
diff --git a/src/sha1.c b/src/sha1.c
new file mode 100644
index 0000000..74262a9
--- /dev/null
+++ b/src/sha1.c
@@ -0,0 +1,230 @@
+/*
+SHA-1 in C
+By Steve Reid <sreid(a)sea-to-sky.net>
+100% Public Domain
+
+-----------------
+Modified 7/98
+By James H. Brown <jbrown(a)burgoyne.com>
+Still 100% Public Domain
+
+Corrected a problem which generated improper hash values on 16 bit machines
+Routine SHA1Update changed from
+ void SHA1Update(SHA1_CTX* context, unsigned char* data, unsigned int
+len)
+to
+ void SHA1Update(SHA1_CTX* context, unsigned char* data, unsigned
+long len)
+
+The 'len' parameter was declared an int which works fine on 32 bit machines.
+However, on 16 bit machines an int is too small for the shifts being done
+against
+it. This caused the hash function to generate incorrect values if len was
+greater than 8191 (8K - 1) due to the 'len << 3' on line 3 of SHA1Update().
+
+Since the file IO in main() reads 16K at a time, any file 8K or larger would
+be guaranteed to generate the wrong hash (e.g. Test Vector #3, a million
+"a"s).
+
+I also changed the declaration of variables i & j in SHA1Update to
+unsigned long from unsigned int for the same reason.
+
+These changes should make no difference to any 32 bit implementations since
+an
+int and a long are the same size in those environments.
+
+--
+I also corrected a few compiler warnings generated by Borland C.
+1. Added #include <process.h> for exit() prototype
+2. Removed unused variable 'j' in SHA1Final
+3. Changed exit(0) to return(0) at end of main.
+
+ALL changes I made can be located by searching for comments containing 'JHB'
+-----------------
+Modified 8/98
+By Steve Reid <sreid(a)sea-to-sky.net>
+Still 100% public domain
+
+1- Removed #include <process.h> and used return() instead of exit()
+2- Fixed overwriting of finalcount in SHA1Final() (discovered by Chris Hall)
+3- Changed email address from steve(a)edmweb.com to sreid(a)sea-to-sky.net
+
+-----------------
+Modified 4/01
+By Saul Kravitz <Saul.Kravitz(a)celera.com>
+Still 100% PD
+Modified to run on Compaq Alpha hardware.
+
+-----------------
+Modified 07/2002
+By Ralph Giles <giles(a)ghostscript.com>
+Still 100% public domain
+modified for use with stdint types, autoconf
+code cleanup, removed attribution comments
+switched SHA1Final() argument order for consistency
+use SHA1_ prefix for public api
+move public api to sha1.h
+*/
+
+/*
+Test Vectors (from FIPS PUB 180-1)
+"abc"
+ A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D
+"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+ 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1
+A million repetitions of "a"
+ 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include <endian.h>
+#include "sha1.h"
+
+
+static void SHA1_Transform(uint32_t state[5], const uint8_t buffer[64]);
+
+#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
+
+/* blk0() and blk() perform the initial expand. */
+/* I got the idea of expanding during the round function from SSLeay */
+/* FIXME: can we do this in an endian-proof way? */
+#if __BYTE_ORDER == __BIG_ENDIAN
+#define blk0(i) block->l[i]
+#else
+#define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \
+ |(rol(block->l[i],8)&0x00FF00FF))
+#endif
+#define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \
+ ^block->l[(i+2)&15]^block->l[i&15],1))
+
+/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */
+#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30);
+#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30);
+#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30);
+#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30);
+#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30);
+
+
+/* Hash a single 512-bit block. This is the core of the algorithm. */
+static void SHA1_Transform(uint32_t state[5], const uint8_t buffer[64])
+{
+ uint32_t a, b, c, d, e;
+ typedef union {
+ uint8_t c[64];
+ uint32_t l[16];
+ } CHAR64LONG16;
+ CHAR64LONG16* block;
+
+ block = (CHAR64LONG16*)buffer;
+
+ /* Copy context->state[] to working vars */
+ a = state[0];
+ b = state[1];
+ c = state[2];
+ d = state[3];
+ e = state[4];
+
+ /* 4 rounds of 20 operations each. Loop unrolled. */
+ R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3);
+ R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7);
+ R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11);
+ R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15);
+ R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);
+ R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);
+ R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);
+ R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);
+ R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);
+ R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);
+ R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43);
+ R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47);
+ R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51);
+ R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55);
+ R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59);
+ R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63);
+ R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67);
+ R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71);
+ R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75);
+ R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79);
+
+ /* Add the working vars back into context.state[] */
+ state[0] += a;
+ state[1] += b;
+ state[2] += c;
+ state[3] += d;
+ state[4] += e;
+
+ /* Wipe variables */
+ a = b = c = d = e = 0;
+}
+
+
+/* SHA1Init - Initialize new context */
+void sat_SHA1_Init(SHA1_CTX* context)
+{
+ /* SHA1 initialization constants */
+ context->state[0] = 0x67452301;
+ context->state[1] = 0xEFCDAB89;
+ context->state[2] = 0x98BADCFE;
+ context->state[3] = 0x10325476;
+ context->state[4] = 0xC3D2E1F0;
+ context->count[0] = context->count[1] = 0;
+}
+
+
+/* Run your data through this. */
+void sat_SHA1_Update(SHA1_CTX* context, const uint8_t* data, const size_t len)
+{
+ size_t i, j;
+
+#ifdef VERBOSE
+ SHAPrintContext(context, "before");
+#endif
+
+ j = (context->count[0] >> 3) & 63;
+ if ((context->count[0] += len << 3) < (len << 3)) context->count[1]++;
+ context->count[1] += (len >> 29);
+ if ((j + len) > 63) {
+ memcpy(&context->buffer[j], data, (i = 64-j));
+ SHA1_Transform(context->state, context->buffer);
+ for ( ; i + 63 < len; i += 64) {
+ SHA1_Transform(context->state, data + i);
+ }
+ j = 0;
+ }
+ else i = 0;
+ memcpy(&context->buffer[j], &data[i], len - i);
+
+#ifdef VERBOSE
+ SHAPrintContext(context, "after ");
+#endif
+}
+
+
+/* Add padding and return the message digest. */
+void sat_SHA1_Final(SHA1_CTX* context, uint8_t digest[SHA1_DIGEST_SIZE])
+{
+ uint32_t i;
+ uint8_t finalcount[8];
+
+ for (i = 0; i < 8; i++) {
+ finalcount[i] = (unsigned char)((context->count[(i >= 4 ? 0 : 1)]
+ >> ((3-(i & 3)) * 8) ) & 255); /* Endian independent */
+ }
+ sat_SHA1_Update(context, (uint8_t *)"\200", 1);
+ while ((context->count[0] & 504) != 448) {
+ sat_SHA1_Update(context, (uint8_t *)"\0", 1);
+ }
+ sat_SHA1_Update(context, finalcount, 8); /* Should cause a SHA1_Transform() */
+ for (i = 0; i < SHA1_DIGEST_SIZE; i++) {
+ digest[i] = (uint8_t)
+ ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255);
+ }
+
+ /* Wipe variables */
+ i = 0;
+ memset(context->buffer, 0, 64);
+ memset(context->state, 0, 20);
+ memset(context->count, 0, 8);
+ memset(finalcount, 0, 8); /* SWR */
+}
diff --git a/src/sha1.h b/src/sha1.h
new file mode 100644
index 0000000..a708ef1
--- /dev/null
+++ b/src/sha1.h
@@ -0,0 +1,16 @@
+/* public api for steve reid's public domain SHA-1 implementation */
+/* this file is in the public domain */
+
+#include <stdint.h>
+
+typedef struct {
+ uint32_t state[5];
+ uint32_t count[2];
+ uint8_t buffer[64];
+} SHA1_CTX;
+
+#define SHA1_DIGEST_SIZE 20
+
+void sat_SHA1_Init(SHA1_CTX* context);
+void sat_SHA1_Update(SHA1_CTX* context, const uint8_t* data, const size_t len);
+void sat_SHA1_Final(SHA1_CTX* context, uint8_t digest[SHA1_DIGEST_SIZE]);
diff --git a/src/sha2.c b/src/sha2.c
new file mode 100644
index 0000000..5b36016
--- /dev/null
+++ b/src/sha2.c
@@ -0,0 +1,1065 @@
+/*
+ * FILE: sha2.c
+ * AUTHOR: Aaron D. Gifford <me(a)aarongifford.com>
+ *
+ * Copyright (c) 2000-2001, Aaron D. Gifford
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the copyright holder nor the names of contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $Id: sha2.c,v 1.1 2001/11/08 00:01:51 adg Exp adg $
+ */
+
+#include <sys/types.h>
+#include <string.h> /* memcpy()/memset() or bcopy()/bzero() */
+/* #include <assert.h> */ /* assert() */
+#include <stdio.h>
+#include <sysexits.h>
+#include <sys/uio.h>
+#include <unistd.h>
+#include <inttypes.h>
+#include <endian.h>
+
+#include "sha2.h"
+
+
+/*
+ * ASSERT NOTE:
+ * Some sanity checking code is included using assert(). On my FreeBSD
+ * system, this additional code can be removed by compiling with NDEBUG
+ * defined. Check your own systems manpage on assert() to see how to
+ * compile WITHOUT the sanity checking code on your system.
+ *
+ * UNROLLED TRANSFORM LOOP NOTE:
+ * You can define SHA2_UNROLL_TRANSFORM to use the unrolled transform
+ * loop version for the hash transform rounds (defined using macros
+ * later in this file). Either define on the command line, for example:
+ *
+ * cc -DSHA2_UNROLL_TRANSFORM -o sha2 sha2.c sha2prog.c
+ *
+ * or define below:
+ *
+ * #define SHA2_UNROLL_TRANSFORM
+ *
+ */
+
+ #define SHA2_UNROLL_TRANSFORM
+
+
+/*** SHA-256/384/512 Machine Architecture Definitions *****************/
+/*
+ * BYTE_ORDER NOTE:
+ *
+ * Please make sure that your system defines BYTE_ORDER. If your
+ * architecture is little-endian, make sure it also defines
+ * LITTLE_ENDIAN and that the two (BYTE_ORDER and LITTLE_ENDIAN) are
+ * equivilent.
+ *
+ * If your system does not define the above, then you can do so by
+ * hand like this:
+ *
+ * #define LITTLE_ENDIAN 1234
+ * #define BIG_ENDIAN 4321
+ *
+ * And for little-endian machines, add:
+ *
+ * #define BYTE_ORDER LITTLE_ENDIAN
+ *
+ * Or for big-endian machines:
+ *
+ * #define BYTE_ORDER BIG_ENDIAN
+ *
+ * The FreeBSD machine this was written on defines BYTE_ORDER
+ * appropriately by including <sys/types.h> (which in turn includes
+ * <machine/endian.h> where the appropriate definitions are actually
+ * made).
+ */
+#if !defined(__BYTE_ORDER) || (__BYTE_ORDER != __LITTLE_ENDIAN && __BYTE_ORDER != __BIG_ENDIAN)
+#error Define __BYTE_ORDER to be equal to either __LITTLE_ENDIAN or __BIG_ENDIAN
+#endif
+
+/*
+ * Define the following sha2_* types to types of the correct length on
+ * the native archtecture. Most BSD systems and Linux define u_intXX_t
+ * types. Machines with very recent ANSI C headers, can use the
+ * uintXX_t definintions from inttypes.h by defining SHA2_USE_INTTYPES_H
+ * during compile or in the sha.h header file.
+ *
+ * Machines that support neither u_intXX_t nor inttypes.h's uintXX_t
+ * will need to define these three typedefs below (and the appropriate
+ * ones in sha.h too) by hand according to their system architecture.
+ *
+ * Thank you, Jun-ichiro itojun Hagino, for suggesting using u_intXX_t
+ * types and pointing out recent ANSI C support for uintXX_t in inttypes.h.
+ */
+typedef uint8_t sha2_byte; /* Exactly 1 byte */
+typedef uint32_t sha2_word32; /* Exactly 4 bytes */
+typedef uint64_t sha2_word64; /* Exactly 8 bytes */
+
+
+/*** SHA-256/384/512 Various Length Definitions ***********************/
+/* NOTE: Most of these are in sha2.h */
+#define SHA256_SHORT_BLOCK_LENGTH (SHA256_BLOCK_LENGTH - 8)
+#define SHA384_SHORT_BLOCK_LENGTH (SHA384_BLOCK_LENGTH - 16)
+#define SHA512_SHORT_BLOCK_LENGTH (SHA512_BLOCK_LENGTH - 16)
+
+
+/*** ENDIAN REVERSAL MACROS *******************************************/
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#define REVERSE32(w,x) { \
+ sha2_word32 tmp = (w); \
+ tmp = (tmp >> 16) | (tmp << 16); \
+ (x) = ((tmp & 0xff00ff00UL) >> 8) | ((tmp & 0x00ff00ffUL) << 8); \
+}
+#define REVERSE64(w,x) { \
+ sha2_word64 tmp = (w); \
+ tmp = (tmp >> 32) | (tmp << 32); \
+ tmp = ((tmp & 0xff00ff00ff00ff00ULL) >> 8) | \
+ ((tmp & 0x00ff00ff00ff00ffULL) << 8); \
+ (x) = ((tmp & 0xffff0000ffff0000ULL) >> 16) | \
+ ((tmp & 0x0000ffff0000ffffULL) << 16); \
+}
+#endif /* __BYTE_ORDER == __LITTLE_ENDIAN */
+
+/*
+ * Macro for incrementally adding the unsigned 64-bit integer n to the
+ * unsigned 128-bit integer (represented using a two-element array of
+ * 64-bit words):
+ */
+#define ADDINC128(w,n) { \
+ (w)[0] += (sha2_word64)(n); \
+ if ((w)[0] < (n)) { \
+ (w)[1]++; \
+ } \
+}
+
+/*
+ * Macros for copying blocks of memory and for zeroing out ranges
+ * of memory. Using these macros makes it easy to switch from
+ * using memset()/memcpy() and using bzero()/bcopy().
+ *
+ * Please define either SHA2_USE_MEMSET_MEMCPY or define
+ * SHA2_USE_BZERO_BCOPY depending on which function set you
+ * choose to use:
+ */
+#if !defined(SHA2_USE_MEMSET_MEMCPY) && !defined(SHA2_USE_BZERO_BCOPY)
+/* Default to memset()/memcpy() if no option is specified */
+#define SHA2_USE_MEMSET_MEMCPY 1
+#endif
+#if defined(SHA2_USE_MEMSET_MEMCPY) && defined(SHA2_USE_BZERO_BCOPY)
+/* Abort with an error if BOTH options are defined */
+#error Define either SHA2_USE_MEMSET_MEMCPY or SHA2_USE_BZERO_BCOPY, not both!
+#endif
+
+#ifdef SHA2_USE_MEMSET_MEMCPY
+#define MEMSET_BZERO(p,l) memset((p), 0, (l))
+#define MEMCPY_BCOPY(d,s,l) memcpy((d), (s), (l))
+#endif
+#ifdef SHA2_USE_BZERO_BCOPY
+#define MEMSET_BZERO(p,l) bzero((p), (l))
+#define MEMCPY_BCOPY(d,s,l) bcopy((s), (d), (l))
+#endif
+
+
+/*** THE SIX LOGICAL FUNCTIONS ****************************************/
+/*
+ * Bit shifting and rotation (used by the six SHA-XYZ logical functions:
+ *
+ * NOTE: The naming of R and S appears backwards here (R is a SHIFT and
+ * S is a ROTATION) because the SHA-256/384/512 description document
+ * (see http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf) uses this
+ * same "backwards" definition.
+ */
+/* Shift-right (used in SHA-256, SHA-384, and SHA-512): */
+#define R(b,x) ((x) >> (b))
+/* 32-bit Rotate-right (used in SHA-256): */
+#define S32(b,x) (((x) >> (b)) | ((x) << (32 - (b))))
+/* 64-bit Rotate-right (used in SHA-384 and SHA-512): */
+#define S64(b,x) (((x) >> (b)) | ((x) << (64 - (b))))
+
+/* Two of six logical functions used in SHA-256, SHA-384, and SHA-512: */
+#define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z)))
+#define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
+
+/* Four of six logical functions used in SHA-256: */
+#define Sigma0_256(x) (S32(2, (x)) ^ S32(13, (x)) ^ S32(22, (x)))
+#define Sigma1_256(x) (S32(6, (x)) ^ S32(11, (x)) ^ S32(25, (x)))
+#define sigma0_256(x) (S32(7, (x)) ^ S32(18, (x)) ^ R(3 , (x)))
+#define sigma1_256(x) (S32(17, (x)) ^ S32(19, (x)) ^ R(10, (x)))
+
+/* Four of six logical functions used in SHA-384 and SHA-512: */
+#define Sigma0_512(x) (S64(28, (x)) ^ S64(34, (x)) ^ S64(39, (x)))
+#define Sigma1_512(x) (S64(14, (x)) ^ S64(18, (x)) ^ S64(41, (x)))
+#define sigma0_512(x) (S64( 1, (x)) ^ S64( 8, (x)) ^ R( 7, (x)))
+#define sigma1_512(x) (S64(19, (x)) ^ S64(61, (x)) ^ R( 6, (x)))
+
+/*** INTERNAL FUNCTION PROTOTYPES *************************************/
+/* NOTE: These should not be accessed directly from outside this
+ * library -- they are intended for private internal visibility/use
+ * only.
+ */
+static void SHA512_Last(SHA512_CTX*);
+static void SHA256_Transform(SHA256_CTX*, const sha2_word32*);
+static void SHA512_Transform(SHA512_CTX*, const sha2_word64*);
+
+
+/*** SHA-XYZ INITIAL HASH VALUES AND CONSTANTS ************************/
+/* Hash constant words K for SHA-256: */
+const static sha2_word32 K256[64] = {
+ 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL,
+ 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL,
+ 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL,
+ 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL,
+ 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL,
+ 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL,
+ 0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL,
+ 0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL,
+ 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL,
+ 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,
+ 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL,
+ 0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL,
+ 0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL,
+ 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL,
+ 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
+ 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL
+};
+
+/* Initial hash value H for SHA-256: */
+const static sha2_word32 sha256_initial_hash_value[8] = {
+ 0x6a09e667UL,
+ 0xbb67ae85UL,
+ 0x3c6ef372UL,
+ 0xa54ff53aUL,
+ 0x510e527fUL,
+ 0x9b05688cUL,
+ 0x1f83d9abUL,
+ 0x5be0cd19UL
+};
+
+/* Hash constant words K for SHA-384 and SHA-512: */
+const static sha2_word64 K512[80] = {
+ 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL,
+ 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL,
+ 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
+ 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL,
+ 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL,
+ 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
+ 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL,
+ 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL,
+ 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL,
+ 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL,
+ 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL,
+ 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
+ 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL,
+ 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL,
+ 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL,
+ 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL,
+ 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL,
+ 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
+ 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL,
+ 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL,
+ 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL,
+ 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL,
+ 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL,
+ 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
+ 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL,
+ 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL,
+ 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL,
+ 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL,
+ 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL,
+ 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
+ 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL,
+ 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL,
+ 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL,
+ 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL,
+ 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL,
+ 0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
+ 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL,
+ 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL,
+ 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL,
+ 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL
+};
+
+/* Initial hash value H for SHA-384 */
+const static sha2_word64 sha384_initial_hash_value[8] = {
+ 0xcbbb9d5dc1059ed8ULL,
+ 0x629a292a367cd507ULL,
+ 0x9159015a3070dd17ULL,
+ 0x152fecd8f70e5939ULL,
+ 0x67332667ffc00b31ULL,
+ 0x8eb44a8768581511ULL,
+ 0xdb0c2e0d64f98fa7ULL,
+ 0x47b5481dbefa4fa4ULL
+};
+
+/* Initial hash value H for SHA-512 */
+const static sha2_word64 sha512_initial_hash_value[8] = {
+ 0x6a09e667f3bcc908ULL,
+ 0xbb67ae8584caa73bULL,
+ 0x3c6ef372fe94f82bULL,
+ 0xa54ff53a5f1d36f1ULL,
+ 0x510e527fade682d1ULL,
+ 0x9b05688c2b3e6c1fULL,
+ 0x1f83d9abfb41bd6bULL,
+ 0x5be0cd19137e2179ULL
+};
+
+/*
+ * Constant used by SHA256/384/512_End() functions for converting the
+ * digest to a readable hexadecimal character string:
+ */
+static const char *sha2_hex_digits = "0123456789abcdef";
+
+
+/*** SHA-256: *********************************************************/
+void sat_SHA256_Init(SHA256_CTX* context) {
+ if (context == (SHA256_CTX*)0) {
+ return;
+ }
+ MEMCPY_BCOPY(context->state, sha256_initial_hash_value, SHA256_DIGEST_LENGTH);
+ MEMSET_BZERO(context->buffer, SHA256_BLOCK_LENGTH);
+ context->bitcount = 0;
+}
+
+#ifdef SHA2_UNROLL_TRANSFORM
+
+/* Unrolled SHA-256 round macros: */
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+
+#define ROUND256_0_TO_15(a,b,c,d,e,f,g,h) \
+ REVERSE32(*data++, W256[j]); \
+ T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \
+ K256[j] + W256[j]; \
+ (d) += T1; \
+ (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \
+ j++
+
+
+#else /* __BYTE_ORDER == __LITTLE_ENDIAN */
+
+#define ROUND256_0_TO_15(a,b,c,d,e,f,g,h) \
+ T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \
+ K256[j] + (W256[j] = *data++); \
+ (d) += T1; \
+ (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \
+ j++
+
+#endif /* __BYTE_ORDER == __LITTLE_ENDIAN */
+
+#define ROUND256(a,b,c,d,e,f,g,h) \
+ s0 = W256[(j+1)&0x0f]; \
+ s0 = sigma0_256(s0); \
+ s1 = W256[(j+14)&0x0f]; \
+ s1 = sigma1_256(s1); \
+ T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + K256[j] + \
+ (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0); \
+ (d) += T1; \
+ (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \
+ j++
+
+static void SHA256_Transform(SHA256_CTX* context, const sha2_word32* data) {
+ sha2_word32 a, b, c, d, e, f, g, h, s0, s1;
+ sha2_word32 T1, *W256;
+ int j;
+
+ W256 = (sha2_word32*)context->buffer;
+
+ /* Initialize registers with the prev. intermediate value */
+ a = context->state[0];
+ b = context->state[1];
+ c = context->state[2];
+ d = context->state[3];
+ e = context->state[4];
+ f = context->state[5];
+ g = context->state[6];
+ h = context->state[7];
+
+ j = 0;
+ do {
+ /* Rounds 0 to 15 (unrolled): */
+ ROUND256_0_TO_15(a,b,c,d,e,f,g,h);
+ ROUND256_0_TO_15(h,a,b,c,d,e,f,g);
+ ROUND256_0_TO_15(g,h,a,b,c,d,e,f);
+ ROUND256_0_TO_15(f,g,h,a,b,c,d,e);
+ ROUND256_0_TO_15(e,f,g,h,a,b,c,d);
+ ROUND256_0_TO_15(d,e,f,g,h,a,b,c);
+ ROUND256_0_TO_15(c,d,e,f,g,h,a,b);
+ ROUND256_0_TO_15(b,c,d,e,f,g,h,a);
+ } while (j < 16);
+
+ /* Now for the remaining rounds to 64: */
+ do {
+ ROUND256(a,b,c,d,e,f,g,h);
+ ROUND256(h,a,b,c,d,e,f,g);
+ ROUND256(g,h,a,b,c,d,e,f);
+ ROUND256(f,g,h,a,b,c,d,e);
+ ROUND256(e,f,g,h,a,b,c,d);
+ ROUND256(d,e,f,g,h,a,b,c);
+ ROUND256(c,d,e,f,g,h,a,b);
+ ROUND256(b,c,d,e,f,g,h,a);
+ } while (j < 64);
+
+ /* Compute the current intermediate hash value */
+ context->state[0] += a;
+ context->state[1] += b;
+ context->state[2] += c;
+ context->state[3] += d;
+ context->state[4] += e;
+ context->state[5] += f;
+ context->state[6] += g;
+ context->state[7] += h;
+
+ /* Clean up */
+ a = b = c = d = e = f = g = h = T1 = 0;
+}
+
+#else /* SHA2_UNROLL_TRANSFORM */
+
+static void SHA256_Transform(SHA256_CTX* context, const sha2_word32* data) {
+ sha2_word32 a, b, c, d, e, f, g, h, s0, s1;
+ sha2_word32 T1, T2, *W256;
+ int j;
+
+ W256 = (sha2_word32*)context->buffer;
+
+ /* Initialize registers with the prev. intermediate value */
+ a = context->state[0];
+ b = context->state[1];
+ c = context->state[2];
+ d = context->state[3];
+ e = context->state[4];
+ f = context->state[5];
+ g = context->state[6];
+ h = context->state[7];
+
+ j = 0;
+ do {
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+ /* Copy data while converting to host byte order */
+ REVERSE32(*data++,W256[j]);
+ /* Apply the SHA-256 compression function to update a..h */
+ T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + W256[j];
+#else /* __BYTE_ORDER == __LITTLE_ENDIAN */
+ /* Apply the SHA-256 compression function to update a..h with copy */
+ T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + (W256[j] = *data++);
+#endif /* __BYTE_ORDER == __LITTLE_ENDIAN */
+ T2 = Sigma0_256(a) + Maj(a, b, c);
+ h = g;
+ g = f;
+ f = e;
+ e = d + T1;
+ d = c;
+ c = b;
+ b = a;
+ a = T1 + T2;
+
+ j++;
+ } while (j < 16);
+
+ do {
+ /* Part of the message block expansion: */
+ s0 = W256[(j+1)&0x0f];
+ s0 = sigma0_256(s0);
+ s1 = W256[(j+14)&0x0f];
+ s1 = sigma1_256(s1);
+
+ /* Apply the SHA-256 compression function to update a..h */
+ T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] +
+ (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0);
+ T2 = Sigma0_256(a) + Maj(a, b, c);
+ h = g;
+ g = f;
+ f = e;
+ e = d + T1;
+ d = c;
+ c = b;
+ b = a;
+ a = T1 + T2;
+
+ j++;
+ } while (j < 64);
+
+ /* Compute the current intermediate hash value */
+ context->state[0] += a;
+ context->state[1] += b;
+ context->state[2] += c;
+ context->state[3] += d;
+ context->state[4] += e;
+ context->state[5] += f;
+ context->state[6] += g;
+ context->state[7] += h;
+
+ /* Clean up */
+ a = b = c = d = e = f = g = h = T1 = T2 = 0;
+}
+
+#endif /* SHA2_UNROLL_TRANSFORM */
+
+void sat_SHA256_Update(SHA256_CTX* context, const sha2_byte *data, size_t len) {
+ unsigned int freespace, usedspace;
+
+ if (len == 0) {
+ /* Calling with no data is valid - we do nothing */
+ return;
+ }
+
+ /* Sanity check: */
+ /* assert(context != (SHA256_CTX*)0 && data != (sha2_byte*)0); */
+
+ usedspace = (context->bitcount >> 3) % SHA256_BLOCK_LENGTH;
+ if (usedspace > 0) {
+ /* Calculate how much free space is available in the buffer */
+ freespace = SHA256_BLOCK_LENGTH - usedspace;
+
+ if (len >= freespace) {
+ /* Fill the buffer completely and process it */
+ MEMCPY_BCOPY(&context->buffer[usedspace], data, freespace);
+ context->bitcount += freespace << 3;
+ len -= freespace;
+ data += freespace;
+ SHA256_Transform(context, (sha2_word32*)context->buffer);
+ } else {
+ /* The buffer is not yet full */
+ MEMCPY_BCOPY(&context->buffer[usedspace], data, len);
+ context->bitcount += len << 3;
+ /* Clean up: */
+ usedspace = freespace = 0;
+ return;
+ }
+ }
+ while (len >= SHA256_BLOCK_LENGTH) {
+ /* Process as many complete blocks as we can */
+ SHA256_Transform(context, (sha2_word32*)data);
+ context->bitcount += SHA256_BLOCK_LENGTH << 3;
+ len -= SHA256_BLOCK_LENGTH;
+ data += SHA256_BLOCK_LENGTH;
+ }
+ if (len > 0) {
+ /* There's left-overs, so save 'em */
+ MEMCPY_BCOPY(context->buffer, data, len);
+ context->bitcount += len << 3;
+ }
+ /* Clean up: */
+ usedspace = freespace = 0;
+}
+
+void sat_SHA256_Final(sha2_byte digest[], SHA256_CTX* context) {
+ sha2_word32 *d = (sha2_word32*)digest;
+ unsigned int usedspace;
+
+ /* Sanity check: */
+ /* assert(context != (SHA256_CTX*)0); */
+
+ /* If no digest buffer is passed, we don't bother doing this: */
+ if (digest != (sha2_byte*)0) {
+ usedspace = (context->bitcount >> 3) % SHA256_BLOCK_LENGTH;
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+ /* Convert FROM host byte order */
+ REVERSE64(context->bitcount,context->bitcount);
+#endif
+ if (usedspace > 0) {
+ /* Begin padding with a 1 bit: */
+ context->buffer[usedspace++] = 0x80;
+
+ if (usedspace <= SHA256_SHORT_BLOCK_LENGTH) {
+ /* Set-up for the last transform: */
+ MEMSET_BZERO(&context->buffer[usedspace], SHA256_SHORT_BLOCK_LENGTH - usedspace);
+ } else {
+ if (usedspace < SHA256_BLOCK_LENGTH) {
+ MEMSET_BZERO(&context->buffer[usedspace], SHA256_BLOCK_LENGTH - usedspace);
+ }
+ /* Do second-to-last transform: */
+ SHA256_Transform(context, (sha2_word32*)context->buffer);
+
+ /* And set-up for the last transform: */
+ MEMSET_BZERO(context->buffer, SHA256_SHORT_BLOCK_LENGTH);
+ }
+ } else {
+ /* Set-up for the last transform: */
+ MEMSET_BZERO(context->buffer, SHA256_SHORT_BLOCK_LENGTH);
+
+ /* Begin padding with a 1 bit: */
+ *context->buffer = 0x80;
+ }
+ /* Set the bit count: */
+ *(sha2_word64*)&context->buffer[SHA256_SHORT_BLOCK_LENGTH] = context->bitcount;
+
+ /* Final transform: */
+ SHA256_Transform(context, (sha2_word32*)context->buffer);
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+ {
+ /* Convert TO host byte order */
+ int j;
+ for (j = 0; j < 8; j++) {
+ REVERSE32(context->state[j],context->state[j]);
+ *d++ = context->state[j];
+ }
+ }
+#else
+ MEMCPY_BCOPY(d, context->state, SHA256_DIGEST_LENGTH);
+#endif
+ }
+
+ /* Clean up state data: */
+ MEMSET_BZERO(context, sizeof(context));
+ usedspace = 0;
+}
+
+char *sat_SHA256_End(SHA256_CTX* context, char buffer[]) {
+ sha2_byte digest[SHA256_DIGEST_LENGTH], *d = digest;
+ int i;
+
+ /* Sanity check: */
+ /* assert(context != (SHA256_CTX*)0); */
+
+ if (buffer != (char*)0) {
+ sat_SHA256_Final(digest, context);
+
+ for (i = 0; i < SHA256_DIGEST_LENGTH; i++) {
+ *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4];
+ *buffer++ = sha2_hex_digits[*d & 0x0f];
+ d++;
+ }
+ *buffer = (char)0;
+ } else {
+ MEMSET_BZERO(context, sizeof(context));
+ }
+ MEMSET_BZERO(digest, SHA256_DIGEST_LENGTH);
+ return buffer;
+}
+
+char* sat_SHA256_Data(const sha2_byte* data, size_t len, char digest[SHA256_DIGEST_STRING_LENGTH]) {
+ SHA256_CTX context;
+
+ sat_SHA256_Init(&context);
+ sat_SHA256_Update(&context, data, len);
+ return sat_SHA256_End(&context, digest);
+}
+
+
+/*** SHA-512: *********************************************************/
+void sat_SHA512_Init(SHA512_CTX* context) {
+ if (context == (SHA512_CTX*)0) {
+ return;
+ }
+ MEMCPY_BCOPY(context->state, sha512_initial_hash_value, SHA512_DIGEST_LENGTH);
+ MEMSET_BZERO(context->buffer, SHA512_BLOCK_LENGTH);
+ context->bitcount[0] = context->bitcount[1] = 0;
+}
+
+#ifdef SHA2_UNROLL_TRANSFORM
+
+/* Unrolled SHA-512 round macros: */
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+
+#define ROUND512_0_TO_15(a,b,c,d,e,f,g,h) \
+ REVERSE64(*data++, W512[j]); \
+ T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \
+ K512[j] + W512[j]; \
+ (d) += T1, \
+ (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)), \
+ j++
+
+
+#else /* __BYTE_ORDER == __LITTLE_ENDIAN */
+
+#define ROUND512_0_TO_15(a,b,c,d,e,f,g,h) \
+ T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \
+ K512[j] + (W512[j] = *data++); \
+ (d) += T1; \
+ (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \
+ j++
+
+#endif /* __BYTE_ORDER == __LITTLE_ENDIAN */
+
+#define ROUND512(a,b,c,d,e,f,g,h) \
+ s0 = W512[(j+1)&0x0f]; \
+ s0 = sigma0_512(s0); \
+ s1 = W512[(j+14)&0x0f]; \
+ s1 = sigma1_512(s1); \
+ T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + K512[j] + \
+ (W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0); \
+ (d) += T1; \
+ (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \
+ j++
+
+static void SHA512_Transform(SHA512_CTX* context, const sha2_word64* data) {
+ sha2_word64 a, b, c, d, e, f, g, h, s0, s1;
+ sha2_word64 T1, *W512 = (sha2_word64*)context->buffer;
+ int j;
+
+ /* Initialize registers with the prev. intermediate value */
+ a = context->state[0];
+ b = context->state[1];
+ c = context->state[2];
+ d = context->state[3];
+ e = context->state[4];
+ f = context->state[5];
+ g = context->state[6];
+ h = context->state[7];
+
+ j = 0;
+ do {
+ ROUND512_0_TO_15(a,b,c,d,e,f,g,h);
+ ROUND512_0_TO_15(h,a,b,c,d,e,f,g);
+ ROUND512_0_TO_15(g,h,a,b,c,d,e,f);
+ ROUND512_0_TO_15(f,g,h,a,b,c,d,e);
+ ROUND512_0_TO_15(e,f,g,h,a,b,c,d);
+ ROUND512_0_TO_15(d,e,f,g,h,a,b,c);
+ ROUND512_0_TO_15(c,d,e,f,g,h,a,b);
+ ROUND512_0_TO_15(b,c,d,e,f,g,h,a);
+ } while (j < 16);
+
+ /* Now for the remaining rounds up to 79: */
+ do {
+ ROUND512(a,b,c,d,e,f,g,h);
+ ROUND512(h,a,b,c,d,e,f,g);
+ ROUND512(g,h,a,b,c,d,e,f);
+ ROUND512(f,g,h,a,b,c,d,e);
+ ROUND512(e,f,g,h,a,b,c,d);
+ ROUND512(d,e,f,g,h,a,b,c);
+ ROUND512(c,d,e,f,g,h,a,b);
+ ROUND512(b,c,d,e,f,g,h,a);
+ } while (j < 80);
+
+ /* Compute the current intermediate hash value */
+ context->state[0] += a;
+ context->state[1] += b;
+ context->state[2] += c;
+ context->state[3] += d;
+ context->state[4] += e;
+ context->state[5] += f;
+ context->state[6] += g;
+ context->state[7] += h;
+
+ /* Clean up */
+ a = b = c = d = e = f = g = h = T1 = 0;
+}
+
+#else /* SHA2_UNROLL_TRANSFORM */
+
+static void SHA512_Transform(SHA512_CTX* context, const sha2_word64* data) {
+ sha2_word64 a, b, c, d, e, f, g, h, s0, s1;
+ sha2_word64 T1, T2, *W512 = (sha2_word64*)context->buffer;
+ int j;
+
+ /* Initialize registers with the prev. intermediate value */
+ a = context->state[0];
+ b = context->state[1];
+ c = context->state[2];
+ d = context->state[3];
+ e = context->state[4];
+ f = context->state[5];
+ g = context->state[6];
+ h = context->state[7];
+
+ j = 0;
+ do {
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+ /* Convert TO host byte order */
+ REVERSE64(*data++, W512[j]);
+ /* Apply the SHA-512 compression function to update a..h */
+ T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + W512[j];
+#else /* __BYTE_ORDER == __LITTLE_ENDIAN */
+ /* Apply the SHA-512 compression function to update a..h with copy */
+ T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + (W512[j] = *data++);
+#endif /* __BYTE_ORDER == __LITTLE_ENDIAN */
+ T2 = Sigma0_512(a) + Maj(a, b, c);
+ h = g;
+ g = f;
+ f = e;
+ e = d + T1;
+ d = c;
+ c = b;
+ b = a;
+ a = T1 + T2;
+
+ j++;
+ } while (j < 16);
+
+ do {
+ /* Part of the message block expansion: */
+ s0 = W512[(j+1)&0x0f];
+ s0 = sigma0_512(s0);
+ s1 = W512[(j+14)&0x0f];
+ s1 = sigma1_512(s1);
+
+ /* Apply the SHA-512 compression function to update a..h */
+ T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] +
+ (W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0);
+ T2 = Sigma0_512(a) + Maj(a, b, c);
+ h = g;
+ g = f;
+ f = e;
+ e = d + T1;
+ d = c;
+ c = b;
+ b = a;
+ a = T1 + T2;
+
+ j++;
+ } while (j < 80);
+
+ /* Compute the current intermediate hash value */
+ context->state[0] += a;
+ context->state[1] += b;
+ context->state[2] += c;
+ context->state[3] += d;
+ context->state[4] += e;
+ context->state[5] += f;
+ context->state[6] += g;
+ context->state[7] += h;
+
+ /* Clean up */
+ a = b = c = d = e = f = g = h = T1 = T2 = 0;
+}
+
+#endif /* SHA2_UNROLL_TRANSFORM */
+
+void sat_SHA512_Update(SHA512_CTX* context, const sha2_byte *data, size_t len) {
+ unsigned int freespace, usedspace;
+
+ if (len == 0) {
+ /* Calling with no data is valid - we do nothing */
+ return;
+ }
+
+ /* Sanity check: */
+ /* assert(context != (SHA512_CTX*)0 && data != (sha2_byte*)0); */
+
+ usedspace = (context->bitcount[0] >> 3) % SHA512_BLOCK_LENGTH;
+ if (usedspace > 0) {
+ /* Calculate how much free space is available in the buffer */
+ freespace = SHA512_BLOCK_LENGTH - usedspace;
+
+ if (len >= freespace) {
+ /* Fill the buffer completely and process it */
+ MEMCPY_BCOPY(&context->buffer[usedspace], data, freespace);
+ ADDINC128(context->bitcount, freespace << 3);
+ len -= freespace;
+ data += freespace;
+ SHA512_Transform(context, (sha2_word64*)context->buffer);
+ } else {
+ /* The buffer is not yet full */
+ MEMCPY_BCOPY(&context->buffer[usedspace], data, len);
+ ADDINC128(context->bitcount, len << 3);
+ /* Clean up: */
+ usedspace = freespace = 0;
+ return;
+ }
+ }
+ while (len >= SHA512_BLOCK_LENGTH) {
+ /* Process as many complete blocks as we can */
+ SHA512_Transform(context, (sha2_word64*)data);
+ ADDINC128(context->bitcount, SHA512_BLOCK_LENGTH << 3);
+ len -= SHA512_BLOCK_LENGTH;
+ data += SHA512_BLOCK_LENGTH;
+ }
+ if (len > 0) {
+ /* There's left-overs, so save 'em */
+ MEMCPY_BCOPY(context->buffer, data, len);
+ ADDINC128(context->bitcount, len << 3);
+ }
+ /* Clean up: */
+ usedspace = freespace = 0;
+}
+
+static void SHA512_Last(SHA512_CTX* context) {
+ unsigned int usedspace;
+
+ usedspace = (context->bitcount[0] >> 3) % SHA512_BLOCK_LENGTH;
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+ /* Convert FROM host byte order */
+ REVERSE64(context->bitcount[0],context->bitcount[0]);
+ REVERSE64(context->bitcount[1],context->bitcount[1]);
+#endif
+ if (usedspace > 0) {
+ /* Begin padding with a 1 bit: */
+ context->buffer[usedspace++] = 0x80;
+
+ if (usedspace <= SHA512_SHORT_BLOCK_LENGTH) {
+ /* Set-up for the last transform: */
+ MEMSET_BZERO(&context->buffer[usedspace], SHA512_SHORT_BLOCK_LENGTH - usedspace);
+ } else {
+ if (usedspace < SHA512_BLOCK_LENGTH) {
+ MEMSET_BZERO(&context->buffer[usedspace], SHA512_BLOCK_LENGTH - usedspace);
+ }
+ /* Do second-to-last transform: */
+ SHA512_Transform(context, (sha2_word64*)context->buffer);
+
+ /* And set-up for the last transform: */
+ MEMSET_BZERO(context->buffer, SHA512_BLOCK_LENGTH - 2);
+ }
+ } else {
+ /* Prepare for final transform: */
+ MEMSET_BZERO(context->buffer, SHA512_SHORT_BLOCK_LENGTH);
+
+ /* Begin padding with a 1 bit: */
+ *context->buffer = 0x80;
+ }
+ /* Store the length of input data (in bits): */
+ *(sha2_word64*)&context->buffer[SHA512_SHORT_BLOCK_LENGTH] = context->bitcount[1];
+ *(sha2_word64*)&context->buffer[SHA512_SHORT_BLOCK_LENGTH+8] = context->bitcount[0];
+
+ /* Final transform: */
+ SHA512_Transform(context, (sha2_word64*)context->buffer);
+}
+
+void sat_SHA512_Final(sha2_byte digest[], SHA512_CTX* context) {
+ sha2_word64 *d = (sha2_word64*)digest;
+
+ /* Sanity check: */
+ /* assert(context != (SHA512_CTX*)0); */
+
+ /* If no digest buffer is passed, we don't bother doing this: */
+ if (digest != (sha2_byte*)0) {
+ SHA512_Last(context);
+
+ /* Save the hash data for output: */
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+ {
+ /* Convert TO host byte order */
+ int j;
+ for (j = 0; j < 8; j++) {
+ REVERSE64(context->state[j],context->state[j]);
+ *d++ = context->state[j];
+ }
+ }
+#else
+ MEMCPY_BCOPY(d, context->state, SHA512_DIGEST_LENGTH);
+#endif
+ }
+
+ /* Zero out state data */
+ MEMSET_BZERO(context, sizeof(context));
+}
+
+char *sat_SHA512_End(SHA512_CTX* context, char buffer[]) {
+ sha2_byte digest[SHA512_DIGEST_LENGTH], *d = digest;
+ int i;
+
+ /* Sanity check: */
+ /* assert(context != (SHA512_CTX*)0); */
+
+ if (buffer != (char*)0) {
+ sat_SHA512_Final(digest, context);
+
+ for (i = 0; i < SHA512_DIGEST_LENGTH; i++) {
+ *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4];
+ *buffer++ = sha2_hex_digits[*d & 0x0f];
+ d++;
+ }
+ *buffer = (char)0;
+ } else {
+ MEMSET_BZERO(context, sizeof(context));
+ }
+ MEMSET_BZERO(digest, SHA512_DIGEST_LENGTH);
+ return buffer;
+}
+
+char* sat_SHA512_Data(const sha2_byte* data, size_t len, char digest[SHA512_DIGEST_STRING_LENGTH]) {
+ SHA512_CTX context;
+
+ sat_SHA512_Init(&context);
+ sat_SHA512_Update(&context, data, len);
+ return sat_SHA512_End(&context, digest);
+}
+
+
+/*** SHA-384: *********************************************************/
+void sat_SHA384_Init(SHA384_CTX* context) {
+ if (context == (SHA384_CTX*)0) {
+ return;
+ }
+ MEMCPY_BCOPY(context->state, sha384_initial_hash_value, SHA512_DIGEST_LENGTH);
+ MEMSET_BZERO(context->buffer, SHA384_BLOCK_LENGTH);
+ context->bitcount[0] = context->bitcount[1] = 0;
+}
+
+void sat_SHA384_Update(SHA384_CTX* context, const sha2_byte* data, size_t len) {
+ sat_SHA512_Update((SHA512_CTX*)context, data, len);
+}
+
+void sat_SHA384_Final(sha2_byte digest[], SHA384_CTX* context) {
+ sha2_word64 *d = (sha2_word64*)digest;
+
+ /* Sanity check: */
+ /* assert(context != (SHA384_CTX*)0); */
+
+ /* If no digest buffer is passed, we don't bother doing this: */
+ if (digest != (sha2_byte*)0) {
+ SHA512_Last((SHA512_CTX*)context);
+
+ /* Save the hash data for output: */
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+ {
+ /* Convert TO host byte order */
+ int j;
+ for (j = 0; j < 6; j++) {
+ REVERSE64(context->state[j],context->state[j]);
+ *d++ = context->state[j];
+ }
+ }
+#else
+ MEMCPY_BCOPY(d, context->state, SHA384_DIGEST_LENGTH);
+#endif
+ }
+
+ /* Zero out state data */
+ MEMSET_BZERO(context, sizeof(context));
+}
+
+char *sat_SHA384_End(SHA384_CTX* context, char buffer[]) {
+ sha2_byte digest[SHA384_DIGEST_LENGTH], *d = digest;
+ int i;
+
+ /* Sanity check: */
+ /* assert(context != (SHA384_CTX*)0); */
+
+ if (buffer != (char*)0) {
+ sat_SHA384_Final(digest, context);
+
+ for (i = 0; i < SHA384_DIGEST_LENGTH; i++) {
+ *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4];
+ *buffer++ = sha2_hex_digits[*d & 0x0f];
+ d++;
+ }
+ *buffer = (char)0;
+ } else {
+ MEMSET_BZERO(context, sizeof(context));
+ }
+ MEMSET_BZERO(digest, SHA384_DIGEST_LENGTH);
+ return buffer;
+}
+
+char* sat_SHA384_Data(const sha2_byte* data, size_t len, char digest[SHA384_DIGEST_STRING_LENGTH]) {
+ SHA384_CTX context;
+
+ sat_SHA384_Init(&context);
+ sat_SHA384_Update(&context, data, len);
+ return sat_SHA384_End(&context, digest);
+}
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
ref: refs/heads/master
commit d366835746b2f19f871d529dcf2298d5326300fa
Author: Ján Kupec <jkupec(a)suse.cz>
Date: Mon Jun 29 15:19:08 2009 +0200
Changes
---
package/zypper.changes | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/package/zypper.changes b/package/zypper.changes
index 02b6a42..8a9edc7 100644
--- a/package/zypper.changes
+++ b/package/zypper.changes
@@ -1,4 +1,13 @@
-------------------------------------------------------------------
+Mon Jun 29 13:59:41 CEST 2009 - jkupec(a)suse.cz
+
+- now 'list-patches' does not hide other updates if software
+ management updates (which are to be installed before any other)
+ are available. (bnc #503068)
+- fixed a bug in selection of updates in 'zypper patch'
+ (bnc #498814)
+
+-------------------------------------------------------------------
Tue Jun 23 18:56:26 CEST 2009 - jkupec(a)suse.cz
- Handle multiple versions of the same package in summary
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
[zypp-commit] <zypper> master : Show all updates, not only sw-mgmt (bnc #503068)
by Ján Kupec 29 Jun '09
by Ján Kupec 29 Jun '09
29 Jun '09
ref: refs/heads/master
commit b246be029797c7d51a004385ce0a9f066ed2a348
Author: Ján Kupec <jkupec(a)suse.cz>
Date: Mon Jun 29 13:49:51 2009 +0200
Show all updates, not only sw-mgmt (bnc #503068)
- now 'list-patches' does not hide other updates if software
management updates (which are to be installed before any other)
are available.
---
src/update.cc | 34 ++++++++++++++++++++++------------
1 files changed, 22 insertions(+), 12 deletions(-)
diff --git a/src/update.cc b/src/update.cc
index 985e977..9600831 100755
--- a/src/update.cc
+++ b/src/update.cc
@@ -187,22 +187,31 @@ static bool list_patch_updates(Zypper & zypper)
// those that affect the package manager go first
// (TODO: user option for this?)
bool affectpm = false;
- if (!pm_tbl.empty ())
+ if (!pm_tbl.empty())
{
affectpm = true;
- if (!tbl.empty ())
- zypper.out().warning(
- _("These are only the updates affecting the updater itself.\n"
- "Other updates are available too.\n"));
- tbl = pm_tbl;
+ if (!tbl.empty())
+ {
+ zypper.out().info(_("The following software management updates will be installed first:"));
+ cout << endl;
+ }
+ pm_tbl.sort(1); // Name
+ cout << pm_tbl;
}
- tbl.sort (1); // Name
-
- if (tbl.empty())
+ tbl.sort(1); // Name
+ if (tbl.empty() && !affectpm)
zypper.out().info(_("No updates found."));
- else
+ else if (!tbl.empty())
+ {
+ if (affectpm)
+ {
+ cout << endl;
+ zypper.out().info(_("The following updates are also available:"));
+ cout << endl;
+ }
cout << tbl;
+ }
return affectpm;
}
@@ -439,7 +448,8 @@ void list_updates(Zypper & zypper, const ResKindSet & kinds, bool best_effort)
affects_pkgmgr = xml_list_patches();
else
{
- zypper.out().info(i18n_kind_updates(*it), Out::QUIET, Out::TYPE_NORMAL);
+ if (kinds.size() > 1)
+ zypper.out().info(i18n_kind_updates(*it), Out::QUIET, Out::TYPE_NORMAL);
zypper.out().info("", Out::QUIET, Out::TYPE_NORMAL); // visual separator
affects_pkgmgr = list_patch_updates(zypper);
}
@@ -633,7 +643,7 @@ mark_patch_update(ui::Selectable & s,
bool skip_interactive, bool ignore_affects_pm)
{
Patch::constPtr patch = asKind<Patch>(s.candidateObj());
- if (s.isBroken())
+ if (s.isBroken()) // bnc #506860
{
DBG << "candidate patch " << patch->name() << " " << ignore_affects_pm << ", "
<< patch->restartSuggested() << endl;
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
[zypp-commit] <sat-solver> master : - add some comments, move code around
by Michael Schroeder 29 Jun '09
by Michael Schroeder 29 Jun '09
29 Jun '09
ref: refs/heads/master
commit 7183cded9607b34447511694cf43aaaff47ad74e
Author: Michael Schroeder <mls(a)suse.de>
Date: Mon Jun 29 12:35:50 2009 +0200
- add some comments, move code around
- add support for RPM_ADD_WITH_PKGID, RPM_ADD_NO_FILELIST,
RPM_ADD_NO_RPMLIBREQS
---
examples/solv.c | 21 +++-
ext/repo_rpmdb.c | 222 ++++++++++++++++++++++++------------------
ext/repo_rpmdb.h | 5 +-
src/repo.c | 201 ++++++++++++++++++++------------------
src/repo.h | 8 +-
src/repodata.c | 31 ++++---
src/repodata.h | 2 +-
src/repopage.c | 10 ++-
src/solverdebug.c | 2 +-
src/transaction.c | 12 ++-
tests/solver/deptestomatic.c | 10 +-
11 files changed, 299 insertions(+), 225 deletions(-)
diff --git a/examples/solv.c b/examples/solv.c
index 89253d1..01c02a3 100644
--- a/examples/solv.c
+++ b/examples/solv.c
@@ -68,6 +68,14 @@ struct repoinfo {
#define TYPE_RPMMD 2
#define TYPE_PLAINDIR 3
+static int
+read_repoinfos_sort(const void *ap, const void *bp)
+{
+ const struct repoinfo *a = ap;
+ const struct repoinfo *b = bp;
+ return strcmp(a->alias, b->alias);
+}
+
struct repoinfo *
read_repoinfos(Pool *pool, const char *reposdir, int *nrepoinfosp)
{
@@ -171,6 +179,7 @@ read_repoinfos(Pool *pool, const char *reposdir, int *nrepoinfosp)
cinfo = 0;
}
closedir(dir);
+ qsort(repoinfos, nrepoinfos, sizeof(*repoinfos), read_repoinfos_sort);
*nrepoinfosp = nrepoinfos;
return repoinfos;
}
@@ -589,13 +598,15 @@ main(int argc, char **argv)
FILE **newpkgsfps;
struct fcstate fcstate;
- if (!strcmp(argv[1], "install") || !strcmp(argv[1], "in"))
+ argc--;
+ argv++;
+ if (!strcmp(argv[0], "install") || !strcmp(argv[0], "in"))
mode = SOLVER_INSTALL;
- else if (!strcmp(argv[1], "erase") || !strcmp(argv[1], "rm"))
+ else if (!strcmp(argv[0], "erase") || !strcmp(argv[0], "rm"))
mode = SOLVER_ERASE;
- else if (!strcmp(argv[1], "show"))
+ else if (!strcmp(argv[0], "show"))
mode = 0;
- else if (!strcmp(argv[1], "update") || !strcmp(argv[1], "up"))
+ else if (!strcmp(argv[0], "update") || !strcmp(argv[0], "up"))
mode = SOLVER_UPDATE;
else
{
@@ -615,7 +626,7 @@ main(int argc, char **argv)
pool_createwhatprovides(pool);
queue_init(&job);
- for (i = 2; i < argc; i++)
+ for (i = 1; i < argc; i++)
mkselect(pool, argv[i], 0, &job);
if (!job.count && mode == SOLVER_UPDATE)
updateall = 1;
diff --git a/ext/repo_rpmdb.c b/ext/repo_rpmdb.c
index 826fa13..5de20b0 100644
--- a/ext/repo_rpmdb.c
+++ b/ext/repo_rpmdb.c
@@ -88,6 +88,11 @@
#define TAG_ENHANCESVERSION 1160
#define TAG_ENHANCESFLAGS 1161
+#define SIGTAG_SIZE 1000
+#define SIGTAG_PGP 1002 /* RSA signature */
+#define SIGTAG_MD5 1004 /* header+payload md5 checksum */
+#define SIGTAG_GPG 1005 /* DSA signature */
+
#define DEP_LESS (1 << 1)
#define DEP_GREATER (1 << 2)
#define DEP_EQUAL (1 << 3)
@@ -107,12 +112,12 @@ typedef struct rpmhead {
unsigned char data[1];
} RpmHead;
-static int
-headexists(RpmHead *h, int tag)
+
+static inline unsigned char *
+headfindtag(RpmHead *h, int tag)
{
unsigned int i;
unsigned char *d, taga[4];
-
d = h->dp - 16;
taga[0] = tag >> 24;
taga[1] = tag >> 16;
@@ -120,27 +125,23 @@ headexists(RpmHead *h, int tag)
taga[3] = tag;
for (i = 0; i < h->cnt; i++, d -= 16)
if (d[3] == taga[3] && d[2] == taga[2] && d[1] == taga[1] && d[0] == taga[0])
- return 1;
+ return d;
return 0;
}
+static int
+headexists(RpmHead *h, int tag)
+{
+ return headfindtag(h, tag) ? 1 : 0;
+}
+
static unsigned int *
headint32array(RpmHead *h, int tag, int *cnt)
{
unsigned int i, o, *r;
- unsigned char *d, taga[4];
+ unsigned char *d = headfindtag(h, tag);
- d = h->dp - 16;
- taga[0] = tag >> 24;
- taga[1] = tag >> 16;
- taga[2] = tag >> 8;
- taga[3] = tag;
- for (i = 0; i < h->cnt; i++, d -= 16)
- if (d[3] == taga[3] && d[2] == taga[2] && d[1] == taga[1] && d[0] == taga[0])
- break;
- if (i >= h->cnt)
- return 0;
- if (d[4] != 0 || d[5] != 0 || d[6] != 0 || d[7] != 4)
+ if (!d || d[4] != 0 || d[5] != 0 || d[6] != 0 || d[7] != 4)
return 0;
o = d[8] << 24 | d[9] << 16 | d[10] << 8 | d[11];
i = d[12] << 24 | d[13] << 16 | d[14] << 8 | d[15];
@@ -155,23 +156,14 @@ headint32array(RpmHead *h, int tag, int *cnt)
return r;
}
+/* returns the first entry of an integer array */
static unsigned int
headint32(RpmHead *h, int tag)
{
unsigned int i, o;
- unsigned char *d, taga[4];
+ unsigned char *d = headfindtag(h, tag);
- d = h->dp - 16;
- taga[0] = tag >> 24;
- taga[1] = tag >> 16;
- taga[2] = tag >> 8;
- taga[3] = tag;
- for (i = 0; i < h->cnt; i++, d -= 16)
- if (d[3] == taga[3] && d[2] == taga[2] && d[1] == taga[1] && d[0] == taga[0])
- break;
- if (i >= h->cnt)
- return 0;
- if (d[4] != 0 || d[5] != 0 || d[6] != 0 || d[7] != 4)
+ if (!d || d[4] != 0 || d[5] != 0 || d[6] != 0 || d[7] != 4)
return 0;
o = d[8] << 24 | d[9] << 16 | d[10] << 8 | d[11];
i = d[12] << 24 | d[13] << 16 | d[14] << 8 | d[15];
@@ -185,19 +177,9 @@ static unsigned int *
headint16array(RpmHead *h, int tag, int *cnt)
{
unsigned int i, o, *r;
- unsigned char *d, taga[4];
+ unsigned char *d = headfindtag(h, tag);
- d = h->dp - 16;
- taga[0] = tag >> 24;
- taga[1] = tag >> 16;
- taga[2] = tag >> 8;
- taga[3] = tag;
- for (i = 0; i < h->cnt; i++, d -= 16)
- if (d[3] == taga[3] && d[2] == taga[2] && d[1] == taga[1] && d[0] == taga[0])
- break;
- if (i >= h->cnt)
- return 0;
- if (d[4] != 0 || d[5] != 0 || d[6] != 0 || d[7] != 3)
+ if (!d || d[4] != 0 || d[5] != 0 || d[6] != 0 || d[7] != 3)
return 0;
o = d[8] << 24 | d[9] << 16 | d[10] << 8 | d[11];
i = d[12] << 24 | d[13] << 16 | d[14] << 8 | d[15];
@@ -215,22 +197,14 @@ headint16array(RpmHead *h, int tag, int *cnt)
static char *
headstring(RpmHead *h, int tag)
{
- unsigned int i, o;
- unsigned char *d, taga[4];
- d = h->dp - 16;
- taga[0] = tag >> 24;
- taga[1] = tag >> 16;
- taga[2] = tag >> 8;
- taga[3] = tag;
- for (i = 0; i < h->cnt; i++, d -= 16)
- if (d[3] == taga[3] && d[2] == taga[2] && d[1] == taga[1] && d[0] == taga[0])
- break;
- if (i >= h->cnt)
- return 0;
+ unsigned int o;
+ unsigned char *d = headfindtag(h, tag);
/* 6: STRING, 9: I18NSTRING */
- if (d[4] != 0 || d[5] != 0 || d[6] != 0 || (d[7] != 6 && d[7] != 9))
+ if (!d || d[4] != 0 || d[5] != 0 || d[6] != 0 || (d[7] != 6 && d[7] != 9))
return 0;
o = d[8] << 24 | d[9] << 16 | d[10] << 8 | d[11];
+ if (o >= h->dcnt)
+ return 0;
return (char *)h->dp + o;
}
@@ -238,20 +212,10 @@ static char **
headstringarray(RpmHead *h, int tag, int *cnt)
{
unsigned int i, o;
- unsigned char *d, taga[4];
+ unsigned char *d = headfindtag(h, tag);
char **r;
- d = h->dp - 16;
- taga[0] = tag >> 24;
- taga[1] = tag >> 16;
- taga[2] = tag >> 8;
- taga[3] = tag;
- for (i = 0; i < h->cnt; i++, d -= 16)
- if (d[3] == taga[3] && d[2] == taga[2] && d[1] == taga[1] && d[0] == taga[0])
- break;
- if (i >= h->cnt)
- return 0;
- if (d[4] != 0 || d[5] != 0 || d[6] != 0 || d[7] != 8)
+ if (!d || d[4] != 0 || d[5] != 0 || d[6] != 0 || d[7] != 8)
return 0;
o = d[8] << 24 | d[9] << 16 | d[10] << 8 | d[11];
i = d[12] << 24 | d[13] << 16 | d[14] << 8 | d[15];
@@ -273,6 +237,22 @@ headstringarray(RpmHead *h, int tag, int *cnt)
return r;
}
+static unsigned char *
+headbinary(RpmHead *h, int tag, unsigned int *sizep)
+{
+ unsigned int i, o;
+ unsigned char *d = headfindtag(h, tag);
+ if (!d || d[4] != 0 || d[5] != 0 || d[6] != 0 || d[7] != 7)
+ return 0;
+ o = d[8] << 24 | d[9] << 16 | d[10] << 8 | d[11];
+ i = d[12] << 24 | d[13] << 16 | d[14] << 8 | d[15];
+ if (o > h->dcnt || o + i < o || o + i > h->dcnt)
+ return 0;
+ if (sizep)
+ *sizep = i;
+ return h->dp + o;
+}
+
static char *headtoevr(RpmHead *h)
{
unsigned int epoch;
@@ -381,16 +361,28 @@ setutf8string(Repodata *repodata, Id handle, Id tag, const char *str)
sat_free(buf);
}
+
+#define MAKEDEPS_FILTER_WEAK (1 << 0)
+#define MAKEDEPS_FILTER_STRONG (1 << 1)
+#define MAKEDEPS_NO_RPMLIB (1 << 2)
+
+/*
+ * strong: 0: ignore strongness
+ * 1: filter to strong
+ * 2: filter to weak
+ */
static unsigned int
-makedeps(Pool *pool, Repo *repo, RpmHead *rpmhead, int tagn, int tagv, int tagf, int strong)
+makedeps(Pool *pool, Repo *repo, RpmHead *rpmhead, int tagn, int tagv, int tagf, int flags)
{
char **n, **v;
unsigned int *f;
int i, cc, nc, vc, fc;
- int haspre = 0;
+ int haspre;
unsigned int olddeps;
Id *ida;
+ int strong;
+ strong = flags & (MAKEDEPS_FILTER_STRONG|MAKEDEPS_FILTER_WEAK);
n = headstringarray(rpmhead, tagn, &nc);
if (!n)
return 0;
@@ -414,19 +406,26 @@ makedeps(Pool *pool, Repo *repo, RpmHead *rpmhead, int tagn, int tagv, int tagf,
}
cc = nc;
- if (strong)
+ haspre = 0; /* add no prereq marker */
+ if (flags)
{
+ /* we do filtering */
cc = 0;
for (i = 0; i < nc; i++)
- if ((f[i] & DEP_STRONG) == (strong == 1 ? 0 : DEP_STRONG))
- {
- cc++;
- if ((f[i] & DEP_PRE) != 0)
- haspre = 1;
- }
+ {
+ if (strong && (f[i] & DEP_STRONG) != (strong == MAKEDEPS_FILTER_WEAK ? 0 : DEP_STRONG))
+ continue;
+ if ((flags & MAKEDEPS_NO_RPMLIB) != 0)
+ if (!strncmp(n[i], "rpmlib(", 7))
+ continue;
+ if ((f[i] & DEP_PRE) != 0)
+ haspre = 1;
+ cc++;
+ }
}
- else
+ else if (tagn == TAG_REQUIRENAME)
{
+ /* no filtering, just look for the first prereq */
for (i = 0; i < nc; i++)
if ((f[i] & DEP_PRE) != 0)
{
@@ -434,8 +433,6 @@ makedeps(Pool *pool, Repo *repo, RpmHead *rpmhead, int tagn, int tagv, int tagf,
break;
}
}
- if (tagn != TAG_REQUIRENAME)
- haspre = 0;
if (cc == 0)
{
sat_free(n);
@@ -452,16 +449,19 @@ makedeps(Pool *pool, Repo *repo, RpmHead *rpmhead, int tagn, int tagv, int tagf,
{
if (haspre != 1)
break;
- haspre = 2;
+ haspre = 2; /* pass two: prereqs */
i = 0;
*ida++ = SOLVABLE_PREREQMARKER;
}
- if (strong && (f[i] & DEP_STRONG) != (strong == 1 ? 0 : DEP_STRONG))
+ if (strong && (f[i] & DEP_STRONG) != (strong == MAKEDEPS_FILTER_WEAK ? 0 : DEP_STRONG))
continue;
if (haspre == 1 && (f[i] & DEP_PRE) != 0)
continue;
if (haspre == 2 && (f[i] & DEP_PRE) == 0)
continue;
+ if ((flags & MAKEDEPS_NO_RPMLIB) != 0)
+ if (!strncmp(n[i], "rpmlib(", 7))
+ continue;
if (f[i] & (DEP_LESS|DEP_GREATER|DEP_EQUAL))
{
Id name, evr;
@@ -796,7 +796,7 @@ addsourcerpm(Pool *pool, Repodata *data, Id handle, char *sourcerpm, char *name,
}
static int
-rpm2solv(Pool *pool, Repo *repo, Repodata *data, Solvable *s, RpmHead *rpmhead)
+rpm2solv(Pool *pool, Repo *repo, Repodata *data, Solvable *s, RpmHead *rpmhead, int flags)
{
char *name;
char *evr;
@@ -828,17 +828,18 @@ rpm2solv(Pool *pool, Repo *repo, Repodata *data, Solvable *s, RpmHead *rpmhead)
s->vendor = str2id(pool, headstring(rpmhead, TAG_VENDOR), 1);
s->provides = makedeps(pool, repo, rpmhead, TAG_PROVIDENAME, TAG_PROVIDEVERSION, TAG_PROVIDEFLAGS, 0);
- s->provides = addfileprovides(pool, repo, data, s, rpmhead, s->provides);
+ if ((flags & RPM_ADD_NO_FILELIST) == 0)
+ s->provides = addfileprovides(pool, repo, data, s, rpmhead, s->provides);
if (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC)
s->provides = repo_addid_dep(repo, s->provides, rel2id(pool, s->name, s->evr, REL_EQ, 1), 0);
- s->requires = makedeps(pool, repo, rpmhead, TAG_REQUIRENAME, TAG_REQUIREVERSION, TAG_REQUIREFLAGS, 0);
+ s->requires = makedeps(pool, repo, rpmhead, TAG_REQUIRENAME, TAG_REQUIREVERSION, TAG_REQUIREFLAGS, (flags & RPM_ADD_NO_RPMLIBREQS) ? MAKEDEPS_NO_RPMLIB : 0);
s->conflicts = makedeps(pool, repo, rpmhead, TAG_CONFLICTNAME, TAG_CONFLICTVERSION, TAG_CONFLICTFLAGS, 0);
s->obsoletes = makedeps(pool, repo, rpmhead, TAG_OBSOLETENAME, TAG_OBSOLETEVERSION, TAG_OBSOLETEFLAGS, 0);
- s->recommends = makedeps(pool, repo, rpmhead, TAG_SUGGESTSNAME, TAG_SUGGESTSVERSION, TAG_SUGGESTSFLAGS, 2);
- s->suggests = makedeps(pool, repo, rpmhead, TAG_SUGGESTSNAME, TAG_SUGGESTSVERSION, TAG_SUGGESTSFLAGS, 1);
- s->supplements = makedeps(pool, repo, rpmhead, TAG_ENHANCESNAME, TAG_ENHANCESVERSION, TAG_ENHANCESFLAGS, 2);
- s->enhances = makedeps(pool, repo, rpmhead, TAG_ENHANCESNAME, TAG_ENHANCESVERSION, TAG_ENHANCESFLAGS, 1);
+ s->recommends = makedeps(pool, repo, rpmhead, TAG_SUGGESTSNAME, TAG_SUGGESTSVERSION, TAG_SUGGESTSFLAGS, MAKEDEPS_FILTER_STRONG);
+ s->suggests = makedeps(pool, repo, rpmhead, TAG_SUGGESTSNAME, TAG_SUGGESTSVERSION, TAG_SUGGESTSFLAGS, MAKEDEPS_FILTER_WEAK);
+ s->supplements = makedeps(pool, repo, rpmhead, TAG_ENHANCESNAME, TAG_ENHANCESVERSION, TAG_ENHANCESFLAGS, MAKEDEPS_FILTER_STRONG);
+ s->enhances = makedeps(pool, repo, rpmhead, TAG_ENHANCESNAME, TAG_ENHANCESVERSION, TAG_ENHANCESFLAGS, MAKEDEPS_FILTER_WEAK);
s->supplements = repo_fix_supplements(repo, s->provides, s->supplements, 0);
s->conflicts = repo_fix_conflicts(repo, s->conflicts);
@@ -1378,7 +1379,7 @@ repo_add_rpmdb(Repo *repo, Repo *ref, const char *rootdir, int flags)
memcpy(rpmhead->data, (unsigned char *)dbdata.data + 8, rpmhead->cnt * 16 + rpmhead->dcnt);
rpmhead->dp = rpmhead->data + rpmhead->cnt * 16;
repo->rpmdbid[(s - pool->solvables) - repo->start] = dbid;
- if (rpm2solv(pool, repo, data, s, rpmhead))
+ if (rpm2solv(pool, repo, data, s, rpmhead, flags))
{
i++;
s = 0;
@@ -1613,7 +1614,7 @@ repo_add_rpmdb(Repo *repo, Repo *ref, const char *rootdir, int flags)
memcpy(rpmhead->data, (unsigned char *)dbdata.data + 8, rpmhead->cnt * 16 + rpmhead->dcnt);
rpmhead->dp = rpmhead->data + rpmhead->cnt * 16;
- rpm2solv(pool, repo, data, s, rpmhead);
+ rpm2solv(pool, repo, data, s, rpmhead, flags);
if ((flags & RPMDB_REPORT_PROGRESS) != 0)
{
if (done < count)
@@ -1668,6 +1669,8 @@ repo_add_rpms(Repo *repo, const char **rpms, int nrpms, int flags)
int headerstart, headerend;
struct stat stb;
Repodata *data;
+ unsigned char pkgid[16];
+ int gotpkgid;
if (!(flags & REPO_REUSE_REPODATA))
data = repo_add_repodata(repo, 0);
@@ -1718,16 +1721,47 @@ repo_add_rpms(Repo *repo, const char **rpms, int nrpms, int flags)
sigdsize += sigcnt * 16;
sigdsize = (sigdsize + 7) & ~7;
headerstart = 96 + 16 + sigdsize;
- while (sigdsize)
+ gotpkgid = 0;
+ if ((flags & RPM_ADD_WITH_PKGID) != 0)
{
- l = sigdsize > 4096 ? 4096 : sigdsize;
- if (fread(lead, l, 1, fp) != 1)
+ unsigned char *chksum;
+ unsigned int chksumsize;
+ /* extract pkgid from the signature header */
+ if (sigdsize > rpmheadsize)
+ {
+ rpmheadsize = sigdsize + 128;
+ rpmhead = sat_realloc(rpmhead, sizeof(*rpmhead) + rpmheadsize);
+ }
+ if (fread(rpmhead->data, sigdsize, 1, fp) != 1)
{
fprintf(stderr, "%s: unexpected EOF\n", rpms[i]);
fclose(fp);
continue;
}
- sigdsize -= l;
+ rpmhead->cnt = sigcnt;
+ rpmhead->dcnt = sigdsize - sigcnt * 16;
+ rpmhead->dp = rpmhead->data + rpmhead->cnt * 16;
+ chksum = headbinary(rpmhead, SIGTAG_MD5, &chksumsize);
+ if (chksum && chksumsize == 16)
+ {
+ gotpkgid = 1;
+ memcpy(pkgid, chksum, 16);
+ }
+ }
+ else
+ {
+ /* just skip the signature header */
+ while (sigdsize)
+ {
+ l = sigdsize > 4096 ? 4096 : sigdsize;
+ if (fread(lead, l, 1, fp) != 1)
+ {
+ fprintf(stderr, "%s: unexpected EOF\n", rpms[i]);
+ fclose(fp);
+ continue;
+ }
+ sigdsize -= l;
+ }
}
if (fread(lead, 16, 1, fp) != 1)
{
@@ -1780,13 +1814,15 @@ repo_add_rpms(Repo *repo, const char **rpms, int nrpms, int flags)
}
fclose(fp);
s = pool_id2solvable(pool, repo_add_solvable(repo));
- rpm2solv(pool, repo, data, s, rpmhead);
+ rpm2solv(pool, repo, data, s, rpmhead, flags);
if (data)
{
Id handle = s - pool->solvables;
repodata_set_location(data, handle, 0, 0, rpms[i]);
repodata_set_num(data, handle, SOLVABLE_DOWNLOADSIZE, (unsigned int)((stb.st_size + 1023) / 1024));
repodata_set_num(data, handle, SOLVABLE_HEADEREND, headerend);
+ if (gotpkgid)
+ repodata_set_bin_checksum(data, handle, SOLVABLE_PKGID, REPOKEY_TYPE_MD5, pkgid);
}
}
if (rpmhead)
diff --git a/ext/repo_rpmdb.h b/ext/repo_rpmdb.h
index 3e80302..abd7364 100644
--- a/ext/repo_rpmdb.h
+++ b/ext/repo_rpmdb.h
@@ -10,7 +10,10 @@
extern void repo_add_rpmdb(Repo *repo, Repo *ref, const char *rootdir, int flags);
extern void repo_add_rpms(Repo *repo, const char **rpms, int nrpms, int flags);
-#define RPMDB_REPORT_PROGRESS (1 << 8)
+#define RPMDB_REPORT_PROGRESS (1 << 8)
+#define RPM_ADD_WITH_PKGID (1 << 9)
+#define RPM_ADD_NO_FILELIST (1 << 10)
+#define RPM_ADD_NO_RPMLIBREQS (1 << 11)
#define RPM_ITERATE_FILELIST_ONLYDIRS (1 << 0)
#define RPM_ITERATE_FILELIST_WITHMD5 (1 << 1)
diff --git a/src/repo.c b/src/repo.c
index 58632eb..494896e 100644
--- a/src/repo.c
+++ b/src/repo.c
@@ -69,11 +69,108 @@ repo_freedata(Repo *repo)
}
/*
- * add Id to repo
- * olddeps = old array to extend
+ * remove repo from pool, zero out (i.e. free) solvables
*
*/
+void
+repo_free(Repo *repo, int reuseids)
+{
+ Pool *pool = repo->pool;
+ Solvable *s;
+ int i;
+
+ pool_freewhatprovides(pool);
+ if (repo == pool->installed)
+ pool->installed = 0;
+
+ if (reuseids && repo->end == pool->nsolvables)
+ {
+ /* it's ok to reuse the ids. As this is the last repo, we can
+ just shrink the solvable array */
+ for (i = repo->end - 1, s = pool->solvables + i; i >= repo->start; i--, s--)
+ if (s->repo != repo)
+ break;
+ repo->end = i + 1;
+ pool->nsolvables = i + 1;
+ }
+ /* zero out (i.e. free) solvables belonging to this repo */
+ for (i = repo->start, s = pool->solvables + i; i < repo->end; i++, s++)
+ if (s->repo == repo)
+ memset(s, 0, sizeof(*s));
+ for (i = 0; i < pool->nrepos; i++) /* find repo in pool */
+ if (pool->repos[i] == repo)
+ break;
+ if (i == pool->nrepos) /* repo not in pool, return */
+ return;
+ if (i < pool->nrepos - 1)
+ {
+ memmove(pool->repos + i, pool->repos + i + 1, (pool->nrepos - 1 - i) * sizeof(Repo *));
+ /* fix repo ids */
+ for (; i < pool->nrepos - 1; i++)
+ pool->repos[i]->repoid = i + 1;
+ }
+ pool->nrepos--;
+ repo_freedata(repo);
+}
+
+void
+repo_freeallrepos(Pool *pool, int reuseids)
+{
+ int i;
+
+ pool_freewhatprovides(pool);
+ for (i = 0; i < pool->nrepos; i++)
+ repo_freedata(pool->repos[i]);
+ pool->repos = sat_free(pool->repos);
+ pool->nrepos = 0;
+ /* the first two solvables don't belong to a repo */
+ pool_free_solvable_block(pool, 2, pool->nsolvables - 2, reuseids);
+}
+
+
+/* repository sidedata is solvable data allocated on demand.
+ * It is used for data that is normally not present
+ * in the solvable like the rpmdbid.
+ * The solvable allocation funcions need to make sure that
+ * the sidedata gets extended if new solvables get added.
+ */
+
+#define REPO_SIDEDATA_BLOCK 63
+
+void *
+repo_sidedata_create(Repo *repo, size_t size)
+{
+ return sat_calloc_block(repo->end - repo->start, size, REPO_SIDEDATA_BLOCK);
+}
+
+void *
+repo_sidedata_extend(Repo *repo, void *b, size_t size, Id p, int count)
+{
+ int n = repo->end - repo->start;
+ if (p < repo->start)
+ {
+ int d = repo->start - p;
+ b = sat_extend(b, n, d, size, REPO_SIDEDATA_BLOCK);
+ memmove((char *)b + d * size, b, n * size);
+ memset(b, 0, d * size);
+ n += d;
+ }
+ if (p + count > repo->end)
+ {
+ int d = p + count - repo->end;
+ b = sat_extend(b, n, d, size, REPO_SIDEDATA_BLOCK);
+ memset((char *)b + n * size, 0, d * size);
+ }
+ return b;
+}
+
+/*
+ * add Id to idarraydata used to store dependencies
+ * olddeps: old array offset to extend
+ * returns new array offset
+ */
+
Offset
repo_addid(Repo *repo, Offset olddeps, Id id)
{
@@ -129,7 +226,7 @@ repo_addid(Repo *repo, Offset olddeps, Id id)
* marker= 0 for normal dep
* marker > 0 add dep after marker
* marker < 0 add dep after -marker
- *
+ * returns new start of dependency array
*/
Offset
repo_addid_dep(Repo *repo, Offset olddeps, Id id, Id marker)
@@ -211,6 +308,9 @@ repo_addid_dep(Repo *repo, Offset olddeps, Id id, Id marker)
/*
* reserve Ids
* make space for 'num' more dependencies
+ * returns new start of dependency array
+ *
+ * reserved ids will always begin at offset idarraysize
*/
Offset
@@ -263,95 +363,6 @@ repo_reserve_ids(Repo *repo, Offset olddeps, int num)
}
-/*
- * remove repo from pool, zero out solvables
- *
- */
-
-void
-repo_free(Repo *repo, int reuseids)
-{
- Pool *pool = repo->pool;
- Solvable *s;
- int i;
-
- pool_freewhatprovides(pool);
- if (repo == pool->installed)
- pool->installed = 0;
-
- if (reuseids && repo->end == pool->nsolvables)
- {
- /* it's ok to reuse the ids. As this is the last repo, we can
- just shrink the solvable array */
- for (i = repo->end - 1, s = pool->solvables + i; i >= repo->start; i--, s--)
- if (s->repo != repo)
- break;
- repo->end = i + 1;
- pool->nsolvables = i + 1;
- }
- /* zero out solvables belonging to this repo */
- for (i = repo->start, s = pool->solvables + i; i < repo->end; i++, s++)
- if (s->repo == repo)
- memset(s, 0, sizeof(*s));
- for (i = 0; i < pool->nrepos; i++) /* find repo in pool */
- if (pool->repos[i] == repo)
- break;
- if (i == pool->nrepos) /* repo not in pool, return */
- return;
- if (i < pool->nrepos - 1)
- {
- memmove(pool->repos + i, pool->repos + i + 1, (pool->nrepos - 1 - i) * sizeof(Repo *));
- /* fix repo ids */
- for (; i < pool->nrepos - 1; i++)
- pool->repos[i]->repoid = i + 1;
- }
- pool->nrepos--;
- repo_freedata(repo);
-}
-
-void
-repo_freeallrepos(Pool *pool, int reuseids)
-{
- int i;
-
- pool_freewhatprovides(pool);
- for (i = 0; i < pool->nrepos; i++)
- repo_freedata(pool->repos[i]);
- pool->repos = sat_free(pool->repos);
- pool->nrepos = 0;
- /* the first two solvables don't belong to a repo */
- pool_free_solvable_block(pool, 2, pool->nsolvables - 2, reuseids);
-}
-
-
-#define REPO_SIDEDATA_BLOCK 63
-
-void *
-repo_sidedata_create(Repo *repo, size_t size)
-{
- return sat_calloc_block(repo->end - repo->start, size, REPO_SIDEDATA_BLOCK);
-}
-
-void *
-repo_sidedata_extend(Repo *repo, void *b, size_t size, Id p, int count)
-{
- int n = repo->end - repo->start;
- if (p < repo->start)
- {
- int d = repo->start - p;
- b = sat_extend(b, n, d, size, REPO_SIDEDATA_BLOCK);
- memmove((char *)b + d * size, b, n * size);
- memset(b, 0, d * size);
- n += d;
- }
- if (p + count > repo->end)
- {
- int d = p + count - repo->end;
- b = sat_extend(b, n, d, size, REPO_SIDEDATA_BLOCK);
- memset((char *)b + n * size, 0, d * size);
- }
- return b;
-}
Offset
repo_fix_supplements(Repo *repo, Offset provides, Offset supplements, Offset freshens)
@@ -895,11 +906,7 @@ repo_lookup_id(Repo *repo, Id entry, Id keyname)
{
Id id = repodata_lookup_id(data, entry, keyname);
if (id)
- {
- if (data->localpool)
- id = repodata_globalize_id(data, id);
- return id;
- }
+ return data->localpool ? repodata_globalize_id(data, id, 1) : id;
}
}
}
diff --git a/src/repo.h b/src/repo.h
index 2fdfa63..b5329e9 100644
--- a/src/repo.h
+++ b/src/repo.h
@@ -71,13 +71,13 @@ static inline Id repo_add_solvable(Repo *repo)
}
else
{
- if (repo->rpmdbid)
- repo->rpmdbid = (Id *)repo_sidedata_extend(repo, repo->rpmdbid, sizeof(Id), p, 1);
if (p < repo->start)
repo->start = p;
if (p + 1 > repo->end)
repo->end = p + 1;
}
+ if (repo->rpmdbid)
+ repo->rpmdbid = (Id *)repo_sidedata_extend(repo, repo->rpmdbid, sizeof(Id), p, 1);
repo->nsolvables++;
repo->pool->solvables[p].repo = repo;
return p;
@@ -98,13 +98,13 @@ static inline Id repo_add_solvable_block(Repo *repo, int count)
}
else
{
- if (repo->rpmdbid)
- repo->rpmdbid = (Id *)repo_sidedata_extend(repo, repo->rpmdbid, sizeof(Id), p, count);
if (p < repo->start)
repo->start = p;
if (p + count > repo->end)
repo->end = p + count;
}
+ if (repo->rpmdbid)
+ repo->rpmdbid = (Id *)repo_sidedata_extend(repo, repo->rpmdbid, sizeof(Id), p, count);
repo->nsolvables += count;
for (s = repo->pool->solvables + p; count--; s++)
s->repo = repo;
diff --git a/src/repodata.c b/src/repodata.c
index fdb7e3a..319f9ab 100644
--- a/src/repodata.c
+++ b/src/repodata.c
@@ -10,6 +10,8 @@
*
* Manage data coming from one repository
*
+ * a repository can contain multiple repodata entries, consisting of
+ * different sets of keys and different sets of solvables
*/
#define _GNU_SOURCE
@@ -529,6 +531,14 @@ repodata_lookup_id(Repodata *data, Id solvid, Id keyname)
return id;
}
+Id
+repodata_globalize_id(Repodata *data, Id id, int create)
+{
+ if (!id || !data || !data->localpool)
+ return id;
+ return str2id(data->repo->pool, stringpool_id2str(&data->spool, id), create);
+}
+
const char *
repodata_lookup_str(Repodata *data, Id solvid, Id keyname)
{
@@ -1434,6 +1444,7 @@ repodata_extend(Repodata *data, Id p)
}
}
+/* extend repodata so that it includes solvables from start to start + num - 1 */
void
repodata_extend_block(Repodata *data, Id start, Id num)
{
@@ -1625,6 +1636,8 @@ repodata_set_str(Repodata *data, Id solvid, Id keyname, const char *str)
data->attrdatalen += l;
}
+/* add an array element consisting of entrysize Ids to the repodata. modifies attriddata
+ * so that the caller can append the new element there */
static void
repodata_add_array(Repodata *data, Id handle, Id keyname, Id keytype, int entrysize)
{
@@ -1721,9 +1734,9 @@ hexstr2bytes(unsigned char *buf, const char *str, int buflen)
int i;
for (i = 0; i < buflen; i++)
{
-#define c2h(c) (((c)>='0' && (c)<='9') ? ((c)-'0') \
- : ((c)>='a' && (c)<='f') ? ((c)-'a'+10) \
- : ((c)>='A' && (c)<='F') ? ((c)-'A'+10) \
+#define c2h(c) (((c)>='0' && (c)<='9') ? ((c)-'0') \
+ : ((c)>='a' && (c)<='f') ? ((c)-('a'-10)) \
+ : ((c)>='A' && (c)<='F') ? ((c)-('A'-10)) \
: -1)
int v = c2h(*str);
str++;
@@ -1776,6 +1789,7 @@ repodata_chk2str(Repodata *data, Id type, const unsigned char *buf)
return str;
}
+/* rpm filenames don't contain the epoch, so strip it */
static inline const char *
evrid2vrstr(Pool *pool, Id evrid)
{
@@ -1856,14 +1870,6 @@ repodata_set_location(Repodata *data, Id solvid, int medianr, const char *dir, c
repodata_set_str(data, solvid, SOLVABLE_MEDIAFILE, file);
}
-Id
-repodata_globalize_id(Repodata *data, Id id)
-{
- if (!data || !data->localpool)
- return id;
- return str2id(data->repo->pool, stringpool_id2str(&data->spool, id), 1);
-}
-
void
repodata_add_dirnumnum(Repodata *data, Id solvid, Id keyname, Id dir, Id num, Id num2)
{
@@ -1939,6 +1945,7 @@ repodata_add_flexarray(Repodata *data, Id solvid, Id keyname, Id ghandle)
data->attriddata[data->attriddatalen++] = 0;
}
+/* add all attrs from src to dest */
void
repodata_merge_attrs(Repodata *data, Id dest, Id src)
{
@@ -2089,7 +2096,7 @@ repodata_serialize_key(Repodata *data, struct extdata *newincore,
schemaid = repodata_schema2id(data, schema, 1);
else if (schemaid != repodata_schema2id(data, schema, 0))
{
- pool_debug(data->repo->pool, SAT_FATAL, "substructs with different schemas\n");
+ pool_debug(data->repo->pool, SAT_FATAL, "fixarray substructs with different schemas\n");
exit(1);
}
#if 0
diff --git a/src/repodata.h b/src/repodata.h
index e425482..74698bf 100644
--- a/src/repodata.h
+++ b/src/repodata.h
@@ -230,7 +230,7 @@ void repodata_merge_attrs(Repodata *data, Id dest, Id src);
void repodata_disable_paging(Repodata *data);
/* helper functions */
-Id repodata_globalize_id(Repodata *data, Id id);
+Id repodata_globalize_id(Repodata *data, Id id, int create);
Id repodata_str2dir(Repodata *data, const char *dir, int create);
const char *repodata_dir2str(Repodata *data, Id did, const char *suf);
const char *repodata_chk2str(Repodata *data, Id type, const unsigned char *buf);
diff --git a/src/repopage.c b/src/repopage.c
index 6ce3ca8..1ba8f7f 100644
--- a/src/repopage.c
+++ b/src/repopage.c
@@ -8,8 +8,14 @@
/*
* repopage.c
*
- * Pageing and compression functions for the vertical repository data
- *
+ * Paging and compression functions for the vertical repository data.
+ * Vertical data is grouped by key, normal data is grouped by solvable.
+ * This makes searching for a string in vertical data fast as there's
+ * no need to skip over data if keys we're not interested in.
+ *
+ * The vertical data is split into pages, each page is compressed with a fast
+ * compression algorithm. These pages are read in on demand, not recently used
+ * pages automatically get dropped.
*/
#define _XOPEN_SOURCE 500
diff --git a/src/solverdebug.c b/src/solverdebug.c
index 6d5af97..f636a98 100644
--- a/src/solverdebug.c
+++ b/src/solverdebug.c
@@ -436,7 +436,7 @@ solver_printtransaction(Solver *solv)
POOL_DEBUG(SAT_DEBUG_RESULT, "upgraded packages (%d):\n", cnt);
break;
case SOLVER_TRANSACTION_VENDORCHANGE:
- POOL_DEBUG(SAT_DEBUG_RESULT, "vendor change from %s to %s (%d):\n", id2strnone(pool, classes.elements[i + 2]), id2strnone(pool, classes.elements[i + 3]), cnt);
+ POOL_DEBUG(SAT_DEBUG_RESULT, "vendor change from '%s' to '%s' (%d):\n", id2strnone(pool, classes.elements[i + 2]), id2strnone(pool, classes.elements[i + 3]), cnt);
break;
case SOLVER_TRANSACTION_ARCHCHANGE:
POOL_DEBUG(SAT_DEBUG_RESULT, "arch change from %s to %s (%d):\n", id2str(pool, classes.elements[i + 2]), id2str(pool, classes.elements[i + 3]), cnt);
diff --git a/src/transaction.c b/src/transaction.c
index 8e8cebf..fe85ff9 100644
--- a/src/transaction.c
+++ b/src/transaction.c
@@ -1267,18 +1267,21 @@ dump_tes(struct orderdata *od)
for (i = 1, te = od->tes + i; i < od->ntes; i++, te++)
{
Solvable *s = pool->solvables + te->p;
- POOL_DEBUG(SAT_WARN, "TE %4d: %c%s\n", i, s->repo == pool->installed ? '-' : '+', solvable2str(pool, s));
+ POOL_DEBUG(SAT_DEBUG_RESULT, "TE %4d: %c%s\n", i, s->repo == pool->installed ? '-' : '+', solvable2str(pool, s));
if (s->repo != pool->installed)
{
queue_empty(&obsq);
transaction_all_obs_pkgs(od->trans, te->p, &obsq);
for (j = 0; j < obsq.count; j++)
- POOL_DEBUG(SAT_WARN, " -%s\n", solvid2str(pool, obsq.elements[j]));
+ POOL_DEBUG(SAT_DEBUG_RESULT, " -%s\n", solvid2str(pool, obsq.elements[j]));
}
for (j = te->edges; od->edgedata[j]; j += 2)
{
te2 = od->tes + od->edgedata[j];
- POOL_DEBUG(SAT_WARN, " --%x--> TE %4d: %s\n", od->edgedata[j + 1], od->edgedata[j], solvid2str(pool, te2->p));
+ if ((od->edgedata[j + 1] & TYPE_BROKEN) == 0)
+ POOL_DEBUG(SAT_DEBUG_RESULT, " --%x--> TE %4d: %s\n", od->edgedata[j + 1], od->edgedata[j], solvid2str(pool, te2->p));
+ else
+ POOL_DEBUG(SAT_DEBUG_RESULT, " ##%x##> TE %4d: %s\n", od->edgedata[j + 1], od->edgedata[j], solvid2str(pool, te2->p));
}
}
}
@@ -1608,6 +1611,7 @@ transaction_order(Transaction *trans, int flags)
}
POOL_DEBUG(SAT_DEBUG_STATS, "cycle edge creation took %d ms\n", sat_timems(now));
+ dump_tes(&od);
/* all edges are finally set up and there are no cycles, now the easy part.
* Create an ordered transaction */
now = sat_timems(0);
@@ -1941,7 +1945,7 @@ transaction_check_pkg(Transaction *trans, Id tepkg, Id pkg, Map *ins, Map *seen,
}
if (!good)
{
- POOL_DEBUG(SAT_WARN, " %c%s: nothing provides %s needed by %c%s\n", pool->solvables[tepkg].repo == pool->installed ? '-' : '+', solvid2str(pool, tepkg), dep2str(pool, req), s->repo == pool->installed ? '-' : '+', solvable2str(pool, s));
+ POOL_DEBUG(SAT_DEBUG_RESULT, " %c%s: nothing provides %s needed by %c%s\n", pool->solvables[tepkg].repo == pool->installed ? '-' : '+', solvid2str(pool, tepkg), dep2str(pool, req), s->repo == pool->installed ? '-' : '+', solvable2str(pool, s));
}
}
}
diff --git a/tests/solver/deptestomatic.c b/tests/solver/deptestomatic.c
index e619661..5ba093c 100644
--- a/tests/solver/deptestomatic.c
+++ b/tests/solver/deptestomatic.c
@@ -1527,17 +1527,17 @@ endElement( void *userData, const char *name )
{
if (verbose >= 2)
{
+#if 1
+ transaction_order(&solv->trans, 0);
+ transaction_check_order(&solv->trans);
+ solver_printtransaction(solv);
+#endif
solver_printdecisions(solv);
solver_printtrivial(solv);
printf("install size change: %d\n\n", solver_calc_installsizechange(solv));
rc_printdownloadsize(solv);
}
rc_printdecisions(solv, &pd->trials);
-#if 1
- transaction_order(&solv->trans, 0);
- transaction_check_order(&solv->trans);
- solver_printtransaction(solv);
-#endif
}
// clean up
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
28 Jun '09
ref: refs/heads/master
commit 50290f31197dfcd286b3c3bd3399cca76c80dc80
Author: Ján Kupec <jkupec(a)suse.cz>
Date: Sun Jun 28 21:36:24 2009 +0200
Using ui::Selectable to install patches.
- using Selectable::isBroken() to decide whether to install a patch
- using Selectable::setToInstall() to install them (bnc #498814)
---
src/update.cc | 27 ++++++++++++++++-----------
src/update.h | 2 ++
2 files changed, 18 insertions(+), 11 deletions(-)
diff --git a/src/update.cc b/src/update.cc
index d37ed25..985e977 100755
--- a/src/update.cc
+++ b/src/update.cc
@@ -629,12 +629,13 @@ void xml_list_updates(const ResKindSet & kinds)
// ----------------------------------------------------------------------------
static bool
-mark_patch_update(const PoolItem & pi, bool skip_interactive, bool ignore_affects_pm)
+mark_patch_update(ui::Selectable & s,
+ bool skip_interactive, bool ignore_affects_pm)
{
- Patch::constPtr patch = asKind<Patch>(pi.resolvable());
- if (pi.isRelevant() && !pi.isSatisfied())
+ Patch::constPtr patch = asKind<Patch>(s.candidateObj());
+ if (s.isBroken())
{
- DBG << "patch " << patch->name() << " " << ignore_affects_pm << ", "
+ DBG << "candidate patch " << patch->name() << " " << ignore_affects_pm << ", "
<< patch->restartSuggested() << endl;
if (ignore_affects_pm || patch->restartSuggested())
{
@@ -646,15 +647,20 @@ mark_patch_update(const PoolItem & pi, bool skip_interactive, bool ignore_affect
// license to confirm and --skip-interactive is requested.
Zypper::instance()->out().warning(str::form(
// translators: %s is the name of a patch
- _("'%s' is interactive, skipping."), patch->name().c_str()));
+ _("'%s' is interactive, skipping."),
+ string(patch->name() + string("-") + patch->edition().asString()).c_str()));
return false;
}
else
{
- mark_item_install(pi);
- return true;
+ bool result = s.setToInstall();
+ if (!result)
+ ERR << "Marking " << s << " for installation failed" << endl;
+ return result;
}
}
+ else
+ XXX << "patch " << s.name() << "is satisfied or not relevant" << endl;
}
return false;
@@ -679,7 +685,7 @@ mark_patch_updates( Zypper & zypper, bool skip_interactive )
for_(it, God->pool().proxy().byKindBegin(ResKind::patch),
God->pool().proxy().byKindEnd (ResKind::patch))
{
- if (mark_patch_update(findTheBest(God->pool(),**it), skip_interactive, ignore_affects_pm))
+ if (mark_patch_update(**it, skip_interactive, ignore_affects_pm))
any_marked = true;
}
}
@@ -710,9 +716,8 @@ mark_patch_updates( Zypper & zypper, bool skip_interactive )
else
{
for_(pit, q.selectableBegin(), q.selectableEnd())
- {
- any_marked = mark_patch_update(findTheBest(God->pool(),**pit), skip_interactive, ignore_affects_pm);
- }
+ if ( mark_patch_update(**pit, skip_interactive, ignore_affects_pm))
+ any_marked = true;
}
}
}
diff --git a/src/update.h b/src/update.h
index cc3fd16..e980bcb 100755
--- a/src/update.h
+++ b/src/update.h
@@ -44,6 +44,7 @@ void mark_updates(Zypper & zypper,
* Similar to zypp::solver::detail::Helper::findUpdateItem()
* but allows changing the vendor and does not allow chaning arch.
*/
+# warning get rid of findUpdateItem, make new API in zypp
zypp::PoolItem findUpdateItem(const zypp::ResPool & pool, const zypp::PoolItem item);
/**
@@ -54,4 +55,5 @@ zypp::PoolItem findUpdateItem(const zypp::ResPool & pool, const zypp::PoolItem i
* the best compatible instead.
* \todo All of this should be done in libzypp, using defined policies.
*/
+# warning get rid of findTheBest, make new API in zypp
zypp::PoolItem findTheBest( const zypp::ResPool & pool, const zypp::ui::Selectable & s);
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
ref: refs/heads/master
commit 1d4bba4e32aadf9850ed1ac30f3ee8a7e4d0ed1f
Author: Ján Kupec <jkupec(a)suse.cz>
Date: Sun Jun 28 21:36:00 2009 +0200
gotcha
---
src/Summary.cc | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/src/Summary.cc b/src/Summary.cc
index 6a10a22..73b9e57 100644
--- a/src/Summary.cc
+++ b/src/Summary.cc
@@ -674,6 +674,7 @@ void Summary::writePackageCounts(ostream & out)
else
// translators: this text will be preceded by a number e.g. "5 packages to ..."
s << _PL("package to downgrade", "packages to downgrade", count);
+ gotcha = true;
}
i = toinstall.find(ResKind::package);
if (i != toinstall.end())
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0
ref: refs/heads/master
commit 8f1eb519bef82565a0c5414f5e5bd8845a28dcae
Author: Ján Kupec <jkupec(a)suse.cz>
Date: Sun Jun 28 17:31:57 2009 +0200
changes
---
package/zypper.changes | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/package/zypper.changes b/package/zypper.changes
index d867d27..02b6a42 100644
--- a/package/zypper.changes
+++ b/package/zypper.changes
@@ -1,4 +1,10 @@
-------------------------------------------------------------------
+Tue Jun 23 18:56:26 CEST 2009 - jkupec(a)suse.cz
+
+- Handle multiple versions of the same package in summary
+ (bnc #389128).
+
+-------------------------------------------------------------------
Mon Jun 8 11:55:57 CEST 2009 - jkupec(a)suse.cz
- some code cleanup and fixes
--
To unsubscribe, e-mail: zypp-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: zypp-commit+help(a)opensuse.org
1
0