X-Git-Url: https://git.distorted.org.uk/~mdw/stgit/blobdiff_plain/575c575ea43be1145e79e1cc5d66c2a102d94f7f..27ac2b7eee3cc39e29c470cd5b5889e93091d9be:/stgit/commands/imprt.py diff --git a/stgit/commands/imprt.py b/stgit/commands/imprt.py index 1c8339c..0089a8b 100644 --- a/stgit/commands/imprt.py +++ b/stgit/commands/imprt.py @@ -228,20 +228,34 @@ def __parse_patch(fobj): # Just return None return (descr, authname, authemail, authdate, diff) -def __create_patch(patch, message, author_name, author_email, +def __create_patch(filename, message, author_name, author_email, author_date, diff, options): """Create a new patch on the stack """ - if not diff: - raise CmdException, 'No diff found inside the patch' + 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: - patch = make_patch_name(message, crt_series.patch_exists, - alternative = not (options.ignore - or options.replace)) + 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(): - print 'Ignoring already applied patch "%s"' % patch + out.info('Ignoring already applied patch "%s"' % patch) return if options.replace and patch in crt_series.get_unapplied(): crt_series.delete_patch(patch) @@ -275,20 +289,16 @@ def __create_patch(patch, message, author_name, author_email, committer_name = committer_name, committer_email = committer_email) - print 'Importing patch "%s"...' % patch, - sys.stdout.flush() - + 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() - print 'done' - -def __import_file(patch, filename, options): +def __import_file(filename, options, patch = None): """Import a patch from a file or standard input """ if filename: @@ -310,7 +320,12 @@ def __import_file(patch, filename, options): if filename: f.close() - __create_patch(patch, message, author_name, author_email, + if patch: + pname = patch + else: + pname = filename + + __create_patch(pname, message, author_name, author_email, author_date, diff, options) def __import_series(filename, options): @@ -330,12 +345,9 @@ def __import_series(filename, options): if not patch: continue patchfile = os.path.join(patchdir, patch) - - if options.strip: - patch = __strip_patch_name(patch) patch = __replace_slashes_with_dashes(patch); - __import_file(patch, patchfile, options) + __import_file(patchfile, options, patch) if filename: f.close() @@ -370,10 +382,10 @@ def __import_url(url, options): if not url: parser.error('URL argument required') - patch = os.path.basename(url) - file = os.path.join(tempfile.gettempdir(), patch) - urllib.urlretrieve(url, file) - __import_file(patch, file, options) + patch = os.path.basename(urllib.unquote(url)) + filename = os.path.join(tempfile.gettempdir(), patch) + urllib.urlretrieve(url, filename) + __import_file(filename, options) def func(parser, options, args): """Import a GNU diff file as a new patch @@ -397,15 +409,6 @@ def func(parser, options, args): elif options.url: __import_url(filename, options) else: - if options.name: - patch = options.name - elif filename: - patch = os.path.basename(filename) - else: - patch = '' - if options.strip: - patch = __strip_patch_name(patch) - - __import_file(patch, filename, options) + __import_file(filename, options) print_crt_patch()