git-rev-list: split out commit limiting from main() too.

Ok, now I'm happier.
diff --git a/rev-list.c b/rev-list.c
index 8775b65..56dd814 100644
--- a/rev-list.c
+++ b/rev-list.c
@@ -84,6 +84,25 @@
 	return 1;
 }
 
+struct commit_list *limit_list(struct commit_list *list, struct commit *end)
+{
+	struct commit_list *newlist = NULL;
+	struct commit_list **p = &newlist;
+	do {
+		struct commit *commit = pop_most_recent_commit(&list, SEEN);
+		struct object *obj = &commit->object;
+
+		if (commit == end || (obj->flags & UNINTERESTING)) {
+			mark_parents_uninteresting(commit);
+			if (everybody_uninteresting(list))
+				break;
+			continue;
+		}
+		p = &commit_list_insert(commit, p)->next;
+	} while (list);
+	return newlist;
+}
+
 int main(int argc, char **argv)
 {
 	int nr_sha;
@@ -144,23 +163,8 @@
 	}
 
 	commit_list_insert(commit, &list);
-	if (end) {
-		struct commit_list *newlist = NULL;
-		struct commit_list **p = &newlist;
-		do {
-			struct commit *commit = pop_most_recent_commit(&list, SEEN);
-			struct object *obj = &commit->object;
-
-			if (commit == end || (obj->flags & UNINTERESTING)) {
-				mark_parents_uninteresting(commit);
-				if (everybody_uninteresting(list))
-					break;
-				continue;
-			}
-			p = &commit_list_insert(commit, p)->next;
-		} while (list);
-		list = newlist;
-	}
+	if (end)
+		list = limit_list(list, end);
 
 	show_commit_list(list);
 	return 0;