cvs-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Cvs-cvs] ccvs/src ChangeLog admin.c checkout.c commit.c ...


From: Derek Robert Price
Subject: [Cvs-cvs] ccvs/src ChangeLog admin.c checkout.c commit.c ...
Date: Fri, 12 Sep 2008 19:55:32 +0000

CVSROOT:        /cvsroot/cvs
Module name:    ccvs
Changes by:     Derek Robert Price <dprice>     08/09/12 19:55:31

Modified files:
        src            : ChangeLog admin.c checkout.c commit.c cvs.h 
                         edit.c fileattr.c history.c import.c lock.c 
                         logmsg.c main.c parseinfo.c parseinfo.h rcs.c 
                         root.c sanity.sh server.c sign.c subr.c subr.h 
                         tag.c verify.c 

Log message:
        * cvs.h [PIOPT_ALL] (CALLPROC, Parse_Info): Move defs and protos to...
        * parseinfo.h: ...similarly named entities here.
        * subr.h (format_cmdline_walklist_closure): Store file and line number
        for error messages.
        (format_cmdline): Update prototype with file and line number.
        * admin.c (postadmin_proc), commit.c (precommit_proc), edit.c
        (notify_proc), fileattr.c (postwatch_proc), logmsg.c (rcsinfo_proc,
        do_editor, verifymsg_proc, do_verify, Update_Logfile, logfile_write,
        update_logfile_proc), parseinfo.c (Parse_Info), server.c
        (prepost_proxy_proc, template_proc, server_template), subr.c
        (format_cmdline), tag.c (pretag_proc, posttag_proc: Accept file & line
        number and use in error messages.
        * sign.c (gen_signature)i, verify.c (verify_signature): Pass dummy file
        and line to format_cmdline().
        * checkout.c, history.c, import.c, lock.c, main.c, root.c:
        #include "parseinfo.h".
        * sanity.sh: Update to compensate for new error messages.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/ChangeLog?cvsroot=cvs&r1=1.3576&r2=1.3577
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/admin.c?cvsroot=cvs&r1=1.121&r2=1.122
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/checkout.c?cvsroot=cvs&r1=1.151&r2=1.152
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/commit.c?cvsroot=cvs&r1=1.281&r2=1.282
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/cvs.h?cvsroot=cvs&r1=1.355&r2=1.356
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/edit.c?cvsroot=cvs&r1=1.104&r2=1.105
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/fileattr.c?cvsroot=cvs&r1=1.40&r2=1.41
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/history.c?cvsroot=cvs&r1=1.104&r2=1.105
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/import.c?cvsroot=cvs&r1=1.189&r2=1.190
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/lock.c?cvsroot=cvs&r1=1.126&r2=1.127
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/logmsg.c?cvsroot=cvs&r1=1.111&r2=1.112
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/main.c?cvsroot=cvs&r1=1.277&r2=1.278
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/parseinfo.c?cvsroot=cvs&r1=1.94&r2=1.95
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/parseinfo.h?cvsroot=cvs&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/rcs.c?cvsroot=cvs&r1=1.393&r2=1.394
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/root.c?cvsroot=cvs&r1=1.136&r2=1.137
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/sanity.sh?cvsroot=cvs&r1=1.1200&r2=1.1201
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/server.c?cvsroot=cvs&r1=1.482&r2=1.483
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/sign.c?cvsroot=cvs&r1=1.13&r2=1.14
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/subr.c?cvsroot=cvs&r1=1.168&r2=1.169
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/subr.h?cvsroot=cvs&r1=1.21&r2=1.22
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/tag.c?cvsroot=cvs&r1=1.155&r2=1.156
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/verify.c?cvsroot=cvs&r1=1.9&r2=1.10

Patches:
Index: ChangeLog
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/ChangeLog,v
retrieving revision 1.3576
retrieving revision 1.3577
diff -u -b -r1.3576 -r1.3577
--- ChangeLog   12 Sep 2008 19:46:45 -0000      1.3576
+++ ChangeLog   12 Sep 2008 19:55:09 -0000      1.3577
@@ -1,5 +1,23 @@
 2008-09-12  Derek R. Price  <address@hidden>
 
+       * cvs.h [PIOPT_ALL] (CALLPROC, Parse_Info): Move defs and protos to...
+       * parseinfo.h: ...similarly named entities here.
+       * subr.h (format_cmdline_walklist_closure): Store file and line number
+       for error messages.
+       (format_cmdline): Update prototype with file and line number.
+       * admin.c (postadmin_proc), commit.c (precommit_proc), edit.c
+       (notify_proc), fileattr.c (postwatch_proc), logmsg.c (rcsinfo_proc,
+       do_editor, verifymsg_proc, do_verify, Update_Logfile, logfile_write,
+       update_logfile_proc), parseinfo.c (Parse_Info), server.c
+       (prepost_proxy_proc, template_proc, server_template), subr.c
+       (format_cmdline), tag.c (pretag_proc, posttag_proc: Accept file & line
+       number and use in error messages.
+       * sign.c (gen_signature)i, verify.c (verify_signature): Pass dummy file
+       and line to format_cmdline().
+       * checkout.c, history.c, import.c, lock.c, main.c, root.c:
+       #include "parseinfo.h".
+       * sanity.sh: Update to compensate for new error messages.
+
        * rcs.c (rcsbuf_open): Some cleanup.
 
        * rcs.c: Move mmap cruft into a library header.

Index: admin.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/admin.c,v
retrieving revision 1.121
retrieving revision 1.122
diff -u -b -r1.121 -r1.122
--- admin.c     12 Sep 2007 18:27:06 -0000      1.121
+++ admin.c     12 Sep 2008 19:55:15 -0000      1.122
@@ -1,7 +1,7 @@
 /*
- * Copyright (C) 1986-2007 The Free Software Foundation, Inc.
+ * Copyright (C) 1986-2008 The Free Software Foundation, Inc.
  *
- * Portions Copyright (C) 1998-2007 Derek Price,
+ * Portions Copyright (C) 1998-2008 Derek Price,
  *                                  Ximbiot LLC <http://ximbiot.com>,
  *                                  and others.
  *
@@ -19,9 +19,10 @@
 # include <config.h>
 #endif
 
-/* CVS headers.  */
+/* CVS */
 #include "ignore.h"
 #include "lock.h"
+#include "parseinfo.h"
 #include "recurse.h"
 #include "repos.h"
 #include "wrapper.h"
@@ -158,12 +159,14 @@
  * callback proc to run a script when admin finishes.
  */
 static int
-postadmin_proc (const char *repository, const char *filter, void *closure)
+postadmin_proc (const char *repository, const char *filter,
+               const char *file, int line, void *closure)
 {
     char *cmdline;
     const char *srepos = Short_Repository (repository);
 
-    TRACE (TRACE_FUNCTION, "postadmin_proc (%s, %s)", repository, filter);
+    TRACE (TRACE_FUNCTION, "postadmin_proc (%s, %s, %s, %d)",
+          repository, filter, file, line);
 
     /* %c = cvs_cmd_name
      * %R = referrer
@@ -179,7 +182,7 @@
 #ifdef SUPPORT_OLD_INFO_FMT_STRINGS
                              false, srepos,
 #endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
-                             filter,
+                             file, line, filter,
                              "c", "s", cvs_cmd_name,
 #ifdef SERVER_SUPPORT
                              "R", "s", referrer ? referrer->original : "NONE",
@@ -191,7 +194,8 @@
     if (!cmdline || !strlen (cmdline))
     {
        if (cmdline) free (cmdline);
-       error (0, 0, "postadmin proc resolved to the empty string!");
+       error (0, 0, "%s:%d: postadmin proc resolved to the empty string!",
+              file, line);
        return 1;
     }
 

Index: checkout.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/checkout.c,v
retrieving revision 1.151
retrieving revision 1.152
diff -u -b -r1.151 -r1.152
--- checkout.c  12 Sep 2007 18:27:06 -0000      1.151
+++ checkout.c  12 Sep 2008 19:55:21 -0000      1.152
@@ -1,7 +1,7 @@
 /*
- * Copyright (C) 1986-2007 The Free Software Foundation, Inc.
+ * Copyright (C) 1986-2008 The Free Software Foundation, Inc.
  *
- * Portions Copyright (C) 1998-2007 Derek Price,
+ * Portions Copyright (C) 1998-2008 Derek Price,
  *                                  Ximbiot LLC <http://ximbiot.com>,
  *                                  and others.
  *
@@ -43,8 +43,9 @@
 # include <config.h>
 #endif
 
-/* CVS headers.  */
+/* CVS */
 #include "ignore.h"
+#include "parseinfo.h"
 #include "recurse.h"
 #include "repos.h"
 #include "wrapper.h"

Index: commit.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/commit.c,v
retrieving revision 1.281
retrieving revision 1.282
diff -u -b -r1.281 -r1.282
--- commit.c    9 Sep 2008 17:44:37 -0000       1.281
+++ commit.c    12 Sep 2008 19:55:23 -0000      1.282
@@ -1,7 +1,7 @@
 /*
- * Copyright (C) 1986-2007 The Free Software Foundation, Inc.
+ * Copyright (C) 1986-2008 The Free Software Foundation, Inc.
  *
- * Portions Copyright (C) 1998-2007 Derek Price,
+ * Portions Copyright (C) 1998-2008 Derek Price,
  *                                  Ximbiot LLC <http://ximbiot.com>,
  *                                  and others.
  *
@@ -34,6 +34,7 @@
 #include "ignore.h"
 #include "lock.h"
 #include "logmsg.h"
+#include "parseinfo.h"
 #include "recurse.h"
 #include "repos.h"
 #include "wrapper.h"
@@ -63,9 +64,6 @@
 static int findmaxrev (Node * p, void *closure);
 static int lock_RCS (const char *user, RCSNode *rcs, const char *rev,
                      const char *repository);
-static int precommit_list_to_args_proc (Node * p, void *closure);
-static int precommit_proc (const char *repository, const char *filter,
-                           void *closure);
 static int remove_file (struct file_info *finfo, char *tag,
                        char *message);
 static void fixaddfile (const char *rcs);
@@ -1294,7 +1292,8 @@
  * Callback proc for pre-commit checking
  */
 static int
-precommit_proc (const char *repository, const char *filter, void *closure)
+precommit_proc (const char *repository, const char *filter,
+               const char *file, int line, void *closure)
 {
     char *newfilter = NULL;
     char *cmdline;
@@ -1305,10 +1304,10 @@
     if (!strchr (filter, '%'))
     {
        error (0, 0,
-               "warning: commitinfo line contains no format strings:\n"
-               "    \"%s\"\n"
-               "Appending defaults (\" %%r/%%p %%s\"), but please be aware 
that this usage is\n"
-               "deprecated.", filter);
+"%s:%d: warning: commitinfo line contains no format strings.\n"
+"Appending defaults (%s), but please be aware that this usage is\n"
+"deprecated.",
+              file, line, quote (" %r/%p %s"));
        newfilter = Xasprintf ("%s %%r/%%p %%s", filter);
        filter = newfilter;
     }
@@ -1323,7 +1322,7 @@
 #ifdef SUPPORT_OLD_INFO_FMT_STRINGS
                              false, srepos,
 #endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
-                             filter,
+                             file, line, filter,
                              "c", "s", cvs_cmd_name,
 #ifdef SERVER_SUPPORT
                              "R", "s", referrer ? referrer->original : "NONE",
@@ -1339,7 +1338,8 @@
     if (!cmdline || !strlen (cmdline))
     {
        if (cmdline) free (cmdline);
-       error (0, 0, "precommit proc resolved to the empty string!");
+       error (0, 0, "%s:%d: precommit proc resolved to the empty string!",
+              file, line);
        return 1;
     }
 

Index: cvs.h
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/cvs.h,v
retrieving revision 1.355
retrieving revision 1.356
diff -u -b -r1.355 -r1.356
--- cvs.h       12 Sep 2007 13:07:33 -0000      1.355
+++ cvs.h       12 Sep 2008 19:55:26 -0000      1.356
@@ -275,9 +275,6 @@
 
 
 
-/* Option flags for Parse_Info() */
-#define PIOPT_ALL 1    /* accept "all" keyword */
-
 extern const char *program_name, *program_path, *cvs_cmd_name;
 extern char *Editor;
 extern int cvsadmin_root;
@@ -316,7 +313,7 @@
 
 
 /* This header needs the LOGMSG_* defns above.  */
-#include "parseinfo.h"
+//#include "parseinfo.h"
 
 /* This structure holds the global configuration data.  */
 extern struct config *config;
@@ -381,11 +378,6 @@
 char *entries_time (time_t unixtime);
 time_t unix_time_stamp (const char *file);
 
-typedef        int (*CALLPROC) (const char *repository, const char *value,
-                         void *closure);
-int Parse_Info (const char *infofile, const char *repository,
-                CALLPROC callproc, int opt, void *closure);
-
 typedef        RETSIGTYPE (*SIGCLEANUPPROC)    (int);
 int SIG_register (int sig, SIGCLEANUPPROC sigcleanup);
 

Index: edit.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/edit.c,v
retrieving revision 1.104
retrieving revision 1.105
diff -u -b -r1.104 -r1.105
--- edit.c      25 Jan 2008 07:17:33 -0000      1.104
+++ edit.c      12 Sep 2008 19:55:26 -0000      1.105
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 The Free Software Foundation, Inc.
+ * Copyright (C) 2008 The Free Software Foundation, Inc.
  *
  * Implementation for "cvs edit", "cvs watch on", and related commands
  *
@@ -21,14 +21,16 @@
 /* Verify interface.  */
 #include "edit.h"
 
-/* GNULIB headers.  */
+/* GNULIB */
+#include "quote.h"
 #include "yesno.h"
 
-/* CVS headers.  */
+/* CVS */
 #include "base.h"
 #include "fileattr.h"
 #include "ignore.h"
 #include "lock.h"
+#include "parseinfo.h"
 #include "recurse.h"
 #include "repos.h"
 #include "watch.h"
@@ -859,7 +861,8 @@
 
 
 static int
-notify_proc (const char *repository, const char *filter, void *closure)
+notify_proc (const char *repository, const char *filter,
+            const char *file, int line, void *closure)
 {
     char *cmdline;
     FILE *pipefp;
@@ -875,7 +878,7 @@
 #ifdef SUPPORT_OLD_INFO_FMT_STRINGS
                              false, srepos,
 #endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
-                             filter,
+                             file, line, filter,
                              "c", "s", cvs_cmd_name,
 #ifdef SERVER_SUPPORT
                              "R", "s", referrer ? referrer->original : "NONE",
@@ -887,14 +890,17 @@
     if (!cmdline || !strlen (cmdline))
     {
        if (cmdline) free (cmdline);
-       error (0, 0, "pretag proc resolved to the empty string!");
+       error (0, 0, "%s:%d: pretag proc resolved to the empty string!",
+              file, line);
        return 1;
     }
 
     pipefp = run_popen (cmdline, "w");
     if (pipefp == NULL)
     {
-       error (0, errno, "cannot write entry to notify filter: %s", cmdline);
+       error (0, errno,
+              "%s:%d: cannot write entry to notify filter: %s",
+              file, line, quote (cmdline));
        free (cmdline);
        return 1;
     }

Index: fileattr.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/fileattr.c,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -b -r1.40 -r1.41
--- fileattr.c  12 Sep 2007 18:27:07 -0000      1.40
+++ fileattr.c  12 Sep 2008 19:55:26 -0000      1.41
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 The Free Software Foundation, Inc.
+ * Copyright (C) 2008 The Free Software Foundation, Inc.
  *
  * Implementation for file attribute munging features.
  *
@@ -21,7 +21,8 @@
 /* Verify interface.  */
 #include "fileattr.h"
 
-/* CVS headers.  */
+/* CVS */
+#include "parseinfo.h"
 #include "repos.h"
 
 #include "cvs.h"
@@ -519,12 +520,14 @@
  * callback proc to run a script when fileattrs are updated.
  */
 static int
-postwatch_proc (const char *repository, const char *filter, void *closure)
+postwatch_proc (const char *repository, const char *filter,
+               const char *file, int line, void *closure)
 {
     char *cmdline;
     const char *srepos = Short_Repository (repository);
 
-    TRACE (TRACE_FUNCTION, "postwatch_proc (%s, %s)", repository, filter);
+    TRACE (TRACE_FUNCTION, "postwatch_proc (%s, %s, %s, %d)",
+          repository, filter, file, line);
 
     /* %c = command name
      * %p = shortrepos
@@ -539,7 +542,7 @@
 #ifdef SUPPORT_OLD_INFO_FMT_STRINGS
                              false, srepos,
 #endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
-                             filter,
+                             file, line, filter,
                              "c", "s", cvs_cmd_name,
 #ifdef SERVER_SUPPORT
                              "R", "s", referrer ? referrer->original : "NONE",
@@ -551,7 +554,8 @@
     if (!cmdline || !strlen (cmdline))
     {
        if (cmdline) free (cmdline);
-       error (0, 0, "postwatch proc resolved to the empty string!");
+       error (0, 0, "%s:%d: postwatch proc resolved to the empty string!",
+              file, line);
        return 1;
     }
 

Index: history.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/history.c,v
retrieving revision 1.104
retrieving revision 1.105
diff -u -b -r1.104 -r1.105
--- history.c   20 Dec 2007 16:09:25 -0000      1.104
+++ history.c   12 Sep 2008 19:55:26 -0000      1.105
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1994-2007 The Free Software Foundation, Inc.
+ * Copyright (C) 1994-2008 The Free Software Foundation, Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -19,12 +19,13 @@
 /* Verify interface.  */
 #include "history.h"
 
-/* GNULIB headers.  */
+/* GNULIB */
 #include "save-cwd.h"
 
-/* CVS headers.  */
+/* CVS */
 #include "ignore.h"
 #include "lock.h"
+#include "parseinfo.h"
 #include "repos.h"
 
 #include "cvs.h"

Index: import.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/import.c,v
retrieving revision 1.189
retrieving revision 1.190
diff -u -b -r1.189 -r1.190
--- import.c    20 Dec 2007 16:09:25 -0000      1.189
+++ import.c    12 Sep 2008 19:55:26 -0000      1.190
@@ -1,7 +1,7 @@
 /*
- * Copyright (C) 1986-2007 The Free Software Foundation, Inc.
+ * Copyright (C) 1986-2008 The Free Software Foundation, Inc.
  *
- * Portions Copyright (C) 1998-2007 Derek Price,
+ * Portions Copyright (C) 1998-2008 Derek Price,
  *                                  Ximbiot LLC <http://ximbiot.com>,
  *                                  and others.
  *
@@ -26,15 +26,16 @@
 # include <config.h>
 #endif
 
-/* GNULIB headers.  */
+/* GNULIB */
 #include "base64.h"
 #include "lstat.h"
 #include "save-cwd.h"
 
-/* CVS headers.  */
+/* CVS */
 #include "ignore.h"
 #include "lock.h"
 #include "logmsg.h"
+#include "parseinfo.h"
 #include "wrapper.h"
 
 #include "cvs.h"

Index: lock.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/lock.c,v
retrieving revision 1.126
retrieving revision 1.127
diff -u -b -r1.126 -r1.127
--- lock.c      20 Dec 2007 16:09:25 -0000      1.126
+++ lock.c      12 Sep 2008 19:55:27 -0000      1.127
@@ -1,7 +1,7 @@
 /*
- * Copyright (C) 1986-2007 The Free Software Foundation, Inc.
+ * Copyright (C) 1986-2008 The Free Software Foundation, Inc.
  *
- * Portions Copyright (C) 1998-2007 Derek Price,
+ * Portions Copyright (C) 1998-2008 Derek Price,
  *                                  Ximbiot LLC <http://ximbiot.com>,
  *                                  and others.
  *
@@ -77,7 +77,8 @@
 /* Verify API */
 #include "lock.h"
 
-/* CVS headers.  */
+/* CVS */
+#include "parseinfo.h"
 #include "recurse.h"
 #include "repos.h"
 

Index: logmsg.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/logmsg.c,v
retrieving revision 1.111
retrieving revision 1.112
diff -u -b -r1.111 -r1.112
--- logmsg.c    12 Sep 2007 18:27:07 -0000      1.111
+++ logmsg.c    12 Sep 2008 19:55:28 -0000      1.112
@@ -1,7 +1,7 @@
 /*
- * Copyright (C) 1986-2007 The Free Software Foundation, Inc.
+ * Copyright (C) 1986-2008 The Free Software Foundation, Inc.
  *
- * Portions Copyright (C) 1998-2007 Derek Price,
+ * Portions Copyright (C) 1998-2008 Derek Price,
  *                                  Ximbiot LLC <http://ximbiot.com>,
  *                                  and others.
  *
@@ -19,7 +19,11 @@
 /* Verify interface.  */
 #include "logmsg.h"
 
-/* CVS Headers.  */
+/* GNULIB */
+#include "quote.h"
+
+/* CVS */
+#include "parseinfo.h"
 #include "repos.h"
 
 #include "cvs.h"
@@ -28,16 +32,8 @@
 
 static int find_type (Node * p, void *closure);
 static int fmt_proc (Node * p, void *closure);
-static int logfile_write (const char *repository, const char *filter,
-                         const char *message, FILE * logfp, List * changes);
 static int logmsg_list_to_args_proc (Node *p, void *closure);
-static int rcsinfo_proc (const char *repository, const char *template,
-                         void *closure );
-static int update_logfile_proc (const char *repository, const char *filter,
-                                void *closure);
 static void setup_tmpfile (FILE * xfp, char *xprefix, List * changes);
-static int verifymsg_proc (const char *repository, const char *script,
-                           void *closure );
 
 static FILE *fp;
 static Ctype type;
@@ -185,9 +181,59 @@
        (void) fprintf (fp, "%s ", p->key);
        col += strlen (p->key) + 1;
     }
+    return 0;
+}
+
+
+
+/*
+ * callback proc for Parse_Info for rcsinfo templates this routine basically
+ * copies the matching template onto the end of the tempfile we are setting
+ * up
+ */
+/* ARGSUSED */
+static int
+rcsinfo_proc (const char *repository, const char *template,
+             const char *file, int line, void *closure)
+{
+    static char *last_template;
+    FILE *tfp;
+
+    /* nothing to do if the last one included is the same as this one */
+    if (last_template && STREQ (last_template, template))
+       return (0);
+    if (last_template)
+       free (last_template);
+    last_template = xstrdup (template);
+
+    if ((tfp = CVS_FOPEN (template, "r")) != NULL)
+    {
+       char *line = NULL;
+       size_t line_chars_allocated = 0;
+
+       while (getline (&line, &line_chars_allocated, tfp) >= 0)
+           (void) fputs (line, fp);
+       if (ferror (tfp))
+           error (0, errno, "%s:%d: warning: cannot read %s",
+                  file, line, quote (template));
+       if (fclose (tfp) < 0)
+           error (0, errno,
+                  "%s:%d: warning: cannot close %s",
+                  file, line, quote (template));
+       if (line)
+           free (line);
     return (0);
+    }
+    else
+    {
+       error (0, errno, "%s:%d: Couldn't open rcsinfo template file %s",
+              file, line, quote (template));
+       return 1;
+    }
 }
 
+
+
 /*
  * Builds a temporary file using setup_tmpfile() and invokes the user's
  * editor on the file.  The header garbage in the resultant file is then
@@ -236,9 +282,9 @@
            (void) fprintf (fp, "\n");
     }
 
-    if (repository != NULL)
+    if (repository)
        /* tack templates on if necessary */
-       (void) Parse_Info (CVSROOTADM_RCSINFO, repository, rcsinfo_proc,
+       Parse_Info (CVSROOTADM_RCSINFO, repository, rcsinfo_proc,
                PIOPT_ALL, NULL);
     else
     {
@@ -403,6 +449,141 @@
     free (fname);
 }
 
+
+
+/*  This routine is called by Parse_Info.  It runs the
+ *  message verification script.
+ */
+static int
+verifymsg_proc (const char *repository, const char *script,
+               const char *file, int line, void *closure)
+{
+    char *verifymsg_script;
+#ifdef SUPPORT_OLD_INFO_FMT_STRINGS
+    char *newscript = NULL;
+#endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
+    struct verifymsg_proc_data *vpd = closure;
+    const char *srepos = Short_Repository (repository);
+
+#ifdef SUPPORT_OLD_INFO_FMT_STRINGS
+    if (!strchr (script, '%'))
+    {
+       error (0, 0,
+"%s:%d: warning: verifymsg line doesn't contain any format strings.\n"
+"Appending default format string (%s), but please be aware that this usage\n"
+"is deprecated.",
+              file, line, quote ("%1"));
+       script = newscript = Xasprintf ("%s %%l", script);
+    }
+#endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
+
+    /* If we don't already have one, open a temporary file, write the message
+     * to the temp file, and close the file.
+     *
+     * We do this here so that we only create the file when there is a
+     * verifymsg script specified and we only create it once when there is
+     * more than one verifymsg script specified.
+     */
+    if (vpd->fname == NULL)
+    {
+       FILE *fp;
+       if ((fp = cvs_temp_file (&(vpd->fname))) == NULL)
+           error (1, errno, "%s:%d: cannot create temporary file %s",
+                  file, line, quote (vpd->fname));
+
+       if (vpd->message != NULL)
+           fputs (vpd->message, fp);
+       if (vpd->message == NULL ||
+           (vpd->message)[0] == '\0' ||
+           (vpd->message)[strlen (vpd->message) - 1] != '\n')
+           putc ('\n', fp);
+       if (fclose (fp) == EOF)
+           error (1, errno, "%s:%d: error closing temporary file %s",
+                  file, line, quote (vpd->fname));
+
+       if (config->RereadLogAfterVerify == LOGMSG_REREAD_STAT)
+       {
+           /* Remember the status of the temp file for later */
+           if (stat (vpd->fname, &(vpd->pre_stbuf)) != 0)
+               error (1, errno, "%s:%d: cannot stat temp file %s",
+                      file, line, quote (vpd->fname));
+
+           /*
+            * See if we need to sleep before running the verification
+            * script to avoid time-stamp races.
+            */
+           sleep_past (vpd->pre_stbuf.st_mtime);
+       }
+    } /* if (vpd->fname == NULL) */
+
+    /*
+     * Cast any NULL arguments as appropriate pointers as this is an
+     * stdarg function and we need to be certain the caller gets what
+     * is expected.
+     */
+    verifymsg_script = format_cmdline (
+#ifdef SUPPORT_OLD_INFO_FMT_STRINGS
+                                       false, srepos,
+#endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
+                                       file, line, script,
+                                      "c", "s", cvs_cmd_name,
+#ifdef SERVER_SUPPORT
+                                      "R", "s", referrer
+                                      ? referrer->original : "NONE",
+#endif /* SERVER_SUPPORT */
+                                       "p", "s", srepos,
+                                       "r", "s",
+                                       current_parsed_root->directory,
+                                       "l", "s", vpd->fname,
+                                      "sV", ",", vpd->changes,
+                                      logmsg_list_to_args_proc, (void *) NULL,
+                                      (char *) NULL);
+
+#ifdef SUPPORT_OLD_INFO_FMT_STRINGS
+    if (newscript) free (newscript);
+#endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
+
+    if (!verifymsg_script || !strlen (verifymsg_script))
+    {
+       if (verifymsg_script) free (verifymsg_script);
+       verifymsg_script = NULL;
+       error (0, 0, "%s:%d: verifymsg proc resolved to the empty string!",
+              file, line);
+       return 1;
+    }
+
+    run_setup (verifymsg_script);
+
+    free (verifymsg_script);
+
+    /* FIXME - because run_exec can return negative values and Parse_Info adds
+     * the values of each call to this function to get a total error, we are
+     * calling abs on the value of run_exec to ensure two errors do not sum to
+     * zero.
+     *
+     * The only REALLY obnoxious thing about this, I guess, is that a -1 return
+     * code from run_exec can mean we failed to call the process for some
+     * reason and should care about errno or that the process we called
+     * returned -1 and the value of errno is undefined.  In other words,
+     * run_exec should probably be rewritten to have two return codes.  one
+     * which is its own exit status and one which is the child process's.  So
+     * there.  :P
+     *
+     * Once run_exec is returning two error codes, we should probably be
+     * failing here with an error message including errno when we get the
+     * return code which means we care about errno, in case you missed that
+     * little tidbit.
+     *
+     * I do happen to know we just fail for a non-zero value anyway and I
+     * believe the docs actually state that if the verifymsg_proc returns a
+     * "non-zero" value we will fail.
+     */
+    return abs (run_exec (RUN_TTY, RUN_TTY, RUN_TTY,
+                         RUN_NORMAL | RUN_SIGIGNORE));
+}
+
+
+
 /* Runs the user-defined verification script as part of the commit or import 
    process.  This verification is meant to be run whether or not the user 
    included the -m attribute.  unlike the do_editor function, this is 
@@ -540,47 +721,6 @@
 
 
 /*
- * callback proc for Parse_Info for rcsinfo templates this routine basically
- * copies the matching template onto the end of the tempfile we are setting
- * up
- */
-/* ARGSUSED */
-static int
-rcsinfo_proc (const char *repository, const char *template, void *closure)
-{
-    static char *last_template;
-    FILE *tfp;
-
-    /* nothing to do if the last one included is the same as this one */
-    if (last_template && STREQ (last_template, template))
-       return (0);
-    if (last_template)
-       free (last_template);
-    last_template = xstrdup (template);
-
-    if ((tfp = CVS_FOPEN (template, "r")) != NULL)
-    {
-       char *line = NULL;
-       size_t line_chars_allocated = 0;
-
-       while (getline (&line, &line_chars_allocated, tfp) >= 0)
-           (void) fputs (line, fp);
-       if (ferror (tfp))
-           error (0, errno, "warning: cannot read %s", template);
-       if (fclose (tfp) < 0)
-           error (0, errno, "warning: cannot close %s", template);
-       if (line)
-           free (line);
-       return (0);
-    }
-    else
-    {
-       error (0, errno, "Couldn't open rcsinfo template file %s", template);
-       return (1);
-    }
-}
-
-/*
  * Uses setup_tmpfile() to pass the updated message on directly to any
  * logfile programs that have a regular expression match for the checked in
  * directory in the source repository.  The log information is fed into the
@@ -594,43 +734,184 @@
 
 
 
-void
-Update_Logfile (const char *repository, const char *xmessage, FILE *xlogfp,
-                List *xchanges)
+/*
+ * Writes some stuff to the logfile "filter" and returns the status of the
+ * filter program.
+ */
+static int
+logfile_write (const char *repository, const char *filter,
+              const char *file, int line, const char *message,
+               FILE *logfp, List *changes)
 {
-    struct ulp_data ud;
+    char *cmdline;
+    FILE *pipefp;
+    char *cp;
+    int c;
+    int pipestatus;
+    const char *srepos = Short_Repository (repository);
 
-    /* nothing to do if the list is empty */
-    if (xchanges == NULL || xchanges->list->next == xchanges->list)
-       return;
+    assert (repository);
 
-    /* set up vars for update_logfile_proc */
-    ud.message = xmessage;
-    ud.logfp = xlogfp;
-    ud.changes = xchanges;
+    /* The user may specify a format string as part of the filter.
+       Originally, `%s' was the only valid string.  The string that
+       was substituted for it was:
 
-    /* call Parse_Info to do the actual logfile updates */
-    (void) Parse_Info (CVSROOTADM_LOGINFO, repository, update_logfile_proc,
-                      PIOPT_ALL, &ud);
-}
+         <repository-name> <file1> <file2> <file3> ...
 
+       Each file was either a new directory/import (T_TITLE), or a
+       added (T_ADDED), modified (T_MODIFIED), or removed (T_REMOVED)
+       file.
 
+       It is desirable to preserve that behavior so lots of commitlog
+       scripts won't die when they get this new code.  At the same
+       time, we'd like to pass other information about the files (like
+       version numbers, statuses, or checkin times).
 
-/*
- * callback proc to actually do the logfile write from Update_Logfile
- */
-static int
-update_logfile_proc (const char *repository, const char *filter, void *closure)
-{
-    struct ulp_data *udp = closure;
-    TRACE (TRACE_FUNCTION, "update_logfile_proc(%s,%s)", repository, filter);
-    return logfile_write (repository, filter, udp->message, udp->logfp,
-                          udp->changes);
-}
+       The solution is to allow a format string that allows us to
+       specify those other pieces of information.  The format string
+       will be composed of `%' followed by a single format character,
+       or followed by a set of format characters surrounded by `{' and
+       `}' as separators.  The format characters are:
 
+         s = file name
+         a = file action (status)
+        V = old version number (pre-checkin)
+        v = new version number (post-checkin)
 
+       For example, valid format strings are:
 
-/* static int
+         %{}
+        %s
+        %{s}
+        %{sVv}
+
+       There's no reason that more items couldn't be added (like
+       modification date or file status [added, modified, updated,
+       etc.]) -- the code modifications would be minimal (logmsg.c
+       (title_proc) and commit.c (check_fileproc)).
+
+       The output will be a string of tokens separated by spaces.  For
+       backwards compatibility, the the first token will be the
+       repository name.  The rest of the tokens will be
+       comma-delimited lists of the information requested in the
+       format string.  For example, if `/u/src/master' is the
+       repository, `%{sVv}' is the format string, and three files
+       (ChangeLog, Makefile, foo.c) were modified, the output might
+       be:
+
+         /u/src/master ChangeLog,1.1,1.2 Makefile,1.3,1.4 foo.c,1.12,1.13
+
+       Why this duplicates the old behavior when the format string is
+       `%s' is left as an exercise for the reader. */
+
+    /* %c = cvs_cmd_name
+     * %p = shortrepos
+     * %r = repository
+     * %{saVv} = file name, file action (status)
+                 old revision (precommit), new revision (postcommit)
+     */
+    /*
+     * Cast any NULL arguments as appropriate pointers as this is an
+     * stdarg function and we need to be certain the caller gets what
+     * is expected.
+     */
+    cmdline = format_cmdline (
+#ifdef SUPPORT_OLD_INFO_FMT_STRINGS
+                             !config->UseNewInfoFmtStrings, srepos,
+#endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
+                             file, line, filter,
+                             "c", "s", cvs_cmd_name,
+#ifdef SERVER_SUPPORT
+                             "R", "s", referrer ? referrer->original : "NONE",
+#endif /* SERVER_SUPPORT */
+                             "p", "s", srepos,
+                             "r", "s", current_parsed_root->directory,
+                             "saTVv", ",", changes,
+                             logmsg_list_to_args_proc, (void *) NULL,
+                             (char *) NULL);
+    if (!cmdline || !strlen (cmdline))
+    {
+       if (cmdline) free (cmdline);
+       error (0, 0, "%s:%d: logmsg proc resolved to the empty string!",
+              file, line);
+       return 1;
+    }
+
+    if ((pipefp = run_popen (cmdline, "w")) == NULL)
+    {
+       if (!noexec)
+           error (0, 0, "%s:%d: cannot write entry to log filter: %s",
+                  file, line, quote (cmdline));
+       free (cmdline);
+       return 1;
+    }
+    (void) fprintf (pipefp, "Update of %s\n", repository);
+    (void) fprintf (pipefp, "In directory %s:", hostname);
+    cp = xgetcwd ();
+    if (cp == NULL)
+       fprintf (pipefp, "<cannot get working directory: %s>\n\n",
+                strerror (errno));
+    else
+    {
+       fprintf (pipefp, "%s\n\n", cp);
+       free (cp);
+    }
+
+    setup_tmpfile (pipefp, "", changes);
+    (void) fprintf (pipefp, "Log Message:\n%s\n", (message) ? message : "");
+    if (logfp)
+    {
+       (void) fprintf (pipefp, "Status:\n");
+       rewind (logfp);
+       while ((c = getc (logfp)) != EOF)
+           (void) putc (c, pipefp);
+    }
+    free (cmdline);
+    pipestatus = pclose (pipefp);
+    return ((pipestatus == -1) || (pipestatus == 127)) ? 1 : 0;
+}
+
+
+
+/*
+ * callback proc to actually do the logfile write from Update_Logfile
+ */
+static int
+update_logfile_proc (const char *repository, const char *filter,
+                    const char *file, int line, void *closure)
+{
+    struct ulp_data *udp = closure;
+    TRACE (TRACE_FUNCTION, "update_logfile_proc (%s, %s, %s, %d)",
+          repository, filter, file, line);
+    return logfile_write (repository, filter, file, line,
+                         udp->message, udp->logfp, udp->changes);
+}
+
+
+
+void
+Update_Logfile (const char *repository, const char *xmessage, FILE *xlogfp,
+                List *xchanges)
+{
+    struct ulp_data ud;
+
+    /* nothing to do if the list is empty */
+    if (xchanges == NULL || xchanges->list->next == xchanges->list)
+       return;
+
+    /* set up vars for update_logfile_proc */
+    ud.message = xmessage;
+    ud.logfp = xlogfp;
+    ud.changes = xchanges;
+
+    /* call Parse_Info to do the actual logfile updates */
+    Parse_Info (CVSROOTADM_LOGINFO, repository, update_logfile_proc,
+               PIOPT_ALL, &ud);
+}
+
+
+
+/* static int
  * logmsg_list_to_args_proc( Node *p, void *closure )
  * This function is intended to be passed into walklist() with a list of tags
  * (nodes in the same format as pretag_list_proc() accepts - p->key = tagname
@@ -765,267 +1046,3 @@
     *c->d = d;
     return 0;
 }
-
-
-
-/*
- * Writes some stuff to the logfile "filter" and returns the status of the
- * filter program.
- */
-static int
-logfile_write (const char *repository, const char *filter, const char *message,
-               FILE *logfp, List *changes)
-{
-    char *cmdline;
-    FILE *pipefp;
-    char *cp;
-    int c;
-    int pipestatus;
-    const char *srepos = Short_Repository (repository);
-
-    assert (repository);
-
-    /* The user may specify a format string as part of the filter.
-       Originally, `%s' was the only valid string.  The string that
-       was substituted for it was:
-
-         <repository-name> <file1> <file2> <file3> ...
-
-       Each file was either a new directory/import (T_TITLE), or a
-       added (T_ADDED), modified (T_MODIFIED), or removed (T_REMOVED)
-       file.
-
-       It is desirable to preserve that behavior so lots of commitlog
-       scripts won't die when they get this new code.  At the same
-       time, we'd like to pass other information about the files (like
-       version numbers, statuses, or checkin times).
-
-       The solution is to allow a format string that allows us to
-       specify those other pieces of information.  The format string
-       will be composed of `%' followed by a single format character,
-       or followed by a set of format characters surrounded by `{' and
-       `}' as separators.  The format characters are:
-
-         s = file name
-         a = file action (status)
-        V = old version number (pre-checkin)
-        v = new version number (post-checkin)
-
-       For example, valid format strings are:
-
-         %{}
-        %s
-        %{s}
-        %{sVv}
-
-       There's no reason that more items couldn't be added (like
-       modification date or file status [added, modified, updated,
-       etc.]) -- the code modifications would be minimal (logmsg.c
-       (title_proc) and commit.c (check_fileproc)).
-
-       The output will be a string of tokens separated by spaces.  For
-       backwards compatibility, the the first token will be the
-       repository name.  The rest of the tokens will be
-       comma-delimited lists of the information requested in the
-       format string.  For example, if `/u/src/master' is the
-       repository, `%{sVv}' is the format string, and three files
-       (ChangeLog, Makefile, foo.c) were modified, the output might
-       be:
-
-         /u/src/master ChangeLog,1.1,1.2 Makefile,1.3,1.4 foo.c,1.12,1.13
-
-       Why this duplicates the old behavior when the format string is
-       `%s' is left as an exercise for the reader. */
-
-    /* %c = cvs_cmd_name
-     * %p = shortrepos
-     * %r = repository
-     * %{saVv} = file name, file action (status)
-                 old revision (precommit), new revision (postcommit)
-     */
-    /*
-     * Cast any NULL arguments as appropriate pointers as this is an
-     * stdarg function and we need to be certain the caller gets what
-     * is expected.
-     */
-    cmdline = format_cmdline (
-#ifdef SUPPORT_OLD_INFO_FMT_STRINGS
-                             !config->UseNewInfoFmtStrings, srepos,
-#endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
-                             filter,
-                             "c", "s", cvs_cmd_name,
-#ifdef SERVER_SUPPORT
-                             "R", "s", referrer ? referrer->original : "NONE",
-#endif /* SERVER_SUPPORT */
-                             "p", "s", srepos,
-                             "r", "s", current_parsed_root->directory,
-                             "saTVv", ",", changes,
-                             logmsg_list_to_args_proc, (void *) NULL,
-                             (char *) NULL);
-    if (!cmdline || !strlen (cmdline))
-    {
-       if (cmdline) free (cmdline);
-       error (0, 0, "logmsg proc resolved to the empty string!");
-       return 1;
-    }
-
-    if ((pipefp = run_popen (cmdline, "w")) == NULL)
-    {
-       if (!noexec)
-           error (0, 0, "cannot write entry to log filter: %s", cmdline);
-       free (cmdline);
-       return 1;
-    }
-    (void) fprintf (pipefp, "Update of %s\n", repository);
-    (void) fprintf (pipefp, "In directory %s:", hostname);
-    cp = xgetcwd ();
-    if (cp == NULL)
-       fprintf (pipefp, "<cannot get working directory: %s>\n\n",
-                strerror (errno));
-    else
-    {
-       fprintf (pipefp, "%s\n\n", cp);
-       free (cp);
-    }
-
-    setup_tmpfile (pipefp, "", changes);
-    (void) fprintf (pipefp, "Log Message:\n%s\n", (message) ? message : "");
-    if (logfp)
-    {
-       (void) fprintf (pipefp, "Status:\n");
-       rewind (logfp);
-       while ((c = getc (logfp)) != EOF)
-           (void) putc (c, pipefp);
-    }
-    free (cmdline);
-    pipestatus = pclose (pipefp);
-    return ((pipestatus == -1) || (pipestatus == 127)) ? 1 : 0;
-}
-
-
-
-/*  This routine is called by Parse_Info.  It runs the
- *  message verification script.
- */
-static int
-verifymsg_proc (const char *repository, const char *script, void *closure)
-{
-    char *verifymsg_script;
-#ifdef SUPPORT_OLD_INFO_FMT_STRINGS
-    char *newscript = NULL;
-#endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
-    struct verifymsg_proc_data *vpd = closure;
-    const char *srepos = Short_Repository (repository);
-
-#ifdef SUPPORT_OLD_INFO_FMT_STRINGS
-    if (!strchr (script, '%'))
-    {
-       error (0, 0,
-              "warning: verifymsg line doesn't contain any format strings:\n"
-               "    \"%s\"\n"
-               "Appending default format string (\" %%l\"), but be aware that 
this usage is\n"
-               "deprecated.", script);
-       script = newscript = Xasprintf ("%s %%l", script);
-    }
-#endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
-
-    /* If we don't already have one, open a temporary file, write the message
-     * to the temp file, and close the file.
-     *
-     * We do this here so that we only create the file when there is a
-     * verifymsg script specified and we only create it once when there is
-     * more than one verifymsg script specified.
-     */
-    if (vpd->fname == NULL)
-    {
-       FILE *fp;
-       if ((fp = cvs_temp_file (&(vpd->fname))) == NULL)
-           error (1, errno, "cannot create temporary file %s", vpd->fname);
-
-       if (vpd->message != NULL)
-           fputs (vpd->message, fp);
-       if (vpd->message == NULL ||
-           (vpd->message)[0] == '\0' ||
-           (vpd->message)[strlen (vpd->message) - 1] != '\n')
-           putc ('\n', fp);
-       if (fclose (fp) == EOF)
-           error (1, errno, "%s", vpd->fname);
-
-       if (config->RereadLogAfterVerify == LOGMSG_REREAD_STAT)
-       {
-           /* Remember the status of the temp file for later */
-           if (stat (vpd->fname, &(vpd->pre_stbuf)) != 0)
-               error (1, errno, "cannot stat temp file %s", vpd->fname);
-
-           /*
-            * See if we need to sleep before running the verification
-            * script to avoid time-stamp races.
-            */
-           sleep_past (vpd->pre_stbuf.st_mtime);
-       }
-    } /* if (vpd->fname == NULL) */
-
-    /*
-     * Cast any NULL arguments as appropriate pointers as this is an
-     * stdarg function and we need to be certain the caller gets what
-     * is expected.
-     */
-    verifymsg_script = format_cmdline (
-#ifdef SUPPORT_OLD_INFO_FMT_STRINGS
-                                       false, srepos,
-#endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
-                                       script,
-                                      "c", "s", cvs_cmd_name,
-#ifdef SERVER_SUPPORT
-                                      "R", "s", referrer
-                                      ? referrer->original : "NONE",
-#endif /* SERVER_SUPPORT */
-                                       "p", "s", srepos,
-                                       "r", "s",
-                                       current_parsed_root->directory,
-                                       "l", "s", vpd->fname,
-                                      "sV", ",", vpd->changes,
-                                      logmsg_list_to_args_proc, (void *) NULL,
-                                      (char *) NULL);
-
-#ifdef SUPPORT_OLD_INFO_FMT_STRINGS
-    if (newscript) free (newscript);
-#endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
-
-    if (!verifymsg_script || !strlen (verifymsg_script))
-    {
-       if (verifymsg_script) free (verifymsg_script);
-       verifymsg_script = NULL;
-       error (0, 0, "verifymsg proc resolved to the empty string!");
-       return 1;
-    }
-
-    run_setup (verifymsg_script);
-
-    free (verifymsg_script);
-
-    /* FIXME - because run_exec can return negative values and Parse_Info adds
-     * the values of each call to this function to get a total error, we are
-     * calling abs on the value of run_exec to ensure two errors do not sum to
-     * zero.
-     *
-     * The only REALLY obnoxious thing about this, I guess, is that a -1 return
-     * code from run_exec can mean we failed to call the process for some
-     * reason and should care about errno or that the process we called
-     * returned -1 and the value of errno is undefined.  In other words,
-     * run_exec should probably be rewritten to have two return codes.  one
-     * which is its own exit status and one which is the child process's.  So
-     * there.  :P
-     *
-     * Once run_exec is returning two error codes, we should probably be
-     * failing here with an error message including errno when we get the
-     * return code which means we care about errno, in case you missed that
-     * little tidbit.
-     *
-     * I do happen to know we just fail for a non-zero value anyway and I
-     * believe the docs actually state that if the verifymsg_proc returns a
-     * "non-zero" value we will fail.
-     */
-    return abs (run_exec (RUN_TTY, RUN_TTY, RUN_TTY,
-                         RUN_NORMAL | RUN_SIGIGNORE));
-}

Index: main.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/main.c,v
retrieving revision 1.277
retrieving revision 1.278
diff -u -b -r1.277 -r1.278
--- main.c      28 Jan 2008 05:32:59 -0000      1.277
+++ main.c      12 Sep 2008 19:55:28 -0000      1.278
@@ -1,7 +1,7 @@
 /*
  * Copyright (C) 1986-2008 The Free Software Foundation, Inc.
  *
- * Portions Copyright (C) 1998-2007 Derek Price,
+ * Portions Copyright (C) 1998-2008 Derek Price,
  *                                  Ximbiot LLC <http://ximbiot.com>,
  *                                  and others.
  *
@@ -22,16 +22,17 @@
 # include <config.h>
 #endif
 
-/* GNULIB Headers.  */
+/* GNULIB */
 #include "closeout.h"
 #include "setenv.h"
 #include "strftime.h"
 #include "xgethostname.h"
 
-/* CVS Headers.  */
+/* CVS */
 #include "command_line_opt.h"
 #include "gpg.h"
 #include "lock.h"
+#include "parseinfo.h"
 #include "sign.h"
 #include "verify.h"
 

Index: parseinfo.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/parseinfo.c,v
retrieving revision 1.94
retrieving revision 1.95
diff -u -b -r1.94 -r1.95
--- parseinfo.c 11 Mar 2008 00:33:11 -0000      1.94
+++ parseinfo.c 12 Sep 2008 19:55:28 -0000      1.95
@@ -173,7 +173,8 @@
                        expand_path (value, current_parsed_root->directory,
                                     true, infofile, line_number)))
            {
-               err += callproc (repository, expanded_value, closure);
+               err += callproc (repository, expanded_value,
+                                infofile, line_number, closure);
                free (expanded_value);
            }
            else
@@ -201,7 +202,8 @@
                                      true, infofile, line_number);
        if (expanded_value)
        {
-           err += callproc (repository, expanded_value, closure);
+           err += callproc (repository, expanded_value,
+                            infofile, line_number, closure);
            free (expanded_value);
        }
        else
