Hi Collin,
> Thanks. I've attached a *very* rough patch that I think works
> similarly to gnulib-tool.sh if you would like to take a look at it.
Looks pretty good. I'm applying it, together with a follow-up below:
- Your ability to work with misnamed variables is amazing. But
nonetheless let's make an effort to find better names :)
- Python has enough string processing primitives that we don't need
to write conditional expressions like
line if not line.endswith('\n') else line[:-1]
(I also tried to move the removal of the newlines into the readlines()
invocation, but that does not work:
https://github.com/python/cpython/issues/52876 )
> I'm not sure the best way to test it. When using
> GNULIB_TOOL_IMPL=sh+py on Inetutils I get only this now:
>
> diff --git a/home/collin/.local/src/inetutils/m4/gnulib-comp.m4
> b/home/collin/.local/src/glpyVG0WNy/m4/gnulib-comp.m4
> index 5c38ac18..4fe2c5ce 100644
> --- a/home/collin/.local/src/inetutils/m4/gnulib-comp.m4
> +++ b/home/collin/.local/src/glpyVG0WNy/m4/gnulib-comp.m4
> @@ -42,6 +42,7 @@ AC_DEFUN([gl_EARLY],
> AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
> AC_REQUIRE([gl_PROG_AR_RANLIB])
>
> + AC_REQUIRE([AM_PROG_CC_C_O])
> # Code from module absolute-header:
> # Code from module alignasof:
> # Code from module alignof:
>
> Before this change I had an extra '.gitignore~'.
Looks pretty good!
Bruno
2024-03-25 Bruno Haible <[email protected]>
gnulib-tool.py: Tweak last change.
* pygnulib/GLImport.py (GLImport._update_ignorelist_): Rename some local
variables. Use rstrip built-in function.
diff --git a/pygnulib/GLImport.py b/pygnulib/GLImport.py
index 0fe465f1de..882f1993af 100644
--- a/pygnulib/GLImport.py
+++ b/pygnulib/GLImport.py
@@ -805,25 +805,27 @@ AC_DEFUN([%s_FILE_LIST], [\n''' % macro_prefix
with codecs.open(joinpath(destdir, srcpath), 'rb', 'UTF-8') as
file:
original_lines = file.readlines()
# Clean the newlines but not trailing whitespace.
- original_lines = [ line if not line.endswith('\n') else
line[:-1]
+ original_lines = [ line.rstrip('\n')
for line in original_lines ]
- dirs_ignore = { constants.substart(anchor, '', filename)
- for filename in original_lines
- if filename.strip() }
- dirs_added = set(files_added).difference(dirs_ignore)
- dirs_removed = set(files_removed)
- if dirs_added or dirs_removed:
+ already_listed_filenames = { constants.substart(anchor, '',
filename)
+ for filename in original_lines
+ if filename.strip() }
+ filenames_to_add =
set(files_added).difference(already_listed_filenames)
+ filenames_to_remove = set(files_removed)
+ if filenames_to_add or filenames_to_remove:
if not self.config['dryrun']:
print('Updating %s (backup in %s)' % (srcpath,
backupname))
copyfile2(joinpath(destdir, srcpath),
joinpath(destdir, backupname))
new_lines = original_lines + [ f'{anchor}{filename}'
- for filename in
sorted(dirs_added) ]
+ for filename in
sorted(filenames_to_add) ]
if anchor != '':
- dirs_removed = dirs_removed.union({
f'{anchor}{filename}'
- for filename
in dirs_removed })
+ lines_to_remove = filenames_to_remove.union({
f'{anchor}{filename}'
+ for
filename in filenames_to_remove })
+ else:
+ lines_to_remove = filenames_to_remove
new_lines = [ line
for line in new_lines
- if line not in dirs_removed ]
+ if line not in lines_to_remove ]
with codecs.open(joinpath(destdir, srcpath), 'wb',
'UTF-8') as file:
file.write(lines_to_multiline(new_lines))
else: # if self.config['dryrun']