Avoid duplicate SDK install dir - SPEC-1252
[src/xds/xds-server.git] / scripts / sdks / agl / db-dump
index 77f729e..5c040ea 100755 (executable)
@@ -26,20 +26,25 @@ import fnmatch
 import argparse
 import subprocess
 
-PARSER = argparse.ArgumentParser(description='Lists available and installed SDKs')
+PARSER = argparse.ArgumentParser(
+    description='Lists available and installed SDKs')
 PARSER.add_argument('-debug', dest='debug', action='store_true',
                     help='Output debug log messages')
 
 ARGS = PARSER.parse_args()
 
 if ARGS.debug:
-    logging.basicConfig(level=logging.DEBUG, format='%(asctime)s:%(levelname)s: %(message)s')
+    logging.basicConfig(level=logging.DEBUG,
+                        format='%(asctime)s:%(levelname)s: %(message)s')
 else:
-    logging.basicConfig(level=logging.INFO, format='%(asctime)s:%(levelname)s: %(message)s')
+    logging.basicConfig(level=logging.INFO,
+                        format='%(asctime)s:%(levelname)s: %(message)s')
 
-SCRIPT_PATH = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
+SCRIPT_PATH = os.path.dirname(os.path.abspath(
+    inspect.getfile(inspect.currentframe())))
 
-ENV = subprocess.check_output([os.path.join(SCRIPT_PATH, './_env-init.sh'), '-print']).splitlines()
+ENV = subprocess.check_output(
+    [os.path.join(SCRIPT_PATH, './_env-init.sh'), '-print']).splitlines()
 
 for elt in ENV:
     k, v = elt.split('=', 1)
@@ -69,8 +74,13 @@ for one_sdk in SDK_DB_JSON:
 INSTALLED_SDK = []
 for root, dirs, files in os.walk(SDK_ROOT_DIR):
     depth = root[len(SDK_ROOT_DIR) + len(os.path.sep):].count(os.path.sep)
+    # Limit the walking depth of processed directories
     if depth >= 4:
         dirs[:] = []
+    # Only process SDK dir matching profile/version/arch or
+    # profile/version/arch/tag
+    elif depth != 2 and depth != 3:
+        continue
     EF, VF = '', ''
     for one_file in files:
         if fnmatch.fnmatch(one_file, SDK_ENV_SETUP_FILENAME):
@@ -78,7 +88,11 @@ for root, dirs, files in os.walk(SDK_ROOT_DIR):
         if fnmatch.fnmatch(one_file, 'version-*'):
             VF = os.path.join(root, one_file)
     if EF != '' and VF != '':
+        logging.debug('Adding installed SDK ' + root)
         INSTALLED_SDK.append({'ENV_FILE': EF, 'VERSION_FILE': VF})
+    elif (EF == '' and VF != '') or (EF != '' and VF == ''):
+        logging.debug(
+            'WARNING SDK ignored : root=%s, EnvFile=%s, VersFile=%s', root, EF, VF)
 
 for one_sdk in INSTALLED_SDK:
     logging.debug("Processing %s", one_sdk['ENV_FILE'])
@@ -96,12 +110,15 @@ for one_sdk in INSTALLED_SDK:
             D = line.split(':')[1]
             if D:
                 D = D.strip()
-                SDK_DATE = '{}-{}-{} {}:{}'.format(D[0:4], D[4:6], D[6:8], D[8:10], D[10:12])
+                SDK_DATE = '{}-{}-{} {}:{}'.format(
+                    D[0:4], D[4:6], D[6:8], D[8:10], D[10:12])
                 logging.debug('Found date: %s', SDK_DATE)
 
     found = False
     for sdk in SDK_DB_JSON:
         if sdk['profile'] == PROFILE and sdk['version'] == VERSION and sdk['arch'] == ARCH:
+            if sdk['status'] == 'Installed':
+                continue
             found = True
             sdk['status'] = 'Installed'
             sdk['date'] = SDK_DATE
@@ -110,7 +127,8 @@ for one_sdk in INSTALLED_SDK:
             break
 
     if not found:
-        logging.debug('Not found in database, adding it...')
+        logging.debug('Not found in database, add: ' +
+                      PROFILE + '-' + ARCH + '-' + VERSION)
         NEW_SDK = {
             'name': PROFILE + '-' + ARCH + '-' + VERSION,
             'description': 'AGL SDK ' + ARCH + ' (version ' + VERSION + ')',
@@ -124,7 +142,7 @@ for one_sdk in INSTALLED_SDK:
             'size': "",
             'md5sum': "",
             'setupFile': one_sdk['ENV_FILE']
-            }
+        }
         SDK_DB_JSON.append(NEW_SDK)
 
-print json.dumps(SDK_DB_JSON)
+print(json.dumps(SDK_DB_JSON))