combo-layer: fix file_exclude for dest_dir = .
"filterdiff -x ./some/file" does not remove changes for some/file. We must be more careful about constructing the path name and only add the prefix when it really means a directory. While at it, also better normalize the path in copy_selected_files() early on, to handle double slashes. Useful should the function ever gets used for something other that dest_dir (which gets normalized in sanity_check()). (From OE-Core rev: 8ea63c6c920c39e5a4ba176223fe472f92e2632a) Signed-off-by: Patrick Ohly <patrick.ohly@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
5508950045
commit
3775c6e714
|
@ -249,13 +249,16 @@ def action_init(conf, args):
|
||||||
# files already moved, we need to prepend the
|
# files already moved, we need to prepend the
|
||||||
# subdirectory to all filters, otherwise they would
|
# subdirectory to all filters, otherwise they would
|
||||||
# not match.
|
# not match.
|
||||||
if subdir:
|
if subdir == '.':
|
||||||
|
subdir = ''
|
||||||
|
elif subdir:
|
||||||
|
subdir = os.path.normpath(subdir)
|
||||||
file_filter = ' '.join([subdir + '/' + x for x in file_filter.split()])
|
file_filter = ' '.join([subdir + '/' + x for x in file_filter.split()])
|
||||||
exclude_patterns = [subdir + '/' + x for x in exclude_patterns]
|
exclude_patterns = [subdir + '/' + x for x in exclude_patterns]
|
||||||
# To handle both cases, we cd into the target
|
# To handle both cases, we cd into the target
|
||||||
# directory and optionally tell tar to strip the path
|
# directory and optionally tell tar to strip the path
|
||||||
# prefix when the files were already moved.
|
# prefix when the files were already moved.
|
||||||
subdir_components = len(os.path.normpath(subdir).split(os.path.sep)) if subdir else 0
|
subdir_components = len(subdir.split(os.path.sep)) if subdir else 0
|
||||||
strip=('--strip-components=%d' % subdir_components) if subdir else ''
|
strip=('--strip-components=%d' % subdir_components) if subdir else ''
|
||||||
# TODO: file_filter wild cards do not work (and haven't worked before either), because
|
# TODO: file_filter wild cards do not work (and haven't worked before either), because
|
||||||
# a) GNU tar requires a --wildcards parameter before turning on wild card matching.
|
# a) GNU tar requires a --wildcards parameter before turning on wild card matching.
|
||||||
|
@ -375,7 +378,7 @@ tail -c +18 $tmpname | head -c -4
|
||||||
if not os.path.exists(extract_dir):
|
if not os.path.exists(extract_dir):
|
||||||
os.makedirs(extract_dir)
|
os.makedirs(extract_dir)
|
||||||
copy_selected_files('HEAD', extract_dir, file_filter, exclude_patterns, '.',
|
copy_selected_files('HEAD', extract_dir, file_filter, exclude_patterns, '.',
|
||||||
subdir=dest_dir if dest_dir != '.' else '')
|
subdir=dest_dir)
|
||||||
runcmd('git add --all --force .')
|
runcmd('git add --all --force .')
|
||||||
if runcmd('git status --porcelain'):
|
if runcmd('git status --porcelain'):
|
||||||
# Something to commit.
|
# Something to commit.
|
||||||
|
@ -648,7 +651,7 @@ def action_update(conf, args):
|
||||||
filter = ['filterdiff', '-p1']
|
filter = ['filterdiff', '-p1']
|
||||||
for path in exclude.split():
|
for path in exclude.split():
|
||||||
filter.append('-x')
|
filter.append('-x')
|
||||||
filter.append('%s/%s' % (dest_dir, path) if dest_dir else path)
|
filter.append('%s/%s' % (dest_dir, path) if dest_dir != '.' else path)
|
||||||
for patch in patchlist[:]:
|
for patch in patchlist[:]:
|
||||||
filtered = patch + '.tmp'
|
filtered = patch + '.tmp'
|
||||||
with open(filtered, 'w') as f:
|
with open(filtered, 'w') as f:
|
||||||
|
|
Loading…
Reference in New Issue