Ejemplo n.º 1
0
class AnnexFileManager(GetByNameManager):
    dbmodel = AnnexFile
    def __init__(self, session, annex_directory):
        super(AnnexFileManager, self).__init__(session)
        self.keymgr = AnnexKeyManager(session, annex_directory)
        self.annex_directory = annex_directory
        self.pmgr = GitAnnexProcManager(self.annex_directory)

    def add_file(self, filedata, key_id):
        dbobj = AnnexFile()
        _add_annexfile_attributes_common(dbobj, filedata)
        dbobj.key_id = key_id
        self.session.add(dbobj)
        return self.session.merge(dbobj)

    def populate_files(self):
        proc = self.pmgr.make_find_proc()
        count = 0
        while proc.returncode is None:
            try:
                line = proc.stdout.next()
                count +=1
            except StopIteration:
                break
            data = gitannex.parse_json_line(
                line,
                convert_to_unicode=True,
                verbose_warning=True)
            key = data['key']
            dbkey = self.keymgr.get_by_name(key)
            if dbkey is None:
                dbkey = self.keymgr.add_key(key)
            self.add_file(data, dbkey.id)
        if proc.returncode:
            msg = "find proc returned %d" % proc.returncode
            raise RuntimeError, msg

        
    def populate_files_tm(self):
        with transaction.manager:
            self.populate_files()

    def delete_everything(self):
        self.session.query(AnnexFile).delete()
        self.session.query(AnnexKey).delete()
        self.session.query(AnnexRepository).delete()
        
    def delete_everything_tm(self):
        with transaction.manager:
            self.delete_everything()