Proposal: Namespace all git-drs configuration under lfs.customtransfer.drs.*
Summary
Standardize all git-drs configuration so that every config key is namespaced under:
This aligns git-drs with Git LFS custom transfer conventions, avoids global namespace pollution, and makes configuration intent unambiguous.
Current State
The current configuration mixes LFS-scoped keys with global drs.* keys:
lfs.standalonetransferagent=drs
lfs.customtransfer.drs.path=git-drs
lfs.customtransfer.drs.upsert=true
lfs.customtransfer.drs.multipart-threshold=10
lfs.customtransfer.drs.args=transfer
lfs.customtransfer.drs.concurrent=true
lfs.customtransfer.drs.enable-data-client-logs=false
drs.default-remote=calypr-dev
drs.remote.calypr-dev.type=gen3
drs.remote.calypr-dev.endpoint=https://calypr-dev.ohsu.edu/
drs.remote.calypr-dev.project=cbds-monorepos
drs.remote.calypr-dev.bucket=cbds
Problems With the Current Layout
1. Namespace pollution
Using top-level drs.* keys pollutes the global git config namespace and risks collisions.
2. Ambiguous ownership
These settings are only meaningful to the drs LFS transfer agent.
3. Harder debugging
Users expect LFS-related config under lfs.*.
4. Inconsistent with Git LFS patterns
Git LFS extensions consistently scope under lfs.customtransfer.<name>.*.
Proposed Change
All git-drs configuration must live under:
Mapping
| Current key |
Proposed key |
drs.default-remote |
lfs.customtransfer.drs.default-remote |
drs.remote.<name>.type |
lfs.customtransfer.drs.remote.<name>.type |
drs.remote.<name>.endpoint |
lfs.customtransfer.drs.remote.<name>.endpoint |
drs.remote.<name>.project |
lfs.customtransfer.drs.remote.<name>.project |
drs.remote.<name>.bucket |
lfs.customtransfer.drs.remote.<name>.bucket |
Backward Compatibility
Support both namespaces temporarily and emit a deprecation warning for drs.*.
Recommendation
Adopt a strict rule:
All configuration consumed by the drs Git LFS transfer agent must be prefixed with lfs.customtransfer.drs.
Proposal: Namespace all git-drs configuration under
lfs.customtransfer.drs.*Summary
Standardize all
git-drsconfiguration so that every config key is namespaced under:This aligns
git-drswith Git LFS custom transfer conventions, avoids global namespace pollution, and makes configuration intent unambiguous.Current State
The current configuration mixes LFS-scoped keys with global
drs.*keys:Problems With the Current Layout
1. Namespace pollution
Using top-level
drs.*keys pollutes the global git config namespace and risks collisions.2. Ambiguous ownership
These settings are only meaningful to the
drsLFS transfer agent.3. Harder debugging
Users expect LFS-related config under
lfs.*.4. Inconsistent with Git LFS patterns
Git LFS extensions consistently scope under
lfs.customtransfer.<name>.*.Proposed Change
All
git-drsconfiguration must live under:Mapping
drs.default-remotelfs.customtransfer.drs.default-remotedrs.remote.<name>.typelfs.customtransfer.drs.remote.<name>.typedrs.remote.<name>.endpointlfs.customtransfer.drs.remote.<name>.endpointdrs.remote.<name>.projectlfs.customtransfer.drs.remote.<name>.projectdrs.remote.<name>.bucketlfs.customtransfer.drs.remote.<name>.bucketBackward Compatibility
Support both namespaces temporarily and emit a deprecation warning for
drs.*.Recommendation
Adopt a strict rule: