diff options
author | David Kalnischkies <kalnischkies@gmail.com> | 2010-08-10 16:04:17 +0200 |
---|---|---|
committer | David Kalnischkies <kalnischkies@gmail.com> | 2010-08-10 16:04:17 +0200 |
commit | b472c6b08e0bfd1ea94390cd525cef579ea3ccee (patch) | |
tree | 721bcf9bbe68590dc6409f4ba2bf85e2fac6a81f /apt-pkg | |
parent | 47f6d1b72bc883ecdc00542da4c824a5c4fb79fa (diff) | |
parent | 22041bd2864b8d0b401b45dde9eda4003a11fec4 (diff) |
merge with debian-experimental-ma
* Swedish translation update. Closes: #592366
* apt-pkg/pkgcache.cc:
- re-evaluate the architectures cache when the cache is (re)opened
* apt-pkg/cdrom.cc:
- fix off-by-one error in DropBinaryArch
* apt-pkg/contrib/fileutl.cc:
- Add WriteAtomic mode.
- Revert WriteEmpty to old behavior (LP: #613211)
* apt-pkg, methods:
- Convert users of WriteEmpty to WriteAtomic.
* apt-pkg/depcache.cc:
- Only try upgrade for Breaks if there is a newer version, otherwise
handle it as Conflicts (by removing it) (helps for #591882).
* debian/control:
- Add dependency on gnupg to apt, apt-key uses it.
Diffstat (limited to 'apt-pkg')
-rw-r--r-- | apt-pkg/cdrom.cc | 2 | ||||
-rw-r--r-- | apt-pkg/contrib/fileutl.cc | 11 | ||||
-rw-r--r-- | apt-pkg/contrib/fileutl.h | 3 | ||||
-rw-r--r-- | apt-pkg/depcache.cc | 11 | ||||
-rw-r--r-- | apt-pkg/indexcopy.cc | 6 | ||||
-rw-r--r-- | apt-pkg/pkgcache.cc | 5 | ||||
-rw-r--r-- | apt-pkg/pkgcachegen.cc | 4 |
7 files changed, 29 insertions, 13 deletions
diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc index e3e0027fc..0e36f44a2 100644 --- a/apt-pkg/cdrom.cc +++ b/apt-pkg/cdrom.cc @@ -229,7 +229,7 @@ bool pkgCdrom::DropBinaryArch(vector<string> &List) // Between Start and End is the architecture Start += 8; if ((End = strstr(Start,"/")) != 0 && Start != End && - APT::Configuration::checkArchitecture(string(Start, --End)) == true) + APT::Configuration::checkArchitecture(string(Start, End)) == true) continue; // okay, architecture is accepted // not accepted -> Erase it diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc index 2a3b8a87d..91aecee65 100644 --- a/apt-pkg/contrib/fileutl.cc +++ b/apt-pkg/contrib/fileutl.cc @@ -669,7 +669,7 @@ bool FileFd::Open(string FileName,OpenMode Mode, unsigned long Perms) } break; - case WriteEmpty: + case WriteAtomic: { Flags |= Replace; char *name = strdup((FileName + ".XXXXXX").c_str()); @@ -678,6 +678,15 @@ bool FileFd::Open(string FileName,OpenMode Mode, unsigned long Perms) free(name); break; } + + case WriteEmpty: + { + struct stat Buf; + if (lstat(FileName.c_str(),&Buf) == 0 && S_ISLNK(Buf.st_mode)) + unlink(FileName.c_str()); + iFd = open(FileName.c_str(),O_RDWR | O_CREAT | O_TRUNC,Perms); + break; + } case WriteExists: iFd = open(FileName.c_str(),O_RDWR); diff --git a/apt-pkg/contrib/fileutl.h b/apt-pkg/contrib/fileutl.h index 62705478d..cb4655798 100644 --- a/apt-pkg/contrib/fileutl.h +++ b/apt-pkg/contrib/fileutl.h @@ -46,7 +46,8 @@ class FileFd gzFile gz; public: - enum OpenMode {ReadOnly,WriteEmpty,WriteExists,WriteAny,WriteTemp,ReadOnlyGzip}; + enum OpenMode {ReadOnly,WriteEmpty,WriteExists,WriteAny,WriteTemp,ReadOnlyGzip, + WriteAtomic}; inline bool Read(void *To,unsigned long Size,bool AllowEof) { diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index bc663a8e9..00bf68af1 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -227,7 +227,7 @@ bool pkgDepCache::writeStateFile(OpProgress *prog, bool InstalledOnly) /*{{{*/ // if it does not exist, create a empty one if(!FileExists(state)) { - StateFile.Open(state, FileFd::WriteEmpty); + StateFile.Open(state, FileFd::WriteAtomic); StateFile.Close(); } @@ -1425,10 +1425,13 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, VerIterator Ver(*this,*I); PkgIterator Pkg = Ver.ParentPkg(); - if (Start->Type != Dep::DpkgBreaks) - MarkDelete(Pkg,false,Depth + 1, false); - else if (PkgState[Pkg->ID].CandidateVer != *I) + + + if (PkgState[Pkg->ID].CandidateVer != *I && + Start->Type == Dep::DpkgBreaks) MarkInstall(Pkg,true,Depth + 1, false, ForceImportantDeps); + else + MarkDelete(Pkg,false,Depth + 1, false); } continue; } diff --git a/apt-pkg/indexcopy.cc b/apt-pkg/indexcopy.cc index 621c18716..b4e587d7b 100644 --- a/apt-pkg/indexcopy.cc +++ b/apt-pkg/indexcopy.cc @@ -134,7 +134,7 @@ bool IndexCopy::CopyPackages(string CDROM,string Name,vector<string> &List, TargetF += URItoFileName(S); if (_config->FindB("APT::CDROM::NoAct",false) == true) TargetF = "/dev/null"; - FileFd Target(TargetF,FileFd::WriteEmpty); + FileFd Target(TargetF,FileFd::WriteAtomic); FILE *TargetFl = fdopen(dup(Target.Fd()),"w"); if (_error->PendingError() == true) return false; @@ -565,7 +565,7 @@ bool SigVerify::CopyMetaIndex(string CDROM, string CDName, /*{{{*/ FileFd Target; FileFd Rel; - Target.Open(TargetF,FileFd::WriteEmpty); + Target.Open(TargetF,FileFd::WriteAtomic); Rel.Open(prefix + file,FileFd::ReadOnly); if (_error->PendingError() == true) return false; @@ -840,7 +840,7 @@ bool TranslationsCopy::CopyTranslations(string CDROM,string Name, /*{{{*/ TargetF += URItoFileName(S); if (_config->FindB("APT::CDROM::NoAct",false) == true) TargetF = "/dev/null"; - FileFd Target(TargetF,FileFd::WriteEmpty); + FileFd Target(TargetF,FileFd::WriteAtomic); FILE *TargetFl = fdopen(dup(Target.Fd()),"w"); if (_error->PendingError() == true) return false; diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc index 2b051cbb0..bb28a33ca 100644 --- a/apt-pkg/pkgcache.cc +++ b/apt-pkg/pkgcache.cc @@ -111,7 +111,10 @@ bool pkgCache::Header::CheckSizes(Header &Against) const /* */ pkgCache::pkgCache(MMap *Map, bool DoMap) : Map(*Map) { - MultiArchEnabled = APT::Configuration::getArchitectures().size() > 1; + // call getArchitectures() with cached=false to ensure that the + // architectures cache is re-evaulated. this is needed in cases + // when the APT::Architecture field changes between two cache creations + MultiArchEnabled = APT::Configuration::getArchitectures(false).size() > 1; if (DoMap == true) ReMap(); } diff --git a/apt-pkg/pkgcachegen.cc b/apt-pkg/pkgcachegen.cc index c9a9a753c..ed35174bb 100644 --- a/apt-pkg/pkgcachegen.cc +++ b/apt-pkg/pkgcachegen.cc @@ -1192,7 +1192,7 @@ bool pkgCacheGenerator::MakeStatusCache(pkgSourceList &List,OpProgress *Progress if (Writeable == true && CacheFile.empty() == false) { unlink(CacheFile.c_str()); - CacheF = new FileFd(CacheFile,FileFd::WriteEmpty); + CacheF = new FileFd(CacheFile,FileFd::WriteAtomic); fchmod(CacheF->Fd(),0644); Map = CreateDynamicMMap(CacheF, MMap::Public); if (_error->PendingError() == true) @@ -1254,7 +1254,7 @@ bool pkgCacheGenerator::MakeStatusCache(pkgSourceList &List,OpProgress *Progress // Write it back if (Writeable == true && SrcCacheFile.empty() == false) { - FileFd SCacheF(SrcCacheFile,FileFd::WriteEmpty); + FileFd SCacheF(SrcCacheFile,FileFd::WriteAtomic); if (_error->PendingError() == true) return false; |