[OE-core] [PATCH 2/3] combo-layer: fix file_exclude for dest_dir = .

Patrick Ohly patrick.ohly at intel.com
Fri Mar 27 13:53:11 UTC 2015


"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()).

Signed-off-by: Patrick Ohly <patrick.ohly at intel.com>
---
 scripts/combo-layer | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/scripts/combo-layer b/scripts/combo-layer
index 4aed072..a1fc6ac 100755
--- a/scripts/combo-layer
+++ b/scripts/combo-layer
@@ -249,13 +249,16 @@ def action_init(conf, args):
                 # files already moved, we need to prepend the
                 # subdirectory to all filters, otherwise they would
                 # 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()])
                     exclude_patterns = [subdir + '/' + x for x in exclude_patterns]
                 # To handle both cases, we cd into the target
                 # directory and optionally tell tar to strip the path
                 # 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 ''
                 # 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.
@@ -375,7 +378,7 @@ tail -c +18 $tmpname | head -c -4
                     if not os.path.exists(extract_dir):
                         os.makedirs(extract_dir)
                     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 .')
                     if runcmd('git status --porcelain'):
                         # Something to commit.
@@ -648,7 +651,7 @@ def action_update(conf, args):
             filter = ['filterdiff', '-p1']
             for path in exclude.split():
                 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[:]:
                 filtered = patch + '.tmp'
                 with open(filtered, 'w') as f:
-- 
2.1.4




More information about the Openembedded-core mailing list