Browse Source

Merge remote-tracking branch 'upstream/debian/experimental-no-abi-break' into feature/source-deb822

Conflicts:
	test/integration/test-apt-sources-deb822
debian/1.8.y
Michael Vogt 9 years ago
parent
commit
f744c64c59
  1. 176
      apt-pkg/acquire-item.cc
  2. 100
      apt-pkg/acquire-item.h
  3. 2
      apt-pkg/contrib/fileutl.cc
  4. 28
      apt-pkg/deb/dpkgpm.cc
  5. 9
      apt-private/private-cacheset.cc
  6. 6
      apt-private/private-cmndline.cc
  7. 12
      apt-private/private-list.cc
  8. 8
      apt-private/private-output.cc
  9. 5
      apt-private/private-show.cc
  10. 5
      apt-private/private-sources.cc
  11. 41
      cmdline/apt.cc
  12. 2
      configure.ac
  13. 55
      debian/changelog
  14. 1
      debian/rules
  15. 2
      doc/apt-verbatim.ent
  16. 144
      doc/po/apt-doc.pot
  17. 193
      doc/po/de.po
  18. 193
      doc/po/es.po
  19. 193
      doc/po/fr.po
  20. 193
      doc/po/it.po
  21. 193
      doc/po/ja.po
  22. 193
      doc/po/pl.po
  23. 193
      doc/po/pt.po
  24. 154
      doc/po/pt_BR.po
  25. 1200
      methods/rred.cc
  26. 169
      po/ar.po
  27. 187
      po/ast.po
  28. 187
      po/bg.po
  29. 169
      po/bs.po
  30. 187
      po/ca.po
  31. 187
      po/cs.po
  32. 169
      po/cy.po
  33. 188
      po/da.po
  34. 188
      po/de.po
  35. 169
      po/dz.po
  36. 169
      po/el.po
  37. 187
      po/es.po
  38. 169
      po/eu.po
  39. 169
      po/fi.po
  40. 188
      po/fr.po
  41. 187
      po/gl.po
  42. 187
      po/hu.po
  43. 187
      po/it.po
  44. 187
      po/ja.po
  45. 169
      po/km.po
  46. 187
      po/ko.po
  47. 169
      po/ku.po
  48. 169
      po/lt.po
  49. 169
      po/mr.po
  50. 187
      po/nb.po
  51. 169
      po/ne.po
  52. 187
      po/nl.po
  53. 169
      po/nn.po
  54. 187
      po/pl.po
  55. 187
      po/pt.po
  56. 169
      po/pt_BR.po
  57. 169
      po/ro.po
  58. 187
      po/ru.po
  59. 187
      po/sk.po
  60. 187
      po/sl.po
  61. 187
      po/sv.po
  62. 182
      po/th.po
  63. 169
      po/tl.po
  64. 187
      po/tr.po
  65. 187
      po/uk.po
  66. 187
      po/vi.po
  67. 179
      po/zh_CN.po
  68. 169
      po/zh_TW.po
  69. 32
      test/integration/framework
  70. 47
      test/integration/test-apt-binary
  71. 17
      test/integration/test-apt-progress-fd-conffile
  72. 58
      test/integration/test-apt-sources-deb822
  73. 19
      test/integration/test-bug-728500-tempdir
  74. 156
      test/integration/test-pdiff-usage
  75. 1
      test/libapt/sourcelist_test.cc

176
apt-pkg/acquire-item.cc

