404d5bb6d8c0418d5f06535ef470e36c35d2a237 chmalee Thu Apr 16 15:57:56 2026 -0700 Add assembly hub support to hubSpace. Users can upload a .2bit to create an assembly hub, optionally alongside their own *.hub.txt (prefix names like araTha1.hub.txt are recognized) and sibling track files. Uploads run in parallel; hub.txt mutations are serialized per-hub via flock so arrival order does not matter. - hubSpace table gains a hubType column ('trackHub' or 'assemblyHub'); ON DUPLICATE KEY UPDATE excludes it so a re-upload cannot revert an upgraded hub. - writeHubText can now emit an assembly stanza derived from the 2bit; upgradeHubTxtForAssembly promotes an existing plain hub.txt in place when a 2bit arrives after tracks. - pre-finish decides synthesize vs upgrade vs leave-alone from server state (existing rows, hub.txt on disk) plus a single client flag (batchHasHubTxt); client-supplied hubType is no longer trusted. - Client UI adds 2bit as a file type, locks the genome field when the hub is authoritative (drilled-in or batch hub.txt), defaults new uploads to an existing assembly hub at top level, and routes hgTracks URLs through 'genome=' vs 'db=' by hubType. - Fix pre-existing nested-path bug in hubPathFromParentDir (*firstSlash = 0). Co-Authored-By: Claude Opus 4.7 (1M context) diff --git src/hg/lib/hubSpace.as src/hg/lib/hubSpace.as index 7991bd8fef8..5d2569b01ed 100644 --- src/hg/lib/hubSpace.as +++ src/hg/lib/hubSpace.as @@ -1,14 +1,15 @@ table hubSpace "file storage table for users to store uploaded tracks" ( string userName; "userName of user uploading file" string fileName; "name of uploaded files. The actual path to this file is different" bigint fileSize; "size of the uploaded file" string fileType; "track type of file" string creationTime; "first upload time" string lastModified; "last change time" string db; "genome assembly associated with this file" string location; "file system path or URL to file" string md5sum; "md5sum of file" string parentDir; "parent directory of file" + string hubType; "type of hub this file belongs to: trackHub or assemblyHub" )