Fixing error when trying to index schroot

The decompose functions uses .split('-') to separate the components of
the schroots, but if the username has a dash it will fail. This changes
adds the username as argument and remove it from the schroots folder's
name before splitting it.

Test plan:
    PASS - With username without '-' run build-pkgs -a -c --parallel 3
    PASS - With an '-' in the username, run build-pkgs -a -c
        --parallel 3

Closes-bug: 2084170

Change-Id: Ibc94a23d4d38dd3391d0e3891d67749d8094f68d
Signed-off-by: Dostoievski Batista <dostoievski.albinobatista@windriver.com>
This commit is contained in:
Dostoievski Batista 2024-10-10 16:32:14 -03:00
parent 0780bbfd1d
commit 3412f5818b

View File

@ -117,20 +117,27 @@ class Debbuilder(object):
chroot_name = '-'.join([chroot_name, str(index)])
return chroot_name
def decompose_chroot_name(self, chroot_name):
def decompose_chroot_name(self, chroot_name, user):
self.logger.debug("Starting decompose_chroot_name...")
self.logger.debug("chroot_name: %s", chroot_name)
components = {}
parts = chroot_name.split('-')
if len(parts) < 3:
# the username may contain '-' so we remove it before splitting
value_to_remove = f'-{user}'
parts = chroot_name.replace(value_to_remove, '').split('-')
self.logger.debug("parts: %s", parts)
if len(parts) < 2:
self.logger.debug("components: %s", components)
return components
components['dist'] = parts[0]
components['arch'] = parts[1]
components['user'] = parts[2]
if len(parts) >= 4:
components['index'] = parts[3]
components['user'] = user
if len(parts) >= 3:
components['index'] = parts[2]
self.logger.debug("components: %s", components)
return components
def index_from_chroot_name(self, chroot_name):
components = self.decompose_chroot_name(chroot_name)
def index_from_chroot_name(self, chroot_name, user):
components = self.decompose_chroot_name(chroot_name, user)
if 'index' in components:
return int(components['index'])
return None
@ -153,21 +160,28 @@ class Debbuilder(object):
schroot_name = '-'.join([schroot_name, str(index)])
return schroot_name
def decompose_schroot_config_name(self, schroot_config_name):
def decompose_schroot_config_name(self, schroot_config_name, user):
self.logger.debug("Starting decompose_schroot_config_name...")
self.logger.debug("schroot_config_name: %s", schroot_config_name)
components = {}
parts = schroot_config_name.split('-')
if len(parts) < 4:
# the username may contain '-' so we remove it before splitting
value_to_remove = f'-{user}'
parts = schroot_config_name.replace(value_to_remove, '').split('-')
self.logger.debug("parts: %s", parts)
if len(parts) < 3:
self.logger.debug("components: %s", components)
return components
components['dist'] = parts[0]
components['arch'] = parts[1]
components['user'] = parts[2]
components['unique_id'] = parts[3]
if len(parts) >= 5:
components['index'] = parts[4]
components['user'] = user
components['unique_id'] = parts[2]
if len(parts) >= 4:
components['index'] = parts[3]
self.logger.debug("components: %s", components)
return components
def index_from_schroot_config_name(self, schroot_config_name):
components = self.decompose_schroot_config_name(schroot_config_name)
def index_from_schroot_config_name(self, schroot_config_name, user):
components = self.decompose_schroot_config_name(schroot_config_name, user)
if 'index' in components:
return int(components['index'])
return None
@ -258,24 +272,24 @@ class Debbuilder(object):
return True
return False
def is_parent_config(self, schroot_config_name):
index = self.index_from_schroot_config_name(schroot_config_name)
def is_parent_config(self, schroot_config_name, user):
index = self.index_from_schroot_config_name(schroot_config_name, user)
if index is None:
return True
else:
return False
def get_parent_schroot_config(self):
def get_parent_schroot_config(self, user):
schroot_conf_list = os.listdir(self.schroot_config_dir)
for schroot_conf_name in schroot_conf_list:
if self.is_parent_config(schroot_conf_name):
if self.is_parent_config(schroot_conf_name, user):
return schroot_conf_name
return None
def set_unique_id(self):
parent_schroot_config_name = self.get_parent_schroot_config()
def set_unique_id(self, user):
parent_schroot_config_name = self.get_parent_schroot_config(user)
self.logger.debug("parent_schroot_config_name: %s" % parent_schroot_config_name)
parent_schroot_components = self.decompose_schroot_config_name(parent_schroot_config_name)
parent_schroot_components = self.decompose_schroot_config_name(parent_schroot_config_name, user)
if parent_schroot_components and 'unique_id' in parent_schroot_components:
self.attrs['unique_id'] = parent_schroot_components['unique_id']
self.logger.debug("unique_id: %s" % self.attrs['unique_id'])
@ -292,7 +306,7 @@ class Debbuilder(object):
parent_chroot_name = self.get_parent_chroot_name(user)
if self.has_chroot(parent_chroot_name):
self.logger.warn("chroot %s already exists" % parent_chroot_name)
self.set_unique_id()
self.set_unique_id(user)
response['status'] = 'exists'
response['msg'] = 'chroot exists'
return response
@ -402,7 +416,7 @@ class Debbuilder(object):
schroot_conf_list = os.listdir(self.schroot_config_dir)
for schroot_conf_name in schroot_conf_list:
index = self.index_from_schroot_config_name(schroot_conf_name)
index = self.index_from_schroot_config_name(schroot_conf_name, user)
if index is None or index <= max_index:
continue
if not self.delete_cloned_schroot_config(user, project, index):
@ -413,7 +427,7 @@ class Debbuilder(object):
for chroot_name in chroot_list:
if chroot_name == 'chroot.d':
continue
index = self.index_from_chroot_name(chroot_name)
index = self.index_from_chroot_name(chroot_name, user)
if index is None or index <= max_index:
continue
if not self.delete_cloned_chroot(user, project, index):
@ -430,7 +444,7 @@ class Debbuilder(object):
for chroot_name in chroot_list:
if chroot_name == 'chroot.d':
continue
index = self.index_from_chroot_name(chroot_name)
index = self.index_from_chroot_name(chroot_name, user)
if index is None:
continue
if not self.delete_cloned_chroot(user, project, index):
@ -448,7 +462,7 @@ class Debbuilder(object):
continue
if not utils.is_tmpfs(os.path.join(user_chroots_dir, chroot_name)):
continue
index = self.index_from_chroot_name(chroot_name)
index = self.index_from_chroot_name(chroot_name, user)
if index is None:
continue
if not self.delete_cloned_chroot(user, project, index):
@ -516,7 +530,7 @@ class Debbuilder(object):
response['msg'] = 'The parent schroot config file for %s does not exist' % parent_chroot_name
return response
self.set_unique_id()
self.set_unique_id(user)
if not self.delete_clones_by_max_index(user, project, required_instances):
response['status'] = 'fail'