diff options
| -rw-r--r-- | debian/changelog | 6 | ||||
| -rw-r--r-- | debian/patches/configshell-path-expansion.patch | 132 | ||||
| -rw-r--r-- | debian/patches/series | 1 |
3 files changed, 139 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog index 5a0436f..a7b32b1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +python-configshell-fb (1:2.0.0-2) unstable; urgency=high + + * Fix path not being expanded (Closes: 1104106) + + -- Ritesh Raj Sarraf <[email protected]> Mon, 12 May 2025 12:31:43 +0530 + python-configshell-fb (1:2.0.0-1) unstable; urgency=medium * Team upload diff --git a/debian/patches/configshell-path-expansion.patch b/debian/patches/configshell-path-expansion.patch new file mode 100644 index 0000000..85c7faf --- /dev/null +++ b/debian/patches/configshell-path-expansion.patch @@ -0,0 +1,132 @@ +From 8ec554a5951a7785c4c4368a5db6d15577a91281 Mon Sep 17 00:00:00 2001 +From: Martin Hoyer <[email protected]> +Date: Wed, 9 Apr 2025 21:36:44 +0200 +Subject: [PATCH] Fix path not being expanded + +--- + configshell/shell.py | 72 ++++++++++++++++++++++++++++++-------------- + 1 file changed, 49 insertions(+), 23 deletions(-) + +--- a/configshell/shell.py ++++ b/configshell/shell.py +@@ -128,8 +128,7 @@ + parameter = kparam | pparam + parameters = OneOrMore(parameter) + bookmark = Regex('@([A-Za-z0-9:_.]|-)+') +- pathstd = Regex(r'([A-Za-z0-9:_.\[\]]|-)*' + '/' + r'([A-Za-z0-9:_.\[\]/]|-)*') \ +- | '..' | '.' ++ pathstd = Regex(r'([A-Za-z0-9:_.\[\]]|-)*' + '/' + r'([A-Za-z0-9:_.\[\]/]|-)*') | '..' | '.' + path = locatedExpr(bookmark | pathstd | '*')('path') + parser = Optional(path) + Optional(command) + Optional(parameters) + self._parser = parser +@@ -142,14 +141,30 @@ + self.log = log.Log() + + if preferences_dir is not None: +- preferences_dir_path = Path(preferences_dir) ++ try: ++ preferences_dir_path = Path(preferences_dir).expanduser() ++ except RuntimeError as e: ++ self.log.error( ++ f"Could not determine home directory for preferences '{preferences_dir}': {e}", ++ ) ++ preferences_dir = None ++ + if not preferences_dir_path.exists(): +- preferences_dir_path.mkdir(parents=True) +- self._prefs_file = preferences_dir_path / 'prefs.bin' +- self.prefs = prefs.Prefs(str(self._prefs_file)) +- self._cmd_history = preferences_dir_path / '/history.txt' +- self._save_history = True +- cmd_history_path = self._cmd_history ++ try: ++ preferences_dir_path.mkdir(parents=True, exist_ok=True) ++ except OSError as e: ++ self.log.error( ++ f'Failed to create preferences directory {preferences_dir_path}: {e}', ++ ) ++ preferences_dir = None ++ ++ if preferences_dir: ++ self._prefs_file = preferences_dir_path / 'prefs.bin' ++ self.prefs = prefs.Prefs(str(self._prefs_file)) ++ self._cmd_history = preferences_dir_path / 'history.txt' ++ self._save_history = True ++ cmd_history_path = self._cmd_history ++ + if not cmd_history_path.is_file(): + try: + with cmd_history_path.open('w'): +@@ -159,16 +174,19 @@ + f"command history will not be saved.") + self._save_history = False + +- if self._cmd_history.is_file() and tty: +- try: +- readline.read_history_file(self._cmd_history) +- except OSError: +- self.log.warning(f"Cannot read command history file {self._cmd_history}.") +- +- if self.prefs['logfile'] is None: +- self.prefs['logfile'] = preferences_dir + '/' + 'log.txt' ++ if self._cmd_history.is_file() and tty and self._save_history: ++ try: ++ readline.read_history_file(str(self._cmd_history)) ++ except (OSError, FileNotFoundError) as e: ++ self.log.warning( ++ f'Cannot read command history file {self._cmd_history}: {e}', ++ ) ++ ++ if self.prefs['logfile'] is None: ++ log_file_path = preferences_dir_path / 'log.txt' ++ self.prefs['logfile'] = str(log_file_path) + +- self.prefs.autosave = True ++ self.prefs.autosave = True + + else: + self.prefs = prefs.Prefs() +@@ -176,8 +194,8 @@ + + try: + self.prefs.load() +- except OSError: +- self.log.warning(f"Could not load preferences file {self._prefs_file}.") ++ except (OSError, FileNotFoundError): ++ self.log.warning(f'Could not load preferences file {self._prefs_file}.') + + for pref, value in self.default_prefs.items(): + if pref not in self.prefs: +@@ -283,9 +301,11 @@ + + # No identified path yet on the command line, this might be it + if not path: +- path_completions = [child.name + '/' +- for child in self._current_node.children +- if child.name.startswith(text)] ++ path_completions = [ ++ child.name + '/' ++ for child in self._current_node.children ++ if child.name.startswith(text) ++ ] + if not text: + path_completions.append('/') + if len(self._current_node.children) > 1: +@@ -839,10 +859,16 @@ + @param exit_on_error: If True, stops the run if an error occurs + @type exit_on_error: bool + ''' ++ script_file_path = None + try: +- with Path(script_path).open() as script_fd: ++ script_file_path = Path(script_path).expanduser() ++ with script_file_path.open() as script_fd: + self.run_stdin(script_fd, exit_on_error) ++ except FileNotFoundError as e: ++ self.log.error(f'Script file not found: {script_file_path or script_path}') ++ raise FileNotFoundError(e) from e + except OSError as e: ++ self.log.error(f'Error accessing script file {script_file_path or script_path}: {e}') + raise OSError(e) + + def run_stdin(self, file_descriptor=sys.stdin, exit_on_error=True): diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 0000000..99a16a6 --- /dev/null +++ b/debian/patches/series @@ -0,0 +1 @@ +configshell-path-expansion.patch |
