gitweb: More detailed error messages for snapshot format
[gitweb.git] / revision.c
index 33ee9ee3b2ad98f9d02f350c649a9af1bf2aff0f..16f35c7c18713aab991f04f6dcb787a73d15957d 100644 (file)
@@ -437,7 +437,7 @@ static int add_parents_to_list(struct rev_info *revs, struct commit *commit, str
        return 0;
 }
 
-static void cherry_pick_list(struct commit_list *list)
+static void cherry_pick_list(struct commit_list *list, struct rev_info *revs)
 {
        struct commit_list *p;
        int left_count = 0, right_count = 0;
@@ -458,6 +458,11 @@ static void cherry_pick_list(struct commit_list *list)
 
        left_first = left_count < right_count;
        init_patch_ids(&ids);
+       if (revs->diffopt.nr_paths) {
+               ids.diffopts.nr_paths = revs->diffopt.nr_paths;
+               ids.diffopts.paths = revs->diffopt.paths;
+               ids.diffopts.pathlens = revs->diffopt.pathlens;
+       }
 
        /* Compute patch-ids for one side */
        for (p = list; p; p = p->next) {
@@ -546,7 +551,7 @@ static int limit_list(struct rev_info *revs)
                p = &commit_list_insert(commit, p)->next;
        }
        if (revs->cherry_pick)
-               cherry_pick_list(newlist);
+               cherry_pick_list(newlist, revs);
 
        revs->commits = newlist;
        return 0;
@@ -1128,6 +1133,14 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
                        if (!strncmp(arg, "--date=", 7)) {
                                if (!strcmp(arg + 7, "relative"))
                                        revs->date_mode = DATE_RELATIVE;
+                               else if (!strcmp(arg + 7, "iso8601") ||
+                                        !strcmp(arg + 7, "iso"))
+                                       revs->date_mode = DATE_ISO8601;
+                               else if (!strcmp(arg + 7, "rfc2822") ||
+                                        !strcmp(arg + 7, "rfc"))
+                                       revs->date_mode = DATE_RFC2822;
+                               else if (!strcmp(arg + 7, "short"))
+                                       revs->date_mode = DATE_SHORT;
                                else if (!strcmp(arg + 7, "local"))
                                        revs->date_mode = DATE_LOCAL;
                                else if (!strcmp(arg + 7, "default"))
@@ -1152,11 +1165,13 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
                                add_message_grep(revs, arg+7);
                                continue;
                        }
-                       if (!prefixcmp(arg, "--extended-regexp")) {
+                       if (!strcmp(arg, "--extended-regexp") ||
+                           !strcmp(arg, "-E")) {
                                regflags |= REG_EXTENDED;
                                continue;
                        }
-                       if (!prefixcmp(arg, "--regexp-ignore-case")) {
+                       if (!strcmp(arg, "--regexp-ignore-case") ||
+                           !strcmp(arg, "-i")) {
                                regflags |= REG_ICASE;
                                continue;
                        }
@@ -1176,6 +1191,14 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
                                revs->reverse ^= 1;
                                continue;
                        }
+                       if (!strcmp(arg, "--no-walk")) {
+                               revs->no_walk = 1;
+                               continue;
+                       }
+                       if (!strcmp(arg, "--do-walk")) {
+                               revs->no_walk = 0;
+                               continue;
+                       }
 
                        opts = diff_opt_parse(&revs->diffopt, argv+i, argc-i);
                        if (opts > 0) {
@@ -1310,16 +1333,17 @@ static enum rewrite_result rewrite_one(struct rev_info *revs, struct commit **pp
 
 static void remove_duplicate_parents(struct commit *commit)
 {
-       struct commit_list *p;
-       struct commit_list **pp = &commit->parents;
+       struct commit_list **pp, *p;
 
        /* Examine existing parents while marking ones we have seen... */
-       for (p = commit->parents; p; p = p->next) {
+       pp = &commit->parents;
+       while ((p = *pp) != NULL) {
                struct commit *parent = p->item;
-               if (parent->object.flags & TMP_MARK)
+               if (parent->object.flags & TMP_MARK) {
+                       *pp = p->next;
                        continue;
+               }
                parent->object.flags |= TMP_MARK;
-               *pp = p;
                pp = &p->next;
        }
        /* ... and clear the temporary mark */