putchar(' ');
                else
                        putchar('\n');
-               pretty_print_commit(opt->commit_format, commit, ~0, buf,
-                                   LOGSIZE, wcopt->abbrev);
+               pretty_print_commit(rev->commit_format, commit, ~0, buf,
+                                   LOGSIZE, rev->abbrev);
                printf("%s\n", buf);
-               if (wcopt->do_diff) {
-                       printf("---\n");
-                       log_tree_commit(opt, commit);
 -              if (rev->diff)
++              if (rev->diff) {
++                      printf("--\n");
+                       log_tree_commit(rev, commit);
 +              }
                shown = 1;
                free(commit->buffer);
                commit->buffer = NULL;
 
  
        list = revs.commits;
  
-       if (!list &&
-           (!(revs.tag_objects||revs.tree_objects||revs.blob_objects) && !revs.pending_objects))
+       if ((!list &&
+            (!(revs.tag_objects||revs.tree_objects||revs.blob_objects) &&
+             !revs.pending_objects)) ||
+           revs.diff)
                usage(rev_list_usage);
  
-       save_commit_buffer = verbose_header;
+       save_commit_buffer = revs.verbose_header;
        track_object_refs = 0;
 +      if (bisect_list)
 +              revs.limited = 1;
  
        prepare_revision_walk(&revs);
        if (revs.tree_objects)