Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
112 commits
Select commit Hold shift + click to select a range
a70b280
dir: compare all saved metadata for UNTR directories
ttaylorr-oai Jul 11, 2026
092bd84
path-namespace: compare complete filesystem object identities
ttaylorr-oai Jul 21, 2026
405af2f
dir: consume preloaded UNTR directory stat results
ttaylorr-oai Jul 10, 2026
63c849b
dir: snapshot UNTR directory validation inputs
ttaylorr-oai Jul 10, 2026
4d84d76
dir: validate captured UNTR directory stats
ttaylorr-oai Jul 10, 2026
f09eed8
dir: validate captured UNTR directory stats in parallel
ttaylorr-oai Jul 10, 2026
92d76ca
status: overlap UNTR validation with tracked-index refresh
ttaylorr-oai Jul 21, 2026
4b4dc94
fsmonitor: require content checks for reported paths
ttaylorr-oai Jul 21, 2026
8b21397
status: gate automatic UNTR validation preloads
ttaylorr-oai Jul 26, 2026
b1fc630
fsmonitor: support provider-wide invalidation
ttaylorr-oai Jul 11, 2026
9485e67
fsmonitor: rediscover linked worktrees when starting a daemon
ttaylorr-oai Jul 24, 2026
2abb4ec
Merge standalone S01/P08 into S01
ttaylorr-oai Jul 21, 2026
270b6f0
fsmonitor: keep multiply-linked files invalid
ttaylorr Jul 11, 2026
db28363
fsmonitor: start implicit daemons with the invoking Git executable
ttaylorr-oai Jul 24, 2026
3bf0277
dir: verify cached excludes during UNTR preload
ttaylorr-oai Jul 21, 2026
60e6747
fsmonitor--daemon: invalidate globally for worktree hardlink events
ttaylorr-oai Jul 11, 2026
d0493c0
fsmonitor: ignore startup timeout configuration in daemon run
ttaylorr Jul 24, 2026
efb09a1
dir: rescan invalid collapsed UNTR witnesses
ttaylorr Jul 24, 2026
359df78
fsmonitor: invalidate conversion state for attribute-file events
ttaylorr-oai Jul 24, 2026
e89815a
fsmonitor: bind daemon queries to the canonical worktree root
ttaylorr-oai Jul 11, 2026
3a22626
dir: skip recursively valid empty UNTR subtrees
ttaylorr Jul 24, 2026
eb042ff
fsmonitor: invalidate attributes for matched directory summaries
ttaylorr-oai Jul 24, 2026
37d0ae4
preload-index: queue bounded bulk directory scans
ttaylorr Jul 24, 2026
ab71232
preload-index: classify sparse-aware bulk stat observations
ttaylorr Jul 24, 2026
aa37846
preload-index: bind APFS scans to a stable worktree root
ttaylorr-oai Jul 21, 2026
afc4ee6
Merge the S05 prerequisites
ttaylorr-oai Jul 29, 2026
08641fe
precompose: prepare Unicode configuration before parallel conversion
ttaylorr-oai Jul 21, 2026
1c1061d
Merge the S06 prerequisites
ttaylorr-oai Jul 11, 2026
caa0279
fsmonitor: validate FSMN before publishing it
ttaylorr-oai Jul 11, 2026
cf4c103
preload-index: validate packed APFS directory records
ttaylorr Jul 24, 2026
1a074bc
status: pin semantic verification to the worktree root
ttaylorr-oai Jul 11, 2026
77db739
fsmonitor: add an untracked-cache token extension
ttaylorr-oai Jul 11, 2026
f1f20ba
preload-index: walk APFS directories beneath a held root
ttaylorr Jul 24, 2026
fc93346
status: resolve semantic proof paths through pinned parents
ttaylorr-oai Jul 11, 2026
5952e41
fsmonitor: bind untracked-cache state to its token
ttaylorr-oai Jul 11, 2026
5e41690
preload-index: factor the ordinary preload eligibility predicate
ttaylorr-oai Jul 21, 2026
0ef5138
path-namespace: check reopened component identity
ttaylorr-oai Jul 24, 2026
6b66f3a
fsmonitor: validate builtin daemon responses before applying them
ttaylorr-oai Jul 10, 2026
22911e2
preload-index: enable opt-in APFS bulk preloading
ttaylorr-oai Jul 28, 2026
58de3de
status: hash tracked files through anchored descriptors
ttaylorr-oai Jul 11, 2026
533f8fc
fsmonitor: apply validated builtin path records directly
ttaylorr-oai Jul 24, 2026
9bb0380
t7529: cover APFS preload directory and root replacement
ttaylorr-oai Jul 28, 2026
a1c1756
convert: support independent conversion attribute checks
ttaylorr-oai Jul 10, 2026
61540f1
fsmonitor: ignore empty hook path records
ttaylorr-oai Jul 24, 2026
aa3a599
Merge the S11 prerequisites
ttaylorr-oai Jul 24, 2026
dda6437
status: classify candidates for semantic verification
ttaylorr-oai Jul 11, 2026
7168555
fsmonitor: centralize complete fsmonitor invalidation
ttaylorr-oai Jul 11, 2026
d18785f
preload-index: retain proven deletions from complete bulk scans
ttaylorr-oai Jul 24, 2026
7cef594
read-cache: reject out-of-bounds index extensions
ttaylorr-oai Jul 10, 2026
5a00480
status: assemble and test serial semantic proof candidates
ttaylorr-oai Jul 11, 2026
85b1cba
wt-status: separate untracked traversal from result collection
ttaylorr-oai Jul 11, 2026
c2df2b4
preload-index: classify definitive tracked-file size changes
ttaylorr-oai Jul 24, 2026
0200a18
cache-tree: avoid allocations and searches while reading
ttaylorr-oai Jul 21, 2026
4d3b510
read-cache: factor refreshed entry construction
ttaylorr-oai Jul 21, 2026
49fe843
status: apply complete semantic proofs atomically
ttaylorr-oai Jul 11, 2026
f95e261
status: close fsmonitor tokens around complete status scans
ttaylorr-oai Jul 29, 2026
6ebc45d
dir: reject oversized pattern files before allocation
ttaylorr-oai Jul 24, 2026
452d90d
status: consume definitive bulk changes exactly once
ttaylorr-oai Jul 24, 2026
f47e1cf
read-cache: decode bounded TREE and UNTR extensions in parallel
ttaylorr-oai Jul 21, 2026
1bdde05
status: refresh verified writable bulk-preload entries
ttaylorr-oai Jul 21, 2026
63f24e7
status: verify semantic proof ranges in parallel
ttaylorr-oai Jul 11, 2026
8a6156f
status: fingerprint configuration for semantic clean proofs
ttaylorr-oai Jul 11, 2026
e0b98c4
status: write bounded attribute manifests
ttaylorr-oai Jul 11, 2026
a8e66a7
status: validate attribute manifest records
ttaylorr-oai Jul 11, 2026
4338534
status: iterate changed attribute manifest entries
ttaylorr-oai Jul 11, 2026
fc7923b
status: read attribute sources through pinned paths
ttaylorr-oai Jul 11, 2026
199a318
status: build worktree attribute manifests
ttaylorr-oai Jul 11, 2026
ed40439
status: probe attribute sources in parallel
ttaylorr-oai Jul 11, 2026
42e25d3
fsmonitor: add a bounded clean-proof record format
ttaylorr-oai Jul 10, 2026
fc309a2
status: retain validated worktree attribute manifests
ttaylorr-oai Jul 10, 2026
5d2748c
path: snapshot external source namespaces
ttaylorr-oai Jul 11, 2026
89f5743
attr: fingerprint external sources in stable namespaces
ttaylorr-oai Jul 11, 2026
d73edb2
Merge the S08 prerequisites
ttaylorr-oai Jul 29, 2026
5a099ee
status: bind semantic configuration to its index
ttaylorr-oai Jul 26, 2026
5139eb9
commit: stage semantic configuration before reading the index
ttaylorr-oai Jul 26, 2026
b91d315
status: classify durable index source identities
ttaylorr-oai Jul 24, 2026
41e3003
read-cache: bind null-checksum indexes to their source file
ttaylorr-oai Jul 11, 2026
3b91385
read-cache: validate persisted fsmonitor semantic history
ttaylorr-oai Jul 24, 2026
adfbf38
read-cache: write only token-closed fsmonitor history
ttaylorr-oai Jul 24, 2026
16e0ff2
read-cache: preserve validated fsmonitor history across indexes
ttaylorr-oai Jul 11, 2026
e8e671b
status: hold external attributes stable across refresh
ttaylorr-oai Jul 21, 2026
ea91fb9
fsmonitor: seed missing-history baselines from legacy tokens
ttaylorr-oai Jul 24, 2026
2508794
status: pin index-state snapshots to the named index
ttaylorr-oai Jul 29, 2026
cc83455
fsmonitor: rebuild sparse-index history without expanding the live index
ttaylorr-oai Jul 24, 2026
ee4b9b5
status: bind each closing token to its complete proof epoch
ttaylorr-oai Jul 21, 2026
c4dfd30
fsmonitor: reopen semantic proofs after attribute events
ttaylorr-oai Jul 21, 2026
95ef8d0
status: adopt tracked history only after closing its proof
ttaylorr-oai Jul 21, 2026
6267619
wt-status: close tracked proofs before scanning untracked paths
ttaylorr Jul 24, 2026
d35bd74
commit: close fsmonitor tokens across pre-commit hooks
ttaylorr-oai Jul 21, 2026
97288f0
Merge the S13 prerequisites
ttaylorr-oai Jul 30, 2026
fcc2ebd
exclude: prove the contents of observed ignore sources
ttaylorr-oai Jul 21, 2026
b18020c
dir: capture ignore sources beneath anchored parents
ttaylorr-oai Jul 21, 2026
d0dde66
preload-index: stage proven untracked bulk results
ttaylorr-oai Jul 21, 2026
d4042c1
preload-index: collect visible paths during the APFS walk
ttaylorr-oai Jul 21, 2026
5cdd1d8
status: reuse complete APFS untracked preload results
ttaylorr-oai Jul 21, 2026
6fbcbef
preload-index: translate complete Linux statx observations
ttaylorr-oai Jul 21, 2026
e83e5cd
preload-index: anchor Linux directory opens to the worktree
ttaylorr-oai Jul 21, 2026
3233ddb
preload-index: enumerate Linux directories without trusting d_type
ttaylorr-oai Jul 21, 2026
7d0c5b4
preload-index: detect replaced Linux scan directories
ttaylorr-oai Jul 21, 2026
58f3f5c
preload-index: validate Linux mount topology around bulk scans
ttaylorr-oai Jul 21, 2026
37c3052
preload-index: enable the verified Linux bulk scan backend
ttaylorr-oai Jul 21, 2026
1d4aae6
status: close bulk content proofs with the provider token
ttaylorr-oai Jul 29, 2026
176af6b
exclude: compute stable source-proof digests
ttaylorr-oai Jul 24, 2026
e884a17
status: add a bounded clean-status sidecar format
ttaylorr-oai Jul 21, 2026
a7ebc9e
status: install sidecars against a pinned index
ttaylorr-oai Jul 24, 2026
6be2be5
status: classify indexes that clean proofs may certify
ttaylorr-oai Jul 24, 2026
a6993ad
status: issue sidecars after a verified full scan
ttaylorr-oai Jul 28, 2026
086edcb
status: load bounded clean-status sidecars
ttaylorr-oai Jul 24, 2026
9db038b
exclude: support nonblocking proof captures
ttaylorr-oai Jul 27, 2026
ac58e11
status: answer exact clean status before index deserialization
ttaylorr-oai Jul 27, 2026
3b04bff
Documentation: describe status clean-proof sidecars
ttaylorr-oai Jul 21, 2026
e025eba
Merge the status optimization topics
ttaylorr-oai Jul 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Documentation/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ TECH_DOCS += technical/send-pack-pipeline
TECH_DOCS += technical/shallow
TECH_DOCS += technical/sparse-checkout
TECH_DOCS += technical/sparse-index
TECH_DOCS += technical/status-clean-proof
TECH_DOCS += technical/trivial-merge
TECH_DOCS += technical/unambiguous-types
TECH_DOCS += technical/unit-tests
Expand Down
11 changes: 11 additions & 0 deletions Documentation/config/core.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -729,6 +729,17 @@ relatively high IO latencies. When enabled, Git will do the
index comparison to the filesystem data in parallel, allowing
overlapping IO's. Defaults to true.

