Fixed incorrect detection of installed SDKs
[src/xds/xds-server.git] / scripts / sdks / agl / db-dump
index 5c040ea..2fcd4c4 100755 (executable)
@@ -1,6 +1,6 @@
-#!/usr/bin/python
+#!/usr/bin/python3
 #
-#/**************************************************************************
+# /**************************************************************************
 # * Copyright 2017-2018 IoT.bzh
 # *
 # * author: Romain Forlot <romain.forlot@iot.bzh>
 # **************************************************************************/
 
 import os
+import sys
 import json
 import logging
 import inspect
 import fnmatch
 import argparse
 import subprocess
+import re
 
 PARSER = argparse.ArgumentParser(
     description='Lists available and installed SDKs')
@@ -46,12 +48,17 @@ SCRIPT_PATH = os.path.dirname(os.path.abspath(
 ENV = subprocess.check_output(
     [os.path.join(SCRIPT_PATH, './_env-init.sh'), '-print']).splitlines()
 
+SDK_ROOT_DIR = None
 for elt in ENV:
-    k, v = elt.split('=', 1)
-    if k == 'SDK_ROOT_DIR':
-        SDK_ROOT_DIR = v
-    elif k == 'SDK_ENV_SETUP_FILENAME':
-        SDK_ENV_SETUP_FILENAME = v
+    #only match what defines a variable
+    z = re.match(r"^(\w+)=([^']*)$", elt.decode())
+    if z:
+        k = z.group(1)
+        v = z.group(2)
+        if k == 'SDK_ROOT_DIR':
+            SDK_ROOT_DIR = v.rstrip('/')
+        elif k == 'SDK_ENV_SETUP_FILENAME':
+            SDK_ENV_SETUP_FILENAME = v
 
 if SDK_ROOT_DIR is None:
     logging.error('No SDK_ROOT_DIR environment variable found.')
@@ -70,6 +77,7 @@ SDK_DB_JSON = json.load(open(SDK_DB_FILEPATH, 'r'))
 
 for one_sdk in SDK_DB_JSON:
     one_sdk['status'] = 'Not Installed'
+    one_sdk['uuid'] = ''
 
 INSTALLED_SDK = []
 for root, dirs, files in os.walk(SDK_ROOT_DIR):
@@ -96,14 +104,17 @@ for root, dirs, files in os.walk(SDK_ROOT_DIR):
 
 for one_sdk in INSTALLED_SDK:
     logging.debug("Processing %s", one_sdk['ENV_FILE'])
-    PROFILE = one_sdk['ENV_FILE'].split('/')[3]
-    VERSION = one_sdk['ENV_FILE'].split('/')[4]
-    ARCH = one_sdk['ENV_FILE'].split('/')[5]
+    envFile = one_sdk['ENV_FILE'].split(SDK_ROOT_DIR+'/')[1]
+    PROFILE = envFile.split('/')[0]
+    VERSION = envFile.split('/')[1]
+    ARCH = envFile.split('/')[2]
     DIR = os.path.dirname(one_sdk['ENV_FILE'])
     if PROFILE == '' or VERSION == '' or ARCH == '' or DIR == '':
         logging.debug('Path not compliant, skipping')
         continue
 
+    UUID = os.path.basename(os.path.normpath(DIR))
+
     SDK_DATE = ''
     for line in open(one_sdk['VERSION_FILE']).readlines():
         if line.startswith('Timestamp'):
@@ -119,11 +130,24 @@ for one_sdk in INSTALLED_SDK:
         if sdk['profile'] == PROFILE and sdk['version'] == VERSION and sdk['arch'] == ARCH:
             if sdk['status'] == 'Installed':
                 continue
+            # Additional verification based on url used to generate UUID (see also same logic in add script)
+            if sdk['url'] != '':
+                try:
+                    ps = subprocess.Popen(('echo', sdk['url']), stdout=subprocess.PIPE)
+                    uuid_md5 = subprocess.check_output(('md5sum'), stdin=ps.stdout)
+                    ps.wait()
+                    if str(uuid_md5).split(' ')[0][2:] != UUID:
+                        continue
+                except:
+                    e = sys.exc_info()[0]
+                    logging.error("Error while checking UUID: " % e)
+
             found = True
             sdk['status'] = 'Installed'
             sdk['date'] = SDK_DATE
             sdk['setupFile'] = one_sdk['ENV_FILE']
             sdk['path'] = DIR
+            sdk['uuid'] = UUID
             break
 
     if not found:
@@ -131,6 +155,7 @@ for one_sdk in INSTALLED_SDK:
                       PROFILE + '-' + ARCH + '-' + VERSION)
         NEW_SDK = {
             'name': PROFILE + '-' + ARCH + '-' + VERSION,
+            'uuid': UUID,
             'description': 'AGL SDK ' + ARCH + ' (version ' + VERSION + ')',
             'profile': PROFILE,
             'version': VERSION,