summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-inst/contrib/arfile.cc6
-rw-r--r--apt-pkg/acquire-item.cc2
-rw-r--r--apt-pkg/contrib/fileutl.cc16
-rw-r--r--apt-pkg/contrib/strutl.cc48
-rw-r--r--apt-pkg/contrib/strutl.h32
-rw-r--r--apt-pkg/deb/dpkgpm.cc386
-rw-r--r--apt-pkg/deb/dpkgpm.h3
-rw-r--r--apt-private/private-cmndline.cc5
-rw-r--r--cmdline/apt-get.cc2
-rw-r--r--debian/apt.postinst2
-rw-r--r--debian/changelog59
-rw-r--r--debian/control3
-rw-r--r--doc/apt-get.8.xml22
-rw-r--r--doc/apt-verbatim.ent6
-rw-r--r--doc/apt.conf.5.xml8
-rw-r--r--methods/http.cc6
-rw-r--r--po/apt-all.pot3205
-rw-r--r--test/integration/framework8
-rwxr-xr-xtest/integration/test-apt-get-upgrade78
-rwxr-xr-xtest/integration/test-apt-progress-fd71
-rwxr-xr-xtest/integration/test-apt-progress-fd-error22
-rwxr-xr-xtest/integration/test-apt-progress-fd-error-postinst22
-rw-r--r--test/libapt/strutil_test.cc27
23 files changed, 694 insertions, 3345 deletions
diff --git a/apt-inst/contrib/arfile.cc b/apt-inst/contrib/arfile.cc
index d7ee528ba..9d84c1784 100644
--- a/apt-inst/contrib/arfile.cc
+++ b/apt-inst/contrib/arfile.cc
@@ -64,7 +64,7 @@ ARArchive::~ARArchive()
byte plain text header then the file data, another header, data, etc */
bool ARArchive::LoadHeaders()
{
- signed long Left = File.Size();
+ off_t Left = File.Size();
// Check the magic byte
char Magic[8];
@@ -123,7 +123,7 @@ bool ARArchive::LoadHeaders()
}
// Account for the AR header alignment
- unsigned Skip = Memb->Size % 2;
+ off_t Skip = Memb->Size % 2;
// Add it to the list
Memb->Next = List;
@@ -131,7 +131,7 @@ bool ARArchive::LoadHeaders()
Memb->Start = File.Tell();
if (File.Skip(Memb->Size + Skip) == false)
return false;
- if (Left < (signed)(Memb->Size + Skip))
+ if (Left < (off_t)(Memb->Size + Skip))
return _error->Error(_("Archive is too short"));
Left -= Memb->Size + Skip;
}
diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc
index 04505b35a..b76921312 100644
--- a/apt-pkg/acquire-item.cc
+++ b/apt-pkg/acquire-item.cc
@@ -460,7 +460,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", 0);
+ unsigned long const fileLimit = _config->FindI("Acquire::PDiffs::FileLimit", 20);
if (fileLimit != 0 && fileLimit < available_patches.size())
{
if (Debug)
diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc
index 3966eb0ed..0261119ba 100644
--- a/apt-pkg/contrib/fileutl.cc
+++ b/apt-pkg/contrib/fileutl.cc
@@ -656,9 +656,9 @@ string flNoLink(string File)
while (1)
{
// Read the link
- int Res;
+ ssize_t Res;
if ((Res = readlink(NFile.c_str(),Buffer,sizeof(Buffer))) <= 0 ||
- (unsigned)Res >= sizeof(Buffer))
+ (size_t)Res >= sizeof(Buffer))
return File;
// Append or replace the previous path
@@ -1244,7 +1244,7 @@ FileFd::~FileFd()
gracefully. */
bool FileFd::Read(void *To,unsigned long long Size,unsigned long long *Actual)
{
- int Res;
+ ssize_t Res;
errno = 0;
if (Actual != 0)
*Actual = 0;
@@ -1344,7 +1344,7 @@ char* FileFd::ReadLine(char *To, unsigned long long const Size)
/* */
bool FileFd::Write(const void *From,unsigned long long Size)
{
- int Res;
+ ssize_t Res;
errno = 0;
do
{
@@ -1398,7 +1398,7 @@ bool FileFd::Write(const void *From,unsigned long long Size)
}
bool FileFd::Write(int Fd, const void *From, unsigned long long Size)
{
- int Res;
+ ssize_t Res;
errno = 0;
do
{
@@ -1471,14 +1471,14 @@ bool FileFd::Seek(unsigned long long To)
d->seekpos = To;
return true;
}
- int res;
+ off_t res;
#ifdef HAVE_ZLIB
if (d != NULL && d->gz)
res = gzseek(d->gz,To,SEEK_SET);
else
#endif
res = lseek(iFd,To,SEEK_SET);
- if (res != (signed)To)
+ if (res != (off_t)To)
return FileFdError("Unable to seek to %llu", To);
if (d != NULL)
@@ -1509,7 +1509,7 @@ bool FileFd::Skip(unsigned long long Over)
return true;
}
- int res;
+ off_t res;
#ifdef HAVE_ZLIB
if (d != NULL && d->gz != NULL)
res = gzseek(d->gz,Over,SEEK_CUR);
diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc
index 0955b69f7..9f794927d 100644
--- a/apt-pkg/contrib/strutl.cc
+++ b/apt-pkg/contrib/strutl.cc
@@ -36,7 +36,22 @@
using namespace std;
/*}}}*/
-
+// Strip - Remove white space from the front and back of a string /*{{{*/
+// ---------------------------------------------------------------------
+namespace APT {
+ namespace String {
+std::string Strip(const std::string &s)
+{
+ size_t start = s.find_first_not_of(" \t\n");
+ // only whitespace
+ if (start == string::npos)
+ return "";
+ size_t end = s.find_last_not_of(" \t\n");
+ return s.substr(start, end-start+1);
+}
+}
+}
+ /*}}}*/
// UTF8ToCodeset - Convert some UTF-8 string for some codeset /*{{{*/
// ---------------------------------------------------------------------
/* This is handy to use before display some information for enduser */
@@ -1118,6 +1133,37 @@ vector<string> VectorizeString(string const &haystack, char const &split)
return exploded;
}
/*}}}*/
+// StringSplit - split a string into a string vector by token /*{{{*/
+// ---------------------------------------------------------------------
+/* See header for details.
+ */
+vector<string> StringSplit(std::string const &s, std::string const &sep,
+ unsigned int maxsplit)
+{
+ vector<string> split;
+ size_t start, pos;
+
+ // no seperator given, this is bogus
+ if(sep.size() == 0)
+ return split;
+
+ start = pos = 0;
+ while (pos != string::npos)
+ {
+ pos = s.find(sep, start);
+ split.push_back(s.substr(start, pos-start));
+
+ // if maxsplit is reached, the remaining string is the last item
+ if(split.size() >= maxsplit)
+ {
+ split[split.size()-1] = s.substr(start);
+ break;
+ }
+ start = pos+sep.size();
+ }
+ return split;
+}
+ /*}}}*/
// RegexChoice - Simple regex list/list matcher /*{{{*/
// ---------------------------------------------------------------------
/* */
diff --git a/apt-pkg/contrib/strutl.h b/apt-pkg/contrib/strutl.h
index 530896141..c8fc317c0 100644
--- a/apt-pkg/contrib/strutl.h
+++ b/apt-pkg/contrib/strutl.h
@@ -17,7 +17,7 @@
#define STRUTL_H
-
+#include <limits>
#include <stdlib.h>
#include <string>
#include <cstring>
@@ -33,6 +33,13 @@ using std::vector;
using std::ostream;
#endif
+namespace APT {
+ namespace String {
+ std::string Strip(const std::string &s);
+ };
+};
+
+
bool UTF8ToCodeset(const char *codeset, const std::string &orig, std::string *dest);
char *_strstrip(char *String);
char *_strrstrip(char *String); // right strip only
@@ -62,9 +69,32 @@ bool StrToNum(const char *Str,unsigned long &Res,unsigned Len,unsigned Base = 0)
bool StrToNum(const char *Str,unsigned long long &Res,unsigned Len,unsigned Base = 0);
bool Base256ToNum(const char *Str,unsigned long &Res,unsigned int Len);
bool Hex2Num(const std::string &Str,unsigned char *Num,unsigned int Length);
+
+// input changing string split
bool TokSplitString(char Tok,char *Input,char **List,
unsigned long ListMax);
+
+// split a given string by a char
std::vector<std::string> VectorizeString(std::string const &haystack, char const &split) __attrib_const;
+
+/* \brief Return a vector of strings from string "input" where "sep"
+ * is used as the delimiter string.
+ *
+ * \param input The input string.
+ *
+ * \param sep The seperator to use.
+ *
+ * \param maxsplit (optional) The maximum amount of splitting that
+ * should be done .
+ *
+ * The optional "maxsplit" argument can be used to limit the splitting,
+ * if used the string is only split on maxsplit places and the last
+ * item in the vector contains the remainder string.
+ */
+std::vector<std::string> StringSplit(std::string const &input,
+ std::string const &sep,
+ unsigned int maxsplit=std::numeric_limits<unsigned int>::max()) __attrib_const;
+
void ioprintf(std::ostream &out,const char *format,...) __like_printf(2);
void strprintf(std::string &out,const char *format,...) __like_printf(2);
char *safe_snprintf(char *Buffer,char *End,const char *Format,...) __like_printf(3);
diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc
index 3c1013761..0ebd9f28b 100644
--- a/apt-pkg/deb/dpkgpm.cc
+++ b/apt-pkg/deb/dpkgpm.cc
@@ -37,6 +37,7 @@
#include <map>
#include <pwd.h>
#include <grp.h>
+#include <iomanip>
#include <termios.h>
#include <unistd.h>
@@ -52,9 +53,16 @@ class pkgDPkgPMPrivate
{
public:
pkgDPkgPMPrivate() : stdin_is_dev_null(false), dpkgbuf_pos(0),
- term_out(NULL), history_out(NULL)
+ term_out(NULL), history_out(NULL),
+ last_reported_progress(0.0), nr_terminal_rows(0),
+ fancy_progress_output(false)
{
dpkgbuf[0] = '\0';
+ if(_config->FindB("Dpkg::Progress-Fancy", false) == true)
+ {
+ fancy_progress_output = true;
+ _config->Set("DpkgPM::Progress", true);
+ }
}
bool stdin_is_dev_null;
// the buffer we use for the dpkg status-fd reading
@@ -63,6 +71,10 @@ public:
FILE *term_out;
FILE *history_out;
string dpkg_error;
+
+ float last_reported_progress;
+ int nr_terminal_rows;
+ bool fancy_progress_output;
};
namespace
@@ -504,145 +516,209 @@ void pkgDPkgPM::DoTerminalPty(int master)
void pkgDPkgPM::ProcessDpkgStatusLine(int OutStatusFd, char *line)
{
bool const Debug = _config->FindB("Debug::pkgDPkgProgressReporting",false);
- // the status we output
- ostringstream status;
-
if (Debug == true)
std::clog << "got from dpkg '" << line << "'" << std::endl;
-
/* dpkg sends strings like this:
- 'status: <pkg>: <pkg qstate>'
- errors look like this:
- 'status: /var/cache/apt/archives/krecipes_0.8.1-0ubuntu1_i386.deb : error : trying to overwrite `/usr/share/doc/kde/HTML/en/krecipes/krectip.png', which is also in package krecipes-data
- and conffile-prompt like this
- 'status: conffile-prompt: conffile : 'current-conffile' 'new-conffile' useredited distedited
+ 'status: <pkg>: <pkg qstate>'
+ 'status: <pkg>:<arch>: <pkg qstate>'
- Newer versions of dpkg sent also:
- 'processing: install: pkg'
- 'processing: configure: pkg'
- 'processing: remove: pkg'
- 'processing: purge: pkg'
- 'processing: disappear: pkg'
- 'processing: trigproc: trigger'
-
+ 'processing: {install,configure,remove,purge,disappear,trigproc}: pkg'
+ 'processing: {install,configure,remove,purge,disappear,trigproc}: trigger'
*/
- char* list[6];
- // dpkg sends multiline error messages sometimes (see
- // #374195 for a example. we should support this by
- // either patching dpkg to not send multiline over the
- // statusfd or by rewriting the code here to deal with
- // it. for now we just ignore it and not crash
- TokSplitString(':', line, list, sizeof(list)/sizeof(list[0]));
- if( list[0] == NULL || list[1] == NULL || list[2] == NULL)
+
+ // we need to split on ": " (note the appended space) as the ':' is
+ // part of the pkgname:arch information that dpkg sends
+ //
+ // A dpkg error message may contain additional ":" (like
+ // "failed in buffer_write(fd) (10, ret=-1): backend dpkg-deb ..."
+ // so we need to ensure to not split too much
+ std::vector<std::string> list = StringSplit(line, ": ", 4);
+ if(list.size() < 3)
{
if (Debug == true)
std::clog << "ignoring line: not enough ':'" << std::endl;
return;
}
- const char* const pkg = list[1];
- const char* action = _strstrip(list[2]);
+
+ // build the (prefix, pkgname, action) tuple, position of this
+ // is different for "processing" or "status" messages
+ std::string prefix = APT::String::Strip(list[0]);
+ std::string pkgname;
+ std::string action;
+ ostringstream status;
+
+ // "processing" has the form "processing: action: pkg or trigger"
+ // with action = ["install", "configure", "remove", "purge", "disappear",
+ // "trigproc"]
+ if (prefix == "processing")
+ {
+ pkgname = APT::String::Strip(list[2]);
+ action = APT::String::Strip(list[1]);
+
+ // this is what we support in the processing stage
+ if(action != "install" && action != "configure" &&
+ action != "remove" && action != "purge" && action != "purge")
+ {
+ if (Debug == true)
+ std::clog << "ignoring processing action: '" << action
+ << "'" << std::endl;
+ return;
+ }
+ }
+ // "status" has the form: "status: pkg: state"
+ // with state in ["half-installed", "unpacked", "half-configured",
+ // "installed", "config-files", "not-installed"]
+ else if (prefix == "status")
+ {
+ pkgname = APT::String::Strip(list[1]);
+ action = APT::String::Strip(list[2]);
+ } else {
+ if (Debug == true)
+ std::clog << "unknown prefix '" << prefix << "'" << std::endl;
+ return;
+ }
+
+
+ /* handle the special cases first:
+
+ errors look like this:
+ 'status: /var/cache/apt/archives/krecipes_0.8.1-0ubuntu1_i386.deb : error : trying to overwrite `/usr/share/doc/kde/HTML/en/krecipes/krectip.png', which is also in package krecipes-data
+ and conffile-prompt like this
+ 'status: conffile-prompt: conffile : 'current-conffile' 'new-conffile' useredited distedited
+ */
+ if (prefix == "status")
+ {
+ if(action == "error")
+ {
+ status << "pmerror:" << list[1]
+ << ":" << (PackagesDone/float(PackagesTotal)*100.0)
+ << ":" << list[3]
+ << endl;
+ if(OutStatusFd > 0)
+ FileFd::Write(OutStatusFd, status.str().c_str(), status.str().size());
+ if (Debug == true)
+ std::clog << "send: '" << status.str() << "'" << endl;
+ pkgFailures++;
+ WriteApportReport(list[1].c_str(), list[3].c_str());
+ return;
+ }
+ else if(action == "conffile")
+ {
+ status << "pmconffile:" << list[1]
+ << ":" << (PackagesDone/float(PackagesTotal)*100.0)
+ << ":" << list[3]
+ << endl;
+ if(OutStatusFd > 0)
+ FileFd::Write(OutStatusFd, status.str().c_str(), status.str().size());
+ if (Debug == true)
+ std::clog << "send: '" << status.str() << "'" << endl;
+ return;
+ }
+ }
+
+ // at this point we know that we should have a valid pkgname, so build all
+ // the info from it
+
+ // dpkg does not send always send "pkgname:arch" so we add it here
+ // if needed
+ if (pkgname.find(":") == std::string::npos)
+ {
+ // find the package in the group that is in a touched by dpkg
+ // if there are multiple dpkg will send us a full pkgname:arch
+ pkgCache::GrpIterator Grp = Cache.FindGrp(pkgname);
+ if (Grp.end() == false)
+ {
+ pkgCache::PkgIterator P = Grp.PackageList();
+ for (; P.end() != true; P = Grp.NextPkg(P))
+ {
+ if(Cache[P].Mode != pkgDepCache::ModeKeep)
+ {
+ pkgname = P.FullName();
+ break;
+ }
+ }
+ }
+ }
+
+ const char* const pkg = pkgname.c_str();
+ std::string short_pkgname = StringSplit(pkgname, ":")[0];
+ std::string arch = "";
+ if (pkgname.find(":") != string::npos)
+ arch = StringSplit(pkgname, ":")[1];
+ std::string i18n_pkgname = pkgname;
+ if (arch.size() != 0)
+ strprintf(i18n_pkgname, "%s (%s)", short_pkgname.c_str(), arch.c_str());
// 'processing' from dpkg looks like
// 'processing: action: pkg'
- if(strncmp(list[0], "processing", strlen("processing")) == 0)
+ if(prefix == "processing")
{
- char s[200];
- const char* const pkg_or_trigger = _strstrip(list[2]);
- action = _strstrip( list[1]);
const std::pair<const char *, const char *> * const iter =
std::find_if(PackageProcessingOpsBegin,
PackageProcessingOpsEnd,
- MatchProcessingOp(action));
+ MatchProcessingOp(action.c_str()));
if(iter == PackageProcessingOpsEnd)
{
if (Debug == true)
std::clog << "ignoring unknown action: " << action << std::endl;
return;
}
- snprintf(s, sizeof(s), _(iter->second), pkg_or_trigger);
+ std::string msg;
+ strprintf(msg, _(iter->second), short_pkgname.c_str());
- status << "pmstatus:" << pkg_or_trigger
+ status << "pmstatus:" << short_pkgname
<< ":" << (PackagesDone/float(PackagesTotal)*100.0)
- << ":" << s
+ << ":" << msg
<< endl;
if(OutStatusFd > 0)
FileFd::Write(OutStatusFd, status.str().c_str(), status.str().size());
if (Debug == true)
std::clog << "send: '" << status.str() << "'" << endl;
- if (strncmp(action, "disappear", strlen("disappear")) == 0)
- handleDisappearAction(pkg_or_trigger);
- return;
- }
-
- if(strncmp(action,"error",strlen("error")) == 0)
- {
- // urgs, sometime has ":" in its error string so that we
- // end up with the error message split between list[3]
- // and list[4], e.g. the message:
- // "failed in buffer_write(fd) (10, ret=-1): backend dpkg-deb ..."
- // concat them again
- if( list[4] != NULL )
- list[3][strlen(list[3])] = ':';
-
- status << "pmerror:" << list[1]
- << ":" << (PackagesDone/float(PackagesTotal)*100.0)
- << ":" << list[3]
- << endl;
- if(OutStatusFd > 0)
- FileFd::Write(OutStatusFd, status.str().c_str(), status.str().size());
- if (Debug == true)
- std::clog << "send: '" << status.str() << "'" << endl;
- pkgFailures++;
- WriteApportReport(list[1], list[3]);
+ // FIXME: this needs a muliarch testcase
+ // FIXME2: is "pkgname" here reliable with dpkg only sending us
+ // short pkgnames?
+ if (action == "disappear")
+ handleDisappearAction(pkgname);
return;
- }
- else if(strncmp(action,"conffile",strlen("conffile")) == 0)
- {
- status << "pmconffile:" << list[1]
- << ":" << (PackagesDone/float(PackagesTotal)*100.0)
- << ":" << list[3]
- << endl;
- if(OutStatusFd > 0)
- FileFd::Write(OutStatusFd, status.str().c_str(), status.str().size());
- if (Debug == true)
- std::clog << "send: '" << status.str() << "'" << endl;
- return;
- }
+ }
- vector<struct DpkgState> const &states = PackageOps[pkg];
- const char *next_action = NULL;
- if(PackageOpsDone[pkg] < states.size())
- next_action = states[PackageOpsDone[pkg]].state;
- // check if the package moved to the next dpkg state
- if(next_action && (strcmp(action, next_action) == 0))
+ if (prefix == "status")
{
- // only read the translation if there is actually a next
- // action
- const char *translation = _(states[PackageOpsDone[pkg]].str);
- char s[200];
- snprintf(s, sizeof(s), translation, pkg);
-
- // we moved from one dpkg state to a new one, report that
- PackageOpsDone[pkg]++;
- PackagesDone++;
- // build the status str
- status << "pmstatus:" << pkg
- << ":" << (PackagesDone/float(PackagesTotal)*100.0)
- << ":" << s
- << endl;
- if(_config->FindB("DPkgPM::Progress", false) == true)
- SendTerminalProgress(PackagesDone/float(PackagesTotal)*100.0);
-
- if(OutStatusFd > 0)
- FileFd::Write(OutStatusFd, status.str().c_str(), status.str().size());
- if (Debug == true)
- std::clog << "send: '" << status.str() << "'" << endl;
+ vector<struct DpkgState> const &states = PackageOps[pkg];
+ const char *next_action = NULL;
+ if(PackageOpsDone[pkg] < states.size())
+ next_action = states[PackageOpsDone[pkg]].state;
+ // check if the package moved to the next dpkg state
+ if(next_action && (action == next_action))
+ {
+ // only read the translation if there is actually a next
+ // action
+ const char *translation = _(states[PackageOpsDone[pkg]].str);
+ std::string msg;
+ strprintf(msg, translation, short_pkgname.c_str());
+
+ // we moved from one dpkg state to a new one, report that
+ PackageOpsDone[pkg]++;
+ PackagesDone++;
+ // build the status str
+ status << "pmstatus:" << short_pkgname
+ << ":" << (PackagesDone/float(PackagesTotal)*100.0)
+ << ":" << msg
+ << endl;
+ if(_config->FindB("DPkgPM::Progress", false) == true)
+ SendTerminalProgress(PackagesDone/float(PackagesTotal)*100.0);
+
+ if(OutStatusFd > 0)
+ FileFd::Write(OutStatusFd, status.str().c_str(), status.str().size());
+ if (Debug == true)
+ std::clog << "send: '" << status.str() << "'" << endl;
+ }
+ if (Debug == true)
+ std::clog << "(parsed from dpkg) pkg: " << short_pkgname
+ << " action: " << action << endl;
}
- if (Debug == true)
- std::clog << "(parsed from dpkg) pkg: " << pkg
- << " action: " << action << endl;
}
/*}}}*/
// DPkgPM::handleDisappearAction /*{{{*/
@@ -883,10 +959,43 @@ bool pkgDPkgPM::CloseLog()
*/
void pkgDPkgPM::SendTerminalProgress(float percentage)
{
- // FIXME: use colors too
- std::cout << "\r\n"
- << "Progress: [" << percentage << "%]"
- << "\r\n";
+ int reporting_steps = _config->FindI("DpkgPM::Reporting-Steps", 1);
+
+ if(percentage < (d->last_reported_progress + reporting_steps))
+ return;
+
+ std::string progress_str;
+ strprintf(progress_str, _("Progress: [%3i%%]"), (int)percentage);
+ if (d->fancy_progress_output)
+ {
+ int row = d->nr_terminal_rows;
+
+ static string save_cursor = "\033[s";
+ static string restore_cursor = "\033[u";
+
+ static string set_bg_color = "\033[42m"; // green
+ static string set_fg_color = "\033[30m"; // black
+
+ static string restore_bg = "\033[49m";
+ static string restore_fg = "\033[39m";
+
+ std::cout << save_cursor
+ // move cursor position to last row
+ << "\033[" << row << ";0f"
+ << set_bg_color
+ << set_fg_color
+ << progress_str
+ << restore_cursor
+ << restore_bg
+ << restore_fg;
+ }
+ else
+ {
+ std::cout << progress_str << "\r\n";
+ }
+ std::flush(std::cout);
+
+ d->last_reported_progress = percentage;
}
/*}}}*/
/*{{{*/
@@ -910,6 +1019,43 @@ static int racy_pselect(int nfds, fd_set *readfds, fd_set *writefds,
return retval;
}
/*}}}*/
+
+void pkgDPkgPM::SetupTerminalScrollArea(int nr_rows)
+{
+ if(!d->fancy_progress_output)
+ return;
+
+ // scroll down a bit to avoid visual glitch when the screen
+ // area shrinks by one row
+ std::cout << "\n";
+
+ // save cursor
+ std::cout << "\033[s";
+
+ // set scroll region (this will place the cursor in the top left)
+ std::cout << "\033[1;" << nr_rows - 1 << "r";
+
+ // restore cursor but ensure its inside the scrolling area
+ std::cout << "\033[u";
+ static const char *move_cursor_up = "\033[1A";
+ std::cout << move_cursor_up;
+ std::flush(std::cout);
+}
+
+void pkgDPkgPM::CleanupTerminal()
+{
+ // reset scroll area
+ SetupTerminalScrollArea(d->nr_terminal_rows + 1);
+ if(d->fancy_progress_output)
+ {
+ // override the progress line (sledgehammer)
+ static const char* clear_screen_below_cursor = "\033[J";
+ std::cout << clear_screen_below_cursor;
+ std::flush(std::cout);
+ }
+}
+
+
// DPkgPM::Go - Run the sequence /*{{{*/
// ---------------------------------------------------------------------
/* This globs the operations and calls dpkg
@@ -1035,7 +1181,7 @@ bool pkgDPkgPM::Go(int OutStatusFd)
if((*I).Pkg.end() == true)
continue;
- string const name = (*I).Pkg.Name();
+ string const name = (*I).Pkg.FullName();
PackageOpsDone[name] = 0;
for(int i=0; (DpkgStatesOpMap[(*I).Op][i]).state != NULL; ++i)
{
@@ -1266,7 +1412,8 @@ bool pkgDPkgPM::Go(int OutStatusFd)
_error->PushToStack();
if (tcgetattr(STDOUT_FILENO, &tt) == 0)
{
- ioctl(0, TIOCGWINSZ, (char *)&win);
+ ioctl(1, TIOCGWINSZ, (char *)&win);
+ d->nr_terminal_rows = win.ws_row;
if (openpty(&master, &slave, NULL, &tt, &win) < 0)
{
_error->Errno("openpty", _("Can not write log (%s)"), _("Is /dev/pts mounted?"));
@@ -1308,11 +1455,12 @@ bool pkgDPkgPM::Go(int OutStatusFd)
<< endl;
FileFd::Write(OutStatusFd, status.str().c_str(), status.str().size());
}
+
Child = ExecFork();
-
// This is the child
if (Child == 0)
{
+
if(slave >= 0 && master >= 0)
{
setsid();
@@ -1329,7 +1477,7 @@ bool pkgDPkgPM::Go(int OutStatusFd)
if (chdir(_config->FindDir("DPkg::Run-Directory","/").c_str()) != 0)
_exit(100);
-
+
if (_config->FindB("DPkg::FlushSTDIN",true) == true && isatty(STDIN_FILENO))
{
int Flags,dummy;
@@ -1345,6 +1493,9 @@ bool pkgDPkgPM::Go(int OutStatusFd)
if (fcntl(STDIN_FILENO,F_SETFL,Flags & (~(long)O_NONBLOCK)) < 0)
_exit(100);
}
+ // setup terminal
+ SetupTerminalScrollArea(d->nr_terminal_rows);
+ SendTerminalProgress(PackagesDone/float(PackagesTotal)*100.0);
/* No Job Control Stop Env is a magic dpkg var that prevents it
from using sigstop */
@@ -1444,7 +1595,7 @@ bool pkgDPkgPM::Go(int OutStatusFd)
tcsetattr(0, TCSAFLUSH, &tt);
close(master);
}
-
+
// Check for an error code.
if (WIFEXITED(Status) == 0 || WEXITSTATUS(Status) != 0)
{
@@ -1469,12 +1620,19 @@ bool pkgDPkgPM::Go(int OutStatusFd)
if(stopOnError)
{
CloseLog();
+ CleanupTerminal();
return false;
}
}
}
CloseLog();
-
+
+ // dpkg is done at this point
+ if(_config->FindB("DPkgPM::Progress", false) == true)
+ SendTerminalProgress(100);
+
+ CleanupTerminal();
+
if (pkgPackageManager::SigINTStop)
_error->Warning(_("Operation was interrupted before it could finish"));
diff --git a/apt-pkg/deb/dpkgpm.h b/apt-pkg/deb/dpkgpm.h
index 29901a204..1a58e1af5 100644
--- a/apt-pkg/deb/dpkgpm.h
+++ b/apt-pkg/deb/dpkgpm.h
@@ -84,7 +84,10 @@ class pkgDPkgPM : public pkgPackageManager
bool SendPkgsInfo(FILE * const F, unsigned int const &Version);
void WriteHistoryTag(std::string const &tag, std::string value);
+ // Terminal progress
+ void SetupTerminalScrollArea(int nr_scrolled_rows);
void SendTerminalProgress(float percentage);
+ void CleanupTerminal();
// apport integration
void WriteApportReport(const char *pkgpath, const char *errormsg);
diff --git a/apt-private/private-cmndline.cc b/apt-private/private-cmndline.cc
index e8a21cb0c..8ba6629a8 100644
--- a/apt-private/private-cmndline.cc
+++ b/apt-private/private-cmndline.cc
@@ -120,7 +120,7 @@ bool addArgumentsAPTGet(std::vector<CommandLine::Args> &Args, char const * const
if (CmdMatches("install", "remove", "purge", "upgrade", "dist-upgrade",
"dselect-upgrade", "autoremove"))
{
- addArg(0, "dpkg-progress", "DpkgPM::Progress", 0);
+ addArg(0, "show-progress", "DpkgPM::Progress", 0);
addArg('f', "fix-broken", "APT::Get::Fix-Broken", 0);
addArg(0, "purge", "APT::Get::Purge", 0);
addArg('V',"verbose-versions","APT::Get::Show-Versions",0);
@@ -129,7 +129,8 @@ bool addArgumentsAPTGet(std::vector<CommandLine::Args> &Args, char const * const
addArg(0, "solver", "APT::Solver", CommandLine::HasArg);
if (CmdMatches("upgrade"))
{
- addArg(0, "allow-new", "APT::Get::UpgradeAllowNew", 0);
+ addArg(0, "new-pkgs", "APT::Get::Upgrade-Allow-New",
+ CommandLine::Boolean);
}
}
else if (CmdMatches("update"))
diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc
index b150cf541..15373b050 100644
--- a/cmdline/apt-get.cc
+++ b/cmdline/apt-get.cc
@@ -1573,7 +1573,7 @@ void SigWinch(int)
/*}}}*/
bool DoUpgrade(CommandLine &CmdL) /*{{{*/
{
- if (_config->FindB("APT::Get::UpgradeAllowNew", false) == true)
+ if (_config->FindB("APT::Get::Upgrade-Allow-New", false) == true)
return DoUpgradeWithAllowNewPackages(CmdL);
else
return DoUpgradeNoNewPackages(CmdL);
diff --git a/debian/apt.postinst b/debian/apt.postinst
index 70de237d0..fd3e273bb 100644
--- a/debian/apt.postinst
+++ b/debian/apt.postinst
@@ -33,7 +33,7 @@ case "$1" in
fi
# create kernel autoremoval blacklist on update
- if dpkg --compare-versions "$2" lt-nl 0.9.9.3; then
+ if dpkg --compare-versions "$2" lt 0.9.9.3; then
/etc/kernel/postinst.d/apt-auto-removal
fi
;;
diff --git a/debian/changelog b/debian/changelog
index 6e31784f2..65269de95 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,9 +1,64 @@
-apt (0.9.11.5) UNRELEASED; urgency=low
+apt (0.9.12.1) unstable; urgency=low
+ [ Michael Vogt ]
+ * do not send pkgname:arch over the APT::Status-Fd to not break
+ clients (closes: 726156). A new APT::Status-deb822-Fd will be
+ used to fix this.
+ * add integration tests for APT::Status-Fd
+ * add missing _() around the new "Progress" string
+
+ [ David Kalnischkies ]
+ * fix progress-segfault in case of dpkg errors/prompts (Closes: 726047)
+
+ -- Michael Vogt <mvo@debian.org> Tue, 15 Oct 2013 18:25:51 +0200
+
+apt (0.9.12) unstable; urgency=low
+
+ [ Christian Perrier ]
* Fix typo in apt-private/private-show.cc. Thanks to Benjamin
Keresa. Closes: #724073
+
+ [ Mark Hymers ]
+ * fix libapt-inst for >2G debs (closes: #725483)
- -- Christian Perrier <bubulle@debian.org> Mon, 23 Sep 2013 07:05:34 +0200
+ [ David Kalnischkies ]
+ * don't strip :any from dependencies in single-arch (Closes: 723586)
+ * pkg from only trusted sources keeps being trusted (Closes: 617690)
+ * compression-neutral message for missing data.tar member (Closes: 722710)
+ * print-uris prints regardless of quiet-level again (Closes: 722207)
+ * retry without partial data after a 416 response (Closes: 710924)
+ * replace "filesize - 1" trick in http with proper 416 handling
+ * fix partial (206 and 416) support in https
+ * handle complete responses to https range requests (Closes: 617643, 667699)
+ (LP: 1157943)
+ * don't consider holds for autoremoval (Closes: 724995)
+ * put fetch errors in 'source' on our errorstack
+ * use pkgAcqArchive in 'download' for proper errors
+ * fix lzma-support detection via xz binary
+ * do not ++ on erased package pointers in autoremove
+
+ [ Michael Vogt ]
+ * Add new "apt-get upgrade --with-new-pkgs" option (and add man-page for it).
+ So "apt-get upgrade --with-new-pkgs" will pull in new dependencies but
+ never remove packages
+ * Rename "--dpkg-progress" to "--show-progress" and document it in
+ apt-get.8. This will show global install progress information in the
+ terminal.
+ * Fix status-fd progress calculation for certain multi-arch install/upgrade
+ situations
+ * add new -o DpkgPM::Progress-Fancy for nicer dpkg progress output
+ on vt100+ terminals
+ * fix libapt-inst for >2G debs (closes: #725483), thanks to Mark Hymers
+ * debian/apt.postinst: use --compare-versions lt instead of lt-nl,
+ to ensure the apt-auto-removal file is correctly create,
+ thanks to Ben Hutchings
+ * update Uploaders to match recent uploaders better
+ * Set the default "Acquire::PDiffs::FileLimit" to 20. If the amount
+ of pdiffs is bigger things tend to get slower. Set
+ Acquire::PDiffs::FileLimit "0";
+ in /etc/apt/apt.conf to get the old behavior back.
+
+ -- Michael Vogt <mvo@debian.org> Wed, 09 Oct 2013 22:39:41 +0200
apt (0.9.11.4) unstable; urgency=low
diff --git a/debian/control b/debian/control
index 3c5d14fe8..673fba477 100644
--- a/debian/control
+++ b/debian/control
@@ -2,8 +2,7 @@ Source: apt
Section: admin
Priority: important
Maintainer: APT Development Team <deity@lists.debian.org>
-Uploaders: Michael Vogt <mvo@debian.org>, Otavio Salvador <otavio@debian.org>,
- Christian Perrier <bubulle@debian.org>, Daniel Burrows <dburrows@debian.org>,
+Uploaders: Michael Vogt <mvo@debian.org>, Christian Perrier <bubulle@debian.org>,
Julian Andres Klode <jak@debian.org>
Standards-Version: 3.9.4
Build-Depends: dpkg-dev (>= 1.15.8), debhelper (>= 8.1.3~), libdb-dev,
diff --git a/doc/apt-get.8.xml b/doc/apt-get.8.xml
index cc4e82255..4c050ec03 100644
--- a/doc/apt-get.8.xml
+++ b/doc/apt-get.8.xml
@@ -389,6 +389,18 @@
Configuration Item: <literal>APT::Ignore-Hold</literal>.</para></listitem>
</varlistentry>
+ <varlistentry><term><option>--with-new-pkgs</option></term>
+ <listitem><para>Allow installing new packages when used in
+ conjunction with <literal>upgrade</literal>. This is useful if
+ the update of a installed package requires new dependencies to be
+ installed. Instead of holding the package back <literal>upgrade</literal>
+ will upgrade the package and install the new dependencies. Note that
+ <literal>upgrade</literal> with this option will never remove packages,
+ only allow adding new ones.
+ Configuration Item: <literal>APT::Get::Upgrade-Allow-New</literal>.
+ </para></listitem>
+ </varlistentry>
+
<varlistentry><term><option>--no-upgrade</option></term>
<listitem><para>Do not upgrade packages; when used in conjunction with <literal>install</literal>,
<literal>no-upgrade</literal> will prevent packages on the command line
@@ -508,7 +520,15 @@
This is useful for tools like pbuilder.
Configuration Item: <literal>APT::Get::AllowUnauthenticated</literal>.</para></listitem>
</varlistentry>
-
+
+ <varlistentry><term><option>--show-progress</option></term>
+ <listitem><para>Show user friendly progress information in the
+ terminal window when packages are installed, upgraded or
+ removed. For a machine parsable version of this data see
+ README.progress-reporting in the apt doc directory.
+ <literal>DpkgPM::Progress</literal>.</para></listitem>
+ </varlistentry>
+
&apt-commonoptions;
diff --git a/doc/apt-verbatim.ent b/doc/apt-verbatim.ent
index c9bb06123..0d0d95c7a 100644
--- a/doc/apt-verbatim.ent
+++ b/doc/apt-verbatim.ent
@@ -124,6 +124,12 @@
</citerefentry>"
>
+<!ENTITY squid-deb-proxy-client "<citerefentry>
+ <refentrytitle><command>squid-deb-proxy-client</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
<!ENTITY debsign "<citerefentry>
<refentrytitle><command>debsign</command></refentrytitle>
<manvolnum>1</manvolnum>
diff --git a/doc/apt.conf.5.xml b/doc/apt.conf.5.xml
index 42119baa5..e8da666c7 100644
--- a/doc/apt.conf.5.xml
+++ b/doc/apt.conf.5.xml
@@ -396,6 +396,14 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";};
<para><literal>Acquire::http::User-Agent</literal> can be used to set a different
User-Agent for the http download method as some proxies allow access for clients
only if the client uses a known identifier.</para>
+
+ <para><literal>Acquire::http::Proxy-Auto-Detect</literal> can be used to
+ specify a external command to discover the http proxy to use. Apt expects
+ the command to output the proxy on stdout in the style
+ <literal>http://proxy:port/</literal>. See the
+ &squid-deb-proxy-client; package for a example implementation that
+ uses avahi.</para>
+
</listitem>
</varlistentry>
diff --git a/methods/http.cc b/methods/http.cc
index 71a02e53a..b22b61efc 100644
--- a/methods/http.cc
+++ b/methods/http.cc
@@ -798,7 +798,6 @@ bool HttpMethod::Configuration(string Message)
PipelineDepth = _config->FindI("Acquire::http::Pipeline-Depth",
PipelineDepth);
Debug = _config->FindB("Debug::Acquire::http",false);
- AutoDetectProxyCmd = _config->Find("Acquire::http::ProxyAutoDetect");
// Get the proxy to use
AutoDetectProxy();
@@ -811,6 +810,11 @@ bool HttpMethod::Configuration(string Message)
/* */
bool HttpMethod::AutoDetectProxy()
{
+ // option is "Acquire::http::Proxy-Auto-Detect" but we allow the old
+ // name without the dash ("-")
+ AutoDetectProxyCmd = _config->Find("Acquire::http::Proxy-Auto-Detect",
+ _config->Find("Acquire::http::ProxyAutoDetect"));
+
if (AutoDetectProxyCmd.empty())
return true;
diff --git a/po/apt-all.pot b/po/apt-all.pot
deleted file mode 100644
index ab5b68a52..000000000
--- a/po/apt-all.pot
+++ /dev/null
@@ -1,3205 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# This file is put in the public domain.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: apt 0.9.8.1\n"
-"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2013-07-31 16:24+0200\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"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: cmdline/apt-cache.cc:158
-#, c-format
-msgid "Package %s version %s has an unmet dep:\n"
-msgstr ""
-
-#: cmdline/apt-cache.cc:286
-msgid "Total package names: "
-msgstr ""
-
-#: cmdline/apt-cache.cc:288
-msgid "Total package structures: "
-msgstr ""
-
-#: cmdline/apt-cache.cc:328
-msgid " Normal packages: "
-msgstr ""
-
-#: cmdline/apt-cache.cc:329
-msgid " Pure virtual packages: "
-msgstr ""
-
-#: cmdline/apt-cache.cc:330
-msgid " Single virtual packages: "
-msgstr ""
-
-#: cmdline/apt-cache.cc:331
-msgid " Mixed virtual packages: "
-msgstr ""
-
-#: cmdline/apt-cache.cc:332
-msgid " Missing: "
-msgstr ""
-
-#: cmdline/apt-cache.cc:334
-msgid "Total distinct versions: "
-msgstr ""
-
-#: cmdline/apt-cache.cc:336
-msgid "Total distinct descriptions: "
-msgstr ""
-
-#: cmdline/apt-cache.cc:338
-msgid "Total dependencies: "
-msgstr ""
-
-#: cmdline/apt-cache.cc:341
-msgid "Total ver/file relations: "
-msgstr ""
-
-#: cmdline/apt-cache.cc:343
-msgid "Total Desc/File relations: "
-msgstr ""
-
-#: cmdline/apt-cache.cc:345
-msgid "Total Provides mappings: "
-msgstr ""
-
-#: cmdline/apt-cache.cc:357
-msgid "Total globbed strings: "
-msgstr ""
-
-#: cmdline/apt-cache.cc:371
-msgid "Total dependency version space: "
-msgstr ""
-
-#: cmdline/apt-cache.cc:376
-msgid "Total slack space: "
-msgstr ""
-
-#: cmdline/apt-cache.cc:384
-msgid "Total space accounted for: "
-msgstr ""
-
-#: cmdline/apt-cache.cc:515 cmdline/apt-cache.cc:1165
-#, c-format
-msgid "Package file %s is out of sync."
-msgstr ""
-
-#: cmdline/apt-cache.cc:593 cmdline/apt-cache.cc:1452
-#: cmdline/apt-cache.cc:1454 cmdline/apt-cache.cc:1531 cmdline/apt-mark.cc:46
-#: cmdline/apt-mark.cc:93 cmdline/apt-mark.cc:219
-msgid "No packages found"
-msgstr ""
-
-#: cmdline/apt-cache.cc:1265
-msgid "You must give at least one search pattern"
-msgstr ""
-
-#: cmdline/apt-cache.cc:1431
-msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
-msgstr ""
-
-#: cmdline/apt-cache.cc:1526 apt-pkg/cacheset.cc:510
-#, c-format
-msgid "Unable to locate package %s"
-msgstr ""
-
-#: cmdline/apt-cache.cc:1556
-msgid "Package files:"
-msgstr ""
-
-#: cmdline/apt-cache.cc:1563 cmdline/apt-cache.cc:1654
-msgid "Cache is out of sync, can't x-ref a package file"
-msgstr ""
-
-#. Show any packages have explicit pins
-#: cmdline/apt-cache.cc:1577
-msgid "Pinned packages:"
-msgstr ""
-
-#: cmdline/apt-cache.cc:1589 cmdline/apt-cache.cc:1634
-msgid "(not found)"
-msgstr ""
-
-#: cmdline/apt-cache.cc:1597
-msgid " Installed: "
-msgstr ""
-
-#: cmdline/apt-cache.cc:1598
-msgid " Candidate: "
-msgstr ""
-
-#: cmdline/apt-cache.cc:1616 cmdline/apt-cache.cc:1624
-msgid "(none)"
-msgstr ""
-
-#: cmdline/apt-cache.cc:1631
-msgid " Package pin: "
-msgstr ""
-
-#. Show the priority tables
-#: cmdline/apt-cache.cc:1640
-msgid " Version table:"
-msgstr ""
-
-#: cmdline/apt-cache.cc:1753 cmdline/apt-cdrom.cc:206 cmdline/apt-config.cc:81
-#: cmdline/apt-get.cc:3392 cmdline/apt-mark.cc:375
-#: cmdline/apt-extracttemplates.cc:229 ftparchive/apt-ftparchive.cc:591
-#: cmdline/apt-internal-solver.cc:33 cmdline/apt-sortpkgs.cc:147
-#, c-format
-msgid "%s %s for %s compiled on %s %s\n"
-msgstr ""
-
-#: cmdline/apt-cache.cc:1760
-msgid ""
-"Usage: apt-cache [options] command\n"
-" apt-cache [options] showpkg pkg1 [pkg2 ...]\n"
-" apt-cache [options] showsrc pkg1 [pkg2 ...]\n"
-"\n"
-"apt-cache is a low-level tool used to query information\n"
-"from APT's binary cache files\n"
-"\n"
-"Commands:\n"
-" gencaches - Build both the package and source cache\n"
-" showpkg - Show some general information for a single package\n"
-" showsrc - Show source records\n"
-" stats - Show some basic statistics\n"
-" dump - Show the entire file in a terse form\n"
-" dumpavail - Print an available file to stdout\n"
-" unmet - Show unmet dependencies\n"
-" search - Search the package list for a regex pattern\n"
-" show - Show a readable record for the package\n"
-" depends - Show raw dependency information for a package\n"
-" rdepends - Show reverse dependency information for a package\n"
-" pkgnames - List the names of all packages in the system\n"
-" dotty - Generate package graphs for GraphViz\n"
-" xvcg - Generate package graphs for xvcg\n"
-" policy - Show policy settings\n"
-"\n"
-"Options:\n"
-" -h This help text.\n"
-" -p=? The package cache.\n"
-" -s=? The source cache.\n"
-" -q Disable progress indicator.\n"
-" -i Show only important deps for the unmet command.\n"
-" -c=? Read this configuration file\n"
-" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
-"See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
-msgstr ""
-
-#. }}}
-#: cmdline/apt-cdrom.cc:43
-msgid ""
-"No CD-ROM could be auto-detected or found using the default mount point.\n"
-"You may try the --cdrom option to set the CD-ROM mount point. See 'man apt-"
-"cdrom' for more information about the CD-ROM auto-detection and mount point."
-msgstr ""
-
-#: cmdline/apt-cdrom.cc:85
-msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
-msgstr ""
-
-#: cmdline/apt-cdrom.cc:100
-msgid "Please insert a Disc in the drive and press enter"
-msgstr ""
-
-#: cmdline/apt-cdrom.cc:135
-#, c-format
-msgid "Failed to mount '%s' to '%s'"
-msgstr ""
-
-#: cmdline/apt-cdrom.cc:170
-msgid "Repeat this process for the rest of the CDs in your set."
-msgstr ""
-
-#: cmdline/apt-config.cc:46
-msgid "Arguments not in pairs"
-msgstr ""
-
-#: cmdline/apt-config.cc:87
-msgid ""
-"Usage: apt-config [options] command\n"
-"\n"
-"apt-config is a simple tool to read the APT config file\n"
-"\n"
-"Commands:\n"
-" shell - Shell mode\n"
-" dump - Show the configuration\n"
-"\n"
-"Options:\n"
-" -h This help text.\n"
-" -c=? Read this configuration file\n"
-" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
-msgstr ""
-
-#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
-#. e.g. "Do you want to continue? [Y/n] "
-#. The user has to answer with an input matching the
-#. YESEXPR/NOEXPR defined in your l10n.
-#: cmdline/apt-get.cc:146
-msgid "[Y/n]"
-msgstr ""
-
-#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
-#. e.g. "Should this file be removed? [y/N] "
-#. The user has to answer with an input matching the
-#. YESEXPR/NOEXPR defined in your l10n.
-#: cmdline/apt-get.cc:152
-msgid "[y/N]"
-msgstr ""
-
-#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
-#: cmdline/apt-get.cc:163
-msgid "Y"
-msgstr ""
-
-#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
-#: cmdline/apt-get.cc:169
-msgid "N"
-msgstr ""
-
-#: cmdline/apt-get.cc:191 apt-pkg/cachefilter.cc:33
-#, c-format
-msgid "Regex compilation error - %s"
-msgstr ""
-
-#: cmdline/apt-get.cc:289
-msgid "The following packages have unmet dependencies:"
-msgstr ""
-
-#: cmdline/apt-get.cc:379
-#, c-format
-msgid "but %s is installed"
-msgstr ""
-
-#: cmdline/apt-get.cc:381
-#, c-format
-msgid "but %s is to be installed"
-msgstr ""
-
-#: cmdline/apt-get.cc:388
-msgid "but it is not installable"
-msgstr ""
-
-#: cmdline/apt-get.cc:390
-msgid "but it is a virtual package"
-msgstr ""
-
-#: cmdline/apt-get.cc:393
-msgid "but it is not installed"
-msgstr ""
-
-#: cmdline/apt-get.cc:393
-msgid "but it is not going to be installed"
-msgstr ""
-
-#: cmdline/apt-get.cc:398
-msgid " or"
-msgstr ""
-
-#: cmdline/apt-get.cc:427
-msgid "The following NEW packages will be installed:"
-msgstr ""
-
-#: cmdline/apt-get.cc:453
-msgid "The following packages will be REMOVED:"
-msgstr ""
-
-#: cmdline/apt-get.cc:475
-msgid "The following packages have been kept back:"
-msgstr ""
-
-#: cmdline/apt-get.cc:496
-msgid "The following packages will be upgraded:"
-msgstr ""
-
-#: cmdline/apt-get.cc:517
-msgid "The following packages will be DOWNGRADED:"
-msgstr ""
-
-#: cmdline/apt-get.cc:537
-msgid "The following held packages will be changed:"
-msgstr ""
-
-#: cmdline/apt-get.cc:592
-#, c-format
-msgid "%s (due to %s) "
-msgstr ""
-
-#: cmdline/apt-get.cc:600
-msgid ""
-"WARNING: The following essential packages will be removed.\n"
-"This should NOT be done unless you know exactly what you are doing!"
-msgstr ""
-
-#: cmdline/apt-get.cc:631
-#, c-format
-msgid "%lu upgraded, %lu newly installed, "
-msgstr ""
-
-#: cmdline/apt-get.cc:635
-#, c-format
-msgid "%lu reinstalled, "
-msgstr ""
-
-#: cmdline/apt-get.cc:637
-#, c-format
-msgid "%lu downgraded, "
-msgstr ""
-
-#: cmdline/apt-get.cc:639
-#, c-format
-msgid "%lu to remove and %lu not upgraded.\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:643
-#, c-format
-msgid "%lu not fully installed or removed.\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:664
-#, c-format
-msgid "Note, selecting '%s' for task '%s'\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:669
-#, c-format
-msgid "Note, selecting '%s' for regex '%s'\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:686
-#, c-format
-msgid "Package %s is a virtual package provided by:\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:697
-msgid " [Installed]"
-msgstr ""
-
-#: cmdline/apt-get.cc:706
-msgid " [Not candidate version]"
-msgstr ""
-
-#: cmdline/apt-get.cc:708
-msgid "You should explicitly select one to install."
-msgstr ""
-
-#: cmdline/apt-get.cc:711
-#, c-format
-msgid ""
-"Package %s is not available, but is referred to by another package.\n"
-"This may mean that the package is missing, has been obsoleted, or\n"
-"is only available from another source\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:729
-msgid "However the following packages replace it:"
-msgstr ""
-
-#: cmdline/apt-get.cc:741
-#, c-format
-msgid "Package '%s' has no installation candidate"
-msgstr ""
-
-#: cmdline/apt-get.cc:754
-#, c-format
-msgid "Virtual packages like '%s' can't be removed\n"
-msgstr ""
-
-#. TRANSLATORS: Note, this is not an interactive question
-#: cmdline/apt-get.cc:766 cmdline/apt-get.cc:969
-#, c-format
-msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:772 cmdline/apt-get.cc:975
-#, c-format
-msgid "Package '%s' is not installed, so not removed\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:817
-#, c-format
-msgid "Note, selecting '%s' instead of '%s'\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:847
-#, c-format
-msgid "Skipping %s, it is already installed and upgrade is not set.\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:851
-#, c-format
-msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:863
-#, c-format
-msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:868
-#, c-format
-msgid "%s is already the newest version.\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:887 cmdline/apt-get.cc:2187 cmdline/apt-mark.cc:68
-#, c-format
-msgid "%s set to manually installed.\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:913
-#, c-format
-msgid "Selected version '%s' (%s) for '%s'\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:918
-#, c-format
-msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:1054
-msgid "Correcting dependencies..."
-msgstr ""
-
-#: cmdline/apt-get.cc:1057
-msgid " failed."
-msgstr ""
-
-#: cmdline/apt-get.cc:1060
-msgid "Unable to correct dependencies"
-msgstr ""
-
-#: cmdline/apt-get.cc:1063
-msgid "Unable to minimize the upgrade set"
-msgstr ""
-
-#: cmdline/apt-get.cc:1065
-msgid " Done"
-msgstr ""
-
-#: cmdline/apt-get.cc:1069
-msgid "You might want to run 'apt-get -f install' to correct these."
-msgstr ""
-
-#: cmdline/apt-get.cc:1072
-msgid "Unmet dependencies. Try using -f."
-msgstr ""
-
-#: cmdline/apt-get.cc:1097
-msgid "WARNING: The following packages cannot be authenticated!"
-msgstr ""
-
-#: cmdline/apt-get.cc:1101
-msgid "Authentication warning overridden.\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:1108
-msgid "Install these packages without verification?"
-msgstr ""
-
-#: cmdline/apt-get.cc:1110
-msgid "Some packages could not be authenticated"
-msgstr ""
-
-#: cmdline/apt-get.cc:1119 cmdline/apt-get.cc:1280
-msgid "There are problems and -y was used without --force-yes"
-msgstr ""
-
-#: cmdline/apt-get.cc:1160
-msgid "Internal error, InstallPackages was called with broken packages!"
-msgstr ""
-
-#: cmdline/apt-get.cc:1169
-msgid "Packages need to be removed but remove is disabled."
-msgstr ""
-
-#: cmdline/apt-get.cc:1180
-msgid "Internal error, Ordering didn't finish"
-msgstr ""
-
-#: cmdline/apt-get.cc:1218
-msgid "How odd.. The sizes didn't match, email apt@packages.debian.org"
-msgstr ""
-
-#. TRANSLATOR: The required space between number and unit is already included
-#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:1225
-#, c-format
-msgid "Need to get %sB/%sB of archives.\n"
-msgstr ""
-
-#. TRANSLATOR: The required space between number and unit is already included
-#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:1230
-#, c-format
-msgid "Need to get %sB of archives.\n"
-msgstr ""
-
-#. TRANSLATOR: The required space between number and unit is already included
-#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:1237
-#, c-format
-msgid "After this operation, %sB of additional disk space will be used.\n"
-msgstr ""
-
-#. TRANSLATOR: The required space between number and unit is already included
-#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:1242
-#, c-format
-msgid "After this operation, %sB disk space will be freed.\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:1257 cmdline/apt-get.cc:1260 cmdline/apt-get.cc:2621
-#: cmdline/apt-get.cc:2624
-#, c-format
-msgid "Couldn't determine free space in %s"
-msgstr ""
-
-#: cmdline/apt-get.cc:1270
-#, c-format
-msgid "You don't have enough free space in %s."
-msgstr ""
-
-#: cmdline/apt-get.cc:1286 cmdline/apt-get.cc:1308
-msgid "Trivial Only specified but this is not a trivial operation."
-msgstr ""
-
-#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
-#. careful with hard to type or special characters (like non-breaking spaces)
-#: cmdline/apt-get.cc:1290
-msgid "Yes, do as I say!"
-msgstr ""
-
-#: cmdline/apt-get.cc:1292
-#, c-format
-msgid ""
-"You are about to do something potentially harmful.\n"
-"To continue type in the phrase '%s'\n"
-" ?] "
-msgstr ""
-
-#: cmdline/apt-get.cc:1298 cmdline/apt-get.cc:1317
-msgid "Abort."
-msgstr ""
-
-#: cmdline/apt-get.cc:1313
-msgid "Do you want to continue?"
-msgstr ""
-
-#: cmdline/apt-get.cc:1385 cmdline/apt-get.cc:2686 apt-pkg/algorithms.cc:1566
-#, c-format
-msgid "Failed to fetch %s %s\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:1403
-msgid "Some files failed to download"
-msgstr ""
-
-#: cmdline/apt-get.cc:1404 cmdline/apt-get.cc:2698
-msgid "Download complete and in download only mode"
-msgstr ""
-
-#: cmdline/apt-get.cc:1410
-msgid ""
-"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
-"missing?"
-msgstr ""
-
-#: cmdline/apt-get.cc:1414
-msgid "--fix-missing and media swapping is not currently supported"
-msgstr ""
-
-#: cmdline/apt-get.cc:1419
-msgid "Unable to correct missing packages."
-msgstr ""
-
-#: cmdline/apt-get.cc:1420
-msgid "Aborting install."
-msgstr ""
-
-#: cmdline/apt-get.cc:1448
-msgid ""
-"The following package disappeared from your system as\n"
-"all files have been overwritten by other packages:"
-msgid_plural ""
-"The following packages disappeared from your system as\n"
-"all files have been overwritten by other packages:"
-msgstr[0] ""
-msgstr[1] ""
-
-#: cmdline/apt-get.cc:1452
-msgid "Note: This is done automatically and on purpose by dpkg."
-msgstr ""
-
-#: cmdline/apt-get.cc:1590
-#, c-format
-msgid "Ignore unavailable target release '%s' of package '%s'"
-msgstr ""
-
-#: cmdline/apt-get.cc:1622
-#, c-format
-msgid "Picking '%s' as source package instead of '%s'\n"
-msgstr ""
-
-#. if (VerTag.empty() == false && Last == 0)
-#: cmdline/apt-get.cc:1660
-#, c-format
-msgid "Ignore unavailable version '%s' of package '%s'"
-msgstr ""
-
-#: cmdline/apt-get.cc:1676
-msgid "The update command takes no arguments"
-msgstr ""
-
-#: cmdline/apt-get.cc:1742
-msgid "We are not supposed to delete stuff, can't start AutoRemover"
-msgstr ""
-
-#: cmdline/apt-get.cc:1846
-msgid ""
-"Hmm, seems like the AutoRemover destroyed something which really\n"
-"shouldn't happen. Please file a bug report against apt."
-msgstr ""
-
-#.
-#. if (Packages == 1)
-#. {
-#. c1out << endl;
-#. c1out <<
-#. _("Since you only requested a single operation it is extremely likely that\n"
-#. "the package is simply not installable and a bug report against\n"
-#. "that package should be filed.") << endl;
-#. }
-#.
-#: cmdline/apt-get.cc:1849 cmdline/apt-get.cc:2017
-msgid "The following information may help to resolve the situation:"
-msgstr ""
-
-#: cmdline/apt-get.cc:1853
-msgid "Internal Error, AutoRemover broke stuff"
-msgstr ""
-
-#: cmdline/apt-get.cc:1860
-msgid ""
-"The following package was automatically installed and is no longer required:"
-msgid_plural ""
-"The following packages were automatically installed and are no longer "
-"required:"
-msgstr[0] ""
-msgstr[1] ""
-
-#: cmdline/apt-get.cc:1864
-#, c-format
-msgid "%lu package was automatically installed and is no longer required.\n"
-msgid_plural ""
-"%lu packages were automatically installed and are no longer required.\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: cmdline/apt-get.cc:1866
-msgid "Use 'apt-get autoremove' to remove it."
-msgid_plural "Use 'apt-get autoremove' to remove them."
-msgstr[0] ""
-msgstr[1] ""
-
-#: cmdline/apt-get.cc:1885
-msgid "Internal error, AllUpgrade broke stuff"
-msgstr ""
-
-#: cmdline/apt-get.cc:1984
-msgid "You might want to run 'apt-get -f install' to correct these:"
-msgstr ""
-
-#: cmdline/apt-get.cc:1988
-msgid ""
-"Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a "
-"solution)."
-msgstr ""
-
-#: cmdline/apt-get.cc:2002
-msgid ""
-"Some packages could not be installed. This may mean that you have\n"
-"requested an impossible situation or if you are using the unstable\n"
-"distribution that some required packages have not yet been created\n"
-"or been moved out of Incoming."
-msgstr ""
-
-#: cmdline/apt-get.cc:2023
-msgid "Broken packages"
-msgstr ""
-
-#: cmdline/apt-get.cc:2049
-msgid "The following extra packages will be installed:"
-msgstr ""
-
-#: cmdline/apt-get.cc:2139
-msgid "Suggested packages:"
-msgstr ""
-
-#: cmdline/apt-get.cc:2140
-msgid "Recommended packages:"
-msgstr ""
-
-#: cmdline/apt-get.cc:2182
-#, c-format
-msgid "Couldn't find package %s"
-msgstr ""
-
-#: cmdline/apt-get.cc:2189 cmdline/apt-mark.cc:70
-#, c-format
-msgid "%s set to automatically installed.\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:2197 cmdline/apt-mark.cc:114
-msgid ""
-"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
-"instead."
-msgstr ""
-
-#: cmdline/apt-get.cc:2213
-msgid "Calculating upgrade... "
-msgstr ""
-
-#: cmdline/apt-get.cc:2216 methods/ftp.cc:712 methods/connect.cc:116
-msgid "Failed"
-msgstr ""
-
-#: cmdline/apt-get.cc:2221
-msgid "Done"
-msgstr ""
-
-#: cmdline/apt-get.cc:2288 cmdline/apt-get.cc:2296
-msgid "Internal error, problem resolver broke stuff"
-msgstr ""
-
-#: cmdline/apt-get.cc:2324 cmdline/apt-get.cc:2361
-msgid "Unable to lock the download directory"
-msgstr ""
-
-#: cmdline/apt-get.cc:2418
-#, c-format
-msgid "Can't find a source to download version '%s' of '%s'"
-msgstr ""
-
-#: cmdline/apt-get.cc:2423
-#, c-format
-msgid "Downloading %s %s"
-msgstr ""
-
-#: cmdline/apt-get.cc:2483
-msgid "Must specify at least one package to fetch source for"
-msgstr ""
-
-#: cmdline/apt-get.cc:2523 cmdline/apt-get.cc:2835
-#, c-format
-msgid "Unable to find a source package for %s"
-msgstr ""
-
-#: cmdline/apt-get.cc:2540
-#, c-format
-msgid ""
-"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
-"%s\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:2545
-#, c-format
-msgid ""
-"Please use:\n"
-"bzr branch %s\n"
-"to retrieve the latest (possibly unreleased) updates to the package.\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:2598
-#, c-format
-msgid "Skipping already downloaded file '%s'\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:2635
-#, c-format
-msgid "You don't have enough free space in %s"
-msgstr ""
-
-#. TRANSLATOR: The required space between number and unit is already included
-#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:2644
-#, c-format
-msgid "Need to get %sB/%sB of source archives.\n"
-msgstr ""
-
-#. TRANSLATOR: The required space between number and unit is already included
-#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:2649
-#, c-format
-msgid "Need to get %sB of source archives.\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:2655
-#, c-format
-msgid "Fetch source %s\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:2693
-msgid "Failed to fetch some archives."
-msgstr ""
-
-#: cmdline/apt-get.cc:2724
-#, c-format
-msgid "Skipping unpack of already unpacked source in %s\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:2736
-#, c-format
-msgid "Unpack command '%s' failed.\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:2737
-#, c-format
-msgid "Check if the 'dpkg-dev' package is installed.\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:2759
-#, c-format
-msgid "Build command '%s' failed.\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:2779
-msgid "Child process failed"
-msgstr ""
-
-#: cmdline/apt-get.cc:2798
-msgid "Must specify at least one package to check builddeps for"
-msgstr ""
-
-#: cmdline/apt-get.cc:2823
-#, c-format
-msgid ""
-"No architecture information available for %s. See apt.conf(5) APT::"
-"Architectures for setup"
-msgstr ""
-
-#: cmdline/apt-get.cc:2847 cmdline/apt-get.cc:2850
-#, c-format
-msgid "Unable to get build-dependency information for %s"
-msgstr ""
-
-#: cmdline/apt-get.cc:2870
-#, c-format
-msgid "%s has no build depends.\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:3040
-#, c-format
-msgid ""
-"%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
-"packages"
-msgstr ""
-
-#: cmdline/apt-get.cc:3058
-#, c-format
-msgid ""
-"%s dependency for %s cannot be satisfied because the package %s cannot be "
-"found"
-msgstr ""
-
-#: cmdline/apt-get.cc:3081
-#, c-format
-msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new"
-msgstr ""
-
-#: cmdline/apt-get.cc:3120
-#, c-format
-msgid ""
-"%s dependency for %s cannot be satisfied because candidate version of "
-"package %s can't satisfy version requirements"
-msgstr ""
-
-#: cmdline/apt-get.cc:3126
-#, c-format
-msgid ""
-"%s dependency for %s cannot be satisfied because package %s has no candidate "
-"version"
-msgstr ""
-
-#: cmdline/apt-get.cc:3149
-#, c-format
-msgid "Failed to satisfy %s dependency for %s: %s"
-msgstr ""
-
-#: cmdline/apt-get.cc:3164
-#, c-format
-msgid "Build-dependencies for %s could not be satisfied."
-msgstr ""
-
-#: cmdline/apt-get.cc:3169
-msgid "Failed to process build dependencies"
-msgstr ""
-
-#: cmdline/apt-get.cc:3262 cmdline/apt-get.cc:3274
-#, c-format
-msgid "Changelog for %s (%s)"
-msgstr ""
-
-#: cmdline/apt-get.cc:3397
-msgid "Supported modules:"
-msgstr ""
-
-#: cmdline/apt-get.cc:3438
-msgid ""
-"Usage: apt-get [options] command\n"
-" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
-" apt-get [options] source pkg1 [pkg2 ...]\n"
-"\n"
-"apt-get is a simple command line interface for downloading and\n"
-"installing packages. The most frequently used commands are update\n"
-"and install.\n"
-"\n"
-"Commands:\n"
-" update - Retrieve new lists of packages\n"
-" upgrade - Perform an upgrade\n"
-" install - Install new packages (pkg is libc6 not libc6.deb)\n"
-" remove - Remove packages\n"
-" autoremove - Remove automatically all unused packages\n"
-" purge - Remove packages and config files\n"
-" source - Download source archives\n"
-" build-dep - Configure build-dependencies for source packages\n"
-" dist-upgrade - Distribution upgrade, see apt-get(8)\n"
-" dselect-upgrade - Follow dselect selections\n"
-" clean - Erase downloaded archive files\n"
-" autoclean - Erase old downloaded archive files\n"
-" check - Verify that there are no broken dependencies\n"
-" changelog - Download and display the changelog for the given package\n"
-" download - Download the binary package into the current directory\n"
-"\n"
-"Options:\n"
-" -h This help text.\n"
-" -q Loggable output - no progress indicator\n"
-" -qq No output except for errors\n"
-" -d Download only - do NOT install or unpack archives\n"
-" -s No-act. Perform ordering simulation\n"
-" -y Assume Yes to all queries and do not prompt\n"
-" -f Attempt to correct a system with broken dependencies in place\n"
-" -m Attempt to continue if archives are unlocatable\n"
-" -u Show a list of upgraded packages as well\n"
-" -b Build the source package after fetching it\n"
-" -V Show verbose version numbers\n"
-" -c=? Read this configuration file\n"
-" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
-"See the apt-get(8), sources.list(5) and apt.conf(5) manual\n"
-"pages for more information and options.\n"
-" This APT has Super Cow Powers.\n"
-msgstr ""
-
-#: cmdline/apt-get.cc:3603
-msgid ""
-"NOTE: This is only a simulation!\n"
-" apt-get needs root privileges for real execution.\n"
-" Keep also in mind that locking is deactivated,\n"
-" so don't depend on the relevance to the real current situation!"
-msgstr ""
-
-#: cmdline/acqprogress.cc:60
-msgid "Hit "
-msgstr ""
-
-#: cmdline/acqprogress.cc:84
-msgid "Get:"
-msgstr ""
-
-#: cmdline/acqprogress.cc:115
-msgid "Ign "
-msgstr ""
-
-#: cmdline/acqprogress.cc:119
-msgid "Err "
-msgstr ""
-
-#: cmdline/acqprogress.cc:140
-#, c-format
-msgid "Fetched %sB in %s (%sB/s)\n"
-msgstr ""
-
-#: cmdline/acqprogress.cc:230
-#, c-format
-msgid " [Working]"
-msgstr ""
-
-#: cmdline/acqprogress.cc:286
-#, c-format
-msgid ""
-"Media change: please insert the disc labeled\n"
-" '%s'\n"
-"in the drive '%s' and press enter\n"
-msgstr ""
-
-#: cmdline/apt-mark.cc:55
-#, c-format
-msgid "%s can not be marked as it is not installed.\n"
-msgstr ""
-
-#: cmdline/apt-mark.cc:61
-#, c-format
-msgid "%s was already set to manually installed.\n"
-msgstr ""
-
-#: cmdline/apt-mark.cc:63
-#, c-format
-msgid "%s was already set to automatically installed.\n"
-msgstr ""
-
-#: cmdline/apt-mark.cc:228
-#, c-format
-msgid "%s was already set on hold.\n"
-msgstr ""
-
-#: cmdline/apt-mark.cc:230
-#, c-format
-msgid "%s was already not hold.\n"
-msgstr ""
-
-#: cmdline/apt-mark.cc:245 cmdline/apt-mark.cc:326
-#: apt-pkg/contrib/fileutl.cc:832 apt-pkg/contrib/gpgv.cc:223
-#: apt-pkg/deb/dpkgpm.cc:1032
-#, c-format
-msgid "Waited for %s but it wasn't there"
-msgstr ""
-
-#: cmdline/apt-mark.cc:260 cmdline/apt-mark.cc:309
-#, c-format
-msgid "%s set on hold.\n"
-msgstr ""
-
-#: cmdline/apt-mark.cc:262 cmdline/apt-mark.cc:314
-#, c-format
-msgid "Canceled hold on %s.\n"
-msgstr ""
-
-#: cmdline/apt-mark.cc:332
-msgid "Executing dpkg failed. Are you root?"
-msgstr ""
-
-#: cmdline/apt-mark.cc:379
-msgid ""
-"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
-"\n"
-"apt-mark is a simple command line interface for marking packages\n"
-"as manually or automatically installed. It can also list marks.\n"
-"\n"
-"Commands:\n"
-" auto - Mark the given packages as automatically installed\n"
-" manual - Mark the given packages as manually installed\n"
-"\n"
-"Options:\n"
-" -h This help text.\n"
-" -q Loggable output - no progress indicator\n"
-" -qq No output except for errors\n"
-" -s No-act. Just prints what would be done.\n"
-" -f read/write auto/manual marking in the given file\n"
-" -c=? Read this configuration file\n"
-" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
-"See the apt-mark(8) and apt.conf(5) manual pages for more information."
-msgstr ""
-
-#: methods/cdrom.cc:203
-#, c-format
-msgid "Unable to read the cdrom database %s"
-msgstr ""
-
-#: methods/cdrom.cc:212
-msgid ""
-"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
-"cannot be used to add new CD-ROMs"
-msgstr ""
-
-#: methods/cdrom.cc:222
-msgid "Wrong CD-ROM"
-msgstr ""
-
-#: methods/cdrom.cc:249
-#, c-format
-msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
-msgstr ""
-
-#: methods/cdrom.cc:254
-msgid "Disk not found."
-msgstr ""
-
-#: methods/cdrom.cc:262 methods/file.cc:82 methods/rsh.cc:275
-msgid "File not found"
-msgstr ""
-
-#: methods/copy.cc:46 methods/gzip.cc:105 methods/gzip.cc:114
-#: methods/rred.cc:512 methods/rred.cc:521
-msgid "Failed to stat"
-msgstr ""
-
-#: methods/copy.cc:83 methods/gzip.cc:111 methods/rred.cc:518
-msgid "Failed to set modification time"
-msgstr ""
-
-#: methods/file.cc:47
-msgid "Invalid URI, local URIS must not start with //"
-msgstr ""
-
-#. Login must be before getpeername otherwise dante won't work.
-#: methods/ftp.cc:173
-msgid "Logging in"
-msgstr ""
-
-#: methods/ftp.cc:179
-msgid "Unable to determine the peer name"
-msgstr ""
-
-#: methods/ftp.cc:184
-msgid "Unable to determine the local name"
-msgstr ""
-
-#: methods/ftp.cc:215 methods/ftp.cc:243
-#, c-format
-msgid "The server refused the connection and said: %s"
-msgstr ""
-
-#: methods/ftp.cc:221
-#, c-format
-msgid "USER failed, server said: %s"
-msgstr ""
-
-#: methods/ftp.cc:228
-#, c-format
-msgid "PASS failed, server said: %s"
-msgstr ""
-
-#: methods/ftp.cc:248
-msgid ""
-"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
-"is empty."
-msgstr ""
-
-#: methods/ftp.cc:276
-#, c-format
-msgid "Login script command '%s' failed, server said: %s"
-msgstr ""
-
-#: methods/ftp.cc:302
-#, c-format
-msgid "TYPE failed, server said: %s"
-msgstr ""
-
-#: methods/ftp.cc:340 methods/ftp.cc:452 methods/rsh.cc:192 methods/rsh.cc:237
-msgid "Connection timeout"
-msgstr ""
-
-#: methods/ftp.cc:346
-msgid "Server closed the connection"
-msgstr ""
-
-#: methods/ftp.cc:349 methods/rsh.cc:199 apt-pkg/contrib/fileutl.cc:1264
-#: apt-pkg/contrib/fileutl.cc:1273 apt-pkg/contrib/fileutl.cc:1276
-msgid "Read error"
-msgstr ""
-
-#: methods/ftp.cc:356 methods/rsh.cc:206
-msgid "A response overflowed the buffer."
-msgstr ""
-
-#: methods/ftp.cc:373 methods/ftp.cc:385
-msgid "Protocol corruption"
-msgstr ""
-
-#: methods/ftp.cc:458 methods/rred.cc:238 methods/rsh.cc:243
-#: apt-pkg/contrib/fileutl.cc:1360 apt-pkg/contrib/fileutl.cc:1369
-#: apt-pkg/contrib/fileutl.cc:1372 apt-pkg/contrib/fileutl.cc:1397
-msgid "Write error"
-msgstr ""
-
-#: methods/ftp.cc:697 methods/ftp.cc:703 methods/ftp.cc:738
-msgid "Could not create a socket"
-msgstr ""
-
-#: methods/ftp.cc:708
-msgid "Could not connect data socket, connection timed out"
-msgstr ""
-
-#: methods/ftp.cc:714
-msgid "Could not connect passive socket."
-msgstr ""
-
-#: methods/ftp.cc:731
-msgid "getaddrinfo was unable to get a listening socket"
-msgstr ""
-
-#: methods/ftp.cc:745
-msgid "Could not bind a socket"
-msgstr ""
-
-#: methods/ftp.cc:749
-msgid "Could not listen on the socket"
-msgstr ""
-
-#: methods/ftp.cc:756
-msgid "Could not determine the socket's name"
-msgstr ""
-
-#: methods/ftp.cc:788
-msgid "Unable to send PORT command"
-msgstr ""
-
-#: methods/ftp.cc:798
-#, c-format
-msgid "Unknown address family %u (AF_*)"
-msgstr ""
-
-#: methods/ftp.cc:807
-#, c-format
-msgid "EPRT failed, server said: %s"
-msgstr ""
-
-#: methods/ftp.cc:827
-msgid "Data socket connect timed out"
-msgstr ""
-
-#: methods/ftp.cc:834
-msgid "Unable to accept connection"
-msgstr ""
-
-#: methods/ftp.cc:873 methods/http.cc:1038 methods/rsh.cc:313
-msgid "Problem hashing file"
-msgstr ""
-
-#: methods/ftp.cc:886
-#, c-format
-msgid "Unable to fetch file, server said '%s'"
-msgstr ""
-
-#: methods/ftp.cc:901 methods/rsh.cc:332
-msgid "Data socket timed out"
-msgstr ""
-
-#: methods/ftp.cc:931
-#, c-format
-msgid "Data transfer failed, server said '%s'"
-msgstr ""
-
-#. Get the files information
-#: methods/ftp.cc:1008
-msgid "Query"
-msgstr ""
-
-#: methods/ftp.cc:1120
-msgid "Unable to invoke "
-msgstr ""
-
-#: methods/connect.cc:76
-#, c-format
-msgid "Connecting to %s (%s)"
-msgstr ""
-
-#: methods/connect.cc:87
-#, c-format
-msgid "[IP: %s %s]"
-msgstr ""
-
-#: methods/connect.cc:94
-#, c-format
-msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
-msgstr ""
-
-#: methods/connect.cc:100
-#, c-format
-msgid "Cannot initiate the connection to %s:%s (%s)."
-msgstr ""
-
-#: methods/connect.cc:108
-#, c-format
-msgid "Could not connect to %s:%s (%s), connection timed out"
-msgstr ""
-
-#: methods/connect.cc:126
-#, c-format
-msgid "Could not connect to %s:%s (%s)."
-msgstr ""
-
-#. We say this mainly because the pause here is for the
-#. ssh connection that is still going
-#: methods/connect.cc:154 methods/rsh.cc:435
-#, c-format
-msgid "Connecting to %s"
-msgstr ""
-
-#: methods/connect.cc:180 methods/connect.cc:199
-#, c-format
-msgid "Could not resolve '%s'"
-msgstr ""
-
-#: methods/connect.cc:205
-#, c-format
-msgid "Temporary failure resolving '%s'"
-msgstr ""
-
-#: methods/connect.cc:209
-#, c-format
-msgid "System error resolving '%s:%s'"
-msgstr ""
-
-#: methods/connect.cc:211
-#, c-format
-msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
-msgstr ""
-
-#: methods/connect.cc:258
-#, c-format
-msgid "Unable to connect to %s:%s:"
-msgstr ""
-
-#: methods/gpgv.cc:167
-msgid ""
-"Internal error: Good signature, but could not determine key fingerprint?!"
-msgstr ""
-
-#: methods/gpgv.cc:171
-msgid "At least one invalid signature was encountered."
-msgstr ""
-
-#: methods/gpgv.cc:173
-msgid "Could not execute 'gpgv' to verify signature (is gpgv installed?)"
-msgstr ""
-
-#. TRANSLATORS: %s is a single techy word like 'NODATA'
-#: methods/gpgv.cc:179
-#, c-format
-msgid ""
-"Clearsigned file isn't valid, got '%s' (does the network require "
-"authentication?)"
-msgstr ""
-
-#: methods/gpgv.cc:183
-msgid "Unknown error executing gpgv"
-msgstr ""
-
-#: methods/gpgv.cc:216 methods/gpgv.cc:223
-msgid "The following signatures were invalid:\n"
-msgstr ""
-
-#: methods/gpgv.cc:230
-msgid ""
-"The following signatures couldn't be verified because the public key is not "
-"available:\n"
-msgstr ""
-
-#: methods/gzip.cc:65
-msgid "Empty files can't be valid archives"
-msgstr ""
-
-#: methods/http.cc:394
-msgid "Waiting for headers"
-msgstr ""
-
-#: methods/http.cc:544
-msgid "Bad header line"
-msgstr ""
-
-#: methods/http.cc:569 methods/http.cc:576
-msgid "The HTTP server sent an invalid reply header"
-msgstr ""
-
-#: methods/http.cc:606
-msgid "The HTTP server sent an invalid Content-Length header"
-msgstr ""
-
-#: methods/http.cc:621
-msgid "The HTTP server sent an invalid Content-Range header"
-msgstr ""
-
-#: methods/http.cc:623
-msgid "This HTTP server has broken range support"
-msgstr ""
-
-#: methods/http.cc:647
-msgid "Unknown date format"
-msgstr ""
-
-#: methods/http.cc:826
-msgid "Select failed"
-msgstr ""
-
-#: methods/http.cc:831
-msgid "Connection timed out"
-msgstr ""
-
-#: methods/http.cc:854
-msgid "Error writing to output file"
-msgstr ""
-
-#: methods/http.cc:885
-msgid "Error writing to file"
-msgstr ""
-
-#: methods/http.cc:913
-msgid "Error writing to the file"
-msgstr ""
-
-#: methods/http.cc:927
-msgid "Error reading from server. Remote end closed connection"
-msgstr ""
-
-#: methods/http.cc:929
-msgid "Error reading from server"
-msgstr ""
-
-#: methods/http.cc:1197
-msgid "Bad header data"
-msgstr ""
-
-#: methods/http.cc:1214 methods/http.cc:1269
-msgid "Connection failed"
-msgstr ""
-
-#: methods/http.cc:1361
-msgid "Internal error"
-msgstr ""
-
-#. Only warn if there are no sources.list.d.
-#. Only warn if there is no sources.list file.
-#: methods/mirror.cc:95 apt-inst/extract.cc:464
-#: apt-pkg/contrib/cdromutl.cc:184 apt-pkg/contrib/fileutl.cc:404
-#: apt-pkg/contrib/fileutl.cc:517 apt-pkg/sourcelist.cc:208
-#: apt-pkg/sourcelist.cc:214 apt-pkg/acquire.cc:485 apt-pkg/init.cc:108
-#: apt-pkg/init.cc:116 apt-pkg/clean.cc:36 apt-pkg/policy.cc:362
-#, c-format
-msgid "Unable to read %s"
-msgstr ""
-
-#: methods/mirror.cc:101 methods/mirror.cc:130 apt-pkg/contrib/cdromutl.cc:180
-#: apt-pkg/contrib/cdromutl.cc:214 apt-pkg/acquire.cc:491
-#: apt-pkg/acquire.cc:516 apt-pkg/clean.cc:42 apt-pkg/clean.cc:60
-#: apt-pkg/clean.cc:123
-#, c-format
-msgid "Unable to change to %s"
-msgstr ""
-
-#. FIXME: fallback to a default mirror here instead
-#. and provide a config option to define that default
-#: methods/mirror.cc:280
-#, c-format
-msgid "No mirror file '%s' found "
-msgstr ""
-
-#. FIXME: fallback to a default mirror here instead
-#. and provide a config option to define that default
-#: methods/mirror.cc:287
-#, c-format
-msgid "Can not read mirror file '%s'"
-msgstr ""
-
-#: methods/mirror.cc:315
-#, c-format
-msgid "No entry found in mirror file '%s'"
-msgstr ""
-
-#: methods/mirror.cc:445
-#, c-format
-msgid "[Mirror: %s]"
-msgstr ""
-
-#: methods/rred.cc:491
-#, c-format
-msgid ""
-"Could not patch %s with mmap and with file operation usage - the patch seems "
-"to be corrupt."
-msgstr ""
-
-#: methods/rred.cc:496
-#, c-format
-msgid ""
-"Could not patch %s with mmap (but no mmap specific fail) - the patch seems "
-"to be corrupt."
-msgstr ""
-
-#: methods/rsh.cc:99 ftparchive/multicompress.cc:168
-msgid "Failed to create IPC pipe to subprocess"
-msgstr ""
-
-#: methods/rsh.cc:340
-msgid "Connection closed prematurely"
-msgstr ""
-
-#: dselect/install:32
-msgid "Bad default setting!"
-msgstr ""
-
-#: dselect/install:51 dselect/install:83 dselect/install:87 dselect/install:94
-#: dselect/install:105 dselect/update:45
-msgid "Press enter to continue."
-msgstr ""
-
-#: dselect/install:91
-msgid "Do you want to erase any previously downloaded .deb files?"
-msgstr ""
-
-#: dselect/install:101
-msgid "Some errors occurred while unpacking. Packages that were installed"
-msgstr ""
-
-#: dselect/install:102
-msgid "will be configured. This may result in duplicate errors"
-msgstr ""
-
-#: dselect/install:103
-msgid "or errors caused by missing dependencies. This is OK, only the errors"
-msgstr ""
-
-#: dselect/install:104
-msgid ""
-"above this message are important. Please fix them and run [I]nstall again"
-msgstr ""
-
-#: dselect/update:30
-msgid "Merging available information"
-msgstr ""
-
-#: cmdline/apt-extracttemplates.cc:102
-#, c-format
-msgid "%s not a valid DEB package."
-msgstr ""
-
-#: cmdline/apt-extracttemplates.cc:236
-msgid ""
-"Usage: apt-extracttemplates file1 [file2 ...]\n"
-"\n"
-"apt-extracttemplates is a tool to extract config and template info\n"
-"from debian packages\n"
-"\n"
-"Options:\n"
-" -h This help text\n"
-" -t Set the temp dir\n"
-" -c=? Read this configuration file\n"
-" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
-msgstr ""
-
-#: cmdline/apt-extracttemplates.cc:271 apt-pkg/pkgcachegen.cc:1388
-#, c-format
-msgid "Unable to write to %s"
-msgstr ""
-
-#: cmdline/apt-extracttemplates.cc:313
-msgid "Cannot get debconf version. Is debconf installed?"
-msgstr ""
-
-#: ftparchive/apt-ftparchive.cc:171 ftparchive/apt-ftparchive.cc:349
-msgid "Package extension list is too long"
-msgstr ""
-
-#: ftparchive/apt-ftparchive.cc:173 ftparchive/apt-ftparchive.cc:190
-#: ftparchive/apt-ftparchive.cc:213 ftparchive/apt-ftparchive.cc:264
-#: ftparchive/apt-ftparchive.cc:278 ftparchive/apt-ftparchive.cc:300
-#, c-format
-msgid "Error processing directory %s"
-msgstr ""
-
-#: ftparchive/apt-ftparchive.cc:262
-msgid "Source extension list is too long"
-msgstr ""
-
-#: ftparchive/apt-ftparchive.cc:379
-msgid "Error writing header to contents file"
-msgstr ""
-
-#: ftparchive/apt-ftparchive.cc:409
-#, c-format
-msgid "Error processing contents %s"
-msgstr ""
-
-#: ftparchive/apt-ftparchive.cc:597
-msgid ""
-"Usage: apt-ftparchive [options] command\n"
-"Commands: packages binarypath [overridefile [pathprefix]]\n"
-" sources srcpath [overridefile [pathprefix]]\n"
-" contents path\n"
-" release path\n"
-" generate config [groups]\n"
-" clean config\n"
-"\n"
-"apt-ftparchive generates index files for Debian archives. It supports\n"
-"many styles of generation from fully automated to functional replacements\n"
-"for dpkg-scanpackages and dpkg-scansources\n"
-"\n"
-"apt-ftparchive generates Package files from a tree of .debs. The\n"
-"Package file contains the contents of all the control fields from\n"
-"each package as well as the MD5 hash and filesize. An override file\n"
-"is supported to force the value of Priority and Section.\n"
-"\n"
-"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
-"The --source-override option can be used to specify a src override file\n"
-"\n"
-"The 'packages' and 'sources' command should be run in the root of the\n"
-"tree. BinaryPath should point to the base of the recursive search and \n"
-"override file should contain the override flags. Pathprefix is\n"
-"appended to the filename fields if present. Example usage from the \n"
-"Debian archive:\n"
-" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
-" dists/potato/main/binary-i386/Packages\n"
-"\n"
-"Options:\n"
-" -h This help text\n"
-" --md5 Control MD5 generation\n"
-" -s=? Source override file\n"
-" -q Quiet\n"
-" -d=? Select the optional caching database\n"
-" --no-delink Enable delinking debug mode\n"
-" --contents Control contents file generation\n"
-" -c=? Read this configuration file\n"
-" -o=? Set an arbitrary configuration option"
-msgstr ""
-
-#: ftparchive/apt-ftparchive.cc:803
-msgid "No selections matched"
-msgstr ""
-
-#: ftparchive/apt-ftparchive.cc:881
-#, c-format
-msgid "Some files are missing in the package file group `%s'"
-msgstr ""
-
-#: ftparchive/cachedb.cc:47
-#, c-format
-msgid "DB was corrupted, file renamed to %s.old"
-msgstr ""
-
-#: ftparchive/cachedb.cc:65
-#, c-format
-msgid "DB is old, attempting to upgrade %s"
-msgstr ""
-
-#: ftparchive/cachedb.cc:76
-msgid ""
-"DB format is invalid. If you upgraded from an older version of apt, please "
-"remove and re-create the database."
-msgstr ""
-
-#: ftparchive/cachedb.cc:81
-#, c-format
-msgid "Unable to open DB file %s: %s"
-msgstr ""
-
-#: ftparchive/cachedb.cc:127 apt-inst/extract.cc:179 apt-inst/extract.cc:192
-#: apt-inst/extract.cc:209
-#, c-format
-msgid "Failed to stat %s"
-msgstr ""
-
-#: ftparchive/cachedb.cc:249
-msgid "Archive has no control record"
-msgstr ""
-
-#: ftparchive/cachedb.cc:490
-msgid "Unable to get a cursor"
-msgstr ""
-
-#: ftparchive/writer.cc:82
-#, c-format
-msgid "W: Unable to read directory %s\n"
-msgstr ""
-
-#: ftparchive/writer.cc:87
-#, c-format
-msgid "W: Unable to stat %s\n"
-msgstr ""
-
-#: ftparchive/writer.cc:143
-msgid "E: "
-msgstr ""
-
-#: ftparchive/writer.cc:145
-msgid "W: "
-msgstr ""
-
-#: ftparchive/writer.cc:152
-msgid "E: Errors apply to file "
-msgstr ""
-
-#: ftparchive/writer.cc:170 ftparchive/writer.cc:202
-#, c-format
-msgid "Failed to resolve %s"
-msgstr ""
-
-#: ftparchive/writer.cc:183
-msgid "Tree walking failed"
-msgstr ""
-
-#: ftparchive/writer.cc:210
-#, c-format
-msgid "Failed to open %s"
-msgstr ""
-
-#: ftparchive/writer.cc:269
-#, c-format
-msgid " DeLink %s [%s]\n"
-msgstr ""
-
-#: ftparchive/writer.cc:277
-#, c-format
-msgid "Failed to readlink %s"
-msgstr ""
-
-#: ftparchive/writer.cc:281
-#, c-format
-msgid "Failed to unlink %s"
-msgstr ""
-
-#: ftparchive/writer.cc:288
-#, c-format
-msgid "*** Failed to link %s to %s"
-msgstr ""
-
-#: ftparchive/writer.cc:298
-#, c-format
-msgid " DeLink limit of %sB hit.\n"
-msgstr ""
-
-#: ftparchive/writer.cc:403
-msgid "Archive had no package field"
-msgstr ""
-
-#: ftparchive/writer.cc:411 ftparchive/writer.cc:701
-#, c-format
-msgid " %s has no override entry\n"
-msgstr ""
-
-#: ftparchive/writer.cc:479 ftparchive/writer.cc:845
-#, c-format
-msgid " %s maintainer is %s not %s\n"
-msgstr ""
-
-#: ftparchive/writer.cc:711
-#, c-format
-msgid " %s has no source override entry\n"
-msgstr ""
-
-#: ftparchive/writer.cc:715
-#, c-format
-msgid " %s has no binary override entry either\n"
-msgstr ""
-
-#: ftparchive/contents.cc:341 ftparchive/contents.cc:372
-msgid "realloc - Failed to allocate memory"
-msgstr ""
-
-#: ftparchive/override.cc:35 ftparchive/override.cc:143
-#, c-format
-msgid "Unable to open %s"
-msgstr ""
-
-#: ftparchive/override.cc:61 ftparchive/override.cc:167
-#, c-format
-msgid "Malformed override %s line %llu #1"
-msgstr ""
-
-#: ftparchive/override.cc:75 ftparchive/override.cc:179
-#, c-format
-msgid "Malformed override %s line %llu #2"
-msgstr ""
-
-#: ftparchive/override.cc:89 ftparchive/override.cc:192
-#, c-format
-msgid "Malformed override %s line %llu #3"
-msgstr ""
-
-#: ftparchive/override.cc:128 ftparchive/override.cc:202
-#, c-format
-msgid "Failed to read the override file %s"
-msgstr ""
-
-#: ftparchive/multicompress.cc:70
-#, c-format
-msgid "Unknown compression algorithm '%s'"
-msgstr ""
-
-#: ftparchive/multicompress.cc:100
-#, c-format
-msgid "Compressed output %s needs a compression set"
-msgstr ""
-
-#: ftparchive/multicompress.cc:189
-msgid "Failed to create FILE*"
-msgstr ""
-
-#: ftparchive/multicompress.cc:192
-msgid "Failed to fork"
-msgstr ""
-
-#: ftparchive/multicompress.cc:206
-msgid "Compress child"
-msgstr ""
-
-#: ftparchive/multicompress.cc:229
-#, c-format
-msgid "Internal error, failed to create %s"
-msgstr ""
-
-#: ftparchive/multicompress.cc:304
-msgid "IO to subprocess/file failed"
-msgstr ""
-
-#: ftparchive/multicompress.cc:342
-msgid "Failed to read while computing MD5"
-msgstr ""
-
-#: ftparchive/multicompress.cc:358
-#, c-format
-msgid "Problem unlinking %s"
-msgstr ""
-
-#: ftparchive/multicompress.cc:373 apt-inst/extract.cc:187
-#, c-format
-msgid "Failed to rename %s to %s"
-msgstr ""
-
-#: cmdline/apt-internal-solver.cc:37
-msgid ""
-"Usage: apt-internal-solver\n"
-"\n"
-"apt-internal-solver is an interface to use the current internal\n"
-"like an external resolver for the APT family for debugging or alike\n"
-"\n"
-"Options:\n"
-" -h This help text.\n"
-" -q Loggable output - no progress indicator\n"
-" -c=? Read this configuration file\n"
-" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
-msgstr ""
-
-#: cmdline/apt-sortpkgs.cc:89
-msgid "Unknown package record!"
-msgstr ""
-
-#: cmdline/apt-sortpkgs.cc:153
-msgid ""
-"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
-"\n"
-"apt-sortpkgs is a simple tool to sort package files. The -s option is used\n"
-"to indicate what kind of file it is.\n"
-"\n"
-"Options:\n"
-" -h This help text\n"
-" -s Use source file sorting\n"
-" -c=? Read this configuration file\n"
-" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
-msgstr ""
-
-#: apt-inst/contrib/extracttar.cc:116
-msgid "Failed to create pipes"
-msgstr ""
-
-#: apt-inst/contrib/extracttar.cc:143
-msgid "Failed to exec gzip "
-msgstr ""
-
-#: apt-inst/contrib/extracttar.cc:180 apt-inst/contrib/extracttar.cc:210
-msgid "Corrupted archive"
-msgstr ""
-
-#: apt-inst/contrib/extracttar.cc:195
-msgid "Tar checksum failed, archive corrupted"
-msgstr ""
-
-#: apt-inst/contrib/extracttar.cc:302
-#, c-format
-msgid "Unknown TAR header type %u, member %s"
-msgstr ""
-
-#: apt-inst/contrib/arfile.cc:74
-msgid "Invalid archive signature"
-msgstr ""
-
-#: apt-inst/contrib/arfile.cc:82
-msgid "Error reading archive member header"
-msgstr ""
-
-#: apt-inst/contrib/arfile.cc:94
-#, c-format
-msgid "Invalid archive member header %s"
-msgstr ""
-
-#: apt-inst/contrib/arfile.cc:106
-msgid "Invalid archive member header"
-msgstr ""
-
-#: apt-inst/contrib/arfile.cc:135
-msgid "Archive is too short"
-msgstr ""
-
-#: apt-inst/contrib/arfile.cc:139
-msgid "Failed to read the archive headers"
-msgstr ""
-
-#: apt-inst/filelist.cc:382
-msgid "DropNode called on still linked node"
-msgstr ""
-
-#: apt-inst/filelist.cc:414
-msgid "Failed to locate the hash element!"
-msgstr ""
-
-#: apt-inst/filelist.cc:461
-msgid "Failed to allocate diversion"
-msgstr ""
-
-#: apt-inst/filelist.cc:466
-msgid "Internal error in AddDiversion"
-msgstr ""
-
-#: apt-inst/filelist.cc:479
-#, c-format
-msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
-msgstr ""
-
-#: apt-inst/filelist.cc:508
-#, c-format
-msgid "Double add of diversion %s -> %s"
-msgstr ""
-
-#: apt-inst/filelist.cc:551
-#, c-format
-msgid "Duplicate conf file %s/%s"
-msgstr ""
-
-#: apt-inst/dirstream.cc:43 apt-inst/dirstream.cc:50 apt-inst/dirstream.cc:55
-#, c-format
-msgid "Failed to write file %s"
-msgstr ""
-
-#: apt-inst/dirstream.cc:98 apt-inst/dirstream.cc:106
-#, c-format
-msgid "Failed to close file %s"
-msgstr ""
-
-#: apt-inst/extract.cc:94 apt-inst/extract.cc:165
-#, c-format
-msgid "The path %s is too long"
-msgstr ""
-
-#: apt-inst/extract.cc:125
-#, c-format
-msgid "Unpacking %s more than once"
-msgstr ""
-
-#: apt-inst/extract.cc:135
-#, c-format
-msgid "The directory %s is diverted"
-msgstr ""
-
-#: apt-inst/extract.cc:145
-#, c-format
-msgid "The package is trying to write to the diversion target %s/%s"
-msgstr ""
-
-#: apt-inst/extract.cc:155 apt-inst/extract.cc:299
-msgid "The diversion path is too long"
-msgstr ""
-
-#: apt-inst/extract.cc:242
-#, c-format
-msgid "The directory %s is being replaced by a non-directory"
-msgstr ""
-
-#: apt-inst/extract.cc:282
-msgid "Failed to locate node in its hash bucket"
-msgstr ""
-
-#: apt-inst/extract.cc:286
-msgid "The path is too long"
-msgstr ""
-
-#: apt-inst/extract.cc:414
-#, c-format
-msgid "Overwrite package match with no version for %s"
-msgstr ""
-
-#: apt-inst/extract.cc:431
-#, c-format
-msgid "File %s/%s overwrites the one in the package %s"
-msgstr ""
-
-#: apt-inst/extract.cc:491
-#, c-format
-msgid "Unable to stat %s"
-msgstr ""
-
-#: apt-inst/deb/debfile.cc:41 apt-inst/deb/debfile.cc:46
-#, c-format
-msgid "This is not a valid DEB archive, missing '%s' member"
-msgstr ""
-
-#. FIXME: add data.tar.xz here - adding it now would require a Translation round for a very small gain
-#: apt-inst/deb/debfile.cc:55
-#, c-format
-msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
-msgstr ""
-
-#: apt-inst/deb/debfile.cc:120
-#, c-format
-msgid "Internal error, could not locate member %s"
-msgstr ""
-
-#: apt-inst/deb/debfile.cc:214
-msgid "Unparsable control file"
-msgstr ""
-
-#: apt-pkg/contrib/mmap.cc:79
-msgid "Can't mmap an empty file"
-msgstr ""
-
-#: apt-pkg/contrib/mmap.cc:111
-#, c-format
-msgid "Couldn't duplicate file descriptor %i"
-msgstr ""
-
-#: apt-pkg/contrib/mmap.cc:119
-#, c-format
-msgid "Couldn't make mmap of %llu bytes"
-msgstr ""
-
-#: apt-pkg/contrib/mmap.cc:146
-msgid "Unable to close mmap"
-msgstr ""
-
-#: apt-pkg/contrib/mmap.cc:174 apt-pkg/contrib/mmap.cc:202
-msgid "Unable to synchronize mmap"
-msgstr ""
-
-#: apt-pkg/contrib/mmap.cc:290
-#, c-format
-msgid "Couldn't make mmap of %lu bytes"
-msgstr ""
-
-#: apt-pkg/contrib/mmap.cc:322
-msgid "Failed to truncate file"
-msgstr ""
-
-#: apt-pkg/contrib/mmap.cc:341
-#, c-format
-msgid ""
-"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
-"Current value: %lu. (man 5 apt.conf)"
-msgstr ""
-
-#: apt-pkg/contrib/mmap.cc:440
-#, c-format
-msgid ""
-"Unable to increase the size of the MMap as the limit of %lu bytes is already "
-"reached."
-msgstr ""
-
-#: apt-pkg/contrib/mmap.cc:443
-msgid ""
-"Unable to increase size of the MMap as automatic growing is disabled by user."
-msgstr ""
-
-#. d means days, h means hours, min means minutes, s means seconds
-#: apt-pkg/contrib/strutl.cc:378
-#, c-format
-msgid "%lid %lih %limin %lis"
-msgstr ""
-
-#. h means hours, min means minutes, s means seconds
-#: apt-pkg/contrib/strutl.cc:385
-#, c-format
-msgid "%lih %limin %lis"
-msgstr ""
-
-#. min means minutes, s means seconds
-#: apt-pkg/contrib/strutl.cc:392
-#, c-format
-msgid "%limin %lis"
-msgstr ""
-
-#. s means seconds
-#: apt-pkg/contrib/strutl.cc:397
-#, c-format
-msgid "%lis"
-msgstr ""
-
-#: apt-pkg/contrib/strutl.cc:1173
-#, c-format
-msgid "Selection %s not found"
-msgstr ""
-
-#: apt-pkg/contrib/configuration.cc:491
-#, c-format
-msgid "Unrecognized type abbreviation: '%c'"
-msgstr ""
-
-#: apt-pkg/contrib/configuration.cc:605
-#, c-format
-msgid "Opening configuration file %s"
-msgstr ""
-
-#: apt-pkg/contrib/configuration.cc:773
-#, c-format
-msgid "Syntax error %s:%u: Block starts with no name."
-msgstr ""
-
-#: apt-pkg/contrib/configuration.cc:792
-#, c-format
-msgid "Syntax error %s:%u: Malformed tag"
-msgstr ""
-
-#: apt-pkg/contrib/configuration.cc:809
-#, c-format
-msgid "Syntax error %s:%u: Extra junk after value"
-msgstr ""
-
-#: apt-pkg/contrib/configuration.cc:849
-#, c-format
-msgid "Syntax error %s:%u: Directives can only be done at the top level"
-msgstr ""
-
-#: apt-pkg/contrib/configuration.cc:856
-#, c-format
-msgid "Syntax error %s:%u: Too many nested includes"
-msgstr ""
-
-#: apt-pkg/contrib/configuration.cc:860 apt-pkg/contrib/configuration.cc:865
-#, c-format
-msgid "Syntax error %s:%u: Included from here"
-msgstr ""
-
-#: apt-pkg/contrib/configuration.cc:869
-#, c-format
-msgid "Syntax error %s:%u: Unsupported directive '%s'"
-msgstr ""
-
-#: apt-pkg/contrib/configuration.cc:872
-#, c-format
-msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
-msgstr ""
-
-#: apt-pkg/contrib/configuration.cc:922
-#, c-format
-msgid "Syntax error %s:%u: Extra junk at end of file"
-msgstr ""
-
-#: apt-pkg/contrib/progress.cc:146
-#, c-format
-msgid "%c%s... Error!"
-msgstr ""
-
-#: apt-pkg/contrib/progress.cc:148
-#, c-format
-msgid "%c%s... Done"
-msgstr ""
-
-#: apt-pkg/contrib/progress.cc:179
-msgid "..."
-msgstr ""
-
-#. Print the spinner
-#: apt-pkg/contrib/progress.cc:195
-#, c-format
-msgid "%c%s... %u%%"
-msgstr ""
-
-#: apt-pkg/contrib/cmndline.cc:80
-#, c-format
-msgid "Command line option '%c' [from %s] is not known."
-msgstr ""
-
-#: apt-pkg/contrib/cmndline.cc:105 apt-pkg/contrib/cmndline.cc:114
-#: apt-pkg/contrib/cmndline.cc:122
-#, c-format
-msgid "Command line option %s is not understood"
-msgstr ""
-
-#: apt-pkg/contrib/cmndline.cc:127
-#, c-format
-msgid "Command line option %s is not boolean"
-msgstr ""
-
-#: apt-pkg/contrib/cmndline.cc:168 apt-pkg/contrib/cmndline.cc:189
-#, c-format
-msgid "Option %s requires an argument."
-msgstr ""
-
-#: apt-pkg/contrib/cmndline.cc:202 apt-pkg/contrib/cmndline.cc:208
-#, c-format
-msgid "Option %s: Configuration item specification must have an =<val>."
-msgstr ""
-
-#: apt-pkg/contrib/cmndline.cc:237
-#, c-format
-msgid "Option %s requires an integer argument, not '%s'"
-msgstr ""
-
-#: apt-pkg/contrib/cmndline.cc:268
-#, c-format
-msgid "Option '%s' is too long"
-msgstr ""
-
-#: apt-pkg/contrib/cmndline.cc:300
-#, c-format
-msgid "Sense %s is not understood, try true or false."
-msgstr ""
-
-#: apt-pkg/contrib/cmndline.cc:350
-#, c-format
-msgid "Invalid operation %s"
-msgstr ""
-
-#: apt-pkg/contrib/cdromutl.cc:56
-#, c-format
-msgid "Unable to stat the mount point %s"
-msgstr ""
-
-#: apt-pkg/contrib/cdromutl.cc:225
-msgid "Failed to stat the cdrom"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:93
-#, c-format
-msgid "Problem closing the gzip file %s"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:226
-#, c-format
-msgid "Not using locking for read only lock file %s"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:231
-#, c-format
-msgid "Could not open lock file %s"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:254
-#, c-format
-msgid "Not using locking for nfs mounted lock file %s"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:259
-#, c-format
-msgid "Could not get lock %s"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:396 apt-pkg/contrib/fileutl.cc:510
-#, c-format
-msgid "List of files can't be created as '%s' is not a directory"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:430
-#, c-format
-msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:448
-#, c-format
-msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:457
-#, c-format
-msgid ""
-"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:844
-#, c-format
-msgid "Sub-process %s received a segmentation fault."
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:846
-#, c-format
-msgid "Sub-process %s received signal %u."
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:850 apt-pkg/contrib/gpgv.cc:243
-#, c-format
-msgid "Sub-process %s returned an error code (%u)"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:852 apt-pkg/contrib/gpgv.cc:236
-#, c-format
-msgid "Sub-process %s exited unexpectedly"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:988
-#, c-format
-msgid "Could not open file %s"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:1065
-#, c-format
-msgid "Could not open file descriptor %d"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:1150
-msgid "Failed to create subprocess IPC"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:1205
-msgid "Failed to exec compressor "
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:1298
-#, c-format
-msgid "read, still have %llu to read but none left"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:1385 apt-pkg/contrib/fileutl.cc:1407
-#, c-format
-msgid "write, still have %llu to write but couldn't"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:1695
-#, c-format
-msgid "Problem closing the file %s"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:1707
-#, c-format
-msgid "Problem renaming the file %s to %s"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:1718
-#, c-format
-msgid "Problem unlinking the file %s"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:1731
-msgid "Problem syncing the file"
-msgstr ""
-
-#. TRANSLATOR: %s is the trusted keyring parts directory
-#: apt-pkg/contrib/gpgv.cc:76
-#, c-format
-msgid "No keyring installed in %s."
-msgstr ""
-
-#: apt-pkg/pkgcache.cc:148
-msgid "Empty package cache"
-msgstr ""
-
-#: apt-pkg/pkgcache.cc:154
-msgid "The package cache file is corrupted"
-msgstr ""
-
-#: apt-pkg/pkgcache.cc:159
-msgid "The package cache file is an incompatible version"
-msgstr ""
-
-#: apt-pkg/pkgcache.cc:162
-msgid "The package cache file is corrupted, it is too small"
-msgstr ""
-
-#: apt-pkg/pkgcache.cc:167
-#, c-format
-msgid "This APT does not support the versioning system '%s'"
-msgstr ""
-
-#: apt-pkg/pkgcache.cc:172
-msgid "The package cache was built for a different architecture"
-msgstr ""
-
-#: apt-pkg/pkgcache.cc:314
-msgid "Depends"
-msgstr ""
-
-#: apt-pkg/pkgcache.cc:314
-msgid "PreDepends"
-msgstr ""
-
-#: apt-pkg/pkgcache.cc:314
-msgid "Suggests"
-msgstr ""
-
-#: apt-pkg/pkgcache.cc:315
-msgid "Recommends"
-msgstr ""
-
-#: apt-pkg/pkgcache.cc:315
-msgid "Conflicts"
-msgstr ""
-
-#: apt-pkg/pkgcache.cc:315
-msgid "Replaces"
-msgstr ""
-
-#: apt-pkg/pkgcache.cc:316
-msgid "Obsoletes"
-msgstr ""
-
-#: apt-pkg/pkgcache.cc:316
-msgid "Breaks"
-msgstr ""
-
-#: apt-pkg/pkgcache.cc:316
-msgid "Enhances"
-msgstr ""
-
-#: apt-pkg/pkgcache.cc:327
-msgid "important"
-msgstr ""
-
-#: apt-pkg/pkgcache.cc:327
-msgid "required"
-msgstr ""
-
-#: apt-pkg/pkgcache.cc:327
-msgid "standard"
-msgstr ""
-
-#: apt-pkg/pkgcache.cc:328
-msgid "optional"
-msgstr ""
-
-#: apt-pkg/pkgcache.cc:328
-msgid "extra"
-msgstr ""
-
-#: apt-pkg/depcache.cc:132 apt-pkg/depcache.cc:161
-msgid "Building dependency tree"
-msgstr ""
-
-#: apt-pkg/depcache.cc:133
-msgid "Candidate versions"
-msgstr ""
-
-#: apt-pkg/depcache.cc:162
-msgid "Dependency generation"
-msgstr ""
-
-#: apt-pkg/depcache.cc:182 apt-pkg/depcache.cc:215 apt-pkg/depcache.cc:219
-msgid "Reading state information"
-msgstr ""
-
-#: apt-pkg/depcache.cc:244
-#, c-format
-msgid "Failed to open StateFile %s"
-msgstr ""
-
-#: apt-pkg/depcache.cc:250
-#, c-format
-msgid "Failed to write temporary StateFile %s"
-msgstr ""
-
-#: apt-pkg/tagfile.cc:129
-#, c-format
-msgid "Unable to parse package file %s (1)"
-msgstr ""
-
-#: apt-pkg/tagfile.cc:216
-#, c-format
-msgid "Unable to parse package file %s (2)"
-msgstr ""
-
-#: apt-pkg/sourcelist.cc:96
-#, c-format
-msgid "Malformed line %lu in source list %s ([option] unparseable)"
-msgstr ""
-
-#: apt-pkg/sourcelist.cc:99
-#, c-format
-msgid "Malformed line %lu in source list %s ([option] too short)"
-msgstr ""
-
-#: apt-pkg/sourcelist.cc:110
-#, c-format
-msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
-msgstr ""
-
-#: apt-pkg/sourcelist.cc:116
-#, c-format
-msgid "Malformed line %lu in source list %s ([%s] has no key)"
-msgstr ""
-
-#: apt-pkg/sourcelist.cc:119
-#, c-format
-msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
-msgstr ""
-
-#: apt-pkg/sourcelist.cc:132
-#, c-format
-msgid "Malformed line %lu in source list %s (URI)"
-msgstr ""
-
-#: apt-pkg/sourcelist.cc:134
-#, c-format
-msgid "Malformed line %lu in source list %s (dist)"
-msgstr ""
-
-#: apt-pkg/sourcelist.cc:137
-#, c-format
-msgid "Malformed line %lu in source list %s (URI parse)"
-msgstr ""
-
-#: apt-pkg/sourcelist.cc:143
-#, c-format
-msgid "Malformed line %lu in source list %s (absolute dist)"
-msgstr ""
-
-#: apt-pkg/sourcelist.cc:150
-#, c-format
-msgid "Malformed line %lu in source list %s (dist parse)"
-msgstr ""
-
-#: apt-pkg/sourcelist.cc:248
-#, c-format
-msgid "Opening %s"
-msgstr ""
-
-#: apt-pkg/sourcelist.cc:265 apt-pkg/cdrom.cc:495
-#, c-format
-msgid "Line %u too long in source list %s."
-msgstr ""
-
-#: apt-pkg/sourcelist.cc:289
-#, c-format
-msgid "Malformed line %u in source list %s (type)"
-msgstr ""
-
-#: apt-pkg/sourcelist.cc:293
-#, c-format
-msgid "Type '%s' is not known on line %u in source list %s"
-msgstr ""
-
-#: apt-pkg/packagemanager.cc:297 apt-pkg/packagemanager.cc:923
-#, c-format
-msgid ""
-"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
-"under APT::Immediate-Configure for details. (%d)"
-msgstr ""
-
-#: apt-pkg/packagemanager.cc:498 apt-pkg/packagemanager.cc:529
-#, c-format
-msgid "Could not configure '%s'. "
-msgstr ""
-
-#: apt-pkg/packagemanager.cc:571
-#, c-format
-msgid ""
-"This installation run will require temporarily removing the essential "
-"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
-"you really want to do it, activate the APT::Force-LoopBreak option."
-msgstr ""
-
-#: apt-pkg/pkgrecords.cc:34
-#, c-format
-msgid "Index file type '%s' is not supported"
-msgstr ""
-
-#: apt-pkg/algorithms.cc:266
-#, c-format
-msgid ""
-"The package %s needs to be reinstalled, but I can't find an archive for it."
-msgstr ""
-
-#: apt-pkg/algorithms.cc:1238
-msgid ""
-"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
-"held packages."
-msgstr ""
-
-#: apt-pkg/algorithms.cc:1240
-msgid "Unable to correct problems, you have held broken packages."
-msgstr ""
-
-#: apt-pkg/algorithms.cc:1592 apt-pkg/algorithms.cc:1594
-msgid ""
-"Some index files failed to download. They have been ignored, or old ones "
-"used instead."
-msgstr ""
-
-#: apt-pkg/acquire.cc:81 apt-pkg/cdrom.cc:838
-#, c-format
-msgid "List directory %spartial is missing."
-msgstr ""
-
-#: apt-pkg/acquire.cc:85
-#, c-format
-msgid "Archives directory %spartial is missing."
-msgstr ""
-
-#: apt-pkg/acquire.cc:93
-#, c-format
-msgid "Unable to lock directory %s"
-msgstr ""
-
-#. only show the ETA if it makes sense
-#. two days
-#: apt-pkg/acquire.cc:893
-#, c-format
-msgid "Retrieving file %li of %li (%s remaining)"
-msgstr ""
-
-#: apt-pkg/acquire.cc:895
-#, c-format
-msgid "Retrieving file %li of %li"
-msgstr ""
-
-#: apt-pkg/acquire-worker.cc:112
-#, c-format
-msgid "The method driver %s could not be found."
-msgstr ""
-
-#: apt-pkg/acquire-worker.cc:161
-#, c-format
-msgid "Method %s did not start correctly"
-msgstr ""
-
-#: apt-pkg/acquire-worker.cc:447
-#, c-format
-msgid "Please insert the disc labeled: '%s' in the drive '%s' and press enter."
-msgstr ""
-
-#: apt-pkg/init.cc:151
-#, c-format
-msgid "Packaging system '%s' is not supported"
-msgstr ""
-
-#: apt-pkg/init.cc:167
-msgid "Unable to determine a suitable packaging system type"
-msgstr ""
-
-#: apt-pkg/clean.cc:57
-#, c-format
-msgid "Unable to stat %s."
-msgstr ""
-
-#: apt-pkg/srcrecords.cc:47
-msgid "You must put some 'source' URIs in your sources.list"
-msgstr ""
-
-#: apt-pkg/cachefile.cc:87
-msgid "The package lists or status file could not be parsed or opened."
-msgstr ""
-
-#: apt-pkg/cachefile.cc:91
-msgid "You may want to run apt-get update to correct these problems"
-msgstr ""
-
-#: apt-pkg/cachefile.cc:109
-msgid "The list of sources could not be read."
-msgstr ""
-
-#: apt-pkg/policy.cc:75
-#, c-format
-msgid ""
-"The value '%s' is invalid for APT::Default-Release as such a release is not "
-"available in the sources"
-msgstr ""
-
-#: apt-pkg/policy.cc:399
-#, c-format
-msgid "Invalid record in the preferences file %s, no Package header"
-msgstr ""
-
-#: apt-pkg/policy.cc:421
-#, c-format
-msgid "Did not understand pin type %s"
-msgstr ""
-
-#: apt-pkg/policy.cc:429
-msgid "No priority (or zero) specified for pin"
-msgstr ""
-
-#: apt-pkg/pkgcachegen.cc:87
-msgid "Cache has an incompatible versioning system"
-msgstr ""
-
-#. TRANSLATOR: The first placeholder is a package name,
-#. the other two should be copied verbatim as they include debug info
-#: apt-pkg/pkgcachegen.cc:218 apt-pkg/pkgcachegen.cc:228
-#: apt-pkg/pkgcachegen.cc:294 apt-pkg/pkgcachegen.cc:321
-#: apt-pkg/pkgcachegen.cc:334 apt-pkg/pkgcachegen.cc:376
-#: apt-pkg/pkgcachegen.cc:380 apt-pkg/pkgcachegen.cc:397
-#: apt-pkg/pkgcachegen.cc:405 apt-pkg/pkgcachegen.cc:409
-#: apt-pkg/pkgcachegen.cc:413 apt-pkg/pkgcachegen.cc:434
-#: apt-pkg/pkgcachegen.cc:473 apt-pkg/pkgcachegen.cc:511
-#: apt-pkg/pkgcachegen.cc:518 apt-pkg/pkgcachegen.cc:549
-#: apt-pkg/pkgcachegen.cc:563
-#, c-format
-msgid "Error occurred while processing %s (%s%d)"
-msgstr ""
-
-#: apt-pkg/pkgcachegen.cc:251
-msgid "Wow, you exceeded the number of package names this APT is capable of."
-msgstr ""
-
-#: apt-pkg/pkgcachegen.cc:254
-msgid "Wow, you exceeded the number of versions this APT is capable of."
-msgstr ""
-
-#: apt-pkg/pkgcachegen.cc:257
-msgid "Wow, you exceeded the number of descriptions this APT is capable of."
-msgstr ""
-
-#: apt-pkg/pkgcachegen.cc:260
-msgid "Wow, you exceeded the number of dependencies this APT is capable of."
-msgstr ""
-
-#: apt-pkg/pkgcachegen.cc:570
-#, c-format
-msgid "Package %s %s was not found while processing file dependencies"
-msgstr ""
-
-#: apt-pkg/pkgcachegen.cc:1199
-#, c-format
-msgid "Couldn't stat source package list %s"
-msgstr ""
-
-#: apt-pkg/pkgcachegen.cc:1287 apt-pkg/pkgcachegen.cc:1391
-#: apt-pkg/pkgcachegen.cc:1397 apt-pkg/pkgcachegen.cc:1554
-msgid "Reading package lists"
-msgstr ""
-
-#: apt-pkg/pkgcachegen.cc:1304
-msgid "Collecting File Provides"
-msgstr ""
-
-#: apt-pkg/pkgcachegen.cc:1496 apt-pkg/pkgcachegen.cc:1503
-msgid "IO Error saving source cache"
-msgstr ""
-
-#: apt-pkg/acquire-item.cc:139
-#, c-format
-msgid "rename failed, %s (%s -> %s)."
-msgstr ""
-
-#: apt-pkg/acquire-item.cc:599
-msgid "MD5Sum mismatch"
-msgstr ""
-
-#: apt-pkg/acquire-item.cc:870 apt-pkg/acquire-item.cc:1887
-#: apt-pkg/acquire-item.cc:2030
-msgid "Hash Sum mismatch"
-msgstr ""
-
-#: apt-pkg/acquire-item.cc:1388
-#, c-format
-msgid ""
-"Unable to find expected entry '%s' in Release file (Wrong sources.list entry "
-"or malformed file)"
-msgstr ""
-
-#: apt-pkg/acquire-item.cc:1404
-#, c-format
-msgid "Unable to find hash sum for '%s' in Release file"
-msgstr ""
-
-#: apt-pkg/acquire-item.cc:1446
-msgid "There is no public key available for the following key IDs:\n"
-msgstr ""
-
-#: apt-pkg/acquire-item.cc:1484
-#, c-format
-msgid ""
-"Release file for %s is expired (invalid since %s). Updates for this "
-"repository will not be applied."
-msgstr ""
-
-#: apt-pkg/acquire-item.cc:1506
-#, c-format
-msgid "Conflicting distribution: %s (expected %s but got %s)"
-msgstr ""
-
-#: apt-pkg/acquire-item.cc:1536
-#, c-format
-msgid ""
-"An error occurred during the signature verification. The repository is not "
-"updated and the previous index files will be used. GPG error: %s: %s\n"
-msgstr ""
-
-#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
-#: apt-pkg/acquire-item.cc:1546 apt-pkg/acquire-item.cc:1551
-#, c-format
-msgid "GPG error: %s: %s"
-msgstr ""
-
-#: apt-pkg/acquire-item.cc:1663
-#, c-format
-msgid ""
-"I wasn't able to locate a file for the %s package. This might mean you need "
-"to manually fix this package. (due to missing arch)"
-msgstr ""
-
-#: apt-pkg/acquire-item.cc:1722
-#, c-format
-msgid ""
-"I wasn't able to locate a file for the %s package. This might mean you need "
-"to manually fix this package."
-msgstr ""
-
-#: apt-pkg/acquire-item.cc:1781
-#, c-format
-msgid ""
-"The package index files are corrupted. No Filename: field for package %s."
-msgstr ""
-
-#: apt-pkg/acquire-item.cc:1879
-msgid "Size mismatch"
-msgstr ""
-
-#: apt-pkg/indexrecords.cc:68
-#, c-format
-msgid "Unable to parse Release file %s"
-msgstr ""
-
-#: apt-pkg/indexrecords.cc:78
-#, c-format
-msgid "No sections in Release file %s"
-msgstr ""
-
-#: apt-pkg/indexrecords.cc:112
-#, c-format
-msgid "No Hash entry in Release file %s"
-msgstr ""
-
-#: apt-pkg/indexrecords.cc:125
-#, c-format
-msgid "Invalid 'Valid-Until' entry in Release file %s"
-msgstr ""
-
-#: apt-pkg/indexrecords.cc:144
-#, c-format
-msgid "Invalid 'Date' entry in Release file %s"
-msgstr ""
-
-#: apt-pkg/vendorlist.cc:78
-#, c-format
-msgid "Vendor block %s contains no fingerprint"
-msgstr ""
-
-#: apt-pkg/cdrom.cc:576
-#, c-format
-msgid ""
-"Using CD-ROM mount point %s\n"
-"Mounting CD-ROM\n"
-msgstr ""
-
-#: apt-pkg/cdrom.cc:585 apt-pkg/cdrom.cc:682
-msgid "Identifying.. "
-msgstr ""
-
-#: apt-pkg/cdrom.cc:613
-#, c-format
-msgid "Stored label: %s\n"
-msgstr ""
-
-#: apt-pkg/cdrom.cc:622 apt-pkg/cdrom.cc:915
-msgid "Unmounting CD-ROM...\n"
-msgstr ""
-
-#: apt-pkg/cdrom.cc:642
-#, c-format
-msgid "Using CD-ROM mount point %s\n"
-msgstr ""
-
-#: apt-pkg/cdrom.cc:660
-msgid "Unmounting CD-ROM\n"
-msgstr ""
-
-#: apt-pkg/cdrom.cc:665
-msgid "Waiting for disc...\n"
-msgstr ""
-
-#: apt-pkg/cdrom.cc:674
-msgid "Mounting CD-ROM...\n"
-msgstr ""
-
-#: apt-pkg/cdrom.cc:693
-msgid "Scanning disc for index files..\n"
-msgstr ""
-
-#: apt-pkg/cdrom.cc:744
-#, c-format
-msgid ""
-"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
-"%zu signatures\n"
-msgstr ""
-
-#: apt-pkg/cdrom.cc:755
-msgid ""
-"Unable to locate any package files, perhaps this is not a Debian Disc or the "
-"wrong architecture?"
-msgstr ""
-
-#: apt-pkg/cdrom.cc:782
-#, c-format
-msgid "Found label '%s'\n"
-msgstr ""
-
-#: apt-pkg/cdrom.cc:811
-msgid "That is not a valid name, try again.\n"
-msgstr ""
-
-#: apt-pkg/cdrom.cc:828
-#, c-format
-msgid ""
-"This disc is called: \n"
-"'%s'\n"
-msgstr ""
-
-#: apt-pkg/cdrom.cc:830
-msgid "Copying package lists..."
-msgstr ""
-
-#: apt-pkg/cdrom.cc:865
-msgid "Writing new source list\n"
-msgstr ""
-
-#: apt-pkg/cdrom.cc:873
-msgid "Source list entries for this disc are:\n"
-msgstr ""
-
-#: apt-pkg/indexcopy.cc:236 apt-pkg/indexcopy.cc:775
-#, c-format
-msgid "Wrote %i records.\n"
-msgstr ""
-
-#: apt-pkg/indexcopy.cc:238 apt-pkg/indexcopy.cc:777
-#, c-format
-msgid "Wrote %i records with %i missing files.\n"
-msgstr ""
-
-#: apt-pkg/indexcopy.cc:241 apt-pkg/indexcopy.cc:780
-#, c-format
-msgid "Wrote %i records with %i mismatched files\n"
-msgstr ""
-
-#: apt-pkg/indexcopy.cc:244 apt-pkg/indexcopy.cc:783
-#, c-format
-msgid "Wrote %i records with %i missing files and %i mismatched files\n"
-msgstr ""
-
-#: apt-pkg/indexcopy.cc:515
-#, c-format
-msgid "Can't find authentication record for: %s"
-msgstr ""
-
-#: apt-pkg/indexcopy.cc:521
-#, c-format
-msgid "Hash mismatch for: %s"
-msgstr ""
-
-#: apt-pkg/cacheset.cc:403
-#, c-format
-msgid "Release '%s' for '%s' was not found"
-msgstr ""
-
-#: apt-pkg/cacheset.cc:406
-#, c-format
-msgid "Version '%s' for '%s' was not found"
-msgstr ""
-
-#: apt-pkg/cacheset.cc:517
-#, c-format
-msgid "Couldn't find task '%s'"
-msgstr ""
-
-#: apt-pkg/cacheset.cc:523
-#, c-format
-msgid "Couldn't find any package by regex '%s'"
-msgstr ""
-
-#: apt-pkg/cacheset.cc:534
-#, c-format
-msgid "Can't select versions from package '%s' as it is purely virtual"
-msgstr ""
-
-#: apt-pkg/cacheset.cc:541 apt-pkg/cacheset.cc:548
-#, c-format
-msgid ""
-"Can't select installed nor candidate version from package '%s' as it has "
-"neither of them"
-msgstr ""
-
-#: apt-pkg/cacheset.cc:555
-#, c-format
-msgid "Can't select newest version from package '%s' as it is purely virtual"
-msgstr ""
-
-#: apt-pkg/cacheset.cc:563
-#, c-format
-msgid "Can't select candidate version from package %s as it has no candidate"
-msgstr ""
-
-#: apt-pkg/cacheset.cc:571
-#, c-format
-msgid "Can't select installed version from package %s as it is not installed"
-msgstr ""
-
-#: apt-pkg/edsp.cc:41 apt-pkg/edsp.cc:61
-msgid "Send scenario to solver"
-msgstr ""
-
-#: apt-pkg/edsp.cc:209
-msgid "Send request to solver"
-msgstr ""
-
-#: apt-pkg/edsp.cc:279
-msgid "Prepare for receiving solution"
-msgstr ""
-
-#: apt-pkg/edsp.cc:286
-msgid "External solver failed without a proper error message"
-msgstr ""
-
-#: apt-pkg/edsp.cc:556 apt-pkg/edsp.cc:559 apt-pkg/edsp.cc:564
-msgid "Execute external solver"
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:73
-#, c-format
-msgid "Installing %s"
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:74 apt-pkg/deb/dpkgpm.cc:982
-#, c-format
-msgid "Configuring %s"
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:75 apt-pkg/deb/dpkgpm.cc:989
-#, c-format
-msgid "Removing %s"
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:76
-#, c-format
-msgid "Completely removing %s"
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:77
-#, c-format
-msgid "Noting disappearance of %s"
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:78
-#, c-format
-msgid "Running post-installation trigger %s"
-msgstr ""
-
-#. FIXME: use a better string after freeze
-#: apt-pkg/deb/dpkgpm.cc:735
-#, c-format
-msgid "Directory '%s' missing"
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:750 apt-pkg/deb/dpkgpm.cc:770
-#, c-format
-msgid "Could not open file '%s'"
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:975
-#, c-format
-msgid "Preparing %s"
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:976
-#, c-format
-msgid "Unpacking %s"
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:981
-#, c-format
-msgid "Preparing to configure %s"
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:983
-#, c-format
-msgid "Installed %s"
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:988
-#, c-format
-msgid "Preparing for removal of %s"
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:990
-#, c-format
-msgid "Removed %s"
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:995
-#, c-format
-msgid "Preparing to completely remove %s"
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:996
-#, c-format
-msgid "Completely removed %s"
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:1243
-msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:1273
-msgid "Running dpkg"
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:1445
-msgid "Operation was interrupted before it could finish"
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:1507
-msgid "No apport report written because MaxReports is reached already"
-msgstr ""
-
-#. check if its not a follow up error
-#: apt-pkg/deb/dpkgpm.cc:1512
-msgid "dependency problems - leaving unconfigured"
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:1514
-msgid ""
-"No apport report written because the error message indicates its a followup "
-"error from a previous failure."
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:1520
-msgid ""
-"No apport report written because the error message indicates a disk full "
-"error"
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:1526
-msgid ""
-"No apport report written because the error message indicates a out of memory "
-"error"
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:1533
-msgid ""
-"No apport report written because the error message indicates a dpkg I/O error"
-msgstr ""
-
-#: apt-pkg/deb/debsystem.cc:84
-#, c-format
-msgid ""
-"Unable to lock the administration directory (%s), is another process using "
-"it?"
-msgstr ""
-
-#: apt-pkg/deb/debsystem.cc:87
-#, c-format
-msgid "Unable to lock the administration directory (%s), are you root?"
-msgstr ""
-
-#. TRANSLATORS: the %s contains the recovery command, usually
-#. dpkg --configure -a
-#: apt-pkg/deb/debsystem.cc:103
-#, c-format
-msgid ""
-"dpkg was interrupted, you must manually run '%s' to correct the problem. "
-msgstr ""
-
-#: apt-pkg/deb/debsystem.cc:121
-msgid "Not locked"
-msgstr ""
diff --git a/test/integration/framework b/test/integration/framework
index d899bb574..20f3487cc 100644
--- a/test/integration/framework
+++ b/test/integration/framework
@@ -116,7 +116,7 @@ aptitude() {
}
gdb() {
echo "gdb: run »$*«"
- APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} $(which gdb) ${BUILDDIRECTORY}/$1
+ APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} $(which gdb) ${BUILDDIRECTORY}/$1 --args $*
}
http() {
LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/methods/http
@@ -335,6 +335,7 @@ buildsimplenativepackage() {
local SECTION="${7:-others}"
local PRIORITY="${8:-optional}"
+ local FILE_TREE="$9"
local DISTSECTION
if [ "$SECTION" = "$(echo "$SECTION" | cut -d'/' -f 2)" ]; then
DISTSECTION="main"
@@ -391,9 +392,12 @@ Package: $NAME" >> ${BUILDDIR}/debian/control
mkdir -p ${BUILDDIR}/debian/tmp/DEBIAN ${BUILDDIR}/debian/tmp/usr/share/doc/${NAME} ${BUILDDIR}/debian/tmp/usr/bin
cp ${BUILDDIR}/debian/copyright ${BUILDDIR}/debian/changelog ${BUILDDIR}/FEATURES ${BUILDDIR}/debian/tmp/usr/share/doc/${NAME}
cp ${BUILDDIR}/${NAME} ${BUILDDIR}/debian/tmp/usr/bin/${NAME}-${arch}
+ if [ -n "$FILE_TREE" ]; then
+ cp -ar "$FILE_TREE" ${BUILDDIR}/debian/tmp
+ fi
+
(cd ${BUILDDIR}; dpkg-gencontrol -DArchitecture=$arch)
(cd ${BUILDDIR}/debian/tmp; md5sum $(find usr/ -type f) > DEBIAN/md5sums)
-
dpkg-deb --build ${BUILDDIR}/debian/tmp ${BUILDDIR}/.. 2> /dev/null > /dev/null
echo "pool/${NAME}_${VERSION}_${arch}.deb" >> ${BUILDDIR}/../${RELEASE}.${DISTSECTION}.pkglist
done
diff --git a/test/integration/test-apt-get-upgrade b/test/integration/test-apt-get-upgrade
new file mode 100755
index 000000000..23446299c
--- /dev/null
+++ b/test/integration/test-apt-get-upgrade
@@ -0,0 +1,78 @@
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+
+setupenvironment
+configarchitecture "i386"
+
+# simple case
+insertpackage 'stable' 'upgrade-simple' 'all' '1.0'
+insertpackage 'unstable' 'upgrade-simple' 'all' '2.0'
+insertinstalledpackage 'upgrade-simple' 'all' '1.0'
+
+# upgrade with a new dependency
+insertpackage 'stable' 'upgrade-with-new-dep' 'all' '1.0'
+insertpackage 'unstable' 'upgrade-with-new-dep' 'all' '2.0' 'Depends: new-dep'
+insertpackage 'stable' 'new-dep' 'all' '1.0'
+insertinstalledpackage 'upgrade-with-new-dep' 'all' '1.0'
+
+# upgrade with conflict and a new pkg with higher priority than conflict
+insertpackage 'stable' 'upgrade-with-conflict' 'all' '1.0'
+insertpackage 'unstable' 'upgrade-with-conflict' 'all' '2.0' 'Conflicts: conflicting-dep' 'standard'
+insertpackage 'stable' 'conflicting-dep' 'all' '1.0'
+insertinstalledpackage 'upgrade-with-conflict' 'all' '1.0'
+insertinstalledpackage 'conflicting-dep' 'all' '1.0'
+
+
+setupaptarchive
+
+# Test if normal upgrade works as expected
+testequal 'Reading package lists...
+Building dependency tree...
+The following packages have been kept back:
+ upgrade-with-conflict upgrade-with-new-dep
+The following packages will be upgraded:
+ upgrade-simple
+1 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
+Inst upgrade-simple [1.0] (2.0 unstable [all])
+Conf upgrade-simple (2.0 unstable [all])' aptget -s upgrade
+
+# Test if apt-get upgrade --with-new-pkgs works
+testequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ new-dep
+The following packages have been kept back:
+ upgrade-with-conflict
+The following packages will be upgraded:
+ upgrade-simple upgrade-with-new-dep
+2 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
+Inst new-dep (1.0 stable [all])
+Inst upgrade-simple [1.0] (2.0 unstable [all])
+Inst upgrade-with-new-dep [1.0] (2.0 unstable [all])
+Conf new-dep (1.0 stable [all])
+Conf upgrade-simple (2.0 unstable [all])
+Conf upgrade-with-new-dep (2.0 unstable [all])' aptget -s upgrade --with-new-pkgs
+
+# Test if apt-get dist-upgrade works
+testequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ conflicting-dep
+The following NEW packages will be installed:
+ new-dep
+The following packages will be upgraded:
+ upgrade-simple upgrade-with-conflict upgrade-with-new-dep
+3 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Remv conflicting-dep [1.0]
+Inst upgrade-with-conflict [1.0] (2.0 unstable [all])
+Inst new-dep (1.0 stable [all])
+Inst upgrade-simple [1.0] (2.0 unstable [all])
+Inst upgrade-with-new-dep [1.0] (2.0 unstable [all])
+Conf upgrade-with-conflict (2.0 unstable [all])
+Conf new-dep (1.0 stable [all])
+Conf upgrade-simple (2.0 unstable [all])
+Conf upgrade-with-new-dep (2.0 unstable [all])' aptget -s dist-upgrade
+
diff --git a/test/integration/test-apt-progress-fd b/test/integration/test-apt-progress-fd
new file mode 100755
index 000000000..5f73c8f8c
--- /dev/null
+++ b/test/integration/test-apt-progress-fd
@@ -0,0 +1,71 @@
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+buildsimplenativepackage 'testing' 'amd64' '0.1' 'stable'
+buildsimplenativepackage 'testing' 'amd64' '0.8.15' 'stable'
+buildsimplenativepackage 'testing2' 'amd64,i386' '0.8.15' 'stable'
+setupaptarchive
+
+# install native
+exec 3> apt-progress.log
+testsuccess aptget install testing=0.1 -y -o APT::Status-Fd=3
+testequal "dlstatus:1:0:Retrieving file 1 of 1
+dlstatus:1:0:Retrieving file 1 of 1
+pmstatus:dpkg-exec:0:Running dpkg
+pmstatus:testing:0:Installing testing
+pmstatus:testing:20:Preparing testing
+pmstatus:testing:40:Unpacking testing
+pmstatus:testing:60:Preparing to configure testing
+pmstatus:dpkg-exec:60:Running dpkg
+pmstatus:testing:60:Configuring testing
+pmstatus:testing:80:Configuring testing
+pmstatus:testing:100:Installed testing" cat apt-progress.log
+
+# upgrade
+exec 3> apt-progress.log
+testsuccess aptget install testing=0.8.15 -y -o APT::Status-Fd=3
+testequal "dlstatus:1:0:Retrieving file 1 of 1
+dlstatus:1:0:Retrieving file 1 of 1
+pmstatus:dpkg-exec:0:Running dpkg
+pmstatus:testing:20:Preparing testing
+pmstatus:testing:40:Unpacking testing
+pmstatus:testing:60:Preparing to configure testing
+pmstatus:dpkg-exec:60:Running dpkg
+pmstatus:testing:60:Configuring testing
+pmstatus:testing:80:Configuring testing
+pmstatus:testing:100:Installed testing" cat apt-progress.log
+
+# and remove
+exec 3> apt-progress.log
+testsuccess aptget remove testing -y -o APT::Status-Fd=3
+testequal "pmstatus:dpkg-exec:0:Running dpkg
+pmstatus:testing:0:Removing testing
+pmstatus:testing:33.3333:Preparing for removal of testing
+pmstatus:testing:66.6667:Removing testing
+pmstatus:testing:100:Removed testing" cat apt-progress.log
+
+
+# install non-native and ensure we get proper progress info
+exec 3> apt-progress.log
+testsuccess aptget install testing2:i386 -y -o APT::Status-Fd=3
+
+# and compare
+testequal "dlstatus:1:0:Retrieving file 1 of 1
+dlstatus:1:0:Retrieving file 1 of 1
+pmstatus:dpkg-exec:0:Running dpkg
+pmstatus:testing2:0:Installing testing2
+pmstatus:testing2:20:Preparing testing2
+pmstatus:testing2:40:Unpacking testing2
+pmstatus:testing2:60:Preparing to configure testing2
+pmstatus:dpkg-exec:60:Running dpkg
+pmstatus:testing2:60:Configuring testing2
+pmstatus:testing2:80:Configuring testing2
+pmstatus:testing2:100:Installed testing2" cat apt-progress.log
+
+rm -f apt-progress*.log \ No newline at end of file
diff --git a/test/integration/test-apt-progress-fd-error b/test/integration/test-apt-progress-fd-error
new file mode 100755
index 000000000..96d66371a
--- /dev/null
+++ b/test/integration/test-apt-progress-fd-error
@@ -0,0 +1,22 @@
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+mkdir -p usr/bin
+touch usr/bin/file-conflict
+
+buildsimplenativepackage 'foo1' 'amd64,i386' '0.8.15' 'stable' '' 'pkg with file conflicts' '' '' 'usr/'
+buildsimplenativepackage 'foo2' 'amd64,i386' '0.8.15' 'stable' '' 'pkg with file conflicts' '' '' 'usr/'
+
+setupaptarchive
+
+exec 3> apt-progress.log
+testfailure aptget install foo1 foo2 -y -o APT::Status-Fd=3
+msgtest "Ensure correct error message"
+grep -q "aptarchive/pool/foo2_0.8.15_amd64.deb :40:trying to overwrite '/usr/bin/file-conflict', which is also in package foo1 0.8.15" apt-progress.log && msgpass || (cat apt-progress.log && msgfail)
+
diff --git a/test/integration/test-apt-progress-fd-error-postinst b/test/integration/test-apt-progress-fd-error-postinst
new file mode 100755
index 000000000..0b6e70212
--- /dev/null
+++ b/test/integration/test-apt-progress-fd-error-postinst
@@ -0,0 +1,22 @@
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+mkdir -p DEBIAN/
+echo "#!/bin/sh\nexit 1" > DEBIAN/postinst
+chmod 755 DEBIAN/postinst
+
+buildsimplenativepackage 'postinst-error' 'amd64,i386' '0.8.15' 'stable' '' 'pkg with posinst error' '' '' './DEBIAN'
+
+setupaptarchive
+
+exec 3> apt-progress.log
+testfailure aptget install postinst-error -y -o APT::Status-Fd=3
+msgtest "Ensure correct error message for postinst error"
+grep -q "pmerror:postinst-error :80:subprocess installed post-installation script returned error exit status 2" apt-progress.log && msgpass || msgfail
+
diff --git a/test/libapt/strutil_test.cc b/test/libapt/strutil_test.cc
index bfe0d7222..110a20d27 100644
--- a/test/libapt/strutil_test.cc
+++ b/test/libapt/strutil_test.cc
@@ -42,5 +42,32 @@ int main(int argc,char *argv[])
output = DeEscapeString(input);
equals(output, expected);
+ // Split
+ input = "status: libnet1:amd64: unpacked";
+ vector<std::string> result = StringSplit(input, ": ");
+ equals(result[0], "status");
+ equals(result[1], "libnet1:amd64");
+ equals(result[2], "unpacked");
+ equals(result.size(), 3);
+
+ input = "status: libnet1:amd64: unpacked";
+ result = StringSplit(input, "xxx");
+ equals(result[0], input);
+ equals(result.size(), 1);
+
+ input = "status: libnet1:amd64: unpacked";
+ result = StringSplit(input, "");
+ equals(result.size(), 0);
+
+ input = "x:y:z";
+ result = StringSplit(input, ":", 2);
+ equals(result.size(), 2);
+ equals(result[0], "x");
+ equals(result[1], "y:z");
+
+ input = "abc";
+ result = StringSplit(input, "");
+ equals(result.size(), 0);
+
return 0;
}