def run_pop(args): number = stop_at_patch = None patchfns.chdir_to_base_dir() if args.patchnamornum: if args.patchnamornum.isdigit(): number = int(args.patchnamornum) else: stop_at_patch = patchfns.find_applied_patch(args.patchnamornum) if not stop_at_patch: return cmd_result.ERROR elif not args.opt_all: number = 1 silent = args.opt_quiet if patchfns.top_patch_needs_refresh() and not args.opt_force: output.error('The topmost patch %s needs to be refreshed first.\n' % patchfns.print_top_patch()) return cmd_result.ERROR | cmd_result.SUGGEST_FORCE_OR_REFRESH patches = list_patches(number=number, stop_at_patch=stop_at_patch) if not patches: output.error('No patch removed\n') return cmd_result.ERROR is_ok = True for patch in patches: result = remove_patch(patch, force=args.opt_force, check=args.opt_remove, silent=silent) if result is not True: return cmd_result.ERROR if result is False else result if not args.opt_quiet: output.write('\n') if not patchfns.top_patch(): output.write('No patches applied\n') else: output.write('Now at patch %s\n' % patchfns.print_top_patch()) return cmd_result.OK if is_ok is True else cmd_result.ERROR
def run_delete(args): patchfns.chdir_to_base_dir() if args.patch: patch = patchfns.find_patch(args.patch) if not patch: return cmd_result.ERROR else: patch = patchfns.top_patch() if args.opt_next: patch =patchfns.patch_after(patch) if not patch: output.error('No next patch\n') return cmd_result.ERROR if not patch: patchfns.find_top_patch() return cmd_result.ERROR if patchfns.is_applied(patch): if patch != patchfns.top_patch(): output.error('Patch %s is currently applied\n' % patchfns.print_patch(patch)) return cmd_result.ERROR if patchfns.pyquilt_command('pop -qf') != cmd_result.OK: return cmd_result.ERROR if patchfns.remove_from_series(patch): output.write('Removed patch %s\n' % patchfns.print_patch(patch)) else: output.error('Failed to remove patch %s\n' % patchfns.print_patch(patch)) return cmd_result.ERROR patch_file = patchfns.patch_file_name(patch) if args.opt_remove and os.path.exists(patch_file): if args.opt_backup: try: os.rename(patch_file, patch_file + '~') except IOError: output.error('Failed to backup patch file %s\n' % patch_file) return cmd_result.ERROR else: try: os.remove(patch_file) except IOError: output.error('Failed to remove patch file %s\n' % patch_file) return cmd_result.ERROR return cmd_result.OK
def run_import(args): patchfns.chdir_to_base_dir() if args.opt_patch and len(args.patchfiles) > 1: output.error('Option `-P\' can only be used when importing a single patch\n') return cmd_result.ERROR patch_args = ('-p%s' % args.opt_strip) if args.opt_strip else '' if args.opt_reverse: patch_args = '-R' if not patch_args else patch_args + ' -R' before = patchfns.patch_after(patchfns.top_patch()) for patch_file in args.patchfiles: patch = args.opt_patch if args.opt_patch else os.path.basename(patch_file) patch_file_name = patchfns.find_patch_file(patch_file) if not patch_file_name: return cmd_result.ERROR merged = False if patchfns.is_applied(patch): output.error('Patch %s is applied\n' % patchfns.print_patch(patch)) return cmd_result.ERROR dest = patchfns.patch_file_name(patch) if patchfns.patch_in_series(patch): if patch_file_name == dest: output.error('Patch %s already exists in series.\n' % patchfns.print_patch(patch)) return cmd_result.ERROR if not args.opt_force: output.error('Patch %s exists. Replace with -f.\n' % patchfns.print_patch(patch)) return cmd_result.ERROR_SUGGEST_FORCE if args.opt_desc != 'n': merged_patch = merge_patches(dest, patch_file_name, args.opt_desc) if merged_patch is False: return cmd_result.ERROR merged = True output.error('Replacing patch %s with new version\n' % patchfns.print_patch(patch)) elif os.path.exists(dest): output.write('Importing patch %s\n' % patchfns.print_patch(patch)) else: output.write('Importing patch %s (stored as %s)\n' % (patch_file, patchfns.print_patch(patch))) dest_dir = os.path.dirname(dest) if not os.path.exists(dest_dir): os.makedirs(dest_dir) try: if merged: fsutils.set_file_contents(dest, merged_patch) else: # just in case dest == patch_file do it this way text = fsutils.get_file_contents(patch_file_name) fsutils.set_file_contents(dest, text) except IOError as edata: output.error('Failed to import patch %s\n' % patchfns.print_patch(patch)) return cmd_result.ERROR if not patchfns.patch_in_series(patch) and not patchfns.insert_in_series(patch, patch_args, before): output.error('Failed to insert patch %s into file series\n' % patchfns.print_patch(patch)) return cmd_result.OK
def list_patches(number=None, stop_at_patch=None, push_all=False): top = patchfns.top_patch() n = 0 patch = None if top: patch_list = patchfns.patches_after(top) else: patch_list = patchfns.cat_series() if push_all: return patch_list if not number: number = patch_list.index(stop_at_patch) + 1 if number < len(patch_list): return patch_list[:number] return patch_list
def run_patches(args): patchfns.chdir_to_base_dir() if args.opt_verbose: applied = '+ ' current = '= ' unapplied = ' ' else: applied = current = unapplied = '' do_colorize = args.opt_color == 'always' or (args.opt_color in ['auto', 'tty'] and sys.stderr.isatty()) if do_colorize: colour.set_up() file_paths = [os.path.join(patchfns.SUBDIR, file_path) if patchfns.SUBDIR else file_path for file_path in args.filelist] top = patchfns.top_patch() output.start_pager() if top: scan_applied('series_app', applied, file_paths, patchfns.patches_before(top)) scan_applied('series_top', current, file_paths, (top,)) scan_unapplied('series_una', unapplied, file_paths, patchfns.patches_after(top)) output.wait_for_pager() return cmd_result.OK
def run_series(args): patchfns.chdir_to_base_dir() output.start_pager() do_colorize = args.opt_color == 'always' or (args.opt_color == 'auto' and sys.stderr.isatty()) if do_colorize: colour.set_up() if do_colorize or args.opt_verbose: top = patchfns.top_patch() for patch in patchfns.patches_before(top): string = '+ %s\n' % patchfns.print_patch(patch) output.write(colour.wrap(string, 'series_app') if do_colorize else string) if top: string = '= %s\n' % patchfns.print_patch(top) output.write(colour.wrap(string, 'series_top') if do_colorize else string) for patch in patchfns.patches_after(top): string = ' %s\n' % patchfns.print_patch(patch) output.write(colour.wrap(string, 'series_una') if do_colorize else string) else: for patch in patchfns.cat_series(): output.write('%s\n' % patchfns.print_patch(patch)) output.wait_for_pager() return cmd_result.OK