2214
add_grep(revs, pattern, GREP_PATTERN_BODY);
2215
}
2216
2217
+static int parse_count(const char *arg)
2218
+{
2219
+ int count;
2220
+
2221
+ if (strtol_i(arg, 10, &count) < 0)
2222
+ die("'%s': not an integer", arg);
2223
+ return count;
2224
+}
2225
+
2226
+static timestamp_t parse_age(const char *arg)
2227
+{
2228
+ timestamp_t num;
2229
+ char *p;
2230
+
2231
+ errno = 0;
2232
+ num = parse_timestamp(arg, &p, 10);
2233
+ if (errno || *p || p == arg)
2234
+ die("'%s': not a number of seconds since epoch", arg);
2235
+ return num;
2236
+}
2237
+
2238
static int handle_revision_opt(struct rev_info *revs, int argc, const char **argv,
2239
int *unkc, const char **unkv,
2240
const struct setup_revision_opt* opt)
2261
}
2262
2263
if ((argcount = parse_long_opt("max-count", argv, &optarg))) {
2243
- revs->max_count = atoi(optarg);
2264
+ revs->max_count = parse_count(optarg);
2265
revs->no_walk = 0;
2266
return argcount;
2267
} else if ((argcount = parse_long_opt("skip", argv, &optarg))) {
2247
- revs->skip_count = atoi(optarg);
2268
+ revs->skip_count = parse_count(optarg);
2269
return argcount;
2270
} else if ((*arg == '-') && isdigit(arg[1])) {
2271
/* accept -<digit>, like traditional "head" */
2251
- if (strtol_i(arg + 1, 10, &revs->max_count) < 0 ||
2252
- revs->max_count < 0)
2253
- die("'%s': not a non-negative integer", arg + 1);
2272
+ revs->max_count = parse_count(arg + 1);
2273
revs->no_walk = 0;
2274
} else if (!strcmp(arg, "-n")) {
2275
if (argc <= 1)
2276
return error("-n requires an argument");
2258
- revs->max_count = atoi(argv[1]);
2277
+ revs->max_count = parse_count(argv[1]);
2278
revs->no_walk = 0;
2279
return 2;
2280
} else if (skip_prefix(arg, "-n", &optarg)) {
2262
- revs->max_count = atoi(optarg);
2281
+ revs->max_count = parse_count(optarg);
2282
revs->no_walk = 0;
2283
} else if ((argcount = parse_long_opt("max-age", argv, &optarg))) {
2265
- revs->max_age = atoi(optarg);
2284
+ revs->max_age = parse_age(optarg);
2285
return argcount;
2286
} else if ((argcount = parse_long_opt("since", argv, &optarg))) {
2287
revs->max_age = approxidate(optarg);
2293
revs->max_age = approxidate(optarg);
2294
return argcount;
2295
} else if ((argcount = parse_long_opt("min-age", argv, &optarg))) {
2277
- revs->min_age = atoi(optarg);
2296
+ revs->min_age = parse_age(optarg);
2297
return argcount;
2298
} else if ((argcount = parse_long_opt("before", argv, &optarg))) {
2299
revs->min_age = approxidate(optarg);
2381
} else if (!strcmp(arg, "--no-merges")) {
2382
revs->max_parents = 1;
2383
} else if (skip_prefix(arg, "--min-parents=", &optarg)) {
2365
- revs->min_parents = atoi(optarg);
2384
+ revs->min_parents = parse_count(optarg);
2385
} else if (!strcmp(arg, "--no-min-parents")) {
2386
revs->min_parents = 0;
2387
} else if (skip_prefix(arg, "--max-parents=", &optarg)) {
2369
- revs->max_parents = atoi(optarg);
2388
+ revs->max_parents = parse_count(optarg);
2389
} else if (!strcmp(arg, "--no-max-parents")) {
2390
revs->max_parents = -1;
2391
} else if (!strcmp(arg, "--boundary")) {