BuildScript/scripts/commands/patch_csproj_command.py

49 lines
1.5 KiB
Python

import commands.build_command as bcmd
import utils.csproj.patcher as csproj
import utils.PathConverter.path_converter as path
class PatchCsproj(bcmd.BuildCommand):
def __init__(self, config):
bcmd.BuildCommand.__init__(self, config, 'csproj-')
self._patch_settings = {}
def ParseConfig(self):
csproj_keys = self.FetchAllKeysFromConfig()
self.FillPatchSettings(csproj_keys)
def FillPatchSettings(self, key_tokens):
for key_token in key_tokens:
key_info = self.ParseKeyToken(key_token)
project_name = key_info[self._group_name]
key = key_info[self._key_name]
value = self.ParseValueFromToken(self._config[key_token])
project_settings = self.FetchSettingForProject(project_name)
project_settings[key] = value
def FetchSettingForProject(self, project_name):
project_settings = self._patch_settings.get(project_name, None)
if project_settings is None:
project_settings = {}
self._patch_settings[project_name] = project_settings
return project_settings
def Execute(self):
converter = path.PathConverter(self._config['sln_path'])
for project_name in self._patch_settings.keys():
project_settings = self._patch_settings[project_name]
self.PatchProject(project_settings, converter)
def PatchProject(self, project_settings, path_converter):
csproj_rel_path = project_settings['rel_path']
csproj_abs_path = path_converter.Convert(csproj_rel_path)
patcher = csproj.Patcher(csproj_abs_path)
patcher.AddOrReplace(project_settings, self._config['sln_config'])