summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Eggleton <paul.eggleton@linux.intel.com>2016-05-20 22:21:18 +1200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-05-21 22:24:57 +0100
commit02986886fc40c0fcd33359a279ba9520fd5cac2a (patch)
treed4a6fa26db845620bf438096d4c1685ebd584e06
parent0111181bbb942ab63389fcf29028e93598a23f08 (diff)
downloadpoky-02986886fc40c0fcd33359a279ba9520fd5cac2a.tar.gz
devtool: sdk-update: drop support for local updates
Having two code paths here makes maintenance difficult, and it doesn't seem likely that you would use the local case in real usage anyway, so drop the local support entirely. This should allow us to resolve [YOCTO #9301]. (From OE-Core rev: 7a4c9c96fee4fb514c2b69b52e811c4f896a16f1) Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/lib/oeqa/sdkext/sdk_update.py3
-rw-r--r--scripts/lib/devtool/sdk.py188
2 files changed, 76 insertions, 115 deletions
diff --git a/meta/lib/oeqa/sdkext/sdk_update.py b/meta/lib/oeqa/sdkext/sdk_update.py
index 7a2a6fe7c8..2ade839c05 100644
--- a/meta/lib/oeqa/sdkext/sdk_update.py
+++ b/meta/lib/oeqa/sdkext/sdk_update.py
@@ -30,9 +30,6 @@ class SdkUpdateTest(oeSDKExtTest):
30 def test_sdk_update_http(self): 30 def test_sdk_update_http(self):
31 output = self._run("devtool sdk-update \"%s\"" % self.http_url) 31 output = self._run("devtool sdk-update \"%s\"" % self.http_url)
32 32
33 def test_sdk_update_local(self):
34 output = self._run("devtool sdk-update \"%s\"" % self.publish_dir)
35
36 @classmethod 33 @classmethod
37 def tearDownClass(self): 34 def tearDownClass(self):
38 self.http_service.stop() 35 self.http_service.stop()
diff --git a/scripts/lib/devtool/sdk.py b/scripts/lib/devtool/sdk.py
index 46fd12bdb2..922277b79f 100644
--- a/scripts/lib/devtool/sdk.py
+++ b/scripts/lib/devtool/sdk.py
@@ -107,7 +107,7 @@ def check_manifest(fn, basepath):
107 return changedfiles 107 return changedfiles
108 108
109def sdk_update(args, config, basepath, workspace): 109def sdk_update(args, config, basepath, workspace):
110 # Fetch locked-sigs.inc file from remote/local destination 110 """Entry point for devtool sdk-update command"""
111 updateserver = args.updateserver 111 updateserver = args.updateserver
112 if not updateserver: 112 if not updateserver:
113 updateserver = config.get('SDK', 'updateserver', '') 113 updateserver = config.get('SDK', 'updateserver', '')
@@ -122,10 +122,9 @@ def sdk_update(args, config, basepath, workspace):
122 else: 122 else:
123 logger.debug("Found conf/locked-sigs.inc in %s" % basepath) 123 logger.debug("Found conf/locked-sigs.inc in %s" % basepath)
124 124
125 if ':' in updateserver: 125 if not '://' in updateserver:
126 is_remote = True 126 logger.error("Update server must be a URL")
127 else: 127 return -1
128 is_remote = False
129 128
130 layers_dir = os.path.join(basepath, 'layers') 129 layers_dir = os.path.join(basepath, 'layers')
131 conf_dir = os.path.join(basepath, 'conf') 130 conf_dir = os.path.join(basepath, 'conf')
@@ -139,120 +138,85 @@ def sdk_update(args, config, basepath, workspace):
139 finally: 138 finally:
140 tinfoil.shutdown() 139 tinfoil.shutdown()
141 140
142 if not is_remote: 141 tmpsdk_dir = tempfile.mkdtemp()
143 # devtool sdk-update /local/path/to/latest/sdk 142 try:
144 new_locked_sig_file_path = os.path.join(updateserver, 'conf/locked-sigs.inc') 143 os.makedirs(os.path.join(tmpsdk_dir, 'conf'))
145 if not os.path.exists(new_locked_sig_file_path): 144 new_locked_sig_file_path = os.path.join(tmpsdk_dir, 'conf', 'locked-sigs.inc')
146 logger.error("%s doesn't exist or is not an extensible SDK" % updateserver) 145 # Fetch manifest from server
147 return -1 146 tmpmanifest = os.path.join(tmpsdk_dir, 'conf', 'sdk-conf-manifest')
148 else: 147 ret = subprocess.call("wget -q -O %s %s/conf/sdk-conf-manifest" % (tmpmanifest, updateserver), shell=True)
149 logger.debug("Found conf/locked-sigs.inc in %s" % updateserver) 148 changedfiles = check_manifest(tmpmanifest, basepath)
150 update_dict = generate_update_dict(new_locked_sig_file_path, old_locked_sig_file_path) 149 if not changedfiles:
151 logger.debug("update_dict = %s" % update_dict) 150 logger.info("Already up-to-date")
152 newsdk_path = updateserver
153 sstate_dir = os.path.join(newsdk_path, 'sstate-cache')
154 if not os.path.exists(sstate_dir):
155 logger.error("sstate-cache directory not found under %s" % newsdk_path)
156 return 1
157 sstate_objects = get_sstate_objects(update_dict, sstate_dir)
158 logger.debug("sstate_objects = %s" % sstate_objects)
159 if len(sstate_objects) == 0:
160 logger.info("No need to update.")
161 return 0 151 return 0
162 logger.info("Installing sstate objects into %s", basepath) 152 # Update metadata
163 install_sstate_objects(sstate_objects, updateserver.rstrip('/'), basepath) 153 logger.debug("Updating metadata via git ...")
164 logger.info("Updating configuration files") 154 #Check for the status before doing a fetch and reset
165 new_conf_dir = os.path.join(updateserver, 'conf') 155 if os.path.exists(os.path.join(basepath, 'layers/.git')):
166 shutil.rmtree(conf_dir) 156 out = subprocess.check_output("git status --porcelain", shell=True, cwd=layers_dir)
167 shutil.copytree(new_conf_dir, conf_dir) 157 if not out:
168 logger.info("Updating layers") 158 ret = subprocess.call("git fetch --all; git reset --hard", shell=True, cwd=layers_dir)
169 new_layers_dir = os.path.join(updateserver, 'layers')
170 shutil.rmtree(layers_dir)
171 ret = subprocess.call("cp -a %s %s" % (new_layers_dir, layers_dir), shell=True)
172 if ret != 0:
173 logger.error("Copying %s to %s failed" % (new_layers_dir, layers_dir))
174 return ret
175 else:
176 # devtool sdk-update http://myhost/sdk
177 tmpsdk_dir = tempfile.mkdtemp()
178 try:
179 os.makedirs(os.path.join(tmpsdk_dir, 'conf'))
180 new_locked_sig_file_path = os.path.join(tmpsdk_dir, 'conf', 'locked-sigs.inc')
181 # Fetch manifest from server
182 tmpmanifest = os.path.join(tmpsdk_dir, 'conf', 'sdk-conf-manifest')
183 ret = subprocess.call("wget -q -O %s %s/conf/sdk-conf-manifest" % (tmpmanifest, updateserver), shell=True)
184 changedfiles = check_manifest(tmpmanifest, basepath)
185 if not changedfiles:
186 logger.info("Already up-to-date")
187 return 0
188 # Update metadata
189 logger.debug("Updating metadata via git ...")
190 #Check for the status before doing a fetch and reset
191 if os.path.exists(os.path.join(basepath, 'layers/.git')):
192 out = subprocess.check_output("git status --porcelain", shell=True, cwd=layers_dir)
193 if not out:
194 ret = subprocess.call("git fetch --all; git reset --hard", shell=True, cwd=layers_dir)
195 else:
196 logger.error("Failed to update metadata as there have been changes made to it. Aborting.");
197 logger.error("Changed files:\n%s" % out);
198 return -1
199 else: 159 else:
200 ret = -1 160 logger.error("Failed to update metadata as there have been changes made to it. Aborting.");
161 logger.error("Changed files:\n%s" % out);
162 return -1
163 else:
164 ret = -1
165 if ret != 0:
166 ret = subprocess.call("git clone %s/layers/.git" % updateserver, shell=True, cwd=tmpsdk_dir)
167 if ret != 0:
168 logger.error("Updating metadata via git failed")
169 return ret
170 logger.debug("Updating conf files ...")
171 for changedfile in changedfiles:
172 ret = subprocess.call("wget -q -O %s %s/%s" % (changedfile, updateserver, changedfile), shell=True, cwd=tmpsdk_dir)
201 if ret != 0: 173 if ret != 0:
202 ret = subprocess.call("git clone %s/layers/.git" % updateserver, shell=True, cwd=tmpsdk_dir) 174 logger.error("Updating %s failed" % changedfile)
203 if ret != 0: 175 return ret
204 logger.error("Updating metadata via git failed")
205 return ret
206 logger.debug("Updating conf files ...")
207 for changedfile in changedfiles:
208 ret = subprocess.call("wget -q -O %s %s/%s" % (changedfile, updateserver, changedfile), shell=True, cwd=tmpsdk_dir)
209 if ret != 0:
210 logger.error("Updating %s failed" % changedfile)
211 return ret
212 176
213 # Check if UNINATIVE_CHECKSUM changed 177 # Check if UNINATIVE_CHECKSUM changed
214 uninative = False 178 uninative = False
215 if 'conf/local.conf' in changedfiles: 179 if 'conf/local.conf' in changedfiles:
216 def read_uninative_checksums(fn): 180 def read_uninative_checksums(fn):
217 chksumitems = [] 181 chksumitems = []
218 with open(fn, 'r') as f: 182 with open(fn, 'r') as f:
219 for line in f: 183 for line in f:
220 if line.startswith('UNINATIVE_CHECKSUM'): 184 if line.startswith('UNINATIVE_CHECKSUM'):
221 splitline = re.split(r'[\[\]"\']', line) 185 splitline = re.split(r'[\[\]"\']', line)
222 if len(splitline) > 3: 186 if len(splitline) > 3:
223 chksumitems.append((splitline[1], splitline[3])) 187 chksumitems.append((splitline[1], splitline[3]))
224 return chksumitems 188 return chksumitems
225 189
226 oldsums = read_uninative_checksums(os.path.join(basepath, 'conf/local.conf')) 190 oldsums = read_uninative_checksums(os.path.join(basepath, 'conf/local.conf'))
227 newsums = read_uninative_checksums(os.path.join(tmpsdk_dir, 'conf/local.conf')) 191 newsums = read_uninative_checksums(os.path.join(tmpsdk_dir, 'conf/local.conf'))
228 if oldsums != newsums: 192 if oldsums != newsums:
229 uninative = True 193 uninative = True
230 for buildarch, chksum in newsums: 194 for buildarch, chksum in newsums:
231 uninative_file = os.path.join('downloads', 'uninative', chksum, '%s-nativesdk-libc.tar.bz2' % buildarch) 195 uninative_file = os.path.join('downloads', 'uninative', chksum, '%s-nativesdk-libc.tar.bz2' % buildarch)
232 mkdir(os.path.join(tmpsdk_dir, os.path.dirname(uninative_file))) 196 mkdir(os.path.join(tmpsdk_dir, os.path.dirname(uninative_file)))
233 ret = subprocess.call("wget -q -O %s %s/%s" % (uninative_file, updateserver, uninative_file), shell=True, cwd=tmpsdk_dir) 197 ret = subprocess.call("wget -q -O %s %s/%s" % (uninative_file, updateserver, uninative_file), shell=True, cwd=tmpsdk_dir)
234 198
235 # Ok, all is well at this point - move everything over 199 # Ok, all is well at this point - move everything over
236 tmplayers_dir = os.path.join(tmpsdk_dir, 'layers') 200 tmplayers_dir = os.path.join(tmpsdk_dir, 'layers')
237 if os.path.exists(tmplayers_dir): 201 if os.path.exists(tmplayers_dir):
238 shutil.rmtree(layers_dir) 202 shutil.rmtree(layers_dir)
239 shutil.move(tmplayers_dir, layers_dir) 203 shutil.move(tmplayers_dir, layers_dir)
240 for changedfile in changedfiles: 204 for changedfile in changedfiles:
241 destfile = os.path.join(basepath, changedfile) 205 destfile = os.path.join(basepath, changedfile)
242 os.remove(destfile) 206 os.remove(destfile)
243 shutil.move(os.path.join(tmpsdk_dir, changedfile), destfile) 207 shutil.move(os.path.join(tmpsdk_dir, changedfile), destfile)
244 os.remove(os.path.join(conf_dir, 'sdk-conf-manifest')) 208 os.remove(os.path.join(conf_dir, 'sdk-conf-manifest'))
245 shutil.move(tmpmanifest, conf_dir) 209 shutil.move(tmpmanifest, conf_dir)
246 if uninative: 210 if uninative:
247 shutil.rmtree(os.path.join(basepath, 'downloads', 'uninative')) 211 shutil.rmtree(os.path.join(basepath, 'downloads', 'uninative'))
248 shutil.move(os.path.join(tmpsdk_dir, 'downloads', 'uninative'), os.path.join(basepath, 'downloads')) 212 shutil.move(os.path.join(tmpsdk_dir, 'downloads', 'uninative'), os.path.join(basepath, 'downloads'))
249 213
250 if not sstate_mirrors: 214 if not sstate_mirrors:
251 with open(os.path.join(conf_dir, 'site.conf'), 'a') as f: 215 with open(os.path.join(conf_dir, 'site.conf'), 'a') as f:
252 f.write('SCONF_VERSION = "%s"\n' % site_conf_version) 216 f.write('SCONF_VERSION = "%s"\n' % site_conf_version)
253 f.write('SSTATE_MIRRORS_append = " file://.* %s/sstate-cache/PATH \\n "\n' % updateserver) 217 f.write('SSTATE_MIRRORS_append = " file://.* %s/sstate-cache/PATH \\n "\n' % updateserver)
254 finally: 218 finally:
255 shutil.rmtree(tmpsdk_dir) 219 shutil.rmtree(tmpsdk_dir)
256 220
257 if not args.skip_prepare: 221 if not args.skip_prepare:
258 # Find all potentially updateable tasks 222 # Find all potentially updateable tasks