+ return newlist;
+}
+
+static enum cmit_fmt get_commit_format(const char *arg)
+{
+ if (!*arg)
+ return CMIT_FMT_DEFAULT;
+ if (!strcmp(arg, "=raw"))
+ return CMIT_FMT_RAW;
+ if (!strcmp(arg, "=medium"))
+ return CMIT_FMT_MEDIUM;
+ if (!strcmp(arg, "=short"))
+ return CMIT_FMT_SHORT;
+ usage(rev_list_usage);
+}
+
+
+int main(int argc, char **argv)
+{
+ struct commit_list *list = NULL;
+ int i, limited = 0;
+
+ for (i = 1 ; i < argc; i++) {
+ int flags;
+ char *arg = argv[i];
+ unsigned char sha1[20];
+ struct commit *commit;
+
+ if (!strncmp(arg, "--max-count=", 12)) {
+ max_count = atoi(arg + 12);
+ continue;
+ }
+ if (!strncmp(arg, "--max-age=", 10)) {
+ max_age = atoi(arg + 10);
+ continue;
+ }
+ if (!strncmp(arg, "--min-age=", 10)) {
+ min_age = atoi(arg + 10);
+ continue;
+ }
+ if (!strcmp(arg, "--header")) {
+ verbose_header = 1;
+ continue;
+ }
+ if (!strncmp(arg, "--pretty", 8)) {
+ commit_format = get_commit_format(arg+8);
+ verbose_header = 1;
+ hdr_termination = '\n';
+ prefix = "commit ";
+ continue;
+ }
+ if (!strcmp(arg, "--parents")) {
+ show_parents = 1;
+ continue;
+ }
+
+ flags = 0;
+ if (*arg == '^') {
+ flags = UNINTERESTING;
+ arg++;
+ limited = 1;
+ }
+ if (get_sha1(arg, sha1))
+ usage(rev_list_usage);
+ commit = lookup_commit_reference(sha1);
+ if (!commit || parse_commit(commit) < 0)
+ die("bad commit object %s", arg);
+ commit->object.flags |= flags;
+ commit_list_insert(commit, &list);
+ }
+
+ if (!list)
+ usage(rev_list_usage);
+
+ if (limited)
+ list = limit_list(list);
+
+ show_commit_list(list);