summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2006-09-19 18:28:47 +0200
committerMichael Vogt <michael.vogt@ubuntu.com>2006-09-19 18:28:47 +0200
commitc64eacb78ffcdcd26602e9598b953f801724968c (patch)
tree15c45466724ecc6133ac63d8dc7c8da574474f66
parent47e7ebb340eafcd06a5be6b92ec1b604e1d33f92 (diff)
parent39cc1bbdd0faa13dcb150b573f56cd2dd64fa460 (diff)
* merged from apt--tasks
-rw-r--r--cmdline/apt-get.cc86
-rw-r--r--configure.in2
-rw-r--r--debian/changelog7
-rw-r--r--po/apt-all.pot7
4 files changed, 57 insertions, 45 deletions
diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc
index 0c2e15d7e..6ea0d3727 100644
--- a/cmdline/apt-get.cc
+++ b/cmdline/apt-get.cc
@@ -1499,55 +1499,46 @@ bool DoUpgrade(CommandLine &CmdL)
// DoInstallTask - Install task from the command line /*{{{*/
// ---------------------------------------------------------------------
/* Install named task */
-bool DoInstallTask(CommandLine &CmdL)
+bool TryInstallTask(pkgDepCache &Cache, pkgProblemResolver &Fix,
+ bool BrokenFix,
+ unsigned int& ExpectedInst,
+ const char *taskname)
{
const char *start, *end;
pkgCache::PkgIterator Pkg;
+ char buf[64*1024];
+ regex_t Pattern;
- CacheFile Cache;
- if (Cache.OpenForInstall() == false ||
- Cache.CheckDeps(CmdL.FileSize() != 1) == false)
- return false;
-
- // create the records parser
+ // get the records
pkgRecords Recs(Cache);
-
- unsigned int ExpectedInst = 0;
- pkgProblemResolver Fix(Cache);
- char buf[64*1024];
- for (const char **I = CmdL.FileList + 1; *I != 0; I++)
+ // build regexp for the task
+ char S[300];
+ snprintf(S, sizeof(S), "^Task:.*[^a-z]%s[^a-z].*\n", taskname);
+ regcomp(&Pattern,S, REG_EXTENDED | REG_NOSUB | REG_NEWLINE);
+
+ bool found = false;
+ bool res = true;
+ for (Pkg = Cache.PkgBegin(); Pkg.end() == false; Pkg++)
{
- regex_t Pattern;
-
- // build regexp for the task
- char S[300];
- snprintf(S, sizeof(S), "^Task:.*[^a-z]%s[^a-z].*\n", *I);
- regcomp(&Pattern,S, REG_EXTENDED | REG_NOSUB | REG_NEWLINE);
-
- for (Pkg = Cache->PkgBegin(); Pkg.end() == false; Pkg++)
- {
- pkgCache::VerIterator ver = (*Cache)[Pkg].CandidateVerIter(*Cache);
- if(ver.end())
- continue;
- pkgRecords::Parser &parser = Recs.Lookup(ver.FileList());
- parser.GetRec(start,end);
- strncpy(buf, start, end-start);
- buf[end-start] = 0x0;
- if (regexec(&Pattern,buf,0,0,0) != 0)
- continue;
- TryToInstall(Pkg,Cache,Fix,false,true,ExpectedInst);
- }
-
- regfree(&Pattern);
+ pkgCache::VerIterator ver = Cache[Pkg].CandidateVerIter(Cache);
+ if(ver.end())
+ continue;
+ pkgRecords::Parser &parser = Recs.Lookup(ver.FileList());
+ parser.GetRec(start,end);
+ strncpy(buf, start, end-start);
+ buf[end-start] = 0x0;
+ if (regexec(&Pattern,buf,0,0,0) != 0)
+ continue;
+ res &= TryToInstall(Pkg,Cache,Fix,false,BrokenFix,ExpectedInst);
+ found = true;
}
-
- // Call the scored problem resolver
- Fix.InstallProtect();
- Fix.Resolve(true);
- // prompt for install
- return InstallPackages(Cache,false,true);
+ if(!found)
+ _error->Error(_("Couldn't find task %s"),taskname);
+
+ regfree(&Pattern);
+ return res;
}
// DoInstall - Install packages from the command line /*{{{*/
@@ -1572,6 +1563,7 @@ bool DoInstall(CommandLine &CmdL)
bool DefRemove = false;
if (strcasecmp(CmdL.FileList[0],"remove") == 0)
DefRemove = true;
+
else if (strcasecmp(CmdL.FileList[0], "autoremove") == 0)
{
_config->Set("APT::Get::AutomaticRemove", "true");
@@ -1594,6 +1586,18 @@ bool DoInstall(CommandLine &CmdL)
bool Remove = DefRemove;
char *VerTag = 0;
bool VerIsRel = false;
+
+ // this is a task!
+ if (Length >= 1 && S[Length - 1] == '^')
+ {
+ S[--Length] = 0;
+ // tasks must always be confirmed
+ ExpectedInst += 1000;
+ // see if we can install it
+ TryInstallTask(Cache, Fix, BrokenFix, ExpectedInst, S);
+ continue;
+ }
+
while (Cache->FindPkg(S).end() == true)
{
// Handle an optional end tag indicating what to do
@@ -1682,6 +1686,7 @@ bool DoInstall(CommandLine &CmdL)
}
else
{
+
if (VerTag != 0)
if (TryToChangeVer(Pkg,Cache,VerTag,VerIsRel) == false)
return false;
@@ -2707,7 +2712,6 @@ int main(int argc,const char *argv[])
CommandLine::Dispatch Cmds[] = {{"update",&DoUpdate},
{"upgrade",&DoUpgrade},
{"install",&DoInstall},
- {"installtask",&DoInstallTask},
{"remove",&DoInstall},
{"autoremove",&DoInstall},
{"dist-upgrade",&DoDistUpgrade},
diff --git a/configure.in b/configure.in
index 4647f4ffb..baedcad12 100644
--- a/configure.in
+++ b/configure.in
@@ -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)
dnl -- SET THIS TO THE RELEASE VERSION --
-AC_DEFINE_UNQUOTED(VERSION,"0.6.45ubuntu10")
+AC_DEFINE_UNQUOTED(VERSION,"0.6.45ubuntu11")
PACKAGE="apt"
AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
AC_SUBST(PACKAGE)
diff --git a/debian/changelog b/debian/changelog
index 9111149c9..f98e02b1a 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+apt (0.6.45ubuntu11) edgy; urgency=low
+
+ * removed "installtask" and change it so that tasknames can be given
+ with "apt-get install taskname^"
+
+ --
+
apt (0.6.45ubuntu10) edgy; urgency=low
* methods/http.cc:
diff --git a/po/apt-all.pot b/po/apt-all.pot
index a329525a6..de72c430e 100644
--- a/po/apt-all.pot
+++ b/po/apt-all.pot
@@ -1508,11 +1508,12 @@ msgid "File not found"
msgstr ""
#: methods/copy.cc:42 methods/gpgv.cc:281 methods/gzip.cc:133
-#: methods/gzip.cc:142
+#: methods/gzip.cc:142 methods/gzip.cc:134 methods/gzip.cc:143
msgid "Failed to stat"
msgstr ""
#: methods/copy.cc:79 methods/gpgv.cc:278 methods/gzip.cc:139
+#: methods/gzip.cc:140
msgid "Failed to set modification time"
msgstr ""
@@ -2143,12 +2144,12 @@ msgstr ""
msgid "Failed to write temporary StateFile %s"
msgstr ""
-#: apt-pkg/tagfile.cc:85 apt-pkg/tagfile.cc:92
+#: apt-pkg/tagfile.cc:85 apt-pkg/tagfile.cc:92 apt-pkg/tagfile.cc:73
#, c-format
msgid "Unable to parse package file %s (1)"
msgstr ""
-#: apt-pkg/tagfile.cc:186
+#: apt-pkg/tagfile.cc:186 apt-pkg/tagfile.cc:160
#, c-format
msgid "Unable to parse package file %s (2)"
msgstr ""