scm.sh ls-files: Honor -f in Git repositories

In CVS, the -f option keeps directory entries out of scm.sh ls-file's
listing; in Git, it's a silent no-op. Notably symlinks are not excluded
despite -f.

Implement -f for git with a mode filter on git ls-files -s output: only
100644 and 100755 entries are listed, so the option means the same thing in
both code paths.

For Git, this actually means a behaviour change which needs to be fixed:

The dist archive targets tar-files and cpio-files in make/list-files.mk and
the scm_files() helper in scripts/pkg.sh then may no longer pass it to get
unchanged behaviour.

The targets list-files and list-text-files keep it, so the text-files cache
now matches its documented regular-files-only membership.

Assisted-by: unsloth/Qwen3.8-27B-GGUF:Q4_K_M with pi.dev v0.85.1
Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
Jan Lindemann 2026-09-16 12:19:18 +02:00
commit 7cec102691
Signed by: Jan Lindemann
GPG key ID: 3750640C9E25DD61
4 changed files with 15 additions and 5 deletions

View file

@ -113,7 +113,7 @@ reverse = $(if $(wordlist 2,2,$(1)),$(call reverse,$(wordli
make_subdirs = set -e; for D in $(SUBDIRS) ; do make -C $$D ; done
make_subdirs_target = set -e; for D in $(SUBDIRS) ; do make -C $$D $@; done
install_local_cfg = $(INSTALL) -p -o $(CFGOWNER) -g $(CFGGROUP) -m $(CFGMODE) $< $@
cvs_files = sh $(JWB_SCRIPT_DIR)/scm.sh ls-files -f
cvs_files = sh $(JWB_SCRIPT_DIR)/scm.sh ls-files
add_flavour_prefix = $(SED) "s/\([^ ][^ ]*\) *\([<>=]*\) *\([^ ]*\)/$(FLAVOUR_PREFIX)\1 \2 \3/g"
beautify_lib_path = $(SED) 's/:/\n + /g'
find_files = $(wildcard $(addsuffix /$(1),$(patsubst :, ,$(2))))

View file

@ -10,9 +10,9 @@ list-text-files echo-text-files:
$(Q)$(LIST_VCS_FILES) -ft
tar-files:
$(Q)$(LIST_VCS_FILES) $(TOPDIR) -f | xargs tar -C $(TOPDIR) -cf -
$(Q)$(LIST_VCS_FILES) $(TOPDIR) | xargs tar -C $(TOPDIR) -cf -
cpio-files:
$(Q)$(LIST_VCS_FILES) $(TOPDIR) -f | cpio --directory=$(TOPDIR) -o -H newc
$(Q)$(LIST_VCS_FILES) $(TOPDIR) | cpio --directory=$(TOPDIR) -o -H newc
endif # ifndef LIST_FILES_MK_INCLUDED