SetLockableReadonly performance with no lockable files
Describe the issue
I noticed that our post-checkout was taking a fairly long time when doing a git-checkout. It was almost always taking roughly 3.5s1. Once I ran git config lfs.SetLockableReadonly false that time got almost entirely eliminated (post-checkout only taking 0.08s).
What was confusing to me is the fact that lfs.locksverify was turned off and that the repository had no lockable files (empty git ls-files | git check-attr --stdin lockable | awk -F': ' '$3 ~ /set/ { print $1 }') to begin with.
Should this option then not have any performance impact? What are the implications of having SetLockableReadonly turned off when no files are lockable and lfs.locksverify is also turned off? Should git-lfs maybe warn if lfs.SetLockableReadonly is true when there are no lockable files?
1 GIT_TRACE_PERFORMANCE=true git checkout master printing 14:45:49.833603 trace.c:411 performance: 3.583822000 s: git command: git lfs post-checkout 197348d8c4d497186cac6df28d52c80f7cdee2d8 e8868500b8d664ec8eb5159013fa3950404bca90 1
System environment
System:
OS: macOS 13.4.1
CPU: (10) x64 Apple M1 Pro
Memory: 793.52 MB / 32.00 GB
Shell: 5.9 - /bin/zshOutput of git lfs env
git-lfs/3.3.0 (GitHub; darwin arm64; go 1.19.3)
git version 2.37.1 (Apple Git-137.1)
Endpoint=https://stash.int.klarna.net/klapp/klarna-app.git/info/lfs (auth=basic)
[email protected]:/klapp/klarna-app.git
LocalWorkingDir=/Users/sebastian.silbermann/klapp3
LocalGitDir=/Users/sebastian.silbermann/klapp/.git/worktrees/klapp3
LocalGitStorageDir=/Users/sebastian.silbermann/klapp/.git
LocalMediaDir=/Users/sebastian.silbermann/klapp/.git/lfs/objects
LocalReferenceDirs=
TempDir=/Users/sebastian.silbermann/klapp/.git/lfs/tmp
ConcurrentTransfers=8
TusTransfers=false
BasicTransfersOnly=false
SkipDownloadErrors=false
FetchRecentAlways=false
FetchRecentRefsDays=7
FetchRecentCommitsDays=0
FetchRecentRefsIncludeRemotes=true
PruneOffsetDays=3
PruneVerifyRemoteAlways=false
PruneRemoteName=origin
LfsStorageDir=/Users/sebastian.silbermann/klapp/.git/lfs
AccessDownload=basic
AccessUpload=basic
DownloadTransfers=basic,lfs-standalone-file,ssh
UploadTransfers=basic,lfs-standalone-file,ssh
GIT_EXEC_PATH=/Applications/Xcode.app/Contents/Developer/usr/libexec/git-core
git config filter.lfs.process = "git-lfs filter-process"
git config filter.lfs.smudge = "git-lfs smudge -- %f"
git config filter.lfs.clean = "git-lfs clean -- %f"Additional context
170k checked in files 24k checked into lfs
$ git ls-files | wc -l
172655
$ git lfs ls-files | wc -l
24441 .gitattributes:
*.pbxproj -text
clients/**/*.jpg filter=lfs diff=lfs merge=lfs -text
clients/**/*.jpeg filter=lfs diff=lfs merge=lfs -text
clients/**/*.png filter=lfs diff=lfs merge=lfs -text
clients/**/*.gif filter=lfs diff=lfs merge=lfs -text
clients/**/*.mov filter=lfs diff=lfs merge=lfs -text
clients/**/*.webp filter=lfs diff=lfs merge=lfs -text
deploy/*.png filter=lfs diff=lfs merge=lfs -text
deploy/teams/*.png filter=lfs diff=lfs merge=lfs -text
docs/favicon.ico filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*-amd64 filter=lfs diff=lfs merge=lfs -text
*.mp4 filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.sketch filter=lfs diff=lfs merge=lfs -text
*.tar.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
docker/cw-exporter/files/cloudwatch_exporter filter=lfs diff=lfs merge=lfs -text
bin/shellcheck_* filter=lfs diff=lfs merge=lfs -text
websites/kleco-docs/**/*.jp* filter=lfs diff=lfs merge=lfs -text
websites/kleco-docs/**/*.png filter=lfs diff=lfs merge=lfs -text
websites/kleco-docs/**/*.gif filter=lfs diff=lfs merge=lfs -text
websites/kleco-docs/**/*.mov filter=lfs diff=lfs merge=lfs -text
websites/kleco-docs/**/*.mp* filter=lfs diff=lfs merge=lfs -text
websites/kleco-docs/**/*.pdf* filter=lfs diff=lfs merge=lfs -text
services/consumer-banking-onboarding/**/*.webp filter=lfs diff=lfs merge=lfs -textSource: git-lfs/git-lfs