def restore_snippets(project, entry): """ Restore a single snippet """ if not entry.get('visibility_level'): entry['visibility_level'] = VISIBILITY_PRIVATE if not entry.get('file_name'): entry['file_name'] = quote(entry['title']).replace(" ", "_").replace("'", "") + ".txt" snippet_content = os.path.join(args.backup_dir, "snippet_" + str(entry.get('id')) + "_content.dump") entry['code'] = gitlab_lib.parse_json(snippet_content) if entry['code']: gitlab_lib.debug("RESTORE ENTRY\n\tcomponent %s\n\turl %s\n\tproject %s\n\tentry %s\n" % (entry['component'], gitlab_lib.PROJECT_COMPONENTS[entry['component']], project['id'], gitlab_lib.prepare_restore_data(project, entry))) gitlab_lib.rest_api_call(gitlab_lib.PROJECT_COMPONENTS["snippets"] % (gitlab_lib.API_URL, project['id']), gitlab_lib.prepare_restore_data(project, entry)) restore_notes(gitlab_lib.NOTES_FOR_SNIPPET % (gitlab_lib.API_URL, project['id'], str(entry.get('id'))), project, entry) else: gitlab_lib.error("Content file of snippet " + str(entry.get('id')) + " cannot be found. Won't restore snippet!")
def restore_notes(api_url, project, entry): """ Restore the notes to a component like snippets or issues """ notes_file = os.path.join(args.backup_dir, entry['component'] + "_" + str(entry.get('id')) + "_notes.dump") if os.path.exists(notes_file): notes = gitlab_lib.parse_json(notes_file) for note in notes: note[entry['component'] + '_id'] = str(entry.get('id')) gitlab_lib.rest_api_call(api_url, gitlab_lib.prepare_restore_data(project, note))
def fill_restore_queue(project, component): """ Fill queue with restore data project is project metadata dictionary component is the name of the component like the keys in PROJECT_COMPONENTS """ restore_file = os.path.join(args.backup_dir, component + ".json") backup = gitlab_lib.parse_json(restore_file) if backup: for entry in backup: entry['component'] = component queue.put(entry) else: gitlab_lib.log("Nothing to do for " + component)
def fill_restore_queue(project, component): """ Fill queue with restore data project is project metadata dictionary component is the name of the component like the keys in PROJECT_COMPONENTS """ restore_file = os.path.join(args.backup_dir, component + ".json") iid_counter = 1 if os.path.isfile(restore_file): backup = gitlab_lib.parse_json(restore_file) if backup: for entry in backup: entry['component'] = component entry['project_id'] = project['id'] if entry.get('iid'): entry['iid'] = iid_counter iid_counter = iid_counter + 1 work_queue.put(entry) else: gitlab_lib.log("Nothing to do for " + component)