Solv file format

Metadata information is stored as '.solv' files

These files have the following format:

V0 format

  MAGIC: 'SOLV'
  U32:   0
 
  -- sizes --
 
  U32:   NUMID                       /* number of Ids (names) */
  U32:   NUMREL                      /* number of RelDeps (dependencies) */
  U32:   NUMSOLV                     /* number of Solvables (packages) */
  
  -- string data --
  U32:   SIZEID                      /* total size of string buffer */
   U8*:   DICT (SIZE SIZEID)         /* (raw) string buffer */
  
  -- reldep data --
   U8*:   RELDICT                    /* Buffer for RandDeps (Id,Id,u8) */
 
  -- source data --                  /* apparently unused */
  
  U32:   NUMSRCDATA
   U8 :   TYPE                        /* TYPE_ID, TYPE_U32, TYPE_STR */
   ID :   DATAID
   ID | U32 | U8*
  
  -- solvables --
 
  U32:   NUMSOLVDATA
   U8 :   TYPE
   ID :   DATAID
   U32:   NUM/SIZE
  
  U8*: BITS
  U8*: DATA


V6 format
=========

  MAGIC: 'SOLV'
  U32:   6

  U32:   NUMID                       /* number of Ids (names) */
  U32:   NUMREL                      /* number of RelDeps (dependencies) */
  U32:   NUMDIR                      /* number of directories */
  U32:   NUMITEM                     /* number of items (packages) */
  U32:   NUMKEYS
  U32:   NUMSCHEMATA                 /* number of schemata */
  U32:   NUMINFO
  U32:   FLAGS                       /* solv file flags */
                        4:PREFIX_POOL

  -- string data --
  ID:    SIZEID                      /* total size of string buffer */
   U8*:  DICT (SIZE SIZEID)          /* (raw) string buffer */

  -- reldep data --
   U8*:  RELDICT                     /* Buffer for RandDeps (Id,Id,u8) */

  -- directory data --
   U8*:  DIRDICT                     /* Buffer for dirs (Id,Id) */

  -- key data --
  NUMKEYS *
    ID: name
    ID: type
    ID: expanded num/size

  -- schemata data --
  ID: expanded schemata size
  NUMSCHEMATA *
    IDARRAY* keys

  -- file information --
  ID maxinfolen  (IF NUMINFO)
  ID allinfolen  (IF NUMINFO)
  NUMINFO *
    ID schema
    U8 *data

  -- item data --
  ID maxitemlen  (IF NUMITEM)
  ID allitemlen  (IF NUMITEM)
  NUMITEM *
    ID schema
    U8* data

  -- paged vertical data --
  U32 pagesize
  NPAGES *
    U32 len * 2 + compressedflag
    U8* data

key sizes for storage types:

KEY_STORAGE_VERTICAL_OFFSET: packed size
KEY_STORAGE_INCORE: packed size
KEY_STORAGE_SOLVABLE: unpacked size

doxygen