summaryrefslogtreecommitdiffstats
path: root/meta/lib/oe/recipeutils.py
diff options
context:
space:
mode:
authorJulien Stephan <jstephan@baylibre.com>2023-11-22 12:08:16 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2023-12-01 11:48:25 +0000
commit89f16624842a91e063dc9e6b98787d44c55e4900 (patch)
treec22ebb7b7f5ff89d3ed8431e8dcace59678b9ed3 /meta/lib/oe/recipeutils.py
parent17427db136491f13b0c9f187906ce9e3f6c85b29 (diff)
downloadpoky-89f16624842a91e063dc9e6b98787d44c55e4900.tar.gz
devtool: add support for git submodules
Adding the support of submodules required a lot of changes on the internal data structures: * initial_rev/startcommit used as a starting point for looking at new / updated commits was replaced by a dictionary where the keys are the submodule name ("." for main repo) and the values are the initial_rev/startcommit * the extractPatches function now extracts patch for the main repo and for all submodules and stores them in a hierarchical way describing the submodule path * store initial_rev/commit also for all submodules inside the recipe bbappend file * _export_patches now returns dictionaries that contains the 'patchdir' parameter (if any). This parameter is used to add the correct 'patchdir=' parameter on the recipe Also, recipe can extract a secondary git tree inside the workdir. By default, at the end of the do_patch function, there is a hook in devtool that commits everything that was modified to have a clean repository. It uses the command: "git add .; git commit ..." The issue here is that, it adds the secondary git tree as a submodule but in a wrong way. Doing "git add <git dir>" declares a submodule but do not adds a url associated to it, and all following "git submodule foreach" commands will fail. So detect that a git tree was extracted inside S and correctly add it using "git submodule add <url> <path>", so that it will be considered as a regular git submodule (From OE-Core rev: 900129cbdf25297a42ab5dbd02d1adbea405c935) Signed-off-by: Julien Stephan <jstephan@baylibre.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib/oe/recipeutils.py')
-rw-r--r--meta/lib/oe/recipeutils.py27
1 files changed, 17 insertions, 10 deletions
diff --git a/meta/lib/oe/recipeutils.py b/meta/lib/oe/recipeutils.py
index 695e981623..25b159bc1b 100644
--- a/meta/lib/oe/recipeutils.py
+++ b/meta/lib/oe/recipeutils.py
@@ -672,11 +672,11 @@ def bbappend_recipe(rd, destlayerdir, srcfiles, install=None, wildcardver=False,
672 destlayerdir: base directory of the layer to place the bbappend in 672 destlayerdir: base directory of the layer to place the bbappend in
673 (subdirectory path from there will be determined automatically) 673 (subdirectory path from there will be determined automatically)
674 srcfiles: dict of source files to add to SRC_URI, where the value 674 srcfiles: dict of source files to add to SRC_URI, where the value
675 is the full path to the file to be added, and the value is the 675 is the full path to the file to be added, and the value is a
676 original filename as it would appear in SRC_URI or None if it 676 dict with 'path' key containing the original filename as it
677 isn't already present. You may pass None for this parameter if 677 would appear in SRC_URI or None if it isn't already present.
678 you simply want to specify your own content via the extralines 678 You may pass None for this parameter if you simply want to specify
679 parameter. 679 your own content via the extralines parameter.
680 install: dict mapping entries in srcfiles to a tuple of two elements: 680 install: dict mapping entries in srcfiles to a tuple of two elements:
681 install path (*without* ${D} prefix) and permission value (as a 681 install path (*without* ${D} prefix) and permission value (as a
682 string, e.g. '0644'). 682 string, e.g. '0644').
@@ -763,10 +763,9 @@ def bbappend_recipe(rd, destlayerdir, srcfiles, install=None, wildcardver=False,
763 copyfiles = {} 763 copyfiles = {}
764 if srcfiles: 764 if srcfiles:
765 instfunclines = [] 765 instfunclines = []
766 for i, (newfile, origsrcfile) in enumerate(srcfiles.items()): 766 for i, (newfile, param) in enumerate(srcfiles.items()):
767 srcfile = origsrcfile
768 srcurientry = None 767 srcurientry = None
769 if not srcfile: 768 if not 'path' in param or not param['path']:
770 srcfile = os.path.basename(newfile) 769 srcfile = os.path.basename(newfile)
771 srcurientry = 'file://%s' % srcfile 770 srcurientry = 'file://%s' % srcfile
772 if params and params[i]: 771 if params and params[i]:
@@ -778,7 +777,10 @@ def bbappend_recipe(rd, destlayerdir, srcfiles, install=None, wildcardver=False,
778 appendline('SRC_URI:append%s' % appendoverride, '=', ' ' + srcurientry) 777 appendline('SRC_URI:append%s' % appendoverride, '=', ' ' + srcurientry)
779 else: 778 else:
780 appendline('SRC_URI', '+=', srcurientry) 779 appendline('SRC_URI', '+=', srcurientry)
781 copyfiles[newfile] = srcfile 780 param['path'] = srcfile
781 else:
782 srcfile = param['path']
783 copyfiles[newfile] = param
782 if install: 784 if install:
783 institem = install.pop(newfile, None) 785 institem = install.pop(newfile, None)
784 if institem: 786 if institem:
@@ -901,7 +903,12 @@ def bbappend_recipe(rd, destlayerdir, srcfiles, install=None, wildcardver=False,
901 outdir = redirect_output 903 outdir = redirect_output
902 else: 904 else:
903 outdir = appenddir 905 outdir = appenddir
904 for newfile, srcfile in copyfiles.items(): 906 for newfile, param in copyfiles.items():
907 srcfile = param['path']
908 patchdir = param.get('patchdir', ".")
909
910 if patchdir != ".":
911 newfile = os.path.join(os.path.split(newfile)[0], patchdir, os.path.split(newfile)[1])
905 filedest = os.path.join(outdir, destsubdir, os.path.basename(srcfile)) 912 filedest = os.path.join(outdir, destsubdir, os.path.basename(srcfile))
906 if os.path.abspath(newfile) != os.path.abspath(filedest): 913 if os.path.abspath(newfile) != os.path.abspath(filedest):
907 if newfile.startswith(tempfile.gettempdir()): 914 if newfile.startswith(tempfile.gettempdir()):