diff --git a/debian/changelog b/debian/changelog index 37f8e4ce9abc7d6169c2c810397336005ea60fd7..70375967564d14efc39e6263a58f5b949df5f808 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,14 @@ +clitheme (1.1-r2-1) unstable; urgency=medium + + * Version 1.1 release 2 + For more information please see: + https://gitee.com/swiftycode/clitheme/releases/tag/v1.1-r2 + + -- swiftycode <3291929745@qq.com> Sat, 02 Mar 2024 23:49:00 +0800 + clitheme (1.1-r1-1) unstable; urgency=medium - * Version 1.1-r1 in Debian package format + * Version 1.1 release 1 For more information please see: https://gitee.com/swiftycode/clitheme/releases/tag/v1.1-r1 @@ -8,7 +16,7 @@ clitheme (1.1-r1-1) unstable; urgency=medium clitheme (1.0-r2-1) unstable; urgency=medium - * Version 1.0-r2 in Debian package format + * Version 1.0 release 2 For more information please see: https://gitee.com/swiftycode/clitheme/releases/tag/v1.0-r2 @@ -16,6 +24,6 @@ clitheme (1.0-r2-1) unstable; urgency=medium clitheme (1.0-r1-1) unstable; urgency=medium - * Version 1.0_r1 in Debian package format + * Version 1.0 release 1 -- swiftycode <3291929745@qq.com> Wed, 13 Dec 2023 17:16:33 +0800 diff --git a/src/clitheme/_generator.py b/src/clitheme/_generator.py index e927ffacf6e23ff3c0987bdb7e84f538c31844c1..98becea7da025ee191c544ee5771f22f116f9c75 100644 --- a/src/clitheme/_generator.py +++ b/src/clitheme/_generator.py @@ -13,13 +13,14 @@ except ImportError: # for test program import frontend path="" # to be generated by function +silence_warn=False fd=frontend.FetchDescriptor(domain_name="swiftycode", app_name="clitheme", subsections="generator") def handle_error(message): raise SyntaxError(fd.feof("error-str", "Syntax error: {msg}", msg=message)) def handle_warning(message): - print(fd.feof("warning-str", "Warning: {msg}", msg=message)) + if not silence_warn: print(fd.feof("warning-str", "Warning: {msg}", msg=message)) def recursive_mkdir(path, entry_name, line_number_debug): # recursively generate directories (excluding file itself) current_path=path current_entry="" # for error output diff --git a/src/clitheme/_version.py b/src/clitheme/_version.py index 2c71cedefb192b6c5c77a3eda7baa8cedff8d35a..eaf05aadc671b39e4a4b8ce4add8a784b2464a1e 100644 --- a/src/clitheme/_version.py +++ b/src/clitheme/_version.py @@ -1,10 +1,10 @@ # Version definition file; define the package version here # The __version__ variable must be a literal string; DO NOT use variables -__version__="1.1-r1" +__version__="1.1-r2" major=1 minor=1 release=1 # 0 stands for "dev" # For PKGBUILD # version_main CANNOT contain hyphens (-); use underscores (_) instead -version_main="1.1_r1" +version_main="1.1_r2" version_buildnumber=1 \ No newline at end of file diff --git a/src/clitheme/frontend.py b/src/clitheme/frontend.py index d71d1764fa316301619365cfaaf41d120cfe8756..9e38072f056733f00d571e5db6089927ca383c6d 100644 --- a/src/clitheme/frontend.py +++ b/src/clitheme/frontend.py @@ -7,6 +7,7 @@ import random import string import re import hashlib +import shutil from typing import Optional try: from . import _globalvar @@ -23,6 +24,7 @@ global_disablelang=False alt_path=None alt_path_dirname=None +alt_path_hash=None # Support for setting a local definition file # - Generate the data in a temporary directory named after content hash # - First try alt_path then data_path @@ -42,15 +44,43 @@ def set_local_themedef(file_content: str, overlay: bool=False) -> bool: except ImportError: import _generator # Determine directory name h=hashlib.shake_256(bytes(file_content, "utf-8")) + d=h.hexdigest(6) + global alt_path_hash + # if overlay, update hash with new contents of file + if alt_path_hash!=None and overlay==True: + newhash="" + for x in range(len(alt_path_hash)): + chart=string.ascii_uppercase+string.ascii_lowercase+string.digits + numorig=0 + numcur=0 + if d[x]>='A' and d[x]<='Z': #uppercase letters + numorig=ord(d[x])-ord('A') + elif d[x]>='a' and d[x]<='z': #lowercase letters + numorig=(ord(d[x])-ord('a'))+len(string.ascii_uppercase) + elif d[x]>='0' and d[x]<='9': #digit + numorig=ord(d[x])-ord('0')+len(string.ascii_uppercase+string.ascii_lowercase) + if alt_path_hash[x]>='A' and alt_path_hash[x]<='Z': #uppercase letters + numcur=ord(alt_path_hash[x])-ord('A') + elif alt_path_hash[x]>='a' and alt_path_hash[x]<='z': #lowercase letters + numcur=(ord(alt_path_hash[x])-ord('a'))+len(string.ascii_uppercase) + elif alt_path_hash[x]>='0' and alt_path_hash[x]<='9': #digit + numcur=ord(alt_path_hash[x])-ord('0')+len(string.ascii_uppercase+string.ascii_lowercase) + newhash+=chart[(numorig+numcur)%len(chart)] + alt_path_hash=newhash + else: alt_path_hash=d # else, use generated hash global alt_path_dirname - dir_name=f"clitheme-data-{h.hexdigest(6)}" # length of 12 (6*2) + dir_name=f"clitheme-data-{alt_path_hash}" # length of 12 (6*2) + overlay_cont=False if alt_path_dirname!=None and overlay==True: # overlay - dir_name=alt_path_dirname + if not os.path.exists(_globalvar.clitheme_temp_root+"/"+dir_name): + overlay_cont=True + shutil.copytree(_globalvar.clitheme_temp_root+"/"+alt_path_dirname, _globalvar.clitheme_temp_root+"/"+dir_name) path_name=_globalvar.clitheme_temp_root+"/"+dir_name if global_debugmode: print("[Debug] "+path_name) # Generate data hierarchy as needed - if not os.path.exists(path_name): + if overlay_cont or not os.path.exists(path_name): _generator.path=path_name + _generator.silence_warn=True try: _generator.generate_data_hierarchy(file_content, custom_path_gen=False) except SyntaxError: @@ -67,6 +97,7 @@ def unset_local_themedef(): """ global alt_path; alt_path=None global alt_path_dirname; alt_path_dirname=None + global alt_path_hash; alt_path_hash=None class FetchDescriptor(): """ @@ -174,9 +205,9 @@ class FetchDescriptor(): if self.debug_mode: print(f"[Debug] lang: {lang}\n[Debug] entry_path: {entry_path}") # just being lazy here I don't want to check the variables before using ಥ_ಥ (because it doesn't matter) - path=data_path+"/"+self.domain_name+"/"+self.app_name+"/"+self.subsections + path=data_path+"/"+self.domain_name+"/"+self.app_name+"/"+re.sub(" ",r"/", self.subsections) path2=None - if alt_path!=None: path2=alt_path+"/"+self.domain_name+"/"+self.app_name+"/"+self.subsections + if alt_path!=None: path2=alt_path+"/"+self.domain_name+"/"+self.app_name+"/"+re.sub(" ",r"/", self.subsections) for section in entry_path.split(): path+="/"+section if path2!=None: path2+="/"+section