@@ -221,7 +223,8 @@
                                      true, infofile, line_number);
        if (expanded_value)
        {
-           err += callproc (repository, expanded_value, closure);
+           err += callproc (repository, expanded_value,
+                            infofile, line_number, closure);
            free (expanded_value);
        }
        else

Index: parseinfo.h
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/parseinfo.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- parseinfo.h 28 Aug 2007 17:33:14 -0000      1.9
+++ parseinfo.h 12 Sep 2008 19:55:29 -0000      1.10
@@ -94,6 +94,20 @@
 
 
 
+/* Option flags for Parse_Info().  */
+#define PIOPT_ALL 1    /* accept "all" keyword */
+
+
+
+/* Callback proc for Parse_Info().  */
+typedef        int (*CALLPROC) (const char *repository, const char *value,
+                         const char *filename, int linenum, void *closure);
+
+
+
+/* Function prototypes.  */
+int Parse_Info (const char *infofile, const char *repository,
+                CALLPROC callproc, int opt, void *closure);
 bool parse_error (const char *, unsigned int);
 struct config *parse_config (const char *, const char *);
 void free_config (struct config *data);

Index: rcs.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/rcs.c,v
retrieving revision 1.393
retrieving revision 1.394
diff -u -b -r1.393 -r1.394
--- rcs.c       12 Sep 2008 19:46:46 -0000      1.393
+++ rcs.c       12 Sep 2008 19:55:29 -0000      1.394
@@ -1,7 +1,7 @@
 /*
- * Copyright (C) 1986-2007 The Free Software Foundation, Inc.
+ * Copyright (C) 1986-2008 The Free Software Foundation, Inc.
  *
- * Portions Copyright (C) 1998-2007 Derek Price,
+ * Portions Copyright (C) 1998-2008 Derek Price,
  *                                  Ximbiot LLC <http://ximbiot.com>,
  *                                  and others.
  *
@@ -22,16 +22,18 @@
 /* Verify interface.  */
 #include "rcs.h"
 
