aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2007-08-28 21:49:01 -0700
committerJunio C Hamano <gitster@pobox.com>2007-08-28 21:49:01 -0700
commit04b508f22b34e1b7461ab6414e1612547d87f08e (patch)
tree972cb02972d61d28c58252810f0ff03bb16a2c53
parent0c783f66df9470ec789825ca3df8fb2922c3c8bd (diff)
parent8a1d076e21810f5bc7e9ef10d84f7ca9637b89af (diff)
downloadgit-04b508f22b34e1b7461ab6414e1612547d87f08e.tar.gz
git-04b508f22b34e1b7461ab6414e1612547d87f08e.tar.xz
Merge branch 'jc/logsemantics'
* jc/logsemantics: "format-patch --root rev" is the way to show everything. Porcelain level "log" family should recurse when diffing.
-rw-r--r--Documentation/git-format-patch.txt29
-rw-r--r--Documentation/git-log.txt2
-rw-r--r--Documentation/user-manual.txt2
-rw-r--r--builtin-log.c16
4 files changed, 35 insertions, 14 deletions
diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.txt
index c514fdd93..5e6d5373a 100644
--- a/Documentation/git-format-patch.txt
+++ b/Documentation/git-format-patch.txt
@@ -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
diff --git a/Documentation/git-log.txt b/Documentation/git-log.txt
index 1e6dbd93b..5ec547cc0 100644
--- a/Documentation/git-log.txt
+++ b/Documentation/git-log.txt
@@ -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
diff --git a/Documentation/user-manual.txt b/Documentation/user-manual.txt
index 06ab79fbd..35298e626 100644
--- a/Documentation/user-manual.txt
+++ b/Documentation/user-manual.txt
@@ -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`
-------------------------------------------------
diff --git a/builtin-log.c b/builtin-log.c
index 13bae3110..fa81c2592 100644
--- a/builtin-log.c
+++ b/builtin-log.c
@@ -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.
*/
}