1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 package org.eclipse.jgit.pgm;
39
40 import java.io.File;
41 import java.io.IOException;
42 import java.util.Set;
43
44 import org.eclipse.jgit.errors.ConfigInvalidException;
45 import org.eclipse.jgit.lib.Constants;
46 import org.eclipse.jgit.lib.StoredConfig;
47 import org.eclipse.jgit.pgm.internal.CLIText;
48 import org.eclipse.jgit.storage.file.FileBasedConfig;
49 import org.eclipse.jgit.util.FS;
50 import org.eclipse.jgit.util.StringUtils;
51 import org.eclipse.jgit.util.SystemReader;
52 import org.kohsuke.args4j.Option;
53
54 @Command(common = true, usage = "usage_getAndSetOptions")
55 class Config extends TextBuiltin {
56 @Option(name = "--system", usage = "usage_configSystem")
57 private boolean system;
58
59 @Option(name = "--global", usage = "usage_configGlobal")
60 private boolean global;
61
62 @Option(name = "--local", usage = "usage_configLocal")
63 private boolean local;
64
65 @Option(name = "--list", aliases = { "-l" }, usage = "usage_configList")
66 private boolean list;
67
68 @Option(name = "--file", aliases = { "-f" }, metaVar = "metaVar_file", usage = "usage_configFile")
69 private File configFile;
70
71
72 @Override
73 protected void run() {
74 if (!list) {
75 throw die(CLIText.get().configOnlyListOptionSupported);
76 }
77 try {
78 list();
79 } catch (IOException | ConfigInvalidException e) {
80 throw die(e.getMessage(), e);
81 }
82 }
83
84 private void list() throws IOException, ConfigInvalidException {
85 final FS fs = getRepository().getFS();
86 if (configFile != null) {
87 list(new FileBasedConfig(configFile, fs));
88 return;
89 }
90 if (system
91 || (isListAll() && StringUtils.isEmptyOrNull(SystemReader
92 .getInstance()
93 .getenv(Constants.GIT_CONFIG_NOSYSTEM_KEY))))
94 list(SystemReader.getInstance().openSystemConfig(null, fs));
95 if (global || isListAll())
96 list(SystemReader.getInstance().openUserConfig(null, fs));
97 if (local || isListAll())
98 list(new FileBasedConfig(fs.resolve(getRepository().getDirectory(),
99 Constants.CONFIG), fs));
100 }
101
102 private boolean isListAll() {
103 return !system && !global && !local && configFile == null;
104 }
105
106 private void list(StoredConfig config) throws IOException,
107 ConfigInvalidException {
108 config.load();
109 Set<String> sections = config.getSections();
110 for (String section : sections) {
111 Set<String> names = config.getNames(section);
112 for (String name : names) {
113 for (String value : config.getStringList(section, null, name))
114 outw.println(section + "." + name + "=" + value);
115 }
116 if (names.isEmpty()) {
117 for (String subsection : config.getSubsections(section)) {
118 names = config.getNames(section, subsection);
119 for (String name : names) {
120 for (String value : config.getStringList(section,
121 subsection, name))
122 outw.println(section + "." + subsection + "."
123 + name + "=" + value);
124 }
125 }
126 }
127 }
128 }
129 }