-/* GNULIB headers.  */
+/* GNULIB */
 #include "base64.h"
 
-/* CVS headers.  */
+/* CVS */
 #include "edit.h"
+#include "getpagesize.h"
 #include "gpg.h"
 #include "hardlink.h"
 #ifdef HAVE_MMAP
 # include "mman.h"
 #endif
+#include "parseinfo.h"
 #include "repos.h"
 #include "sign.h"
 

Index: root.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/root.c,v
retrieving revision 1.136
retrieving revision 1.137
diff -u -b -r1.136 -r1.137
--- root.c      10 Sep 2008 16:43:54 -0000      1.136
+++ root.c      12 Sep 2008 19:55:29 -0000      1.137
@@ -1,7 +1,7 @@
 /*
  * Copyright (C) 1986-2008 The Free Software Foundation, Inc.
  *
- * Portions Copyright (C) 1998-2007 Derek Price,
+ * Portions Copyright (C) 1998-2008 Derek Price,
  *                                  Ximbiot LLC <http://ximbiot.com>,
  *                                  and others.
  *
@@ -29,6 +29,7 @@
 #include "quote.h"
 
 /* CVS */
+#include "parseinfo.h"
 #include "repos.h"
 #include "stack.h"
 

Index: sanity.sh
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/sanity.sh,v
retrieving revision 1.1200
retrieving revision 1.1201
diff -u -b -r1.1200 -r1.1201
--- sanity.sh   12 Sep 2008 15:43:12 -0000      1.1200
+++ sanity.sh   12 Sep 2008 19:55:29 -0000      1.1201
@@ -20113,8 +20113,7 @@
 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
 $SPROG commit: Rebuilding administrative file database
 $SPROG commit: loginfo:[0-9]*: no such user variable \${=MYENV}
