summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-pkg/acquire-method.cc31
-rw-r--r--apt-pkg/acquire-worker.cc2
-rw-r--r--apt-pkg/tagfile.cc8
-rw-r--r--apt-private/private-cmndline.cc6
-rw-r--r--apt-private/private-install.cc4
-rw-r--r--apt-private/private-json-hooks.cc2
-rw-r--r--cmdline/apt-get.cc1
-rw-r--r--cmdline/apt.cc1
-rw-r--r--doc/apt-get.8.xml4
-rw-r--r--doc/apt.8.xml2
-rw-r--r--po/fr.po132
-rw-r--r--po/ru.po14
-rwxr-xr-xtest/integration/test-apt-sources-deb82268
-rw-r--r--test/libapt/tagfile_test.cc2
14 files changed, 186 insertions, 91 deletions
diff --git a/apt-pkg/acquire-method.cc b/apt-pkg/acquire-method.cc
index c67c47ab8..ae5ae4a15 100644
--- a/apt-pkg/acquire-method.cc
+++ b/apt-pkg/acquire-method.cc
@@ -88,6 +88,37 @@ pkgAcqMethod::pkgAcqMethod(const char *Ver,unsigned long Flags)
/*}}}*/
void pkgAcqMethod::SendMessage(std::string const &header, std::unordered_map<std::string, std::string> &&fields) /*{{{*/
{
+ auto CheckKey = [](std::string const &str) {
+ // Space, hyphen-minus, and alphanum are allowed for keys/headers.
+ return str.find_first_not_of(" -0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") == std::string::npos;
+ };
+
+ auto CheckValue = [](std::string const &str) {
+ return std::all_of(str.begin(), str.end(), [](unsigned char c) -> bool {
+ return c > 127 // unicode
+ || (c > 31 && c < 127) // printable chars
+ || c == '\n' || c == '\t'; // special whitespace
+ });
+ };
+
+ auto Error = [this]() {
+ _error->Error("SECURITY: Message contains control characters, rejecting.");
+ _error->DumpErrors();
+ SendMessage("400 URI Failure", {{"URI", "<UNKNOWN>"}, {"Message", "SECURITY: Message contains control characters, rejecting."}});
+ abort();
+ };
+
+ if (!CheckKey(header))
+ return Error();
+
+ for (auto const &f : fields)
+ {
+ if (!CheckKey(f.first))
+ return Error();
+ if (!CheckValue(f.second))
+ return Error();
+ }
+
std::cout << header << '\n';
for (auto const &f : fields)
{
diff --git a/apt-pkg/acquire-worker.cc b/apt-pkg/acquire-worker.cc
index c2bbf8bed..b36186121 100644
--- a/apt-pkg/acquire-worker.cc
+++ b/apt-pkg/acquire-worker.cc
@@ -98,6 +98,8 @@ bool pkgAcquire::Worker::Start()
std::string Method;
if (_config->Exists(confItem))
Method = _config->FindFile(confItem.c_str());
+ else if (Access == "ftp" || Access == "rsh" || Access == "ssh")
+ return _error->Error(_("The method '%s' is unsupported and disabled by default. Consider switching to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."), Access.c_str(), Access.c_str(), Access.c_str());
else
Method = _config->FindDir(methodsDir) + Access;
if (FileExists(Method) == false)
diff --git a/apt-pkg/tagfile.cc b/apt-pkg/tagfile.cc
index 98001afd1..1e7f2867c 100644
--- a/apt-pkg/tagfile.cc
+++ b/apt-pkg/tagfile.cc
@@ -250,8 +250,12 @@ bool pkgTagFile::Step(pkgTagSection &Tag)
d->chunks.erase(d->chunks.begin(), first);
}
- Tag.Trim();
- return true;
+ if ((d->Flags & pkgTagFile::SUPPORT_COMMENTS) == 0 || Tag.Count() != 0)
+ {
+ Tag.Trim();
+ return true;
+ }
+ return Step(Tag);
}
/*}}}*/
// TagFile::Fill - Top up the buffer /*{{{*/
diff --git a/apt-private/private-cmndline.cc b/apt-private/private-cmndline.cc
index 87deb6bf0..494928332 100644
--- a/apt-private/private-cmndline.cc
+++ b/apt-private/private-cmndline.cc
@@ -175,7 +175,7 @@ static bool addArgumentsAPTHelper(std::vector<CommandLine::Args> &Args, char con
/*}}}*/
static bool addArgumentsAPTGet(std::vector<CommandLine::Args> &Args, char const * const Cmd)/*{{{*/
{
- if (CmdMatches("install", "remove", "purge", "upgrade", "dist-upgrade",
+ if (CmdMatches("install", "reinstall", "remove", "purge", "upgrade", "dist-upgrade",
"dselect-upgrade", "autoremove", "autopurge", "full-upgrade"))
{
addArg(0, "show-progress", "DpkgPM::Progress", 0);
@@ -239,7 +239,7 @@ static bool addArgumentsAPTGet(std::vector<CommandLine::Args> &Args, char const
else if (CmdMatches("moo"))
addArg(0, "color", "APT::Moo::Color", 0);
- if (CmdMatches("install", "remove", "purge", "upgrade", "dist-upgrade",
+ if (CmdMatches("install", "reinstall", "remove", "purge", "upgrade", "dist-upgrade",
"dselect-upgrade", "autoremove", "auto-remove", "autopurge", "clean", "autoclean", "auto-clean", "check",
"build-dep", "full-upgrade", "source"))
{
@@ -291,7 +291,7 @@ static bool addArgumentsAPTMark(std::vector<CommandLine::Args> &Args, char const
{
addArg('f',"file","Dir::State::extended_states",CommandLine::HasArg);
}
- else if (CmdMatches("install", "remove", "deinstall", "purge",
+ else if (CmdMatches("install", "reinstall", "remove", "deinstall", "purge",
"showinstall", "showinstalls", "showremove", "showremoves",
"showdeinstall", "showdeinstalls", "showpurge", "showpurges"))
;
diff --git a/apt-private/private-install.cc b/apt-private/private-install.cc
index 1713ff308..243b75b1c 100644
--- a/apt-private/private-install.cc
+++ b/apt-private/private-install.cc
@@ -586,7 +586,9 @@ bool DoCacheManipulationFromCommandLine(CommandLine &CmdL, std::vector<PseudoPkg
Fix.reset(new pkgProblemResolver(Cache));
unsigned short fallback = MOD_INSTALL;
- if (strcasecmp(CmdL.FileList[0],"remove") == 0)
+ if (strcasecmp(CmdL.FileList[0], "reinstall") == 0)
+ _config->Set("APT::Get::ReInstall", "true");
+ else if (strcasecmp(CmdL.FileList[0],"remove") == 0)
fallback = MOD_REMOVE;
else if (strcasecmp(CmdL.FileList[0], "purge") == 0)
{
diff --git a/apt-private/private-json-hooks.cc b/apt-private/private-json-hooks.cc
index b5c1a7172..65ff87924 100644
--- a/apt-private/private-json-hooks.cc
+++ b/apt-private/private-json-hooks.cc
@@ -387,7 +387,7 @@ bool RunJsonHook(std::string const &option, std::string const &method, const cha
if (size < 0)
{
- if (errno != ECONNRESET)
+ if (errno != ECONNRESET && errno != EPIPE)
_error->Error("Could not read response to hello message from hook %s: %s", Opts->Value.c_str(), strerror(errno));
goto out;
}
diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc
index 6d25ed509..da18d2d19 100644
--- a/cmdline/apt-get.cc
+++ b/cmdline/apt-get.cc
@@ -405,6 +405,7 @@ static std::vector<aptDispatchWithHelp> GetCommands() /*{{{*/
{"update", &DoUpdate, _("Retrieve new lists of packages")},
{"upgrade", &DoUpgrade, _("Perform an upgrade")},
{"install", &DoInstall, _("Install new packages (pkg is libc6 not libc6.deb)")},
+ {"reinstall", &DoInstall, _("Reinstall packages (pkg is libc6 not libc6.deb)")},
{"remove", &DoInstall, _("Remove packages")},
{"purge", &DoInstall, _("Remove packages and config files")},
{"autoremove", &DoInstall, _("Remove automatically all unused packages")},
diff --git a/cmdline/apt.cc b/cmdline/apt.cc
index f508406d1..d388e4af4 100644
--- a/cmdline/apt.cc
+++ b/cmdline/apt.cc
@@ -63,6 +63,7 @@ static std::vector<aptDispatchWithHelp> GetCommands() /*{{{*/
// package stuff
{"install", &DoInstall, _("install packages")},
+ {"reinstall", &DoInstall, _("reinstall packages")},
{"remove", &DoInstall, _("remove packages")},
{"autoremove", &DoInstall, _("Remove automatically all unused packages")},
{"auto-remove", &DoInstall, nullptr},
diff --git a/doc/apt-get.8.xml b/doc/apt-get.8.xml
index 184282e69..b83eabd27 100644
--- a/doc/apt-get.8.xml
+++ b/doc/apt-get.8.xml
@@ -143,6 +143,10 @@
with a '^' or '$' character, or create a more specific regular expression.</para></listitem>
</varlistentry>
+ <varlistentry><term><option>reinstall</option></term>
+ <listitem><para><literal>reinstall</literal> is an alias for <literal>install --reinstall</literal>.</para></listitem>
+ </varlistentry>
+
<varlistentry><term><option>remove</option></term>
<listitem><para><literal>remove</literal> is identical to <literal>install</literal> except that packages are
removed instead of installed. Note that removing a package leaves its
diff --git a/doc/apt.8.xml b/doc/apt.8.xml
index 626419ec3..08492bf54 100644
--- a/doc/apt.8.xml
+++ b/doc/apt.8.xml
@@ -69,7 +69,7 @@
</para></listitem>
</varlistentry>
- <varlistentry><term><option>install</option>, <option>remove</option>, <option>purge</option> (&apt-get;)</term>
+ <varlistentry><term><option>install</option>, <option>reinstall</option>, <option>remove</option>, <option>purge</option> (&apt-get;)</term>
<listitem><para>Performs the requested action on one or more packages
specified via &regex;, &glob; or exact match. The requested action
can be overridden for specific packages by append a plus (+) to the
diff --git a/po/fr.po b/po/fr.po
index 2b94b2518..18c8a5604 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -4,13 +4,14 @@
#
# Pierre Machard <pmachard@tuxfamily.org>, 2002,2003,2004.
# Christian Perrier <bubulle@debian.org>, 2004-2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013.
-# Julien Patriarca <leatherface@debian.org>, 2013, 2017, 2018
+# Julien Patriarca <leatherface@debian.org>, 2013, 2017, 2018.
+# Baptiste Jammet <baptiste@mailoo.org>, 2019.
msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2019-01-23 16:49+0100\n"
-"PO-Revision-Date: 2018-01-02 15:09+0100\n"
+"POT-Creation-Date: 2018-12-18 15:02+0100\n"
+"PO-Revision-Date: 2019-01-21 09:19+0100\n"
"Last-Translator: Julien Patriarca <leatherface@debian.org>\n"
"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
"Language: fr\n"
@@ -22,7 +23,7 @@ msgstr ""
#: apt-inst/contrib/arfile.cc
msgid "Invalid archive signature"
-msgstr "Signature d'archive invalide"
+msgstr "Signature d'archive non valable"
#: apt-inst/contrib/arfile.cc
msgid "Error reading archive member header"
@@ -35,7 +36,7 @@ msgstr "En-tête du membre d'archive %s non valable"
#: apt-inst/contrib/arfile.cc
msgid "Invalid archive member header"
-msgstr "En-tête du membre d'archive non-valable"
+msgstr "En-tête du membre d'archive non valable"
#: apt-inst/contrib/arfile.cc
msgid "Archive is too short"
@@ -66,7 +67,7 @@ msgstr "Type d'en-tête %u inconnu pour TAR, partie %s"
#: apt-inst/deb/debfile.cc
#, c-format
msgid "This is not a valid DEB archive, missing '%s' member"
-msgstr "Ce n'est pas une archive DEB valide, partie « %s » manquante"
+msgstr "Ce n'est pas une archive DEB valable, partie « %s » manquante"
#: apt-inst/deb/debfile.cc
#, c-format
@@ -196,7 +197,7 @@ msgid ""
"disabled by default."
msgstr ""
"Les mises à jour depuis un tel dépôt ne peuvent s'effectuer de manière "
-"sécurisée, et sont donc désactivées par défaut"
+"sécurisée, et sont donc désactivées par défaut."
#: apt-pkg/acquire-item.cc
msgid ""
@@ -273,7 +274,7 @@ msgstr "Taille incohérente"
#: apt-pkg/acquire-item.cc
msgid "Invalid file format"
-msgstr "Format de fichier invalide"
+msgstr "Format de fichier non valable"
#: apt-pkg/acquire-item.cc
msgid "Signature error"
@@ -321,7 +322,7 @@ msgid ""
"architecture '%s'"
msgstr ""
"Le fichier configuré « %s » ne sera pas pris en compte car le dépôt « %s » "
-"ne supporte pas l'architecture « %s »"
+"ne prend pas en charge l'architecture « %s »"
#: apt-pkg/acquire-item.cc
#, c-format
@@ -350,14 +351,14 @@ msgid ""
"Release file for %s is expired (invalid since %s). Updates for this "
"repository will not be applied."
msgstr ""
-"Le fichier « Release » pour %s a expiré (invalide depuis %s). Les mises à "
+"Le fichier « Release » pour %s est périmé (invalide depuis %s). Les mises à "
"jour depuis ce dépôt ne s'effectueront pas."
#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
#. the time until the file will be valid - formatted in the same way as in
#. the download progress display (e.g. 7d 3h 42min 1s)
#: apt-pkg/acquire-item.cc
-#, fuzzy, c-format
+#, c-format
#| msgid ""
#| "Release file for %s is expired (invalid since %s). Updates for this "
#| "repository will not be applied."
@@ -365,8 +366,8 @@ msgid ""
"Release file for %s is not valid yet (invalid for another %s). Updates for "
"this repository will not be applied."
msgstr ""
-"Le fichier « Release » pour %s a expiré (invalide depuis %s). Les mises à "
-"jour depuis ce dépôt ne s'effectueront pas."
+"Le fichier « Release » pour %s n'est pas encore valable (invalide pendant "
+"encore %s). Les mises à jour depuis ce dépôt ne s'effectueront pas."
#: apt-pkg/acquire-item.cc
#, c-format
@@ -439,7 +440,7 @@ msgstr "La méthode « %s » est volontairement désactivée par configuration
#, c-format
msgid "If you meant to use Tor remember to use %s instead of %s."
msgstr ""
-".Si vous souhaitiez utiliser Tor veuillez alors utiliser « %s » plutôt que "
+".Si vous souhaitiez utiliser Tor, veuillez alors utiliser « %s » plutôt que "
"« %s »."
#: apt-pkg/acquire-worker.cc
@@ -729,8 +730,8 @@ msgid ""
"Command line option '%c' [from %s] is not understood in combination with the "
"other options."
msgstr ""
-"L'option « %c » de la ligne de commande [%s] est inconnue quand elle est "
-"utilisée avec d'autres options."
+"L'option « %c » de la ligne de commande [%s] n'est pas reconnue quand elle "
+"est utilisée avec d'autres options."
#: apt-pkg/contrib/cmndline.cc
#, c-format
@@ -769,7 +770,9 @@ msgstr "L'option « %s » est trop longue"
#: apt-pkg/contrib/cmndline.cc
#, c-format
msgid "Sense %s is not understood, try true or false."
-msgstr "La signification %s n'est pas comprise, veuillez essayer vrai ou faux."
+msgstr ""
+"La signification %s n'est pas comprise, veuillez essayer « true » ou "
+"« false »."
#: apt-pkg/contrib/cmndline.cc
#, c-format
@@ -888,7 +891,7 @@ msgstr ""
#: cmdline/apt-dump-solver.cc
#, c-format
msgid "Waited for %s but it wasn't there"
-msgstr "A attendu %s mais il n'était pas présent"
+msgstr "A attendu %s, mais il n'était pas présent"
#: apt-pkg/contrib/fileutl.cc
#, c-format
@@ -987,7 +990,7 @@ msgstr "Impossible de mapper un fichier vide en mémoire"
#: apt-pkg/contrib/mmap.cc
#, c-format
msgid "Couldn't make mmap of %llu bytes"
-msgstr "Impossible de réaliser un mapping de %llu octets en mémoire"
+msgstr "Impossible de réaliser un mappage de %llu octets en mémoire"
#: apt-pkg/contrib/mmap.cc
#, c-format
@@ -1005,7 +1008,7 @@ msgstr "Impossible de synchroniser la « mmap »"
#: apt-pkg/contrib/mmap.cc
#, c-format
msgid "Couldn't make mmap of %lu bytes"
-msgstr "Impossible de réaliser un mapping de %lu octets en mémoire"
+msgstr "Impossible de réaliser un mappage de %lu octets en mémoire"
#: apt-pkg/contrib/mmap.cc
msgid "Failed to truncate file"
@@ -1160,23 +1163,23 @@ msgid "Unable to parse package file %s (%d)"
msgstr "Impossible de traiter le fichier %s (%d)"
#: apt-pkg/deb/debsystem.cc
-#, fuzzy, c-format
+#, c-format
#| msgid ""
#| "Unable to lock the administration directory (%s), is another process "
#| "using it?"
msgid ""
"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
msgstr ""
-"Impossible de verrouiller le répertoire d'administration (%s). Il est "
-"possible qu'un autre processus l'utilise."
+"Impossible d'obtenir le verrou de dpkg (%s). Il est possible qu'un autre "
+"processus l'utilise."
#: apt-pkg/deb/debsystem.cc
-#, fuzzy, c-format
+#, c-format
#| msgid "Unable to lock the administration directory (%s), are you root?"
msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
msgstr ""
-"Impossible de verrouiller le répertoire d'administration (%s). Avez-vous les "
-"privilèges du superutilisateur ?"
+"Impossible d'obtenir le verrou de dpkg (%s). Avez-vous les droits du "
+"superutilisateur ?"
#. TRANSLATORS: the %s contains the recovery command, usually
#. dpkg --configure -a
@@ -1202,7 +1205,7 @@ msgstr ""
msgid "Unable to lock the administration directory (%s), are you root?"
msgstr ""
"Impossible de verrouiller le répertoire d'administration (%s). Avez-vous les "
-"privilèges du superutilisateur ?"
+"droits du superutilisateur ?"
#: apt-pkg/deb/debsystem.cc
msgid "Not locked"
@@ -1442,7 +1445,7 @@ msgstr "Somme de contrôle de hachage incohérente pour %s"
#: apt-pkg/init.cc
#, c-format
msgid "Packaging system '%s' is not supported"
-msgstr "Le système de paquet « %s » n'est pas supporté"
+msgstr "Le système de paquet « %s » n'est pas pris en charge"
#: apt-pkg/init.cc
msgid "Unable to determine a suitable packaging system type"
@@ -1500,7 +1503,7 @@ msgstr "Le fichier de cache des paquets a une version incompatible"
#: apt-pkg/pkgcache.cc
#, c-format
msgid "This APT does not support the versioning system '%s'"
-msgstr "Cet APT ne supporte pas le système de version « %s »"
+msgstr "Cet APT ne prend pas en charge le système de version « %s »"
#: apt-pkg/pkgcache.cc
#, c-format
@@ -1645,8 +1648,8 @@ msgstr "Type d'épinglage %s inconnu"
#, c-format
msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
msgstr ""
-"%s : la valeur %s est dehors de la plage de priorités d'épinglage valide (%d "
-"à %d)"
+"%s : la valeur %s est en dehors de la plage de priorités d'épinglage valide "
+"(%d à %d)"
#: apt-pkg/policy.cc
msgid "No priority (or zero) specified for pin"
@@ -1711,28 +1714,28 @@ msgstr "Calcul de la mise à jour"
#: apt-private/acqprogress.cc
#, c-format
msgid "Hit:%lu %s"
-msgstr "Atteint:%lu %s"
+msgstr "Atteint :%lu %s"
#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
#: apt-private/acqprogress.cc
#, c-format
msgid "Get:%lu %s"
-msgstr "Réception de:%lu %s"
+msgstr "Réception de :%lu %s"
#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
#. which failed to download, but the error is ignored (compare "Err:")
#: apt-private/acqprogress.cc
#, c-format
msgid "Ign:%lu %s"
-msgstr "Ign:%lu %s"
+msgstr "Ign :%lu %s"
#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
#. which failed to download and the error is critical (compare "Ign:")
#: apt-private/acqprogress.cc
#, c-format
msgid "Err:%lu %s"
-msgstr "Err:%lu %s"
+msgstr "Err :%lu %s"
#: apt-private/acqprogress.cc
#, c-format
@@ -1760,7 +1763,7 @@ msgid ""
"repository?"
msgstr ""
"Souhaitez-vous accepter ces modifications et continuer à mettre à jour "
-"depuis ce dépôt ?"
+"depuis ce dépôt ?"
#: apt-private/private-cachefile.cc
msgid "Correcting dependencies..."
@@ -1878,7 +1881,7 @@ msgstr "Note : sélection de « %s » au lieu de « %s »\n"
#: apt-private/private-cmndline.cc
msgid "Most used commands:"
-msgstr "Commandes les plus utilisées :"
+msgstr "Commandes les plus utilisées :"
#: apt-private/private-cmndline.cc
#, c-format
@@ -1927,7 +1930,7 @@ msgstr "Aucun paquet n'a été trouvé"
#: apt-private/private-download.cc
msgid "WARNING: The following packages cannot be authenticated!"
-msgstr "ATTENTION : les paquets suivants n'ont pas été authentifiés !"
+msgstr "ATTENTION : les paquets suivants n'ont pas été authentifiés !"
#: apt-private/private-download.cc
msgid "Authentication warning overridden.\n"
@@ -1939,7 +1942,7 @@ msgstr "Certains paquets n'ont pas pu être authentifiés"
#: apt-private/private-download.cc
msgid "Install these packages without verification?"
-msgstr "Faut-il installer ces paquets sans vérification ?"
+msgstr "Faut-il installer ces paquets sans vérification ?"
#: apt-private/private-download.cc
msgid ""
@@ -2008,7 +2011,7 @@ msgstr "Erreur interne, « InstallPackages » appelé avec des paquets cassés
#: apt-private/private-install.cc
msgid "Packages need to be removed but remove is disabled."
msgstr ""
-"Les paquets doivent être enlevés mais la désinstallation est désactivée."
+"Les paquets doivent être enlevés, mais la désinstallation est désactivée."
#: apt-private/private-install.cc
msgid ""
@@ -2073,8 +2076,8 @@ msgstr "Après cette opération, %so d'espace disque seront libérés.\n"
#: apt-private/private-install.cc
msgid "Trivial Only specified but this is not a trivial operation."
msgstr ""
-"L'option --trivial-only a été indiquée mais il ne s'agit pas d'une opération "
-"triviale."
+"L'option --trivial-only a été indiquée, mais il ne s'agit pas d'une "
+"opération triviale."
# The space before the exclamation mark must not be a non-breaking space; this
# sentence is supposed to be typed by a user who cannot see the difference.
@@ -2099,7 +2102,7 @@ msgstr ""
msgid "Abort."
msgstr "Annulation."
-#: apt-private/private-install.cc cmdline/apt-mark.cc
+#: apt-private/private-install.cc
msgid "Do you want to continue?"
msgstr "Souhaitez-vous continuer ?"
@@ -2686,10 +2689,8 @@ msgstr[1] ""
msgid "All packages are up to date."
msgstr "Tous les paquets sont à jour."
-#: cmdline/apt-cache.cc cmdline/apt-mark.cc
-#, fuzzy, c-format
-#| msgid "%s does not take any arguments"
-msgid "%s does not take any arguments"
+#: cmdline/apt-cache.cc
+msgid "apt-cache stats does not take any arguments"
msgstr "La commande apt-cache ne prend pas de paramètre"
#: cmdline/apt-cache.cc
@@ -2776,8 +2777,8 @@ msgstr ""
"\tapt-cache [options] show pkg1 [pkg2 ...]\n"
"\n"
"apt-cache recherche et affiche les informations disponibles à propos\n"
-"des paquets installés et installables. Il fonctionne exclusivement sur \n"
-"les données trouvées dans le cache local grâce à la commande « update »\n"
+"des paquets installés et installables. Il fonctionne exclusivement sur\n"
+"les données trouvées dans le cache local grâce à la commande « update »\n"
"d'apt-get par exemple. Les informations affichées peuvent cependant être\n"
"obsolètes si la dernière mise à jour est trop ancienne, mais en revanche\n"
"apt-cache fonctionne indépendamment de la disponibilité des sources\n"
@@ -2994,7 +2995,7 @@ msgstr "Supprime des paquets et leurs fichiers de configuration"
#: cmdline/apt-get.cc cmdline/apt.cc
msgid "Remove automatically all unused packages"
-msgstr "Supprime automatiquement les dépendances inutilisés"
+msgstr "Supprime automatiquement les dépendances inutilisées"
#: cmdline/apt-get.cc
msgid "Distribution upgrade, see apt-get(8)"
@@ -3049,7 +3050,7 @@ msgstr "Le téléchargement a échoué"
#: cmdline/apt-helper.cc
#, c-format
msgid "GetSrvRec failed for %s"
-msgstr "GetSrvRec a échouté pour %s"
+msgstr "GetSrvRec a échoué pour %s"
#: cmdline/apt-helper.cc
msgid ""
@@ -3064,7 +3065,7 @@ msgstr ""
" apt-helper [options] cat-file fichier ...\n"
" apt-helper [options] download-file uri target-path\n"
"\n"
-"apt-helper embarque un grand nombre de commandes que les scripts pour \n"
+"apt-helper embarque un grand nombre de commandes que les scripts pour\n"
"l'interpréteur de commandes peuvent utiliser\n"
"par exemple, la même configuration de proxy ou d'acquisition qu'APT "
"utiliserait.\n"
@@ -3085,7 +3086,7 @@ msgstr "Concaténer des fichiers, avec décompression automatique"
#: cmdline/apt-helper.cc
msgid "detect proxy using apt.conf"
-msgstr "détecter la configuration proxy en utilisant apt.conf"
+msgstr "Détecter la configuration proxy en utilisant apt.conf"
#: cmdline/apt-helper.cc
msgid "wait for system to be online"
@@ -3093,7 +3094,7 @@ msgstr "En attente de la connexion du système"
#: cmdline/apt-helper.cc
msgid "drop privileges before running given command"
-msgstr ""
+msgstr "Se débarrasser des privilèges avant d'exécuter la commande donnée"
#: cmdline/apt-internal-planner.cc
msgid ""
@@ -3141,16 +3142,6 @@ msgid "%s was already set to automatically installed.\n"
msgstr "%s était déjà marqué comme installé automatiquement.\n"
#: cmdline/apt-mark.cc
-msgid "No changes necessary"
-msgstr ""
-
-#: cmdline/apt-mark.cc
-#, fuzzy
-#| msgid "The following NEW packages will be installed:"
-msgid "The following packages will be marked as automatically installed:"
-msgstr "Les NOUVEAUX paquets suivants seront installés :"
-
-#: cmdline/apt-mark.cc
#, c-format
msgid "%s was already set on hold.\n"
msgstr "%s était déjà marqué comme figé (« hold »).\n"
@@ -3163,8 +3154,7 @@ msgstr "%s était déjà marqué comme non figé.\n"
#: cmdline/apt-mark.cc
msgid "Executing dpkg failed. Are you root?"
msgstr ""
-"Échec de l'exécution de dpkg. Possédez-vous les privilèges du "
-"superutilisateur ?"
+"Échec de l'exécution de dpkg. Possédez-vous les droits du superutilisateur ?"
#: cmdline/apt-mark.cc
#, c-format
@@ -3217,12 +3207,6 @@ msgid "Mark the given packages as manually installed"
msgstr "Marquer les paquets indiqués comme installés manuellement"
#: cmdline/apt-mark.cc
-#, fuzzy
-#| msgid "Mark the given packages as automatically installed"
-msgid "Mark all dependencies of meta packages as automatically installed."
-msgstr "Marquer les paquets indiqués comme installés automatiquement"
-
-#: cmdline/apt-mark.cc
msgid "Mark a package as held back"
msgstr "Marquer un paquet comme maintenu dans une version"
@@ -3256,7 +3240,7 @@ msgid ""
msgstr ""
"Usage : apt-sortpkgs [options] fichier1 [fichier2 ...]\n"
"\n"
-"apt-sortpgks est un outil simple permettant de trier les informations à \n"
+"apt-sortpgks est un outil simple permettant de trier les informations à\n"
"propos d'un paquet. Par défaut, il trie par information de paquets "
"binaires,\n"
"mais l'option -s peut être utilisée pour passer au tri par paquet source.\n"
@@ -3679,7 +3663,7 @@ msgstr "Le serveur http a envoyé un en-tête « Content-Range » invalide"
#: methods/basehttp.cc
msgid "This HTTP server has broken range support"
-msgstr "Ce serveur http possède un support des limites non-valide"
+msgstr "Ce serveur http possède une gestion des limites non-valide"
#: methods/basehttp.cc
msgid "Unknown date format"
diff --git a/po/ru.po b/po/ru.po
index 6b50ab080..5022111f1 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -8,14 +8,14 @@
# Dmitry Astapov <adept@despammed.com>, 2004.
# Yuri Kozlov <kozlov.y@gmail.com>, 2004, 2005, 2006, 2007, 2008.
# Yuri Kozlov <yuray@komyakino.ru>, 2009, 2010, 2012, 2015, 2016.
-# Aleksej Shilin <rootlexx@mail.ru>, 2017, 2018.
# Lev Lamberov <dogsleg@debian.org>, 2018.
+# Aleksej Shilin <rootlexx@mail.ru>, 2017, 2018, 2019.
msgid ""
msgstr ""
"Project-Id-Version: apt 1.8.0\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
"POT-Creation-Date: 2019-01-23 16:49+0100\n"
-"PO-Revision-Date: 2018-10-25 19:03+0300\n"
+"PO-Revision-Date: 2019-01-29 21:20+0300\n"
"Last-Translator: Aleksej Shilin <rootlexx@mail.ru>\n"
"Language-Team: Russian <debian-l10n-russian@lists.debian.org>\n"
"Language: ru\n"
@@ -3058,13 +3058,11 @@ msgstr "%s уже помечен как установленный автома
#: cmdline/apt-mark.cc
msgid "No changes necessary"
-msgstr ""
+msgstr "Никаких изменений не требуется"
#: cmdline/apt-mark.cc
-#, fuzzy
-#| msgid "The following NEW packages will be installed:"
msgid "The following packages will be marked as automatically installed:"
-msgstr "Следующие НОВЫЕ пакеты будут установлены:"
+msgstr "Следующие пакеты будут помечены как установленные автоматически:"
#: cmdline/apt-mark.cc
#, c-format
@@ -3131,10 +3129,8 @@ msgid "Mark the given packages as manually installed"
msgstr "пометить указанные пакеты как установленные вручную"
#: cmdline/apt-mark.cc
-#, fuzzy
-#| msgid "Mark the given packages as automatically installed"
msgid "Mark all dependencies of meta packages as automatically installed."
-msgstr "пометить указанные пакеты как установленные автоматически"
+msgstr "пометить все зависимости метапакетов как установленные автоматически"
#: cmdline/apt-mark.cc
msgid "Mark a package as held back"
diff --git a/test/integration/test-apt-sources-deb822 b/test/integration/test-apt-sources-deb822
index fdf26fe97..8ffe0abe6 100755
--- a/test/integration/test-apt-sources-deb822
+++ b/test/integration/test-apt-sources-deb822
@@ -14,6 +14,8 @@ BASE='# some comment
# that contains a : as well
#Types: meep
+# a free-standing comment appears
+
Types: deb
#Types: deb-src
URIs: http://ftp.debian.org/debian
@@ -291,3 +293,69 @@ testsuccessequal --nomsg "'http://ftp.debian.org/debian/dists/stable/InRelease'
'http://ftp.debian.org/debian2/dists/sid/non-free/binary-powerpc/Packages.xz' ftp.debian.org_debian2_dists_sid_non-free_binary-powerpc_Packages 0
'http://ftp.debian.org/debian2/dists/sid/non-free/binary-all/Packages.xz' ftp.debian.org_debian2_dists_sid_non-free_binary-all_Packages 0
'http://ftp.debian.org/debian2/dists/sid/non-free/i18n/Translation-en.xz' ftp.debian.org_debian2_dists_sid_non-free_i18n_Translation-en 0 " aptget update --print-uris
+
+EXPECTEDUK="'http://ftp.uk.debian.org/debian/dists/stretch/InRelease' ftp.uk.debian.org_debian_dists_stretch_InRelease 0
+'http://ftp.uk.debian.org/debian/dists/stretch/main/source/Sources.xz' ftp.uk.debian.org_debian_dists_stretch_main_source_Sources 0
+'http://ftp.uk.debian.org/debian/dists/stretch/contrib/source/Sources.xz' ftp.uk.debian.org_debian_dists_stretch_contrib_source_Sources 0
+'http://ftp.uk.debian.org/debian/dists/stretch/non-free/source/Sources.xz' ftp.uk.debian.org_debian_dists_stretch_non-free_source_Sources 0
+'http://ftp.uk.debian.org/debian/dists/stretch/main/binary-i386/Packages.xz' ftp.uk.debian.org_debian_dists_stretch_main_binary-i386_Packages 0
+'http://ftp.uk.debian.org/debian/dists/stretch/main/binary-all/Packages.xz' ftp.uk.debian.org_debian_dists_stretch_main_binary-all_Packages 0
+'http://ftp.uk.debian.org/debian/dists/stretch/main/i18n/Translation-en.xz' ftp.uk.debian.org_debian_dists_stretch_main_i18n_Translation-en 0
+'http://ftp.uk.debian.org/debian/dists/stretch/contrib/binary-i386/Packages.xz' ftp.uk.debian.org_debian_dists_stretch_contrib_binary-i386_Packages 0
+'http://ftp.uk.debian.org/debian/dists/stretch/contrib/binary-all/Packages.xz' ftp.uk.debian.org_debian_dists_stretch_contrib_binary-all_Packages 0
+'http://ftp.uk.debian.org/debian/dists/stretch/contrib/i18n/Translation-en.xz' ftp.uk.debian.org_debian_dists_stretch_contrib_i18n_Translation-en 0
+'http://ftp.uk.debian.org/debian/dists/stretch/non-free/binary-i386/Packages.xz' ftp.uk.debian.org_debian_dists_stretch_non-free_binary-i386_Packages 0
+'http://ftp.uk.debian.org/debian/dists/stretch/non-free/binary-all/Packages.xz' ftp.uk.debian.org_debian_dists_stretch_non-free_binary-all_Packages 0
+'http://ftp.uk.debian.org/debian/dists/stretch/non-free/i18n/Translation-en.xz' ftp.uk.debian.org_debian_dists_stretch_non-free_i18n_Translation-en 0 "
+
+msgcleantest 'Test deb822 sources.list file comments' 'top'
+cat > $SOURCES <<EOF
+#NOTE: Most preferred source listed first!
+
+
+#=== NEW MULTI-LINE FORMAT ===============
+Types: deb deb-src
+URIs:http://ftp.uk.debian.org/debian/
+Suites: stretch
+Components: main contrib non-free
+EOF
+testsuccessequal --nomsg "$EXPECTEDUK" aptget update --print-uris
+
+msgcleantest 'Test deb822 sources.list file comments' 'bottom'
+cat > $SOURCES <<EOF
+Types: deb deb-src
+URIs:http://ftp.uk.debian.org/debian/
+Suites: stretch
+Components: main contrib non-free
+#=== NEW MULTI-LINE FORMAT ===============
+
+
+#NOTE: Most preferred source listed first!
+EOF
+testsuccessequal --nomsg "$EXPECTEDUK" aptget update --print-uris
+
+msgcleantest 'Test deb822 sources.list file comments' 'both'
+cat > $SOURCES <<EOF
+#=== NEW MULTI-LINE FORMAT ===============
+
+
+#NOTE: Most preferred source listed first!
+Types: deb deb-src
+URIs:http://ftp.uk.debian.org/debian/
+Suites: stretch
+Components: main contrib non-free
+#=== NEW MULTI-LINE FORMAT ===============
+
+
+#NOTE: Most preferred source listed first!
+EOF
+testsuccessequal --nomsg "$EXPECTEDUK" aptget update --print-uris
+
+
+msgcleantest 'Test deb822 sources.list file comments' 'empty'
+cat > $SOURCES <<EOF
+#=== NEW MULTI-LINE FORMAT ===============
+
+
+EOF
+testempty aptget update --print-uris
diff --git a/test/libapt/tagfile_test.cc b/test/libapt/tagfile_test.cc
index f455a8dcc..8823ff781 100644
--- a/test/libapt/tagfile_test.cc
+++ b/test/libapt/tagfile_test.cc
@@ -232,6 +232,8 @@ TEST(TagFileTest, Comments)
FileFd fd;
createTemporaryFile("commentfile", fd, NULL, "# Leading comments should be ignored.\n"
"\n"
+"# A wild second comment appears!\n"
+"\n"
"Source: foo\n"
"#Package: foo\n"
"Section: bar\n"