Преглед изворни кода

Merge branch 'debian/sid' into bugfix/update-progress-reporting

Michael Vogt пре 12 година
родитељ
комит
ff94be47f5
100 измењених фајлова са 39648 додато и 39602 уклоњено
  1. 6 0
      .gitignore
  2. 2 1
      .travis.yml
  3. 0 63
      README.MultiArch
  4. 4 1
      abicheck/run_abi_test
  5. 2 10
      apt-inst/makefile
  6. 11 8
      apt-pkg/algorithms.cc
  7. 1 1
      apt-pkg/aptconfiguration.cc
  8. 4 2
      apt-pkg/cacheset.cc
  9. 41 25
      apt-pkg/cdrom.cc
  10. 1 0
      apt-pkg/cdrom.h
  11. 23 21
      apt-pkg/contrib/fileutl.cc
  12. 8 8
      apt-pkg/contrib/fileutl.h
  13. 7 6
      apt-pkg/deb/dpkgpm.cc
  14. 1 0
      apt-pkg/init.cc
  15. 23 12
      apt-pkg/install-progress.cc
  16. 3 0
      apt-pkg/install-progress.h
  17. 3 45
      apt-pkg/makefile
  18. 1 1
      apt-private/acqprogress.cc
  19. 2 10
      apt-private/makefile
  20. 7 1
      apt-private/private-cacheset.cc
  21. 2 2
      apt-private/private-cmndline.cc
  22. 14 1
      apt-private/private-list.cc
  23. 9 0
      apt-private/private-main.cc
  24. 1 0
      apt-private/private-main.h
  25. 25 0
      apt-private/private-output.cc
  26. 1 1
      buildlib/library.mak
  27. 1 1
      buildlib/program.mak
  28. 1 1
      buildlib/python.mak
  29. 1 1
      buildlib/staticlibrary.mak
  30. 0 306
      cmdline/acqprogress.cc
  31. 0 39
      cmdline/acqprogress.h
  32. 3 19
      cmdline/apt-get.cc
  33. 4 0
      cmdline/apt.cc
  34. 1 1
      configure.ac
  35. 0 1
      debian/apt-doc.docs
  36. 2 0
      debian/apt.conf.autoremove
  37. 1 0
      debian/apt.dirs
  38. 1 1
      debian/apt.install.in
  39. 3 0
      debian/apt.maintscript
  40. 52 0
      debian/changelog
  41. 1 1
      debian/control
  42. 4 0
      debian/rules
  43. 1 1
      doc/apt-get.8.xml
  44. 1 1
      doc/apt-verbatim.ent
  45. 2 2
      doc/apt.8.xml
  46. 5 5
      doc/po/apt-doc.pot
  47. 11 4
      doc/po/de.po
  48. 4 4
      doc/po/es.po
  49. 4 4
      doc/po/fr.po
  50. 11 4
      doc/po/it.po
  51. 4 4
      doc/po/ja.po
  52. 4 4
      doc/po/pl.po
  53. 4 4
      doc/po/pt.po
  54. 4 4
      doc/po/pt_BR.po
  55. 2 2
      ftparchive/override.cc
  56. 31 57
      methods/http.cc
  57. 5 5
      methods/https.cc
  58. 839 831
      po/ar.po
  59. 941 933
      po/ast.po
  60. 952 944
      po/bg.po
  61. 789 781
      po/bs.po
  62. 964 956
      po/ca.po
  63. 930 921
      po/cs.po
  64. 946 938
      po/cy.po
  65. 934 926
      po/da.po
  66. 970 962
      po/de.po
  67. 933 925
      po/dz.po
  68. 931 923
      po/el.po
  69. 959 951
      po/es.po
  70. 934 926
      po/eu.po
  71. 934 926
      po/fi.po
  72. 972 964
      po/fr.po
  73. 958 950
      po/gl.po
  74. 939 931
      po/hu.po
  75. 960 952
      po/it.po
  76. 955 947
      po/ja.po
  77. 926 918
      po/km.po
  78. 940 933
      po/ko.po
  79. 851 843
      po/ku.po
  80. 839 831
      po/lt.po
  81. 929 921
      po/mr.po
  82. 935 927
      po/nb.po
  83. 927 919
      po/ne.po
  84. 962 954
      po/nl.po
  85. 932 924
      po/nn.po
  86. 965 956
      po/pl.po
  87. 963 955
      po/pt.po
  88. 938 930
      po/pt_BR.po
  89. 940 931
      po/ro.po
  90. 954 945
      po/ru.po
  91. 929 920
      po/sk.po
  92. 939 929
      po/sl.po
  93. 945 937
      po/sv.po
  94. 1024 987
      po/th.po
  95. 940 932
      po/tl.po
  96. 935 927
      po/tr.po
  97. 941 932
      po/uk.po
  98. 946 938
      po/vi.po
  99. 938 931
      po/zh_CN.po
  100. 0 0
      po/zh_TW.po

+ 6 - 0
.gitignore

@@ -42,3 +42,9 @@
 /vendor/current
 /vendor/*/sources.list
 /vendor/*/makefile.auto
+
+# generated for and by abicheck
+/abicheck/apt_build.xml
+/abicheck/apt_installed.xml
+/abicheck/compat_reports/
+/abicheck/logs/

+ 2 - 1
.travis.yml

@@ -1,5 +1,6 @@
 language: cpp
 before_install:
  - sudo apt-get update -q
- - sudo apt-get install -q --no-install-recommends dpkg-dev debhelper libdb-dev gettext libcurl4-gnutls-dev zlib1g-dev libbz2-dev xsltproc docbook-xsl docbook-xml po4a autotools-dev autoconf automake doxygen debiandoc-sgml stunnel4
+ - sudo ./prepare-release travis-ci
+ - sudo apt-get install -q --no-install-recommends stunnel4
 script: make && make test && test/integration/run-tests

+ 0 - 63
README.MultiArch

@@ -1,63 +0,0 @@
-Before we start with this topic: Note that MultiArch is not yet ready for
-prime time and/or for the casual user. The implementation is so far widely
-untested and only useful for developers of packagemanagment tools which
-use APT and his friends and maintainers of (upcoming) MultiArch packages.
-This README is especially NOT written for the casual user and is NOT a
-usage guide - you have been warned. It is assumed that the reader has
-at least a bit of knowledge about APT internals, dependency relations
-and the MultiArch spec [0].
-
-Note also that the toolchain isn't ready yet, e.g. while you can simulate
-the installation of MultiArch packages they will more sooner than later
-cause enormous problems if really installed as dpkg can't handle MultiArch
-yet (no, --force-{overwrite,architecture} aren't good options here).
-Other parts of the big picture are missing and/or untested too.
-You have been warned!
-
-
-The implementation is focused on NOT breaking existing singleArch-only
-applications and/or systems as this is the current status-quo for all
-systems. Also, many systems don't need (or can't make use of) MultiArch,
-so APT will proceed in thinking SingleArch as long as it is not explicitly
-told to handle MultiArch:
-To activate MultiArch handling you need to specify architectures you
-want to be considered by APT with the config list APT::Architectures
-(Insert architectures in order of preference).
-APT will download Packages files for all these architectures in the
-update step. Exception: In the sourcelist is the optionfield used:
-deb [ arch=amd64,i386 ] http://example.org/ experimental main
-(This optionfield is a NOP in previous apt versions)
-
-Internally in APT a package is represented as a PkgIterator -
-before MultiArch this PkgIterator was architecture unaware,
-only VerIterators include the architecture they came from.
-This is/was a big problem as all versions in a package are
-considered for dependency resolution, so pinning will not work in all cases.
-
-The problem is solved by a conceptional change:
-A PkgIterator is now architecture aware, so the packages
-of foobar for amd64 and for i386 are now for apt internal totally
-different packages. That is a good thing for e.g. pinning, but
-sometimes you need the information that such packages are belonging together:
-All these foobar packages therefore form a Group accessible with GrpIterators.
-Note that the GrpIterator has the same name as all the packages in this group,
-so e.g. apt-cache pkgnames iterates over GrpIterator to get the package names:
-This is compatible to SingleArch as a Group consists only of a single package
-and also to MultiArch as a Group consists of possible many packages which
-all have the same name and are therefore out of interest for pkgnames.
-
-
-Given all these internal changes it is quite interesting that the actual
-implementation of MultiArch is trivial: Some implicit dependencies and a few
-more provides are all changes needed to get it working. Especially noteworthy
-is that it wasn't needed to change the resolver in any way and other parts only
-need to be told about using GrpIterator instead of PkgIterator, so chances are
-good that libapt-applications will proceed to work without or at least only
-require minor changes, but your mileage may vary…
-
-
-Known Issues and/or noteworthy stuff:
-* The implementation is mostly untested, so it is very likely that APT will
-  eat your kids if you aren't as lucky as the author of these patches.
-
-[0] https://wiki.ubuntu.com/MultiarchSpec

+ 4 - 1
abicheck/run_abi_test

@@ -1,5 +1,8 @@
 #!/bin/sh
 
+# ensure we are in the abibreak subdirectory
+cd "$(readlink -f $(dirname $0))"
+
 if [ ! -d ../build ]; then
 	echo "../build missing, did you run make?"
 	exit 1
@@ -10,7 +13,7 @@ if [ ! -x "$(which abi-compliance-checker 2>/dev/null )" ]; then
 	exit 1
 fi
 
-LIBPATH=$(find /usr/lib/ -type f  -name "libapt-*.so.*" -printf %p\\\\n)
+LIBPATH=$(find /usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH) -type f -regex '.*/libapt-\(pkg\|inst\)\.so\..*' -printf %p\\\\n)
 sed s#@installed_libapt@#$LIBPATH# apt_installed.xml.in > apt_installed.xml
 
 BUILDPATH=$(readlink -f ../build)

+ 2 - 10
apt-inst/makefile

@@ -20,15 +20,7 @@ SLIBS=$(PTHREADLIB) -lapt-pkg
 APT_DOMAIN:=libapt-inst$(MAJOR)
 LIBRARYDEPENDS=$(LIB)/libapt-pkg.so
 
-# Source code for the contributed non-core things
-SOURCE = contrib/extracttar.cc contrib/arfile.cc
+SOURCE = $(wildcard *.cc */*.cc)
+HEADERS = $(addprefix apt-pkg/,$(notdir $(wildcard *.h */*.h)))
 
-# Source code for the main library
-SOURCE+= filelist.cc dirstream.cc extract.cc deb/debfile.cc
-
-# Public header files
-HEADERS = extracttar.h arfile.h filelist.h extract.h \
-          dirstream.h debfile.h
-
-HEADERS := $(addprefix apt-pkg/,$(HEADERS))
 include $(LIBRARY_H)

+ 11 - 8
apt-pkg/algorithms.cc

@@ -445,19 +445,22 @@ void pkgProblemResolver::MakeScores()
 	  || (I->Flags & pkgCache::Flag::Important) == pkgCache::Flag::Important)
 	 Score += PrioEssentials;
 
-      // We transform the priority
-      if (Cache[I].InstVerIter(Cache)->Priority <= 5)
-	 Score += PrioMap[Cache[I].InstVerIter(Cache)->Priority];
-      
+      pkgCache::VerIterator const InstVer = Cache[I].InstVerIter(Cache);
+      // We apply priorities only to downloadable packages, all others are prio:extra
+      // as an obsolete prio:standard package can't be that standard anymore…
+      if (InstVer->Priority <= pkgCache::State::Extra && InstVer.Downloadable() == true)
+	 Score += PrioMap[InstVer->Priority];
+      else
+	 Score += PrioMap[pkgCache::State::Extra];
+
       /* This helps to fix oddball problems with conflicting packages
-         on the same level. We enhance the score of installed packages 
-	 if those are not obsolete
-      */
+	 on the same level. We enhance the score of installed packages
+	 if those are not obsolete */
       if (I->CurrentVer != 0 && Cache[I].CandidateVer != 0 && Cache[I].CandidateVerIter(Cache).Downloadable())
 	 Score += PrioInstalledAndNotObsolete;
 
       // propagate score points along dependencies
