Changeset: 4a2ce2f3a788 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4a2ce2f3a788
Branch: mtest
Log Message:

merge mdiff


diffs (truncated from 531 to 300 lines):

diff --git a/testing/Mdiff.c b/testing/Mdiff.c
--- a/testing/Mdiff.c
+++ b/testing/Mdiff.c
@@ -35,6 +35,7 @@ showUsage(char *name)
        printf("             this makes diff slower (sometimes much slower)\n");
        printf(" -t<text>  : text for caption (optional, default: empty)\n");
        printf(" -r<rev>   : revision of old file (optional, default: 
empty)\n");
+       printf(" -f<format>: output format html or txt (optional, default: 
html)\n");
        printf(" -q        : be less verbose\n");
        printf(" <oldfile> : first file for diff\n");
        printf(" <newfile> : second file for diff\n");
@@ -51,10 +52,11 @@ main(int argc, char **argv)
        char DEFAULT[] = "-I'^#'";
 #endif
        char ignoreWHITE[] = " -b -B";
-       char *old_fn, *new_fn, *html_fn, *caption = EMPTY, *revision = EMPTY, 
*ignoreEXP = DEFAULT, *ignore = NULL, *function = EMPTY;
+       char *old_fn, *new_fn, *out_fn, *caption = EMPTY, *revision = EMPTY, 
*ignoreEXP = DEFAULT, *ignore = NULL, *function = EMPTY;
        int LWC = 1, context = 1, option, mindiff = 0, quiet = 0;
+    bool out_html = true;
 
