summaryrefslogtreecommitdiff
path: root/cmdline/apt-get.cc
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2007-03-14 12:41:37 +0100
committerMichael Vogt <michael.vogt@ubuntu.com>2007-03-14 12:41:37 +0100
commite4b74e4b347ccde887a3d7d8a585dcf264e13305 (patch)
treea39975c1afd4b5f0b2df19baf1a727873d06289e /cmdline/apt-get.cc
parent92b9551f03035f5a875a44588a318773f652da6a (diff)
* cmdline/apt-get.cc:
- apt-get install foo for a already installed package foo that is marked "auto" will clear the auto-flag
Diffstat (limited to 'cmdline/apt-get.cc')
-rw-r--r--cmdline/apt-get.cc21
1 files changed, 21 insertions, 0 deletions
diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc
index 6c1b915ab..8f4e17898 100644
--- a/cmdline/apt-get.cc
+++ b/cmdline/apt-get.cc
@@ -1484,6 +1484,7 @@ bool DoInstall(CommandLine &CmdL)
if (Cache->BrokenCount() != 0)
BrokenFix = true;
+ unsigned int AutoMarkChanged = 0;
unsigned int ExpectedInst = 0;
unsigned int Packages = 0;
pkgProblemResolver Fix(Cache);
@@ -1606,6 +1607,18 @@ bool DoInstall(CommandLine &CmdL)
return false;
if (TryToInstall(Pkg,Cache,Fix,Remove,BrokenFix,ExpectedInst) == false)
return false;
+
+ // see if we need to fix the auto-mark flag
+ // e.g. apt-get install foo
+ // where foo is marked automatic
+ if(Cache[Pkg].Install() == false &&
+ (Cache[Pkg].Flags & pkgCache::Flag::Auto))
+ {
+ ioprintf(c1out,_("%s set to manual installed.\n"),
+ Pkg.Name());
+ Cache->MarkAuto(Pkg,false);
+ AutoMarkChanged++;
+ }
}
}
@@ -1768,6 +1781,14 @@ bool DoInstall(CommandLine &CmdL)
}
+ // if nothing changed in the cache, but only the automark information
+ // we write the StateFile here, otherwise it will be written in
+ // cache.commit()
+ if (AutoMarkChanged > 0 &&
+ Cache->DelCount() == 0 && Cache->InstCount() == 0 &&
+ Cache->BadCount() == 0)
+ Cache->writeStateFile(NULL);
+
// See if we need to prompt
if (Cache->InstCount() == ExpectedInst && Cache->DelCount() == 0)
return InstallPackages(Cache,false,false);