@ -369,10 +369,10 @@ pkgAcqDiffIndex::pkgAcqDiffIndex(pkgAcquire *Owner,
return;
}
if(Debug)
std::clog << "pkgAcqIndexDiffs::pkgAcqIndexDiffs(): "
<< CurrentPackagesFile << std::endl;
if(Debug)
std::clog << "pkgAcqDiffIndex::pkgAcqDiffIndex(): "
<< CurrentPackagesFile << std::endl;
QueueURI(Desc);
}
@ -398,8 +398,8 @@ string pkgAcqDiffIndex::Custom600Headers()
bool pkgAcqDiffIndex::ParseDiffIndex(string IndexDiffFile) /*{{{*/
{
if(Debug)
std::clog << "pkgAcqIndexDiffs::ParseIndexDiff() " << IndexDiffFile
<< std::endl;
std::clog << "pkgAcqDiffIndex::ParseIndexDiff() " << IndexDiffFile
<< std::endl;
pkgTagSection Tags;
string ServerSha1;
@ -426,16 +426,18 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string IndexDiffFile) /*{{{*/
SHA1.AddFD(fd);
string const local_sha1 = SHA1.Result();
if(local_sha1 == ServerSha1)
if(local_sha1 == ServerSha1)
{
// we have the same sha1 as the server
// we have the same sha1 as the server so we are done here
if(Debug)
std::clog << "Package file is up-to-date" << std::endl;
// set found to true, this will queue a pkgAcqIndexDiffs with
// a empty availabe_patches
found = true;
}
else
// list cleanup needs to know that this file as well as the already
// present index is ours, so we create an empty diff to save it for us
new pkgAcqIndexDiffs(Owner, RealURI, Description, Desc.ShortDesc,
ExpectedHash, ServerSha1, available_patches);
return true;
}
else
{
if(Debug)
std::clog << "SHA1-Current: " << ServerSha1 << " and we start at "<< fd.Name() << " " << fd.Size() << " " << local_sha1 << std::endl;
@ -460,7 +462,7 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string IndexDiffFile) /*{{{*/
if (available_patches.empty() == false)
{
// patching with too many files is rather slow compared to a fast download
unsigned long const fileLimit = _config->FindI("Acquire::PDiffs::FileLimit", 20);
unsigned long const fileLimit = _config->FindI("Acquire::PDiffs::FileLimit", 0);
if (fileLimit != 0 && fileLimit < available_patches.size())
{
if (Debug)
@ -496,14 +498,37 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string IndexDiffFile) /*{{{*/
}
// we have something, queue the next diff
if(found)
if(found)
{
// queue the diffs
string::size_type const last_space = Description.rfind(" ");
if(last_space != string::npos)
Description.erase(last_space, Description.size()-last_space);
new pkgAcqIndexDiffs(Owner, RealURI, Description, Desc.ShortDesc,
ExpectedHash, ServerSha1, available_patches);
/* decide if we should download patches one by one or in one go:
The first is good if the server merges patches, but many don't so client
based merging can be attempt in which case the second is better.
"bad things" will happen if patches are merged on the server,
but client side merging is attempt as well */
bool pdiff_merge = _config->FindB("Acquire::PDiffs::Merge", true);
if (pdiff_merge == true)
{
// reprepro adds this flag if it has merged patches on the server
std::string const precedence = Tags.FindS("X-Patch-Precedence");
pdiff_merge = (precedence != "merged");
}
if (pdiff_merge == false)
new pkgAcqIndexDiffs(Owner, RealURI, Description, Desc.ShortDesc,
ExpectedHash, ServerSha1, available_patches);
else
{
std::vector<pkgAcqIndexMergeDiffs*> *diffs = new std::vector<pkgAcqIndexMergeDiffs*>(available_patches.size());
for(size_t i = 0; i < available_patches.size(); ++i)
(*diffs)[i] = new pkgAcqIndexMergeDiffs(Owner, RealURI, Description, Desc.ShortDesc, ExpectedHash,
available_patches[i], diffs);
}
Complete = false;
Status = StatDone;
Dequeue();
@ -752,6 +777,123 @@ void pkgAcqIndexDiffs::Done(string Message,unsigned long long Size,string Md5Has
}
}
/*}}}*/
// AcqIndexMergeDiffs::AcqIndexMergeDiffs - Constructor /*{{{*/
pkgAcqIndexMergeDiffs::pkgAcqIndexMergeDiffs(pkgAcquire *Owner,
string const &URI, string const &URIDesc,
string const &ShortDesc, HashString const &ExpectedHash,
DiffInfo const &patch,
std::vector<pkgAcqIndexMergeDiffs*> const * const allPatches)
: Item(Owner), RealURI(URI), ExpectedHash(ExpectedHash),
patch(patch),allPatches(allPatches), State(StateFetchDiff)
{
DestFile = _config->FindDir("Dir::State::lists") + "partial/";
DestFile += URItoFileName(URI);
Debug = _config->FindB("Debug::pkgAcquire::Diffs",false);
Description = URIDesc;
Desc.Owner = this;
Desc.ShortDesc = ShortDesc;
Desc.URI = string(RealURI) + ".diff/" + patch.file + ".gz";
Desc.Description = Description + " " + patch.file + string(".pdiff");
DestFile = _config->FindDir("Dir::State::lists") + "partial/";
DestFile += URItoFileName(RealURI + ".diff/" + patch.file);
if(Debug)
std::clog << "pkgAcqIndexMergeDiffs: " << Desc.URI << std::endl;
QueueURI(Desc);
}
/*}}}*/
void pkgAcqIndexMergeDiffs::Failed(string Message,pkgAcquire::MethodConfig *Cnf)/*{{{*/
{
if(Debug)
std::clog << "pkgAcqIndexMergeDiffs failed: " << Desc.URI << " with " << Message << std::endl;
Complete = false;
Status = StatDone;
Dequeue();
// check if we are the first to fail, otherwise we are done here
State = StateDoneDiff;
for (std::vector<pkgAcqIndexMergeDiffs *>::const_iterator I = allPatches->begin();
I != allPatches->end(); ++I)
if ((*I)->State == StateErrorDiff)
return;
// first failure means we should fallback
State = StateErrorDiff;
std::clog << "Falling back to normal index file aquire" << std::endl;
new pkgAcqIndex(Owner, RealURI, Description,Desc.ShortDesc,
ExpectedHash);
}
/*}}}*/
void pkgAcqIndexMergeDiffs::Done(string Message,unsigned long long Size,string Md5Hash, /*{{{*/
pkgAcquire::MethodConfig *Cnf)
{
if(Debug)
std::clog << "pkgAcqIndexMergeDiffs::Done(): " << Desc.URI << std::endl;
Item::Done(Message,Size,Md5Hash,Cnf);
string const FinalFile = _config->FindDir("Dir::State::lists") + URItoFileName(RealURI);
if (State == StateFetchDiff)
{
// rred expects the patch as $FinalFile.ed.$patchname.gz
Rename(DestFile, FinalFile + ".ed." + patch.file + ".gz");
// check if this is the last completed diff
State = StateDoneDiff;
for (std::vector<pkgAcqIndexMergeDiffs *>::const_iterator I = allPatches->begin();
I != allPatches->end(); ++I)
if ((*I)->State != StateDoneDiff)
{
if(Debug)
std::clog << "Not the last done diff in the batch: " << Desc.URI << std::endl;
return;
}
// this is the last completed diff, so we are ready to apply now
State = StateApplyDiff;
if(Debug)
std::clog << "Sending to rred method: " << FinalFile << std::endl;
Local = true;
Desc.URI = "rred:" + FinalFile;
QueueURI(Desc);
Mode = "rred";
return;
}
// success in download/apply all diffs, clean up
else if (State == StateApplyDiff)
{
// see if we really got the expected file
if(!ExpectedHash.empty() && !ExpectedHash.VerifyFile(DestFile))
{
RenameOnError(HashSumMismatch);
return;
}
// move the result into place
if(Debug)
std::clog << "Moving patched file in place: " << std::endl
<< DestFile << " -> " << FinalFile << std::endl;
Rename(DestFile, FinalFile);
chmod(FinalFile.c_str(), 0644);
// otherwise lists cleanup will eat the file
DestFile = FinalFile;
// all set and done
Complete = true;
if(Debug)
std::clog << "allDone: " << DestFile << "\n" << std::endl;
}
}
/*}}}*/
// AcqIndex::AcqIndex - Constructor /*{{{*/
// ---------------------------------------------------------------------
/* The package file is added to the queue and a second class is

100
apt-pkg/acquire-item.h

@ -429,7 +429,105 @@ class pkgAcqDiffIndex : public pkgAcquire::Item
std::string ShortDesc, HashString ExpectedHash);
};
/*}}}*/
/** \brief An item that is responsible for fetching all the patches {{{
/** \brief An item that is responsible for fetching client-merge patches {{{
* that need to be applied to a given package index file.
*
* Instead of downloading and applying each patch one by one like its
* sister #pkgAcqIndexDiffs this class will download all patches at once
* and call rred with all the patches downloaded once. Rred will then
* merge and apply them in one go, which should be a lot faster but is
* incompatible with server-based merges of patches like reprepro can do.
*
* \sa pkgAcqDiffIndex, pkgAcqIndex
*/
class pkgAcqIndexMergeDiffs : public pkgAcquire::Item
{
protected:
/** \brief If \b true, debugging output will be written to
* std::clog.
*/
bool Debug;
/** \brief description of the item that is currently being
* downloaded.
*/
pkgAcquire::ItemDesc Desc;
/** \brief URI of the package index file that is being
* reconstructed.
*/
std::string RealURI;
/** \brief HashSum of the package index file that is being
* reconstructed.
*/
HashString ExpectedHash;
/** \brief description of the file being downloaded. */
std::string Description;
/** \brief information about the current patch */
struct DiffInfo const patch;
/** \brief list of all download items for the patches */
std::vector<pkgAcqIndexMergeDiffs*> const * const allPatches;
/** The current status of this patch. */
enum DiffState
{
/** \brief The diff is currently being fetched. */
StateFetchDiff,
/** \brief The diff is currently being applied. */
StateApplyDiff,
/** \brief the work with this diff is done */
StateDoneDiff,
/** \brief something bad happened and fallback was triggered */
StateErrorDiff
} State;
public:
/** \brief Called when the patch file failed to be downloaded.
*
* This method will fall back to downloading the whole index file
* outright; its arguments are ignored.
*/
virtual void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf);
virtual void Done(std::string Message,unsigned long long Size,std::string Md5Hash,
pkgAcquire::MethodConfig *Cnf);
virtual std::string DescURI() {return RealURI + "Index";};
/** \brief Create an index merge-diff item.
*
* \param Owner The pkgAcquire object that owns this item.
*
* \param URI The URI of the package index file being
* reconstructed.
*
* \param URIDesc A long description of this item.
*
* \param ShortDesc A brief description of this item.
*
* \param ExpectedHash The expected md5sum of the completely
* reconstructed package index file; the index file will be tested
* against this value when it is entirely reconstructed.
*
* \param patch contains infos about the patch this item is supposed
* to download which were read from the index
*
* \param allPatches contains all related items so that each item can
* check if it was the last one to complete the download step
*/
pkgAcqIndexMergeDiffs(pkgAcquire *Owner,std::string const &URI,std::string const &URIDesc,
std::string const &ShortDesc, HashString const &ExpectedHash,
DiffInfo const &patch, std::vector<pkgAcqIndexMergeDiffs*> const * const allPatches);
};
/*}}}*/
/** \brief An item that is responsible for fetching server-merge patches {{{
* that need to be applied to a given package index file.
*
* After downloading and applying a single patch, this item will

2
apt-pkg/contrib/fileutl.cc

@ -465,7 +465,7 @@ std::vector<string> GetListOfFilesInDir(string const &Dir, std::vector<string> c
const char *C = Ent->d_name;
for (; *C != 0; ++C)
if (isalpha(*C) == 0 && isdigit(*C) == 0
&& *C != '_' && *C != '-') {
&& *C != '_' && *C != '-' && *C != ':') {
// no required extension -> dot is a bad character
if (*C == '.' && Ext.empty() == false)
continue;

28
apt-pkg/deb/dpkgpm.cc

@ -1028,6 +1028,12 @@ bool pkgDPkgPM::Go(int StatusFd)
void pkgDPkgPM::StartPtyMagic()
{
if (_config->FindB("Dpkg::Use-Pty", true) == false)
{
d->master = d->slave = -1;
return;
}
// setup the pty and stuff
struct winsize win;
@ -1036,10 +1042,9 @@ void pkgDPkgPM::StartPtyMagic()
_error->PushToStack();
if (tcgetattr(STDOUT_FILENO, &d->tt) == 0)
{
ioctl(1, TIOCGWINSZ, (char *)&win);
if (_config->FindB("Dpkg::Use-Pty", true) == false)
if (ioctl(1, TIOCGWINSZ, (char *)&win) < 0)
{
d->master = d->slave = -1;
_error->Errno("ioctl", _("ioctl(TIOCGWINSZ) failed"));
} else if (openpty(&d->master, &d->slave, NULL, &d->tt, &win) < 0)
{
_error->Errno("openpty", _("Can not write log (%s)"), _("Is /dev/pts mounted?"));
@ -1393,12 +1398,17 @@ bool pkgDPkgPM::GoNoABIBreak(APT::Progress::PackageManager *progress)
if(d->slave >= 0 && d->master >= 0)
{
setsid();
ioctl(d->slave, TIOCSCTTY, 0);
close(d->master);
dup2(d->slave, 0);
dup2(d->slave, 1);
dup2(d->slave, 2);
close(d->slave);
int res = ioctl(d->slave, TIOCSCTTY, 0);
if (res < 0) {
std::cerr << "ioctl(TIOCSCTTY) failed for fd: "
<< d->slave << std::endl;
} else {
close(d->master);
dup2(d->slave, 0);
dup2(d->slave, 1);
dup2(d->slave, 2);
close(d->slave);
}
}
close(fd[0]); // close the read end of the pipe

9
apt-private/private-cacheset.cc

@ -52,6 +52,15 @@ bool GetLocalitySortedVersionSet(pkgCacheFile &CacheFile,
output_set.insert(policy->GetCandidateVer(P));
}
}
else if (_config->FindB("APT::Cmd::Manual-Installed") == true)
{
if (P.CurrentVer() &&
((*DepCache)[P].Flags & pkgCache::Flag::Auto) == false)
{
pkgPolicy *policy = CacheFile.GetPolicy();
output_set.insert(policy->GetCandidateVer(P));
}
}
else
{
pkgPolicy *policy = CacheFile.GetPolicy();

6
apt-private/private-cmndline.cc

@ -226,9 +226,15 @@ bool addArgumentsAPT(std::vector<CommandLine::Args> &Args, char const * const Cm
{
addArg(0,"installed","APT::Cmd::Installed",0);
addArg(0,"upgradable","APT::Cmd::Upgradable",0);
addArg(0,"manual-installed","APT::Cmd::Manual-Installed",0);
addArg('v', "verbose", "APT::Cmd::List-Include-Summary", 0);
addArg('a', "all-versions", "APT::Cmd::All-Versions", 0);
}
else if (CmdMatches("upgrade"))
{
// FIXME: find a better term
addArg(0,"dist","APT::Cmd::Dist-Upgrade", CommandLine::Boolean);
}
else if (addArgumentsAPTGet(Args, Cmd) || addArgumentsAPTCache(Args, Cmd))
{
// we have no (supported) command-name overlaps so far, so we call

12
apt-private/private-list.cc

@ -101,11 +101,15 @@ private:
/*}}}*/
void ListAllVersions(pkgCacheFile &CacheFile, pkgRecords &records, /*{{{*/
pkgCache::PkgIterator P,
std::ostream &outs)
std::ostream &outs,
bool include_summary=true)
{
for (pkgCache::VerIterator Ver = P.VersionList();
Ver.end() == false; Ver++)
ListSingleVersion(CacheFile, records, Ver, outs);
{
ListSingleVersion(CacheFile, records, Ver, outs, include_summary);
outs << "\n";
}
}
/*}}}*/
// list - list package based on criteria /*{{{*/
@ -136,7 +140,7 @@ bool List(CommandLine &Cmd)
PackageNameMatcher matcher(patterns);
LocalitySortedVersionSet bag;
OpTextProgress progress;
OpTextProgress progress(*_config);
progress.OverallProgress(0,
Cache->Head().PackageCount,
Cache->Head().PackageCount,
@ -147,7 +151,7 @@ bool List(CommandLine &Cmd)
std::stringstream outs;
if(_config->FindB("APT::Cmd::All-Versions", false) == true)
{
ListAllVersions(CacheFile, records, V.ParentPkg(), outs);
ListAllVersions(CacheFile, records, V.ParentPkg(), outs, includeSummary);
output_map.insert(std::make_pair<std::string, std::string>(
V.ParentPkg().Name(), outs.str()));
} else {

8
apt-private/private-output.cc

@ -114,11 +114,13 @@ std::string GetVersion(pkgCacheFile &CacheFile, pkgCache::VerIterator V)/*{{{*/
pkgCache::PkgIterator P = V.ParentPkg();
if (V == P.CurrentVer())
{
std::string inst_str = DeNull(V.VerStr());
#if 0 // FIXME: do we want this or something like this?
pkgDepCache *DepCache = CacheFile.GetDepCache();
pkgDepCache::StateCache &state = (*DepCache)[P];
std::string inst_str = DeNull(V.VerStr());
if (state.Upgradable())
return "**"+inst_str;
#endif
return inst_str;
}
@ -224,11 +226,11 @@ void ListSingleVersion(pkgCacheFile &CacheFile, pkgRecords &records, /*{{{*/
else
out << GetVersion(CacheFile, V);
}
out << " " << GetArchitecture(CacheFile, P) << " ";
out << " " << GetArchitecture(CacheFile, P);
if (include_summary)
{
out << std::endl
<< " " << GetShortDescription(CacheFile, records, P)
<< " " << GetShortDescription(CacheFile, records, P)
<< std::endl;
}
}

5
apt-private/private-show.cc

@ -74,13 +74,12 @@ bool DisplayRecord(pkgCacheFile &CacheFile, pkgCache::VerIterator V,
// write the description
pkgRecords Recs(*Cache);
// FIXME: show (optionally) all available translations(?)
pkgCache::DescIterator Desc = V.TranslatedDescription();
if (Desc.end() == false)
{
pkgRecords::Parser &P = Recs.Lookup(Desc.FileList());
if (strcmp(Desc.LanguageCode(),"") != 0)
out << "Description-lang: " << Desc.LanguageCode() << std::endl;
out << "Description" << P.LongDesc();
out << "Description: " << P.LongDesc();
}
// write a final newline (after the description)

5
apt-private/private-sources.cc

@ -32,6 +32,10 @@ bool EditSources(CommandLine &CmdL)
if (FileExists(sourceslist))
before.FromFile(sourceslist);
int lockfd = GetLock(sourceslist);
if (lockfd < 0)
return false;
do {
EditFileInSensibleEditor(sourceslist);
_error->PushToStack();
@ -46,6 +50,7 @@ bool EditSources(CommandLine &CmdL)
}
_error->RevertToStack();
} while (res == false);
close(lockfd);
if (FileExists(sourceslist) && !before.VerifyFile(sourceslist)) {
strprintf(

41
cmdline/apt.cc

@ -71,13 +71,16 @@ bool ShowHelp(CommandLine &CmdL)
_("Usage: apt [options] command\n"
"\n"
"CLI for apt.\n"
"Commands: \n"
"Basic commands: \n"
" list - list packages based on package names\n"
" search - search in package descriptions\n"
" show - show package details\n"
"\n"
" update - update list of available packages\n"
"\n"
" install - install packages\n"
" remove - remove packages\n"
"\n"
" upgrade - upgrade the systems packages\n"
"\n"
" edit-sources - edit the source information file\n"
@ -86,6 +89,15 @@ bool ShowHelp(CommandLine &CmdL)
return true;
}
// figure out what kind of upgrade the user wants
bool DoAptUpgrade(CommandLine &CmdL)
{
if (_config->FindB("Apt::Cmd::Dist-Upgrade"))
return DoDistUpgrade(CmdL);
else
return DoUpgradeWithAllowNewPackages(CmdL);
}
int main(int argc, const char *argv[]) /*{{{*/
{
CommandLine::Dispatch Cmds[] = {{"list",&List},
@ -94,8 +106,9 @@ int main(int argc, const char *argv[]) /*{{{*/
// needs root
{"install",&DoInstall},
{"remove", &DoInstall},
{"purge", &DoInstall},
{"update",&DoUpdate},
{"upgrade",&DoUpgradeWithAllowNewPackages},
{"upgrade",&DoAptUpgrade},
// misc
{"edit-sources",&EditSources},
// helper
@ -105,17 +118,6 @@ int main(int argc, const char *argv[]) /*{{{*/
std::vector<CommandLine::Args> Args = getCommandArgs("apt", CommandLine::GetCommand(Cmds, argc, argv));
if(!isatty(1))
{
std::cerr << std::endl
<< "WARNING WARNING "
<< argv[0]
<< " is *NOT* intended for scripts "
<< "use at your own peril^Wrisk"
<< std::endl
<< std::endl;
}
InitOutput();
// Set up gettext support
@ -141,6 +143,19 @@ int main(int argc, const char *argv[]) /*{{{*/
return 100;
}
if(!isatty(STDOUT_FILENO) &&
_config->FindB("Apt::Cmd::Disable-Script-Warning", false) == false)
{
std::cerr << std::endl
<< "WARNING: " << argv[0] << " "
<< "does not have a stable CLI interface yet. "
<< "Use with caution in scripts."
<< std::endl
<< std::endl;
}
if (!isatty(STDOUT_FILENO) && _config->FindI("quiet", -1) == -1)
_config->Set("quiet","1");
// See if the help should be shown
if (_config->FindB("help") == true ||
_config->FindB("version") == true ||

2
configure.ac

@ -18,7 +18,7 @@ AC_CONFIG_AUX_DIR(buildlib)
AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in)
PACKAGE="apt"
PACKAGE_VERSION="0.9.14.2"
PACKAGE_VERSION="0.9.14.3~exp3"
PACKAGE_MAIL="APT Development Team <deity@lists.debian.org>"
AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
AC_DEFINE_UNQUOTED(PACKAGE_VERSION,"$PACKAGE_VERSION")

55
debian/changelog

@ -1,3 +1,58 @@
apt (0.9.14.3~exp3) experimental; urgency=low
* implement deb822 suggestions by donkult (thanks!):
- rename "Dist" to "Suites"
- rename "Section" to "Sections"
- rename "Architectures-Delete" to "Architectures-Remove"
- rename "Uri" to "URI"
* add "apt list --manual-installed"
* add "apt upgrade --dist"
* add "apt purge"
* flock() the file edited in "apt edit-sources"
* apt-private/private-show.cc:
- do not show Description-lang: header
* reword apt !isatty() warning
* add missing integration test for "apt list" and fix bugs
found by it
-- Michael Vogt <mvo@debian.org> Sat, 18 Jan 2014 21:09:24 +0100
apt (0.9.14.3~exp2) experimental; urgency=medium
[ Julian Andres Klode ]
* debian/rules: Call dh_makeshlibs for 'apt'
[ Anthony Towns ]
* reimplement rred to allow applying all the diffs in a single pass
* correct IndexDiff vs DiffIndex in Debug output
[ David Kalnischkies ]
* reenable unlimited pdiff files download
* integrate Anthonys rred with POC for client-side merge
[ Michael Vogt ]
* document deb822 style sources.list in sources.list(5)
* rename "Dist:" in deb822 style sources.list to "Suite:"
* rename URL to Uri in deb822-sources
* support multiple "Suite:" entries in deb822 style sources.list:
"Suite: stable testing unstable"
-- Michael Vogt <mvo@debian.org> Thu, 16 Jan 2014 21:43:22 +0100
apt (0.9.14.3~exp1) experimental; urgency=low
[ Michael Vogt ]
* add support for "deb822" style sources.list format and add
APT::Sources::Use-Deb822 to support disabling it
[ David Kalnischkies ]
* implement POC client-side merging of pdiffs via apt-file
[ Trần Ngọc Quân ]
* l10n: vi.po(617t): Update Vietnamese translation
-- Michael Vogt <mvo@debian.org> Sun, 05 Jan 2014 15:13:32 +0100
apt (0.9.14.2) unstable; urgency=low
[ Joe Hansen ]

1
debian/rules

@ -217,6 +217,7 @@ apt: build-binary build-manpages debian/apt.install
dh_strip -p$@
dh_compress -p$@
dh_fixperms -p$@
dh_makeshlibs -p$@
dh_installdeb -p$@
dh_shlibdeps -p$@
dh_gencontrol -p$@ -- -Vapt:keyring="$(shell ./vendor/getinfo keyring-package)"

2
doc/apt-verbatim.ent

@ -219,7 +219,7 @@
">
<!-- this will be updated by 'prepare-release' -->
<!ENTITY apt-product-version "0.9.14.2">
<!ENTITY apt-product-version "0.9.14.3~exp3">
<!-- (Code)names for various things used all over the place -->
<!ENTITY oldstable-codename "squeeze">

144
doc/po/apt-doc.pot

@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: apt-doc 0.9.14.2\n"
"Project-Id-Version: apt-doc 0.9.14.3~exp3\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
"POT-Creation-Date: 2013-12-29 17:01+0100\n"
"POT-Creation-Date: 2014-01-18 21:25+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -1132,7 +1132,7 @@ msgid "Files"
msgstr ""
#. type: Content of: <refentry><refsect1><title>
#: apt-get.8.xml:550 apt-cache.8.xml:352 apt-key.8.xml:197 apt-mark.8.xml:133 apt-secure.8.xml:193 apt-cdrom.8.xml:154 apt-config.8.xml:111 apt.conf.5.xml:1206 apt_preferences.5.xml:707 sources.list.5.xml:258 apt-extracttemplates.1.xml:72 apt-sortpkgs.1.xml:65 apt-ftparchive.1.xml:609
#: apt-get.8.xml:550 apt-cache.8.xml:352 apt-key.8.xml:197 apt-mark.8.xml:133 apt-secure.8.xml:193 apt-cdrom.8.xml:154 apt-config.8.xml:111 apt.conf.5.xml:1206 apt_preferences.5.xml:707 sources.list.5.xml:275 apt-extracttemplates.1.xml:72 apt-sortpkgs.1.xml:65 apt-ftparchive.1.xml:609
msgid "See Also"
msgstr ""
@ -3624,7 +3624,7 @@ msgid ""
msgstr ""
#. type: Content of: <refentry><refsect1><title>
#: apt.conf.5.xml:1194 apt_preferences.5.xml:547 sources.list.5.xml:217 apt-ftparchive.1.xml:598
#: apt.conf.5.xml:1194 apt_preferences.5.xml:547 sources.list.5.xml:234 apt-ftparchive.1.xml:598
msgid "Examples"
msgstr ""
@ -4695,35 +4695,60 @@ msgid ""
msgstr ""
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:80
#: sources.list.5.xml:79
msgid ""
"The format for a <filename>sources.list</filename> entry using the "
"<literal>deb</literal> and <literal>deb-src</literal> types is:"
msgstr ""
#. type: Content of: <refentry><refsect1><literallayout>
#: sources.list.5.xml:83
#: sources.list.5.xml:82
#, no-wrap
msgid "deb [ options ] uri distribution [component1] [component2] [...]"
msgid "deb [ options ] uri suite [component1] [component2] [...]"
msgstr ""
#. type: Content of: <refentry><refsect1><para><literallayout>
#: sources.list.5.xml:86
#, no-wrap
msgid ""
" Type: deb\n"
" URI: http://example.com\n"
" Suites: stable\n"
" Sections: component1 component2\n"
" [option1]: [option1-value]\n"
"\n"
" Type: deb-src\n"
" URI: http://example.com\n"
" Suites: stable\n"
" Sections: component1 component2\n"
" [option1]: [option1-value]\n"
" "
msgstr ""
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:85
#: sources.list.5.xml:84
msgid ""
"Alternatively a rfc822 style format is also supported: <placeholder "
"type=\"literallayout\" id=\"0\"/>"
msgstr ""
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:100
msgid ""
"The URI for the <literal>deb</literal> type must specify the base of the "
"Debian distribution, from which APT will find the information it needs. "
"<literal>distribution</literal> can specify an exact path, in which case the "
"components must be omitted and <literal>distribution</literal> must end with "
"a slash (<literal>/</literal>). This is useful for the case when only a "
"<literal>suite</literal> can specify an exact path, in which case the "
"components must be omitted and <literal>suite</literal> must end with a "
"slash (<literal>/</literal>). This is useful for the case when only a "
"particular sub-section of the archive denoted by the URI is of interest. If "
"<literal>distribution</literal> does not specify an exact path, at least one "
"<literal>suite</literal> does not specify an exact path, at least one "
"<literal>component</literal> must be present."
msgstr ""
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:94
#: sources.list.5.xml:109
msgid ""
"<literal>distribution</literal> may also contain a variable, "
"<literal>suite</literal> may also contain a variable, "
"<literal>$(ARCH)</literal> which expands to the Debian architecture (such as "
"<literal>amd64</literal> or <literal>armel</literal>) used on the "
"system. This permits architecture-independent "
@ -4733,22 +4758,23 @@ msgid ""
msgstr ""
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:102
#: sources.list.5.xml:117
msgid ""
"Since only one distribution can be specified per line it may be necessary to "
"have multiple lines for the same URI, if a subset of all available "
"distributions or components at that location is desired. APT will sort the "
"URI list after it has generated a complete set internally, and will collapse "
"multiple references to the same Internet host, for instance, into a single "
"connection, so that it does not inefficiently establish an FTP connection, "
"close it, do something else, and then re-establish a connection to that same "
"host. This feature is useful for accessing busy FTP sites with limits on the "
"number of simultaneous anonymous users. APT also parallelizes connections to "
"different hosts to more effectively deal with sites with low bandwidth."
"In the traditional style sources.list format since only one distribution can "
"be specified per line it may be necessary to have multiple lines for the "
"same URI, if a subset of all available distributions or components at that "
"location is desired. APT will sort the URI list after it has generated a "
"complete set internally, and will collapse multiple references to the same "
"Internet host, for instance, into a single connection, so that it does not "
"inefficiently establish an FTP connection, close it, do something else, and "
"then re-establish a connection to that same host. This feature is useful for "
"accessing busy FTP sites with limits on the number of simultaneous anonymous "
"users. APT also parallelizes connections to different hosts to more "
"effectively deal with sites with low bandwidth."
msgstr ""
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:114
#: sources.list.5.xml:131
msgid ""
"<literal>options</literal> is always optional and needs to be surrounded by "
"square brackets. It can consist of multiple settings in the form "
@ -4759,7 +4785,7 @@ msgid ""
msgstr ""
#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
#: sources.list.5.xml:120
#: sources.list.5.xml:137
msgid ""
"<literal>arch=<replaceable>arch1</replaceable>,<replaceable>arch2</replaceable>,…</literal> "
"can be used to specify for which architectures information should be "
@ -4768,7 +4794,7 @@ msgid ""
msgstr ""
#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
#: sources.list.5.xml:124
#: sources.list.5.xml:141
msgid ""
"<literal>arch+=<replaceable>arch1</replaceable>,<replaceable>arch2</replaceable>,…</literal> "
"and "
@ -4778,7 +4804,7 @@ msgid ""
msgstr ""
#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
#: sources.list.5.xml:127
#: sources.list.5.xml:144
msgid ""
"<literal>trusted=yes</literal> can be set to indicate that packages from "
"this source are always authenticated even if the "
@ -4790,7 +4816,7 @@ msgid ""
msgstr ""
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:134
#: sources.list.5.xml:151
msgid ""
"It is important to list sources in order of preference, with the most "
"preferred source listed first. Typically this will result in sorting by "
@ -4799,12 +4825,12 @@ msgid ""
msgstr ""
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:139
#: sources.list.5.xml:156
msgid "Some examples:"
msgstr ""
#. type: Content of: <refentry><refsect1><literallayout>
#: sources.list.5.xml:141
#: sources.list.5.xml:158
#, no-wrap
msgid ""
"deb http://ftp.debian.org/debian &stable-codename; main contrib non-free\n"
@ -4814,17 +4840,17 @@ msgid ""
msgstr ""
#. type: Content of: <refentry><refsect1><title>
#: sources.list.5.xml:147
#: sources.list.5.xml:164
msgid "URI specification"
msgstr ""
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:149
#: sources.list.5.xml:166
msgid "The currently recognized URI types are:"
msgstr ""
#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
#: sources.list.5.xml:153
#: sources.list.5.xml:170
msgid ""
"The file scheme allows an arbitrary directory in the file system to be "
"considered an archive. This is useful for NFS mounts and local mirrors or "
@ -4832,7 +4858,7 @@ msgid ""
msgstr ""
#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
#: sources.list.5.xml:160
#: sources.list.5.xml:177
msgid ""
"The cdrom scheme allows APT to use a local CD-ROM drive with media "
"swapping. Use the &apt-cdrom; program to create cdrom entries in the source "
@ -4840,7 +4866,7 @@ msgid ""
msgstr ""
#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
#: sources.list.5.xml:167
#: sources.list.5.xml:184
msgid ""
"The http scheme specifies an HTTP server for the archive. If an environment "
"variable <envar>http_proxy</envar> is set with the format "
@ -4851,7 +4877,7 @@ msgid ""
msgstr ""
#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
#: sources.list.5.xml:178
#: sources.list.5.xml:195
msgid ""
"The ftp scheme specifies an FTP server for the archive. APT's FTP behavior "
"is highly configurable; for more information see the &apt-conf; manual "
@ -4864,7 +4890,7 @@ msgid ""
msgstr ""
#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
#: sources.list.5.xml:190
#: sources.list.5.xml:207
msgid ""
"The copy scheme is identical to the file scheme except that packages are "
"copied into the cache directory instead of used directly at their location. "
@ -4873,7 +4899,7 @@ msgid ""
msgstr ""
#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
#: sources.list.5.xml:197
#: sources.list.5.xml:214
msgid ""
"The rsh/ssh method invokes RSH/SSH to connect to a remote host and access "
"the files as a given user. Prior configuration of rhosts or RSA keys is "
@ -4882,12 +4908,12 @@ msgid ""
msgstr ""
#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
#: sources.list.5.xml:204
#: sources.list.5.xml:221
msgid "adding more recognizable URI types"
msgstr ""
#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
#: sources.list.5.xml:206
#: sources.list.5.xml:223
msgid ""
"APT can be extended with more methods shipped in other optional packages, "
"which should follow the naming scheme "
@ -4899,42 +4925,42 @@ msgid ""
msgstr ""
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:218
#: sources.list.5.xml:235
msgid ""
"Uses the archive stored locally (or NFS mounted) at /home/jason/debian for "
"stable/main, stable/contrib, and stable/non-free."
msgstr ""
#. type: Content of: <refentry><refsect1><literallayout>
#: sources.list.5.xml:220
#: sources.list.5.xml:237
#, no-wrap
msgid "deb file:/home/jason/debian stable main contrib non-free"
msgstr ""
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:222
#: sources.list.5.xml:239
msgid "As above, except this uses the unstable (development) distribution."
msgstr ""
#. type: Content of: <refentry><refsect1><literallayout>
#: sources.list.5.xml:223
#: sources.list.5.xml:240
#, no-wrap
msgid "deb file:/home/jason/debian unstable main contrib non-free"
msgstr ""
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:225
#: sources.list.5.xml:242
msgid "Source line for the above"
msgstr ""
#. type: Content of: <refentry><refsect1><literallayout>
#: sources.list.5.xml:226
#: sources.list.5.xml:243
#, no-wrap
msgid "deb-src file:/home/jason/debian unstable main contrib non-free"
msgstr ""
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:228
#: sources.list.5.xml:245
msgid ""
"The first line gets package information for the architectures in "
"<literal>APT::Architectures</literal> while the second always retrieves "
@ -4942,7 +4968,7 @@ msgid ""
msgstr ""
#. type: Content of: <refentry><refsect1><literallayout>
#: sources.list.5.xml:230
#: sources.list.5.xml:247
#, no-wrap
msgid ""
"deb http://ftp.debian.org/debian &stable-codename; main\n"
@ -4950,33 +4976,33 @@ msgid ""
msgstr ""
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:233
#: sources.list.5.xml:250
msgid ""
"Uses HTTP to access the archive at archive.debian.org, and uses only the "
"hamm/main area."
msgstr ""
#. type: Content of: <refentry><refsect1><literallayout>
#: sources.list.5.xml:235
#: sources.list.5.xml:252
#, no-wrap
msgid "deb http://archive.debian.org/debian-archive hamm main"
msgstr ""
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:237
#: sources.list.5.xml:254
msgid ""
"Uses FTP to access the archive at ftp.debian.org, under the debian "
"directory, and uses only the &stable-codename;/contrib area."
msgstr ""
#. type: Content of: <refentry><refsect1><literallayout>
#: sources.list.5.xml:239
#: sources.list.5.xml:256
#, no-wrap
msgid "deb ftp://ftp.debian.org/debian &stable-codename; contrib"
msgstr ""
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:241
#: sources.list.5.xml:258
msgid ""
"Uses FTP to access the archive at ftp.debian.org, under the debian "
"directory, and uses only the unstable/contrib area. If this line appears as "
@ -4985,19 +5011,19 @@ msgid ""
msgstr ""
#. type: Content of: <refentry><refsect1><literallayout>
#: sources.list.5.xml:245
#: sources.list.5.xml:262
#, no-wrap
msgid "deb ftp://ftp.debian.org/debian unstable contrib"
msgstr ""
#. type: Content of: <refentry><refsect1><para><literallayout>
#: sources.list.5.xml:254
#: sources.list.5.xml:271
#, no-wrap
msgid "deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/"
msgstr ""
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:247
#: sources.list.5.xml:264
msgid ""
"Uses HTTP to access the archive at ftp.tlh.debian.org, under the universe "
"directory, and uses only files found under "
@ -5009,7 +5035,7 @@ msgid ""
msgstr ""
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:259
#: sources.list.5.xml:276
msgid "&apt-cache; &apt-conf;"
msgstr ""

193
doc/po/de.po

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt-doc 0.9.7\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
"POT-Creation-Date: 2013-12-29 17:01+0100\n"
"POT-Creation-Date: 2014-01-18 21:25+0100\n"
"PO-Revision-Date: 2012-06-25 22:49+0100\n"
"Last-Translator: Chris Leick <c.leick@vollbio.de>\n"
"Language-Team: German <debian-l10n-german@lists.debian.org>\n"
@ -1572,7 +1572,7 @@ msgstr "Dateien"
#. type: Content of: <refentry><refsect1><title>
#: apt-get.8.xml:550 apt-cache.8.xml:352 apt-key.8.xml:197 apt-mark.8.xml:133
#: apt-secure.8.xml:193 apt-cdrom.8.xml:154 apt-config.8.xml:111
#: apt.conf.5.xml:1206 apt_preferences.5.xml:707 sources.list.5.xml:258
#: apt.conf.5.xml:1206 apt_preferences.5.xml:707 sources.list.5.xml:275
#: apt-extracttemplates.1.xml:72 apt-sortpkgs.1.xml:65
#: apt-ftparchive.1.xml:609
msgid "See Also"
@ -5210,7 +5210,7 @@ msgstr ""
"filename> gelesenen Anbieter aus."
#. type: Content of: <refentry><refsect1><title>
#: apt.conf.5.xml:1194 apt_preferences.5.xml:547 sources.list.5.xml:217
#: apt.conf.5.xml:1194 apt_preferences.5.xml:547 sources.list.5.xml:234
#: apt-ftparchive.1.xml:598
msgid "Examples"
msgstr "Beispiele"
@ -6697,7 +6697,7 @@ msgstr ""
"benötigt, um Quellindizes herunterzuladen."
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:80
#: sources.list.5.xml:79
msgid ""
"The format for a <filename>sources.list</filename> entry using the "
"<literal>deb</literal> and <literal>deb-src</literal> types is:"
@ -6706,21 +6706,57 @@ msgstr ""
"<literal>deb</literal>- und <literal>deb-src</literal>-Typen benutzt, ist:"
#. type: Content of: <refentry><refsect1><literallayout>
#: sources.list.5.xml:83
#, no-wrap
msgid "deb [ options ] uri distribution [component1] [component2] [...]"
#: sources.list.5.xml:82
#, fuzzy, no-wrap
#| msgid "deb [ options ] uri distribution [component1] [component2] [...]"
msgid "deb [ options ] uri suite [component1] [component2] [...]"
msgstr "deb [ Optionen ] URI Distribution [Komponente1] [Komponente2] […]"
#. type: Content of: <refentry><refsect1><para><literallayout>
#: sources.list.5.xml:86
#, no-wrap
msgid ""
" Type: deb\n"
" URI: http://example.com\n"
" Suites: stable\n"
" Sections: component1 component2\n"
" [option1]: [option1-value]\n"
"\n"
" Type: deb-src\n"
" URI: http://example.com\n"
" Suites: stable\n"
" Sections: component1 component2\n"
" [option1]: [option1-value]\n"
" "
msgstr ""
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:84
msgid ""
"Alternatively a rfc822 style format is also supported: <placeholder type="
"\"literallayout\" id=\"0\"/>"
msgstr ""
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:85
#: sources.list.5.xml:100
#, fuzzy
#| msgid ""
#| "The URI for the <literal>deb</literal> type must specify the base of the "
#| "Debian distribution, from which APT will find the information it needs. "
#| "<literal>distribution</literal> can specify an exact path, in which case "
#| "the components must be omitted and <literal>distribution</literal> must "
#| "end with a slash (<literal>/</literal>). This is useful for the case when "
#| "only a particular sub-section of the archive denoted by the URI is of "
#| "interest. If <literal>distribution</literal> does not specify an exact "
#| "path, at least one <literal>component</literal> must be present."
msgid ""
"The URI for the <literal>deb</literal> type must specify the base of the "
"Debian distribution, from which APT will find the information it needs. "
"<literal>distribution</literal> can specify an exact path, in which case the "
"components must be omitted and <literal>distribution</literal> must end with "
"a slash (<literal>/</literal>). This is useful for the case when only a "
"<literal>suite</literal> can specify an exact path, in which case the "
"components must be omitted and <literal>suite</literal> must end with a "
"slash (<literal>/</literal>). This is useful for the case when only a "
"particular sub-section of the archive denoted by the URI is of interest. If "
"<literal>distribution</literal> does not specify an exact path, at least one "
"<literal>suite</literal> does not specify an exact path, at least one "
"<literal>component</literal> must be present."
msgstr ""
"Die URI für den <literal>deb</literal>-Typ muss die Basis der Debian-"
@ -6734,15 +6770,24 @@ msgstr ""
"angegeben sein."
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:94
msgid ""
"<literal>distribution</literal> may also contain a variable, <literal>"
"$(ARCH)</literal> which expands to the Debian architecture (such as "
"<literal>amd64</literal> or <literal>armel</literal>) used on the system. "
"This permits architecture-independent <filename>sources.list</filename> "
"files to be used. In general this is only of interest when specifying an "
"exact path, <literal>APT</literal> will automatically generate a URI with "
"the current architecture otherwise."
#: sources.list.5.xml:109
#, fuzzy
#| msgid ""
#| "<literal>distribution</literal> may also contain a variable, <literal>"
#| "$(ARCH)</literal> which expands to the Debian architecture (such as "
#| "<literal>amd64</literal> or <literal>armel</literal>) used on the system. "
#| "This permits architecture-independent <filename>sources.list</filename> "
#| "files to be used. In general this is only of interest when specifying an "
#| "exact path, <literal>APT</literal> will automatically generate a URI with "
#| "the current architecture otherwise."
msgid ""
"<literal>suite</literal> may also contain a variable, <literal>$(ARCH)</"
"literal> which expands to the Debian architecture (such as <literal>amd64</"
"literal> or <literal>armel</literal>) used on the system. This permits "
"architecture-independent <filename>sources.list</filename> files to be used. "
"In general this is only of interest when specifying an exact path, "
"<literal>APT</literal> will automatically generate a URI with the current "
"architecture otherwise."
msgstr ""
"<literal>distribution</literal> könnte außerdem eine Variable, <literal>"
"$(ARCH)</literal>, enthalten, die zur Debian-Architektur (wie "
@ -6754,18 +6799,32 @@ msgstr ""
"Architektur generieren."
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:102
msgid ""
"Since only one distribution can be specified per line it may be necessary to "
"have multiple lines for the same URI, if a subset of all available "
"distributions or components at that location is desired. APT will sort the "
"URI list after it has generated a complete set internally, and will collapse "
"multiple references to the same Internet host, for instance, into a single "
"connection, so that it does not inefficiently establish an FTP connection, "
"close it, do something else, and then re-establish a connection to that same "
"host. This feature is useful for accessing busy FTP sites with limits on the "
"number of simultaneous anonymous users. APT also parallelizes connections to "
"different hosts to more effectively deal with sites with low bandwidth."
#: sources.list.5.xml:117
#, fuzzy
#| msgid ""
#| "Since only one distribution can be specified per line it may be necessary "
#| "to have multiple lines for the same URI, if a subset of all available "
#| "distributions or components at that location is desired. APT will sort "
#| "the URI list after it has generated a complete set internally, and will "
#| "collapse multiple references to the same Internet host, for instance, "
#| "into a single connection, so that it does not inefficiently establish an "
#| "FTP connection, close it, do something else, and then re-establish a "
#| "connection to that same host. This feature is useful for accessing busy "
#| "FTP sites with limits on the number of simultaneous anonymous users. APT "
#| "also parallelizes connections to different hosts to more effectively deal "
#| "with sites with low bandwidth."
msgid ""
"In the traditional style sources.list format since only one distribution can "
"be specified per line it may be necessary to have multiple lines for the "
"same URI, if a subset of all available distributions or components at that "
"location is desired. APT will sort the URI list after it has generated a "
"complete set internally, and will collapse multiple references to the same "
"Internet host, for instance, into a single connection, so that it does not "
"inefficiently establish an FTP connection, close it, do something else, and "
"then re-establish a connection to that same host. This feature is useful for "
"accessing busy FTP sites with limits on the number of simultaneous anonymous "
"users. APT also parallelizes connections to different hosts to more "
"effectively deal with sites with low bandwidth."
msgstr ""
"Da pro Zeile nur eine Distribution angegeben werden kann, könnte es nötig "
"sein, mehrere Zeilen für die gleiche URI zu haben, falls eine Untermenge "
@ -6781,7 +6840,7 @@ msgstr ""
"niedriger Bandbreite hauszuhalten."
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:114
#: sources.list.5.xml:131
msgid ""
"<literal>options</literal> is always optional and needs to be surrounded by "
"square brackets. It can consist of multiple settings in the form "
@ -6799,7 +6858,7 @@ msgstr ""
"stillschweigend ignoriert werden."
#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
#: sources.list.5.xml:120
#: sources.list.5.xml:137
msgid ""
"<literal>arch=<replaceable>arch1</replaceable>,<replaceable>arch2</"
"replaceable>,…</literal> can be used to specify for which architectures "
@ -6815,7 +6874,7 @@ msgstr ""
"heruntergeladen."
#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
#: sources.list.5.xml:124
#: sources.list.5.xml:141
#, fuzzy
#| msgid ""
#| "<literal>arch=<replaceable>arch1</replaceable>,<replaceable>arch2</"
@ -6837,7 +6896,7 @@ msgstr ""
"heruntergeladen."
#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
#: sources.list.5.xml:127
#: sources.list.5.xml:144
msgid ""
"<literal>trusted=yes</literal> can be set to indicate that packages from "
"this source are always authenticated even if the <filename>Release</"
@ -6855,7 +6914,7 @@ msgstr ""
"korrekt authentifizierte Quellen als nicht authentifiziert."
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:134
#: sources.list.5.xml:151
msgid ""
"It is important to list sources in order of preference, with the most "
"preferred source listed first. Typically this will result in sorting by "
@ -6869,12 +6928,12 @@ msgstr ""
"Rechnern, zum Beispiel)."
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:139
#: sources.list.5.xml:156
msgid "Some examples:"
msgstr "Einige Beispiele:"
#. type: Content of: <refentry><refsect1><literallayout>
#: sources.list.5.xml:141
#: sources.list.5.xml:158
#, no-wrap
msgid ""
"deb http://ftp.debian.org/debian &stable-codename; main contrib non-free\n"
@ -6886,17 +6945,17 @@ msgstr ""
" "
#. type: Content of: <refentry><refsect1><title>
#: sources.list.5.xml:147
#: sources.list.5.xml:164
msgid "URI specification"
msgstr "URI-Beschreibung"
#. type: Content of: <refentry><refsect1><para>
#: sources.list.5.xml:149
#: sources.list.5.xml:166
msgid "The currently recognized URI types are:"
msgstr "Die derzeit zulässigen URI-Typen sind:"
#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
#: sources.list.5.xml:153
#: sources.list.5.xml:170
msgid ""
"The file scheme allows an arbitrary directory in the file system to be "
"considered an archive. This is useful for NFS mounts and local mirrors or "
@ -6907,7 +6966,7 @@ msgstr ""
"lokale Spiegel oder Archive."
#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
#: sources.list.5.xml:160
#: sources.list.5.xml:177
msgid ""
"The cdrom scheme allows APT to use a local CD-ROM drive with media swapping. "
"Use the &apt-cdrom; program to create cdrom entries in the source list."
@ -6917,7 +6976,7 @@ msgstr ""
"der Quellenliste zu erstellen."
#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
#: sources.list.5.xml:167
#: sources.list.5.xml:184
msgid ""
"The http scheme specifies an HTTP server for the archive. If an environment "
"variable <envar>http_proxy</envar> is set with the format http://server:"
@ -6934,7 +6993,7 @@ msgstr ""
"Beachten Sie, dass dies eine unsichere Authentifizierungsmethode ist."
#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
#: sources.list.5.xml:178
#: sources.list.5.xml:195
msgid ""
"The ftp scheme specifies an FTP server for the archive. APT's FTP behavior "
"is highly configurable; for more information see the &apt-conf; manual page. "
@ -6956,7 +7015,7 @@ msgstr ""
"benutzen, werden ignoriert."
#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
#: sources.list.5.xml:190
#: sources.list.5.xml:207
msgid ""
"The copy scheme is identical to the file scheme except that packages are "
"copied into the cache directory instead of used directly at their location. "
@ -6969,7 +7028,7 @@ msgstr ""
"Wechseldatenträger benutzen, um Dateien mit APT umherzukopieren."
#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
#: sources.list.5.xml:197
#: sources.list.5.xml:214
msgid ""
"The rsh/ssh method invokes RSH/SSH to connect to a remote host and access "
"the files as a given user. Prior configuration of rhosts or RSA keys is "
@ -6983,12 +7042,12 @@ msgstr ""
"<command>find</command> und <command>dd</command> verwandt."
#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
#: sources.list.5.xml:204
#: sources.list.5.xml:221
msgid "adding more recognizable URI types"
msgstr "weitere zulässige URI-Typen hinzufügen"
#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
#: sources.list.5.xml:206
#: sources.list.5.xml:223
msgid ""
"APT can be extended with more methods shipped in other optional packages, "
"which should follow the naming scheme <package>apt-transport-"
@ -7007,7 +7066,7 @@ msgstr ""
"Benutzung von debtorrent verfügbar – siehe &apt-transport-debtorrent;."
#. type: Content of: <refentry><refsect1><para>
#: sources.li