[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openembedded-core
Subject:    [OE-core] [PATCH 1/8] recipetool: appendsrcfile(s): add dry-run mode
From:       "Julien Stephan" <jstephan () baylibre ! com>
Date:       2023-11-30 22:01:49
Message-ID: 20231130220156.726263-2-jstephan () baylibre ! com
[Download RAW message or body]

Content-Transfer-Encoding: 8bit

Add dry-run mode for recipetool appendsrcfile and appendsrcfiles, with
if necessary, a diff of changes

Signed-off-by: Julien Stephan <jstephan@baylibre.com>
---
 scripts/lib/recipetool/append.py | 33 +++++++++++++++++++++++++++++++-
 1 file changed, 32 insertions(+), 1 deletion(-)

diff --git a/scripts/lib/recipetool/append.py b/scripts/lib/recipetool/append.py
index 9dbb1cc4b5a..314ff4e20fd 100644
--- a/scripts/lib/recipetool/append.py
+++ b/scripts/lib/recipetool/append.py
@@ -18,6 +18,7 @@ import shutil
 import scriptutils
 import errno
 from collections import defaultdict
+import difflib
 
 logger = logging.getLogger('recipetool')
 
@@ -355,7 +356,35 @@ def appendsrc(args, files, rd, extralines=None):
             extralines.append('SRC_URI += {0}'.format(source_uri))
         copyfiles[newfile] = srcfile
 
-    oe.recipeutils.bbappend_recipe(rd, args.destlayer, copyfiles, None, \
wildcardver=args.wildcard_version, machine=args.machine, extralines=extralines) +    \
dry_run_output = None +    dry_run_outdir = None
+    if args.dry_run:
+        import tempfile
+        dry_run_output = tempfile.TemporaryDirectory(prefix='devtool')
+        dry_run_outdir = dry_run_output.name
+
+    appendfile, _ = oe.recipeutils.bbappend_recipe(rd, args.destlayer, copyfiles, \
None, wildcardver=args.wildcard_version, machine=args.machine, extralines=extralines, \
redirect_output=dry_run_outdir) +    if args.dry_run:
+        output = ''
+        appendfilename = os.path.basename(appendfile)
+        newappendfile = appendfile
+        if appendfile and os.path.exists(appendfile):
+            with open(appendfile, 'r') as f:
+                oldlines = f.readlines()
+        else:
+            appendfile = '/dev/null'
+            oldlines = []
+
+        with open(os.path.join(dry_run_outdir, appendfilename), 'r') as f:
+            newlines = f.readlines()
+        diff = difflib.unified_diff(oldlines, newlines, appendfile, newappendfile)
+        difflines = list(diff)
+        if difflines:
+            output += ''.join(difflines)
+        if output:
+            logger.info('Diff of changed files:\n%s' % output)
+        else:
+            logger.info('No changed files')
     tinfoil.modified_files()
 
 def appendsrcfiles(parser, args):
@@ -436,6 +465,7 @@ def register_commands(subparsers):
                                    help='Create/update a bbappend to add or replace \
source files',  description='Creates a bbappend (or updates an existing one) to add \
or replace the specified file in the recipe sources, either those in WORKDIR or those \
in the source tree. This command lets you specify multiple files with a destination \
directory, so cannot specify the destination filename. See the `appendsrcfile` \
                command for the other behavior.')
     parser.add_argument('-D', '--destdir', help='Destination directory (relative to \
S or WORKDIR, defaults to ".")', default='', type=destination_path) +    \
                parser.add_argument('-n', '--dry-run', help='Dry run mode', \
                action='store_true')
     parser.add_argument('files', nargs='+', metavar='FILE', help='File(s) to be \
                added to the recipe sources (WORKDIR or S)', type=existing_path)
     parser.set_defaults(func=lambda a: appendsrcfiles(parser, a), parserecipes=True)
 
@@ -443,6 +473,7 @@ def register_commands(subparsers):
                                    parents=[common_src],
                                    help='Create/update a bbappend to add or replace \
a source file',  description='Creates a bbappend (or updates an existing one) to add \
or replace the specified files in the recipe sources, either those in WORKDIR or \
those in the source tree. This command lets you specify the destination filename, not \
just destination directory, but only works for one file. See the `appendsrcfiles` \
command for the other behavior.') +    parser.add_argument('-n', '--dry-run', \
                help='Dry run mode', action='store_true')
     parser.add_argument('file', metavar='FILE', help='File to be added to the recipe \
                sources (WORKDIR or S)', type=existing_path)
     parser.add_argument('destfile', metavar='DESTFILE', nargs='?', help='Destination \
                path (relative to S or WORKDIR, optional)', type=destination_path)
     parser.set_defaults(func=lambda a: appendsrcfile(parser, a), parserecipes=True)
-- 
2.42.0



-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#191545): https://lists.openembedded.org/g/openembedded-core/message/191545
Mute This Topic: https://lists.openembedded.org/mt/102903931/4454766
Group Owner: openembedded-core+owner@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [openembedded-core@marc.info]
-=-=-=-=-=-=-=-=-=-=-=-



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic