<feed xmlns='http://www.w3.org/2005/Atom'>
<title>projectile.git, branch dirconfig-improvements</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/projectile.git/'/>
<entry>
<title>Warn when a + keep entry contains glob metacharacters</title>
<updated>2026-04-25T21:50:36+00:00</updated>
<author>
<name>Bozhidar Batsov</name>
<email>bozhidar@toptal.com</email>
</author>
<published>2026-04-25T21:50:36+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/projectile.git/commit/?id=a8a90311044f240f9b1d4789a32d5144f8d955ec'/>
<id>a8a90311044f240f9b1d4789a32d5144f8d955ec</id>
<content type='text'>
The parser silently turns every keep entry into a directory via
file-name-as-directory, which means a user-typed +*.json or +/foo.txt
becomes "*.json/" or "foo.txt/" and quietly never matches anything.
Spot the obvious misuses (anything containing *, ?, or [) at parse
time and emit a warning so the user can correct the file or move the
pattern to an ignore/ensure rule.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The parser silently turns every keep entry into a directory via
file-name-as-directory, which means a user-typed +*.json or +/foo.txt
becomes "*.json/" or "foo.txt/" and quietly never matches anything.
Spot the obvious misuses (anything containing *, ?, or [) at parse
time and emit a warning so the user can correct the file or move the
pattern to an ignore/ensure rule.
</pre>
</div>
</content>
</entry>
<entry>
<title>Add real-file integration tests for the dirconfig parser</title>
<updated>2026-04-25T21:49:20+00:00</updated>
<author>
<name>Bozhidar Batsov</name>
<email>bozhidar@toptal.com</email>
</author>
<published>2026-04-25T21:49:20+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/projectile.git/commit/?id=82fd4a5d3ab97cf5a8fdf65c38a68995ec1b3ef1'/>
<id>82fd4a5d3ab97cf5a8fdf65c38a68995ec1b3ef1</id>
<content type='text'>
The existing parser tests stub insert-file-contents; nothing exercises
the full IO path. Add three sandbox-based tests: a mixed +/-/!/no-prefix
file, a non-ASCII round-trip, and a file with no trailing newline. These
guard against IO-layer regressions that the stubbed tests can't see.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The existing parser tests stub insert-file-contents; nothing exercises
the full IO path. Add three sandbox-based tests: a mixed +/-/!/no-prefix
file, a non-ASCII round-trip, and a file with no trailing newline. These
guard against IO-layer regressions that the stubbed tests can't see.
</pre>
</div>
</content>
</entry>
<entry>
<title>Warn when alien indexing bypasses a populated .projectile</title>
<updated>2026-04-25T18:00:09+00:00</updated>
<author>
<name>Bozhidar Batsov</name>
<email>bozhidar@toptal.com</email>
</author>
<published>2026-04-25T18:00:09+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/projectile.git/commit/?id=5e4471b10dc59274e7608489b28897a69c585cc8'/>
<id>5e4471b10dc59274e7608489b28897a69c585cc8</id>
<content type='text'>
Under alien indexing the dirconfig file is silently ignored, which
is the most common confusion in the issue tracker (#1322, #1075,
#1534, #1941). Show a one-shot display-warning the first time we
index a project where alien mode meets a non-empty .projectile.

The new projectile-warn-when-dirconfig-is-ignored option lets users
who already understand the trade-off silence the warning.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Under alien indexing the dirconfig file is silently ignored, which
is the most common confusion in the issue tracker (#1322, #1075,
#1534, #1941). Show a one-shot display-warning the first time we
index a project where alien mode meets a non-empty .projectile.

The new projectile-warn-when-dirconfig-is-ignored option lets users
who already understand the trade-off silence the warning.
</pre>
</div>
</content>
</entry>
<entry>
<title>Document the dirconfig format more precisely</title>
<updated>2026-04-25T17:56:57+00:00</updated>
<author>
<name>Bozhidar Batsov</name>
<email>bozhidar@toptal.com</email>
</author>
<published>2026-04-25T17:56:57+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/projectile.git/commit/?id=54387baa2e2bd7af9866abd27f5454da71cdbd22'/>
<id>54387baa2e2bd7af9866abd27f5454da71cdbd22</id>
<content type='text'>
The parser docstring only described + and - prefixes even though the
function returns a 3-tuple including the ! ensure bucket. Fill that
in, and pull the path-vs-glob distinction out of the prose in
projects.adoc into a subsection of its own — that ambiguity is at
the root of recurring confusion (#740, #1109, #680, #1941).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The parser docstring only described + and - prefixes even though the
function returns a 3-tuple including the ! ensure bucket. Fill that
in, and pull the path-vs-glob distinction out of the prose in
projects.adoc into a subsection of its own — that ambiguity is at
the root of recurring confusion (#740, #1109, #680, #1941).
</pre>
</div>
</content>
</entry>
<entry>
<title>Add tests for the dirconfig cache</title>
<updated>2026-04-25T17:56:12+00:00</updated>
<author>
<name>Bozhidar Batsov</name>
<email>bozhidar@toptal.com</email>
</author>
<published>2026-04-25T17:56:12+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/projectile.git/commit/?id=925688ed5c0c7b7a9e97a47eaf2e2c63771aea35'/>
<id>925688ed5c0c7b7a9e97a47eaf2e2c63771aea35</id>
<content type='text'>
The mtime-keyed cache around projectile-parse-dirconfig-file had no
direct coverage. Cover the four invariants that matter: a cache hit
on repeat calls, a re-parse when mtime advances, no caching of a nil
result for a missing file, and entry removal via
projectile-invalidate-cache (the path that previously crashed in #1854).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The mtime-keyed cache around projectile-parse-dirconfig-file had no
direct coverage. Cover the four invariants that matter: a cache hit
on repeat calls, a re-parse when mtime advances, no caching of a nil
result for a missing file, and entry removal via
projectile-invalidate-cache (the path that previously crashed in #1854).
</pre>
</div>
</content>
</entry>
<entry>
<title>Skip leading whitespace in dirconfig prefix dispatch</title>
<updated>2026-04-25T17:55:30+00:00</updated>
<author>
<name>Bozhidar Batsov</name>
<email>bozhidar@toptal.com</email>
</author>
<published>2026-04-25T17:55:30+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/projectile.git/commit/?id=930564202e350d5d6c73d6fc765b1cc29cb48f38'/>
<id>930564202e350d5d6c73d6fc765b1cc29cb48f38</id>
<content type='text'>
A user accidentally typing " -path/" or "  # comment" in .projectile
would have the line silently routed to the ignore bucket with the
prefix character left intact, because the parser dispatched on the
first character of the line without trimming. Skip leading spaces and
tabs before the pcase so the +/-/! and comment-prefix markers are
matched regardless of indentation. Reported in #1508.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
A user accidentally typing " -path/" or "  # comment" in .projectile
would have the line silently routed to the ignore bucket with the
prefix character left intact, because the parser dispatched on the
first character of the line without trimming. Skip leading spaces and
tabs before the pcase so the +/-/! and comment-prefix markers are
matched regardless of indentation. Reported in #1508.
</pre>
</div>
</content>
</entry>
<entry>
<title>Disambiguate process buffer names for same-named projects</title>
<updated>2026-03-10T08:58:58+00:00</updated>
<author>
<name>Bozhidar Batsov</name>
<email>bozhidar@batsov.dev</email>
</author>
<published>2026-02-15T15:07:42+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/projectile.git/commit/?id=f8be23b266aec7108fb4b80410623cd50ba8ded9'/>
<id>f8be23b266aec7108fb4b80410623cd50ba8ded9</id>
<content type='text'>
Fixes #1815
Fixes #1715

When two projects share the same name (e.g. both named "src"),
projectile-generate-process-name now detects the collision and
falls back to using the abbreviated project path in the buffer
name instead of just the project name.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Fixes #1815
Fixes #1715

When two projects share the same name (e.g. both named "src"),
projectile-generate-process-name now detects the collision and
falls back to using the abbreviated project path in the buffer
name instead of just the project name.
</pre>
</div>
</content>
</entry>
<entry>
<title>Check globally-ignored-file-suffixes in native indexing</title>
<updated>2026-03-10T08:57:24+00:00</updated>
<author>
<name>Bozhidar Batsov</name>
<email>bozhidar@batsov.dev</email>
</author>
<published>2026-02-15T15:09:31+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/projectile.git/commit/?id=659eda8ee7159f70ceef278060e9acd52ed01c6a'/>
<id>659eda8ee7159f70ceef278060e9acd52ed01c6a</id>
<content type='text'>
Fixes #1959

projectile-ignored-file-p now checks projectile-globally-ignored-file-suffixes
in addition to projectile-globally-ignored-files and file patterns.
Previously the suffix check only happened in projectile-remove-ignored
which is used by hybrid indexing but not native indexing.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Fixes #1959

projectile-ignored-file-p now checks projectile-globally-ignored-file-suffixes
in addition to projectile-globally-ignored-files and file patterns.
Previously the suffix check only happened in projectile-remove-ignored
which is used by hybrid indexing but not native indexing.
</pre>
</div>
</content>
</entry>
<entry>
<title>Allow projectile-dired commands to prompt for a project</title>
<updated>2026-03-10T08:56:36+00:00</updated>
<author>
<name>Bozhidar Batsov</name>
<email>bozhidar@batsov.dev</email>
</author>
<published>2026-02-15T16:22:17+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/projectile.git/commit/?id=947bb9eada4ed8c57777dd7027d1d0b373b3b0db'/>
<id>947bb9eada4ed8c57777dd7027d1d0b373b3b0db</id>
<content type='text'>
Closes #1684

With a prefix argument, projectile-dired, projectile-dired-other-window,
and projectile-dired-other-frame now prompt for a known project to open
in dired, rather than always using the current project.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Closes #1684

With a prefix argument, projectile-dired, projectile-dired-other-window,
and projectile-dired-other-frame now prompt for a known project to open
in dired, rather than always using the current project.
</pre>
</div>
</content>
</entry>
<entry>
<title>Filter projectile-replace results through project ignore rules</title>
<updated>2026-03-10T08:56:03+00:00</updated>
<author>
<name>Bozhidar Batsov</name>
<email>bozhidar@batsov.dev</email>
</author>
<published>2026-02-15T16:23:47+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/projectile.git/commit/?id=0bf326a4a421f1aed9a23a923e5ee799f33480cb'/>
<id>0bf326a4a421f1aed9a23a923e5ee799f33480cb</id>
<content type='text'>
Closes #1227

projectile-replace now intersects the files found by rg/ag/grep with
the project's file list from projectile-dir-files, ensuring that files
ignored via .projectile or other ignore rules are excluded from
replacement. Previously the external search tool's results were used
directly, which could include backup files and other ignored entries.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Closes #1227

projectile-replace now intersects the files found by rg/ag/grep with
the project's file list from projectile-dir-files, ensuring that files
ignored via .projectile or other ignore rules are excluded from
replacement. Previously the external search tool's results were used
directly, which could include backup files and other ignored entries.
</pre>
</div>
</content>
</entry>
</feed>
