summaryrefslogtreecommitdiffstats
path: root/scripts/oe-setup-layers
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/oe-setup-layers')
-rwxr-xr-xscripts/oe-setup-layers68
1 files changed, 34 insertions, 34 deletions
diff --git a/scripts/oe-setup-layers b/scripts/oe-setup-layers
index 461560de9f..6c02262663 100755
--- a/scripts/oe-setup-layers
+++ b/scripts/oe-setup-layers
@@ -19,8 +19,8 @@ import json
19import os 19import os
20import subprocess 20import subprocess
21 21
22def _is_layer_git_repo(layerdir): 22def _is_repo_git_repo(repodir):
23 git_dir = os.path.join(layerdir, ".git") 23 git_dir = os.path.join(repodir, ".git")
24 if not os.access(git_dir, os.R_OK): 24 if not os.access(git_dir, os.R_OK):
25 return False 25 return False
26 try: 26 try:
@@ -28,73 +28,73 @@ def _is_layer_git_repo(layerdir):
28 except subprocess.CalledProcessError: 28 except subprocess.CalledProcessError:
29 return False 29 return False
30 30
31def _is_layer_at_rev(layerdir, rev): 31def _is_repo_at_rev(repodir, rev):
32 try: 32 try:
33 curr_rev = subprocess.check_output("git -C %s rev-parse HEAD" % layerdir, shell=True, stderr=subprocess.DEVNULL) 33 curr_rev = subprocess.check_output("git -C %s rev-parse HEAD" % repodir, shell=True, stderr=subprocess.DEVNULL)
34 if curr_rev.strip().decode("utf-8") == rev: 34 if curr_rev.strip().decode("utf-8") == rev:
35 return True 35 return True
36 except subprocess.CalledProcessError: 36 except subprocess.CalledProcessError:
37 pass 37 pass
38 return False 38 return False
39 39
40def _is_layer_at_remote_uri(layerdir, remote, uri): 40def _is_repo_at_remote_uri(repodir, remote, uri):
41 try: 41 try:
42 curr_uri = subprocess.check_output("git -C %s remote get-url %s" % (layerdir, remote), shell=True, stderr=subprocess.DEVNULL) 42 curr_uri = subprocess.check_output("git -C %s remote get-url %s" % (repodir, remote), shell=True, stderr=subprocess.DEVNULL)
43 if curr_uri.strip().decode("utf-8") == uri: 43 if curr_uri.strip().decode("utf-8") == uri:
44 return True 44 return True
45 except subprocess.CalledProcessError: 45 except subprocess.CalledProcessError:
46 pass 46 pass
47 return False 47 return False
48 48
49def _contains_submodules(layerdir): 49def _contains_submodules(repodir):
50 return os.path.exists(os.path.join(layerdir,".gitmodules")) 50 return os.path.exists(os.path.join(repodir,".gitmodules"))
51 51
52def _do_checkout(args, json): 52def _do_checkout(args, json):
53 layers = json['sources'] 53 repos = json['sources']
54 for l_name in layers: 54 for r_name in repos:
55 l_data = layers[l_name] 55 r_data = repos[r_name]
56 layerdir = os.path.abspath(os.path.join(args['destdir'], l_data['path'])) 56 repodir = os.path.abspath(os.path.join(args['destdir'], r_data['path']))
57 57
58 if 'contains_this_file' in l_data.keys(): 58 if 'contains_this_file' in r_data.keys():
59 force_arg = 'force_bootstraplayer_checkout' 59 force_arg = 'force_bootstraplayer_checkout'
60 if not args[force_arg]: 60 if not args[force_arg]:
61 print('Note: not checking out source {layer}, use {layerflag} to override.'.format(layer=l_name, layerflag='--force-bootstraplayer-checkout')) 61 print('Note: not checking out source {repo}, use {repoflag} to override.'.format(repo=r_name, repoflag='--force-bootstraplayer-checkout'))
62 continue 62 continue
63 l_remote = l_data['git-remote'] 63 r_remote = r_data['git-remote']
64 rev = l_remote['rev'] 64 rev = r_remote['rev']
65 desc = l_remote['describe'] 65 desc = r_remote['describe']
66 if not desc: 66 if not desc:
67 desc = rev[:10] 67 desc = rev[:10]
68 branch = l_remote['branch'] 68 branch = r_remote['branch']
69 remotes = l_remote['remotes'] 69 remotes = r_remote['remotes']
70 70
71 print('\nSetting up source {}, revision {}, branch {}'.format(l_name, desc, branch)) 71 print('\nSetting up source {}, revision {}, branch {}'.format(r_name, desc, branch))
72 if not _is_layer_git_repo(layerdir): 72 if not _is_repo_git_repo(repodir):
73 cmd = 'git init -q {}'.format(layerdir) 73 cmd = 'git init -q {}'.format(repodir)
74 print("Running '{}'".format(cmd)) 74 print("Running '{}'".format(cmd))
75 subprocess.check_output(cmd, shell=True) 75 subprocess.check_output(cmd, shell=True)
76 76
77 for remote in remotes: 77 for remote in remotes:
78 if not _is_layer_at_remote_uri(layerdir, remote, remotes[remote]['uri']): 78 if not _is_repo_at_remote_uri(repodir, remote, remotes[remote]['uri']):
79 cmd = "git remote remove {} > /dev/null 2>&1; git remote add {} {}".format(remote, remote, remotes[remote]['uri']) 79 cmd = "git remote remove {} > /dev/null 2>&1; git remote add {} {}".format(remote, remote, remotes[remote]['uri'])
80 print("Running '{}' in {}".format(cmd, layerdir)) 80 print("Running '{}' in {}".format(cmd, repodir))
81 subprocess.check_output(cmd, shell=True, cwd=layerdir) 81 subprocess.check_output(cmd, shell=True, cwd=repodir)
82 82
83 cmd = "git fetch -q {} || true".format(remote) 83 cmd = "git fetch -q {} || true".format(remote)
84 print("Running '{}' in {}".format(cmd, layerdir)) 84 print("Running '{}' in {}".format(cmd, repodir))
85 subprocess.check_output(cmd, shell=True, cwd=layerdir) 85 subprocess.check_output(cmd, shell=True, cwd=repodir)
86 86
87 if not _is_layer_at_rev(layerdir, rev): 87 if not _is_repo_at_rev(repodir, rev):
88 cmd = "git fetch -q --all || true" 88 cmd = "git fetch -q --all || true"
89 print("Running '{}' in {}".format(cmd, layerdir)) 89 print("Running '{}' in {}".format(cmd, repodir))
90 subprocess.check_output(cmd, shell=True, cwd=layerdir) 90 subprocess.check_output(cmd, shell=True, cwd=repodir)
91 91
92 cmd = 'git checkout -q {}'.format(rev) 92 cmd = 'git checkout -q {}'.format(rev)
93 print("Running '{}' in {}".format(cmd, layerdir)) 93 print("Running '{}' in {}".format(cmd, repodir))
94 subprocess.check_output(cmd, shell=True, cwd=layerdir) 94 subprocess.check_output(cmd, shell=True, cwd=repodir)
95 95
96 if _contains_submodules(layerdir): 96 if _contains_submodules(repodir):
97 print("Repo {} contains submodules, use 'git submodule update' to ensure they are up to date".format(layerdir)) 97 print("Repo {} contains submodules, use 'git submodule update' to ensure they are up to date".format(repodir))
98 98
99parser = argparse.ArgumentParser(description="A self contained python script that fetches all the needed layers and sets them to correct revisions using data in a json format from a separate file. The json data can be created from an active build directory with 'bitbake-layers create-layers-setup destdir' and there's a sample file and a schema in meta/files/") 99parser = argparse.ArgumentParser(description="A self contained python script that fetches all the needed layers and sets them to correct revisions using data in a json format from a separate file. The json data can be created from an active build directory with 'bitbake-layers create-layers-setup destdir' and there's a sample file and a schema in meta/files/")
100 100