diff options
Diffstat (limited to 'cmdline')
-rw-r--r-- | cmdline/apt-get.cc | 64 | ||||
-rwxr-xr-x | cmdline/apt-mark | 3 |
2 files changed, 66 insertions, 1 deletions
diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index b43164c2f..8f9faf158 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -1315,6 +1315,10 @@ pkgSrcRecords::Parser *FindSrc(const char *Name,pkgRecords &Recs, break; fuzzy = true; Ver = Pkg.VersionList(); + // exit right away from the Pkg.VersionList() loop if we + // don't have any versions + if (Ver.end() == true) + break; } // We match against a concrete version (or a part of this version) if (VerTag.empty() == false && @@ -2009,6 +2013,60 @@ bool DoInstall(CommandLine &CmdL) return InstallPackages(Cache,false); } + +/* show automatically installed packages. */ +bool DoShowAuto(CommandLine &CmdL) +{ + OpProgress progress; + pkgCacheFile Cache; + if (Cache.Open(progress, false) == false) + return false; + + for (pkgCache::PkgIterator P = Cache->PkgBegin(); P.end() == false; P++) + if (Cache[P].Flags & pkgCache::Flag::Auto) + ioprintf(c1out,_("%s\n"), P.Name()); + return true; +} + +/* mark packages as automatically/manually installed. */ +bool DoMarkAuto(CommandLine &CmdL) +{ + bool Action = true; + int AutoMarkChanged = 0; + OpTextProgress progress; + CacheFile Cache; + if (Cache.Open() == false) + return false; + + if (strcasecmp(CmdL.FileList[0],"markauto") == 0) + Action = true; + else if (strcasecmp(CmdL.FileList[0],"unmarkauto") == 0) + Action = false; + + for (const char **I = CmdL.FileList + 1; *I != 0; I++) + { + const char *S = *I; + // Locate the package + pkgCache::PkgIterator Pkg = Cache->FindPkg(S); + if (Pkg.end() == true) { + return _error->Error(_("Couldn't find package %s"),S); + } + else + { + if (!Action) + ioprintf(c1out,_("%s set to manually installed.\n"), Pkg.Name()); + else + ioprintf(c1out,_("%s set to automatically installed.\n"), + Pkg.Name()); + + Cache->MarkAuto(Pkg,Action); + AutoMarkChanged++; + } + } + if (AutoMarkChanged && ! _config->FindB("APT::Get::Simulate",false)) + return Cache->writeStateFile(NULL); + return false; +} /*}}}*/ // DoDistUpgrade - Automatic smart upgrader /*{{{*/ // --------------------------------------------------------------------- @@ -2794,6 +2852,9 @@ bool ShowHelp(CommandLine &CmdL) " clean - Erase downloaded archive files\n" " autoclean - Erase old downloaded archive files\n" " check - Verify that there are no broken dependencies\n" + " markauto - Mark the given packages as automatically installed\n" + " unmarkauto - Mark the given packages as manually installed\n" + " showauto - Display a list of automatically installed packages\n" "\n" "Options:\n" " -h This help text.\n" @@ -2900,6 +2961,9 @@ int main(int argc,const char *argv[]) /*{{{*/ {"purge",&DoInstall}, {"autoremove",&DoInstall}, {"purge",&DoInstall}, + {"showauto",&DoShowAuto}, + {"markauto",&DoMarkAuto}, + {"unmarkauto",&DoMarkAuto}, {"dist-upgrade",&DoDistUpgrade}, {"dselect-upgrade",&DoDSelectUpgrade}, {"build-dep",&DoBuildDep}, diff --git a/cmdline/apt-mark b/cmdline/apt-mark index 12768b708..c64d4356c 100755 --- a/cmdline/apt-mark +++ b/cmdline/apt-mark @@ -8,7 +8,7 @@ import os.path try: import apt_pkg except ImportError: - print "Error importing apt_pkg, is python-apt installed?" + print >> sys.stderr, "Error importing apt_pkg, is python-apt installed?" sys.exit(1) actions = { "markauto" : 1, @@ -68,6 +68,7 @@ if __name__ == "__main__": # option parsing parser = OptionParser() parser.usage = "%prog [options] {markauto|unmarkauto} packages..." + parser.epilog = "apt-mark is deprecated, use apt-get markauto/unmarkauto." parser.add_option("-f", "--file", action="store", type="string", dest="filename", help="read/write a different file") |