def func(parser, options, args): """Integrate a GNU diff patch into the current patch """ if len(args) > 1: parser.error('incorrect number of arguments') check_local_changes() check_conflicts() check_head_top_equal(crt_series) if len(args) == 1: filename = args[0] else: filename = None current = crt_series.get_current() if not current: raise CmdException('No patches applied') if filename: if os.path.exists(filename): out.start('Folding patch "%s"' % filename) else: raise CmdException('No such file: %s' % filename) else: out.start('Folding patch from stdin') if options.threeway: crt_patch = crt_series.get_patch(current) bottom = crt_patch.get_bottom() git.apply_patch( filename=filename, base=bottom, strip=options.strip, reject=options.reject, ) elif options.base: git.apply_patch( filename=filename, reject=options.reject, strip=options.strip, base=git_id(crt_series, options.base), ) else: git.apply_patch( filename=filename, strip=options.strip, reject=options.reject, ) out.done()
def func(parser, options, args): """Integrate a GNU diff patch into the current patch """ if len(args) > 1: parser.error('incorrect number of arguments') check_local_changes() check_conflicts() check_head_top_equal(crt_series) if len(args) == 1: filename = args[0] else: filename = None current = crt_series.get_current() if not current: raise CmdException, 'No patches applied' if filename: if os.path.exists(filename): out.start('Folding patch "%s"' % filename) else: raise CmdException, 'No such file: %s' % filename else: out.start('Folding patch from stdin') if options.threeway: crt_patch = crt_series.get_patch(current) bottom = crt_patch.get_bottom() git.apply_patch(filename = filename, base = bottom, strip = options.strip, reject = options.reject) elif options.base: git.apply_patch(filename = filename, reject = options.reject, strip = options.strip, base = git_id(crt_series, options.base)) else: git.apply_patch(filename = filename, strip = options.strip, reject = options.reject) out.done()
def __series_merge_patch(base, patchdir, pname): """Merge a patch file with the given StGIT patch. """ patchfile = os.path.join(patchdir, pname) git.apply_patch(filename = patchfile, base = base)
def __create_patch(filename, message, author_name, author_email, author_date, diff, options): """Create a new patch on the stack """ if options.name: patch = options.name elif filename: patch = os.path.basename(filename) else: patch = '' if options.stripname: patch = __strip_patch_name(patch) if not patch: if options.ignore or options.replace: unacceptable_name = lambda name: False else: unacceptable_name = crt_series.patch_exists patch = make_patch_name(message, unacceptable_name) else: # fix possible invalid characters in the patch name patch = re.sub('[^\w.]+', '-', patch).strip('-') if options.ignore and patch in crt_series.get_applied(): out.info('Ignoring already applied patch "%s"' % patch) return if options.replace and patch in crt_series.get_unapplied(): crt_series.delete_patch(patch, keep_log = True) # refresh_patch() will invoke the editor in this case, with correct # patch content if not message: can_edit = False if options.author: options.authname, options.authemail = name_email(options.author) # override the automatically parsed settings if options.authname: author_name = options.authname if options.authemail: author_email = options.authemail if options.authdate: author_date = options.authdate sign_str = options.sign_str if not options.sign_str: sign_str = config.get('stgit.autosign') crt_series.new_patch(patch, message = message, can_edit = False, author_name = author_name, author_email = author_email, author_date = author_date, sign_str = sign_str) if not diff: out.warn('No diff found, creating empty patch') else: out.start('Importing patch "%s"' % patch) if options.base: base = git_id(crt_series, options.base) else: base = None try: git.apply_patch(diff = diff, base = base, reject = options.reject, strip = options.strip) except git.GitException: if not options.reject: crt_series.delete_patch(patch) raise crt_series.refresh_patch(edit = options.edit, show_patch = options.showdiff, author_date = author_date, backup = False) out.done()
def __create_patch(filename, message, author_name, author_email, author_date, diff, options): """Create a new patch on the stack """ if options.name: patch = options.name elif filename: patch = os.path.basename(filename) else: patch = '' if options.stripname: patch = __strip_patch_name(patch) if not patch: if options.ignore or options.replace: def unacceptable_name(name): return False else: unacceptable_name = crt_series.patch_exists patch = make_patch_name(message, unacceptable_name) else: # fix possible invalid characters in the patch name patch = re.sub(r'[^\w.]+', '-', patch).strip('-') if options.ignore and patch in crt_series.get_applied(): out.info('Ignoring already applied patch "%s"' % patch) return if options.replace and patch in crt_series.get_unapplied(): crt_series.delete_patch(patch, keep_log=True) # override the automatically parsed settings author = options.author(Person()) if author.name: author_name = author.name if author.email: author_email = author.email if author.date: author_date = text(author.date) sign_str = options.sign_str if not options.sign_str: sign_str = config.get('stgit.autosign') crt_series.new_patch( patch, message=message, can_edit=False, author_name=author_name, author_email=author_email, author_date=author_date, sign_str=sign_str, ) if not diff: out.warn('No diff found, creating empty patch') else: out.start('Importing patch "%s"' % patch) if options.base: base = git_id(crt_series, options.base) else: base = None try: git.apply_patch( diff=diff, base=base, reject=options.reject, strip=options.strip, ) except git.GitException: if not options.reject: crt_series.delete_patch(patch) raise crt_series.refresh_patch( edit=options.edit, show_patch=options.showdiff, author_date=author_date, backup=False, ) out.done()
def __create_patch(filename, message, author_name, author_email, author_date, diff, options): """Create a new patch on the stack """ if options.name: patch = options.name elif filename: patch = os.path.basename(filename) else: patch = '' if options.strip: patch = __strip_patch_name(patch) if not patch: if options.ignore or options.replace: unacceptable_name = lambda name: False else: unacceptable_name = crt_series.patch_exists patch = make_patch_name(message, unacceptable_name) else: # fix possible invalid characters in the patch name patch = re.sub('[^\w.]+', '-', patch).strip('-') if not diff: raise CmdException, 'No diff found inside the patch' if options.ignore and patch in crt_series.get_applied(): out.info('Ignoring already applied patch "%s"' % patch) return if options.replace and patch in crt_series.get_unapplied(): crt_series.delete_patch(patch) # refresh_patch() will invoke the editor in this case, with correct # patch content if not message: can_edit = False committer_name = committer_email = None if options.author: options.authname, options.authemail = name_email(options.author) # override the automatically parsed settings if options.authname: author_name = options.authname if options.authemail: author_email = options.authemail if options.authdate: author_date = options.authdate if options.commname: committer_name = options.commname if options.commemail: committer_email = options.commemail crt_series.new_patch(patch, message = message, can_edit = False, author_name = author_name, author_email = author_email, author_date = author_date, committer_name = committer_name, committer_email = committer_email) out.start('Importing patch "%s"' % patch) if options.base: git.apply_patch(diff = diff, base = git_id(options.base)) else: git.apply_patch(diff = diff) crt_series.refresh_patch(edit = options.edit, show_patch = options.showpatch) out.done()