Explorar o código

* merged the "apt--install-task" branch

Michael Vogt %!s(int64=20) %!d(string=hai) anos
pai
achega
dd09a217ac
Modificáronse 3 ficheiros con 113 adicións e 50 borrados
  1. 58 1
      cmdline/apt-get.cc
  2. 1 0
      debian/changelog
  3. 54 49
      po/apt-all.pot

+ 58 - 1
cmdline/apt-get.cc

@@ -1469,6 +1469,51 @@ bool DoUpgrade(CommandLine &CmdL)
    return InstallPackages(Cache,true);
    return InstallPackages(Cache,true);
 }
 }
 									/*}}}*/
 									/*}}}*/
+// DoInstallTask - Install task from the command line			/*{{{*/
+// ---------------------------------------------------------------------
+/* Install named task */
+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;
+
+   // get the records
+   pkgRecords Recs(Cache);
+
+   // 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++)
+   {
+      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;
+   }
+   
+   if(!found)
+      _error->Error(_("Couldn't find task %s"),taskname);
+
+   regfree(&Pattern);
+   return res;
+}
+
 // DoInstall - Install packages from the command line			/*{{{*/
 // DoInstall - Install packages from the command line			/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* Install named packages */
 /* Install named packages */
@@ -1510,6 +1555,18 @@ bool DoInstall(CommandLine &CmdL)
       bool Remove = DefRemove;
       bool Remove = DefRemove;
       char *VerTag = 0;
       char *VerTag = 0;
       bool VerIsRel = false;
       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)
       while (Cache->FindPkg(S).end() == true)
       {
       {
 	 // Handle an optional end tag indicating what to do
 	 // Handle an optional end tag indicating what to do
@@ -1526,7 +1583,7 @@ bool DoInstall(CommandLine &CmdL)
 	    S[--Length] = 0;
 	    S[--Length] = 0;
 	    continue;
 	    continue;
 	 }
 	 }
-	 
+
 	 char *Slash = strchr(S,'=');
 	 char *Slash = strchr(S,'=');
 	 if (Slash != 0)
 	 if (Slash != 0)
 	 {
 	 {

+ 1 - 0
debian/changelog

@@ -9,6 +9,7 @@ apt (0.6.46.1exp1) experimental; urgency=low
       see what not-installed recommends are on the system)
       see what not-installed recommends are on the system)
     - fix of recommended packages display (only show CandidateVersion
     - fix of recommended packages display (only show CandidateVersion
       fix or-group handling)
       fix or-group handling)
+  * merged "install-task" branch (use with "apt-get install taskname^")
   * methods/gzip.cc:
   * methods/gzip.cc:
     - deal with empty files 
     - deal with empty files 
   * Applied patch from Daniel Schepler to make apt bin-NMU able.  
   * Applied patch from Daniel Schepler to make apt bin-NMU able.  

+ 54 - 49
po/apt-all.pot

@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-09-12 11:18+0200\n"
+"POT-Creation-Date: 2006-09-19 17:21+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -148,7 +148,7 @@ msgstr ""
 
 
 #: cmdline/apt-cache.cc:1652 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70
 #: cmdline/apt-cache.cc:1652 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70
 #: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:550
 #: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:550
-#: cmdline/apt-get.cc:2387 cmdline/apt-sortpkgs.cc:144
+#: cmdline/apt-get.cc:2444 cmdline/apt-sortpkgs.cc:144
 #, c-format
 #, c-format
 msgid "%s %s for %s %s compiled on %s %s\n"
 msgid "%s %s for %s %s compiled on %s %s\n"
 msgstr ""
 msgstr ""
@@ -546,7 +546,7 @@ msgstr ""
 msgid "Y"
 msgid "Y"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:142 cmdline/apt-get.cc:1506
+#: cmdline/apt-get.cc:142 cmdline/apt-get.cc:1563
 #, c-format
 #, c-format
 msgid "Regex compilation error - %s"
 msgid "Regex compilation error - %s"
 msgstr ""
 msgstr ""
@@ -705,11 +705,11 @@ msgstr ""
 msgid "Internal error, Ordering didn't finish"
 msgid "Internal error, Ordering didn't finish"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:791 cmdline/apt-get.cc:1818 cmdline/apt-get.cc:1851
+#: cmdline/apt-get.cc:791 cmdline/apt-get.cc:1875 cmdline/apt-get.cc:1908
 msgid "Unable to lock the download directory"
 msgid "Unable to lock the download directory"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:801 cmdline/apt-get.cc:1899 cmdline/apt-get.cc:2135
+#: cmdline/apt-get.cc:801 cmdline/apt-get.cc:1956 cmdline/apt-get.cc:2192
 #: apt-pkg/cachefile.cc:67
 #: apt-pkg/cachefile.cc:67
 msgid "The list of sources could not be read."
 msgid "The list of sources could not be read."
 msgstr ""
 msgstr ""
@@ -738,7 +738,7 @@ msgstr ""
 msgid "After unpacking %sB disk space will be freed.\n"
 msgid "After unpacking %sB disk space will be freed.\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:846 cmdline/apt-get.cc:1989
