- The commands "stg add", "stg rm", "stg cp", and "stg resolved"
were removed, since there are corresponding Git equivalents
+ - The "stg import" command supports the "-p N" option for stripping
+ leading slashes from diff paths
+
- New patch identification syntax: <branch>:<patch> (see
documentation for the "stg id" command).
short = 'Import a patch from a URL'),
opt('-n', '--name',
short = 'Use NAME as the patch name'),
- opt('-t', '--strip', action = 'store_true',
+ opt('-p', '--strip', type = 'int', metavar = 'N',
+ short = 'Remove N leading slashes from diff paths (default 1)'),
+ opt('-t', '--stripname', action = 'store_true',
short = 'Strip numbering and extension from patch name'),
opt('-i', '--ignore', action = 'store_true',
short = 'Ignore the applied patches in the series'),
short = 'leave the rejected hunks in corresponding *.rej files'),
opt('-e', '--edit', action = 'store_true',
short = 'Invoke an editor for the patch description'),
- opt('-p', '--showpatch', action = 'store_true',
+ opt('-d', '--showdiff', action = 'store_true',
short = 'Show the patch content in the editor buffer'),
opt('-a', '--author', metavar = '"NAME <EMAIL>"',
short = 'Use "NAME <EMAIL>" as the author details'),
patch = os.path.basename(filename)
else:
patch = ''
- if options.strip:
+ if options.stripname:
patch = __strip_patch_name(patch)
if not patch:
base = git_id(crt_series, options.base)
else:
base = None
- git.apply_patch(diff = diff, base = base, reject = options.reject)
+ git.apply_patch(diff = diff, base = base, reject = options.reject,
+ strip = options.strip)
crt_series.refresh_patch(edit = options.edit,
- show_patch = options.showpatch,
+ show_patch = options.showdiff,
sign_str = options.sign_str,
backup = False)
out.done()
GRun('repack', '-a', '-d', '-f').run()
def apply_patch(filename = None, diff = None, base = None,
- fail_dump = True, reject = False):
+ fail_dump = True, reject = False, strip = None):
"""Apply a patch onto the current or given index. There must not
be any local changes in the tree, otherwise the command fails
"""
cmd = ['apply', '--index']
if reject:
cmd += ['--reject']
+ if strip != None:
+ cmd += ['-p', str(strip)]
try:
GRun(*cmd).raw_input(diff).no_output()
except GitRunException:
stg delete ..
'
+test_expect_success \
+ 'Apply a patch created with "git diff" using -p1' \
+ '
+ stg import -p1 ../t1800-import/git-diff &&
+ [ $(git cat-file -p $(stg id) \
+ | grep -c "tree e96b1fba2160890ff600b675d7140d46b022b155") = 1 ] &&
+ stg delete ..
+ '
+
+test_expect_success \
+ 'Apply a patch created with "git diff" using -p0' \
+ '
+ stg import -p0 ../t1800-import/git-diff-p0 &&
+ [ $(git cat-file -p $(stg id) \
+ | grep -c "tree e96b1fba2160890ff600b675d7140d46b022b155") = 1 ] &&
+ stg delete ..
+ '
+
+test_expect_success \
+ 'Apply a patch created with "git diff" using -p2' \
+ '
+ ! stg import -p2 ../t1800-import/git-diff &&
+ [ $(git cat-file -p $(stg id) \
+ | grep -c "tree a5850c97490398571d41d6304dd940800550f507") = 1 ] &&
+ stg delete ..
+ '
+
test_expect_success \
'Apply a patch created with "git diff" from a subdirectory' \
'