[FIX] tools.translate: addons path resolution failed with duplicates

When the addons_path config contained the
default path, the system was working with
an empty addons_path in the middle of the
other paths. This empty one matched for all
files, making all files appear to belong to
the root path component, e.g. `home` if the
root path is in /home.
Refactored a bit to avoid duplicates and
redundant path calculations.
This commit is contained in:
Olivier Dony 2014-08-14 02:07:59 +02:00
parent 680214c47e
commit 69eef5ac8d
1 changed files with 15 additions and 13 deletions

View File

@ -827,18 +827,20 @@ def trans_generate(lang, modules, cr):
if model_obj._sql_constraints: if model_obj._sql_constraints:
push_local_constraints(module, model_obj, 'sql_constraints') push_local_constraints(module, model_obj, 'sql_constraints')
def get_module_from_path(path, mod_paths=None): def get_module_paths():
if not mod_paths: # default addons path (base)
# First, construct a list of possible paths def_path = os.path.abspath(os.path.join(config.config['root_path'], 'addons'))
def_path = os.path.abspath(os.path.join(config.config['root_path'], 'addons')) # default addons path (base) mod_paths = { def_path }
ad_paths= map(lambda m: os.path.abspath(m.strip()),config.config['addons_path'].split(',')) ad_paths = map(lambda m: os.path.abspath(m.strip()),config.config['addons_path'].split(','))
mod_paths=[def_path] for adp in ad_paths:
for adp in ad_paths: mod_paths.add(adp)
mod_paths.append(adp) if not os.path.isabs(adp):
if not os.path.isabs(adp): mod_paths.add(adp)
mod_paths.append(adp) elif adp != def_path and adp.startswith(def_path):
elif adp.startswith(def_path): mod_paths.add(adp[len(def_path)+1:])
mod_paths.append(adp[len(def_path)+1:]) return mod_paths
def get_module_from_path(path, mod_paths):
for mp in mod_paths: for mp in mod_paths:
if path.startswith(mp) and (os.path.dirname(path) != mp): if path.startswith(mp) and (os.path.dirname(path) != mp):
path = path[len(mp)+1:] path = path[len(mp)+1:]
@ -863,7 +865,7 @@ def trans_generate(lang, modules, cr):
_logger.debug("Scanning modules at paths: %s", path_list) _logger.debug("Scanning modules at paths: %s", path_list)
mod_paths = [] mod_paths = get_module_paths()
def verified_module_filepaths(fname, path, root): def verified_module_filepaths(fname, path, root):
fabsolutepath = join(root, fname) fabsolutepath = join(root, fname)