def __init__(self, filename, index_filename, mode, serializer=None): """Initialize an IndexedDatabase, writing the serializer if necessary. SERIALIZER is only used if MODE is DB_OPEN_NEW; otherwise the serializer is read from the file.""" self.filename = filename self.index_filename = index_filename self.mode = mode if self.mode == DB_OPEN_NEW: self.f = open(self.filename, 'wb+') elif self.mode == DB_OPEN_WRITE: self.f = open(self.filename, 'rb+') elif self.mode == DB_OPEN_READ: self.f = open(self.filename, 'rb') else: raise RuntimeError('Invalid mode %r' % self.mode) self.index_table = RecordTable(self.index_filename, self.mode, FileOffsetPacker()) if self.mode == DB_OPEN_NEW: assert serializer is not None self.serializer = serializer cPickle.dump(self.serializer, self.f, -1) else: # Read the memo from the first pickle: self.serializer = cPickle.load(self.f) # Seek to the end of the file, and record that position: self.f.seek(0, 2) self.fp = self.f.tell() self.eofp = self.fp
def __init__(self, mode): self.mode = mode if mode not in (DB_OPEN_NEW, DB_OPEN_READ): raise RuntimeError, "Invalid 'mode' argument to PersistenceManager" primer = ( SVNInitialProjectCommit, SVNPrimaryCommit, SVNPostCommit, SVNBranchCommit, SVNTagCommit, ) serializer = PrimedPickleSerializer(primer) self.svn_commit_db = IndexedDatabase( artifact_manager.get_temp_file(config.SVN_COMMITS_INDEX_TABLE), artifact_manager.get_temp_file(config.SVN_COMMITS_STORE), mode, serializer) self.cvs2svn_db = RecordTable( artifact_manager.get_temp_file(config.CVS_REVS_TO_SVN_REVNUMS), mode, SignedIntegerPacker(SVN_INVALID_REVNUM))
def CVSItemToChangesetTable(filename, mode): if use_mmap_for_cvs_item_to_changeset_table: return MmapRecordTable(filename, mode, UnsignedIntegerPacker()) else: return RecordTable(filename, mode, UnsignedIntegerPacker())