diff options
Diffstat (limited to 'bitbake/lib/toaster/bldcontrol/management')
-rw-r--r-- | bitbake/lib/toaster/bldcontrol/management/commands/loadconf.py | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/bitbake/lib/toaster/bldcontrol/management/commands/loadconf.py b/bitbake/lib/toaster/bldcontrol/management/commands/loadconf.py index 6e1f97a9f9..2257a7143b 100644 --- a/bitbake/lib/toaster/bldcontrol/management/commands/loadconf.py +++ b/bitbake/lib/toaster/bldcontrol/management/commands/loadconf.py | |||
@@ -5,20 +5,29 @@ import os | |||
5 | 5 | ||
6 | from checksettings import DN | 6 | from checksettings import DN |
7 | 7 | ||
8 | def _reduce_canon_path(path): | ||
9 | components = [] | ||
10 | for c in path.split("/"): | ||
11 | if c == "..": | ||
12 | del components[-1] | ||
13 | elif c == ".": | ||
14 | pass | ||
15 | else: | ||
16 | components.append(c) | ||
17 | if len(components) < 2: | ||
18 | components.append('') | ||
19 | return "/".join(components) | ||
20 | |||
21 | def _get_id_for_sourcetype(s): | ||
22 | for i in LayerSource.SOURCE_TYPE: | ||
23 | if s == i[1]: | ||
24 | return i[0] | ||
25 | raise Exception("Could not find definition for sourcetype " + s) | ||
26 | |||
8 | class Command(BaseCommand): | 27 | class Command(BaseCommand): |
9 | help = "Loads a toasterconf.json file in the database" | 28 | help = "Loads a toasterconf.json file in the database" |
10 | args = "filepath" | 29 | args = "filepath" |
11 | 30 | ||
12 | def _reduce_canon_path(self, path): | ||
13 | components = [] | ||
14 | for c in path.split("/"): | ||
15 | if c == "..": | ||
16 | del components[-1] | ||
17 | elif c == ".": | ||
18 | pass | ||
19 | else: | ||
20 | components.append(c) | ||
21 | return "/".join(components) | ||
22 | 31 | ||
23 | 32 | ||
24 | def _import_layer_config(self, filepath): | 33 | def _import_layer_config(self, filepath): |
@@ -71,16 +80,13 @@ class Command(BaseCommand): | |||
71 | assert 'name' in lsi | 80 | assert 'name' in lsi |
72 | assert 'branches' in lsi | 81 | assert 'branches' in lsi |
73 | 82 | ||
74 | def _get_id_for_sourcetype(s): | ||
75 | for i in LayerSource.SOURCE_TYPE: | ||
76 | if s == i[1]: | ||
77 | return i[0] | ||
78 | raise Exception("Could not find definition for sourcetype " + s) | ||
79 | 83 | ||
80 | if _get_id_for_sourcetype(lsi['sourcetype']) == LayerSource.TYPE_LAYERINDEX or lsi['apiurl'].startswith("/"): | 84 | if _get_id_for_sourcetype(lsi['sourcetype']) == LayerSource.TYPE_LAYERINDEX or lsi['apiurl'].startswith("/"): |
81 | apiurl = lsi['apiurl'] | 85 | apiurl = lsi['apiurl'] |
82 | else: | 86 | else: |
83 | apiurl = self._reduce_canon_path(os.path.join(DN(filepath), lsi['apiurl'])) | 87 | apiurl = _reduce_canon_path(os.path.join(DN(os.path.abspath(filepath)), lsi['apiurl'])) |
88 | |||
89 | assert ((_get_id_for_sourcetype(lsi['sourcetype']) == LayerSource.TYPE_LAYERINDEX) or apiurl.startswith("/")), (lsi['sourcetype'],apiurl) | ||
84 | 90 | ||
85 | try: | 91 | try: |
86 | ls = LayerSource.objects.get(sourcetype = _get_id_for_sourcetype(lsi['sourcetype']), apiurl = apiurl) | 92 | ls = LayerSource.objects.get(sourcetype = _get_id_for_sourcetype(lsi['sourcetype']), apiurl = apiurl) |
@@ -102,7 +108,7 @@ class Command(BaseCommand): | |||
102 | if layerinfo['local_path'].startswith("/"): | 108 | if layerinfo['local_path'].startswith("/"): |
103 | lo.local_path = layerinfo['local_path'] | 109 | lo.local_path = layerinfo['local_path'] |
104 | else: | 110 | else: |
105 | lo.local_path = self._reduce_canon_path(os.path.join(DN(DN(DN(filepath))), layerinfo['local_path'])) | 111 | lo.local_path = _reduce_canon_path(os.path.join(ls.apiurl, layerinfo['local_path'])) |
106 | 112 | ||
107 | if not os.path.exists(lo.local_path): | 113 | if not os.path.exists(lo.local_path): |
108 | raise Exception("Local layer path %s must exists." % lo.local_path) | 114 | raise Exception("Local layer path %s must exists." % lo.local_path) |
@@ -110,6 +116,8 @@ class Command(BaseCommand): | |||
110 | lo.vcs_url = layerinfo['vcs_url'] | 116 | lo.vcs_url = layerinfo['vcs_url'] |
111 | if layerinfo['vcs_url'].startswith("remote:"): | 117 | if layerinfo['vcs_url'].startswith("remote:"): |
112 | lo.vcs_url = _read_git_url_from_local_repository(layerinfo['vcs_url']) | 118 | lo.vcs_url = _read_git_url_from_local_repository(layerinfo['vcs_url']) |
119 | else: | ||
120 | lo.vcs_url = layerinfo['vcs_url'] | ||
113 | 121 | ||
114 | if 'layer_index_url' in layerinfo: | 122 | if 'layer_index_url' in layerinfo: |
115 | lo.layer_index_url = layerinfo['layer_index_url'] | 123 | lo.layer_index_url = layerinfo['layer_index_url'] |