5aa51e4d2469b0277e03cc831915afb71f9635ea
braney
  Wed May 1 11:13:38 2024 -0700
some work I did a while ago on an image comparator.   At this point this
has been replaced with QA's version

diff --git src/hg/utils/hgTracksDelta/hgTracksDelta.c src/hg/utils/hgTracksDelta/hgTracksDelta.c
index 11d4204..1ef46b5 100644
--- src/hg/utils/hgTracksDelta/hgTracksDelta.c
+++ src/hg/utils/hgTracksDelta/hgTracksDelta.c
@@ -1,21 +1,24 @@
 /* hgTracksDelta - find differences in the images created by hgTracks. */
 #include "common.h"
 #include "linefile.h"
 #include "hash.h"
 #include "options.h"
 #include "md5.h"
+#include "obscure.h"
+#include "cart.h"
+#include "trackHub.h"
 
 void usage()
 /* Explain usage and exit. */
 {
 errAbort(
   "hgTracksDelta - find differences in the images created by hgTracks\n"
   "usage:\n"
   "   hgTracksDelta sessions.txt machine1 machine2 pngDir logFile\n"
   "options:\n"
   "   -xxx=XXX\n"
   );
 }
 
 /* Command line validation table. */
 static struct optionSpec options[] = {
@@ -37,70 +40,134 @@
 char *row[2];
 while (lineFileRow(lf, row))
     {
     AllocVar(session);
     slAddHead(&sessionList, session);
     session->userName = cloneString(row[0]);
     session->sessionName = cloneString(row[1]);
     }
 
 slReverse(&sessionList);
 lineFileClose(&lf);
 
 return sessionList;
 }
 
-#define URL_TEMPLATE "wget 'http://%s/cgi-bin/hgRenderTracks?hgS_doOtherUser=submit&hgS_otherUserName=%s&hgS_otherUserSessionName=%s' -O %s"
+#define URL_IMAGE "wget -q 'http://%s/cgi-bin/hgRenderTracks?hgS_doOtherUser=submit&hgS_otherUserName=%s&hgS_otherUserSessionName=%s' -O %s -o /dev/null"
+#define URL_TRACKLIST "wget -q 'http://%s/cgi-bin/hgRenderTracks?dumpTracks=1&hgS_doOtherUser=submit&hgS_otherUserName=%s&hgS_otherUserSessionName=%s' -O %s -o /dev/null"
 
 
 static void digDown(struct session *session, char *machine1, char *machine2, char *pngDir, FILE *logF)
 {
-exit(1);
+//exit(1);
 }
 
 static boolean fileCompare(char *file1, char *file2)
 {
 char *one = md5HexForFile(file1);
 char *two = md5HexForFile(file2);
 
 if (differentString(one, two))
     return TRUE;
 
 return FALSE;
 }
 
+static struct slName *getTrackList(struct session *session, char *machine, char *pngDir, FILE *logF)
+{
+struct dyString *outList = newDyString(50);
+dyStringPrintf(outList, "%s/%s_%s.%s.tracks.txt", pngDir, session->userName, session->sessionName, machine);
+
+struct dyString *dyUrl1 = newDyString(50);
+dyStringPrintf(dyUrl1, URL_TRACKLIST,  machine, session->userName, session->sessionName, outList->string);
+system(dyUrl1->string);
+sleep(1);
+
+char *string;
+size_t size;
+readInGulp(outList->string, &string, &size);
+
+struct slName *list =  slNameListFromCommaEscaped(string);
+slNameSort(&list);
+//struct slName *tmp = list;
+//for(; tmp; tmp = tmp->next)
+    //printf("%s\n", tmp->name);
+return list;
+}
+
+static boolean compareList(struct slName *list1,struct slName *list2, FILE *logF)
+{
+struct slName *tmp1 = list1;
+struct slName *tmp2 = list2;
+for(; (tmp1 != NULL) && (tmp2 != NULL); tmp1 = tmp1->next, tmp2 = tmp2->next)
+    {
+    if (differentString(trackHubSkipHubName(tmp1->name), trackHubSkipHubName(tmp2->name)))
+        {
+        //if (!(stringIn("trash/hgComposite/", tmp1->name) && stringIn("trash/hgComposite/", tmp2->name) ))
+            {
+            fprintf(logF, "Track list diff %s %s\n", tmp1->name, tmp2->name);
+
+            return TRUE;
+            }
+        }
+    }
+if ((tmp1 != NULL) || (tmp2 != NULL))
+    {
+    fprintf(logF, "Track list different length\n");
+    return TRUE;
+    }
+return FALSE;
+}
+
 static void compareSession(struct session *session, char *machine1, char *machine2, char *pngDir, FILE *logF)
 {
+<<<<<<< Updated upstream
 struct dyString *outFile1 = dyStringNew(50);
 dyStringPrintf(outFile1, "%s/%s_%s.%s.png", pngDir, session->userName, session->sessionName, machine1);
 struct dyString *dyUrl1 = dyStringNew(50);
 dyStringPrintf(dyUrl1, URL_TEMPLATE,  machine1, session->userName, session->sessionName, outFile1->string);
+=======
+struct slName *trackList1 = getTrackList(session, machine1, pngDir, logF);
+struct slName *trackList2 = getTrackList(session, machine2, pngDir, logF);
+if (compareList(trackList1, trackList2, logF))
+    {
+    return;
+    }
+
+struct dyString *outPng1 = newDyString(50);
+dyStringPrintf(outPng1, "%s/%s_%s.%s.png", pngDir, session->userName, session->sessionName, machine1);
+struct dyString *dyUrl1 = newDyString(50);
+dyStringPrintf(dyUrl1, URL_IMAGE,  machine1, session->userName, session->sessionName, outPng1->string);
 
 system(dyUrl1->string);
 sleep(1);
 
 struct dyString *outFile2 = dyStringNew(50);
 dyStringPrintf(outFile2, "%s/%s_%s.%s.png", pngDir, session->userName, session->sessionName, machine2);
 struct dyString *dyUrl2 = dyStringNew(50);
 dyStringPrintf(dyUrl2, URL_TEMPLATE,  machine1, session->userName, session->sessionName, outFile2->string);
+struct dyString *outPng2 = newDyString(50);
+dyStringPrintf(outPng2, "%s/%s_%s.%s.png", pngDir, session->userName, session->sessionName, machine2);
+struct dyString *dyUrl2 = newDyString(50);
+dyStringPrintf(dyUrl2, URL_IMAGE,  machine1, session->userName, session->sessionName, outPng2->string);
 
 system(dyUrl2->string);
 sleep(1);
 
-if (fileCompare(outFile1->string, outFile2->string))
+if (fileCompare(outPng1->string, outPng2->string))
     {
-    fprintf(logF, "Difference %s %s\n", outFile1->string, outFile2->string);
+    fprintf(logF, "Image difference %s %s\n", outPng1->string, outPng2->string);
     digDown(session, machine1, machine2, pngDir, logF);
     }
 }
 
 void hgTracksDelta(char *sessionsFile, char *machine1, char *machine2, char *pngDir, char *logFileName)
 /* hgTracksDelta - find differences in the images created by hgTracks. */
 {
 struct session *sessions = readSessions(sessionsFile);
 FILE *logF = mustOpen(logFileName, "w");
 
 makeDirs(pngDir);
 for(; sessions; sessions = sessions->next)
     compareSession(sessions, machine1, machine2, pngDir, logF);
 fclose(logF);
 }