From 344f86830c7695a3c16c46c839f3906771fc7ce7 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Fri, 19 Apr 2024 18:21:26 +0200 Subject: [PATCH] gnulib-tool.py: Simplify running some commands in a given directory. * pygnulib/GLImport.py (GLImport.execute): Use sp.call with a cwd argument, instead of calling chdir twice. * pygnulib/GLModuleSystem.py (GLModuleSystem.list): Likewise. * pygnulib/main.py (mode=='find'): Likewise. --- ChangeLog | 8 ++++++++ gnulib-tool.py.TODO | 3 --- pygnulib/GLImport.py | 4 +--- pygnulib/GLModuleSystem.py | 8 ++------ pygnulib/main.py | 8 ++------ 5 files changed, 13 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index f9b957efef..e84856cc05 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2024-04-19 Bruno Haible + + gnulib-tool.py: Simplify running some commands in a given directory. + * pygnulib/GLImport.py (GLImport.execute): Use sp.call with a cwd + argument, instead of calling chdir twice. + * pygnulib/GLModuleSystem.py (GLModuleSystem.list): Likewise. + * pygnulib/main.py (mode=='find'): Likewise. + 2024-04-19 Bruno Haible gnulib-tool.py: Update authors list. diff --git a/gnulib-tool.py.TODO b/gnulib-tool.py.TODO index 160f7b7465..581aec6487 100644 --- a/gnulib-tool.py.TODO +++ b/gnulib-tool.py.TODO @@ -5,9 +5,6 @@ Bugs: - error message missing when gl_DOC_BASE missing https://lists.gnu.org/archive/html/bug-gnulib/2024-04/msg00160.html -Optimize: - - os.chdir around subprocess creation -> cwd=... argument instead. - Various other refactorings, as deemed useful: - Use an enum for 'all', 'old', 'new', 'added', 'removed' in GLImport.py. diff --git a/pygnulib/GLImport.py b/pygnulib/GLImport.py index 0a19d50e00..b38808a353 100644 --- a/pygnulib/GLImport.py +++ b/pygnulib/GLImport.py @@ -1200,11 +1200,9 @@ AC_DEFUN([%s_FILE_LIST], [\n''' % macro_prefix TP_URL = 'https://translationproject.org/latest/' if not self.config['dryrun']: print('Fetching gnulib PO files from %s' % TP_URL) - os.chdir(joinpath(destdir, pobase)) args = ['wget', '--no-verbose', '--mirror', '--level=1', '-nd', '-A.po', '-P', '.', '%sgnulib/' % TP_URL] - sp.call(args) - os.chdir(DIRS['cwd']) + sp.call(args, cwd=joinpath(destdir, pobase)) else: # if self.config['dryrun'] print('Fetch gnulib PO files from %s' % TP_URL) diff --git a/pygnulib/GLModuleSystem.py b/pygnulib/GLModuleSystem.py index efc39ec925..112a6bc0e6 100644 --- a/pygnulib/GLModuleSystem.py +++ b/pygnulib/GLModuleSystem.py @@ -133,16 +133,12 @@ class GLModuleSystem: find_args = ['find', 'modules', '-type', 'f', '-print'] # Read modules from gnulib root directory. - os.chdir(constants.DIRS['root']) - result += sp.run(find_args, text=True, capture_output=True, check=False).stdout - os.chdir(DIRS['cwd']) + result += sp.run(find_args, cwd=constants.DIRS['root'], text=True, capture_output=True, check=False).stdout # Read modules from local directories. if len(localpath) > 0: for localdir in localpath: - os.chdir(localdir) - result += sp.run(find_args, text=True, capture_output=True, check=False).stdout - os.chdir(DIRS['cwd']) + result += sp.run(find_args, cwd=localdir, text=True, capture_output=True, check=False).stdout listing = [ line for line in result.split('\n') diff --git a/pygnulib/main.py b/pygnulib/main.py index 8316c0abf2..a333994525 100644 --- a/pygnulib/main.py +++ b/pygnulib/main.py @@ -872,18 +872,14 @@ def main() -> None: filename_line_regex = '^' + filename_regex + '$' # Read module candidates from gnulib root directory. command = "find modules -type f -print | xargs -n 100 grep -l %s /dev/null | sed -e 's,^modules/,,'" % shlex.quote(filename_line_regex) - os.chdir(constants.DIRS['root']) - with sp.Popen(command, shell=True, stdout=sp.PIPE) as proc: + with sp.Popen(command, shell=True, cwd=constants.DIRS['root'], stdout=sp.PIPE) as proc: result = proc.stdout.read().decode('UTF-8') - os.chdir(DIRS['cwd']) # Read module candidates from local directories. if localpath != None and len(localpath) > 0: command = "find modules -type f -print | xargs -n 100 grep -l %s /dev/null | sed -e 's,^modules/,,' -e 's,\\.diff$,,'" % shlex.quote(filename_line_regex) for localdir in localpath: - os.chdir(localdir) - with sp.Popen(command, shell=True, stdout=sp.PIPE) as proc: + with sp.Popen(command, shell=True, cwd=localdir, stdout=sp.PIPE) as proc: result += proc.stdout.read().decode('UTF-8') - os.chdir(DIRS['cwd']) listing = [ line for line in result.split('\n') if line.strip() ] -- 2.39.5