core.preloadIndexBulk::
On supported filesystems, scan working tree directories in bulk before
the parallel index preload.
+
This replaces per-entry filesystem lookups with a physical directory scan,
but may cost more than normal preload depending on filesystem and cache
state. Inconclusive scans are discarded before continuing with the normal
preload. Currently this is supported on APFS, ext-family filesystems, and
XFS, and only has an effect when `core.preloadIndex` is enabled. Defaults
to false.

core.unsetenvvars::
Windows-only: comma-separated list of environment variables'
names that need to be unset before spawning any other process.
Expand Down
43 changes: 43 additions & 0 deletions Documentation/gitformat-index.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -366,6 +366,49 @@ The remaining data of each directory block is grouped by type:
- An ewah bitmap, the n-th bit indicates whether the n-th index entry
is not CE_FSMONITOR_VALID.

== File System Monitor untracked-cache token

The file system monitor untracked-cache token records the provider
token associated with an untracked-cache snapshot. The signature for
this extension is { 'F', 'S', 'U', 'C' }.

The extension consists of:

- 32-bit version number: the current version is 1.

- A NUL-terminated string containing the opaque file system monitor
token associated with the untracked-cache data.

== File System Monitor semantic proof

The file system monitor semantic proof records the configuration and
attribute inputs for a completed worktree-content verification. Its
signature is { 'F', 'S', 'C', 'F' }.

