[OE-core] [PATCH 2/9] devtool: improve modified file preservation to handle directory structures

Paul Eggleton paul.eggleton at linux.intel.com
Tue Sep 8 10:39:08 UTC 2015


Allow the _add_md5() function to be called with a directory in order to
recursively add the files under it. Additionally, we need to skip
preserving empty directories (since directories aren't listed in the md5
file).

Signed-off-by: Paul Eggleton <paul.eggleton at linux.intel.com>
---
 scripts/lib/devtool/standard.py | 30 +++++++++++++++++++++---------
 1 file changed, 21 insertions(+), 9 deletions(-)

diff --git a/scripts/lib/devtool/standard.py b/scripts/lib/devtool/standard.py
index e59fb5e..6d65d57 100644
--- a/scripts/lib/devtool/standard.py
+++ b/scripts/lib/devtool/standard.py
@@ -362,14 +362,23 @@ def _extract_source(srctree, keep_temp, devbranch, d):
     return initial_rev
 
 def _add_md5(config, recipename, filename):
-    """Record checksum of a recipe to the md5-file of the workspace"""
+    """Record checksum of a file (or recursively for a directory) to the md5-file of the workspace"""
     import bb.utils
-    md5 = bb.utils.md5_file(filename)
-    with open(os.path.join(config.workspace_path, '.devtool_md5'), 'a') as f:
-        f.write('%s|%s|%s\n' % (recipename, os.path.relpath(filename, config.workspace_path), md5))
+
+    def addfile(fn):
+        md5 = bb.utils.md5_file(fn)
+        with open(os.path.join(config.workspace_path, '.devtool_md5'), 'a') as f:
+            f.write('%s|%s|%s\n' % (recipename, os.path.relpath(fn, config.workspace_path), md5))
+
+    if os.path.isdir(filename):
+        for root, _, files in os.walk(os.path.dirname(filename)):
+            for f in files:
+                addfile(os.path.join(root, f))
+    else:
+        addfile(filename)
 
 def _check_preserve(config, recipename):
-    """Check if a recipe was manually changed and needs to be saved in 'attic'
+    """Check if a file was manually changed and needs to be saved in 'attic'
        directory"""
     import bb.utils
     origfile = os.path.join(config.workspace_path, '.devtool_md5')
@@ -830,10 +839,13 @@ def reset(args, config, basepath, workspace):
         preservepath = os.path.join(config.workspace_path, 'attic', pn)
         def preservedir(origdir):
             if os.path.exists(origdir):
-                for fn in os.listdir(origdir):
-                    logger.warn('Preserving %s in %s' % (fn, preservepath))
-                    bb.utils.mkdirhier(preservepath)
-                    shutil.move(os.path.join(origdir, fn), os.path.join(preservepath, fn))
+                for root, dirs, files in os.walk(origdir):
+                    for fn in files:
+                        logger.warn('Preserving %s in %s' % (fn, preservepath))
+                        bb.utils.mkdirhier(preservepath)
+                        shutil.move(os.path.join(origdir, fn), os.path.join(preservepath, fn))
+                    for dn in dirs:
+                        os.rmdir(os.path.join(root, dn))
                 os.rmdir(origdir)
 
         preservedir(os.path.join(config.workspace_path, 'recipes', pn))
-- 
2.1.0




More information about the Openembedded-core mailing list