-      for (pkgCache::DepIterator D = Cache[I].InstVerIter(Cache).DependsList(); D.end() == false; ++D)
+      for (pkgCache::DepIterator D = InstVer.DependsList(); D.end() == false; ++D)
       {
 	 if (DepMap[D->Type] == 0)
 	    continue;

+ 1 - 1
apt-pkg/aptconfiguration.cc

@@ -476,7 +476,7 @@ const Configuration::getCompressors(bool const Cached) {
 	std::vector<std::string> const comp = _config->FindVector("APT::Compressor");
 	for (std::vector<std::string>::const_iterator c = comp.begin();
 	     c != comp.end(); ++c) {
-		if (*c == "." || *c == "gzip" || *c == "bzip2" || *c == "lzma" || *c == "xz")
+		if (c->empty() || *c == "." || *c == "gzip" || *c == "bzip2" || *c == "lzma" || *c == "xz")
 			continue;
 		compressors.push_back(Compressor(c->c_str(), std::string(".").append(*c).c_str(), c->c_str(), "-9", "-d", 100));
 	}

+ 4 - 2
apt-pkg/cacheset.cc

@@ -391,6 +391,8 @@ bool VersionContainerInterface::FromModifierCommandLine(unsigned short &modID,
 							CacheSetHelper &helper) {
 	Version select = NEWEST;
 	std::string str = cmdline;
+	if (unlikely(str.empty() == true))
+		return false;
 	bool modifierPresent = false;
 	unsigned short fallback = modID;
 	for (std::list<Modifier>::const_iterator mod = mods.begin();
@@ -400,8 +402,8 @@ bool VersionContainerInterface::FromModifierCommandLine(unsigned short &modID,
 		size_t const alength = strlen(mod->Alias);
 		switch(mod->Pos) {
 		case Modifier::POSTFIX:
-			if (str.compare(str.length() - alength, alength,
-					mod->Alias, 0, alength) != 0)
+			if (str.length() <= alength ||
+			      str.compare(str.length() - alength, alength, mod->Alias, 0, alength) != 0)
 				continue;
 			str.erase(str.length() - alength);
 			modID = mod->ID;

+ 41 - 25
apt-pkg/cdrom.cc

@@ -563,6 +563,15 @@ bool pkgCdrom::WriteSourceList(string Name,vector<string> &List,bool Source)
    return true;
 }
 									/*}}}*/
+bool pkgCdrom::UnmountCDROM(std::string const &CDROM, pkgCdromStatus * const log)/*{{{*/
+{
+   if (_config->FindB("APT::CDROM::NoMount",false) == true)
+      return true;
+   if (log != NULL)
+      log->Update(_("Unmounting CD-ROM...\n"), STEP_LAST);
+   return UnmountCdrom(CDROM);
+}
+									/*}}}*/
 bool pkgCdrom::MountAndIdentCDROM(Configuration &Database, std::string &CDROM, std::string &ident, pkgCdromStatus * const log, bool const interactive)/*{{{*/
 {
    // Startup
@@ -583,9 +592,7 @@ bool pkgCdrom::MountAndIdentCDROM(Configuration &Database, std::string &CDROM, s
    {
       if (interactive == true)
       {
-	 if(log != NULL)
-	    log->Update(_("Unmounting CD-ROM...\n"), STEP_LAST);
-	 UnmountCdrom(CDROM);
+	 UnmountCDROM(CDROM, log);
 
 	 if(log != NULL)
 	 {
@@ -605,6 +612,9 @@ bool pkgCdrom::MountAndIdentCDROM(Configuration &Database, std::string &CDROM, s
 	 return _error->Error("Failed to mount the cdrom.");
    }
 
+   if (IsMounted(CDROM) == false)
+      return _error->Error("Failed to mount the cdrom.");
+
    // Hash the CD to get an ID
    if (log != NULL)
       log->Update(_("Identifying... "), STEP_IDENT);
@@ -614,6 +624,7 @@ bool pkgCdrom::MountAndIdentCDROM(Configuration &Database, std::string &CDROM, s
       ident = "";
       if (log != NULL)
 	 log->Update("\n");
+      UnmountCDROM(CDROM, NULL);
       return false;
    }
 
@@ -629,8 +640,11 @@ bool pkgCdrom::MountAndIdentCDROM(Configuration &Database, std::string &CDROM, s
    if (FileExists(DFile) == true)
    {
       if (ReadConfigFile(Database,DFile) == false)
+      {
+	 UnmountCDROM(CDROM, NULL);
 	 return _error->Error("Unable to read the cdrom database %s",
 			      DFile.c_str());
+      }
    }
    return true;
 }
@@ -651,13 +665,7 @@ bool pkgCdrom::Ident(string &ident, pkgCdromStatus *log)		/*{{{*/
    }
 
    // Unmount and finish
-   if (_config->FindB("APT::CDROM::NoMount",false) == false)
-   {
-      if (log != NULL)
-	 log->Update(_("Unmounting CD-ROM...\n"), STEP_LAST);
-      UnmountCdrom(CDROM);
-   }
-
+   UnmountCDROM(CDROM, log);
    return true;
 }
 									/*}}}*/
@@ -682,11 +690,15 @@ bool pkgCdrom::Add(pkgCdromStatus *log)					/*{{{*/
    {
       if (log != NULL)
 	 log->Update("\n");
+      UnmountCDROM(CDROM, NULL);
       return false;
    }
 
    if (chdir(StartDir.c_str()) != 0)
+   {
+      UnmountCDROM(CDROM, NULL);
       return _error->Errno("chdir","Unable to change to %s", StartDir.c_str());
+   }
 
    if (_config->FindB("Debug::aptcdrom",false) == true)
    {
@@ -728,8 +740,7 @@ bool pkgCdrom::Add(pkgCdromStatus *log)					/*{{{*/
 
    if (List.empty() == true && SourceList.empty() == true) 
    {
-      if (_config->FindB("APT::CDROM::NoMount",false) == false) 
-	 UnmountCdrom(CDROM);
+      UnmountCDROM(CDROM, NULL);
       return _error->Error(_("Unable to locate any package files, perhaps this is not a Debian Disc or the wrong architecture?"));
    }
 
@@ -769,14 +780,14 @@ bool pkgCdrom::Add(pkgCdromStatus *log)					/*{{{*/
       {
 	 if(log == NULL) 
          {
-	    if (_config->FindB("APT::CDROM::NoMount",false) == false) 
-	       UnmountCdrom(CDROM);
+	    UnmountCDROM(CDROM, NULL);
 	    return _error->Error("No disc name found and no way to ask for it");
 	 }
 
 	 while(true) {
 	    if(!log->AskCdromName(Name)) {
 	       // user canceld
+	       UnmountCDROM(CDROM, NULL);
 	       return false; 
 	    }
 	    cout << "Name: '" << Name << "'" << endl;
@@ -813,7 +824,10 @@ bool pkgCdrom::Add(pkgCdromStatus *log)					/*{{{*/
    string const partialListDir = listDir + "partial/";
    if (CreateAPTDirectoryIfNeeded(_config->FindDir("Dir::State"), partialListDir) == false &&
        CreateAPTDirectoryIfNeeded(listDir, partialListDir) == false)
+   {
+      UnmountCDROM(CDROM, NULL);
       return _error->Errno("cdrom", _("List directory %spartial is missing."), listDir.c_str());
+   }
 
    // take care of the signatures and copy them if they are ok
    // (we do this before PackageCopy as it modifies "List" and "SourceList")
@@ -827,7 +841,10 @@ bool pkgCdrom::Add(pkgCdromStatus *log)					/*{{{*/
    if (Copy.CopyPackages(CDROM,Name,List, log) == false ||
        SrcCopy.CopyPackages(CDROM,Name,SourceList, log) == false ||
        TransCopy.CopyTranslations(CDROM,Name,TransList, log) == false)
+   {
+      UnmountCDROM(CDROM, NULL);
       return false;
+   }
 
    // reduce the List so that it takes less space in sources.list
    ReduceSourcelist(CDROM,List);
@@ -837,13 +854,19 @@ bool pkgCdrom::Add(pkgCdromStatus *log)					/*{{{*/
    if (_config->FindB("APT::cdrom::NoAct",false) == false)
    {
       if (WriteDatabase(Database) == false)
+      {
+	 UnmountCDROM(CDROM, NULL);
 	 return false;
-      
+      }
+
       if(log != NULL)
 	 log->Update(_("Writing new source list\n"), STEP_WRITE);
       if (WriteSourceList(Name,List,false) == false ||
 	  WriteSourceList(Name,SourceList,true) == false)
+      {
+	 UnmountCDROM(CDROM, NULL);
 	 return false;
+      }
    }
 
    // Print the sourcelist entries
@@ -855,8 +878,7 @@ bool pkgCdrom::Add(pkgCdromStatus *log)					/*{{{*/
       string::size_type Space = (*I).find(' ');
       if (Space == string::npos)
       {
-	 if (_config->FindB("APT::CDROM::NoMount",false) == false) 
-	    UnmountCdrom(CDROM);
+	 UnmountCDROM(CDROM, NULL);
 	 return _error->Error("Internal error");
       }
 
@@ -874,8 +896,7 @@ bool pkgCdrom::Add(pkgCdromStatus *log)					/*{{{*/
       string::size_type Space = (*I).find(' ');
       if (Space == string::npos)
       {
-	 if (_config->FindB("APT::CDROM::NoMount",false) == false) 
-	    UnmountCdrom(CDROM);
+	 UnmountCDROM(CDROM, NULL);
 	 return _error->Error("Internal error");
       }
 
@@ -888,12 +909,7 @@ bool pkgCdrom::Add(pkgCdromStatus *log)					/*{{{*/
    }
 
    // Unmount and finish
-   if (_config->FindB("APT::CDROM::NoMount",false) == false) {
-      if (log != NULL)
-	 log->Update(_("Unmounting CD-ROM...\n"), STEP_LAST);
-      UnmountCdrom(CDROM);
-   }
-
+   UnmountCDROM(CDROM, log);
    return true;
 }
 									/*}}}*/

+ 1 - 0
apt-pkg/cdrom.h

@@ -77,6 +77,7 @@ class pkgCdrom								/*{{{*/
  private:
    APT_HIDDEN bool MountAndIdentCDROM(Configuration &Database, std::string &CDROM,
 	 std::string &ident, pkgCdromStatus * const log, bool const interactive);
+   APT_HIDDEN bool UnmountCDROM(std::string const &CDROM, pkgCdromStatus * const log);
 };
 									/*}}}*/
 

+ 23 - 21
apt-pkg/contrib/fileutl.cc

@@ -58,13 +58,10 @@
 	#include <bzlib.h>
 #endif
 #ifdef HAVE_LZMA
-	#include <stdint.h>
 	#include <lzma.h>
 #endif
-
-#ifdef WORDS_BIGENDIAN
-#include <inttypes.h>
-#endif
+#include <endian.h>
+#include <stdint.h>
 
 #include <apti18n.h>
 									/*}}}*/
@@ -958,10 +955,10 @@ class FileFdPrivate {							/*{{{*/
 // FileFd::Open - Open a file						/*{{{*/
 // ---------------------------------------------------------------------
 /* The most commonly used open mode combinations are given with Mode */
-bool FileFd::Open(string FileName,unsigned int const Mode,CompressMode Compress, unsigned long const Perms)
+bool FileFd::Open(string FileName,unsigned int const Mode,CompressMode Compress, unsigned long const AccessMode)
 {
    if (Mode == ReadOnlyGzip)
-      return Open(FileName, ReadOnly, Gzip, Perms);
+      return Open(FileName, ReadOnly, Gzip, AccessMode);
 
    if (Compress == Auto && (Mode & WriteOnly) == WriteOnly)
       return FileFdError("Autodetection on %s only works in ReadOnly openmode!", FileName.c_str());
@@ -1028,9 +1025,9 @@ bool FileFd::Open(string FileName,unsigned int const Mode,CompressMode Compress,
 
    if (compressor == compressors.end())
       return FileFdError("Can't find a match for specified compressor mode for file %s", FileName.c_str());
-   return Open(FileName, Mode, *compressor, Perms);
+   return Open(FileName, Mode, *compressor, AccessMode);
 }
-bool FileFd::Open(string FileName,unsigned int const Mode,APT::Configuration::Compressor const &compressor, unsigned long const Perms)
+bool FileFd::Open(string FileName,unsigned int const Mode,APT::Configuration::Compressor const &compressor, unsigned long const AccessMode)
 {
    Close();
    Flags = AutoClose;
@@ -1080,11 +1077,18 @@ bool FileFd::Open(string FileName,unsigned int const Mode,APT::Configuration::Co
       TemporaryFileName = string(name);
       free(name);
 
-      if(Perms != 600 && fchmod(iFd, Perms) == -1)
+      // umask() will always set the umask and return the previous value, so
+      // we first set the umask and then reset it to the old value
+      mode_t const CurrentUmask = umask(0);
+      umask(CurrentUmask);
+      // calculate the actual file permissions (just like open/creat)
+      mode_t const FilePermissions = (AccessMode & ~CurrentUmask);
+
+      if(fchmod(iFd, FilePermissions) == -1)
           return FileFdErrno("fchmod", "Could not change permissions for temporary file %s", TemporaryFileName.c_str());
    }
    else
-      iFd = open(FileName.c_str(), fileflags, Perms);
+      iFd = open(FileName.c_str(), fileflags, AccessMode);
 
    this->FileName = FileName;
    if (iFd == -1 || OpenInternDescriptor(Mode, compressor) == false)
@@ -1353,7 +1357,10 @@ bool FileFd::OpenInternDescriptor(unsigned int const Mode, APT::Configuration::C
 	 Args.push_back(a->c_str());
       if (Comp == false && FileName.empty() == false)
       {
-	 Args.push_back("--stdout");
+	 // commands not needing arguments, do not need to be told about using standard output
+	 // in reality, only testcases with tools like cat, rev, rot13, … are able to trigger this
+	 if (compressor.CompressArgs.empty() == false && compressor.UncompressArgs.empty() == false)
+	    Args.push_back("--stdout");
 	 if (TemporaryFileName.empty() == false)
 	    Args.push_back(TemporaryFileName.c_str());
 	 else
@@ -1646,6 +1653,8 @@ bool FileFd::Write(int Fd, const void *From, unsigned long long Size)
 /* */
 bool FileFd::Seek(unsigned long long To)
 {
+   Flags &= ~HitEof;
+
    if (d != NULL && (d->pipe == true || d->InternalStream() == true))
    {
       // Our poor man seeking in pipes is costly, so try to avoid it
@@ -1705,7 +1714,6 @@ bool FileFd::Skip(unsigned long long Over)
 {
    if (d != NULL && (d->pipe == true || d->InternalStream() == true))
    {
-      d->seekpos += Over;
       char buffer[1024];
       while (Over != 0)
       {
@@ -1869,19 +1877,13 @@ unsigned long long FileFd::Size()
 	  FileFdErrno("lseek","Unable to seek to end of gzipped file");
 	  return 0;
        }
-       size = 0;
+       uint32_t size = 0;
        if (read(iFd, &size, 4) != 4)
        {
 	  FileFdErrno("read","Unable to read original size of gzipped file");
 	  return 0;
        }
-
-#ifdef WORDS_BIGENDIAN
-       uint32_t tmp_size = size;
-       uint8_t const * const p = (uint8_t const * const) &tmp_size;
-       tmp_size = (p[3] << 24) | (p[2] << 16) | (p[1] << 8) | p[0];
-       size = tmp_size;
-#endif
+       size = le32toh(size);
 
        if (lseek(iFd, oldPos, SEEK_SET) < 0)
        {

+ 8 - 8
apt-pkg/contrib/fileutl.h

@@ -103,10 +103,10 @@ class FileFd
 	return T;
    }
 
-   bool Open(std::string FileName,unsigned int const Mode,CompressMode Compress,unsigned long const Perms = 0666);
-   bool Open(std::string FileName,unsigned int const Mode,APT::Configuration::Compressor const &compressor,unsigned long const Perms = 0666);
-   inline bool Open(std::string const &FileName,unsigned int const Mode, unsigned long const Perms = 0666) {
-      return Open(FileName, Mode, None, Perms);
+   bool Open(std::string FileName,unsigned int const Mode,CompressMode Compress,unsigned long const AccessMode = 0666);
+   bool Open(std::string FileName,unsigned int const Mode,APT::Configuration::Compressor const &compressor,unsigned long const AccessMode = 0666);
+   inline bool Open(std::string const &FileName,unsigned int const Mode, unsigned long const AccessMode = 0666) {
+      return Open(FileName, Mode, None, AccessMode);
    };
    bool OpenDescriptor(int Fd, unsigned int const Mode, CompressMode Compress, bool AutoClose=false);
    bool OpenDescriptor(int Fd, unsigned int const Mode, APT::Configuration::Compressor const &compressor, bool AutoClose=false);
@@ -129,13 +129,13 @@ class FileFd
    inline bool IsCompressed() {return (Flags & Compressed) == Compressed;};
    inline std::string &Name() {return FileName;};
    
-   FileFd(std::string FileName,unsigned int const Mode,unsigned long Perms = 0666) : iFd(-1), Flags(0), d(NULL)
+   FileFd(std::string FileName,unsigned int const Mode,unsigned long AccessMode = 0666) : iFd(-1), Flags(0), d(NULL)
    {
-      Open(FileName,Mode, None, Perms);
+      Open(FileName,Mode, None, AccessMode);
    };
-   FileFd(std::string FileName,unsigned int const Mode, CompressMode Compress, unsigned long Perms = 0666) : iFd(-1), Flags(0), d(NULL)
+   FileFd(std::string FileName,unsigned int const Mode, CompressMode Compress, unsigned long AccessMode = 0666) : iFd(-1), Flags(0), d(NULL)
    {
-      Open(FileName,Mode, Compress, Perms);
+      Open(FileName,Mode, Compress, AccessMode);
    };
    FileFd() : iFd(-1), Flags(AutoClose), d(NULL) {};
    FileFd(int const Fd, unsigned int const Mode = ReadWrite, CompressMode Compress = None) : iFd(-1), Flags(0), d(NULL)

+ 7 - 6
apt-pkg/deb/dpkgpm.cc

@@ -1053,14 +1053,15 @@ void pkgDPkgPM::StartPtyMagic()
    }
 
    // setup the pty and stuff
-   struct	winsize win;
+   struct winsize win;
 
-   // if tcgetattr does not return zero there was a error
-   // and we do not do any pty magic
+   // if tcgetattr for both stdin/stdout returns 0 (no error)
+   // we do the pty magic
    _error->PushToStack();
-   if (tcgetattr(STDOUT_FILENO, &d->tt) == 0)
+   if (tcgetattr(STDIN_FILENO, &d->tt) == 0 &&
+       tcgetattr(STDOUT_FILENO, &d->tt) == 0)
    {
-       if (ioctl(1, TIOCGWINSZ, (char *)&win) < 0)
+       if (ioctl(STDOUT_FILENO, TIOCGWINSZ, (char *)&win) < 0)
        {
            _error->Errno("ioctl", _("ioctl(TIOCGWINSZ) failed"));
        } else if (openpty(&d->master, &d->slave, NULL, &d->tt, &win) < 0)
@@ -1617,7 +1618,7 @@ void pkgDPkgPM::WriteApportReport(const char *pkgpath, const char *errormsg)
    string::size_type pos;
    FILE *report;
 
-   if (_config->FindB("Dpkg::ApportFailureReport", false) == false)
+   if (_config->FindB("Dpkg::ApportFailureReport", true) == false)
    {
       std::clog << "configured to not write apport reports" << std::endl;
       return;

+ 1 - 0
apt-pkg/init.cc

@@ -86,6 +86,7 @@ bool pkgInitConfig(Configuration &Cnf)
    Cnf.Set("Dir::Ignore-Files-Silently::", "\\.dpkg-[a-z]+$");
    Cnf.Set("Dir::Ignore-Files-Silently::", "\\.save$");
    Cnf.Set("Dir::Ignore-Files-Silently::", "\\.orig$");
+   Cnf.Set("Dir::Ignore-Files-Silently::", "\\.distUpgrade$");
 
    // Default cdrom mount point
    Cnf.CndSet("Acquire::cdrom::mount", "/media/cdrom/");

+ 23 - 12
apt-pkg/install-progress.cc

@@ -256,14 +256,14 @@ PackageManagerFancy::TermSize
 PackageManagerFancy::GetTerminalSize()
 {
    struct winsize win;
-   PackageManagerFancy::TermSize s;
+   PackageManagerFancy::TermSize s = { 0, 0 };
 
    // FIXME: get from "child_pty" instead?
    if(ioctl(STDOUT_FILENO, TIOCGWINSZ, (char *)&win) != 0)
       return s;
 
    if(_config->FindB("Debug::InstallProgress::Fancy", false) == true)
-      std::cerr << "GetTerminalSize: " << win.ws_row << std::endl;
+      std::cerr << "GetTerminalSize: " << win.ws_row << " x " << win.ws_col << std::endl;
 
    s.rows = win.ws_row;
    s.columns = win.ws_col;
@@ -275,6 +275,9 @@ void PackageManagerFancy::SetupTerminalScrollArea(int nr_rows)
      if(_config->FindB("Debug::InstallProgress::Fancy", false) == true)
         std::cerr << "SetupTerminalScrollArea: " << nr_rows << std::endl;
 
+     if (unlikely(nr_rows <= 1))
+	return;
+
      // scroll down a bit to avoid visual glitch when the screen
      // area shrinks by one row
      std::cout << "\n";
@@ -296,28 +299,30 @@ void PackageManagerFancy::SetupTerminalScrollArea(int nr_rows)
      // setup tty size to ensure xterm/linux console are working properly too
      // see bug #731738
      struct winsize win;
-     ioctl(child_pty, TIOCGWINSZ, (char *)&win);
-     win.ws_row = nr_rows - 1;
-     ioctl(child_pty, TIOCSWINSZ, (char *)&win);
+     if (ioctl(child_pty, TIOCGWINSZ, (char *)&win) != -1)
+     {
+	win.ws_row = nr_rows - 1;
+	ioctl(child_pty, TIOCSWINSZ, (char *)&win);
+     }
 }
 
 void PackageManagerFancy::HandleSIGWINCH(int)
 {
-   int nr_terminal_rows = GetTerminalSize().rows;
+   int const nr_terminal_rows = GetTerminalSize().rows;
    SetupTerminalScrollArea(nr_terminal_rows);
+   DrawStatusLine();
 }
 
 void PackageManagerFancy::Start(int a_child_pty)
 {
    child_pty = a_child_pty;
-   int nr_terminal_rows = GetTerminalSize().rows;
-   if (nr_terminal_rows > 0)
-      SetupTerminalScrollArea(nr_terminal_rows);
+   int const nr_terminal_rows = GetTerminalSize().rows;
+   SetupTerminalScrollArea(nr_terminal_rows);
 }
 
 void PackageManagerFancy::Stop()
 {
-   int nr_terminal_rows = GetTerminalSize().rows;
+   int const nr_terminal_rows = GetTerminalSize().rows;
    if (nr_terminal_rows > 0)
    {
       SetupTerminalScrollArea(nr_terminal_rows + 1);
@@ -358,7 +363,13 @@ bool PackageManagerFancy::StatusChanged(std::string PackageName,
           HumanReadableAction))
       return false;
 
-   PackageManagerFancy::TermSize size = GetTerminalSize();
+   return DrawStatusLine();
+}
+bool PackageManagerFancy::DrawStatusLine()
+{
+   PackageManagerFancy::TermSize const size = GetTerminalSize();
+   if (unlikely(size.rows < 1 || size.columns < 1))
+      return false;
 
    static std::string save_cursor = "\033[s";
    static std::string restore_cursor = "\033[u";
@@ -388,7 +399,7 @@ bool PackageManagerFancy::StatusChanged(std::string PackageName,
    {
       int padding = 4;
       float progressbar_size = size.columns - padding - progress_str.size();
-      float current_percent = (float)StepsDone/(float)TotalSteps;
+      float current_percent = percentage / 100.0;
       std::cout << " " 
                 << GetTextProgressStr(current_percent, progressbar_size)
                 << " ";

+ 3 - 0
apt-pkg/install-progress.h

@@ -1,6 +1,8 @@
 #ifndef PKGLIB_IPROGRESS_H
 #define PKGLIB_IPROGRESS_H
 
+#include <apt-pkg/macros.h>
+
 #include <string>
 #include <unistd.h>
 #include <signal.h>
@@ -120,6 +122,7 @@ namespace Progress {
  private:
     static void staticSIGWINCH(int);
     static std::vector<PackageManagerFancy*> instances;
+    APT_HIDDEN bool DrawStatusLine();
 
  protected:
     void SetupTerminalScrollArea(int nr_rows);

+ 3 - 45
apt-pkg/makefile

@@ -11,6 +11,7 @@ include ../buildlib/defaults.mak
 
 # The library name and version (indirectly used from init.h)
 include ../buildlib/libversion.mak
+
 LIBRARY=apt-pkg
 MAJOR=$(LIBAPTPKG_MAJOR)
 MINOR=$(LIBAPTPKG_RELEASE)
@@ -26,50 +27,7 @@ SLIBS+= -llzma
 endif
 APT_DOMAIN:=libapt-pkg$(LIBAPTPKG_MAJOR)
 
-# Source code for the contributed non-core things
-SOURCE = contrib/mmap.cc contrib/error.cc contrib/strutl.cc \
-         contrib/configuration.cc contrib/progress.cc contrib/cmndline.cc \
-	 contrib/hashsum.cc contrib/md5.cc contrib/sha1.cc \
-	 contrib/sha2_internal.cc contrib/hashes.cc \
-	 contrib/cdromutl.cc contrib/crc-16.cc contrib/netrc.cc \
-	 contrib/fileutl.cc contrib/gpgv.cc
-HEADERS = mmap.h error.h configuration.h fileutl.h cmndline.h netrc.h \
-	  md5.h crc-16.h cdromutl.h strutl.h sptr.h sha1.h sha2.h sha256.h \
-	  sha2_internal.h hashes.h hashsum_template.h \
-	  macros.h weakptr.h gpgv.h
-
-# Source code for the core main library
-SOURCE+= pkgcache.cc version.cc depcache.cc \
-         orderlist.cc tagfile.cc sourcelist.cc packagemanager.cc \
-	 pkgrecords.cc algorithms.cc acquire.cc\
-	 acquire-worker.cc acquire-method.cc init.cc clean.cc \
-	 srcrecords.cc cachefile.cc versionmatch.cc policy.cc \
-	 pkgsystem.cc indexfile.cc pkgcachegen.cc acquire-item.cc \
-	 indexrecords.cc vendor.cc vendorlist.cc cdrom.cc indexcopy.cc \
-	 aptconfiguration.cc cachefilter.cc cacheset.cc edsp.cc \
-	 install-progress.cc upgrade.cc update.cc
-HEADERS+= algorithms.h depcache.h pkgcachegen.h cacheiterators.h \
-	  orderlist.h sourcelist.h packagemanager.h tagfile.h \
-	  init.h pkgcache.h version.h progress.h pkgrecords.h \
-	  acquire.h acquire-worker.h acquire-item.h acquire-method.h \
-	  clean.h srcrecords.h cachefile.h versionmatch.h policy.h \
-	  pkgsystem.h indexfile.h metaindex.h indexrecords.h vendor.h \
-	  vendorlist.h cdrom.h indexcopy.h aptconfiguration.h \
-	  cachefilter.h cacheset.h edsp.h install-progress.h \
-	  upgrade.h update.h
-
-# Source code for the debian specific components
-# In theory the deb headers do not need to be exported..
-SOURCE+= deb/deblistparser.cc deb/debrecords.cc deb/dpkgpm.cc \
-         deb/debsrcrecords.cc deb/debversion.cc deb/debsystem.cc \
-	 deb/debindexfile.cc deb/debindexfile.cc deb/debmetaindex.cc
-HEADERS+= debversion.h debsrcrecords.h dpkgpm.h debrecords.h \
-	  deblistparser.h debsystem.h debindexfile.h debmetaindex.h
-
-# Source code for the APT resolver interface specific components
-SOURCE+= edsp/edsplistparser.cc edsp/edspindexfile.cc edsp/edspsystem.cc
-HEADERS+= edsplistparser.h edspindexfile.h edspsystem.h
-
-HEADERS := $(addprefix apt-pkg/,$(HEADERS))
+SOURCE = $(wildcard *.cc */*.cc)
+HEADERS = $(addprefix apt-pkg/,$(notdir $(wildcard *.h */*.h)))
 
 include $(LIBRARY_H)

+ 1 - 1
apt-private/acqprogress.cc

@@ -267,7 +267,7 @@ bool AcqTextStatus::Pulse(pkgAcquire *Owner)
    else
       cout << '\r' << BlankLine << '\r' << Buffer << flush;
    if (_config->FindB("Apt::Color", false) == true)
-      cout << _config->Find("APT::Color::Neutral");
+      cout << _config->Find("APT::Color::Neutral") << flush;
 
    memset(BlankLine,' ',strlen(Buffer));
    BlankLine[strlen(Buffer)] = 0;

+ 2 - 10
apt-private/makefile

@@ -8,9 +8,6 @@ HEADER_TARGETDIRS = apt-private
 # Bring in the default rules
 include ../buildlib/defaults.mak
 
-# The library name and version (indirectly used from init.h)
-include ../buildlib/libversion.mak
-
 # The library name
 LIBRARY=apt-private
 MAJOR=0.0
@@ -18,12 +15,7 @@ MINOR=0
 SLIBS=$(PTHREADLIB) -lapt-pkg
 CXXFLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
 
-PRIVATES=list install download output cachefile cacheset update upgrade cmndline moo search show main utils sources
-SOURCE += $(foreach private, $(PRIVATES), private-$(private).cc)
-HEADERS += $(foreach private, $(PRIVATES), private-$(private).h)
-
-SOURCE+= acqprogress.cc
-HEADERS+= acqprogress.h private-cacheset.h
+SOURCE = $(wildcard *.cc)
+HEADERS = $(addprefix apt-private/,$(wildcard *.h))
 
-HEADERS := $(addprefix apt-private/,$(HEADERS))
 include $(LIBRARY_H)

+ 7 - 1
apt-private/private-cacheset.cc

@@ -73,7 +73,13 @@ bool GetLocalitySortedVersionSet(pkgCacheFile &CacheFile,
       else 
       {
          pkgPolicy *policy = CacheFile.GetPolicy();
-         output_set.insert(policy->GetCandidateVer(P));
+         if (policy->GetCandidateVer(P).IsGood())
+            output_set.insert(policy->GetCandidateVer(P));
+         else 
+            // no candidate, this may happen for packages in 
+            // dpkg "deinstall ok config-file" state - we pick the first ver
+            // (which should be the only one)
+            output_set.insert(P.VersionList());
       }
    }
    progress.Done();

+ 2 - 2
apt-private/private-cmndline.cc

@@ -116,7 +116,7 @@ static bool addArgumentsAPTConfig(std::vector<CommandLine::Args> &Args, char con
 static bool addArgumentsAPTGet(std::vector<CommandLine::Args> &Args, char const * const Cmd)/*{{{*/
 {
    if (CmdMatches("install", "remove", "purge", "upgrade", "dist-upgrade",
-	    "dselect-upgrade", "autoremove"))
+	    "dselect-upgrade", "autoremove", "full-upgrade"))
    {
       addArg(0, "show-progress", "DpkgPM::Progress", 0);
       addArg('f', "fix-broken", "APT::Get::Fix-Broken", 0);
@@ -163,7 +163,7 @@ static bool addArgumentsAPTGet(std::vector<CommandLine::Args> &Args, char const
 
    if (CmdMatches("install", "remove", "purge", "upgrade", "dist-upgrade",
 	    "deselect-upgrade", "autoremove", "clean", "autoclean", "check",
-	    "build-dep"))
+	    "build-dep", "full-upgrade"))
    {
       addArg('s', "simulate", "APT::Get::Simulate", 0);
       addArg('s', "just-print", "APT::Get::Simulate", 0);

+ 14 - 1
apt-private/private-list.cc

@@ -130,10 +130,11 @@ bool DoList(CommandLine &Cmd)
                             Cache->Head().PackageCount,
                             _("Listing"));
    GetLocalitySortedVersionSet(CacheFile, bag, matcher, progress);
+   bool ShowAllVersions = _config->FindB("APT::Cmd::All-Versions", false);
    for (LocalitySortedVersionSet::iterator V = bag.begin(); V != bag.end(); ++V)
    {
       std::stringstream outs;
-      if(_config->FindB("APT::Cmd::All-Versions", false) == true)
+      if(ShowAllVersions == true)
       {
          ListAllVersions(CacheFile, records, V.ParentPkg(), outs, includeSummary);
          output_map.insert(std::make_pair<std::string, std::string>(
@@ -151,6 +152,18 @@ bool DoList(CommandLine &Cmd)
       std::cout << (*K).second << std::endl;
 
 
+   // be nice and tell the user if there is more to see
+   if (bag.size() == 1 && ShowAllVersions == false)
+   {
+      // start with -1 as we already displayed one version
+      int versions = -1;
+      pkgCache::VerIterator Ver = *bag.begin();
+      for ( ; Ver.end() == false; Ver++)
+         versions++;
+      if (versions > 0)
+         _error->Notice(P_("There is %i additional version. Please use the '-a' switch to see it", "There are %i additional versions. Please use the '-a' switch to see them.", versions), versions);
+   }
+
    return true;
 }
 

+ 9 - 0
apt-private/private-main.cc

@@ -8,9 +8,18 @@
 #include <iostream>
 #include <string.h>
 #include <unistd.h>
+#include <signal.h>
 
 #include <apti18n.h>
 
+
+void InitSignals()
+{
+   // Setup the signals
+   signal(SIGPIPE,SIG_IGN);
+}
+
+
 void CheckSimulateMode(CommandLine &CmdL)
 {
    // simulate user-friendly if apt-get has no root privileges

+ 1 - 0
apt-private/private-main.h

@@ -6,5 +6,6 @@
 class CommandLine;
 
 APT_PUBLIC void CheckSimulateMode(CommandLine &CmdL);
+APT_PUBLIC void InitSignals();
 
 #endif

+ 25 - 0
apt-private/private-output.cc

@@ -22,6 +22,7 @@
 #include <iostream>
 #include <langinfo.h>
 #include <unistd.h>
+#include <signal.h>
 
 #include <apti18n.h>
 									/*}}}*/
@@ -32,8 +33,24 @@ std::ostream c0out(0);
 std::ostream c1out(0);
 std::ostream c2out(0);
 std::ofstream devnull("/dev/null");
+
+
 unsigned int ScreenWidth = 80 - 1; /* - 1 for the cursor */
 
+// SigWinch - Window size change signal handler				/*{{{*/
+// ---------------------------------------------------------------------
+/* */
+static void SigWinch(int)
+{
+   // Riped from GNU ls
+#ifdef TIOCGWINSZ
+   struct winsize ws;
+  
+   if (ioctl(1, TIOCGWINSZ, &ws) != -1 && ws.ws_col >= 5)
+      ScreenWidth = ws.ws_col - 1;
+#endif
+}
+									/*}}}*/
 bool InitOutput()							/*{{{*/
 {
    if (!isatty(STDOUT_FILENO) && _config->FindI("quiet", -1) == -1)
@@ -47,6 +64,10 @@ bool InitOutput()							/*{{{*/
    if (_config->FindI("quiet",0) > 1)
       c1out.rdbuf(devnull.rdbuf());
 
+   // deal with window size changes
+   signal(SIGWINCH,SigWinch);
+   SigWinch(0);
+
    if(!isatty(1))
    {
       _config->Set("APT::Color", "false");
@@ -146,6 +167,10 @@ static std::string GetArchitecture(pkgCacheFile &CacheFile, pkgCache::PkgIterato
    pkgCache::VerIterator inst = P.CurrentVer();
    pkgCache::VerIterator cand = policy->GetCandidateVer(P);
 
+   // this may happen for packages in dpkg "deinstall ok config-file" state
+   if (inst.IsGood() == false && cand.IsGood() == false)
+      return P.VersionList().Arch();
+
    return inst ? inst.Arch() : cand.Arch();
 }
 									/*}}}*/

+ 1 - 1
buildlib/library.mak

@@ -63,7 +63,7 @@ $(LIB)/lib$(LIBRARY).so.$(MAJOR).$(MINOR): $($(LOCAL)-HEADERS) $($(LOCAL)-OBJS)
 vpath %.cc $(SUBDIRS)
 $(OBJ)/%.opic: %.cc $(LIBRARYDEPENDS)
 	echo Compiling $< to $@
-	$(CXX) -c $(INLINEDEPFLAG) $(CPPFLAGS) $(CXXFLAGS) $(PICFLAGS) -o $@ $<
+	$(CXX) -c $(INLINEDEPFLAG) $(CPPFLAGS) $(CXXFLAGS) $(PICFLAGS) -o $@ $(abspath $<)
 	$(DoDep)
 
 # Include the dependencies that are available

+ 1 - 1
buildlib/program.mak

@@ -50,7 +50,7 @@ $($(LOCAL)-BIN): $($(LOCAL)-OBJS) $($(LOCAL)-MKS)
 vpath %.cc $(SUBDIRS)
 $(OBJ)/%.o: %.cc
 	echo Compiling $< to $@
-	$(CXX) -c $(INLINEDEPFLAG) $(CPPFLAGS) $(CXXFLAGS) -o $@ $<
+	$(CXX) -c $(INLINEDEPFLAG) $(CPPFLAGS) $(CXXFLAGS) -o $@ $(abspath $<)
 	$(DoDep)
 
 # Include the dependencies that are available

+ 1 - 1
buildlib/python.mak

@@ -58,7 +58,7 @@ endif  # ifdef PYTHONLIB
 vpath %.cc $(SUBDIRS)
 $(OBJ)/%.opic: %.cc
 	echo Compiling $< to $@
-	$(CXX) -c $(INLINEDEPFLAG) $(CPPFLAGS) $(CXXFLAGS) $(PICFLAGS) -o $@ $<
+	$(CXX) -c $(INLINEDEPFLAG) $(CPPFLAGS) $(CXXFLAGS) $(PICFLAGS) -o $@ $(abspath $<)
 	$(DoDep)
 
 # Include the dependencies that are available

+ 1 - 1
buildlib/staticlibrary.mak

@@ -50,7 +50,7 @@ endif
 vpath %.cc $(SUBDIRS)
 $(OBJ)/%.o: %.cc
 	echo Compiling $< to $@
-	$(CXX) -c $(INLINEDEPFLAG) $(CPPFLAGS) $(CXXFLAGS) -o $@ $<
+	$(CXX) -c $(INLINEDEPFLAG) $(CPPFLAGS) $(CXXFLAGS) -o $@ $(abspath $<)
 	$(DoDep)
 
 # Include the dependencies that are available

+ 0 - 306
cmdline/acqprogress.cc

@@ -1,306 +0,0 @@
-// -*- mode: cpp; mode: fold -*-
-// Description								/*{{{*/
-// $Id: acqprogress.cc,v 1.24 2003/04/27 01:56:48 doogie Exp $
-/* ######################################################################
-
-   Acquire Progress - Command line progress meter 
-   
-   ##################################################################### */
-									/*}}}*/
-// Include files							/*{{{*/
-#include<config.h>
-
-#include <apt-pkg/acquire.h>
-#include <apt-pkg/acquire-item.h>
-#include <apt-pkg/acquire-worker.h>
-#include <apt-pkg/configuration.h>
-#include <apt-pkg/strutl.h>
-#include <apt-pkg/error.h>
-
-#include <string.h>
-#include <stdio.h>
-#include <signal.h>
-#include <iostream>
-#include <unistd.h>
-
-#include "acqprogress.h"
-#include <apti18n.h>
-									/*}}}*/
-
-using namespace std;
-
-// AcqTextStatus::AcqTextStatus - Constructor				/*{{{*/
-// ---------------------------------------------------------------------
-/* */
-AcqTextStatus::AcqTextStatus(unsigned int &ScreenWidth,unsigned int Quiet) :
-    ScreenWidth(ScreenWidth), ID(0), Quiet(Quiet)
-{
-   BlankLine[0] = 0;
-}
-									/*}}}*/
-// AcqTextStatus::Start - Downloading has started			/*{{{*/
-// ---------------------------------------------------------------------
-/* */
-void AcqTextStatus::Start() 
-{
-   pkgAcquireStatus::Start(); 
-   BlankLine[0] = 0;
-   ID = 1;
-};
-									/*}}}*/
-// AcqTextStatus::IMSHit - Called when an item got a HIT response	/*{{{*/
-// ---------------------------------------------------------------------
-/* */
-void AcqTextStatus::IMSHit(pkgAcquire::ItemDesc &Itm)
-{
-   if (Quiet > 1)
-      return;
-
-   if (Quiet <= 0)
-      cout << '\r' << BlankLine << '\r';   
-   
-   cout << _("Hit ") << Itm.Description;
-   if (Itm.Owner->FileSize != 0)
-      cout << " [" << SizeToStr(Itm.Owner->FileSize) << "B]";
-   cout << endl;
-   Update = true;
-};
-									/*}}}*/
-// AcqTextStatus::Fetch - An item has started to download		/*{{{*/
-// ---------------------------------------------------------------------
-/* This prints out the short description and the expected size */
-void AcqTextStatus::Fetch(pkgAcquire::ItemDesc &Itm)
-{
-   Update = true;
-   if (Itm.Owner->Complete == true)
-      return;
-   
-   Itm.Owner->ID = ID++;
-   
-   if (Quiet > 1)
-      return;
-
-   if (Quiet <= 0)
-      cout << '\r' << BlankLine << '\r';
-   
-   cout << _("Get:") << Itm.Owner->ID << ' ' << Itm.Description;
-   if (Itm.Owner->FileSize != 0)
-      cout << " [" << SizeToStr(Itm.Owner->FileSize) << "B]";
-   cout << endl;
-};
-									/*}}}*/
-// AcqTextStatus::Done - Completed a download				/*{{{*/
-// ---------------------------------------------------------------------
-/* We don't display anything... */
-void AcqTextStatus::Done(pkgAcquire::ItemDesc &Itm)
-{
-   Update = true;
-};
-									/*}}}*/
-// AcqTextStatus::Fail - Called when an item fails to download		/*{{{*/
-// ---------------------------------------------------------------------
-/* We print out the error text  */
-void AcqTextStatus::Fail(pkgAcquire::ItemDesc &Itm)
-{
-   if (Quiet > 1)
-      return;
-
-   // Ignore certain kinds of transient failures (bad code)
-   if (Itm.Owner->Status == pkgAcquire::Item::StatIdle)
-      return;
-      
-   if (Quiet <= 0)
-      cout << '\r' << BlankLine << '\r';
-   
-   if (Itm.Owner->Status == pkgAcquire::Item::StatDone)
-   {
-      cout << _("Ign ") << Itm.Description << endl;
-   }
-   else
-   {
-      cout << _("Err ") << Itm.Description << endl;
-      cout << "  " << Itm.Owner->ErrorText << endl;
-   }
-   
-   Update = true;
-};
-									/*}}}*/
-// AcqTextStatus::Stop - Finished downloading				/*{{{*/
-// ---------------------------------------------------------------------
-/* This prints out the bytes downloaded and the overall average line
-   speed */
-void AcqTextStatus::Stop()
-{
-   pkgAcquireStatus::Stop();
-   if (Quiet > 1)
-      return;
-
-   if (Quiet <= 0)
-      cout << '\r' << BlankLine << '\r' << flush;
-
-   if (FetchedBytes != 0 && _error->PendingError() == false)
-      ioprintf(cout,_("Fetched %sB in %s (%sB/s)\n"),
-	       SizeToStr(FetchedBytes).c_str(),
-	       TimeToStr(ElapsedTime).c_str(),
-	       SizeToStr(CurrentCPS).c_str());
-}
-									/*}}}*/
-// AcqTextStatus::Pulse - Regular event pulse				/*{{{*/
-// ---------------------------------------------------------------------
-/* This draws the current progress. Each line has an overall percent
-   meter and a per active item status meter along with an overall 
-   bandwidth and ETA indicator. */
-bool AcqTextStatus::Pulse(pkgAcquire *Owner)
-{
-   pkgAcquireStatus::Pulse(Owner);
-   
-   if (Quiet > 0)
-      return true;
-   
-   enum {Long = 0,Medium,Short} Mode = Medium;
-   
-   char Buffer[sizeof(BlankLine)];
-   char *End = Buffer + sizeof(Buffer);
-   char *S = Buffer;
-   if (ScreenWidth >= sizeof(Buffer))
-      ScreenWidth = sizeof(Buffer)-1;
-
-   // Put in the percent done
-   sprintf(S,"%.0f%%",((CurrentBytes + CurrentItems)*100.0)/(TotalBytes+TotalItems));
-
-   bool Shown = false;
-   for (pkgAcquire::Worker *I = Owner->WorkersBegin(); I != 0;
-	I = Owner->WorkerStep(I))
-   {
-      S += strlen(S);
-      
-      // There is no item running 
-      if (I->CurrentItem == 0)
-      {
-	 if (I->Status.empty() == false)
-	 {
-	    snprintf(S,End-S," [%s]",I->Status.c_str());
-	    Shown = true;
-	 }
-	 
-	 continue;
-      }
-
-      Shown = true;
-      
-      // Add in the short description
-      if (I->CurrentItem->Owner->ID != 0)
-	 snprintf(S,End-S," [%lu %s",I->CurrentItem->Owner->ID,
-		  I->CurrentItem->ShortDesc.c_str());
-      else
-	 snprintf(S,End-S," [%s",I->CurrentItem->ShortDesc.c_str());
-      S += strlen(S);
-
-      // Show the short mode string
-      if (I->CurrentItem->Owner->Mode != 0)
-      {
-	 snprintf(S,End-S," %s",I->CurrentItem->Owner->Mode);
-	 S += strlen(S);
-      }
-            
-      // Add the current progress
-      if (Mode == Long)
-	 snprintf(S,End-S," %llu",I->CurrentSize);
-      else
-      {
-	 if (Mode == Medium || I->TotalSize == 0)
-	    snprintf(S,End-S," %sB",SizeToStr(I->CurrentSize).c_str());
-      }
-      S += strlen(S);
-      
-      // Add the total size and percent
-      if (I->TotalSize > 0 && I->CurrentItem->Owner->Complete == false)
-      {
-	 if (Mode == Short)
-	    snprintf(S,End-S," %.0f%%",
-		     (I->CurrentSize*100.0)/I->TotalSize);
-	 else
-	    snprintf(S,End-S,"/%sB %.0f%%",SizeToStr(I->TotalSize).c_str(),
-		     (I->CurrentSize*100.0)/I->TotalSize);
-      }      
-      S += strlen(S);
-      snprintf(S,End-S,"]");
-   }
-
-   // Show something..
-   if (Shown == false)
-      snprintf(S,End-S,_(" [Working]"));
-      
-   /* Put in the ETA and cps meter, block off signals to prevent strangeness
-      during resizing */
-   sigset_t Sigs,OldSigs;
-   sigemptyset(&Sigs);
-   sigaddset(&Sigs,SIGWINCH);
-   sigprocmask(SIG_BLOCK,&Sigs,&OldSigs);
-   
-   if (CurrentCPS != 0)
-   {      
-      char Tmp[300];
-      unsigned long long ETA = (TotalBytes - CurrentBytes)/CurrentCPS;
-      sprintf(Tmp," %sB/s %s",SizeToStr(CurrentCPS).c_str(),TimeToStr(ETA).c_str());
-      unsigned int Len = strlen(Buffer);
-      unsigned int LenT = strlen(Tmp);
-      if (Len + LenT < ScreenWidth)
-      {	 
-	 memset(Buffer + Len,' ',ScreenWidth - Len);
-	 strcpy(Buffer + ScreenWidth - LenT,Tmp);
-      }      
-   }
-   Buffer[ScreenWidth] = 0;
-   BlankLine[ScreenWidth] = 0;
-   sigprocmask(SIG_SETMASK,&OldSigs,0);
-
-   // Draw the current status
-   if (strlen(Buffer) == strlen(BlankLine))
-      cout << '\r' << Buffer << flush;
-   else
-      cout << '\r' << BlankLine << '\r' << Buffer << flush;
-   memset(BlankLine,' ',strlen(Buffer));
-   BlankLine[strlen(Buffer)] = 0;
-   
-   Update = false;
-
-   return true;
-}
-									/*}}}*/
-// AcqTextStatus::MediaChange - Media need to be swapped		/*{{{*/
-// ---------------------------------------------------------------------
-/* Prompt for a media swap */
-bool AcqTextStatus::MediaChange(string Media,string Drive)
-{
-   // If we do not output on a terminal and one of the options to avoid user
-   // interaction is given, we assume that no user is present who could react
-   // on your media change request
-   if (isatty(STDOUT_FILENO) != 1 && Quiet >= 2 &&
-       (_config->FindB("APT::Get::Assume-Yes",false) == true ||
-	_config->FindB("APT::Get::Force-Yes",false) == true ||
-	_config->FindB("APT::Get::Trivial-Only",false) == true))
-
-      return false;
-
-   if (Quiet <= 0)
-      cout << '\r' << BlankLine << '\r';
-   ioprintf(cout,_("Media change: please insert the disc labeled\n"
-		   " '%s'\n"
-		   "in the drive '%s' and press enter\n"),
-	    Media.c_str(),Drive.c_str());
-
-   char C = 0;
-   bool bStatus = true;
-   while (C != '\n' && C != '\r')
-   {
-      int len = read(STDIN_FILENO,&C,1);
-      if(C == 'c' || len <= 0)
-	 bStatus = false;
-   }
-
-   if(bStatus)
-      Update = true;
-   return bStatus;
-}
-									/*}}}*/

+ 0 - 39
cmdline/acqprogress.h

@@ -1,39 +0,0 @@
-// -*- mode: cpp; mode: fold -*-
-// Description								/*{{{*/
-// $Id: acqprogress.h,v 1.5 2003/02/02 22:24:11 jgg Exp $
-/* ######################################################################
-
-   Acquire Progress - Command line progress meter 
-   
-   ##################################################################### */
-									/*}}}*/
-#ifndef ACQPROGRESS_H
-#define ACQPROGRESS_H
-
-#include <apt-pkg/acquire.h>
-
-#include <string>
-
-class AcqTextStatus : public pkgAcquireStatus
-{
-   unsigned int &ScreenWidth;
-   char BlankLine[1024];
-   unsigned long ID;
-   unsigned long Quiet;
-   
-   public:
-   
-   virtual bool MediaChange(std::string Media,std::string Drive);
-   virtual void IMSHit(pkgAcquire::ItemDesc &Itm);
-   virtual void Fetch(pkgAcquire::ItemDesc &Itm);
-   virtual void Done(pkgAcquire::ItemDesc &Itm);
-   virtual void Fail(pkgAcquire::ItemDesc &Itm);
-   virtual void Start();
-   virtual void Stop();
-   
-   bool Pulse(pkgAcquire *Owner);
-
-   AcqTextStatus(unsigned int &ScreenWidth,unsigned int Quiet);
-};
-
-#endif

+ 3 - 19
cmdline/apt-get.cc

@@ -1664,20 +1664,6 @@ static bool ShowHelp(CommandLine &)
       "pages for more information and options.\n"
       "                       This APT has Super Cow Powers.\n");
    return true;
-}
-									/*}}}*/
-// SigWinch - Window size change signal handler				/*{{{*/
-// ---------------------------------------------------------------------
-/* */
-static void SigWinch(int)
-{
-   // Riped from GNU ls
-#ifdef TIOCGWINSZ
-   struct winsize ws;
-  
-   if (ioctl(1, TIOCGWINSZ, &ws) != -1 && ws.ws_col >= 5)
-      ScreenWidth = ws.ws_col - 1;
-#endif
 }
 									/*}}}*/
 int main(int argc,const char *argv[])					/*{{{*/
@@ -1734,14 +1720,12 @@ int main(int argc,const char *argv[])					/*{{{*/
    // see if we are in simulate mode
    CheckSimulateMode(CmdL);
 
+   // Init the signals
+   InitSignals();
+
    // Setup the output streams
    InitOutput();
 
-   // Setup the signals
-   signal(SIGPIPE,SIG_IGN);
-   signal(SIGWINCH,SigWinch);
-   SigWinch(0);
-
    // Match the operation
    CmdL.DispatchArg(Cmds);
 

+ 4 - 0
cmdline/apt.cc

@@ -96,6 +96,10 @@ int main(int argc, const char *argv[])					/*{{{*/
 
    std::vector<CommandLine::Args> Args = getCommandArgs("apt", CommandLine::GetCommand(Cmds, argc, argv));
 
+   // Init the signals
+   InitSignals();
+
+   // Init the output
    InitOutput();
 
    // Set up gettext support

+ 1 - 1
configure.ac

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

+ 0 - 1
debian/apt-doc.docs

@@ -1,3 +1,2 @@
 README.progress-reporting
-README.MultiArch
 doc/external-dependency-solver-protocol.txt

+ 2 - 0
debian/apt.conf.autoremove

@@ -22,6 +22,8 @@ APT
 	".*-modules";
 	".*-kernel";
 	"linux-backports-modules-.*";
+        # tools
+        "linux-tools";
   };
 
   Never-MarkAuto-Sections

+ 1 - 0
debian/apt.dirs

@@ -15,3 +15,4 @@ var/lib/apt/mirrors/partial
 var/lib/apt/periodic
 var/log/apt
 usr/share/bug/apt
+usr/share/bash-completion/completions/

+ 1 - 1
debian/apt.install.in

@@ -3,4 +3,4 @@ bin/apt-* usr/bin/
 bin/methods/* usr/lib/apt/methods/
 scripts/dselect/* usr/lib/dpkg/methods/apt/
 usr/share/locale/*/*/apt.mo
-bin/libapt-private.so.* usr/lib/@DEB_HOST_MULTIARCH@/
+bin/libapt-private.so.* usr/lib/@DEB_HOST_MULTIARCH@/

+ 3 - 0
debian/apt.maintscript

@@ -0,0 +1,3 @@
+rm_conffile /etc/apt/apt.conf.d/20changelog 1.0.3 -- "@"
+
+

+ 52 - 0
debian/changelog

@@ -1,3 +1,55 @@
+apt (1.0.2) unstable; urgency=medium
+
+  [ Michael Vogt ]
+  * fix apt list output for pkgs in dpkg ^rc state
+  * Notice the user about "apt list -a" when only a single hit if found
+  * fix test-failure in adt
+  * apt-private/acqprogress.cc: fix output when ctrl-c is hit during 
+    apt update (LP: #1310548, closes: #744297)
+  * Fix option name DPkg::Progress-Fancy in apt.8 manpage
+    (LP: #1310506)
+
+  [ David Kalnischkies ]
+  * don't double-count seeks in FileFd::Skip for bzip/xz
+  * deal with umask only if we really need to for mkstemp
+  * consider priorities only for downloadable pkgs in resolver
+  * force fancy progressbar redraw on window size change
+  * clear HitEof flag in FileFd::Seek
+  * use Google C++ Testing Framework for libapt tests
+  * support dist-upgrade options in full-upgrade
+
+  [ Trần Ngọc Quân ]
+  * l10n: vi.po (624t): Update translation
+
+  [ Theppitak Karoonboonyanan ]
+  * Updated Thai program translation (closes: #745120)
+
+  [ James McCoy ]
+  * Consistently use Dpkg::Progress* in documentation (Closes: 745452)
+
+ -- Michael Vogt <mvo@debian.org>  Fri, 25 Apr 2014 13:15:03 +0200
+
+apt (1.0.1) unstable; urgency=medium
+
+  [ Michael Vogt ]
+  * Fix crash in "apt list" when a sources.list file is unreable
+    (Closes: 743413)
+  * make apt search case-insensitive by default
+  * Fix possible race when stunnel/aptwebserver create their PID files
+    in the tests
+  * Fix insecure file permissions when using FileFd with OpenMode::Atomic
+    (LP: #1304657)
+
+  [ Julian Andres Klode ]
+  * Version the Breaks/Replaces for sun-java{5,6}-jdk (LP: #1302736)
+    (Closes: #743616)
+  * Add versioned openjdk-6-jdk breaks
+
+  [ Josef Vitu ]
+  * apt: Minor typo in 'apt' man page (closes: #743657)
+
+ -- Michael Vogt <mvo@debian.org>  Thu, 10 Apr 2014 09:48:56 +0200
+
 apt (1.0) unstable; urgency=low
 
   The "Happy birthday and 10000b years in the making" release

+ 1 - 1
debian/control

@@ -9,7 +9,7 @@ Build-Depends: dpkg-dev (>= 1.15.8), debhelper (>= 8.1.3~), libdb-dev,
  gettext (>= 0.12), libcurl4-gnutls-dev (>= 7.19.4~),
  zlib1g-dev, libbz2-dev, liblzma-dev,
  xsltproc, docbook-xsl, docbook-xml, po4a (>= 0.34-2),
- autotools-dev, autoconf, automake
+ autotools-dev, autoconf, automake, libgtest-dev
 Build-Depends-Indep: doxygen, debiandoc-sgml, graphviz
 Build-Conflicts: autoconf2.13, automake1.4
 Vcs-Git: git://anonscm.debian.org/apt/apt.git

+ 4 - 0
debian/rules

@@ -189,6 +189,10 @@ apt: build-binary build-manpages debian/apt.install
 	cp debian/apt.conf.autoremove debian/$@/etc/apt/apt.conf.d/01autoremove
 	cp debian/apt.auto-removal.sh debian/$@/etc/kernel/postinst.d/apt-auto-removal
 	chmod 755 debian/$@/etc/kernel/postinst.d/apt-auto-removal
+	# install bash completion
+	cp share/bash-completions/* debian/$@/usr/share/bash-completion/completions/
+	# install vendor specific apt confs
+	find -L vendor/current -name 'apt.conf-*' | while read conf; do cp "$${conf}" "debian/$@/etc/apt/apt.conf.d/$${conf#*-}"; done
 
 	# make rosetta happy and remove pot files in po/ (but leave stuff
 	# in po/domains/* untouched) and cp *.po into each domain dir

+ 1 - 1
doc/apt-get.8.xml

@@ -536,7 +536,7 @@
      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.
-     Configuration Item: <literal>DpkgPM::Progress</literal> and <literal>Dpkg::Progress-Fancy</literal>.</para></listitem>
+     Configuration Item: <literal>Dpkg::Progress</literal> and <literal>Dpkg::Progress-Fancy</literal>.</para></listitem>
      </varlistentry>
     
 

+ 1 - 1
doc/apt-verbatim.ent

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

+ 2 - 2
doc/apt.8.xml

@@ -143,12 +143,12 @@
 
  <refsect1><title>Differences to &apt-get;</title>
  <para>The <command>apt</command> command is meant to be pleasant for
- end users and does not need to be backward compatilbe like
+ end users and does not need to be backward compatible like
  &apt-get;. Therefore some options are different:
  
  <itemizedlist>
    <listitem>
-     <para>The option <literal>DPkgPM::Progress-Fancy</literal> is enabled.
+     <para>The option <literal>DPkg::Progress-Fancy</literal> is enabled.
      </para>
    </listitem>
    <listitem>

+ 5 - 5
doc/po/apt-doc.pot

@@ -6,9 +6,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: apt-doc 0.9.16.1\n"
+"Project-Id-Version: apt-doc 1.0.1\n"
 "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2014-04-01 15:51+0200\n"
+"POT-Creation-Date: 2014-04-25 13:17+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"
@@ -636,13 +636,13 @@ msgstr ""
 #: apt.8.xml:145
 msgid ""
 "The <command>apt</command> command is meant to be pleasant for end users and "
-"does not need to be backward compatilbe like &apt-get;. Therefore some "
+"does not need to be backward compatible like &apt-get;. Therefore some "
 "options are different:"
 msgstr ""
 
 #. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
 #: apt.8.xml:151
-msgid "The option <literal>DPkgPM::Progress-Fancy</literal> is enabled."
+msgid "The option <literal>DPkg::Progress-Fancy</literal> is enabled."
 msgstr ""
 
 #. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
@@ -1280,7 +1280,7 @@ msgid ""
 "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.  Configuration "
-"Item: <literal>DpkgPM::Progress</literal> and "
+"Item: <literal>Dpkg::Progress</literal> and "
 "<literal>Dpkg::Progress-Fancy</literal>."
 msgstr ""
 

+ 11 - 4
doc/po/de.po

@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: apt-doc 0.9.16\n"
 "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2014-04-01 14:24+0200\n"
+"POT-Creation-Date: 2014-04-25 13:17+0200\n"
 "PO-Revision-Date: 2014-04-01 14:00+0200\n"
 "Last-Translator: Chris Leick <c.leick@vollbio.de>\n"
 "Language-Team: German <debian-l10n-german@lists.debian.org>\n"
@@ -790,7 +790,7 @@ msgstr ""
 #: apt.8.xml:145
 msgid ""
 "The <command>apt</command> command is meant to be pleasant for end users and "
-"does not need to be backward compatilbe like &apt-get;. Therefore some "
+"does not need to be backward compatible like &apt-get;. Therefore some "
 "options are different:"
 msgstr ""
 
@@ -798,7 +798,7 @@ msgstr ""
 #: apt.8.xml:151
 #, fuzzy
 #| msgid "the <literal>Package:</literal> line"
-msgid "The option <literal>DPkgPM::Progress-Fancy</literal> is enabled."
+msgid "The option <literal>DPkg::Progress-Fancy</literal> is enabled."
 msgstr "die <literal>Package:</literal>-Zeile"
 
 #. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
@@ -1766,11 +1766,18 @@ msgstr ""
 # FIXME s/Item/Items/
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-get.8.xml:535
+#, fuzzy
+#| msgid ""
+#| "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.  Configuration Item: <literal>DpkgPM::Progress</literal> and "
+#| "<literal>Dpkg::Progress-Fancy</literal>."
 msgid ""
 "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.  Configuration "
-"Item: <literal>DpkgPM::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
+"Item: <literal>Dpkg::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
 "literal>."
 msgstr ""
 "zeigt benutzerfreundliche Fortschrittsinformationen im Terminalfenster, wenn "

+ 4 - 4
doc/po/es.po

@@ -38,7 +38,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: apt 0.9.7.1\n"
 "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2014-04-01 14:24+0200\n"
+"POT-Creation-Date: 2014-04-25 13:17+0200\n"
 "PO-Revision-Date: 2014-04-01 14:00+0200\n"
 "Last-Translator: Omar Campagne <ocampagne@gmail.com>\n"
 "Language-Team: Debian l10n Spanish <debian-l10n-spanish@lists.debian.org>\n"
@@ -874,7 +874,7 @@ msgstr ""
 #: apt.8.xml:145
 msgid ""
 "The <command>apt</command> command is meant to be pleasant for end users and "
-"does not need to be backward compatilbe like &apt-get;. Therefore some "
+"does not need to be backward compatible like &apt-get;. Therefore some "
 "options are different:"
 msgstr ""
 
@@ -882,7 +882,7 @@ msgstr ""
 #: apt.8.xml:151
 #, fuzzy
 #| msgid "the <literal>Package:</literal> line"
-msgid "The option <literal>DPkgPM::Progress-Fancy</literal> is enabled."
+msgid "The option <literal>DPkg::Progress-Fancy</literal> is enabled."
 msgstr "La línea <literal>Package:</literal>"
 
 #. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
@@ -1883,7 +1883,7 @@ msgid ""
 "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.  Configuration "
-"Item: <literal>DpkgPM::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
+"Item: <literal>Dpkg::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
 "literal>."
 msgstr ""
 

+ 4 - 4
doc/po/fr.po

@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2014-04-01 14:24+0200\n"
+"POT-Creation-Date: 2014-04-25 13:17+0200\n"
 "PO-Revision-Date: 2014-04-01 14:00+0200\n"
 "Last-Translator: Christian Perrier <bubulle@debian.org>\n"
 "Language-Team: French <debian-l10n-french@lists.debian.org>\n"
@@ -785,7 +785,7 @@ msgstr ""
 #: apt.8.xml:145
 msgid ""
 "The <command>apt</command> command is meant to be pleasant for end users and "
-"does not need to be backward compatilbe like &apt-get;. Therefore some "
+"does not need to be backward compatible like &apt-get;. Therefore some "
 "options are different:"
 msgstr ""
 
@@ -793,7 +793,7 @@ msgstr ""
 #: apt.8.xml:151
 #, fuzzy
 #| msgid "the <literal>Package:</literal> line"
-msgid "The option <literal>DPkgPM::Progress-Fancy</literal> is enabled."
+msgid "The option <literal>DPkg::Progress-Fancy</literal> is enabled."
 msgstr "la ligne <literal>Package:</literal>"
 
 #. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
@@ -1804,7 +1804,7 @@ msgid ""
 "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.  Configuration "
-"Item: <literal>DpkgPM::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
+"Item: <literal>Dpkg::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
 "literal>."
 msgstr ""
 

+ 11 - 4
doc/po/it.po

@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2014-04-01 14:24+0200\n"
+"POT-Creation-Date: 2014-04-25 13:17+0200\n"
 "PO-Revision-Date: 2014-04-01 14:00+0200\n"
 "Last-Translator: Beatrice Torracca <beatricet@libero.it>\n"
 "Language-Team: Italian <debian-l10n-italian@lists.debian.org>\n"
@@ -837,7 +837,7 @@ msgstr ""
 #: apt.8.xml:145
 msgid ""
 "The <command>apt</command> command is meant to be pleasant for end users and "
-"does not need to be backward compatilbe like &apt-get;. Therefore some "
+"does not need to be backward compatible like &apt-get;. Therefore some "
 "options are different:"
 msgstr ""
 
@@ -845,7 +845,7 @@ msgstr ""
 #: apt.8.xml:151
 #, fuzzy
 #| msgid "the <literal>Package:</literal> line"
-msgid "The option <literal>DPkgPM::Progress-Fancy</literal> is enabled."
+msgid "The option <literal>DPkg::Progress-Fancy</literal> is enabled."
 msgstr "la riga <literal>Package:</literal>"
 
 #. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
@@ -1802,11 +1802,18 @@ msgstr ""
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-get.8.xml:535
+#, fuzzy
+#| msgid ""
+#| "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.  Configuration Item: <literal>DpkgPM::Progress</literal> and "
+#| "<literal>Dpkg::Progress-Fancy</literal>."
 msgid ""
 "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.  Configuration "
-"Item: <literal>DpkgPM::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
+"Item: <literal>Dpkg::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
 "literal>."
 msgstr ""
 "Mostra informazioni sul progresso facili da leggere nella finestra del "

+ 4 - 4
doc/po/ja.po

@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: apt 0.7.25.3\n"
 "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2014-04-01 14:24+0200\n"
+"POT-Creation-Date: 2014-04-25 13:17+0200\n"
 "PO-Revision-Date: 2014-04-01 14:00+0200\n"
 "Last-Translator: KURASAWA Nozomu <nabetaro@debian.or.jp>\n"
 "Language-Team: Debian Japanese List <debian-japanese@lists.debian.org>\n"
@@ -830,7 +830,7 @@ msgstr ""
 #: apt.8.xml:145
 msgid ""
 "The <command>apt</command> command is meant to be pleasant for end users and "
-"does not need to be backward compatilbe like &apt-get;. Therefore some "
+"does not need to be backward compatible like &apt-get;. Therefore some "
 "options are different:"
 msgstr ""
 
@@ -838,7 +838,7 @@ msgstr ""
 #: apt.8.xml:151
 #, fuzzy
 #| msgid "the <literal>Package:</literal> line"
-msgid "The option <literal>DPkgPM::Progress-Fancy</literal> is enabled."
+msgid "The option <literal>DPkg::Progress-Fancy</literal> is enabled."
 msgstr "<literal>Package:</literal> 行"
 
 #. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
@@ -1793,7 +1793,7 @@ msgid ""
 "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.  Configuration "
-"Item: <literal>DpkgPM::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
+"Item: <literal>Dpkg::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
 "literal>."
 msgstr ""
 

+ 4 - 4
doc/po/pl.po

@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: apt 0.9.7.3\n"
 "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2014-04-01 14:24+0200\n"
+"POT-Creation-Date: 2014-04-25 13:17+0200\n"
 "PO-Revision-Date: 2014-04-01 13:59+0200\n"
 "Last-Translator: Robert Luberda <robert@debian.org>\n"
 "Language-Team: Polish <manpages-pl-list@lists.sourceforge.net>\n"
@@ -833,7 +833,7 @@ msgstr ""
 #: apt.8.xml:145
 msgid ""
 "The <command>apt</command> command is meant to be pleasant for end users and "
-"does not need to be backward compatilbe like &apt-get;. Therefore some "
+"does not need to be backward compatible like &apt-get;. Therefore some "
 "options are different:"
 msgstr ""
 
@@ -841,7 +841,7 @@ msgstr ""
 #: apt.8.xml:151
 #, fuzzy
 #| msgid "the <literal>Package:</literal> line"
-msgid "The option <literal>DPkgPM::Progress-Fancy</literal> is enabled."
+msgid "The option <literal>DPkg::Progress-Fancy</literal> is enabled."
 msgstr "linia <literal>Package:</literal>"
 
 #. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
@@ -1882,7 +1882,7 @@ msgid ""
 "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.  Configuration "
-"Item: <literal>DpkgPM::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
+"Item: <literal>Dpkg::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
 "literal>."
 msgstr ""
 

+ 4 - 4
doc/po/pt.po

@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: apt 0.9.7.1\n"
 "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2014-04-01 14:24+0200\n"
+"POT-Creation-Date: 2014-04-25 13:17+0200\n"
 "PO-Revision-Date: 2014-04-01 13:59+0200\n"
 "Last-Translator: Américo Monteiro <a_monteiro@netcabo.pt>\n"
 "Language-Team: Portuguese <l10n@debianpt.org>\n"
@@ -834,7 +834,7 @@ msgstr ""
 #: apt.8.xml:145
 msgid ""
 "The <command>apt</command> command is meant to be pleasant for end users and "
-"does not need to be backward compatilbe like &apt-get;. Therefore some "
+"does not need to be backward compatible like &apt-get;. Therefore some "
 "options are different:"
 msgstr ""
 
@@ -842,7 +842,7 @@ msgstr ""
 #: apt.8.xml:151
 #, fuzzy
 #| msgid "the <literal>Package:</literal> line"
-msgid "The option <literal>DPkgPM::Progress-Fancy</literal> is enabled."
+msgid "The option <literal>DPkg::Progress-Fancy</literal> is enabled."
 msgstr "a linha <literal>Package:</literal>"
 
 #. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
@@ -1831,7 +1831,7 @@ msgid ""
 "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.  Configuration "
-"Item: <literal>DpkgPM::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
+"Item: <literal>Dpkg::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
 "literal>."
 msgstr ""
 

+ 4 - 4
doc/po/pt_BR.po

@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: apt\n"
 "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2014-04-01 14:24+0200\n"
+"POT-Creation-Date: 2014-04-25 13:17+0200\n"
 "PO-Revision-Date: 2004-09-20 17:02+0000\n"
 "Last-Translator: André Luís Lopes <andrelop@debian.org>\n"
 "Language-Team: <debian-l10n-portuguese@lists.debian.org>\n"
@@ -632,14 +632,14 @@ msgstr ""
 #: apt.8.xml:145
 msgid ""
 "The <command>apt</command> command is meant to be pleasant for end users and "
-"does not need to be backward compatilbe like &apt-get;. Therefore some "
+"does not need to be backward compatible like &apt-get;. Therefore some "
 "options are different:"
 msgstr ""
 
 #. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
 #: apt.8.xml:151
 #, fuzzy
-msgid "The option <literal>DPkgPM::Progress-Fancy</literal> is enabled."
+msgid "The option <literal>DPkg::Progress-Fancy</literal> is enabled."
 msgstr "a linha <literal>Package:</literal>"
 
 #. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
@@ -1278,7 +1278,7 @@ msgid ""
 "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.  Configuration "
-"Item: <literal>DpkgPM::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
+"Item: <literal>Dpkg::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
 "literal>."
 msgstr ""
 

+ 2 - 2
ftparchive/override.cc

@@ -37,7 +37,7 @@ bool Override::ReadOverride(string const &File,bool const &Source)
    if (F == 0)
       return _error->Errno("fopen",_("Unable to open %s"),File.c_str());
    
-   char Line[500];
+   char Line[1000];
    unsigned long long Counter = 0;
    while (fgets(Line,sizeof(Line),F) != 0)
    {
@@ -141,7 +141,7 @@ bool Override::ReadExtraOverride(string const &File,bool const &/*Source*/)
    if (F == 0)
       return _error->Errno("fopen",_("Unable to open %s"),File.c_str());
   
-   char Line[500];
+   char Line[1000];
    unsigned long long Counter = 0;
    while (fgets(Line,sizeof(Line),F) != 0)
    {

+ 31 - 57
methods/http.cc

@@ -45,6 +45,7 @@
 #include <stdio.h>
 #include <errno.h>
 #include <iostream>
+#include <sstream>
 
 #include "config.h"
 #include "connect.h"
@@ -667,22 +668,13 @@ void HttpMethod::SendReq(FetchItem *Itm)
    URI Uri = Itm->Uri;
 
    // The HTTP server expects a hostname with a trailing :port
-   char Buf[1000];
+   std::stringstream Req;
    string ProperHost;
 
    if (Uri.Host.find(':') != string::npos)
       ProperHost = '[' + Uri.Host + ']';
    else
       ProperHost = Uri.Host;
-   if (Uri.Port != 0)
-   {
-      sprintf(Buf,":%u",Uri.Port);
-      ProperHost += Buf;
-   }   
-      
-   // Just in case.
-   if (Itm->Uri.length() >= sizeof(Buf))
-       abort();
 
    /* RFC 2616 §5.1.2 requires absolute URIs for requests to proxies,
       but while its a must for all servers to accept absolute URIs,
@@ -701,27 +693,20 @@ void HttpMethod::SendReq(FetchItem *Itm)
       in 1.1, can cause problems with proxies, and we are an HTTP/1.1
       client anyway.
       C.f. https://tools.ietf.org/wg/httpbis/trac/ticket/158 */
-   sprintf(Buf,"GET %s HTTP/1.1\r\nHost: %s\r\n",
-	   requesturi.c_str(),ProperHost.c_str());
+   Req << "GET " << requesturi << " HTTP/1.1\r\n";
+   if (Uri.Port != 0)
+      Req << "Host: " << ProperHost << ":" << Uri.Port << "\r\n";
+   else
+      Req << "Host: " << ProperHost << "\r\n";
 
    // generate a cache control header (if needed)
-   if (_config->FindB("Acquire::http::No-Cache",false) == true) 
-   {
-      strcat(Buf,"Cache-Control: no-cache\r\nPragma: no-cache\r\n");
-   }
-   else
-   {
-      if (Itm->IndexFile == true) 
-      {
-	 sprintf(Buf+strlen(Buf),"Cache-Control: max-age=%u\r\n",
-		 _config->FindI("Acquire::http::Max-Age",0));
-      }
-      else
-      {
-	 if (_config->FindB("Acquire::http::No-Store",false) == true)
-	    strcat(Buf,"Cache-Control: no-store\r\n");
-      }
-   }
+   if (_config->FindB("Acquire::http::No-Cache",false) == true)
+      Req << "Cache-Control: no-cache\r\n"
+	 << "Pragma: no-cache\r\n";
+   else if (Itm->IndexFile == true)
+      Req << "Cache-Control: max-age=" << _config->FindI("Acquire::http::Max-Age",0) << "\r\n";
+   else if (_config->FindB("Acquire::http::No-Store",false) == true)
+      Req << "Cache-Control: no-store\r\n";
 
    // If we ask for uncompressed files servers might respond with content-
    // negotiation which lets us end up with compressed files we do not support,
@@ -733,46 +718,35 @@ void HttpMethod::SendReq(FetchItem *Itm)
       size_t const filepos = Itm->Uri.find_last_of('/');
       string const file = Itm->Uri.substr(filepos + 1);
       if (flExtension(file) == file)
-	 strcat(Buf,"Accept: text/*\r\n");
+	 Req << "Accept: text/*\r\n";
    }
 
-   string Req = Buf;
-
-   // Check for a partial file
+   // Check for a partial file and send if-queries accordingly
    struct stat SBuf;
    if (stat(Itm->DestFile.c_str(),&SBuf) >= 0 && SBuf.st_size > 0)
-   {
-      // In this case we send an if-range query with a range header
-      sprintf(Buf,"Range: bytes=%lli-\r\nIf-Range: %s\r\n",(long long)SBuf.st_size,
-	      TimeRFC1123(SBuf.st_mtime).c_str());
-      Req += Buf;
-   }
-   else
-   {
-      if (Itm->LastModified != 0)
-      {
-	 sprintf(Buf,"If-Modified-Since: %s\r\n",TimeRFC1123(Itm->LastModified).c_str());
-	 Req += Buf;
-      }
-   }
+      Req << "Range: bytes=" << SBuf.st_size << "-\r\n"
+	 << "If-Range: " << TimeRFC1123(SBuf.st_mtime) << "\r\n";
+   else if (Itm->LastModified != 0)
+      Req << "If-Modified-Since: " << TimeRFC1123(Itm->LastModified).c_str() << "\r\n";
 
    if (Server->Proxy.User.empty() == false || Server->Proxy.Password.empty() == false)
-      Req += string("Proxy-Authorization: Basic ") + 
-          Base64Encode(Server->Proxy.User + ":" + Server->Proxy.Password) + "\r\n";
+      Req << "Proxy-Authorization: Basic "
+	 << Base64Encode(Server->Proxy.User + ":" + Server->Proxy.Password) << "\r\n";
 
    maybe_add_auth (Uri, _config->FindFile("Dir::Etc::netrc"));
    if (Uri.User.empty() == false || Uri.Password.empty() == false)
-   {
-      Req += string("Authorization: Basic ") + 
-          Base64Encode(Uri.User + ":" + Uri.Password) + "\r\n";
-   }
-   Req += "User-Agent: " + _config->Find("Acquire::http::User-Agent",
-		"Debian APT-HTTP/1.3 (" PACKAGE_VERSION ")") + "\r\n\r\n";
-   
+      Req << "Authorization: Basic "
+	 << Base64Encode(Uri.User + ":" + Uri.Password) << "\r\n";
+
+   Req << "User-Agent: " << _config->Find("Acquire::http::User-Agent",
+		"Debian APT-HTTP/1.3 (" PACKAGE_VERSION ")") << "\r\n";
+
+   Req << "\r\n";
+
    if (Debug == true)
       cerr << Req << endl;
 
-   Server->WriteResponse(Req);
+   Server->WriteResponse(Req.str());
 }
 									/*}}}*/
 // HttpMethod::Configuration - Handle a configuration message		/*{{{*/

+ 5 - 5
methods/https.cc

@@ -325,11 +325,11 @@ bool HttpsMethod::Fetch(FetchItem *Itm)
    // if we have the file send an if-range query with a range header
    if (stat(Itm->DestFile.c_str(),&SBuf) >= 0 && SBuf.st_size > 0)
    {
-      char Buf[1000];
-      sprintf(Buf, "Range: bytes=%li-", (long) SBuf.st_size);
-      headers = curl_slist_append(headers, Buf);
-      sprintf(Buf, "If-Range: %s", TimeRFC1123(SBuf.st_mtime).c_str());
-      headers = curl_slist_append(headers, Buf);
+      std::string Buf;
+      strprintf(Buf, "Range: bytes=%lli-", (long long) SBuf.st_size);
+      headers = curl_slist_append(headers, Buf.c_str());
+      strprintf(Buf, "If-Range: %s", TimeRFC1123(SBuf.st_mtime).c_str());
+      headers = curl_slist_append(headers, Buf.c_str());
    }
    else if(Itm->LastModified > 0)
    {

Разлика између датотеке није приказан због своје велике величине
+ 839 - 831
po/ar.po


Разлика између датотеке није приказан због своје велике величине
+ 941 - 933
po/ast.po


Разлика између датотеке није приказан због своје велике величине
+ 952 - 944
po/bg.po


Разлика између датотеке није приказан због своје велике величине
+ 789 - 781
po/bs.po


Разлика између датотеке није приказан због своје велике величине
+ 964 - 956
po/ca.po


Разлика између датотеке није приказан због своје велике величине
+ 930 - 921
po/cs.po


Разлика између датотеке није приказан због своје велике величине
+ 946 - 938
po/cy.po


Разлика између датотеке није приказан због своје велике величине
+ 934 - 926
po/da.po


Разлика између датотеке није приказан због своје велике величине
+ 970 - 962
po/de.po


Разлика између датотеке није приказан због своје велике величине
+ 933 - 925
po/dz.po


Разлика између датотеке није приказан због своје велике величине
+ 931 - 923
po/el.po


Разлика између датотеке није приказан због своје велике величине
+ 959 - 951
po/es.po


Разлика између датотеке није приказан због своје велике величине
+ 934 - 926
po/eu.po


Разлика између датотеке није приказан због своје велике величине
+ 934 - 926
po/fi.po


Разлика између датотеке није приказан због своје велике величине
+ 972 - 964
po/fr.po


Разлика између датотеке није приказан због своје велике величине
+ 958 - 950
po/gl.po


Разлика између датотеке није приказан због своје велике величине
+ 939 - 931
po/hu.po


Разлика између датотеке није приказан због своје велике величине
+ 960 - 952
po/it.po


Разлика између датотеке није приказан због своје велике величине
+ 955 - 947
po/ja.po


Разлика између датотеке није приказан због своје велике величине
+ 926 - 918
po/km.po


Разлика између датотеке није приказан због своје велике величине
+ 940 - 933
po/ko.po


Разлика између датотеке није приказан због своје велике величине
+ 851 - 843
po/ku.po


Разлика између датотеке није приказан због своје велике величине
+ 839 - 831
po/lt.po


Разлика између датотеке није приказан због своје велике величине
+ 929 - 921
po/mr.po


Разлика између датотеке није приказан због своје велике величине
+ 935 - 927
po/nb.po


Разлика између датотеке није приказан због своје велике величине
+ 927 - 919
po/ne.po


Разлика између датотеке није приказан због своје велике величине
+ 962 - 954
po/nl.po


Разлика између датотеке није приказан због своје велике величине
+ 932 - 924
po/nn.po


Разлика између датотеке није приказан због своје велике величине
+ 965 - 956
po/pl.po


Разлика између датотеке није приказан због своје велике величине
+ 963 - 955
po/pt.po


Разлика између датотеке није приказан због своје велике величине
+ 938 - 930
po/pt_BR.po


Разлика између датотеке није приказан због своје велике величине
+ 940 - 931
po/ro.po


Разлика између датотеке није приказан због своје велике величине
+ 954 - 945
po/ru.po


Разлика између датотеке није приказан због своје велике величине
+ 929 - 920
po/sk.po


Разлика између датотеке није приказан због своје велике величине
+ 939 - 929
po/sl.po


Разлика између датотеке није приказан због своје велике величине
+ 945 - 937
po/sv.po


Разлика између датотеке није приказан због своје велике величине
+ 1024 - 987
po/th.po


Разлика између датотеке није приказан због своје велике величине
+ 940 - 932
po/tl.po


Разлика између датотеке није приказан због своје велике величине
+ 935 - 927
po/tr.po


Разлика између датотеке није приказан због своје велике величине
+ 941 - 932
po/uk.po


Разлика између датотеке није приказан због своје велике величине
+ 946 - 938
po/vi.po


Разлика између датотеке није приказан због своје велике величине
+ 938 - 931
po/zh_CN.po



Неке датотеке нису приказане због велике количине промена