+#: cmdline/apt-get.cc:846 cmdline/apt-get.cc:2046
 #, c-format
 #, c-format
 msgid "Couldn't determine free space in %s"
 msgid "Couldn't determine free space in %s"
 msgstr ""
 msgstr ""
@@ -772,7 +772,7 @@ msgstr ""
 msgid "Do you want to continue [Y/n]? "
 msgid "Do you want to continue [Y/n]? "
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:961 cmdline/apt-get.cc:1365 cmdline/apt-get.cc:2032
+#: cmdline/apt-get.cc:961 cmdline/apt-get.cc:1365 cmdline/apt-get.cc:2089
 #, c-format
 #, c-format
 msgid "Failed to fetch %s  %s\n"
 msgid "Failed to fetch %s  %s\n"
 msgstr ""
 msgstr ""
@@ -781,7 +781,7 @@ msgstr ""
 msgid "Some files failed to download"
 msgid "Some files failed to download"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:980 cmdline/apt-get.cc:2041
+#: cmdline/apt-get.cc:980 cmdline/apt-get.cc:2098
 msgid "Download complete and in download only mode"
 msgid "Download complete and in download only mode"
 msgstr ""
 msgstr ""
 
 
@@ -891,27 +891,32 @@ msgstr ""
 msgid "Internal error, AllUpgrade broke stuff"
 msgid "Internal error, AllUpgrade broke stuff"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1493 cmdline/apt-get.cc:1529
+#: cmdline/apt-get.cc:1448
+#, c-format
+msgid "Couldn't find task %s"
+msgstr ""
+
+#: cmdline/apt-get.cc:1550 cmdline/apt-get.cc:1586
 #, c-format
 #, c-format
 msgid "Couldn't find package %s"
 msgid "Couldn't find package %s"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1516
+#: cmdline/apt-get.cc:1573
 #, c-format
 #, c-format
 msgid "Note, selecting %s for regex '%s'\n"
 msgid "Note, selecting %s for regex '%s'\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1546
+#: cmdline/apt-get.cc:1603
 msgid "You might want to run `apt-get -f install' to correct these:"
 msgid "You might want to run `apt-get -f install' to correct these:"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1549
+#: cmdline/apt-get.cc:1606
 msgid ""
 msgid ""
 "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a "
 "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a "
 "solution)."
 "solution)."
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1561
+#: cmdline/apt-get.cc:1618
 msgid ""
 msgid ""
 "Some packages could not be installed. This may mean that you have\n"
 "Some packages could not be installed. This may mean that you have\n"
 "requested an impossible situation or if you are using the unstable\n"
 "requested an impossible situation or if you are using the unstable\n"
@@ -919,163 +924,163 @@ msgid ""
 "or been moved out of Incoming."
 "or been moved out of Incoming."
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1569
+#: cmdline/apt-get.cc:1626
 msgid ""
 msgid ""
 "Since you only requested a single operation it is extremely likely that\n"
 "Since you only requested a single operation it is extremely likely that\n"
 "the package is simply not installable and a bug report against\n"
 "the package is simply not installable and a bug report against\n"
 "that package should be filed."
 "that package should be filed."
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1574
+#: cmdline/apt-get.cc:1631
 msgid "The following information may help to resolve the situation:"
 msgid "The following information may help to resolve the situation:"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1577
+#: cmdline/apt-get.cc:1634
 msgid "Broken packages"
 msgid "Broken packages"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1603
+#: cmdline/apt-get.cc:1660
 msgid "The following extra packages will be installed:"
 msgid "The following extra packages will be installed:"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1692
+#: cmdline/apt-get.cc:1749
 msgid "Suggested packages:"
 msgid "Suggested packages:"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1693
+#: cmdline/apt-get.cc:1750
 msgid "Recommended packages:"
 msgid "Recommended packages:"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1713
+#: cmdline/apt-get.cc:1770
 msgid "Calculating upgrade... "
 msgid "Calculating upgrade... "
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1716 methods/ftp.cc:702 methods/connect.cc:101
+#: cmdline/apt-get.cc:1773 methods/ftp.cc:702 methods/connect.cc:101
 msgid "Failed"
 msgid "Failed"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1721
+#: cmdline/apt-get.cc:1778
 msgid "Done"
 msgid "Done"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1786 cmdline/apt-get.cc:1794
+#: cmdline/apt-get.cc:1843 cmdline/apt-get.cc:1851
 msgid "Internal error, problem resolver broke stuff"
 msgid "Internal error, problem resolver broke stuff"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1894
+#: cmdline/apt-get.cc:1951
 msgid "Must specify at least one package to fetch source for"
 msgid "Must specify at least one package to fetch source for"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1924 cmdline/apt-get.cc:2153
+#: cmdline/apt-get.cc:1981 cmdline/apt-get.cc:2210
 #, c-format
 #, c-format
 msgid "Unable to find a source package for %s"
 msgid "Unable to find a source package for %s"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1968
