diff options
Diffstat (limited to 'meta/classes/externalsrc.bbclass')
| -rw-r--r-- | meta/classes/externalsrc.bbclass | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/meta/classes/externalsrc.bbclass b/meta/classes/externalsrc.bbclass index dd09395788..3d6b80bee2 100644 --- a/meta/classes/externalsrc.bbclass +++ b/meta/classes/externalsrc.bbclass | |||
| @@ -68,6 +68,7 @@ python () { | |||
| 68 | url_data = fetch.ud[url] | 68 | url_data = fetch.ud[url] |
| 69 | parm = url_data.parm | 69 | parm = url_data.parm |
| 70 | if (url_data.type == 'file' or | 70 | if (url_data.type == 'file' or |
| 71 | url_data.type == 'npmsw' or | ||
| 71 | 'type' in parm and parm['type'] == 'kmeta'): | 72 | 'type' in parm and parm['type'] == 'kmeta'): |
| 72 | local_srcuri.append(url) | 73 | local_srcuri.append(url) |
| 73 | 74 | ||
| @@ -190,6 +191,7 @@ def srctree_hash_files(d, srcdir=None): | |||
| 190 | import shutil | 191 | import shutil |
| 191 | import subprocess | 192 | import subprocess |
| 192 | import tempfile | 193 | import tempfile |
| 194 | import hashlib | ||
| 193 | 195 | ||
| 194 | s_dir = srcdir or d.getVar('EXTERNALSRC') | 196 | s_dir = srcdir or d.getVar('EXTERNALSRC') |
| 195 | git_dir = None | 197 | git_dir = None |
| @@ -197,6 +199,10 @@ def srctree_hash_files(d, srcdir=None): | |||
| 197 | try: | 199 | try: |
| 198 | git_dir = os.path.join(s_dir, | 200 | git_dir = os.path.join(s_dir, |
| 199 | subprocess.check_output(['git', '-C', s_dir, 'rev-parse', '--git-dir'], stderr=subprocess.DEVNULL).decode("utf-8").rstrip()) | 201 | subprocess.check_output(['git', '-C', s_dir, 'rev-parse', '--git-dir'], stderr=subprocess.DEVNULL).decode("utf-8").rstrip()) |
| 202 | top_git_dir = os.path.join(s_dir, subprocess.check_output(['git', '-C', d.getVar("TOPDIR"), 'rev-parse', '--git-dir'], | ||
| 203 | stderr=subprocess.DEVNULL).decode("utf-8").rstrip()) | ||
| 204 | if git_dir == top_git_dir: | ||
| 205 | git_dir = None | ||
| 200 | except subprocess.CalledProcessError: | 206 | except subprocess.CalledProcessError: |
| 201 | pass | 207 | pass |
| 202 | 208 | ||
| @@ -210,7 +216,17 @@ def srctree_hash_files(d, srcdir=None): | |||
| 210 | env = os.environ.copy() | 216 | env = os.environ.copy() |
| 211 | env['GIT_INDEX_FILE'] = tmp_index.name | 217 | env['GIT_INDEX_FILE'] = tmp_index.name |
| 212 | subprocess.check_output(['git', 'add', '-A', '.'], cwd=s_dir, env=env) | 218 | subprocess.check_output(['git', 'add', '-A', '.'], cwd=s_dir, env=env) |
| 213 | sha1 = subprocess.check_output(['git', 'write-tree'], cwd=s_dir, env=env).decode("utf-8") | 219 | git_sha1 = subprocess.check_output(['git', 'write-tree'], cwd=s_dir, env=env).decode("utf-8") |
| 220 | submodule_helper = subprocess.check_output(['git', 'submodule--helper', 'list'], cwd=s_dir, env=env).decode("utf-8") | ||
| 221 | for line in submodule_helper.splitlines(): | ||
| 222 | module_dir = os.path.join(s_dir, line.rsplit(maxsplit=1)[1]) | ||
| 223 | if os.path.isdir(module_dir): | ||
| 224 | proc = subprocess.Popen(['git', 'add', '-A', '.'], cwd=module_dir, env=env, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) | ||
| 225 | proc.communicate() | ||
| 226 | proc = subprocess.Popen(['git', 'write-tree'], cwd=module_dir, env=env, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL) | ||
| 227 | stdout, _ = proc.communicate() | ||
| 228 | git_sha1 += stdout.decode("utf-8") | ||
| 229 | sha1 = hashlib.sha1(git_sha1.encode("utf-8")).hexdigest() | ||
| 214 | with open(oe_hash_file, 'w') as fobj: | 230 | with open(oe_hash_file, 'w') as fobj: |
| 215 | fobj.write(sha1) | 231 | fobj.write(sha1) |
| 216 | ret = oe_hash_file + ':True' | 232 | ret = oe_hash_file + ':True' |
