Skip to content

feat: add lexists template function - #762

Open
JamBalaya56562 wants to merge 3 commits into
nginx-proxy:mainfrom
JamBalaya56562:feat/187-lexists
Open

feat: add lexists template function#762
JamBalaya56562 wants to merge 3 commits into
nginx-proxy:mainfrom
JamBalaya56562:feat/187-lexists

Conversation

@JamBalaya56562

@JamBalaya56562 JamBalaya56562 commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds a lexists template function — the os.Lstat counterpart of the existing exists.

exists is backed by os.Stat, which follows symlinks, so a symlink whose target is missing (a dangling link) reports as non-existent. lexists uses os.Lstat, which stats the link itself without following it, so it returns true for the symlink even when its target is unavailable. This is the behaviour requested in #187 (check for existence without traversing the symlink).

Change

  • internal/utils: add PathLExists, mirroring PathExists but using os.Lstat instead of os.Stat (same fs.ErrNotExist handling).
  • internal/template: register it in the template FuncMap as lexists, next to exists.
  • README.md: document lexists alongside exists.

Tests

TestPathLExists covers an existing file (true), a missing path (false), and — the distinguishing case — a dangling symlink, asserting lexists returns true while exists returns false. The symlink portion is skipped where symlink creation isn't permitted (e.g. Windows without the privilege).

Fixes #187

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds a new lexists template function to check path existence without following symlinks, addressing the dangling-symlink behavior requested in #187.

Changes:

  • Add internal/utils.PathLExists, implemented via os.Lstat (symlink-aware existence check).
  • Register lexists in the template FuncMap alongside exists.
  • Document lexists in the README function list and add unit test coverage for normal/missing/dangling-symlink cases.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

File Description
README.md Documents the new lexists template function behavior and usage.
internal/utils/utils.go Adds PathLExists helper using os.Lstat for non-following symlink existence checks.
internal/utils/utils_test.go Adds TestPathLExists, including the distinguishing dangling-symlink behavior.
internal/template/template.go Registers lexists in the template function map.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread internal/utils/utils.go
Comment thread internal/utils/utils_test.go Outdated
JamBalaya56562 and others added 2 commits July 28, 2026 00:53
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Replace the hard-coded /wrong/path with a path under t.TempDir() that is
never created, so the missing-path and dangling-symlink assertions do not
depend on a path outside the test's control. Unit tests also run on
windows-latest, where /wrong/path resolves against the current drive.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add lexists function

2 participants