rev-list --no-merges: argument parsing fix.
[git.git] / revision.c
index 01386ed..d7678cf 100644 (file)
@@ -313,8 +313,16 @@ static void try_to_simplify_commit(struct rev_info *revs, struct commit *commit)
                case REV_TREE_NEW:
                        if (revs->remove_empty_trees &&
                            rev_same_tree_as_empty(p->tree)) {
-                               *pp = parent->next;
-                               continue;
+                               /* We are adding all the specified
+                                * paths from this parent, so the
+                                * history beyond this parent is not
+                                * interesting.  Remove its parents
+                                * (they are grandparents for us).
+                                * IOW, we pretend this parent is a
+                                * "root" commit.
+                                */
+                               parse_commit(p);
+                               p->parents = NULL;
                        }
                /* fallthrough */
                case REV_TREE_DIFFERENT:
@@ -579,7 +587,7 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
                                revs->remove_empty_trees = 1;
                                continue;
                        }
-                       if (!strncmp(arg, "--no-merges", 11)) {
+                       if (!strcmp(arg, "--no-merges")) {
                                revs->no_merges = 1;
                                continue;
                        }
@@ -641,7 +649,7 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
                        /* If we didn't have a "--", all filenames must exist */
                        for (j = i; j < argc; j++) {
                                if (lstat(argv[j], &st) < 0)
-                                       die("'%s': %s", arg, strerror(errno));
+                                       die("'%s': %s", argv[j], strerror(errno));
                        }
                        revs->prune_data = get_pathspec(revs->prefix, argv + i);
                        break;