[GRASS-git] [OSGeo/grass] 4d1b2d: CI(deps): Update pre-commit hook editorconfig-chec...

Edouard Choinière noreply at github.com
Sun Oct 11 11:54:57 PDT 2026


  Branch: refs/heads/renovate/main-zizmorcore-zizmor-pre-commit-1.x
  Home:   https://github.com/OSGeo/grass
  Commit: 4d1b2d5bdc63c90a037862c68d988a03101b3165
      https://github.com/OSGeo/grass/commit/4d1b2d5bdc63c90a037862c68d988a03101b3165
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-10-02 (Fri, 02 Oct 2026)

  Changed paths:
    M .pre-commit-config.yaml

  Log Message:
  -----------
  CI(deps): Update pre-commit hook editorconfig-checker/editorconfig-checker to v4 (main) (#7989)


  Commit: 6a479c702d8205993d662a5a9f4f841f64c24951
      https://github.com/OSGeo/grass/commit/6a479c702d8205993d662a5a9f4f841f64c24951
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-10-02 (Fri, 02 Oct 2026)

  Changed paths:
    M docker/debian/Dockerfile

  Log Message:
  -----------
  CI(deps): Update debian Docker tag to v13.7 (main) (#8000)


  Commit: 4d2da1c18552037c2fbba1ad4847fd9ebf2bbe8e
      https://github.com/OSGeo/grass/commit/4d2da1c18552037c2fbba1ad4847fd9ebf2bbe8e
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-10-02 (Fri, 02 Oct 2026)

  Changed paths:
    M raster/r.sim/r.sim.water/tests/r_sim_water_nprocs_test.py
    M raster/r.sim/simlib/hydro.c

  Log Message:
  -----------
  r.sim: Lock the infiltration capacity of a cell (#8001)

With nprocs > 1, walkers on different threads checked and reduced the
remaining infiltration capacity of a cell without synchronization. This
is a data race and undefined behavior in C: two walkers could both be
absorbed by the capacity left for one, or a reduction could be lost.

Run the unchanged infiltration code in a critical section, entered only
when an atomic read shows capacity left in the cell. Within the lock,
the code checks the capacity again, as another thread may have used it
up. The capacity is written atomically, since it is also read outside
of the lock. After the first step, few walkers are in a cell with
capacity left, so the lock is rarely taken.

The arithmetic and the conditions are unchanged. With one thread, the
depth maps computed from the elev_lid792_1m elevation, with and without
infiltration, are byte-identical to those before this change, and the
run time is the same within noise with 1 and 4 threads. With more
threads, the order in which walkers reach a cell still depends on
thread scheduling, as before. A new test checks that infiltration
removes exactly the capacity of the cells at 1 and 4 threads.

Written with the help of Claude Code.


  Commit: 8b60e9ff0d0ec8dd9cbd4222f9159852a7b21081
      https://github.com/OSGeo/grass/commit/8b60e9ff0d0ec8dd9cbd4222f9159852a7b21081
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-10-02 (Fri, 02 Oct 2026)

  Changed paths:
    M raster/r.sim/r.sim.water/r.sim.water.html
    M raster/r.sim/r.sim.water/r.sim.water.md
    M raster/r.sim/r.sim.water/tests/r_sim_water_summary_test.py
    M raster/r.sim/r.sim.water/tests/r_sim_water_test.py
    A raster/r.sim/r.sim.water/tests/r_sim_water_time_series_test.py
    M raster/r.sim/simlib/hydro.c
    M raster/r.sim/simlib/input.c
    M raster/r.sim/simlib/output.c
    M raster/r.sim/simlib/simlib.h

  Log Message:
  -----------
  r.sim: Write time series maps at their output step times (#8003)

With -t, r.sim.water wrote the series maps every (int)(output_step /
time step) iterations and named them by the simulated time rounded to
whole minutes. The truncated interval made the write times drift away
from the output steps, so two writes could round to the same minute and
the first map was overwritten, names could skip a minute or land on odd
minutes with an even output_step, and the last step was often missing.
When the time step was longer than output_step, the interval was zero
and no map was written at all while the tool still succeeded.

Write output step j at the iteration whose simulated time is closest to
j times output_step, and name and timestamp the maps by that time. The
time step comes from the cell size and the mean velocity, so iterations
usually do not fall on the output times. When one iteration is the
closest one to several steps, write only the step closest to it and
warn that the time step is longer than output_step. Do not write steps
past the duration. Always end the series with maps named by the
duration which hold the state at the end of the run, also when the
duration is not a multiple of output_step or when the run stopped
early. Walker vector maps follow the same schedule.

For users, each output step now appears once, named and timestamped by
a multiple of output_step, and the maps named by the duration are always
present. A series map holds the state at most half a time step before
or after the time in its name instead of up to several minutes before
it. The depth and discharge values are unchanged and so are the outputs
without -t. In the run summary, simulated_time of an output is the time
the maps were written and timestamp the time they are named by. New
tests check the names, timestamps and write times of the series, a
duration which is not a multiple of output_step, time steps longer
than output_step including its multiples, a step past the duration, and
an early stop.

Written with the help of Claude Code.


  Commit: 4d8e578e4818d7c83b997864841c2a309c86abd8
      https://github.com/OSGeo/grass/commit/4d8e578e4818d7c83b997864841c2a309c86abd8
  Author: SAKET KUMAR MALL <72020337+saket0187 at users.noreply.github.com>
  Date:   2026-10-03 (Sat, 03 Oct 2026)

  Changed paths:
    M gui/wxpython/history/browser.py
    M python/grass/grassdb/history.py

  Log Message:
  -----------
  wxGUI: Store history region in g.region JSON format (#7973)

Store history region in g.region JSON format, use Tools API for region operations


  Commit: 034a7a07bffe44bd6e081561bc876d89de01a65b
      https://github.com/OSGeo/grass/commit/034a7a07bffe44bd6e081561bc876d89de01a65b
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-10-03 (Sat, 03 Oct 2026)

  Changed paths:
    M Dockerfile
    M docker/ubuntu/Dockerfile

  Log Message:
  -----------
  CI(deps): Update ubuntu:26.04 Docker digest to 88a381d (main) (#7999)

CI(deps): Update ubuntu:26.04 Docker digest to 88a381d

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>


  Commit: 0083972ede97356d6bdce7633dfc8fd50b3fbfcb
      https://github.com/OSGeo/grass/commit/0083972ede97356d6bdce7633dfc8fd50b3fbfcb
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-10-03 (Sat, 03 Oct 2026)

  Changed paths:
    M .github/workflows/python-code-quality.yml
    M gui/wxpython/core/utils.py
    M gui/wxpython/gui_core/forms.py
    M gui/wxpython/tplot/frame.py
    M python/grass/pygrass/raster/segment.py
    M python/grass/temporal/c_libraries_interface.py
    M python/grass/temporal/temporal_extent.py
    M scripts/i.pansharpen/i.pansharpen.py
    M scripts/r.in.wms/wms_drv.py
    M scripts/r.tileset/r.tileset.py

  Log Message:
  -----------
  CI(deps): Update dependency pylint to v4.1.2 (main) (#7996)

* CI(deps): Update dependency pylint to v4.1.1

* Python: Fix new pylint chained-comparison and comparison-with-itself messages

Pylint 4.1 reports R1716 (chained-comparison) and R0124
(comparison-with-itself). Rewrite the flagged conditions as chained
comparisons, with unchanged logic, and use math.isnan() for the NaN
checks in c_libraries_interface.

Needed for the pylint update in #7996. Drafted with AI assistance
(Claude Code); the changes are mechanical and were checked with
pylint 4.1.1 and ruff.

* Update pylint to 4.1.2

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Edouard Choinière <27212526+echoix at users.noreply.github.com>


  Commit: ff84d216240720f744a1bee9da25e4aedeacf985
      https://github.com/OSGeo/grass/commit/ff84d216240720f744a1bee9da25e4aedeacf985
  Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
  Date:   2026-10-03 (Sat, 03 Oct 2026)

  Changed paths:
    M locale/templates/grasslibs.pot
    M locale/templates/grassmods.pot
    M locale/templates/grasswxpy.pot

  Log Message:
  -----------
  locale: Update translation files (130) (#8006)

locale: Update translation files

Co-authored-by: echoix <27212526+echoix at users.noreply.github.com>


  Commit: e7f07a324cdb0409c3d36d821affecd85bde3119
      https://github.com/OSGeo/grass/commit/e7f07a324cdb0409c3d36d821affecd85bde3119
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-10-03 (Sat, 03 Oct 2026)

  Changed paths:
    M python/grass/app/Makefile

  Log Message:
  -----------
  build: Create output directory before generating resource_paths.py (#8009)

The resource_paths.py rule in python/grass/app/Makefile redirects sed
output into the destination directory without depending on it. With
parallel make, the redirect could run before the directory was created,
failing with "Directory nonexistent" and breaking the Docker builds
intermittently. Add the directory as an order-only prerequisite, as the
pattern rule for the other files already does.

Developed with AI assistance (Claude Code).


  Commit: 6e39994ed822ca88e36dc49bd9de15556c3d8efd
      https://github.com/OSGeo/grass/commit/6e39994ed822ca88e36dc49bd9de15556c3d8efd
  Author: Nicklas Larsson <n_larsson at yahoo.com>
  Date:   2026-10-04 (Sun, 04 Oct 2026)

  Changed paths:
    M lib/gis/aprintf.c
    M lib/gis/cmprzlib.c
    M lib/gis/cmprzstd.c
    M lib/gis/color_rules.c
    M lib/gis/compress.c
    M lib/gis/error.c
    M lib/gis/file_name.c
    M lib/gis/getl.c
    M lib/gis/ls.c
    M lib/gis/make_loc.c
    M lib/gis/parser.c
    M lib/gis/parser_dependencies.c
    M lib/gis/parser_help.c
    M lib/gis/progrm_nme.c
    M lib/gis/strings.c

  Log Message:
  -----------
  lib/gis: Fix "implicit conversion loses integer precision" warnings (#7947)

Adresses ” -Wshorten-64-to-32” Clang warnings.


  Commit: 2b70a993a90b76c5a2d0ee9b2490870a390db41a
      https://github.com/OSGeo/grass/commit/2b70a993a90b76c5a2d0ee9b2490870a390db41a
  Author: Nicklas Larsson <n_larsson at yahoo.com>
  Date:   2026-10-04 (Sun, 04 Oct 2026)

  Changed paths:
    M lib/raster/cats.c
    M lib/raster/get_row.c
    M lib/raster/get_row_colr.c
    M lib/raster/history.c
    M lib/raster/null_val.c
    M lib/raster/open.c
    M lib/raster/put_row.c
    M lib/raster/reclass.c

  Log Message:
  -----------
  lib/raster: Fix "Implicit conversion loses integer precision" warnings (#7950)

Adresses ” -Wshorten-64-to-32” Clang warnings.


  Commit: bb6a75ca91441fa3afd8f20e2c7cc068b69690ba
      https://github.com/OSGeo/grass/commit/bb6a75ca91441fa3afd8f20e2c7cc068b69690ba
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-10-03 (Sat, 03 Oct 2026)

  Changed paths:
    M include/grass/defs/gis.h
    M include/grass/gis.h
    M lib/gis/lrand48.c
    M lib/gis/tests/lib_gis_lrand48_test.py
    M lib/init/variables.html
    M lib/init/variables.md

  Log Message:
  -----------
  libgis: Add reproducible random numbers for parallel tools (#7979)

Tools which draw random numbers in parallel, or run ensembles, or keep
several model components reproducible on their own, cannot do so with
the one generator shared by the whole program: whichever thread asks
first gets the next value, and different seeds are related on this
generator (seeds 2^31 or 2^30 apart are shifted by a constant, and
consecutive seeds form a lattice). Add generators the program owns,
struct G_random_state, and layouts, struct G_random_layout, which place
one state per unit of work on the generator's cycle.

A layout is a seed plus the way the span is cut into streams of stride
draws, one stream per unit and batch. The span is the first quarter of
the cycle after the seed, 2^46 draws: the multiplier has order 2^46, so
positions 2^46, 2^47 or 3 * 2^46 apart give values differing by a
constant, and the other three quarters hold the same values plus 0.25,
0.5 and 0.75. Within the span no two positions are that far apart. The
basic layout, G_random_init_layout(), gives the units the whole span,
every unit the largest stream the span allows, in one batch, dividing
the span into an odd number of parts: with an even number, the unit
halfway along would start 2^45 draws after unit 0 and the unit a quarter
of the way along near 2^44, distances at which the values differ by two
or four constants in turn. It holds at most 2^20 units, because the
stride rounded down to odd loses up to two draws per unit, which
accumulate along the span; up to that count the units nearest to 2^45
and 2^44 start at least 0.48 and 0.24 of a stride away from them. An
exact layout takes the draws of a unit as given, so the streams are the
positions of a serial run and a tool keeps its earlier values; a bounded
layout takes a bound and rounds it up to odd, so that units a power of
two apart relate only a few low bits. A batch is one stream for every
unit, and batches are appended, never reserved, so an ensemble member
needs only its batch number. Batches start units * stride draws apart,
or one more when that number is even, so that the same draw of different
batches is as unrelated as the generator allows, as the odd strides do
for units; the relation remains between draws whose numbers differ, and
a layout gives streams which do not overlap, not independent ones. The
queries return the batches that fit and the stride; the two state calls
place a state on a unit's stream, or a unit's stream of a batch;
G_random_advance() moves a state by any number of draws in one jump;
G_random_state_from_seed() gives the shared generator's sequence, as the
single unit of a layout of the whole span.

Add G_random_generate_seed(), which reads GRASS_RANDOM_SEED, or else
SOURCE_DATE_EPOCH, as an integer: an empty value counts as not set, a
value which is not an integer or does not fit is a fatal error, a value
from -2^31 to 2^32 - 1 is used as it is, and a value outside that range
is reduced to its low 32 bits with a warning. Without either variable
the seed is a weak hash of the time and the process ID. G_srand48_auto()
seeds with that value and returns it; before, it returned an
environment value unreduced although it had used only its low 32 bits.
Add GRASS_RANDOM_SEED to the list of environment variables.

The shared generator is unchanged. Tests cover the identity of
G_random_state_from_seed() with G_srand48(), the three layouts, the
batches, the refusals, the absence of constant-shift twins within the
span, the distance of the units of a layout of the whole span from the
two- and four-constant levels for every unit count it accepts, the
low-bits rule, the advance, the seed from each environment source, and
independence from the shared generator and between threads.

Written with the help of Claude Code, while designing new random
numbers code for r.sim.water and r.mapcalc and documentation
for the library at the same time.


  Commit: 000a00fca6d8df05a22a24b07b14f33de4fe1786
      https://github.com/OSGeo/grass/commit/000a00fca6d8df05a22a24b07b14f33de4fe1786
  Author: OSGeo Weblate <97247866+osgeoweblate at users.noreply.github.com>
  Date:   2026-10-04 (Sun, 04 Oct 2026)

  Changed paths:
    M locale/po/grasslibs_ar.po
    M locale/po/grasslibs_bn.po
    M locale/po/grasslibs_cs.po
    M locale/po/grasslibs_de.po
    M locale/po/grasslibs_el.po
    M locale/po/grasslibs_es.po
    M locale/po/grasslibs_fi.po
    M locale/po/grasslibs_fr.po
    M locale/po/grasslibs_hi.po
    M locale/po/grasslibs_hu.po
    M locale/po/grasslibs_id_ID.po
    M locale/po/grasslibs_it.po
    M locale/po/grasslibs_ja.po
    M locale/po/grasslibs_ko.po
    M locale/po/grasslibs_lv.po
    M locale/po/grasslibs_ml.po
    M locale/po/grasslibs_pl.po
    M locale/po/grasslibs_pt.po
    M locale/po/grasslibs_pt_BR.po
    M locale/po/grasslibs_ro.po
    M locale/po/grasslibs_ru.po
    M locale/po/grasslibs_si.po
    M locale/po/grasslibs_sl.po
    M locale/po/grasslibs_sv.po
    M locale/po/grasslibs_ta.po
    M locale/po/grasslibs_th.po
    M locale/po/grasslibs_tr.po
    M locale/po/grasslibs_uk.po
    M locale/po/grasslibs_vi.po
    M locale/po/grasslibs_zh.po
    M locale/po/grasslibs_zh_Hant.po
    M locale/po/grassmods_ar.po
    M locale/po/grassmods_bn.po
    M locale/po/grassmods_cs.po
    M locale/po/grassmods_de.po
    M locale/po/grassmods_el.po
    M locale/po/grassmods_es.po
    M locale/po/grassmods_fi.po
    M locale/po/grassmods_fr.po
    M locale/po/grassmods_hi.po
    M locale/po/grassmods_hu.po
    M locale/po/grassmods_id_ID.po
    M locale/po/grassmods_it.po
    M locale/po/grassmods_ja.po
    M locale/po/grassmods_ko.po
    M locale/po/grassmods_lv.po
    M locale/po/grassmods_ml.po
    M locale/po/grassmods_pl.po
    M locale/po/grassmods_pt.po
    M locale/po/grassmods_pt_BR.po
    M locale/po/grassmods_ro.po
    M locale/po/grassmods_ru.po
    M locale/po/grassmods_si.po
    M locale/po/grassmods_sl.po
    M locale/po/grassmods_sv.po
    M locale/po/grassmods_ta.po
    M locale/po/grassmods_th.po
    M locale/po/grassmods_tr.po
    M locale/po/grassmods_uk.po
    M locale/po/grassmods_vi.po
    M locale/po/grassmods_zh.po
    M locale/po/grassmods_zh_Hant.po
    M locale/po/grasswxpy_ar.po
    M locale/po/grasswxpy_bn.po
    M locale/po/grasswxpy_cs.po
    M locale/po/grasswxpy_de.po
    M locale/po/grasswxpy_el.po
    M locale/po/grasswxpy_es.po
    M locale/po/grasswxpy_fi.po
    M locale/po/grasswxpy_fr.po
    M locale/po/grasswxpy_hi.po
    M locale/po/grasswxpy_hu.po
    M locale/po/grasswxpy_id_ID.po
    M locale/po/grasswxpy_it.po
    M locale/po/grasswxpy_ja.po
    M locale/po/grasswxpy_ko.po
    M locale/po/grasswxpy_lv.po
    M locale/po/grasswxpy_ml.po
    M locale/po/grasswxpy_pl.po
    M locale/po/grasswxpy_pt.po
    M locale/po/grasswxpy_pt_BR.po
    M locale/po/grasswxpy_ro.po
    M locale/po/grasswxpy_ru.po
    M locale/po/grasswxpy_si.po
    M locale/po/grasswxpy_sl.po
    M locale/po/grasswxpy_sv.po
    M locale/po/grasswxpy_ta.po
    M locale/po/grasswxpy_th.po
    M locale/po/grasswxpy_tr.po
    M locale/po/grasswxpy_uk.po
    M locale/po/grasswxpy_vi.po
    M locale/po/grasswxpy_zh.po
    M locale/po/grasswxpy_zh_Hant.po
    M locale/tbx/grassglossary_sv.tbx

  Log Message:
  -----------
  Translations update from OSGeo Weblate (#8018)

Translated using Weblate (Swedish)

Currently translated at 100.0% (10157 of 10157 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (68 of 68 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (3434 of 3434 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (10157 of 10157 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (1855 of 1855 strings)

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.



Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/sv/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasslibs/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasslibs/sv/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassmods/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassmods/sv/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasswxpy/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasswxpy/sv/
Translation: GRASS/grassglossary
Translation: GRASS/grasslibs
Translation: GRASS/grassmods
Translation: GRASS/grasswxpy

Co-authored-by: Weblate <noreply at weblate.org>
Co-authored-by: Daniel Nylander <daniel at danielnylander.se>


  Commit: a5a14ae0793cd006111395e1c46c0e462dae195e
      https://github.com/OSGeo/grass/commit/a5a14ae0793cd006111395e1c46c0e462dae195e
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-10-05 (Mon, 05 Oct 2026)

  Changed paths:
    M lib/vector/Vlib/build_sfa.c
    M locale/Makefile

  Log Message:
  -----------
  locale: Make pot file generation stable (#8010)

* libvector: Use the same plural string for vertices registered in build_sfa.c

The message "One vertex registered" is used in build_nat.c with the plural
"%" PRId64 " vertices registered" and in build_sfa.c with "%d vertices
registered". A .pot file keeps only one plural form per singular msgid, and
xgettext keeps the first one it reads. The input file list comes from find,
whose order is not stable, so the template flipped between the two forms
from one update to the next. Each flip changed the msgid and made the
existing translations fuzzy.

Use the 64-bit form in build_sfa.c as well, casting the int counters, so
all three call sites share one msgid_plural.

Prepared with AI assistance (Claude Code); the root cause was found from
the history of locale/templates/grasslibs.pot.

Co-Authored-By: Claude Sonnet 5.5 <noreply at anthropic.com>

* locale: Sort the input file lists for xgettext

The lists of files given to xgettext come from find, whose order depends
on the filesystem and can differ between runners. When the same msgid is
used with different plural forms, xgettext keeps the first one it reads, so
the generated .pot files could change without any change in the code.

Sort the lists with LC_ALL=C so that the order is the same everywhere.

Prepared with AI assistance (Claude Code).

Co-Authored-By: Claude Sonnet 5.5 <noreply at anthropic.com>

* Apply batched suggestions from code review

Co-authored-by: Nicklas Larsson <n_larsson at yahoo.com>

---------

Co-authored-by: Nicklas Larsson <n_larsson at yahoo.com>


  Commit: 422190508c80cdebb0a127cdbaf7480fb46c283e
      https://github.com/OSGeo/grass/commit/422190508c80cdebb0a127cdbaf7480fb46c283e
  Author: Nicklas Larsson <n_larsson at yahoo.com>
  Date:   2026-10-06 (Tue, 06 Oct 2026)

  Changed paths:
    M lib/display/raster.c

  Log Message:
  -----------
  lib/display: Fix "Implicit conversion loses integer precision" warnings (#8020)

Adresses ” -Wshorten-64-to-32” Clang warnings.


  Commit: f8ed8f16e94bbe99b714f668c932e5c16866bd1d
      https://github.com/OSGeo/grass/commit/f8ed8f16e94bbe99b714f668c932e5c16866bd1d
  Author: Nicklas Larsson <n_larsson at yahoo.com>
  Date:   2026-10-06 (Tue, 06 Oct 2026)

  Changed paths:
    M lib/htmldriver/text.c

  Log Message:
  -----------
  lib/htmldriver: Fix "Implicit conversion loses integer precision" warnings (#8023)

Adresses ” -Wshorten-64-to-32” Clang warnings.


  Commit: 88cd10ec9dbda006b56def464d995ef3e991bcb7
      https://github.com/OSGeo/grass/commit/88cd10ec9dbda006b56def464d995ef3e991bcb7
  Author: SAKET KUMAR MALL <72020337+saket0187 at users.noreply.github.com>
  Date:   2026-10-06 (Tue, 06 Oct 2026)

  Changed paths:
    M .github/workflows/additional_checks.yml
    M .pre-commit-config.yaml

  Log Message:
  -----------
  CI: Enable editorconfig-checker --fix (#8028)


  Commit: ad9ce6ba2d6d4f7c683c7e5d42186fb458d0d0a4
      https://github.com/OSGeo/grass/commit/ad9ce6ba2d6d4f7c683c7e5d42186fb458d0d0a4
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-10-06 (Tue, 06 Oct 2026)

  Changed paths:
    M raster/r.sim/r.sim.sediment/main.c
    M raster/r.sim/r.sim.sediment/r.sim.sediment.html
    M raster/r.sim/r.sim.sediment/r.sim.sediment.md
    A raster/r.sim/r.sim.sediment/tests/r_sim_sediment_random_test.py
    M raster/r.sim/r.sim.sediment/tests/r_sim_sediment_summary_test.py
    M raster/r.sim/r.sim.sediment/testsuite/data/reference_erdep.pack
    M raster/r.sim/r.sim.sediment/testsuite/data/reference_sedflux.pack
    M raster/r.sim/r.sim.water/main.c
    M raster/r.sim/r.sim.water/r.sim.water.html
    M raster/r.sim/r.sim.water/r.sim.water.md
    M raster/r.sim/r.sim.water/tests/r_sim_water_landforms_test.py
    A raster/r.sim/r.sim.water/tests/r_sim_water_random_test.py
    M raster/r.sim/r.sim.water/tests/r_sim_water_summary_test.py
    M raster/r.sim/r.sim.water/tests/r_sim_water_test.py
    M raster/r.sim/r.sim.water/testsuite/data/depth_complex.pack
    M raster/r.sim/r.sim.water/testsuite/data/depth_default.pack
    M raster/r.sim/r.sim.water/testsuite/data/discharge_complex.pack
    M raster/r.sim/r.sim.water/testsuite/data/discharge_default.pack
    M raster/r.sim/r.sim.water/testsuite/test_r_sim_water.py
    M raster/r.sim/simlib/hydro.c
    M raster/r.sim/simlib/input.c
    M raster/r.sim/simlib/output.c
    M raster/r.sim/simlib/random.c
    M raster/r.sim/simlib/simlib.h
    M raster/r.sim/simlib/summary.c

  Log Message:
  -----------
  r.sim: Give each walker random numbers of its own (#7980)

Each walker draws from a random number state of its own, placed on the
walker's stream of a bounded layout of the seed, instead of from the
shared generator. A walker's random numbers now depend only on the
seed and the walker's number, not on the thread which moves it or on
the order of the walkers, so walker paths are the same for any nprocs
as long as the depth-dependent diffusion and infiltration do not come
into play. The water depth and the sediment concentration still differ
slightly at nprocs > 1 because the order of the atomic additions to the
gama grid and the order in which walkers reach a cell with infiltration
capacity depend on the threads, which this does not change.

The streams hold 2 + 8 * steps + 48 values, over twice what a walker
draws on average: two values at placement and, per step, a normal pair
by the polar method, 8 / pi values on average, plus one in a cell of
the flow_control map (a trap in the code). The 8 per step hold the sum
over many steps, and the 48 allow a run of 24 rejected attempts within
one step, so that a walker exceeds its stream with a probability below
1e-16 and a run of 2^31 walkers, the most the int counts hold, with a
probability below 1e-6. In counted runs on the nc_spm elevation, the
most a walker drew over 145 or 158 steps was 628 values, at most 51% of
its stream. A run whose walkers and steps need more than one seed's
span provides gets a warning. The states are placed in parallel before
the walkers are, each a member of its walker's record, for which the
walkers get a type of their own, struct walker. A first version kept
the states in an array of their own beside the walkers, which cost 7 to
9% of the wall time at every thread count, likely for the extra stream
of memory reads and writes in each walker's step; in the record, the
state shares the cache line with the walker's position and weight and
the cost is gone. Without the contention on the shared generator,
nprocs > 1 is now faster than nprocs = 1: on the whole nc_spm elevation
(6 million walkers), 50 s at nprocs=1, 13 s at 4 and 4.8 s at 16,
against 68 s, 143 s and 159 s before. The build without OpenMP now
gives the same results as nprocs=1.

Without random_seed, the seed is generated, as in r.mapcalc, instead
of being 12345, and recorded in the history of the output maps and in
the -p summary, so that a run can be repeated. The results therefore
differ from run to run unless random_seed is set. The -s flag is
deprecated, and random_seed with -s is an error. The seed is parsed
with strtoll() and checked right after parsing, so a seed outside
-2^31 to 2^32 - 1 is an error instead of being silently reduced to 32
bits. The tool docs get a section on the random numbers, the seed and
reproducibility with more than one thread.

This change has the price of changed outputs also at nprocs=1, but
invests into results independent of the thread count where the model
allows it. The alternative, one state per thread, would keep the
values at nprocs=1 and give a different result for each thread count.
The outputs of r.sim.water and r.sim.sediment are sums over millions
of walkers, so a different realization of the same seed moves them
within their sampling noise, and from the user's perspective they do
not change much anyway. The gunittest references and the pinned
landform arrays are regenerated; the commands used reproduce the old
references exactly with the previous code.

Written with the help of Claude Code (Fable and Opus).


  Commit: ff08652a0d0df0f24c24fa881d74775ec7beb4f8
      https://github.com/OSGeo/grass/commit/ff08652a0d0df0f24c24fa881d74775ec7beb4f8
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-10-07 (Wed, 07 Oct 2026)

  Changed paths:
    M doc/development/style_guide.md
    M include/Make/Doxyfile_arch_html.in
    M include/Make/Doxyfile_arch_latex.in
    A lib/gis/README.md
    M lib/gis/gislib.dox
    A lib/gis/random_streams.dox.md
    A lib/gis/random_streams.svg
    A lib/gis/random_streams_figures.py
    A lib/gis/random_streams_layouts.svg
    A lib/gis/random_streams_parts.svg
    A lib/gis/random_streams_seeds.svg
    A lib/gis/random_streams_strides.svg
    A lib/gis/random_streams_twins.svg

  Log Message:
  -----------
  libgis: Document reproducible random numbers for parallel tools (#8004)

Add the page gislib_random_streams, written in Markdown as
lib/gis/random_streams.dox.md and rendered by Doxygen as a subpage of
the library page. It defines eight terms once (generator, seed, state,
span, layout, unit, stride, batch), describes a single sequence, the
three layouts and batches, shows how a tool gets its seed and the usage
patterns with code (a single sequence, rows of a raster, items drawn
over time, ensembles), gives the capacity, explains the quality of the
values (a table of the issues, how the library avoids each and what
remains, the generator and the span, the relations by distance with
their expected occurrence for a round total of draws, what odd strides
and odd distances between batches fix and where the relation remains,
relations between seeds), and shows how to migrate from the shared
generator in a table of the calls before and after. Six figures draw the
ring with the span as the quarter after wherever the seed falls, the
constant-shift twins, the layouts, what an even number of parts would
give, the values of units at an even and an odd stride, and the values
of consecutive seeds next to those of batches. The page speaks of rows
of a raster and of items drawn over time rather than of particular
tools, so that it does not drift when tools change. The examples use
single-line comments and the formulas the multiplication sign, so that
the page renders as written and lints as Markdown. The figures are
written by lib/gis/random_streams_figures.py, which also prints the
numbers quoted on the page; a README in the directory points to it.

Add *.dox.md to the file patterns of both Doxygen configuration
templates and say in the style guide that library pages
may be Markdown.

Written with the help of Claude Code.


  Commit: 6a6c6ac1636b2839ed828b7b6ad9ac8b4369e3d6
      https://github.com/OSGeo/grass/commit/6a6c6ac1636b2839ed828b7b6ad9ac8b4369e3d6
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-10-07 (Wed, 07 Oct 2026)

  Changed paths:
    M .pre-commit-config.yaml
    M imagery/i.svm.predict/i.svm.predict.html
    M imagery/i.svm.predict/i.svm.predict.md
    M imagery/i.svm.train/i.svm.train.html
    M imagery/i.svm.train/i.svm.train.md

  Log Message:
  -----------
  CI: Reject hidden Unicode characters and remove soft hyphens (#8030)


  Commit: 41dcc9775997db6c0508c78405e54acd676b755c
      https://github.com/OSGeo/grass/commit/41dcc9775997db6c0508c78405e54acd676b755c
  Author: Nicklas Larsson <n_larsson at yahoo.com>
  Date:   2026-10-07 (Wed, 07 Oct 2026)

  Changed paths:
    M CMakeLists.txt
    M general/CMakeLists.txt

  Log Message:
  -----------
  cmake: add missing $<CONFIG> to PATH for multi-config generators (#8026)

Enabling binaries that are needed during build process, to be found,
e.g. "output/lib/grass86/bin/Debug/g.mkfontcap", where 'Debug' is the
configuration.

In addition, generate fontcap from a separate custom target that
depends on the completed g.mkfontcap target. Addresses an ad-hoc
signature related build failure on Xcode.


Co-authored-by: Edouard Choinière <27212526+echoix at users.noreply.github.com>


  Commit: bf7d8b6f579d1d3fbbd6da9456325b44e01b3d2f
      https://github.com/OSGeo/grass/commit/bf7d8b6f579d1d3fbbd6da9456325b44e01b3d2f
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-10-07 (Wed, 07 Oct 2026)

  Changed paths:
    M include/grass/calc.h
    M include/grass/defs/calc.h
    M lib/calc/calc.c
    M lib/calc/xacos.c
    M lib/calc/xasin.c
    M lib/calc/xatan.c
    M lib/calc/xcos.c
    M lib/calc/xdiv.c
    M lib/calc/xexp.c
    M lib/calc/xlog.c
    M lib/calc/xmod.c
    M lib/calc/xpow.c
    M lib/calc/xsin.c
    M lib/calc/xsqrt.c
    M lib/calc/xtan.c
    M raster/r.mapcalc/main.c
    A raster/r.mapcalc/tests/r_mapcalc_math_errors_test.py

  Log Message:
  -----------
  r.mapcalc: Fix modulo by zero hang and speed up threads (#8031)

Check for a zero divisor in the integer modulo, so that 5 % 0 gives
NULL as documented. It hung r.mapcalc on x86 Linux because the SIGFPE
handler returned and the division was executed again.

Remove the SIGFPE handler and the floating_point_exception flags.
Floating point exceptions do not trap by default, so the handler never
ran for floating point operations and the flags never became 1. Still,
every thread reset the shared flag to 0 for every cell, which made the
computation scale poorly with threads. Domain errors still give NaN,
which is NULL, and overflow still gives infinity.

Remove pre_exec(), post_exec(), and the two floating_point_exception
variables from the installed grass/calc.h and from libgrass_calc, so
technically a change to the API. Only r.mapcalc used them, so
practically not an issue.

Test division and modulo by zero, domain errors and infinite input of
the functions which had the flag check, their regular results, and
overflow, all with 1 and 4 threads.

The fix, tests, and benchmarks were prepared with AI assistance (Claude
Code with Opus 5.5).


  Commit: c910e50c9fc2d6de54b62e3add69a0a9c9abdcd6
      https://github.com/OSGeo/grass/commit/c910e50c9fc2d6de54b62e3add69a0a9c9abdcd6
  Author: Nicklas Larsson <n_larsson at yahoo.com>
  Date:   2026-10-07 (Wed, 07 Oct 2026)

  Changed paths:
    M lib/gis/lrand48.c

  Log Message:
  -----------
  lib/gis: clarify intentional overflow in 48-bit LCG arithmetic (#8013)

Add `mul48()` to encapsulate multiplication modulo 2^48 and use it in
`lcg_step()` and `lcg_jump()`.

The multiplication may overflow `uint64_t` and wrap modulo 2^64. This is
intentional and does not affect the result modulo 2^48, since 2^48
divides 2^64. Consequently, masking the wrapped product to 48 bits gives
the same result as computing the full product modulo 2^48.

Centralising the operation in `mul48()` makes this property explicit and
avoids repeating potentially misleading unsigned multiplication
throughout the LCG implementation. It also provides a single location
for documenting or suppressing static-analysis warnings about the
intentional wraparound which is used for Coverity Scan now.


  Commit: d58e02b86b102fa7ed94f0024585de5c4f8e5461
      https://github.com/OSGeo/grass/commit/d58e02b86b102fa7ed94f0024585de5c4f8e5461
  Author: Bhuvan Somisetty <somisettybhuvan5 at gmail.com>
  Date:   2026-10-07 (Wed, 07 Oct 2026)

  Changed paths:
    M python/grass/pygrass/vector/basic.py
    A python/grass/pygrass/vector/tests/test_basic.py

  Log Message:
  -----------
  grass.pygrass: Fix Ilist.extend and Ilist.remove accessing non-existent attribute (#7977)

grass.pygrass: Fix Ilist attribute access, indexing, and append issues

In `python/grass/pygrass/vector/basic.py`, `Ilist.extend()` and `Ilist.remove()`
incorrectly attempted to access `ilist.ilist` and `value.ilist`, which do not
exist on `Ilist` instances (the C pointer is stored in `c_ilist`), resulting
in an `AttributeError`.

Additionally:
- `Ilist.append()` previously used a bare `raise` when `Vect_list_append()` failed;
  raise `GrassError` from `grass.pygrass.errors` and coerce `value` with `int()`.
- `Ilist.__getitem__()` negative index calculation allowed negative out-of-bounds
  lookups without raising `IndexError`.
- `Ilist.__contains__()` now delegates directly to `contains()` using the C routine.
- Add comprehensive pytest unit tests in `python/grass/pygrass/vector/tests/test_basic.py`.

Fixes #7976.

Signed-off-by: bhuvan-somisetty <somisettybhuvan5 at gmail.com>


  Commit: 40afb9f47208ffa5b7f90dbce890049c09c65841
      https://github.com/OSGeo/grass/commit/40afb9f47208ffa5b7f90dbce890049c09c65841
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-10-07 (Wed, 07 Oct 2026)

  Changed paths:
    M lib/gis/renamed_options
    M raster/r.sim/r.sim.sediment/main.c
    M raster/r.sim/r.sim.sediment/r.sim.sediment.html
    M raster/r.sim/r.sim.sediment/r.sim.sediment.md
    M raster/r.sim/r.sim.sediment/tests/r_sim_sediment_random_test.py
    M raster/r.sim/r.sim.sediment/tests/r_sim_sediment_summary_test.py
    M raster/r.sim/r.sim.sediment/testsuite/test_r_sim_sediment.py
    M raster/r.sim/r.sim.water/main.c
    M raster/r.sim/r.sim.water/r.sim.water.html
    M raster/r.sim/r.sim.water/r.sim.water.ipynb
    M raster/r.sim/r.sim.water/r.sim.water.md
    M raster/r.sim/r.sim.water/tests/r_sim_water_landforms_test.py
    M raster/r.sim/r.sim.water/tests/r_sim_water_mannings_null_test.py
    M raster/r.sim/r.sim.water/tests/r_sim_water_nprocs_test.py
    M raster/r.sim/r.sim.water/tests/r_sim_water_random_test.py
    M raster/r.sim/r.sim.water/tests/r_sim_water_summary_test.py
    M raster/r.sim/r.sim.water/tests/r_sim_water_test.py
    M raster/r.sim/r.sim.water/tests/r_sim_water_time_series_test.py
    M raster/r.sim/r.sim.water/testsuite/test_r_sim_water.py

  Log Message:
  -----------
  r.sim: Rename the option random_seed to seed (#8032)

The random seed is the option seed in the eleven other tools which take
one, all through G_OPT_M_SEED, and only r.sim.water and r.sim.sediment
call it random_seed. The key in the history and the run summary is seed
already. The old name keeps working through the renamed options list,
with the parser's warning.

Written with the help of Claude Code.


  Commit: becef3d057bb0198a85fa73e2b28647a86e1de65
      https://github.com/OSGeo/grass/commit/becef3d057bb0198a85fa73e2b28647a86e1de65
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-10-07 (Wed, 07 Oct 2026)

  Changed paths:
    M python/grass/benchmark/__init__.py
    M python/grass/benchmark/plots.py
    A python/grass/benchmark/tests/grass_benchmark_plots_test.py
    A raster/r.sim/r.sim.water/benchmark/benchmark_r_sim_water_nprocs.py
    M raster/r.sim/r.sim.water/r.sim.water.html
    M raster/r.sim/r.sim.water/r.sim.water.md
    A raster/r.sim/r.sim.water/r_sim_water_benchmark_efficiency.png
    A raster/r.sim/r.sim.water/r_sim_water_benchmark_speedup.png
    A raster/r.sim/r.sim.water/r_sim_water_benchmark_time.png

  Log Message:
  -----------
  r.sim.water: Add a benchmark for the number of threads (#8002)

Measure r.sim.water with nprocs from 1 to 16 on the elevation of the
SECREF North Carolina dataset at 4 m, 2 m and 1 m resolution, using
grass.benchmark as the benchmarks of other tools do. The script plots
time, speedup and efficiency and saves the results as JSON, from which
it can redo the plots.

In grass.benchmark, nprocs_plot() shades the range of the runs in each
line's color for time, speedup and efficiency instead of a gray band for
time only (for speedup over the ratios of every serial run to every
parallel run), takes figsize and dpi, plots results without all_times,
and sets the default title for time. The range is computed by
nprocs_ranges(), which has pytest tests. The documentation of the
experimental subpackage says that it is changed together with the
benchmarks which need more from it.

Add the figures to the documentation in a Performance section, as the
other parallel tools have, at twice the 600 pixel width, shown at 600
pixels in the HTML page. They were made with the per-walker random
number states of OSGeo/grass#7980.

Written with the help of Claude Code.


  Commit: 1a88e4eae9f100903dc0a13c0a6ef1e7f0f13082
      https://github.com/OSGeo/grass/commit/1a88e4eae9f100903dc0a13c0a6ef1e7f0f13082
  Author: SAKET KUMAR MALL <72020337+saket0187 at users.noreply.github.com>
  Date:   2026-10-08 (Thu, 08 Oct 2026)

  Changed paths:
    M gui/wxpython/core/gcmd.py
    M gui/wxpython/core/gconsole.py

  Log Message:
  -----------
  wxGUI: Fix tracebacks split into many lines in console (#8005)


  Commit: 93a6e41e27d67b629245508e10f4f1158dcc70e3
      https://github.com/OSGeo/grass/commit/93a6e41e27d67b629245508e10f4f1158dcc70e3
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-10-09 (Fri, 09 Oct 2026)

  Changed paths:
    M .pre-commit-config.yaml
    M doc/development/style_guide.md
    M doc/interfaces_overview.md
    M doc/jupyter_intro.md
    M doc/python_intro.md
    M general/g.proj/g.proj.html
    M general/g.proj/g.proj.md
    M general/g.setproj/g.setproj.html
    M general/g.setproj/g.setproj.md
    M gui/xml/grass-interface.dtd
    M imagery/i.cluster/i.cluster.html
    M imagery/i.cluster/i.cluster.md
    M imagery/i.smap/i.smap.html
    M imagery/i.smap/i.smap.md
    M include/grass/iostream/pqheap.h
    M lib/cdhc/doc/goodness.tex
    M misc/m.cogo/m.cogo.html
    M misc/m.cogo/m.cogo.md
    M mswindows/external/rbatch/README.html
    M mswindows/external/rbatch/README.md
    M mswindows/external/rbatch/batchfiles.md
    M ps/ps.map/README
    M pyproject.toml
    M python/grass/docs/README.md
    M python/grass/docs/_templates/header.html
    M python/grass/tools/session_tools.py
    M raster/r.mapcalc/r.mapcalc.md
    M raster/r.neighbors/r.neighbors.html
    M raster/r.neighbors/r.neighbors.md
    M raster/r.out.gdal/r.out.gdal.md
    M raster/r.out.vtk/r.out.vtk.html
    M raster/r.out.vtk/r.out.vtk.md
    M raster/r.proj/r.proj.html
    M raster/r.proj/r.proj.md
    M raster/r.smooth.edgepreserve/r.smooth.edgepreserve.md
    M raster/r.viewshed/r.viewshed.html
    M raster/r.viewshed/r.viewshed.md
    M raster/r.what/testsuite/test_r_what.py
    M scripts/m.proj/m.proj.html
    M scripts/m.proj/m.proj.md
    M scripts/v.dissolve/v.dissolve.html
    M scripts/v.dissolve/v.dissolve.md
    M vector/v.generalize/v.generalize.html
    M vector/v.generalize/v.generalize.md
    M vector/v.proj/v.proj.md
    M vector/vectorintro.html
    M vector/vectorintro.md

  Log Message:
  -----------
  CI: Enable codespell for Markdown and HTML files and fix typos (#8029)

* doc: Fix typos in code, comments and templates

Fix spelling mistakes in a DTD file, a LaTeX document, a Python comment,
a C++ header comment, a README and the documentation HTML header
template.

AI assistance (Claude Code) was used to find the typos.

* CI: Enable codespell for Markdown and HTML files and fix typos

Stop excluding the markdown and html file types from codespell in
pre-commit and fix the typos it reports in the tool and general
documentation. Add the terms codespell flagged but that are intentional
(evapotranspiration ETo, IHS color model, ALOG, a cited author's name and
others) to the ignore list.

The v.generalize option name betweeness_thresh is a misspelling of
betweenness, but it is a user-facing option name, so it is left unchanged
here, as renaming it is a larger change. Only the prose around it is
corrected.

AI assistance (Claude Code) was used to find the typos.


  Commit: 05d86525f1ac6e1ad140549ed44b0a4d1e5bd93d
      https://github.com/OSGeo/grass/commit/05d86525f1ac6e1ad140549ed44b0a4d1e5bd93d
  Author: Rajveer Bishnoi <irajveer.bishnoi2310 at gmail.com>
  Date:   2026-10-09 (Fri, 09 Oct 2026)

  Changed paths:
    M scripts/v.what.strds/tests/v_what_strds_test.py

  Log Message:
  -----------
  v.what.strds: make the test data position-dependent (#7930)

* v.what.strds: make the test data position-dependent

The rasters held a single value each, so a point sampled the same number
wherever it was and a pixel shift or a reordered point could not change
the result. Each raster is now map_number * 1000 + row() * 10 + col(), and
the points sit at known cell centres created with v.in.ascii instead of
seeded v.random, so every cell holds a distinct value.

The row assertion now compares whole rows including the category, rather
than dropping the first column, and the fixture docstring no longer claims
the points share a location.

Follow-up to #7898, as discussed there.

* v.what.strds: make the cell encoding actually unique

row() * 10 + col() collides once the region has more than nine columns:
with twelve, (row 1, col 11) and (row 2, col 1) both give 21. The three
sampled cells happened not to collide, so the test passed, but the comment
claimed more than the encoding delivered. Use row() * 100 + col().


  Commit: 3d6d5887bb19ce20e595e66dceec9703228ee712
      https://github.com/OSGeo/grass/commit/3d6d5887bb19ce20e595e66dceec9703228ee712
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-10-09 (Fri, 09 Oct 2026)

  Changed paths:
    M python/grass/gunittest/testsuite/test_assertions.py
    M python/grass/gunittest/testsuite/test_checkers.py

  Log Message:
  -----------
  grass.gunittest: Preserve exact bytes in MD5 test fixtures (#8039)

Python's default text-mode writing translates "\n" to os.linesep, which
on Windows turns the MD5 test fixtures into "\r\n" files. Two tests hash
them in binary mode against MD5 sums computed from "\n" content:
test_text_file_binary in test_checkers.py and test_assertFileMd5 in
test_assertions.py.

Write these fixtures with newline="" so the bytes match the hardcoded
sums on every platform. Do the same for the other fixtures written next
to file_with_md5, since test_assertFilesEqualMd5 compares their hashes
against it. Remove the now obsolete @xfail_windows markers from the two
tests, because an unexpected success makes the gunittest run fail.

Also fix the "platfrom" typos in the test_text_file_platform test name
and the platform_newline attribute.

Based on the newline handling in OSGeo/grass#2616 by Stefan Blumentrath,
reworked against current main with AI assistance.

Co-authored-by: Stefan Blumentrath <4246620+ninsbl at users.noreply.github.com>


  Commit: f562b42be6dfca99ee3aac5aee57b37605829184
      https://github.com/OSGeo/grass/commit/f562b42be6dfca99ee3aac5aee57b37605829184
  Author: Stefan Blumentrath <stefan.blumentrath at gmx.de>
  Date:   2026-10-10 (Sat, 10 Oct 2026)

  Changed paths:
    M imagery/i.group/i.group.html
    M imagery/i.group/i.group.md
    M imagery/i.group/main.c
    A imagery/i.group/tests/i_group_test.py
    R imagery/i.group/testsuite/test_i_group.py

  Log Message:
  -----------
  i.group: Find and read groups and raster maps therein from other mapsets (#8036)

* do not hard-code current mapset for unqualified raster name input
* remove remove ambiguous note from manual
* add tests


  Commit: 40a1e3b44750ced1e4b58cfe5e60b514d5c8e078
      https://github.com/OSGeo/grass/commit/40a1e3b44750ced1e4b58cfe5e60b514d5c8e078
  Author: OSGeo Weblate <97247866+osgeoweblate at users.noreply.github.com>
  Date:   2026-10-10 (Sat, 10 Oct 2026)

  Changed paths:
    M locale/po/grasslibs_fr.po
    M locale/po/grasslibs_sv.po
    M locale/po/grassmods_fr.po
    M locale/po/grassmods_sv.po
    M locale/po/grasswxpy_fr.po

  Log Message:
  -----------
  Translations update from OSGeo Weblate (#8042)


  Commit: 9c7baf5c41a8f22e2856d8b7ec3f4e03abf50fe1
      https://github.com/OSGeo/grass/commit/9c7baf5c41a8f22e2856d8b7ec3f4e03abf50fe1
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-10-10 (Sat, 10 Oct 2026)

  Changed paths:
    M db/drivers/dbf/dbfexe.c
    M db/drivers/sqlite/db.c
    M lib/gis/view.c
    M raster/r.horizon/main.c
    M raster/r.in.pdal/main.cpp
    M raster/r.reclass/main.c
    M vector/v.class/main.c
    M vector/v.in.ogr/main.c
    M vector/v.profile/main.c
    M vector/v.rectify/main.c

  Log Message:
  -----------
  i18n: Improve some C source strings flagged on Weblate (#8012)

* r.reclass: Translate complete messages instead of fragments

Join the 'Illegal reclass rule' and 'invalid reclass rule' messages instead of translating their pieces separately.

* r.in.pdal: Fix point count messages not being translated

The msgids were built with a preprocessor macro inside _(), so xgettext
extracted a fragment and the runtime msgid never matched a catalog entry.
Write the format with PRIu64, as done for other 64-bit values in translated
strings, so the msgid is the same whatever the type of the count.

Report the final counts in separate messages, each with a single
placeholder, instead of one message built with snprintf().

* r.horizon: Use complete messages for bufferzone errors

The direction was a separately translated word substituted into the sentence, which cannot agree in gender or case in all languages.

* v.rectify: Report existing output map in separate messages

The error was split over two warnings and a fatal error, so the sentence was
translated in pieces. Use complete sentences with a single placeholder each,
so that no positional placeholders are needed.

* db.dbf: Split SQL parser error into complete messages

The message was joined from separately translated fragments. Use two complete messages with one placeholder each.

* v.class: Translate column headers instead of the format string

The format string '%15s%15s%15s' was translated, which splits a table header over three untranslatable arguments. Translate each column header instead.

* lib/gis: Remove leading space from window overlap warnings

Leading whitespace in a msgid is easy to lose or misplace in translations.

* v.in.ogr, v.profile: Fix typos in messages

Fix 'where' for 'were' and the capitalized 'Your'.

* db.sqlite: Write SQLite consistently in messages


  Commit: 4c4f66cbd3d30ae251d394bbff28ccd334789f99
      https://github.com/OSGeo/grass/commit/4c4f66cbd3d30ae251d394bbff28ccd334789f99
  Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
  Date:   2026-10-10 (Sat, 10 Oct 2026)

  Changed paths:
    M locale/templates/grasslibs.pot
    M locale/templates/grassmods.pot
    M locale/templates/grasswxpy.pot

  Log Message:
  -----------
  locale: Update translation files (132) (#8044)


  Commit: 8c58434df83e7c3096e0996548caa7c850492c6b
      https://github.com/OSGeo/grass/commit/8c58434df83e7c3096e0996548caa7c850492c6b
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-10-10 (Sat, 10 Oct 2026)

  Changed paths:
    M python/grass/temporal/testsuite/unittests_temporal_algebra_grs.py

  Log Message:
  -----------
  grass.temporal: Remove duplicate test and fix copy-pasted docstrings in granularity tests (#8045)

* grass.temporal: Remove duplicate test_common_granularity_4

The second definition of test_common_granularity_4 was an identical
copy of the first. Python keeps only the last definition, so the first
one never ran as a separate test. Remove the copy; the remaining test
checks the same thing.

The change was found and fixed with AI assistance.

* grass.temporal: Fix copy-pasted docstrings in granularity tests


  Commit: 8f7506115d6125bf18f9edd87a39d4b7cbee59b7
      https://github.com/OSGeo/grass/commit/8f7506115d6125bf18f9edd87a39d4b7cbee59b7
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-10-10 (Sat, 10 Oct 2026)

  Changed paths:
    M gui/wxpython/core/render.py
    M gui/wxpython/core/settings.py
    M gui/wxpython/dbmgr/base.py
    M gui/wxpython/gcp/manager.py
    M gui/wxpython/gcp/toolbars.py
    M gui/wxpython/gmodeler/model_items.py
    M gui/wxpython/gui_core/forms.py
    M gui/wxpython/gui_core/gselect.py
    M gui/wxpython/gui_core/preferences.py
    M gui/wxpython/iclass/toolbars.py
    M gui/wxpython/image2target/ii2t_toolbars.py
    M gui/wxpython/lmgr/layertree.py
    M gui/wxpython/mapwin/analysis.py
    M gui/wxpython/photo2image/ip2i_toolbars.py
    M gui/wxpython/psmap/dialogs.py
    M gui/wxpython/psmap/frame.py
    M gui/wxpython/rlisetup/wizard.py
    M gui/wxpython/tplot/frame.py
    M gui/wxpython/wxplot/scatter.py
    M python/grass/temporal/core.py
    M python/grass/temporal/temporal_algebra.py
    M scripts/m.proj/m.proj.py
    M scripts/r.in.srtm/r.in.srtm.py
    M scripts/r.in.wms/wms_base.py
    M scripts/r.in.wms/wms_drv.py
    M scripts/r.reclass.area/r.reclass.area.py
    M scripts/v.rast.stats/v.rast.stats.py
    M scripts/v.what.strds/v.what.strds.py
    M temporal/t.vect.what.strds/t.vect.what.strds.py

  Log Message:
  -----------
  i18n: Use complete source strings instead of fragments (Python) (#8011)


  Commit: 30cdc69283276cb947d897fae5e6f256bdad05b3
      https://github.com/OSGeo/grass/commit/30cdc69283276cb947d897fae5e6f256bdad05b3
  Author: Nicklas Larsson <n_larsson at yahoo.com>
  Date:   2026-10-11 (Sun, 11 Oct 2026)

  Changed paths:
    M lib/raster/get_row.c

  Log Message:
  -----------
  lib/raster: guard compressed row memcpy size (#8015)

* grass/raster: guard compressed row memcpy size

Addresses CID 1687668 introduced by 6e39994ed822ca88e36dc49bd9de15556c3d8efd

* check 'n > fcb->nbytes', according to review suggestion

The per-cell byte count is read from the file and must not exceed
the bytes-per-cell the data buffer was allocated for (fcb->nbytes
from the map header); a larger value indicates a corrupted file and
would otherwise overflow data_buf below.


  Commit: 14034bb30bbe194a09bb925b2b90787af679ea96
      https://github.com/OSGeo/grass/commit/14034bb30bbe194a09bb925b2b90787af679ea96
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-10-11 (Sun, 11 Oct 2026)

  Changed paths:
    M python/grass/grassdb/testsuite/test_manage.py

  Log Message:
  -----------
  grass.grassdb: Fix path separator expectations in manage tests on Windows (#8050)

pathlib uses os.sep in the string form of paths, so the tests that
compare against forward-slash strings failed on Windows. Compare against
the same strings with os.sep and drop the xfail_windows markers from the
four tests which this fixes.

Extracted from #2616 by Stefan Blumentrath.

Co-authored-by: Stefan Blumentrath <stefan.blumentrath at gmx.de>


  Commit: 2a451d3996bd8cad72d753455c9082b80b8aa6ea
      https://github.com/OSGeo/grass/commit/2a451d3996bd8cad72d753455c9082b80b8aa6ea
  Author: OSGeo Weblate <97247866+osgeoweblate at users.noreply.github.com>
  Date:   2026-10-11 (Sun, 11 Oct 2026)

  Changed paths:
    M locale/po/grasslibs_ar.po
    M locale/po/grasslibs_bn.po
    M locale/po/grasslibs_cs.po
    M locale/po/grasslibs_de.po
    M locale/po/grasslibs_el.po
    M locale/po/grasslibs_es.po
    M locale/po/grasslibs_fi.po
    M locale/po/grasslibs_fr.po
    M locale/po/grasslibs_hi.po
    M locale/po/grasslibs_hu.po
    M locale/po/grasslibs_id_ID.po
    M locale/po/grasslibs_it.po
    M locale/po/grasslibs_ja.po
    M locale/po/grasslibs_ko.po
    M locale/po/grasslibs_lv.po
    M locale/po/grasslibs_ml.po
    M locale/po/grasslibs_pl.po
    M locale/po/grasslibs_pt.po
    M locale/po/grasslibs_pt_BR.po
    M locale/po/grasslibs_ro.po
    M locale/po/grasslibs_ru.po
    M locale/po/grasslibs_si.po
    M locale/po/grasslibs_sl.po
    M locale/po/grasslibs_sv.po
    M locale/po/grasslibs_ta.po
    M locale/po/grasslibs_th.po
    M locale/po/grasslibs_tr.po
    M locale/po/grasslibs_uk.po
    M locale/po/grasslibs_vi.po
    M locale/po/grasslibs_zh.po
    M locale/po/grasslibs_zh_Hant.po
    M locale/po/grassmods_ar.po
    M locale/po/grassmods_bn.po
    M locale/po/grassmods_cs.po
    M locale/po/grassmods_de.po
    M locale/po/grassmods_el.po
    M locale/po/grassmods_es.po
    M locale/po/grassmods_fi.po
    M locale/po/grassmods_fr.po
    M locale/po/grassmods_hi.po
    M locale/po/grassmods_hu.po
    M locale/po/grassmods_id_ID.po
    M locale/po/grassmods_it.po
    M locale/po/grassmods_ja.po
    M locale/po/grassmods_ko.po
    M locale/po/grassmods_lv.po
    M locale/po/grassmods_ml.po
    M locale/po/grassmods_pl.po
    M locale/po/grassmods_pt.po
    M locale/po/grassmods_pt_BR.po
    M locale/po/grassmods_ro.po
    M locale/po/grassmods_ru.po
    M locale/po/grassmods_si.po
    M locale/po/grassmods_sl.po
    M locale/po/grassmods_sv.po
    M locale/po/grassmods_ta.po
    M locale/po/grassmods_th.po
    M locale/po/grassmods_tr.po
    M locale/po/grassmods_uk.po
    M locale/po/grassmods_vi.po
    M locale/po/grassmods_zh.po
    M locale/po/grassmods_zh_Hant.po
    M locale/po/grasswxpy_ar.po
    M locale/po/grasswxpy_bn.po
    M locale/po/grasswxpy_cs.po
    M locale/po/grasswxpy_de.po
    M locale/po/grasswxpy_el.po
    M locale/po/grasswxpy_es.po
    M locale/po/grasswxpy_fi.po
    M locale/po/grasswxpy_fr.po
    M locale/po/grasswxpy_hi.po
    M locale/po/grasswxpy_hu.po
    M locale/po/grasswxpy_id_ID.po
    M locale/po/grasswxpy_it.po
    M locale/po/grasswxpy_ja.po
    M locale/po/grasswxpy_ko.po
    M locale/po/grasswxpy_lv.po
    M locale/po/grasswxpy_ml.po
    M locale/po/grasswxpy_pl.po
    M locale/po/grasswxpy_pt.po
    M locale/po/grasswxpy_pt_BR.po
    M locale/po/grasswxpy_ro.po
    M locale/po/grasswxpy_ru.po
    M locale/po/grasswxpy_si.po
    M locale/po/grasswxpy_sl.po
    M locale/po/grasswxpy_sv.po
    M locale/po/grasswxpy_ta.po
    M locale/po/grasswxpy_th.po
    M locale/po/grasswxpy_tr.po
    M locale/po/grasswxpy_uk.po
    M locale/po/grasswxpy_vi.po
    M locale/po/grasswxpy_zh.po
    M locale/po/grasswxpy_zh_Hant.po

  Log Message:
  -----------
  Translations update from OSGeo Weblate (#8055)

Translated using Weblate (French)

Currently translated at 37.3% (3799 of 10158 strings)

Translated using Weblate (French)

Currently translated at 37.3% (3797 of 10158 strings)

Translated using Weblate (Portuguese)

Currently translated at 6.2% (634 of 10158 strings)

Translated using Weblate (Italian)

Currently translated at 28.4% (2889 of 10158 strings)

Translated using Weblate (French)

Currently translated at 37.3% (3793 of 10158 strings)

Translated using Weblate (Finnish)

Currently translated at 0.3% (39 of 10158 strings)

Translated using Weblate (Spanish)

Currently translated at 71.4% (7256 of 10158 strings)

Translated using Weblate (German)

Currently translated at 55.7% (1914 of 3434 strings)

Translated using Weblate (Slovenian)

Currently translated at 2.3% (44 of 1882 strings)

Translated using Weblate (Russian)

Currently translated at 90.5% (1705 of 1882 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 81.5% (1534 of 1882 strings)

Translated using Weblate (Portuguese)

Currently translated at 25.9% (488 of 1882 strings)

Translated using Weblate (Polish)

Currently translated at 33.5% (631 of 1882 strings)

Translated using Weblate (Latvian)

Currently translated at 14.7% (277 of 1882 strings)

Translated using Weblate (Italian)

Currently translated at 46.2% (870 of 1882 strings)

Translated using Weblate (French)

Currently translated at 96.9% (1824 of 1882 strings)

Translated using Weblate (Spanish)

Currently translated at 76.4% (1439 of 1882 strings)

Translated using Weblate (Greek)

Currently translated at 18.3% (345 of 1882 strings)

Translated using Weblate (German)

Currently translated at 40.8% (768 of 1882 strings)

Translated using Weblate (Czech)

Currently translated at 28.0% (527 of 1882 strings)

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.



Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasslibs/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasslibs/cs/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasslibs/de/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasslibs/el/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasslibs/es/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasslibs/fr/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasslibs/it/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasslibs/lv/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasslibs/pl/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasslibs/pt/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasslibs/pt_BR/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasslibs/ru/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasslibs/sl/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassmods/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassmods/es/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassmods/fi/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassmods/fr/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassmods/it/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassmods/pt/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasswxpy/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasswxpy/de/
Translation: GRASS/grasslibs
Translation: GRASS/grassmods
Translation: GRASS/grasswxpy

Co-authored-by: Weblate <noreply at weblate.org>
Co-authored-by: Edouard Choiniere <echoix at users.noreply.weblate.osgeo.org>


  Commit: e27f3c252315a3adf07e1a67d4d93fdb7674bb5d
      https://github.com/OSGeo/grass/commit/e27f3c252315a3adf07e1a67d4d93fdb7674bb5d
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-10-11 (Sun, 11 Oct 2026)

  Changed paths:
    M .github/workflows/additional_checks.yml
    M .github/workflows/python-code-quality.yml
    M .pre-commit-config.yaml
    M CMakeLists.txt
    M Dockerfile
    M db/drivers/dbf/dbfexe.c
    M db/drivers/sqlite/db.c
    M doc/development/style_guide.md
    M doc/interfaces_overview.md
    M doc/jupyter_intro.md
    M doc/python_intro.md
    M docker/debian/Dockerfile
    M docker/ubuntu/Dockerfile
    M general/CMakeLists.txt
    M general/g.proj/g.proj.html
    M general/g.proj/g.proj.md
    M general/g.setproj/g.setproj.html
    M general/g.setproj/g.setproj.md
    M gui/wxpython/core/gcmd.py
    M gui/wxpython/core/gconsole.py
    M gui/wxpython/core/render.py
    M gui/wxpython/core/settings.py
    M gui/wxpython/core/utils.py
    M gui/wxpython/dbmgr/base.py
    M gui/wxpython/gcp/manager.py
    M gui/wxpython/gcp/toolbars.py
    M gui/wxpython/gmodeler/model_items.py
    M gui/wxpython/gui_core/forms.py
    M gui/wxpython/gui_core/gselect.py
    M gui/wxpython/gui_core/preferences.py
    M gui/wxpython/history/browser.py
    M gui/wxpython/iclass/toolbars.py
    M gui/wxpython/image2target/ii2t_toolbars.py
    M gui/wxpython/lmgr/layertree.py
    M gui/wxpython/mapwin/analysis.py
    M gui/wxpython/photo2image/ip2i_toolbars.py
    M gui/wxpython/psmap/dialogs.py
    M gui/wxpython/psmap/frame.py
    M gui/wxpython/rlisetup/wizard.py
    M gui/wxpython/tplot/frame.py
    M gui/wxpython/wxplot/scatter.py
    M gui/xml/grass-interface.dtd
    M imagery/i.cluster/i.cluster.html
    M imagery/i.cluster/i.cluster.md
    M imagery/i.group/i.group.html
    M imagery/i.group/i.group.md
    M imagery/i.group/main.c
    A imagery/i.group/tests/i_group_test.py
    R imagery/i.group/testsuite/test_i_group.py
    M imagery/i.smap/i.smap.html
    M imagery/i.smap/i.smap.md
    M imagery/i.svm.predict/i.svm.predict.html
    M imagery/i.svm.predict/i.svm.predict.md
    M imagery/i.svm.train/i.svm.train.html
    M imagery/i.svm.train/i.svm.train.md
    M include/Make/Doxyfile_arch_html.in
    M include/Make/Doxyfile_arch_latex.in
    M include/grass/calc.h
    M include/grass/defs/calc.h
    M include/grass/defs/gis.h
    M include/grass/gis.h
    M include/grass/iostream/pqheap.h
    M lib/calc/calc.c
    M lib/calc/xacos.c
    M lib/calc/xasin.c
    M lib/calc/xatan.c
    M lib/calc/xcos.c
    M lib/calc/xdiv.c
    M lib/calc/xexp.c
    M lib/calc/xlog.c
    M lib/calc/xmod.c
    M lib/calc/xpow.c
    M lib/calc/xsin.c
    M lib/calc/xsqrt.c
    M lib/calc/xtan.c
    M lib/cdhc/doc/goodness.tex
    M lib/display/raster.c
    A lib/gis/README.md
    M lib/gis/aprintf.c
    M lib/gis/cmprzlib.c
    M lib/gis/cmprzstd.c
    M lib/gis/color_rules.c
    M lib/gis/compress.c
    M lib/gis/error.c
    M lib/gis/file_name.c
    M lib/gis/getl.c
    M lib/gis/gislib.dox
    M lib/gis/lrand48.c
    M lib/gis/ls.c
    M lib/gis/make_loc.c
    M lib/gis/parser.c
    M lib/gis/parser_dependencies.c
    M lib/gis/parser_help.c
    M lib/gis/progrm_nme.c
    A lib/gis/random_streams.dox.md
    A lib/gis/random_streams.svg
    A lib/gis/random_streams_figures.py
    A lib/gis/random_streams_layouts.svg
    A lib/gis/random_streams_parts.svg
    A lib/gis/random_streams_seeds.svg
    A lib/gis/random_streams_strides.svg
    A lib/gis/random_streams_twins.svg
    M lib/gis/renamed_options
    M lib/gis/strings.c
    M lib/gis/tests/lib_gis_lrand48_test.py
    M lib/gis/view.c
    M lib/htmldriver/text.c
    M lib/init/variables.html
    M lib/init/variables.md
    M lib/raster/cats.c
    M lib/raster/get_row.c
    M lib/raster/get_row_colr.c
    M lib/raster/history.c
    M lib/raster/null_val.c
    M lib/raster/open.c
    M lib/raster/put_row.c
    M lib/raster/reclass.c
    M lib/vector/Vlib/build_sfa.c
    M locale/Makefile
    M locale/po/grasslibs_ar.po
    M locale/po/grasslibs_bn.po
    M locale/po/grasslibs_cs.po
    M locale/po/grasslibs_de.po
    M locale/po/grasslibs_el.po
    M locale/po/grasslibs_es.po
    M locale/po/grasslibs_fi.po
    M locale/po/grasslibs_fr.po
    M locale/po/grasslibs_hi.po
    M locale/po/grasslibs_hu.po
    M locale/po/grasslibs_id_ID.po
    M locale/po/grasslibs_it.po
    M locale/po/grasslibs_ja.po
    M locale/po/grasslibs_ko.po
    M locale/po/grasslibs_lv.po
    M locale/po/grasslibs_ml.po
    M locale/po/grasslibs_pl.po
    M locale/po/grasslibs_pt.po
    M locale/po/grasslibs_pt_BR.po
    M locale/po/grasslibs_ro.po
    M locale/po/grasslibs_ru.po
    M locale/po/grasslibs_si.po
    M locale/po/grasslibs_sl.po
    M locale/po/grasslibs_sv.po
    M locale/po/grasslibs_ta.po
    M locale/po/grasslibs_th.po
    M locale/po/grasslibs_tr.po
    M locale/po/grasslibs_uk.po
    M locale/po/grasslibs_vi.po
    M locale/po/grasslibs_zh.po
    M locale/po/grasslibs_zh_Hant.po
    M locale/po/grassmods_ar.po
    M locale/po/grassmods_bn.po
    M locale/po/grassmods_cs.po
    M locale/po/grassmods_de.po
    M locale/po/grassmods_el.po
    M locale/po/grassmods_es.po
    M locale/po/grassmods_fi.po
    M locale/po/grassmods_fr.po
    M locale/po/grassmods_hi.po
    M locale/po/grassmods_hu.po
    M locale/po/grassmods_id_ID.po
    M locale/po/grassmods_it.po
    M locale/po/grassmods_ja.po
    M locale/po/grassmods_ko.po
    M locale/po/grassmods_lv.po
    M locale/po/grassmods_ml.po
    M locale/po/grassmods_pl.po
    M locale/po/grassmods_pt.po
    M locale/po/grassmods_pt_BR.po
    M locale/po/grassmods_ro.po
    M locale/po/grassmods_ru.po
    M locale/po/grassmods_si.po
    M locale/po/grassmods_sl.po
    M locale/po/grassmods_sv.po
    M locale/po/grassmods_ta.po
    M locale/po/grassmods_th.po
    M locale/po/grassmods_tr.po
    M locale/po/grassmods_uk.po
    M locale/po/grassmods_vi.po
    M locale/po/grassmods_zh.po
    M locale/po/grassmods_zh_Hant.po
    M locale/po/grasswxpy_ar.po
    M locale/po/grasswxpy_bn.po
    M locale/po/grasswxpy_cs.po
    M locale/po/grasswxpy_de.po
    M locale/po/grasswxpy_el.po
    M locale/po/grasswxpy_es.po
    M locale/po/grasswxpy_fi.po
    M locale/po/grasswxpy_fr.po
    M locale/po/grasswxpy_hi.po
    M locale/po/grasswxpy_hu.po
    M locale/po/grasswxpy_id_ID.po
    M locale/po/grasswxpy_it.po
    M locale/po/grasswxpy_ja.po
    M locale/po/grasswxpy_ko.po
    M locale/po/grasswxpy_lv.po
    M locale/po/grasswxpy_ml.po
    M locale/po/grasswxpy_pl.po
    M locale/po/grasswxpy_pt.po
    M locale/po/grasswxpy_pt_BR.po
    M locale/po/grasswxpy_ro.po
    M locale/po/grasswxpy_ru.po
    M locale/po/grasswxpy_si.po
    M locale/po/grasswxpy_sl.po
    M locale/po/grasswxpy_sv.po
    M locale/po/grasswxpy_ta.po
    M locale/po/grasswxpy_th.po
    M locale/po/grasswxpy_tr.po
    M locale/po/grasswxpy_uk.po
    M locale/po/grasswxpy_vi.po
    M locale/po/grasswxpy_zh.po
    M locale/po/grasswxpy_zh_Hant.po
    M locale/tbx/grassglossary_sv.tbx
    M locale/templates/grasslibs.pot
    M locale/templates/grassmods.pot
    M locale/templates/grasswxpy.pot
    M misc/m.cogo/m.cogo.html
    M misc/m.cogo/m.cogo.md
    M mswindows/external/rbatch/README.html
    M mswindows/external/rbatch/README.md
    M mswindows/external/rbatch/batchfiles.md
    M ps/ps.map/README
    M pyproject.toml
    M python/grass/app/Makefile
    M python/grass/benchmark/__init__.py
    M python/grass/benchmark/plots.py
    A python/grass/benchmark/tests/grass_benchmark_plots_test.py
    M python/grass/docs/README.md
    M python/grass/docs/_templates/header.html
    M python/grass/grassdb/history.py
    M python/grass/grassdb/testsuite/test_manage.py
    M python/grass/gunittest/testsuite/test_assertions.py
    M python/grass/gunittest/testsuite/test_checkers.py
    M python/grass/pygrass/raster/segment.py
    M python/grass/pygrass/vector/basic.py
    A python/grass/pygrass/vector/tests/test_basic.py
    M python/grass/temporal/c_libraries_interface.py
    M python/grass/temporal/core.py
    M python/grass/temporal/temporal_algebra.py
    M python/grass/temporal/temporal_extent.py
    M python/grass/temporal/testsuite/unittests_temporal_algebra_grs.py
    M python/grass/tools/session_tools.py
    M raster/r.horizon/main.c
    M raster/r.in.pdal/main.cpp
    M raster/r.mapcalc/main.c
    M raster/r.mapcalc/r.mapcalc.md
    A raster/r.mapcalc/tests/r_mapcalc_math_errors_test.py
    M raster/r.neighbors/r.neighbors.html
    M raster/r.neighbors/r.neighbors.md
    M raster/r.out.gdal/r.out.gdal.md
    M raster/r.out.vtk/r.out.vtk.html
    M raster/r.out.vtk/r.out.vtk.md
    M raster/r.proj/r.proj.html
    M raster/r.proj/r.proj.md
    M raster/r.reclass/main.c
    M raster/r.sim/r.sim.sediment/main.c
    M raster/r.sim/r.sim.sediment/r.sim.sediment.html
    M raster/r.sim/r.sim.sediment/r.sim.sediment.md
    A raster/r.sim/r.sim.sediment/tests/r_sim_sediment_random_test.py
    M raster/r.sim/r.sim.sediment/tests/r_sim_sediment_summary_test.py
    M raster/r.sim/r.sim.sediment/testsuite/data/reference_erdep.pack
    M raster/r.sim/r.sim.sediment/testsuite/data/reference_sedflux.pack
    M raster/r.sim/r.sim.sediment/testsuite/test_r_sim_sediment.py
    A raster/r.sim/r.sim.water/benchmark/benchmark_r_sim_water_nprocs.py
    M raster/r.sim/r.sim.water/main.c
    M raster/r.sim/r.sim.water/r.sim.water.html
    M raster/r.sim/r.sim.water/r.sim.water.ipynb
    M raster/r.sim/r.sim.water/r.sim.water.md
    A raster/r.sim/r.sim.water/r_sim_water_benchmark_efficiency.png
    A raster/r.sim/r.sim.water/r_sim_water_benchmark_speedup.png
    A raster/r.sim/r.sim.water/r_sim_water_benchmark_time.png
    M raster/r.sim/r.sim.water/tests/r_sim_water_landforms_test.py
    M raster/r.sim/r.sim.water/tests/r_sim_water_mannings_null_test.py
    M raster/r.sim/r.sim.water/tests/r_sim_water_nprocs_test.py
    A raster/r.sim/r.sim.water/tests/r_sim_water_random_test.py
    M raster/r.sim/r.sim.water/tests/r_sim_water_summary_test.py
    M raster/r.sim/r.sim.water/tests/r_sim_water_test.py
    A raster/r.sim/r.sim.water/tests/r_sim_water_time_series_test.py
    M raster/r.sim/r.sim.water/testsuite/data/depth_complex.pack
    M raster/r.sim/r.sim.water/testsuite/data/depth_default.pack
    M raster/r.sim/r.sim.water/testsuite/data/discharge_complex.pack
    M raster/r.sim/r.sim.water/testsuite/data/discharge_default.pack
    M raster/r.sim/r.sim.water/testsuite/test_r_sim_water.py
    M raster/r.sim/simlib/hydro.c
    M raster/r.sim/simlib/input.c
    M raster/r.sim/simlib/output.c
    M raster/r.sim/simlib/random.c
    M raster/r.sim/simlib/simlib.h
    M raster/r.sim/simlib/summary.c
    M raster/r.smooth.edgepreserve/r.smooth.edgepreserve.md
    M raster/r.viewshed/r.viewshed.html
    M raster/r.viewshed/r.viewshed.md
    M raster/r.what/testsuite/test_r_what.py
    M scripts/i.pansharpen/i.pansharpen.py
    M scripts/m.proj/m.proj.html
    M scripts/m.proj/m.proj.md
    M scripts/m.proj/m.proj.py
    M scripts/r.in.srtm/r.in.srtm.py
    M scripts/r.in.wms/wms_base.py
    M scripts/r.in.wms/wms_drv.py
    M scripts/r.reclass.area/r.reclass.area.py
    M scripts/r.tileset/r.tileset.py
    M scripts/v.dissolve/v.dissolve.html
    M scripts/v.dissolve/v.dissolve.md
    M scripts/v.rast.stats/v.rast.stats.py
    M scripts/v.what.strds/tests/v_what_strds_test.py
    M scripts/v.what.strds/v.what.strds.py
    M temporal/t.vect.what.strds/t.vect.what.strds.py
    M vector/v.class/main.c
    M vector/v.generalize/v.generalize.html
    M vector/v.generalize/v.generalize.md
    M vector/v.in.ogr/main.c
    M vector/v.profile/main.c
    M vector/v.proj/v.proj.md
    M vector/v.rectify/main.c
    M vector/vectorintro.html
    M vector/vectorintro.md

  Log Message:
  -----------
  Merge branch 'main' into renovate/main-zizmorcore-zizmor-pre-commit-1.x


Compare: https://github.com/OSGeo/grass/compare/a5b461aba9a9...e27f3c252315

To unsubscribe from these emails, change your notification settings at https://github.com/OSGeo/grass/settings/notifications


More information about the grass-commit mailing list