ASR_BASE
Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/external/subpack/lang/python/python-userpath/patches/0001-Use-Sh-as-base-class-for-Bash-and-Zsh.patch b/external/subpack/lang/python/python-userpath/patches/0001-Use-Sh-as-base-class-for-Bash-and-Zsh.patch
new file mode 100644
index 0000000..69dfde2
--- /dev/null
+++ b/external/subpack/lang/python/python-userpath/patches/0001-Use-Sh-as-base-class-for-Bash-and-Zsh.patch
@@ -0,0 +1,89 @@
+From dffcc1c5823bcce10b420467db41e42ec41f4702 Mon Sep 17 00:00:00 2001
+From: Jeffery To <jeffery.to@gmail.com>
+Date: Thu, 9 Nov 2023 17:48:50 +0800
+Subject: [PATCH 1/2] Use Sh as base class for Bash and Zsh
+
+---
+ userpath/shells.py | 41 ++++++++++++++++++++++++++---------------
+ 1 file changed, 26 insertions(+), 15 deletions(-)
+
+--- a/userpath/shells.py
++++ b/userpath/shells.py
+@@ -12,24 +12,36 @@ class Shell(object):
+
+
+ class Sh(Shell):
+- def config(self, location, front=True):
++ name = 'sh'
++
++ def _config_contents(self, location, front=True):
+ head, tail = (location, '$PATH') if front else ('$PATH', location)
+ new_path = '{}{}{}'.format(head, pathsep, tail)
++ return 'export PATH="{}"'.format(new_path)
++
++ def config(self, location, front=True):
++ contents = self._config_contents(location, front=front)
++ return {path.join(self.home, '.profile'): contents}
+
+- return {path.join(self.home, '.profile'): 'PATH="{}"'.format(new_path)}
++ @classmethod
++ def _interactive_show_path_command(cls):
++ return [cls.name, '-i', '-c', 'echo $PATH']
++
++ @classmethod
++ def _interactive_login_show_path_command(cls):
++ return [cls.name, '-i', '-l', '-c', 'echo $PATH']
+
+ @classmethod
+ def show_path_commands(cls):
+ # TODO: Find out what file influences non-login shells. The issue may simply be our Docker setup.
+- return [['sh', '-i', '-l', '-c', 'echo $PATH']]
++ return [cls._interactive_login_show_path_command()]
+
+
+-class Bash(Shell):
+- def config(self, location, front=True):
+- head, tail = (location, '$PATH') if front else ('$PATH', location)
+- new_path = '{}{}{}'.format(head, pathsep, tail)
+- contents = 'export PATH="{}"'.format(new_path)
++class Bash(Sh):
++ name = 'bash'
+
++ def config(self, location, front=True):
++ contents = self._config_contents(location, front=front)
+ configs = {path.join(self.home, '.bashrc'): contents}
+
+ # https://github.com/ofek/userpath/issues/3#issuecomment-492491977
+@@ -50,7 +62,7 @@ class Bash(Shell):
+
+ @classmethod
+ def show_path_commands(cls):
+- return [['bash', '-i', '-c', 'echo $PATH'], ['bash', '-i', '-l', '-c', 'echo $PATH']]
++ return [cls._interactive_show_path_command(), cls._interactive_login_show_path_command()]
+
+
+ class Fish(Shell):
+@@ -88,18 +100,17 @@ class Xonsh(Shell):
+ return [['xonsh', '-i', '-c', command], ['xonsh', '-i', '--login', '-c', command]]
+
+
+-class Zsh(Shell):
+- def config(self, location, front=True):
+- head, tail = (location, '$PATH') if front else ('$PATH', location)
+- new_path = '{}{}{}'.format(head, pathsep, tail)
+- contents = 'export PATH="{}"'.format(new_path)
++class Zsh(Sh):
++ name = 'zsh'
+
++ def config(self, location, front=True):
++ contents = self._config_contents(location, front=front)
+ zdotdir = environ.get('ZDOTDIR', self.home)
+ return {path.join(zdotdir, '.zshrc'): contents, path.join(zdotdir, '.zprofile'): contents}
+
+ @classmethod
+ def show_path_commands(cls):
+- return [['zsh', '-i', '-c', 'echo $PATH'], ['zsh', '-i', '-l', '-c', 'echo $PATH']]
++ return [cls._interactive_show_path_command(), cls._interactive_login_show_path_command()]
+
+
+ SHELLS = {