~ubuntu-branches/debian/sid/git/sid

« back to all changes in this revision

Viewing changes to userdiff.c

  • Committer: Package Import Robot
  • Author(s): Jonathan Nieder
  • Date: 2013-06-12 07:50:53 UTC
  • mfrom: (1.2.19) (2.1.31 experimental)
  • Revision ID: package-import@ubuntu.com-20130612075053-uue9xe0dq0rvm44y
Tags: 1:1.8.3.1-1
* merge branch debian-experimental
* new upstream point release (see RelNotes/1.8.3.1.txt).
* debian/watch: use xz-compressed tarballs from kernel.org.

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
        { name, NULL, -1, { pattern, REG_EXTENDED | REG_ICASE }, \
15
15
          word_regex "|[^[:space:]]|[\xc0-\xff][\x80-\xbf]+" }
16
16
static struct userdiff_driver builtin_drivers[] = {
 
17
IPATTERN("ada",
 
18
         "!^(.*[ \t])?(is new|renames|is separate)([ \t].*)?$\n"
 
19
         "!^[ \t]*with[ \t].*$\n"
 
20
         "^[ \t]*((procedure|function)[ \t]+.*)$\n"
 
21
         "^[ \t]*((package|protected|task)[ \t]+.*)$",
 
22
         /* -- */
 
23
         "[a-zA-Z][a-zA-Z0-9_]*"
 
24
         "|[0-9][-+0-9#_.eE]"
 
25
         "|=>|\\.\\.|\\*\\*|:=|/=|>=|<=|<<|>>|<>"),
17
26
IPATTERN("fortran",
18
27
         "!^([C*]|[ \t]*!)\n"
19
28
         "!^[ \t]*MODULE[ \t]+PROCEDURE[ \t]\n"
175
184
        return NULL;
176
185
}
177
186
 
178
 
static struct userdiff_driver *parse_driver(const char *var,
179
 
                const char *value, const char *type)
180
 
{
181
 
        struct userdiff_driver *drv;
182
 
        const char *dot;
183
 
        const char *name;
184
 
        int namelen;
185
 
 
186
 
        if (prefixcmp(var, "diff."))
187
 
                return NULL;
188
 
        dot = strrchr(var, '.');
189
 
        if (dot == var + 4)
190
 
                return NULL;
191
 
        if (strcmp(type, dot+1))
192
 
                return NULL;
193
 
 
194
 
        name = var + 5;
195
 
        namelen = dot - name;
196
 
        drv = userdiff_find_by_namelen(name, namelen);
197
 
        if (!drv) {
198
 
                ALLOC_GROW(drivers, ndrivers+1, drivers_alloc);
199
 
                drv = &drivers[ndrivers++];
200
 
                memset(drv, 0, sizeof(*drv));
201
 
                drv->name = xmemdupz(name, namelen);
202
 
                drv->binary = -1;
203
 
        }
204
 
        return drv;
205
 
}
206
 
 
207
187
static int parse_funcname(struct userdiff_funcname *f, const char *k,
208
188
                const char *v, int cflags)
209
189
{
231
211
int userdiff_config(const char *k, const char *v)
232
212
{
233
213
        struct userdiff_driver *drv;
234
 
 
235
 
        if ((drv = parse_driver(k, v, "funcname")))
 
214
        const char *name, *type;
 
215
        int namelen;
 
216
 
 
217
        if (parse_config_key(k, "diff", &name, &namelen, &type) || !name)
 
218
                return 0;
 
219
 
 
220
        drv = userdiff_find_by_namelen(name, namelen);
 
221
        if (!drv) {
 
222
                ALLOC_GROW(drivers, ndrivers+1, drivers_alloc);
 
223
                drv = &drivers[ndrivers++];
 
224
                memset(drv, 0, sizeof(*drv));
 
225
                drv->name = xmemdupz(name, namelen);
 
226
                drv->binary = -1;
 
227
        }
 
228
 
 
229
        if (!strcmp(type, "funcname"))
236
230
                return parse_funcname(&drv->funcname, k, v, 0);
237
 
        if ((drv = parse_driver(k, v, "xfuncname")))
 
231
        if (!strcmp(type, "xfuncname"))
238
232
                return parse_funcname(&drv->funcname, k, v, REG_EXTENDED);
239
 
        if ((drv = parse_driver(k, v, "binary")))
 
233
        if (!strcmp(type, "binary"))
240
234
                return parse_tristate(&drv->binary, k, v);
241
 
        if ((drv = parse_driver(k, v, "command")))
 
235
        if (!strcmp(type, "command"))
242
236
                return git_config_string(&drv->external, k, v);
243
 
        if ((drv = parse_driver(k, v, "textconv")))
 
237
        if (!strcmp(type, "textconv"))
244
238
                return git_config_string(&drv->textconv, k, v);
245
 
        if ((drv = parse_driver(k, v, "cachetextconv")))
 
239
        if (!strcmp(type, "cachetextconv"))
246
240
                return parse_bool(&drv->textconv_want_cache, k, v);
247
 
        if ((drv = parse_driver(k, v, "wordregex")))
 
241
        if (!strcmp(type, "wordregex"))
248
242
                return git_config_string(&drv->word_regex, k, v);
249
243
 
250
244
        return 0;