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