Install packages based on parser input
authorMichael Spang <mspang@csclub.uwaterloo.ca>
Thu, 19 Nov 2009 07:20:12 +0000 (02:20 -0500)
committerMichael Spang <mspang@csclub.uwaterloo.ca>
Tue, 22 Dec 2009 03:09:49 +0000 (22:09 -0500)
Signed-off-by: Michael Spang <mspang@csclub.uwaterloo.ca>
Makefile
awesome.h [new file with mode: 0644]
awesome.rl
magic.cc

index f7875de..996b4fe 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
-all: magic awesome awesome.png
-magic: magic.cc
-       g++ -o magic -g3 -Wall -Werror -lapt-pkg -lapt-inst magic.cc acqprogress.cc
-awesome: awesome.c acqprogress.cc
+all: magic awesome.png
+magic: magic.cc awesome.c acqprogress.cc
+       g++ -o magic -g3 -Wall -Werror -lapt-pkg -lapt-inst magic.cc acqprogress.cc awesome.c
+awesome: awesome.c
        g++ -o awesome -g3 -Wall -Werror -lapt-pkg -lapt-inst awesome.c
 awesome.c: awesome.rl
        ragel awesome.rl
diff --git a/awesome.h b/awesome.h
new file mode 100644 (file)
index 0000000..1aefca3
--- /dev/null
+++ b/awesome.h
@@ -0,0 +1 @@
+void scanner(vector<char *> &add_list, vector<char *> &del_list);
index bfcd20a..7130744 100644 (file)
@@ -14,7 +14,7 @@ using namespace std;
     action pkgend { te = p; }
 
     action add_list {
-      tmp_list.push_back(xstrndup(ts, te-ts+1));
+      tmp_list.push_back(xstrndup(ts, te - ts + 1));
     }
 
     action clear_list {
@@ -40,7 +40,6 @@ using namespace std;
     package_list = ((space+ package_name)+ %add_list space*) >clear_list;
     cmd_install = 'install' package_list ';' @install;
     cmd_remove = 'remove' package_list ';' @remove;
-
     main := (cmd_install | cmd_remove | space)*;
 }%%
 
@@ -63,33 +62,30 @@ void scanner(vector<char *> &add_list, vector<char *> &del_list)
         char *p = buf + have, *pe, *eof = 0;
         int len, space = BUFSIZE - have;
 
-        if ( space == 0 ) {
-            /* We've used up the entire buffer storing an already-parsed token
-             * prefix that must be preserved. */
-            fprintf(stderr, "OUT OF BUFFER SPACE\n" );
+        if (space == 0) {
+            fprintf(stderr, "OUT OF BUFFER SPACE\n");
             exit(1);
         }
 
         len = fread(p, 1, space, stdin);
         pe = p + len;
 
-        /* Check if this is the end of file. */
-        if ( len < space ) {
+        if (len < space) {
             eof = pe;
             done = 1;
         }
 
         %% write exec;
 
-        if ( cs == inapt_error ) {
-            fprintf(stderr, "PARSE ERROR\n" );
+        if (cs == inapt_error) {
+            fprintf(stderr, "PARSE ERROR\n");
             break;
         }
 
         have = 0;
 
         if (ts) {
-            have = pe -ts;
+            have = pe - ts;
             memmove(buf, ts, have);
             te = buf + (te - ts);
             ts = buf;
@@ -97,6 +93,7 @@ void scanner(vector<char *> &add_list, vector<char *> &del_list)
     }
 }
 
+/*
 int main()
 {
     vector<char *> add_list;
@@ -108,3 +105,4 @@ int main()
       printf("remove %s\n", *i);
     return 0;
 }
+*/
index 4965a3a..4d60b60 100644 (file)
--- a/magic.cc
+++ b/magic.cc
@@ -14,6 +14,7 @@
 #include <apt-pkg/acquire-item.h>
 
 #include "acqprogress.h"
+#include "awesome.h"
 
 using namespace std;
 
@@ -172,6 +173,9 @@ bool InstallPackages(pkgCacheFile &Cache,bool ShwKept = false,bool Ask = true,
 
 int main(int argc, char *argv[]) {
 
+    vector<char *> add_list;
+    vector<char *> del_list;
+
     pkgInitConfig(*_config);
     pkgInitSystem(*_config, _system);
 
@@ -188,12 +192,30 @@ int main(int argc, char *argv[]) {
     pkgCache *cache = cachef;
     pkgDepCache *DCache = cachef;
 
+    scanner(add_list, del_list);
+
+    for (vector<char *>::iterator i = add_list.begin(); i < add_list.end(); i++) {
+      printf("install %s\n", *i);
+      DCache->MarkInstall(cache->FindPkg(*i), true);
+    }
+    for (vector<char *>::iterator i = del_list.begin(); i < del_list.end(); i++) {
+      printf("remove %s\n", *i);
+      DCache->MarkDelete(cache->FindPkg(*i), false);
+    }
+    for (vector<char *>::iterator i = add_list.begin(); i < add_list.end(); i++) {
+      printf("install %s\n", *i);
+      DCache->MarkInstall(cache->FindPkg(*i), false);
+    }
+
+    fprintf(stderr, "\n");
+    fprintf(stderr, "nondownloadable packages:\n");
     for (pkgCache::PkgIterator i = cache->PkgBegin(); !i.end(); i++) {
        if (i.CurrentVer() && !i.CurrentVer().Downloadable()) {
               fprintf(stderr, "%s ", i.Name());
               fprintf(stderr, "%s\n", DCache->GetCandidateVer(i).VerStr());
        }
     }
+    /*
 
     DCache->MarkInstall(cache->FindPkg("zsh"), true);
     DCache->MarkInstall(cache->FindPkg("ssmtp"), true);
@@ -203,6 +225,7 @@ int main(int argc, char *argv[]) {
     DCache->MarkDelete(cache->FindPkg("gnome-games"), false);
     DCache->MarkInstall(cache->FindPkg("ssmtp"), false);
     DCache->MarkInstall(cache->FindPkg("postfix"), false);
+    */
 
     fprintf(stderr, "\n");
     fprintf(stderr, "inst %lu del %lu keep %lu broken %lu bad %lu\n",
@@ -221,9 +244,11 @@ int main(int argc, char *argv[]) {
     fprintf(stderr, "\n");
 
     pkgProblemResolver fix (DCache);
-    fix.Protect(cache->FindPkg("ssmtp"));
-    fix.Protect(cache->FindPkg("gnome-games"));
-    fix.Protect(cache->FindPkg("network-manager"));
+
+    for (vector<char *>::iterator i = add_list.begin(); i < add_list.end(); i++)
+           fix.Protect(cache->FindPkg(*i));
+    for (vector<char *>::iterator i = del_list.begin(); i < del_list.end(); i++)
+           fix.Protect(cache->FindPkg(*i));
     fix.Resolve();
 
     fprintf(stderr, "\n");
@@ -243,6 +268,5 @@ int main(int argc, char *argv[]) {
 
     fprintf(stderr, "\n");
 
-
     InstallPackages(cachef);
 }