1
0
mirror of https://github.com/git/git.git synced 2024-11-18 04:53:58 +01:00

Merge branch 'jc/logsemantics'

* jc/logsemantics:
  "format-patch --root rev" is the way to show everything.
  Porcelain level "log" family should recurse when diffing.
This commit is contained in:
Junio C Hamano 2007-08-28 21:49:01 -07:00
commit 04b508f22b
4 changed files with 35 additions and 14 deletions

@ -16,21 +16,32 @@ SYNOPSIS
[--in-reply-to=Message-Id] [--suffix=.<sfx>]
[--ignore-if-in-upstream]
[--subject-prefix=Subject-Prefix]
<since>[..<until>]
[ <since> | <revision range> ]
DESCRIPTION
-----------
Prepare each commit between <since> and <until> with its patch in
Prepare each commit with its patch in
one file per commit, formatted to resemble UNIX mailbox format.
If ..<until> is not specified, the head of the current working
tree is implied. For a more complete list of ways to spell
<since> and <until>, see "SPECIFYING REVISIONS" section in
gitlink:git-rev-parse[1].
The output of this command is convenient for e-mail submission or
for use with gitlink:git-am[1].
There are two ways to specify which commits to operate on.
1. A single commit, <since>, specifies that the commits leading
to the tip of the current branch that are not in the history
that leads to the <since> to be output.
2. Generic <revision range> expression (see "SPECIFYING
REVISIONS" section in gitlink:git-rev-parse[1]) means the
commits in the specified range. A single commit, when
interpreted as a <revision range> expression, means
"everything that leads to that commit", but that is taken as
the special case above. If you want to format everything
since project inception to one commit, say "git format-patch
\--root <that-commit>", as showing the root commit as patch
requires \--root option anyway.
By default, each output file is numbered sequentially from 1, and uses the
first line of the commit message (massaged for pathname safety) as
the filename. With the --numbered-files option, the output file names
@ -153,6 +164,10 @@ git-format-patch origin::
not in the origin branch. For each commit a separate file
is created in the current directory.
git-format-patch \--root origin::
Extract all commits which that leads to 'origin' since the
inception of the project.
git-format-patch -M -B origin::
The same as the previous one. Additionally, it detects
and handles renames and complete rewrites intelligently to

@ -96,7 +96,7 @@ git log --since="2 weeks ago" \-- gitk::
The "--" is necessary to avoid confusion with the *branch* named
'gitk'
git log -r --name-status release..test::
git log --name-status release..test::
Show the commits that are in the "test" branch but not yet
in the "release" branch, along with the list of paths

@ -921,7 +921,7 @@ file such that it contained the given content either before or after the
commit. You can find out with this:
-------------------------------------------------
$ git log --raw -r --abbrev=40 --pretty=oneline -- filename |
$ git log --raw --abbrev=40 --pretty=oneline -- filename |
grep -B 1 `git hash-object filename`
-------------------------------------------------

@ -55,6 +55,7 @@ static void cmd_log_init(int argc, const char **argv, const char *prefix,
rev->abbrev = DEFAULT_ABBREV;
rev->commit_format = CMIT_FMT_DEFAULT;
rev->verbose_header = 1;
rev->diffopt.recursive = 1;
rev->show_root_diff = default_show_root;
rev->subject_prefix = fmt_patch_subject_prefix;
argc = setup_revisions(argc, argv, rev, "HEAD");
@ -116,7 +117,6 @@ int cmd_whatchanged(int argc, const char **argv, const char *prefix)
git_config(git_log_config);
init_revisions(&rev, prefix);
rev.diff = 1;
rev.diffopt.recursive = 1;
rev.simplify_history = 0;
cmd_log_init(argc, argv, prefix, &rev);
if (!rev.diffopt.output_format)
@ -165,7 +165,6 @@ int cmd_show(int argc, const char **argv, const char *prefix)
git_config(git_log_config);
init_revisions(&rev, prefix);
rev.diff = 1;
rev.diffopt.recursive = 1;
rev.combine_merges = 1;
rev.dense_combined_merges = 1;
rev.always_show_header = 1;
@ -586,12 +585,19 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
}
if (rev.pending.nr == 1) {
if (rev.max_count < 0) {
if (rev.max_count < 0 && !rev.show_root_diff) {
/*
* This is traditional behaviour of "git format-patch
* origin" that prepares what the origin side still
* does not have.
*/
rev.pending.objects[0].item->flags |= UNINTERESTING;
add_head(&rev);
}
/* Otherwise, it is "format-patch -22 HEAD", and
* get_revision() would return only the specified count.
/*
* Otherwise, it is "format-patch -22 HEAD", and/or
* "format-patch --root HEAD". The user wants
* get_revision() to do the usual traversal.
*/
}