-$SPROG \[commit aborted\]: Unknown format character in info file ('').
-Info files are the hook files, verifymsg, taginfo, commitinfo, etc\."
+$SPROG \[commit aborted\]: loginfo:[0-9]*: Unknown format character (\`')\."
          cd ..
 
          modify_repo mkdir $CVSROOT_DIRNAME/first-dir
@@ -20301,124 +20300,169 @@
 "${SPROG}"' add: scheduling file `file1'\'' for addition
 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently'
          echo "cvs -s OTHER=not-this -s MYENV=env-" >>$HOME/.cvsrc
-         dotest info-intfmt-6b "${testcvs} -q -s OTHER=value ci -m add-it" \
-"${TESTDIR}/$CVSROOTDIR/third-dir/file1,v  <--  file1
+         dotest info-intfmt-6b "$testcvs -q -s OTHER=value ci -m add-it" \
+"$TESTDIR/$CVSROOTDIR/third-dir/file1,v  <--  file1
 initial revision: 1\.1
-${SPROG} commit: loginfo:[0-9]*: no such user variable \${=ZEE}
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\."
+$SPROG commit: loginfo:[0-9]*: no such user variable \${=ZEE}
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\."
          echo line0 >>file1
-         dotest info-intfmt-6c "${testcvs} -q -sOTHER=foo ci -m mod-it" \
+         dotest info-intfmt-6c "$testcvs -q -sOTHER=foo ci -m mod-it" \
 "$TESTDIR/$CVSROOTDIR/third-dir/file1,v  <--  file1
 new revision: 1\.2; previous revision: 1\.1
-${SPROG} commit: loginfo:[0-9]*: no such user variable \${=ZEE}
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\."
+$SPROG commit: loginfo:[0-9]*: no such user variable \${=ZEE}
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\."
          echo line1 >>file1
-         dotest info-intfmt-7 "${testcvs} -q -s OTHER=value -s ZEE=z ci -m 
mod-it" \
+         dotest info-intfmt-7 "$testcvs -q -s OTHER=value -s ZEE=z ci -m 
mod-it" \
 "$TESTDIR/$CVSROOTDIR/third-dir/file1,v  <--  file1
 new revision: 1\.3; previous revision: 1\.2
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\."
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\."
           rm file1
          dotest info-intfmt-8 "${testcvs} -q rm -f file1" \
 "${SPROG} remove: use .${SPROG} commit. to remove this file permanently"
-         dotest info-intfmt-8a "${testcvs} -q ci -m remove-it" \
+         dotest info-intfmt-8a "$testcvs -q ci -m remove-it" \
 "$TESTDIR/$CVSROOTDIR/third-dir/file1,v  <--  file1
 new revision: delete; previous revision: 1\.3
-${SPROG} commit: loginfo:[0-9]*: no such user variable \${=ZEE}
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\."
+$SPROG commit: loginfo:[0-9]*: no such user variable \${=ZEE}
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\."
           echo "resurrected file1" >file1
          dotest info-8b "$testcvs add file1" \
 "$SPROG add: Re-adding file \`file1' after dead revision 1\.4\.
 $SPROG add: use \`$SPROG commit' to add this file permanently"
-         dotest info-8c "${testcvs} -q ci -m add-it" \
+         dotest info-8c "$testcvs -q ci -m add-it" \
 "$TESTDIR/$CVSROOTDIR/third-dir/file1,v  <--  file1
 new revision: 1.5; previous revision: 1\.4
-${SPROG} commit: loginfo:[0-9]*: no such user variable \${=ZEE}
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\.
-${SPROG} commit: Using deprecated info format strings\.  Convert your scripts 
to use
-the new argument format and remove '1's from your info file format strings\."
+$SPROG commit: loginfo:[0-9]*: no such user variable \${=ZEE}
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\.
+$SPROG commit: loginfo:[0-9]*: Using deprecated info format strings\.  Convert 
your
+scripts to use the new argument format and remove '1's from your info file
+format strings\."
 
          cd ..
          dotest info-intfmt-9 "cat $TESTDIR/testlog" 
"xenv-valueyz=${username}=$TESTDIR/$CVSROOTDIR="
@@ -20964,16 +21008,14 @@
 and set UseNewInfoFmtStrings=yes in CVSROOT/config\.  After that, convert
 individual command lines and scripts to handle the new format at your
 leisure\."
-         dotest taginfo-6 "${testcvs} -q tag tag1" \
-"${SPROG} tag: warning: taginfo line contains no format strings:
-    \"${TESTDIR}/1/loggit\"
-Filling in old defaults ('%t %o %p %{sv}'), but please be aware that this
+         dotest taginfo-6 "$testcvs -q tag tag1" \
+"$SPROG tag: taginfo:[0-9]*: warning: taginfo line contains no format strings\.
+Filling in old defaults (\` %t %o %p %{sv}'), but please be aware that this
 usage is deprecated\.
 T file1"
-         dotest taginfo-7 "${testcvs} -q tag -b br" \
-"${SPROG} tag: warning: taginfo line contains no format strings:
-    \"${TESTDIR}/1/loggit\"
-Filling in old defaults ('%t %o %p %{sv}'), but please be aware that this
+         dotest taginfo-7 "$testcvs -q tag -b br" \
+"$SPROG tag: taginfo:[0-9]*: warning: taginfo line contains no format strings\.
+Filling in old defaults (\` %t %o %p %{sv}'), but please be aware that this
 usage is deprecated\.
 T file1"
          dotest taginfo-8 "$testcvs -q update -r br" 'U file1'
@@ -20989,70 +21031,61 @@
 and set UseNewInfoFmtStrings=yes in CVSROOT/config\.  After that, convert
 individual command lines and scripts to handle the new format at your
 leisure\."
-         dotest taginfo-10 "${testcvs} -q tag -F -c brtag" \
-"${SPROG} tag: warning: taginfo line contains no format strings:
-    \"${TESTDIR}/1/loggit\"
-Filling in old defaults ('%t %o %p %{sv}'), but please be aware that this
+         dotest taginfo-10 "$testcvs -q tag -F -c brtag" \
+"$SPROG tag: taginfo:[0-9]*: warning: taginfo line contains no format strings\.
+Filling in old defaults (\` %t %o %p %{sv}'), but please be aware that this
 usage is deprecated\.
 T file1"
 
-         dotest_fail taginfo-11 "${testcvs} -q tag rejectme" \
-"${SPROG} tag: warning: taginfo line contains no format strings:
-    \"${TESTDIR}/1/loggit\"
-Filling in old defaults ('%t %o %p %{sv}'), but please be aware that this
+         dotest_fail taginfo-11 "$testcvs -q tag rejectme" \
+"$SPROG tag: taginfo:[0-9]*: warning: taginfo line contains no format strings\.
+Filling in old defaults (\` %t %o %p %{sv}'), but please be aware that this
 usage is deprecated\.
-${SPROG} tag: Pre-tag check failed
-${SPROG} \[tag aborted\]: correct the above errors first!"
+$SPROG tag: Pre-tag check failed
+$SPROG \[tag aborted\]: correct the above errors first!"
 
          # When we are using taginfo to allow/disallow, it would be
          # convenient to be able to use "cvs -n tag" to test whether
          # the allow/disallow functionality is working as expected.
-         dotest taginfo-12 "${testcvs} -nq tag rejectme" \
-"${SPROG} tag: warning: taginfo line contains no format strings:
-    \"${TESTDIR}/1/loggit\"
-Filling in old defaults ('%t %o %p %{sv}'), but please be aware that this
+         dotest taginfo-12 "$testcvs -nq tag rejectme" \
+"$SPROG tag: taginfo:[0-9]*: warning: taginfo line contains no format strings\.
+Filling in old defaults (\` %t %o %p %{sv}'), but please be aware that this
 usage is deprecated\.
 T file1"
 
          # But when taginfo is used for logging, it is a pain for -n
          # to call taginfo, since taginfo doesn't know whether -n was
          # specified or not.
-         dotest taginfo-13 "${testcvs} -nq tag would-be-tag" \
-"${SPROG} tag: warning: taginfo line contains no format strings:
-    \"${TESTDIR}/1/loggit\"
-Filling in old defaults ('%t %o %p %{sv}'), but please be aware that this
+         dotest taginfo-13 "$testcvs -nq tag would-be-tag" \
+"$SPROG tag: taginfo:[0-9]*: warning: taginfo line contains no format strings\.
+Filling in old defaults (\` %t %o %p %{sv}'), but please be aware that this
 usage is deprecated\.
 T file1"
 
          # Deleting: the cases are basically either the tag existed,
          # or it didn't exist.
-         dotest taginfo-14 "${testcvs} -q tag -d tag1" \
-"${SPROG} tag: warning: taginfo line contains no format strings:
-    \"${TESTDIR}/1/loggit\"
-Filling in old defaults ('%t %o %p %{sv}'), but please be aware that this
+         dotest taginfo-14 "$testcvs -q tag -d tag1" \
+"$SPROG tag: taginfo:[0-9]*: warning: taginfo line contains no format strings\.
+Filling in old defaults (\` %t %o %p %{sv}'), but please be aware that this
 usage is deprecated\.
 D file1"
-         dotest taginfo-15 "${testcvs} -q tag -d tag1" \
-"${SPROG} tag: warning: taginfo line contains no format strings:
-    \"${TESTDIR}/1/loggit\"
-Filling in old defaults ('%t %o %p %{sv}'), but please be aware that this
+         dotest taginfo-15 "$testcvs -q tag -d tag1" \
+"$SPROG tag: taginfo:[0-9]*: warning: taginfo line contains no format strings\.
+Filling in old defaults (\` %t %o %p %{sv}'), but please be aware that this
 usage is deprecated\."
 
          # Likewise with rtag.
-         dotest taginfo-16 "${testcvs} -q rtag tag1 first-dir" \
-"${SPROG} rtag: warning: taginfo line contains no format strings:
-    \"${TESTDIR}/1/loggit\"
-Filling in old defaults ('%t %o %p %{sv}'), but please be aware that this
+         dotest taginfo-16 "$testcvs -q rtag tag1 first-dir" \
+"$SPROG rtag: taginfo:[0-9]*: warning: taginfo line contains no format 
strings\.
+Filling in old defaults (\` %t %o %p %{sv}'), but please be aware that this
 usage is deprecated\."
-         dotest taginfo-17 "${testcvs} -q rtag -d tag1 first-dir" \
-"${SPROG} rtag: warning: taginfo line contains no format strings:
-    \"${TESTDIR}/1/loggit\"
-Filling in old defaults ('%t %o %p %{sv}'), but please be aware that this
+         dotest taginfo-17 "$testcvs -q rtag -d tag1 first-dir" \
+"$SPROG rtag: taginfo:[0-9]*: warning: taginfo line contains no format 
strings\.
+Filling in old defaults (\` %t %o %p %{sv}'), but please be aware that this
 usage is deprecated\."
-         dotest taginfo-18 "${testcvs} -q rtag -d tag1 first-dir" \
-"${SPROG} rtag: warning: taginfo line contains no format strings:
-    \"${TESTDIR}/1/loggit\"
-Filling in old defaults ('%t %o %p %{sv}'), but please be aware that this
+         dotest taginfo-18 "$testcvs -q rtag -d tag1 first-dir" \
+"$SPROG rtag: taginfo:[0-9]*: warning: taginfo line contains no format 
strings\.
+Filling in old defaults (\` %t %o %p %{sv}'), but please be aware that this
 usage is deprecated\."
 
          # The "br" example should be passing 1.1.2 or 1.1.0.2.
@@ -29059,11 +29092,10 @@
          fi
          echo more stuff >> a-lock
          dotest_fail_sort reserved-13b "$testcvs ci -m '' a-lock" \
-"    \"$TESTDIR/lockme\"
-Appending defaults (\" %r/%p %s\"), but please be aware that this usage is
+"Appending defaults (\` %r/%p %s'), but please be aware that this usage is
 $SPROG \[commit aborted\]: correct above errors first!
 $SPROG commit: Pre-commit check failed
-$SPROG commit: warning: commitinfo line contains no format strings:
+$SPROG commit: commitinfo:[0-9]*: warning: commitinfo line contains no format 
strings\.
 deprecated\.
 fred has file a-lock locked for version  1\.1"
          # OK, now test "cvs admin -l" in the case where someone
@@ -29078,9 +29110,8 @@
 1\.1 unlocked
 done"
          dotest reserved-15 "$testcvs -q ci -m success a-lock" \
-"$SPROG commit: warning: commitinfo line contains no format strings:
-    \"$TESTDIR/lockme\"
-Appending defaults (\" %r/%p %s\"), but please be aware that this usage is
+"$SPROG commit: commitinfo:[0-9]*: warning: commitinfo line contains no format 
strings\.
+Appending defaults (\` %r/%p %s'), but please be aware that this usage is
 deprecated\.
 $CVSROOT_DIRNAME/first-dir/a-lock,v  <--  a-lock
 new revision: 1\.2; previous revision: 1\.1"
@@ -29095,9 +29126,8 @@
          dotest reserved-18 "$testcvs -q update -r br a-lock" 'U a-lock'
          echo edit it >>a-lock
          dotest reserved-19 "${testcvs} -q ci -m modify a-lock" \
-"$SPROG commit: warning: commitinfo line contains no format strings:
-    \"$TESTDIR/lockme\"
-Appending defaults (\" %r/%p %s\"), but please be aware that this usage is
+"$SPROG commit: commitinfo:[0-9]*: warning: commitinfo line contains no format 
strings\.
+Appending defaults (\` %r/%p %s'), but please be aware that this usage is
 deprecated\.
 $CVSROOT_DIRNAME/first-dir/a-lock,v  <--  a-lock
 new revision: 1\.2\.2\.1; previous revision: 1\.2"
@@ -29105,10 +29135,9 @@
          # undo commitinfo changes
          cd ../CVSROOT
          echo '# vanilla commitinfo' >commitinfo
-         dotest reserved-cleanup-1 "${testcvs} -q ci -m back commitinfo" \
-"$SPROG commit: warning: commitinfo line contains no format strings:
-    \"$TESTDIR/lockme\"
-Appending defaults (\" %r/%p %s\"), but please be aware that this usage is
+         dotest reserved-cleanup-1 "$testcvs -q ci -m back commitinfo" \
+"$SPROG commit: commitinfo:[0-9]*: warning: commitinfo line contains no format 
strings\.
+Appending defaults (\` %r/%p %s'), but please be aware that this usage is
 deprecated\.
 $CVSROOT_DIRNAME/CVSROOT/commitinfo,v  <--  commitinfo
 new revision: 1\.3; previous revision: 1\.2

Index: server.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/server.c,v
retrieving revision 1.482
retrieving revision 1.483
diff -u -b -r1.482 -r1.483
--- server.c    12 Sep 2007 19:38:04 -0000      1.482
+++ server.c    12 Sep 2008 19:55:30 -0000      1.483
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 The Free Software Foundation, Inc.
+ * Copyright (C) 2008 The Free Software Foundation, Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -19,13 +19,14 @@
 /* Validate API.  */
 #include "server.h"
 
-/* GNULIB headers.  */
+/* GNULIB */
 #include "getnline.h"
+#include "quote.h"
 #include "setenv.h"
 #include "vasnprintf.h"
 #include "wait.h"
 
-/* CVS headers.  */
+/* CVS */
 #include "base.h"
 #include "buffer.h"
 #include "command_line_opt.h"
@@ -34,6 +35,7 @@
 #include "gpg.h"
 #include "ignore.h"
 #include "lock.h"
+#include "parseinfo.h"
 #include "repos.h"
 #include "watch.h"
 #include "wrapper.h"
@@ -2400,7 +2402,8 @@
  * callback proc to run a script when admin finishes.
  */
 static int
-prepost_proxy_proc (const char *repository, const char *filter, void *closure)
+prepost_proxy_proc (const char *repository, const char *filter,
+                   const char *file, int line, void *closure)
 {
     char *cmdline;
     bool *pre = closure;
@@ -2409,8 +2412,8 @@
      * %p = shortrepos
      * %r = repository
      */
-    TRACE (TRACE_FUNCTION, "prepost_proxy_proc (%s, %s, %s)", repository,
-          filter, *pre ? "pre" : "post");
+    TRACE (TRACE_FUNCTION, "prepost_proxy_proc (%s, %s, %s, %d, %s)",
+          repository, filter, file, line, *pre ? "pre" : "post");
 
     /*
      * Cast any NULL arguments as appropriate pointers as this is an
@@ -2421,7 +2424,7 @@
 # ifdef SUPPORT_OLD_INFO_FMT_STRINGS
                              0, ".",
 # endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
-                             filter,
+                             file, line, filter,
                              "c", "s", cvs_cmd_name,
                              "R", "s", referrer ? referrer->original : "NONE",
                              "p", "s", ".",
@@ -2431,11 +2434,14 @@
 
     if (!cmdline || !strlen (cmdline))
     {
+       const char *type;
        if (cmdline) free (cmdline);
        if (*pre)
-           error (0, 0, "preadmin proc resolved to the empty string!");
+           type = "preadmin";
        else
-           error (0, 0, "postadmin proc resolved to the empty string!");
+           type = "postadmin";
+       error (0, 0, "%s:%d: %s proc resolved to the empty string!",
+              file, line, type);
        return 1;
     }
 
@@ -5473,7 +5479,8 @@
 };
 
 static int
-template_proc (const char *repository, const char *template, void *closure)
+template_proc (const char *repository, const char *template,
+              const char *file, int line, void *closure)
 {
     FILE *fp;
     char buf[1024];
@@ -5491,12 +5498,14 @@
     fp = CVS_FOPEN (template, "rb");
     if (fp == NULL)
     {
-       error (0, errno, "Couldn't open rcsinfo template file %s", template);
+       error (0, errno, "%s:%d: Couldn't open rcsinfo template file %s",
+              file, line, quote (template));
        return 1;
     }
     if (fstat (fileno (fp), &sb) < 0)
     {
-       error (0, errno, "cannot stat rcsinfo template file %s", template);
+       error (0, errno, "%s:%d: cannot stat rcsinfo template file %s",
+              file, line, quote (template));
        return 1;
     }
     sprintf (buf, "%ld\n", (long) sb.st_size);
@@ -5507,14 +5516,16 @@
        buf_output (protocol, buf, n);
        if (ferror (fp))
        {
-           error (0, errno, "cannot read rcsinfo template file %s", template);
+           error (0, errno, "%s:%d: cannot read rcsinfo template file %s",
+                  file, line, quote (template));
            (void) fclose (fp);
            return 1;
        }
     }
     buf_send_counted (protocol);
     if (fclose (fp) < 0)
-       error (0, errno, "cannot close rcsinfo template file %s", template);
+       error (0, errno, "%s:%d: cannot close rcsinfo template file %s",
+              file, line, quote (template));
     return 0;
 }
 
@@ -5558,7 +5569,7 @@
     struct template_proc_data data;
     data.update_dir = update_dir;
     data.repository = repository;
-    (void) Parse_Info (CVSROOTADM_RCSINFO, repository, template_proc,
+    Parse_Info (CVSROOTADM_RCSINFO, repository, template_proc,
                       PIOPT_ALL, &data);
 }
 

Index: sign.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/sign.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- sign.c      12 Sep 2007 17:27:24 -0000      1.13
+++ sign.c      12 Sep 2008 19:55:30 -0000      1.14
@@ -282,7 +282,7 @@
 #ifdef SUPPORT_OLD_INFO_FMT_STRINGS
                              false, srepos,
 #endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
-                             get_sign_template (),
+                             "sign template", 1, get_sign_template (),
                              "@", ",", get_sign_args (),
                              sign_args_list_to_args_proc, (void *) NULL,
                              "r", "s", current_parsed_root->directory,

Index: subr.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/subr.c,v
retrieving revision 1.168
retrieving revision 1.169
diff -u -b -r1.168 -r1.169
--- subr.c      9 Sep 2008 16:55:24 -0000       1.168
+++ subr.c      12 Sep 2008 19:55:31 -0000      1.169
@@ -33,6 +33,7 @@
 #include "filenamecat.h"
 #include "mkdir-p.h"
 #include "mreadlink.h"
+#include "quote.h"
 #include "savewd.h"
 #include "vasnprintf.h"
 
@@ -1114,11 +1115,11 @@
  *    disposing of this string.
  */
 char *
+format_cmdline (
 #ifdef SUPPORT_OLD_INFO_FMT_STRINGS
-format_cmdline (bool oldway, const char *srepos, const char *format, ...)
-#else /* SUPPORT_OLD_INFO_FMT_STRINGS */
-format_cmdline (const char *format, ...)
+               bool oldway, const char *srepos,
 #endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
+               const char *file, int line, const char *format, ...)
 {
     va_list args;      /* our input function args */
     char *buf;         /* where we store our output string */
@@ -1655,10 +1656,11 @@
                    s++;
                    if (!oldway)
                    {
-                       /* FIXME - add FILE && LINE */
                        error (0, 0,
-"Using deprecated info format strings.  Convert your scripts to use\n"
-"the new argument format and remove '1's from your info file format strings.");
+"%s:%d: Using deprecated info format strings.  Convert your\n"
+"scripts to use the new argument format and remove '1's from your info file\n"
+"format strings.",
+                              file, line);
                    }
                }
 #endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
@@ -1689,15 +1691,11 @@
                     * - we had an empty fmt string or didn't find a list
                     * terminator ('}')
                     */
-                   /* FIXME - this wants a file name and line number in a bad
-                    * way.
-                    */
                    error(1, 0,
-"unterminated format string encountered in command spec.\n"
-"This error is likely to have been caused by an invalid line in a hook 
script\n"
-"spec (see taginfo, loginfo, verifymsginfo, etc. in the Cederqvist).  Most\n"
-"likely the offending line would end with a '%%' character or contain a 
string\n"
-"beginning \"%%{\" and no closing '}' before the end of the line.");
+"%s:%d: unterminated format string encountered in command spec.\n"
+"Most likely this line would end with a '%%' character or contain a string\n"
+"beginning %s and have no closing %s before the end of the line.",
+                         file, line, quote ("%{"), quote ("}"));
                }
                if (list)
                {
@@ -1749,6 +1747,8 @@
                    {
                        /* process the rest of the format string as a list */
                        struct format_cmdline_walklist_closure c;
+                       c.file = file;
+                       c.line = line;
                        c.format = q;
                        c.buf = &buf;
                        c.length = &length;
@@ -1771,8 +1771,16 @@
                        char *outstr;
                        if (strlen(q) > 1)
                        {
+                           int i;
+                           char *bad = Xasprintf ("%%{%s}", q);
+                           char *good = xmalloc (2 * strlen (q) + 1);
+                           for (i=0; i<strlen(q); i++)
+                           {   good[2*i] = '%'; good[2*i+1] = q[i]; }
+                           good[2*i] = '\0';
                            error (1, 0,
-"Multiple non-list variables are not allowed in a single format string.");
+"%s:%d: Multiple non-list variables prohibited in a single format string.\n"
+"(use %s, not %s)",
+                                  file, line, quote (good), quote (bad));
                        }
 #ifdef SUPPORT_OLD_INFO_FMT_STRINGS
                        if (onearg)
@@ -1844,12 +1852,9 @@
 #endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
                else /* no key */
                {
-                   /* print an error message to the user
-                    * FIXME - this should have a file and line number!!! */
-                   error (1, 0,
-"Unknown format character in info file ('%s').\n"
-"Info files are the hook files, verifymsg, taginfo, commitinfo, etc.",
-                           q);
+                   /* print an error message to the user.  */
+                   error (1, 0, "%s:%d: Unknown format character (%s).",
+                           file, line, quote (q));
                }
 #ifdef SUPPORT_OLD_INFO_FMT_STRINGS
                /* always add quotes in the deprecated onearg case - for
@@ -1875,7 +1880,7 @@
        /* FIXME - we shouldn't need this - Parse_Info should be handling
         * multiple lines...
         */
-       error (1, 0, "unterminated quote in format string: %s", format);
+       error (1, 0, "%s:%d: unterminated quote in format string", file, line);
     }
 
     dellist (&pflist);

Index: subr.h
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/subr.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -b -r1.21 -r1.22
--- subr.h      9 Sep 2008 17:44:37 -0000       1.21
+++ subr.h      12 Sep 2008 19:55:31 -0000      1.22
@@ -74,6 +74,8 @@
  */
 struct format_cmdline_walklist_closure
 {
+    const char *file;  /* The trigger file being processed.  */
+    int line;          /* The line number in the trigger being processed.  */
     const char *format;        /* the format string the user passed us */
     char **buf;                /* *dest = our NUL terminated and possibly too 
short
                         * destination string
@@ -92,11 +94,11 @@
 };
 char *cmdlinequote (char quotes, char *s);
 char *cmdlineescape (char quotes, char *s);
+char *format_cmdline (
 #ifdef SUPPORT_OLD_INFO_FMT_STRINGS
-char *format_cmdline (bool oldway, const char *srepos, const char *format, 
...);
-#else /* SUPPORT_OLD_INFO_FMT_STRINGS */
-char *format_cmdline (const char *format, ...);
+                     bool oldway, const char *srepos,
 #endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
+                     const char *file, int line, const char *format, ...);
 
 /* Many, many CVS calls to xstrdup depend on it to return NULL when its
  * argument is NULL.

Index: tag.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/tag.c,v
retrieving revision 1.155
retrieving revision 1.156
diff -u -b -r1.155 -r1.156
--- tag.c       20 Dec 2007 16:09:26 -0000      1.155
+++ tag.c       12 Sep 2008 19:55:31 -0000      1.156
@@ -1,7 +1,7 @@
 /*
- * Copyright (C) 1986-2007 The Free Software Foundation, Inc.
+ * Copyright (C) 1986-2008 The Free Software Foundation, Inc.
  *
- * Portions Copyright (C) 1998-2007 Derek Price,
+ * Portions Copyright (C) 1998-2008 Derek Price,
  *                                  Ximbiot LLC <http://ximbiot.com>,
  *                                  and others.
  *
@@ -29,6 +29,8 @@
 #include "classify.h"
 #include "ignore.h"
 #include "lock.h"
+#include "parseinfo.h"
+#include "quote.h"
 #include "recurse.h"
 #include "repos.h"
 
@@ -43,8 +45,6 @@
 static int check_filesdoneproc (void *callerdat, int err,
                                const char *repos, const char *update_dir,
                                List *entries);
-static int pretag_proc (const char *_repository, const char *_filter,
-                        void *_closure);
 static void masterlist_delproc (Node *_p);
 static void tag_delproc (Node *_p);
 static int pretag_list_to_args_proc (Node *_p, void *_closure);
@@ -329,7 +329,8 @@
  *    of its callbacks having returned an error.
  */
 static int
-posttag_proc (const char *repository, const char *filter, void *closure)
+posttag_proc (const char *repository, const char *filter,
+             const char *file, int line, void *closure)
 {
     char *cmdline;
     const char *srepos = Short_Repository (repository);
@@ -356,7 +357,7 @@
 #ifdef SUPPORT_OLD_INFO_FMT_STRINGS
                              false, srepos,
 #endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
-                             filter,
+                             file, line, filter,
                              "t", "s", ppd->symtag,
                              "o", "s", ppd->delete_flag
                              ? "del" : ppd->force_tag_move ? "mov" : "add",
@@ -375,7 +376,8 @@
     if (!cmdline || !strlen (cmdline))
     {
        if (cmdline) free (cmdline);
-       error (0, 0, "pretag proc resolved to the empty string!");
+       error (0, 0, "%s:%d: pretag proc resolved to the empty string!",
+              file, line);
        return 1;
     }
 
@@ -414,8 +416,7 @@
     ppd.delete_flag = delete_flag;
     ppd.force_tag_move = force_tag_move;
     ppd.symtag = symtag;
-    Parse_Info (CVSROOTADM_POSTTAG, repository, posttag_proc,
-                PIOPT_ALL, &ppd);
+    Parse_Info (CVSROOTADM_POSTTAG, repository, posttag_proc, PIOPT_ALL, &ppd);
 
     return err;
 }
@@ -692,38 +693,6 @@
 
 
 
-static int
-check_filesdoneproc (void *callerdat, int err, const char *repos,
-                     const char *update_dir, List *entries)
-{
-    int n;
-    Node *p;
-    List *tlist;
-    struct pretag_proc_data ppd;
-
-    p = findnode (mtlist, update_dir);
-    if (p != NULL)
-        tlist = ((struct master_lists *) p->data)->tlist;
-    else
-        tlist = NULL;
-    if (tlist == NULL || tlist->list->next == tlist->list)
-        return err;
-
-    ppd.tlist = tlist;
-    ppd.delete_flag = delete_flag;
-    ppd.force_tag_move = force_tag_move;
-    ppd.symtag = symtag;
-    if ((n = Parse_Info (CVSROOTADM_TAGINFO, repos, pretag_proc, PIOPT_ALL,
-                        &ppd)) > 0)
-    {
-        error (0, 0, "Pre-tag check failed");
-        err += n;
-    }
-    return err;
-}
-
-
-
 /*
  * called from Parse_Info, this routine processes a line that came out
  * of a taginfo file and turns it into a command and executes it.
@@ -736,7 +705,8 @@
  *    of its callbacks having returned an error.
  */
 static int
-pretag_proc (const char *repository, const char *filter, void *closure)
+pretag_proc (const char *repository, const char *filter,
+            const char *file, int line, void *closure)
 {
     char *newfilter = NULL;
     char *cmdline;
@@ -746,15 +716,13 @@
 #ifdef SUPPORT_OLD_INFO_FMT_STRINGS
     if (!strchr (filter, '%'))
     {
+       const char *default_format = " %t %o %p %{sv}";
        error (0,0,
-               "warning: taginfo line contains no format strings:\n"
-               "    \"%s\"\n"
-               "Filling in old defaults ('%%t %%o %%p %%{sv}'), but please be 
aware that this\n"
-               "usage is deprecated.", filter);
-       newfilter = xmalloc (strlen (filter) + 16);
-       strcpy (newfilter, filter);
-       strcat (newfilter, " %t %o %p %{sv}");
-       filter = newfilter;
+"%s:%d: warning: taginfo line contains no format strings.\n"
+"Filling in old defaults (%s), but please be aware that this\n"
+"usage is deprecated.",
+              file, line, quote (default_format));
+       filter = newfilter = Xasprintf ("%s%s", filter, default_format);
     }
 #endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
 
@@ -779,7 +747,7 @@
 #ifdef SUPPORT_OLD_INFO_FMT_STRINGS
                              false, srepos,
 #endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
-                             filter,
+                             file, line, filter,
                              "t", "s", ppd->symtag,
                              "o", "s", ppd->delete_flag ? "del" :
                              ppd->force_tag_move ? "mov" : "add",
@@ -800,7 +768,8 @@
     if (!cmdline || !strlen (cmdline))
     {
        if (cmdline) free (cmdline);
-       error (0, 0, "pretag proc resolved to the empty string!");
+       error (0, 0, "%s:%d: pretag proc resolved to the empty string!",
+              file, line);
        return 1;
     }
 
@@ -827,6 +796,38 @@
 
 
 
+static int
+check_filesdoneproc (void *callerdat, int err, const char *repos,
+                     const char *update_dir, List *entries)
+{
+    int n;
+    Node *p;
+    List *tlist;
+    struct pretag_proc_data ppd;
+
+    p = findnode (mtlist, update_dir);
+    if (p != NULL)
+        tlist = ((struct master_lists *) p->data)->tlist;
+    else
+        tlist = NULL;
+    if (tlist == NULL || tlist->list->next == tlist->list)
+        return err;
+
+    ppd.tlist = tlist;
+    ppd.delete_flag = delete_flag;
+    ppd.force_tag_move = force_tag_move;
+    ppd.symtag = symtag;
+    if ((n = Parse_Info (CVSROOTADM_TAGINFO, repos, pretag_proc, PIOPT_ALL,
+                        &ppd)) > 0)
+    {
+        error (0, 0, "Pre-tag check failed");
+        err += n;
+    }
+    return err;
+}
+
+
+
 static void
 masterlist_delproc (Node *p)
 {

Index: verify.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/verify.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- verify.c    12 Sep 2007 17:27:24 -0000      1.9
+++ verify.c    12 Sep 2008 19:55:31 -0000      1.10
@@ -401,7 +401,7 @@
 #ifdef SUPPORT_OLD_INFO_FMT_STRINGS
                              false, srepos,
 #endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
-                             get_verify_template (),
+                             "verify template", 1, get_verify_template (),
                              "@", ",", get_verify_args (),
                              verify_args_list_to_args_proc, (void *) NULL,
                              "r", "s", current_parsed_root->directory,




reply via email to

[Prev in Thread] Current Thread [Next in Thread]