+#: cmdline/apt-get.cc:2025
 #, c-format
 #, c-format
 msgid "Skipping already downloaded file '%s'\n"
 msgid "Skipping already downloaded file '%s'\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1992
+#: cmdline/apt-get.cc:2049
 #, c-format
 #, c-format
 msgid "You don't have enough free space in %s"
 msgid "You don't have enough free space in %s"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1997
+#: cmdline/apt-get.cc:2054
 #, c-format
 #, c-format
 msgid "Need to get %sB/%sB of source archives.\n"
 msgid "Need to get %sB/%sB of source archives.\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2000
+#: cmdline/apt-get.cc:2057
 #, c-format
 #, c-format
 msgid "Need to get %sB of source archives.\n"
 msgid "Need to get %sB of source archives.\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2006
+#: cmdline/apt-get.cc:2063
 #, c-format
 #, c-format
 msgid "Fetch source %s\n"
 msgid "Fetch source %s\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2037
+#: cmdline/apt-get.cc:2094
 msgid "Failed to fetch some archives."
 msgid "Failed to fetch some archives."
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2065
+#: cmdline/apt-get.cc:2122
 #, c-format
 #, c-format
 msgid "Skipping unpack of already unpacked source in %s\n"
 msgid "Skipping unpack of already unpacked source in %s\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2077
+#: cmdline/apt-get.cc:2134
 #, c-format
 #, c-format
 msgid "Unpack command '%s' failed.\n"
 msgid "Unpack command '%s' failed.\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2078
+#: cmdline/apt-get.cc:2135
 #, c-format
 #, c-format
 msgid "Check if the 'dpkg-dev' package is installed.\n"
 msgid "Check if the 'dpkg-dev' package is installed.\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2095
+#: cmdline/apt-get.cc:2152
 #, c-format
 #, c-format
 msgid "Build command '%s' failed.\n"
 msgid "Build command '%s' failed.\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2114
+#: cmdline/apt-get.cc:2171
 msgid "Child process failed"
 msgid "Child process failed"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2130
+#: cmdline/apt-get.cc:2187
 msgid "Must specify at least one package to check builddeps for"
 msgid "Must specify at least one package to check builddeps for"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2158
+#: cmdline/apt-get.cc:2215
 #, c-format
 #, c-format
 msgid "Unable to get build-dependency information for %s"
 msgid "Unable to get build-dependency information for %s"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2178
+#: cmdline/apt-get.cc:2235
 #, c-format
 #, c-format
 msgid "%s has no build depends.\n"
 msgid "%s has no build depends.\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2230
+#: cmdline/apt-get.cc:2287
 #, c-format
 #, c-format
 msgid ""
 msgid ""
 "%s dependency for %s cannot be satisfied because the package %s cannot be "
 "%s dependency for %s cannot be satisfied because the package %s cannot be "
 "found"
 "found"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2282
+#: cmdline/apt-get.cc:2339
 #, c-format
 #, c-format
 msgid ""
 msgid ""
 "%s dependency for %s cannot be satisfied because no available versions of "
 "%s dependency for %s cannot be satisfied because no available versions of "
 "package %s can satisfy version requirements"
 "package %s can satisfy version requirements"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2317
+#: cmdline/apt-get.cc:2374
 #, c-format
 #, c-format
 msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new"
 msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2342
+#: cmdline/apt-get.cc:2399
 #, c-format
 #, c-format
 msgid "Failed to satisfy %s dependency for %s: %s"
 msgid "Failed to satisfy %s dependency for %s: %s"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2356
+#: cmdline/apt-get.cc:2413
 #, c-format
 #, c-format
 msgid "Build-dependencies for %s could not be satisfied."
 msgid "Build-dependencies for %s could not be satisfied."
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2360
+#: cmdline/apt-get.cc:2417
 msgid "Failed to process build dependencies"
 msgid "Failed to process build dependencies"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2392
+#: cmdline/apt-get.cc:2449
 msgid "Supported modules:"
 msgid "Supported modules:"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2433
+#: cmdline/apt-get.cc:2490
 msgid ""
 msgid ""
 "Usage: apt-get [options] command\n"
 "Usage: apt-get [options] command\n"
 "       apt-get [options] install|remove pkg1 [pkg2 ...]\n"
 "       apt-get [options] install|remove pkg1 [pkg2 ...]\n"
@@ -2112,12 +2117,12 @@ msgstr ""
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr ""
 msgstr ""
 
 
-#: apt-pkg/tagfile.cc:85 apt-pkg/tagfile.cc:92
+#: apt-pkg/tagfile.cc:73
 #, c-format
 #, c-format
 msgid "Unable to parse package file %s (1)"
 msgid "Unable to parse package file %s (1)"
 msgstr ""
 msgstr ""
 
 
-#: apt-pkg/tagfile.cc:186
+#: apt-pkg/tagfile.cc:160
 #, c-format
 #, c-format
 msgid "Unable to parse package file %s (2)"
 msgid "Unable to parse package file %s (2)"
 msgstr ""
 msgstr ""