Skip to content

Commit 9f3f395

Browse files
authored
refactor(config): unify bidirectional config key mapping (#115)
Add cfg_map_from_file_key() as the canonical reverse mapping function (mirror of cfg_map_to_file_key). Replace the inline 17-line case block in cfg_list with a 2-line call. Both directions now live side-by-side, eliminating the manual sync requirement.
1 parent 3405ab6 commit 9f3f395

1 file changed

Lines changed: 27 additions & 19 deletions

File tree

lib/config.sh

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,31 @@ cfg_map_to_file_key() {
102102
esac
103103
}
104104

105+
# Map a .gtrconfig key to its gtr.* config equivalent (reverse of cfg_map_to_file_key)
106+
# Usage: cfg_map_from_file_key <file_key>
107+
# Returns: mapped gtr.* key, or empty if no mapping exists
108+
cfg_map_from_file_key() {
109+
case "$1" in
110+
copy.include) echo "gtr.copy.include" ;;
111+
copy.exclude) echo "gtr.copy.exclude" ;;
112+
copy.includeDirs) echo "gtr.copy.includeDirs" ;;
113+
copy.excludeDirs) echo "gtr.copy.excludeDirs" ;;
114+
hooks.postCreate) echo "gtr.hook.postCreate" ;;
115+
hooks.preRemove) echo "gtr.hook.preRemove" ;;
116+
hooks.postRemove) echo "gtr.hook.postRemove" ;;
117+
hooks.postCd) echo "gtr.hook.postCd" ;;
118+
defaults.editor) echo "gtr.editor.default" ;;
119+
editor.workspace) echo "gtr.editor.workspace" ;;
120+
defaults.ai) echo "gtr.ai.default" ;;
121+
worktrees.dir) echo "gtr.worktrees.dir" ;;
122+
worktrees.prefix) echo "gtr.worktrees.prefix" ;;
123+
defaults.branch) echo "gtr.defaultBranch" ;;
124+
defaults.provider) echo "gtr.provider" ;;
125+
gtr.*) echo "$1" ;;
126+
*) echo "" ;;
127+
esac
128+
}
129+
105130
# Get all values for a multi-valued config key
106131
# Usage: cfg_get_all key [file_key] [scope]
107132
# file_key: optional key name in .gtrconfig (e.g., "copy.include" for gtr.copy.include)
@@ -300,25 +325,8 @@ cfg_list() {
300325
fvalue=""
301326
fi
302327
# Map .gtrconfig keys to gtr.* format
303-
case "$fkey" in
304-
copy.include) mapped_key="gtr.copy.include" ;;
305-
copy.exclude) mapped_key="gtr.copy.exclude" ;;
306-
copy.includeDirs) mapped_key="gtr.copy.includeDirs" ;;
307-
copy.excludeDirs) mapped_key="gtr.copy.excludeDirs" ;;
308-
hooks.postCreate) mapped_key="gtr.hook.postCreate" ;;
309-
hooks.preRemove) mapped_key="gtr.hook.preRemove" ;;
310-
hooks.postRemove) mapped_key="gtr.hook.postRemove" ;;
311-
hooks.postCd) mapped_key="gtr.hook.postCd" ;;
312-
defaults.editor) mapped_key="gtr.editor.default" ;;
313-
editor.workspace) mapped_key="gtr.editor.workspace" ;;
314-
defaults.ai) mapped_key="gtr.ai.default" ;;
315-
defaults.branch) mapped_key="gtr.defaultBranch" ;;
316-
defaults.provider) mapped_key="gtr.provider" ;;
317-
worktrees.dir) mapped_key="gtr.worktrees.dir" ;;
318-
worktrees.prefix) mapped_key="gtr.worktrees.prefix" ;;
319-
gtr.*) mapped_key="$fkey" ;;
320-
*) continue ;; # Skip unmapped keys
321-
esac
328+
mapped_key=$(cfg_map_from_file_key "$fkey")
329+
[ -z "$mapped_key" ] && continue # Skip unmapped keys
322330
_cfg_list_add_entry ".gtrconfig" "$mapped_key" "$fvalue"
323331
done < <(git config -f "$config_file" --get-regexp '.' 2>/dev/null || true)
324332
fi

0 commit comments

Comments
 (0)