dump-runlisp-image.c (finish_job): Prevent fresh images from junking!
[runlisp] / dump-runlisp-image.c
index 3f9131e..836dc54 100644 (file)
@@ -702,7 +702,10 @@ static void add_job(unsigned f, struct config_section *sect)
   config_subst_split_var(&config, sect, runvar, &av_version);
   if (!av_version.n)
     lose("empty `run-script' command for Lisp implementation `%s'", name);
-  argv_append(&av_version, xstrdup("?(lisp-implementation-version)"));
+  argv_append(&av_version,
+             config_subst_string_alloc
+               (&config, sect, "<internal>",
+                "?${lisp-version?(lisp-implementation-version)}"));
   config_subst_split_var(&config, sect, dumpvar, &av_dump);
   if (!av_dump.n)
     lose("empty `dump-image' command for Lisp implementation `%s'", name);
@@ -915,7 +918,7 @@ static void finish_job(struct job *job)
            job->exit);
 
   /* What happens next depends on the state of the job.  This is the main
-   * place which advanced the job state machine.
+   * place which advances the job state machine.
    */
   if (ok) switch (job->st) {
 
@@ -982,6 +985,9 @@ static void finish_job(struct job *job)
        * job, because the chances are good that it failed to produce the
        * image properly.
        */
+      if (verbose >= 3)
+       moan("rename completed Lisp `%s' image `%s' to `%s'",
+            JOB_NAME(job), job->imgnew, job->imghash);
       if (rename(job->imgnew, job->imghash)) {
        fprintf(job->log, "%-13s > failed to rename Lisp `%s' "
                          "output image `%s' to `%s': %s",
@@ -990,6 +996,12 @@ static void finish_job(struct job *job)
        ok = 0; break;
       }
 
+      /* Notice the image so that it doesn't get junked. */
+      if (flags&AF_JUNK) {
+       p = strrchr(job->imghash, '/'); if (p) p++; else p = job->imghash;
+       notice_filename(p, strlen(p));
+      }
+
       /* Determine the basename of the final image. */
       p = strrchr(job->imghash, '/'); if (p) p++; else p = job->imghash;
 
@@ -1001,6 +1013,9 @@ static void finish_job(struct job *job)
            JOB_NAME(job), job->imgnewlink, strerror(errno));
        break;
       }
+      if (verbose >= 3)
+       moan("establish Lisp `%s' image link `%s' referring to `%s'",
+            JOB_NAME(job), job->imglink, job->imghash);
       if (symlink(p, job->imgnewlink)) {
        bad("failed to create Lisp `%s' image link `%s': %s",
            JOB_NAME(job), job->imgnewlink, strerror(errno));
@@ -1011,11 +1026,15 @@ static void finish_job(struct job *job)
            JOB_NAME(job), job->imgnewlink, job->imglink, strerror(errno));
        break;
       }
-      if (job->oldimg && STRCMP(job->oldimg, !=, job->imghash) &&
-         unlink(job->oldimg) && errno != ENOENT) {
-       if (verbose >= 1)
-         moan("failed to delete old Lisp `%s' image `%s': %s",
-              JOB_NAME(job), job->oldimg, strerror(errno));
+      if (job->oldimg && STRCMP(job->oldimg, !=, job->imghash)) {
+       if (verbose >= 3)
+         moan("remove old Lisp `%s' image `%s'",
+              JOB_NAME(job), job->oldimg);
+       if (unlink(job->oldimg) && errno != ENOENT) {
+         if (verbose >= 1)
+           moan("failed to delete old Lisp `%s' image `%s': %s",
+                JOB_NAME(job), job->oldimg, strerror(errno));
+       }
       }
 
       /* I think we're all done. */
@@ -1648,7 +1667,7 @@ int main(int argc, char *argv[])
             JOB_NAME(job), job->oldimg);
     } else {
       if (verbose >= 2)
-       moan("deleting `%s' image `%s' (dry run)",
+       moan("deleting `%s' image `%s'",
             JOB_NAME(job), job->imglink);
       if (unlink(job->imglink) && errno != ENOENT)
        bad("failed to delete `%s' image link `%s': %s",