The extension consists of:

- 32-bit version number (currently 1).

- 32-bit magic number identifying version 1 records (`FSC1`).

- 32-bit flags. The low four bits respectively indicate a complete
attribute manifest, a provider-token binding, a stat-data binding, and
coverage of the full index. All other bits must be zero.

- 32-bit length of the provider token.

- 32-bit length of the attribute manifest.

- The provider token, without a terminating NUL.

- Three hashes, using the index hash algorithm, over the relevant Git
configuration, semantic-conversion configuration, and attribute state.

- The attribute manifest described by its length above.

- A hash over all preceding bytes in this extension, using the index hash
algorithm.

== End of Index Entry

The End of Index Entry (EOIE) is used to locate the end of the variable
Expand Down
1 change: 1 addition & 0 deletions Documentation/technical/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ articles = [
'shallow.adoc',
'sparse-checkout.adoc',
'sparse-index.adoc',
'status-clean-proof.adoc',
'trivial-merge.adoc',
'unambiguous-types.adoc',
'unit-tests.adoc',
Expand Down
103 changes: 103 additions & 0 deletions Documentation/technical/status-clean-proof.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
Status clean-proof sidecar
==========================

The status clean-proof sidecar is an optional cache for one exact clean
`git status --porcelain=v2` result. It is never a source of repository
state. A missing, stale, malformed, unsupported, or raced sidecar makes
status read the index and scan the worktree normally.

Location and scope
------------------

The sidecar for an index at `<index>` is stored at `<index>.csts`. This
keeps a proof for one index from being applied to an alternate index.
Sidecars are currently limited to the main worktree, the builtin file
system monitor, and an index and worktree root on local APFS file
systems.

Readers pass `O_NONBLOCK` and do not follow symbolic links when opening
the sidecar, then accept only regular files no larger than 8192 bytes.
An open or validation failure falls back to ordinary status. Writers use
the normal lockfile protocol.

Binary format
-------------

All integers are stored in network byte order. Hashes use the
repository's object-format hash algorithm. Version 1 consists of:

* Four-byte magic `CSTS`.

* A 32-bit version number (currently 1).

* 32-bit flags (currently zero).

* Fourteen 64-bit fields describing the source index: device, inode,
mode, link count, uid, gid, size, mtime seconds and nanoseconds, ctime
seconds and nanoseconds, birth time seconds and nanoseconds, and
generation.

* The 32-bit index format version and 32-bit cache-entry count.

* The index checksum and `HEAD` tree object ID.

* Hashes of status-relevant configuration and repository identity. The
repository identity covers the worktree and Git directory paths, the
worktree root identity, the local APFS identifiers of the held index
and worktree root, external-attribute contents, and locale inputs.

* One object ID digesting the unique standard-exclude observations in
first-observation order. Each observation contains the source path,
symbolic-link lookup policy, presence, and contents. Transient file
system identities used to make an observation coherent are not part
of the digest.

* A 32-bit provider-token length followed by the token without a
terminating NUL. Version 1 accepts only builtin-fsmonitor tokens.

* A hash over all preceding bytes in the sidecar.

Issuance
--------

Only a literal, top-level `status --porcelain=v2` invocation can issue a
sidecar. Status first completes the tracked and untracked scan,
semantic-conversion checks, and provider-token closure. The result must
be empty and use the bulk scanner's complete standard-exclude result.
The index must also contain persistent semantic history from an earlier
scan, so the first scan cannot certify itself.

Status then uses the held attribute snapshot and the scanner-sourced
standard-exclude digest, pins the named index, and checks its ordinary
expanded entries, `HEAD`, and the cache tree. External attribute
sources, effective replacement refs, untracked-cache results, null
index checksums, and other unsupported repository or index shapes
prevent issuance.

The sidecar is installed while the index lock remains held and after
the pinned index is rechecked. Status then rolls back the index lock, so
issuing a sidecar does not itself rewrite the index. With optional locks
disabled, status does not issue a sidecar.

Validation and races
--------------------

For the same literal command, status attempts validation before loading
the index entries. It checks the bounded sidecar, pins the named index,
and recreates the configuration, attribute, standard-exclude,
repository, and `HEAD` inputs. It then queries the builtin file system
monitor from the recorded token and accepts only an empty delta
response.

The attribute and exclude snapshots remain held across that query.
Before returning a clean result, status freshly checks configuration,
`HEAD`, uncached replacement refs, the attribute contents and namespace,
the exclude sources, and both the opened and named index identities.
The sidecar's exclude-source opens pass `O_NONBLOCK` and fail closed
when the source cannot be opened and validated; standard-exclude
symbolic links retain their normal lookup behavior.

A hit produces no output and reads only the 12-byte index header and
the 20- or 32-byte checksum trailer; it does not deserialize cache
entries, write the index, replace the sidecar, or advance its provider
token. Any failed check falls through to ordinary status.
51 changes: 51 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -413,6 +413,9 @@ include shared.mak
# `compat/fsmonitor/fsm-health-<name>.c` files
# that implement the `fsm_listen__*()` and `fsm_health__*()` routines.
#
# If a platform supports bulk worktree scans during index preload, set
# PRELOAD_INDEX_BULK_BACKEND to the name of its backend.
#
# If your platform has OS-specific ways to tell if a repo is incompatible with
# fsmonitor (whether the hook or IPC daemon version), set FSMONITOR_OS_SETTINGS
# to the "<name>" of the corresponding `compat/fsmonitor/fsm-settings-<name>.c`
Expand Down Expand Up @@ -866,6 +869,7 @@ TEST_BUILTINS_OBJS += test-repository.o
TEST_BUILTINS_OBJS += test-revision-walking.o
TEST_BUILTINS_OBJS += test-run-command.o
TEST_BUILTINS_OBJS += test-scrap-cache-tree.o
TEST_BUILTINS_OBJS += test-semantic-verify.o
TEST_BUILTINS_OBJS += test-serve-v2.o
TEST_BUILTINS_OBJS += test-sha1.o
TEST_BUILTINS_OBJS += test-sha256.o
Expand Down Expand Up @@ -1109,6 +1113,8 @@ LIB_OBJS += archive-tar.o
LIB_OBJS += archive-zip.o
LIB_OBJS += archive.o
LIB_OBJS += attr.o
LIB_OBJS += attr-fingerprint.o
LIB_OBJS += attr-manifest.o
LIB_OBJS += base85.o
LIB_OBJS += bisect.o
LIB_OBJS += blame.o
Expand All @@ -1122,6 +1128,16 @@ LIB_OBJS += cbtree.o
LIB_OBJS += chdir-notify.o
LIB_OBJS += checkout.o
LIB_OBJS += chunk-format.o
LIB_OBJS += clean-status.o
LIB_OBJS += clean-status-config.o
LIB_OBJS += clean-status-epoch.o
LIB_OBJS += clean-status-history.o
LIB_OBJS += clean-status-identity.o
LIB_OBJS += clean-status-index.o
LIB_OBJS += clean-status-manifest.o
LIB_OBJS += clean-status-sidecar.o
LIB_OBJS += clean-status-fast.o
LIB_OBJS += clean-status-sidecar-issue.o
LIB_OBJS += color.o
LIB_OBJS += column.o
LIB_OBJS += combine-diff.o
Expand Down Expand Up @@ -1167,12 +1183,14 @@ LIB_OBJS += ewah/bitmap.o
LIB_OBJS += ewah/ewah_bitmap.o
LIB_OBJS += ewah/ewah_io.o
LIB_OBJS += ewah/ewah_rlw.o
LIB_OBJS += exclude-source-proof.o
LIB_OBJS += exec-cmd.o
LIB_OBJS += fetch-negotiator.o
LIB_OBJS += fetch-object-info.o
LIB_OBJS += fetch-pack.o
LIB_OBJS += fmt-merge-msg.o
LIB_OBJS += fsck.o
LIB_OBJS += fsmonitor-clean-proof.o
LIB_OBJS += fsmonitor.o
LIB_OBJS += fsmonitor-ipc.o
LIB_OBJS += fsmonitor-settings.o
Expand Down Expand Up @@ -1255,6 +1273,7 @@ LIB_OBJS += parse-options.o
LIB_OBJS += patch-delta.o
LIB_OBJS += patch-ids.o
LIB_OBJS += path.o
LIB_OBJS += path-namespace.o
LIB_OBJS += path-walk.o
LIB_OBJS += pathspec.o
LIB_OBJS += pkt-line.o
Expand Down Expand Up @@ -1316,6 +1335,11 @@ LIB_OBJS += resolve-undo.o
LIB_OBJS += revision.o
LIB_OBJS += run-command.o
LIB_OBJS += send-pack.o
LIB_OBJS += semantic-verify-file.o
LIB_OBJS += semantic-verify-path.o
LIB_OBJS += semantic-verify-root.o
LIB_OBJS += semantic-verify-worker.o
LIB_OBJS += semantic-verify.o
LIB_OBJS += sequencer.o
LIB_OBJS += serve.o
LIB_OBJS += server-info.o
Expand Down Expand Up @@ -1374,9 +1398,20 @@ LIB_OBJS += versioncmp.o
LIB_OBJS += walker.o
LIB_OBJS += wildmatch.o
LIB_OBJS += worktree.o
LIB_OBJS += worktree-attr-manifest.o
LIB_OBJS += worktree-attr-source.o
LIB_OBJS += wrapper.o
LIB_OBJS += write-or-die.o
LIB_OBJS += ws.o
ifdef PRELOAD_INDEX_BULK_BACKEND
BASIC_CFLAGS += -DHAVE_PRELOAD_INDEX_BULK
PRELOAD_INDEX_BULK_OBJS += preload-index-bulk-index.o
PRELOAD_INDEX_BULK_OBJS += preload-index-bulk-thread.o
PRELOAD_INDEX_BULK_OBJS += preload-index-bulk.o
PRELOAD_INDEX_BULK_OBJS += compat/preload-index/bulk-$(PRELOAD_INDEX_BULK_BACKEND).o
PRELOAD_INDEX_BULK_OBJS += $(PRELOAD_INDEX_BULK_PLATFORM_OBJS)
endif
LIB_OBJS += $(PRELOAD_INDEX_BULK_OBJS)
LIB_OBJS += wt-status.o
LIB_OBJS += xdiff-interface.o
LIB_OBJS += xdiff/xdiffi.o
Expand Down Expand Up @@ -1535,9 +1570,22 @@ THIRD_PARTY_SOURCES += sha1dc/%
THIRD_PARTY_SOURCES += $(UNIT_TEST_DIR)/clar/%
THIRD_PARTY_SOURCES += $(UNIT_TEST_DIR)/clar/clar/%

CLAR_TEST_SUITES += u-attr-fingerprint
CLAR_TEST_SUITES += u-attr-manifest
CLAR_TEST_SUITES += u-clean-status-config
CLAR_TEST_SUITES += u-clean-status-history
CLAR_TEST_SUITES += u-clean-status-identity
CLAR_TEST_SUITES += u-clean-status-index
CLAR_TEST_SUITES += u-clean-status-manifest
CLAR_TEST_SUITES += u-clean-status-sidecar
CLAR_TEST_SUITES += u-clean-status-store
CLAR_TEST_SUITES += u-ctype
CLAR_TEST_SUITES += u-dir
CLAR_TEST_SUITES += u-example-decorate
CLAR_TEST_SUITES += u-exclude-source-proof
CLAR_TEST_SUITES += u-fsmonitor-attributes
CLAR_TEST_SUITES += u-fsmonitor-clean-proof
CLAR_TEST_SUITES += u-fsmonitor-response
CLAR_TEST_SUITES += u-hash
CLAR_TEST_SUITES += u-hashmap
CLAR_TEST_SUITES += u-list-objects-filter-options
Expand All @@ -1546,7 +1594,9 @@ CLAR_TEST_SUITES += u-odb-inmemory
CLAR_TEST_SUITES += u-oid-array
CLAR_TEST_SUITES += u-oidmap
CLAR_TEST_SUITES += u-oidtree
CLAR_TEST_SUITES += u-path-namespace
CLAR_TEST_SUITES += u-prio-queue
CLAR_TEST_SUITES += u-preload-index-bulk-darwin
CLAR_TEST_SUITES += u-reftable-basics
CLAR_TEST_SUITES += u-reftable-block
CLAR_TEST_SUITES += u-reftable-merged
Expand All @@ -1562,6 +1612,7 @@ CLAR_TEST_SUITES += u-strvec
CLAR_TEST_SUITES += u-trailer
CLAR_TEST_SUITES += u-urlmatch-normalization
CLAR_TEST_SUITES += u-utf8-width
CLAR_TEST_SUITES += u-worktree-attr-source
CLAR_TEST_PROG = $(UNIT_TEST_BIN)/unit-tests$(X)
CLAR_TEST_OBJS = $(patsubst %,$(UNIT_TEST_DIR)/%.o,$(CLAR_TEST_SUITES))
CLAR_TEST_OBJS += $(UNIT_TEST_DIR)/clar/clar.o
Expand Down
5 changes: 3 additions & 2 deletions apply.c
Original file line number Diff line number Diff line change
Expand Up @@ -3539,8 +3539,9 @@ static int verify_index_match(struct apply_state *state,
return -1;
return 0;
}
return ie_match_stat(state->repo->index, ce, st,
CE_MATCH_IGNORE_VALID | CE_MATCH_IGNORE_SKIP_WORKTREE);
return ie_match_stat_with_content_check(
state->repo->index, ce, st,
CE_MATCH_IGNORE_VALID | CE_MATCH_IGNORE_SKIP_WORKTREE);
}

#define SUBMODULE_PATCH_WITHOUT_INDEX 1
Expand Down
Loading
Loading