Initial commit: Odoo 18.0-20251222 extra-addons
This commit is contained in:
44
module_auto_update/addon_hash.py
Executable file
44
module_auto_update/addon_hash.py
Executable file
@@ -0,0 +1,44 @@
|
||||
# Copyright 2018 ACSONE SA/NV.
|
||||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl).
|
||||
|
||||
import hashlib
|
||||
import os
|
||||
from fnmatch import fnmatch
|
||||
|
||||
|
||||
def _fnmatch(filename, patterns):
|
||||
for pattern in patterns:
|
||||
if fnmatch(filename, pattern):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def _walk(top, exclude_patterns, keep_langs):
|
||||
keep_langs = {language.split("_")[0] for language in keep_langs}
|
||||
for dirpath, dirnames, filenames in os.walk(top):
|
||||
dirnames.sort()
|
||||
reldir = os.path.relpath(dirpath, top)
|
||||
if reldir == ".":
|
||||
reldir = ""
|
||||
for filename in sorted(filenames):
|
||||
filepath = os.path.join(reldir, filename)
|
||||
if _fnmatch(filepath, exclude_patterns):
|
||||
continue
|
||||
if keep_langs and reldir in {"i18n", "i18n_extra"}:
|
||||
basename, ext = os.path.splitext(filename)
|
||||
if ext == ".po":
|
||||
if basename.split("_")[0] not in keep_langs:
|
||||
continue
|
||||
yield filepath
|
||||
|
||||
|
||||
def addon_hash(top, exclude_patterns, keep_langs):
|
||||
"""Compute a sha1 digest of file contents."""
|
||||
m = hashlib.sha1()
|
||||
for filepath in _walk(top, exclude_patterns, keep_langs):
|
||||
# hash filename so empty files influence the hash
|
||||
m.update(filepath.encode("utf-8"))
|
||||
# hash file content
|
||||
with open(os.path.join(top, filepath), "rb") as f:
|
||||
m.update(f.read())
|
||||
return m.hexdigest()
|
||||
Reference in New Issue
Block a user