aboutsummaryrefslogtreecommitdiffstats
path: root/desktop/modules/git/Git.js
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/modules/git/Git.js')
-rw-r--r--desktop/modules/git/Git.js27
1 files changed, 27 insertions, 0 deletions
diff --git a/desktop/modules/git/Git.js b/desktop/modules/git/Git.js
new file mode 100644
index 0000000..008fefc
--- /dev/null
+++ b/desktop/modules/git/Git.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2026 Danilo M. <danix@danix.xyz>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License version 2 as
+// published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+.pragma library
+
+// Pure helpers for the git page, tested by test_git.js under node.
+
+// `gitcfg list` (git config -z --list) into [{name, section, key, value}],
+// in file order. The key is after the last dot, so a subsection stays in the
+// section: color.branch.remote is section color.branch.
+function parse(text) {
+ return text.split("\0").filter(e => e !== "").map(e => {
+ const nl = e.indexOf("\n");
+ const name = nl < 0 ? e : e.slice(0, nl);
+ const dot = name.lastIndexOf(".");
+ return { name, section: name.slice(0, dot), key: name.slice(dot + 1),
+ value: nl < 0 ? "" : e.slice(nl + 1) };
+ });
+}