DirectoryStorage

dumpdsf.py - DirectoryStorage Exploration Tool

Usage:

dumpdsf.py FILENAME [FILENAME...]

FILENAME
    The name of a file to dump

Operation

This tool can be used to dump the internal structure of any DirectoryStorage file. This structure is defined in doc/fileformats.txt.

This tool is useful for exploring, and fault-finding. Example Output:

A $ dumpdsf.py o000/000/000/001/A771.0349DEA41A25853B
o000/000/000/001/A771.0349DEA41A25853B
  data for oid 000000000001A771 rev 0349DEA41A25853B
  proper filename o000/000/000/001/A771.0349DEA41A25853B
  transaction
    timestamp Mon Dec 30 10:12:06 2002
    filename t034/9DE.A41A25853B
  previous rev
    rev 0349DEA19D6C7919
    filename o000/000/000/001/A771.0349DEA19D6C7919
  pickle '((U\nOFS.Folderq\x01U\x06Folderq\x02tq\x03Nt.}q\x04(U\x02ao'
  references
    oid 000000000001E295 at o000/000/000/001/E295.c
    oid 000000000001E2F9 at o000/000/000/001/E2F9.c

A $ dumpdsf.py t034/9DE.A41A25853B
t034/9DE.A41A25853B
transaction 0349DEA41A25853B
  timestamp Mon Dec 30 10:12:06 2002
  proper filename t034/9DE.A41A25853B
  user ' tdickenson'
  description '/extest/addDTMLDocument'
  objects modified in this transaction
    oid 000000000001E2F9 at o000/000/000/001/E2F9.0349DEA41A25853B
    oid 000000000001A771 at o000/000/000/001/A771.0349DEA41A25853B

A $ dumpdsf.py o000/000/000/001/E2F9.0349DEA41A25853B
o000/000/000/001/E2F9.0349DEA41A25853B
  data for oid 000000000001E2F9 rev 0349DEA41A25853B
  proper filename o000/000/000/001/E2F9.0349DEA41A25853B
  transaction
    timestamp Mon Dec 30 10:12:06 2002
    filename t034/9DE.A41A25853B
  previous rev
    rev 0000000000000000
    filename o000/000/000/001/E2F9.0000000000000000
  pickle '((U\x10OFS.DTMLDocumentq\x01U\x0cDTMLDocumentq\x02tq'

Limitations

  • Filenames in its output assume you are using chunky format.
  • Some special case values for some fields are not fully decoded. That last example above shows a previous revision field of all zeros. That means this is the first revision of the object, therefore it is misleading for it to also display a previous revision filename.
  • It dumps the first 40 bytes of a pickle. This is usually enough to be able to pick out the class name, even if you cant read the rest of the pickle.
  • Probably many more.