def __repair_db(self, obj): """ Start the repair process by calling the start_editing option on the line with the cursor. """ store, node = self.selection.get_selected() dirname = store[node][1] #First ask user if he is really sure :-) yes_no = QuestionDialog2( _("Repair family tree?"), _("If you click <b>Proceed</b>, Gramps will attempt to recover your family tree" " from the last good backup. There are several ways this can cause unwanted" " effects, so <b>backup</b> the family tree first.\n" "The Family tree you have selected is stored in %s.\n\n" "Before doing a repair, verify that the Family Tree can really no longer be " " opened, as the database back-end can recover from some errors automatically.\n\n" "<b>Details:</b> Repairing a Family Tree actually uses the last backup of" " the Family Tree, which Gramps stored on last use. If you have worked for" " several hours/days without closing Gramps, then all this information will" " be lost! If the repair fails, then the original family tree will be lost" " forever, hence a backup is needed. If the repair fails, or too much" " information is lost, you can fix the original family tree manually." " For details, see the webpage\n" "http://gramps-project.org/wiki/index.php?title=Recover_corrupted_family_tree\n" "Before doing a repair, try to open the family tree in the normal manner." " Several errors that trigger the repair button can be fixed automatically." " If this is the case, you can disable the repair button by removing the" " file <i>need_recover</i> in the family tree directory.") % dirname, _("Proceed, I have taken a backup"), _("Stop")) prompt = yes_no.run() if not prompt: return opened = store[node][OPEN_COL] if opened: self.dbstate.no_database() # delete files that are not backup files or the .txt file for filename in os.listdir(dirname): if os.path.splitext(filename)[1] not in (".gbkp", ".txt"): fname = os.path.join(dirname, filename) os.unlink(fname) newdb = DbBsddb() newdb.write_version(dirname) dbclass = DbBsddb dbase = dbclass() dbase.set_save_path(dirname) dbase.load(dirname, None) self.__start_cursor(_("Rebuilding database from backup files")) try: restore(dbase) except DbException, msg: DbManager.ERROR(_("Error restoring backup data"), msg)
def setUp(self): def dummy_callback(dummy): pass self._tmpdir = tempfile.mkdtemp() #self._filename = os.path.join(self._tmpdir,'test.grdb') self._db = DbBsddb() dbman = CLIDbManager(None) self._filename, title = dbman.create_new_db_cli(title="Test") self._db.load(self._filename, dummy_callback, "w")