225e78ff3e56fece2df5cdbc1d6da5d444347ffe
angie
  Thu Apr 25 12:23:34 2019 -0700
Fixing loss of track collections caused by loss of newlines in hub file due to using lineFileNextReal instead of lineFileNext.  refs #22440 note-43 Thx BrianL!

diff --git src/hg/hgSession/sessionData.c src/hg/hgSession/sessionData.c
index ae417ab..9a31fff 100644
--- src/hg/hgSession/sessionData.c
+++ src/hg/hgSession/sessionData.c
@@ -341,38 +341,44 @@
 char *newFile = NULL;
 if (fileExists(oldFile))
     {
     if (isTrashPath(oldFile) && !maybeReadlink(oldFile))
         {
         struct lineFile *lf = lineFileOpen(oldFile, TRUE);
         if (isNotEmpty(sessionDir))
             newFile = sessionDataPathFromTrash(oldFile, sessionDir);
         else
             newFile = newCtTrashFile();
         if (fileExists(newFile))
             errAbort("saveTrackFile: new file '%s' already exists", newFile);
         makeDirsForFile(newFile);
         FILE *newF = mustOpen(newFile, "w");
         char *line;
-        while (lineFileNextReal(lf, &line))
+        while (lineFileNext(lf, &line, NULL))
+            {
+            char *s = skipLeadingSpaces(line);
+            if (*s != '\0' && *s != '#')
                 {
                 char *trackLine = cloneString(line);
                 saveTrashPaths(&trackLine, sessionDir, FALSE);
                 saveDbTableName(&trackLine, sessionDataDbPrefix, sessionDir);
                 fprintf(newF, "%s\n", trackLine);
                 freeMem(trackLine);
                 }
+            else
+                fprintf(newF, "%s\n", line);
+            }
         carefulClose(&newF);
         if (isNotEmpty(sessionDir))
             {
             if (unlink(oldFile) != 0)
                 errnoAbort("saveTrackFile: unlink(oldFile='%s') failed", oldFile);
             if (symlink(newFile, oldFile) != 0)
                 errnoAbort("saveTrackFile: symlink(newFile='%s', oldFile='%s') failed",
                            newFile, oldFile);
             }
         cartSetString(cart, varName, newFile);
         }
     }
 else
     cartRemove(cart, varName);
 return newFile;