From: Junio C Hamano Date: Fri, 21 Apr 2006 20:19:58 +0000 (-0700) Subject: Merge branch 'master' into jc/fmt-patch X-Git-Tag: v1.4.0-rc1~76^2~13 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=91efcf60653b2538b05625807293b97c07cb04f4;p=git.git Merge branch 'master' into jc/fmt-patch * 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. --- 91efcf60653b2538b05625807293b97c07cb04f4 diff --cc builtin-log.c index 00000000,69f2911c..a39aed6d mode 000000,100644..100644 --- a/builtin-log.c +++ b/builtin-log.c @@@ -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 00000000,47408a05..94dc0732 mode 000000,100644..100644 --- a/builtin.h +++ 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 d5aa41df,aa2b814d..619c6654 --- a/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;