49 lines
1.5 KiB
Python
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'])
|