~ubuntu-branches/ubuntu/intrepid/git-core/intrepid-security

« back to all changes in this revision

Viewing changes to builtin-config.c

  • Committer: Package Import Robot
  • Author(s): Gerrit Pape
  • Date: 2007-10-04 08:27:01 UTC
  • mfrom: (1.1.23)
  • Revision ID: package-import@ubuntu.com-20071004082701-rsd058ontoqz4i30
Tags: 1:1.5.3.4-1
new upstream point release (closes: #445188).

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
#include "cache.h"
3
3
 
4
4
static const char git_config_set_usage[] =
5
 
"git-config [ --global | --system ] [ --bool | --int ] [--get | --get-all | --get-regexp | --replace-all | --add | --unset | --unset-all] name [value [value_regex]] | --rename-section old_name new_name | --remove-section name | --list";
 
5
"git-config [ --global | --system | [ -f | --file ] config-file ] [ --bool | --int ] [ -z | --null ] [--get | --get-all | --get-regexp | --replace-all | --add | --unset | --unset-all] name [value [value_regex]] | --rename-section old_name new_name | --remove-section name | --list";
6
6
 
7
7
static char *key;
8
8
static regex_t *key_regexp;
12
12
static int do_all;
13
13
static int do_not_match;
14
14
static int seen;
 
15
static char delim = '=';
 
16
static char key_delim = ' ';
 
17
static char term = '\n';
15
18
static enum { T_RAW, T_INT, T_BOOL } type = T_RAW;
16
19
 
17
20
static int show_all_config(const char *key_, const char *value_)
18
21
{
19
22
        if (value_)
20
 
                printf("%s=%s\n", key_, value_);
 
23
                printf("%s%c%s%c", key_, delim, value_, term);
21
24
        else
22
 
                printf("%s\n", key_);
 
25
                printf("%s%c", key_, term);
23
26
        return 0;
24
27
}
25
28
 
40
43
 
41
44
        if (show_keys) {
42
45
                if (value_)
43
 
                        printf("%s ", key_);
 
46
                        printf("%s%c", key_, key_delim);
44
47
                else
45
48
                        printf("%s", key_);
46
49
        }
58
61
                                key_, vptr);
59
62
        }
60
63
        else
61
 
                printf("%s\n", vptr);
 
64
                printf("%s%c", vptr, term);
62
65
 
63
66
        return 0;
64
67
}
135
138
        return ret;
136
139
}
137
140
 
 
141
char *normalize_value(const char *key, const char *value)
 
142
{
 
143
        char *normalized;
 
144
 
 
145
        if (!value)
 
146
                return NULL;
 
147
 
 
148
        if (type == T_RAW)
 
149
                normalized = xstrdup(value);
 
150
        else {
 
151
                normalized = xmalloc(64);
 
152
                if (type == T_INT) {
 
153
                        int v = git_config_int(key, value);
 
154
                        sprintf(normalized, "%d", v);
 
155
                }
 
156
                else if (type == T_BOOL)
 
157
                        sprintf(normalized, "%s",
 
158
                                git_config_bool(key, value) ? "true" : "false");
 
159
        }
 
160
 
 
161
        return normalized;
 
162
}
 
163
 
138
164
int cmd_config(int argc, const char **argv, const char *prefix)
139
165
{
140
166
        int nongit = 0;
 
167
        char* value;
141
168
        setup_git_directory_gently(&nongit);
142
169
 
143
170
        while (1 < argc) {
151
178
                        char *home = getenv("HOME");
152
179
                        if (home) {
153
180
                                char *user_config = xstrdup(mkpath("%s/.gitconfig", home));
154
 
                                setenv("GIT_CONFIG", user_config, 1);
 
181
                                setenv(CONFIG_ENVIRONMENT, user_config, 1);
155
182
                                free(user_config);
156
183
                        } else {
157
184
                                die("$HOME not set");
158
185
                        }
159
186
                }
160
187
                else if (!strcmp(argv[1], "--system"))
161
 
                        setenv("GIT_CONFIG", ETC_GITCONFIG, 1);
 
188
                        setenv(CONFIG_ENVIRONMENT, ETC_GITCONFIG, 1);
 
189
                else if (!strcmp(argv[1], "--file") || !strcmp(argv[1], "-f")) {
 
190
                        if (argc < 3)
 
191
                                usage(git_config_set_usage);
 
192
                        setenv(CONFIG_ENVIRONMENT, argv[2], 1);
 
193
                        argc--;
 
194
                        argv++;
 
195
                }
 
196
                else if (!strcmp(argv[1], "--null") || !strcmp(argv[1], "-z")) {
 
197
                        term = '\0';
 
198
                        delim = '\n';
 
199
                        key_delim = '\n';
 
200
                }
162
201
                else if (!strcmp(argv[1], "--rename-section")) {
163
202
                        int ret;
164
203
                        if (argc != 4)
209
248
                        use_key_regexp = 1;
210
249
                        do_all = 1;
211
250
                        return get_value(argv[2], NULL);
212
 
                } else
213
 
 
214
 
                        return git_config_set(argv[1], argv[2]);
 
251
                } else {
 
252
                        value = normalize_value(argv[1], argv[2]);
 
253
                        return git_config_set(argv[1], value);
 
254
                }
215
255
        case 4:
216
256
                if (!strcmp(argv[1], "--unset"))
217
257
                        return git_config_set_multivar(argv[2], NULL, argv[3], 0);
227
267
                        use_key_regexp = 1;
228
268
                        do_all = 1;
229
269
                        return get_value(argv[2], argv[3]);
230
 
                } else if (!strcmp(argv[1], "--add"))
231
 
                        return git_config_set_multivar(argv[2], argv[3], "^$", 0);
232
 
                else if (!strcmp(argv[1], "--replace-all"))
233
 
 
234
 
                        return git_config_set_multivar(argv[2], argv[3], NULL, 1);
235
 
                else
236
 
 
237
 
                        return git_config_set_multivar(argv[1], argv[2], argv[3], 0);
 
270
                } else if (!strcmp(argv[1], "--add")) {
 
271
                        value = normalize_value(argv[2], argv[3]);
 
272
                        return git_config_set_multivar(argv[2], value, "^$", 0);
 
273
                } else if (!strcmp(argv[1], "--replace-all")) {
 
274
                        value = normalize_value(argv[2], argv[3]);
 
275
                        return git_config_set_multivar(argv[2], value, NULL, 1);
 
276
                } else {
 
277
                        value = normalize_value(argv[1], argv[2]);
 
278
                        return git_config_set_multivar(argv[1], value, argv[3], 0);
 
279
                }
238
280
        case 5:
239
 
                if (!strcmp(argv[1], "--replace-all"))
240
 
                        return git_config_set_multivar(argv[2], argv[3], argv[4], 1);
 
281
                if (!strcmp(argv[1], "--replace-all")) {
 
282
                        value = normalize_value(argv[2], argv[3]);
 
283
                        return git_config_set_multivar(argv[2], value, argv[4], 1);
 
284
                }
241
285
        case 1:
242
286
        default:
243
287
                usage(git_config_set_usage);