Code

Merge branch 'master' into jc/fmt-patch
authorJunio C Hamano <junkio@cox.net>
Fri, 21 Apr 2006 20:19:58 +0000 (13:19 -0700)
committerJunio C Hamano <junkio@cox.net>
Fri, 21 Apr 2006 20:25:47 +0000 (13:25 -0700)
* master:
  Split up builtin commands into separate files from git.c
  git-log produces no output
  fix pack-object buffer size
  mailinfo: decode underscore used in "Q" encoding properly.
  Reintroduce svn pools to solve the memory leak.
  pack-objects: do not stop at object that is "too small"
  git-commit --amend: two fixes.
  get_tree_entry(): make it available from tree-walk
  sha1_name.c: no need to include diff.h; tree-walk.h will do.
  sha1_name.c: prepare to make get_tree_entry() reusable from others.
  get_sha1() shorthands for blob/tree objects
  pre-commit hook: complain about conflict markers.
  git-merge: a bit more readable user guidance.
  diff: move diff.c to diff-lib.c to make room.
  git log: don't do merge diffs by default
  Allow "git repack" users to specify repacking window/depth
  Document git-clone --reference
  Fix filename scaling for binary files
  Fix uninteresting tags in new revision parsing

Conflicts:

    Adjusted the addition of fmt-patch to match the recent split
    from git.c to builtin.log.c.

1  2 
builtin-log.c
builtin.h
git.c

diff --cc builtin-log.c
index 0000000000000000000000000000000000000000,69f2911cb4739ba211ac692ded2aa0a6d31cb989..a39aed6d86d77026c6178556ee59a05981d70776
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,69 +1,108 @@@
+ /*
+  * Builtin "git log" and related commands (show, whatchanged)
+  *
+  * (C) Copyright 2006 Linus Torvalds
+  *             2006 Junio Hamano
+  */
+ #include "cache.h"
+ #include "commit.h"
+ #include "diff.h"
+ #include "revision.h"
+ #include "log-tree.h"
++#include "builtin.h"
+ static int cmd_log_wc(int argc, const char **argv, char **envp,
+                     struct rev_info *rev)
+ {
+       struct commit *commit;
+       rev->abbrev = DEFAULT_ABBREV;
+       rev->commit_format = CMIT_FMT_DEFAULT;
+       rev->verbose_header = 1;
+       argc = setup_revisions(argc, argv, rev, "HEAD");
+       if (argc > 1)
+               die("unrecognized argument: %s", argv[1]);
+       prepare_revision_walk(rev);
+       setup_pager();
+       while ((commit = get_revision(rev)) != NULL) {
+               log_tree_commit(rev, commit);
+               free(commit->buffer);
+               commit->buffer = NULL;
+       }
+       return 0;
+ }
+ int cmd_whatchanged(int argc, const char **argv, char **envp)
+ {
+       struct rev_info rev;
+       init_revisions(&rev);
+       rev.diff = 1;
+       rev.diffopt.recursive = 1;
+       return cmd_log_wc(argc, argv, envp, &rev);
+ }
+ int cmd_show(int argc, const char **argv, char **envp)
+ {
+       struct rev_info rev;
+       init_revisions(&rev);
+       rev.diff = 1;
+       rev.diffopt.recursive = 1;
+       rev.combine_merges = 1;
+       rev.dense_combined_merges = 1;
+       rev.always_show_header = 1;
+       rev.ignore_merges = 0;
+       rev.no_walk = 1;
+       return cmd_log_wc(argc, argv, envp, &rev);
+ }
+ int cmd_log(int argc, const char **argv, char **envp)
+ {
+       struct rev_info rev;
+       init_revisions(&rev);
+       rev.always_show_header = 1;
+       rev.diffopt.recursive = 1;
+       return cmd_log_wc(argc, argv, envp, &rev);
+ }
++
++int cmd_format_patch(int argc, const char **argv, char **envp)
++{
++      struct commit *commit;
++      struct commit **list = NULL;
++      struct rev_info rev;
++      int nr = 0;
++
++      init_revisions(&rev);
++      rev.commit_format = CMIT_FMT_EMAIL;
++      rev.verbose_header = 1;
++      rev.diff = 1;
++      rev.diffopt.with_raw = 0;
++      rev.diffopt.with_stat = 1;
++      rev.combine_merges = 0;
++      rev.ignore_merges = 1;
++      rev.diffopt.output_format = DIFF_FORMAT_PATCH;
++      argc = setup_revisions(argc, argv, &rev, "HEAD");
++
++      prepare_revision_walk(&rev);
++      while ((commit = get_revision(&rev)) != NULL) {
++              nr++;
++              list = realloc(list, nr * sizeof(list[0]));
++              list[nr - 1] = commit;
++      }
++      while (0 <= --nr) {
++              int shown;
++              commit = list[nr];
++              shown = log_tree_commit(&rev, commit);
++              free(commit->buffer);
++              commit->buffer = NULL;
++              if (shown)
++                      printf("-- \n%s\n\n", git_version_string);
++      }
++      free(list);
++      return 0;
++}
++
diff --cc builtin.h
index 0000000000000000000000000000000000000000,47408a0585d270c67edeb2edcd637c20e19beb34..94dc0732f9f42069f375673ce1b26aa0b43c26e6
mode 000000,100644..100644
--- /dev/null
+++ b/builtin.h
@@@ -1,0 -1,23 +1,24 @@@
+ #ifndef BUILTIN_H
+ #define BUILTIN_H
+ #ifndef PATH_MAX
+ # define PATH_MAX 4096
+ #endif
+ extern const char git_version_string[];
+ void cmd_usage(int show_all, const char *exec_path, const char *fmt, ...)
+ #ifdef __GNUC__
+       __attribute__((__format__(__printf__, 3, 4), __noreturn__))
+ #endif
+       ;
+ extern int cmd_help(int argc, const char **argv, char **envp);
+ extern int cmd_version(int argc, const char **argv, char **envp);
+ extern int cmd_whatchanged(int argc, const char **argv, char **envp);
+ extern int cmd_show(int argc, const char **argv, char **envp);
+ extern int cmd_log(int argc, const char **argv, char **envp);
++extern int cmd_format_patch(int argc, const char **argv, char **envp);
+ #endif
diff --cc git.c
index d5aa41df92d72f1fb1b9b92c55ee4fae069b332e,aa2b814d9340839e587e39f45a2751c7eb0e1499..619c6654e45d0208adefc6aecf723c5c25fd4a7b
--- 1/git.c
--- 2/git.c
+++ b/git.c
@@@ -383,9 -45,8 +45,9 @@@ static void handle_internal_command(in
                { "version", cmd_version },
                { "help", cmd_help },
                { "log", cmd_log },
-               { "whatchanged", cmd_wc },
+               { "whatchanged", cmd_whatchanged },
                { "show", cmd_show },
 +              { "fmt-patch", cmd_format_patch },
        };
        int i;