git-rev-list: add "--pretty" command line option
authorLinus Torvalds <torvalds@ppc970.osdl.org>
Wed, 1 Jun 2005 15:42:22 +0000 (08:42 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Wed, 1 Jun 2005 15:42:22 +0000 (08:42 -0700)
That pretty-prints the resulting commit messages, so

git-rev-list --pretty HEAD v2.6.12-rc5 | less -S

basically ends up being a log of the changes between -rc5
and current head.

It uses the pretty-printing helper function I just extracted
from diff-tree.c.

rev-list.c

index 6f76b9dd52c5576ac456c95484cc1833096d55c8..73b3e97452d6218b8958f291c08271f8146c4d3e 100644 (file)
@@ -10,7 +10,8 @@ static const char rev_list_usage[] =
                      "  --max-count=nr\n"
                      "  --max-age=epoch\n"
                      "  --min-age=epoch\n"
-                     "  --header";
+                     "  --header\n"
+                     "  --pretty";
 
 static void mark_parents_uninteresting(struct commit *commit)
 {
@@ -41,7 +42,9 @@ int main(int argc, char **argv)
        unsigned char sha1[2][20];
        struct commit_list *list = NULL;
        struct commit *commit, *end;
-       int i, verbose_header = 0, show_parents = 0;
+       int i, verbose_header = 0, show_parents = 0, pretty_print = 0;
+       int hdr_termination = 0;
+       const char *prefix = "";
        unsigned long max_age = -1;
        unsigned long min_age = -1;
        int max_count = -1;
@@ -66,6 +69,13 @@ int main(int argc, char **argv)
                        verbose_header = 1;
                        continue;
                }
+               if (!strcmp(arg, "--pretty")) {
+                       verbose_header = 1;
+                       pretty_print = 1;
+                       hdr_termination = '\n';
+                       prefix = "commit ";
+                       continue;
+               }
                if (!strcmp(arg, "--parents")) {
                        show_parents = 1;
                        continue;
@@ -120,7 +130,7 @@ int main(int argc, char **argv)
                        break;
                if (max_count != -1 && !max_count--)
                        break;
-               printf("%s", sha1_to_hex(commit->object.sha1));
+               printf("%s%s", prefix, sha1_to_hex(commit->object.sha1));
                if (show_parents) {
                        struct commit_list *parents = commit->parents;
                        while (parents) {
@@ -129,8 +139,15 @@ int main(int argc, char **argv)
                        }
                }
                putchar('\n');
-               if (verbose_header)
-                       printf("%s%c", commit->buffer, 0);
+               if (verbose_header) {
+                       const char *buf = commit->buffer;
+                       if (pretty_print) {
+                               static char pretty_header[16384];
+                               pretty_print_commit(commit->buffer, ~0, pretty_header, sizeof(pretty_header));
+                               buf = pretty_header;
+                       }
+                       printf("%s%c", buf, hdr_termination);
+               }
        }
        return 0;
 }