-       while ((option = getopt(argc, argv, "hdqA:C:I:F:t:r:")) != EOF)
+       while ((option = getopt(argc, argv, "hdqA:C:I:F:t:r:f:")) != EOF)
                switch (option) {
                case 'd':
                        mindiff = 1;
@@ -100,6 +102,10 @@ main(int argc, char **argv)
                case 'r':
                        revision = optarg;
                        break;
+               case 'f':
+            if (strcmp("txt", optarg) == 0)
+                out_html=false;
+                       break;
                case 'q':
                        quiet = 1;
                        break;
@@ -120,11 +126,17 @@ main(int argc, char **argv)
        optind--;
        old_fn = ((argc > (++optind)) ? argv[optind] : "-");
        new_fn = ((argc > (++optind)) ? argv[optind] : "-");
-       html_fn = ((argc > (++optind)) ? argv[optind] : "-");
+       out_fn = ((argc > (++optind)) ? argv[optind] : "-");
 
-       TRACE(fprintf(STDERR, "%s %s -A %i -C %i %s %s -t %s -r %s  %s %s 
%s\n", argv[0], mindiff ? "-d" : "", LWC, context, ignore, function, caption, 
revision, old_fn, new_fn, html_fn));
-
-       switch (oldnew2html(mindiff, LWC, context, ignore, function, old_fn, 
new_fn, html_fn, caption, revision)) {
+    int res;
+    if (out_html) {
+        TRACE(fprintf(STDERR, "%s %s -A %i -C %i %s %s -t %s -r %s  %s %s 
%s\n", argv[0], mindiff ? "-d" : "", LWC, context, ignore, function, caption, 
revision, old_fn, new_fn, out_fn));
+        res = oldnew2html(mindiff, LWC, context, ignore, function, old_fn, 
new_fn, out_fn, caption, revision);
+    } else {
+        TRACE(fprintf(STDERR, "%s %s -A %i -C %i %s %s %s %s %s\n", argv[0], 
mindiff ? "-d" : "", LWC, context, ignore, function, old_fn, new_fn, out_fn));
+        res = oldnew2txt(mindiff, LWC, context, ignore, function, old_fn, 
new_fn, out_fn);
+    }
+       switch (res) {
        case 0:
                if (quiet == 0)
                        fprintf(STDERR, "%s and %s are equal.\n", old_fn, 
new_fn);
diff --git a/testing/Mtest.py.in b/testing/Mtest.py.in
--- a/testing/Mtest.py.in
+++ b/testing/Mtest.py.in
@@ -1424,6 +1424,7 @@ def PerformDir(env, testdir, testlist, B
                         '*.client.err', '*.client.out',
                         '*.err.diff.html', '*.err.head.html', '*.err.html',
                         '*.out.diff.html', '*.out.head.html', '*.out.html',
+                        '*.out.diff.txt', '*.err.diff.txt',
                         '*.server.err', '*.server.out',
                         '*.stable.err*', '*.stable.out*',
                         '*.test.err', '*.test.out',
@@ -2453,12 +2454,15 @@ def RunTest(env, TST, BusyPorts, COND, o
                 cmd.append('-d')
             if not verbose:
                 cmd.append('-q')
+            diff_format = env.get('diff_format', 'html') 
+            out_fn = ('%s.out.diff.html' % TST)
             cmd.extend(['-F^#', '-I%s' % par['IGNORE'],
                         '-C%s' % par['CONTEXT'], '-A%d' % ACCURACYout,
                         titlefmt % ('err', 'err'),
+                        '-f{}'.format(diff_format),
                         '%s%s.FILTERED' % (TST, STABLEout),
                         '%s.test.out.FILTERED' % TST,
-                        '%s.out.diff.html' % TST])
+                         out_fn])
             if procdebug:
                 print('RunTest: starting process "%s"\n' % '" "'.join(cmd))
             setpgrp = True
@@ -2522,12 +2526,15 @@ def RunTest(env, TST, BusyPorts, COND, o
                 cmd.append('-d')
             if not verbose:
                 cmd.append('-q')
+            diff_format = env.get('diff_format', 'html') 
+            out_fn = ('%s.err.diff.html' % TST)
             cmd.extend(['-F^#', '-I%s' % par['IGNORE'],
                         '-C%s' % par['CONTEXT'], '-A%d' % ACCURACYerr,
                         titlefmt % ('out', 'out'),
+                        '-f{}'.format(diff_format),
                         '%s%s.FILTERED' % (TST, STABLEerr),
                         '%s.test.err.FILTERED' % TST,
-                        '%s.err.diff.html' % TST])
+                        out_fn])
             if procdebug:
                 print('RunTest: starting process "%s"\n' % '" "'.join(cmd))
             setpgrp = True
@@ -2585,6 +2592,12 @@ def RunTest(env, TST, BusyPorts, COND, o
         if not testweb:
             elem = AddTstToHtmlIndex(env, TST, STABLEout, STABLEerr, EXT,
                                      FailedOut, FailedErr)
+        diff_format = env.get('diff_format', 'html') 
+        if diff_format == 'txt':
+            # we know the content is not html, so change the extension here
+            for f in [('%s.out.diff.html' % TST), ('%s.err.diff.html' % TST)]:
+                if os.path.exists(f):
+                    shutil.move(f, f[:-4] + 'txt')
 
         if not verbose and not quiet:
             if tres == 'socket':
@@ -3789,6 +3802,7 @@ def main(argv) :
         parser.add_argument('--data_path', '-D', action='store', 
dest='data_path', metavar='<path>', help='Path to the root directory of the 
data files needed for testing')
         parser.add_argument('--alltests', action='store_true', 
dest='alltests', help='also run tests that are known to fail')
         parser.add_argument('--initdb', action='store', dest='initdb', 
metavar='<zipfile>', help='zip file with contents for initial database')
+        parser.add_argument('--diff-format', dest='diff_format', type=str, 
metavar='html|txt', default='html', help='output format for the difference 
between stable and current test (html or txt)')
     elif THISFILE == 'Mapprove.py':
         f = _configure(os.path.join('@QXprefix@',dftTSTPREF,'.Mapprove.rc'))
         v = ReadMapproveRc(f)
@@ -3875,6 +3889,7 @@ def main(argv) :
             env['TSTDATAPATH'] = a
         global initdb
         initdb = opts.initdb
+        env['diff_format'] = opts.diff_format
     if THISFILE == 'Mapprove.py':
         a = opts.ext
         if a is None:
diff --git a/testing/difflib.c b/testing/difflib.c
--- a/testing/difflib.c
+++ b/testing/difflib.c
@@ -870,4 +870,383 @@ oldnew2html(int mindiff, int LWC, int co
        return rtrn;
 }
 
-/* oldnew2u_diff */
+/* oldnew2html */
+
+int
+lwc_diff2txt(char *lwc_diff_fn, char *html_fn)
+{
+       FILE *html_fp, *lwc_diff_fp, *clmn_fp[5];
+       char line[BUFLEN], fn_clmn[CMDLEN], *clmn_fn[5], c[3], *ok;
+       char *old = NULL, *new = NULL, *old_time, *new_time, olns[24], nlns[24];
+       int oln, nln, orn, nrn, i, clr[5], newline, newline_, minor = 0, Minor 
= 0, Major = 0;
+
+       TRACE(fprintf(STDERR, "lwc_diff2txt(%s,%s,%s,%s)\n", lwc_diff_fn, 
html_fn));
+
+       lwc_diff_fp = Rfopen(lwc_diff_fn);
+
+       if (!(ok = fgets(line, BUFLEN, lwc_diff_fp)))
+       {
+               html_fp = Wfopen(html_fn);
+               fprintf(html_fp, "<!--NoDiffs-->\n");
+               fflush(html_fp);
+               fclose(html_fp);
+               fclose(lwc_diff_fp);
+               return 0;
+       }
+
+       snprintf(fn_clmn, sizeof(fn_clmn), 
"%s%c.difflib-%ld-lwc_diff2html-clmn-0-0", tmpdir(), DIR_SEP, (long) getpid());
+       for (i = 0; i < 5; i++) {
+               clmn_fn[i] = strdup(fn_clmn);
+               clmn_fn[i][strlen(clmn_fn[i]) - 3] += i;
+       }
+    // don't care about the output here, need Minor, Major
+       html_fp = Wfopen("/dev/null");
+
+       line[strlen(line) - 1] = '\0';
+       while (ok && strncmp(line, "@@ -", 4)) {
+               if (!strncmp(line, "--- ", 4)) {
+                       if (old) {
+                               fprintf(stderr, "syntax error\n");
+                               exit(1);
+                       }
+                       old = strdup(line + 4);
+               } else if (!strncmp(line, "+++ ", 4)) {
+                       if (new) {
+                               fprintf(stderr, "syntax error\n");
+                               exit(1);
+                       }
+                       new = strdup(line + 4);
+               } else
+                       fprintf(html_fp, "<tbody><tr><td 
colspan='7'>%s</td></tr></tbody>\n", HTMLsave(line));
+               ok = fgets(line, BUFLEN, lwc_diff_fp);
+               line[strlen(line) - 1] = '\0';
+       }
+       if (old == NULL || new == NULL) {
+               fprintf(stderr, "syntax or malloc error\n");
+               exit(1);
+       }
+       if ((old_time = strchr(old, '\t')) != NULL)
+               *old_time++ = '\0';
+       else
+               old_time = "";
+       if ((new_time = strchr(new, '\t')) != NULL)
+               *new_time++ = '\0';
+       else
+               new_time = "";
+       free(old);
+       free(new);
+       while (ok) {
+
+               for (i = 0; i < 5; i++)
+                       clmn_fp[i] = Wfopen(clmn_fn[i]);
+               sscanf(line, "@@ -%s +%s @@", olns, nlns);
+               oln = atoi(olns);
+               nln = atoi(nlns);
+               for (i = 0; i < 3 && ok; i++)
+                       ok = strchr(ok+1, '@');
+               if (ok && ok[1] == ' ')
+                       fprintf(html_fp, "<td colspan='7' 
align='center'>%s</td>\n", HTMLsave(ok + 2));
+               for (i = 0; i < 5; i++)
+                       clr[i] = 0;
+               orn = nrn = 0;
+               newline_ = 1;
+               newline = 1;
+               snprintf(c, sizeof(c), "  ");
+               ok = line;
+               while (ok && (ok = fgets(line, BUFLEN, lwc_diff_fp)) && 
strchr(" -+", line[0])) {
+                       if (line[1] != '\3') {
+                               size_t sl = strlen(line) - 1;
+                               char nl = line[sl], l0, l1;
+
+                               if (newline_ || newline)
+                                       Minor |= (minor = (strchr("#=\n\2", 
line[1]) != NULL));
+                               line[sl] = '\0';
+                               if (line[1] == '\2')
+                                       snprintf(line + 1, sizeof(line) - 1, " 
");
+                               l0 = line[0];
+                               l1 = line[1];
+                               if (line[0] == ' ') {
+                                       if (newline && (nrn < orn)) {
+                                               while (nrn < orn) {
+                                                       SETBLUE(1, minor);
+                                                       fprintf(clmn_fp[1], 
"%i", oln++);
+                                                       SETBLACK(1);
+                                                       fprintf(clmn_fp[1], 
"\n");
+                                                       SETBLUE(2, minor);
+                                                       fprintf(clmn_fp[2], 
"-");
+                                                       SETBLACK(2);
+                                                       fprintf(clmn_fp[2], 
"\n");
+                                                       fprintf(clmn_fp[3], 
"\n");
+                                                       fprintf(clmn_fp[4], 
"\n");
+                                                       nrn++;
+                                               }
+                                       }
+                                       SETBLACK(0);
+                                       SETBLACK(4);
+                               }
+                               if (line[0] == '-') {
+                                       c[0] = '-';
+                                       SETBLUE(0, minor);
+                               }
+                               if (line[0] == '+') {
+                                       c[1] = '+';
+                                       SETRED(4, minor);
+                               }
+                               if (line[1] != '\1') {
+                                       line[sl] = nl;
+                                       line[sl+1] = '\0';
+                                       i = 1;
+                                       do {
+                                               sl = strlen(line) - 1;
+                                               nl = line[sl];
+                                               if (nl == '\n') {
+                                                       line[sl] = '\0';
+                                               }
+                                               if (strchr(" -", l0)) {
+                                                       fprintf(clmn_fp[0], 
"%s", HTMLsave(line + i));
+                                               }
+                                               if (strchr(" +", l0)) {
+                                                       fprintf(clmn_fp[4], 
"%s", HTMLsave(line + i));
+                                               }
+                                               i = 0;
+                                       } while (nl != '\n' && (ok = 
fgets(line, BUFLEN, lwc_diff_fp)));
+                                       if (strchr(" -", l0)) {
+                                               Major |= (clr[0] & 1);
+                                       }
+                                       if (strchr(" +", l0)) {
+                                               Major |= (clr[4] & 1);
+                                       }
+                               } else {
+                                       if (line[0] == '-') {
+                                               SETBLACK(0);
+                                               fprintf(clmn_fp[0], "\n");
+                                               orn++;
+                                       }
+                                       if (line[0] == '+') {
+                                               if (orn > nrn) {
+                                                       SETPINK(1, minor);
+                                                       fprintf(clmn_fp[1], 
"%i", oln++);
+                                                       SETBLACK(1);
+                                                       fprintf(clmn_fp[1], 
"\n");
+                                                       SETPINK(2, minor);
+                                                       fprintf(clmn_fp[2], 
"!");
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to