summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Documentation/Makefile18
-rw-r--r--Documentation/RelNotes/1.7.12.txt88
-rw-r--r--Documentation/config.txt23
-rw-r--r--Documentation/diff-options.txt2
-rw-r--r--Documentation/git-cherry-pick.txt13
-rw-r--r--Documentation/git-commit.txt8
-rw-r--r--Documentation/git-rebase.txt45
-rw-r--r--Documentation/git-submodule.txt2
-rw-r--r--Documentation/rev-list-options.txt1
-rw-r--r--Makefile6
-rw-r--r--archive-tar.c6
-rw-r--r--branch.c38
-rw-r--r--builtin.h5
-rw-r--r--builtin/clone.c7
-rw-r--r--builtin/diff.c24
-rw-r--r--builtin/grep.c2
-rw-r--r--builtin/help.c6
-rw-r--r--builtin/index-pack.c194
-rw-r--r--builtin/pack-objects.c73
-rw-r--r--builtin/reflog.c6
-rw-r--r--builtin/reset.c2
-rw-r--r--builtin/rev-parse.c4
-rw-r--r--builtin/update-index.c6
-rw-r--r--cache.h5
-rw-r--r--compat/nedmalloc/Readme.txt2
-rw-r--r--config.mak.in1
-rw-r--r--configure.ac7
-rw-r--r--connect.c20
-rw-r--r--[-rwxr-xr-x]contrib/completion/git-completion.bash262
-rw-r--r--contrib/completion/git-prompt.sh289
-rw-r--r--contrib/emacs/git-blame.el75
-rw-r--r--diff-no-index.c34
-rw-r--r--dir.c143
-rw-r--r--dir.h2
-rwxr-xr-xgit-add--interactive.perl2
-rw-r--r--git-rebase--interactive.sh23
-rwxr-xr-xgit-rebase.sh20
-rwxr-xr-xgit-submodule.sh62
-rw-r--r--notes-merge.c6
-rw-r--r--pkt-line.c32
-rw-r--r--pkt-line.h1
-rw-r--r--po/sv.po2832
-rw-r--r--rerere.c12
-rw-r--r--revision.c43
-rw-r--r--setup.c51
-rw-r--r--sha1_name.c2
-rw-r--r--t/lib-bash.sh18
-rwxr-xr-xt/t1050-large.sh17
-rwxr-xr-xt/t1506-rev-parse-diagnosis.sh11
-rwxr-xr-xt/t3404-rebase-interactive.sh117
-rwxr-xr-xt/t4035-diff-quiet.sh73
-rwxr-xr-xt/t4053-diff-no-index.sh15
-rwxr-xr-xt/t4253-am-keep-cr-dos.sh4
-rwxr-xr-xt/t5300-pack-object.sh5
-rwxr-xr-xt/t5500-fetch-pack.sh7
-rwxr-xr-xt/t5512-ls-remote.sh16
-rwxr-xr-xt/t7060-wtstatus.sh96
-rwxr-xr-xt/t7400-submodule-basic.sh149
-rwxr-xr-xt/t7403-submodule-sync.sh90
-rwxr-xr-xt/t7512-status-help.sh649
-rwxr-xr-xt/t9300-fast-import.sh2
-rwxr-xr-xt/t9902-completion.sh14
-rwxr-xr-xt/t9903-bash-prompt.sh456
-rw-r--r--wt-status.c245
-rw-r--r--wt-status.h11
65 files changed, 5337 insertions, 1163 deletions
diff --git a/Documentation/Makefile b/Documentation/Makefile
index 5d76a84078..063fa696c9 100644
--- a/Documentation/Makefile
+++ b/Documentation/Makefile
@@ -66,12 +66,6 @@ endif
-include ../config.mak
#
-# For asciidoc ...
-# -7.1.2, set ASCIIDOC7
-# 8.0-, no extra settings are needed
-#
-
-#
# For docbook-xsl ...
# -1.68.1, no extra settings are needed?
# 1.69.0, set ASCIIDOC_ROFF?
@@ -81,9 +75,6 @@ endif
# 1.73.0-, no extra settings are needed
#
-ifndef ASCIIDOC7
-ASCIIDOC_EXTRA += -a asciidoc7compatible
-endif
ifdef DOCBOOK_XSL_172
ASCIIDOC_EXTRA += -a git-asciidoc-no-roff
MANPAGE_XSL = manpage-1.72.xsl
@@ -134,15 +125,6 @@ DEFAULT_EDITOR_SQ = $(subst ','\'',$(DEFAULT_EDITOR))
ASCIIDOC_EXTRA += -a 'git-default-editor=$(DEFAULT_EDITOR_SQ)'
endif
-#
-# Please note that there is a minor bug in asciidoc.
-# The version after 6.0.3 _will_ include the patch found here:
-# http://marc.theaimsgroup.com/?l=git&m=111558757202243&w=2
-#
-# Until that version is released you may have to apply the patch
-# yourself - yes, all 6 characters of it!
-#
-
QUIET_SUBDIR0 = +$(MAKE) -C # space to separate -C and subdir
QUIET_SUBDIR1 =
diff --git a/Documentation/RelNotes/1.7.12.txt b/Documentation/RelNotes/1.7.12.txt
index 117f4b1904..34f301d557 100644
--- a/Documentation/RelNotes/1.7.12.txt
+++ b/Documentation/RelNotes/1.7.12.txt
@@ -16,18 +16,50 @@ UI, Workflows & Features
turn this off, as a more explicit alternative over use of file://
URL.
+ * "git fetch" and friends used to say "remote side hung up
+ unexpectedly" when they failed to get response they expect from the
+ other side, but one common reason why they don't get expected
+ response is that the remote repository does not exist or cannot be
+ read. The error message in this case was updated to give better
+ hints to the user.
+
* git native protocol agents learned to show software version over
the wire, so that the server log can be examined to see the vintage
distribution of clients.
+ * "git rebase -i" learned "-x <cmd>" to insert "exec <cmd>" after
+ each commit in the resulting history.
+
+ * "git status" gives finer classification to various states of paths
+ in conflicted state and offer advice messages in its output.
+
+ * "git submodule" learned to deal with nested submodule structure
+ where a module is contained within a module whose origin is
+ specified as a relative URL to its superproject's origin.
+
+ * A rather heavy-ish "git completion" script has been split to create
+ a separate "git prompting" script, to help lazy-autoloading of the
+ completion part while making prompting part always available.
+
Foreign Interface
-Performance and Internal Implementation (please report possible regressions)
+Performance, Internal Implementation, etc. (please report possible regressions)
* Some tests showed false failures caused by a bug in ecryptofs.
+ * We no longer use AsciiDoc7 syntax in our documentation and favor a
+ more modern style.
+
+ * "git index-pack" and "git pack-objects" use streaming API to read
+ from the object store to avoid having to hold a large blob object
+ in-core while they are doing their thing.
+
+ * Code to match paths with exclude patterns learned to avoid calling
+ fnmatch() by comparing fixed leading substring literally when
+ possible.
+
Also contains minor documentation updates and code clean-ups.
@@ -39,17 +71,53 @@ Unless otherwise noted, all the fixes since v1.7.11 in the maintenance
releases are contained in this release (see release notes to them for
details).
-* Running "git bundle verify" on a bundle that records a complete
- history said "it requires these 0 commits".
+ * "git clone --single-branch" to clone a single branch did not limit
+ the cloning to the specified branch.
+ (merge 0ec4b16 nd/clone-single-fix later to maint).
+
+ * "git diff --no-index" did not correctly handle relative paths and
+ did not correctly give exit codes when run under "--quiet" option.
+ (merge 304970d th/diff-no-index-fixes later to maint).
+
+ * When "git log" gets "--simplify-merges/by-decoration" together with
+ "--first-parent", the combination of these options makes the
+ simplification logic to use in-core commit objects that haven't
+ been examined for relevance, either producing incorrect result or
+ taking too long to produce any output. Teach the simplification
+ logic to ignore commits that the first-parent traversal logic
+ ignored when both are in effect to work around the issue.
+ (merge 6e513ba jc/rev-list-simplify-merges-first-parent later to maint).
+
+ * "git add" allows adding a regular file to the path where a
+ submodule used to exist, but "git update-index" does not allow an
+ equivalent operation to Porcelain writers.
+ (merge 242f55f hv/submodule-update-nuke-submodules later to maint).
+
+ * "git diff --no-index" did not work with pagers correctly.
+ (merge af63b54 jk/diff-no-index-pager later to maint).
+
+ * "git diff COPYING HEAD:COPYING" gave a nonsense error message that
+ claimed that the treeish HEAD did not have COPYING in it.
+ (merge 023e37c mm/verify-filename-fix later to maint).
+
+ * The documentation for "git cherry-pick A B..C" was misleading.
+ (merge b98878e cn/cherry-pick-range-docs later to maint).
+
+ * "git archive" incorrectly computed the header checksum; the symptom
+ was observed only when using pathnames with hi-bit set.
+ (merge a5a46eb jc/ustar-checksum-is-unsigned later to maint).
+
+ * Running "git bundle verify" on a bundle that records a complete
+ history said "it requires these 0 commits".
(merge 8c3710f jc/bundle-complete-notice later to maint).
-* "git ls-files --exclude=t -i" did not consider anything under t/ as
- excluded, as it did not pay attention to exclusion of leading paths
- while walking the index. Other two users of excluded() are also
- updated.
+ * "git ls-files --exclude=t -i" did not consider anything under t/ as
+ excluded, as it did not pay attention to exclusion of leading paths
+ while walking the index. Other two users of excluded() are also
+ updated.
(merge 0d316f0 jc/ls-files-i-dir later to maint).
-* "git request-pull $url dev" when the tip of "dev" branch was tagged
- with "ext4-for-linus" used the contents from the tag in the output
- but still asked the "dev" branch to be pulled, not the tag.
+ * "git request-pull $url dev" when the tip of "dev" branch was tagged
+ with "ext4-for-linus" used the contents from the tag in the output
+ but still asked the "dev" branch to be pulled, not the tag.
(merge 682853e jc/request-pull-match-tagname later to maint).
diff --git a/Documentation/config.txt b/Documentation/config.txt
index db07459bbb..c6ff15e594 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -159,9 +159,10 @@ advice.*::
specified a refspec that isn't your current branch) and
it resulted in a non-fast-forward error.
statusHints::
- Directions on how to stage/unstage/add shown in the
- output of linkgit:git-status[1] and the template shown
- when writing commit messages.
+ Show directions on how to proceed from the current
+ state in the output of linkgit:git-status[1] and in
+ the template shown when writing commit messages in
+ linkgit:git-commit[1].
commitBeforeMerge::
Advice shown when linkgit:git-merge[1] refuses to
merge to avoid overwriting local changes.
@@ -884,7 +885,7 @@ column.ui::
make equal size columns
--
+
- This option defaults to 'never'.
+This option defaults to 'never'.
column.branch::
Specify whether to output branch listing in `git branch` in columns.
@@ -1724,6 +1725,7 @@ push.default::
no refspec is implied by any of the options given on the command
line. Possible values are:
+
+--
* `nothing` - do not push anything.
* `matching` - push all branches having the same name in both ends.
This is for those who prepare all the branches into a publishable
@@ -1743,12 +1745,13 @@ push.default::
option and is well-suited for beginners. It will become the default
in Git 2.0.
* `current` - push the current branch to a branch of the same name.
- +
- The `simple`, `current` and `upstream` modes are for those who want to
- push out a single branch after finishing work, even when the other
- branches are not yet ready to be pushed out. If you are working with
- other people to push into the same shared repository, you would want
- to use one of these.
+--
++
+The `simple`, `current` and `upstream` modes are for those who want to
+push out a single branch after finishing work, even when the other
+branches are not yet ready to be pushed out. If you are working with
+other people to push into the same shared repository, you would want
+to use one of these.
rebase.stat::
Whether to show a diffstat of what changed upstream since the last
diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt
index 6cfedd85dc..cf4b216598 100644
--- a/Documentation/diff-options.txt
+++ b/Documentation/diff-options.txt
@@ -59,7 +59,7 @@ endif::git-format-patch[]
Generate a diffstat. By default, as much space as necessary
will be used for the filename part, and the rest for the graph
part. Maximum width defaults to terminal width, or 80 columns
- if not connected to a terminal, and can be overriden by
+ if not connected to a terminal, and can be overridden by
`<width>`. The width of the filename part can be limited by
giving another width `<name-width>` after a comma. The width
of the graph part can be limited by using
diff --git a/Documentation/git-cherry-pick.txt b/Documentation/git-cherry-pick.txt
index 9f3dae631e..0e170a51ca 100644
--- a/Documentation/git-cherry-pick.txt
+++ b/Documentation/git-cherry-pick.txt
@@ -47,7 +47,9 @@ OPTIONS
linkgit:gitrevisions[7].
Sets of commits can be passed but no traversal is done by
default, as if the '--no-walk' option was specified, see
- linkgit:git-rev-list[1].
+ linkgit:git-rev-list[1]. Note that specifying a range will
+ feed all <commit>... arguments to a single revision walk
+ (see a later example that uses 'maint master..next').
-e::
--edit::
@@ -149,6 +151,15 @@ EXAMPLES
Apply the changes introduced by all commits that are ancestors
of master but not of HEAD to produce new commits.
+`git cherry-pick maint next ^master`::
+`git cherry-pick maint master..next`::
+
+ Apply the changes introduced by all commits that are
+ ancestors of maint or next, but not master or any of its
+ ancestors. Note that the latter does not mean `maint` and
+ everything between `master` and `next`; specifically,
+ `maint` will not be used if it is included in `master`.
+
`git cherry-pick master~4 master~2`::
Apply the changes introduced by the fifth and third last
diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
index 2d695f619c..f400835921 100644
--- a/Documentation/git-commit.txt
+++ b/Documentation/git-commit.txt
@@ -101,12 +101,16 @@ OPTIONS
When doing a dry-run, give the output in the short-format. See
linkgit:git-status[1] for details. Implies `--dry-run`.
+--branch::
+ Show the branch and tracking info even in short-format.
+
--porcelain::
When doing a dry-run, give the output in a porcelain-ready
format. See linkgit:git-status[1] for details. Implies
`--dry-run`.
-z::
+--null::
When showing `short` or `porcelain` status output, terminate
entries in the status output with NUL, instead of LF. If no
format is given, implies the `--porcelain` output format.
@@ -189,6 +193,10 @@ OPTIONS
current tip -- if it was a merge, it will have the parents of
the current tip as parents -- so the current top commit is
discarded.
+
+--no-post-rewrite::
+ Bypass the post-rewrite hook.
+
+
--
It is a rough equivalent for:
diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
index 147fa1a8e0..2d71e4b975 100644
--- a/Documentation/git-rebase.txt
+++ b/Documentation/git-rebase.txt
@@ -8,9 +8,9 @@ git-rebase - Forward-port local commits to the updated upstream head
SYNOPSIS
--------
[verse]
-'git rebase' [-i | --interactive] [options] [--onto <newbase>]
+'git rebase' [-i | --interactive] [options] [--exec <cmd>] [--onto <newbase>]
[<upstream>] [<branch>]
-'git rebase' [-i | --interactive] [options] --onto <newbase>
+'git rebase' [-i | --interactive] [options] [--exec <cmd>] --onto <newbase>
--root [<branch>]
'git rebase' --continue | --skip | --abort
@@ -210,7 +210,7 @@ rebase.autosquash::
OPTIONS
-------
-<newbase>::
+--onto <newbase>::
Starting point at which to create the new commits. If the
--onto option is not specified, the starting point is
<upstream>. May be any valid commit, and not just an
@@ -344,6 +344,27 @@ This uses the `--interactive` machinery internally, but combining it
with the `--interactive` option explicitly is generally not a good
idea unless you know what you are doing (see BUGS below).
+-x <cmd>::
+--exec <cmd>::
+ Append "exec <cmd>" after each line creating a commit in the
+ final history. <cmd> will be interpreted as one or more shell
+ commands.
++
+This option can only be used with the `--interactive` option
+(see INTERACTIVE MODE below).
++
+You may execute several commands by either using one instance of `--exec`
+with several commands:
++
+ git rebase -i --exec "cmd1 && cmd2 && ..."
++
+or by giving more than one `--exec`:
++
+ git rebase -i --exec "cmd1" --exec "cmd2" --exec ...
++
+If `--autosquash` is used, "exec" lines will not be appended for
+the intermediate commits, and will only appear at the end of each
+squash/fixup series.
--root::
Rebase all commits reachable from <branch>, instead of
@@ -521,6 +542,24 @@ in `$SHELL`, or the default shell if `$SHELL` is not set), so you can
use shell features (like "cd", ">", ";" ...). The command is run from
the root of the working tree.
+----------------------------------
+$ git rebase -i --exec "make test"
+----------------------------------
+
+This command lets you check that intermediate commits are compilable.
+The todo list becomes like that:
+
+--------------------
+pick 5928aea one
+exec make test
+pick 04d0fda two
+exec make test
+pick ba46169 three
+exec make test
+pick f4593f9 four
+exec make test
+--------------------
+
SPLITTING COMMITS
-----------------
diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt
index 9e488c0aad..fbbbcb282c 100644
--- a/Documentation/git-submodule.txt
+++ b/Documentation/git-submodule.txt
@@ -140,7 +140,7 @@ update::
checkout the commit specified in the index of the containing repository.
This will make the submodules HEAD be detached unless `--rebase` or
`--merge` is specified or the key `submodule.$name.update` is set to
- `rebase`, `merge` or `none`. `none` can be overriden by specifying
+ `rebase`, `merge` or `none`. `none` can be overridden by specifying
`--checkout`.
+
If the submodule is not yet initialized, and you just want to use the
diff --git a/Documentation/rev-list-options.txt b/Documentation/rev-list-options.txt
index 1ae3c899ef..84e34b1aba 100644
--- a/Documentation/rev-list-options.txt
+++ b/Documentation/rev-list-options.txt
@@ -622,6 +622,7 @@ These options are mostly targeted for packing of git repositories.
--no-walk::
Only show the given revs, but do not traverse their ancestors.
+ This has no effect if a range is specified.
--do-walk::
diff --git a/Makefile b/Makefile
index f62ca2aebb..cba9f7788d 100644
--- a/Makefile
+++ b/Makefile
@@ -203,8 +203,6 @@ all::
# Define NO_ST_BLOCKS_IN_STRUCT_STAT if your platform does not have st_blocks
# field that counts the on-disk footprint in 512-byte blocks.
#
-# Define ASCIIDOC7 if you want to format documentation with AsciiDoc 7
-#
# Define DOCBOOK_XSL_172 if you want to format man pages with DocBook XSL v1.72
# (not v1.73 or v1.71).
#
@@ -1845,10 +1843,6 @@ ifndef V
endif
endif
-ifdef ASCIIDOC7
- export ASCIIDOC7
-endif
-
ifdef NO_INSTALL_HARDLINKS
export NO_INSTALL_HARDLINKS
endif
diff --git a/archive-tar.c b/archive-tar.c
index dc91c6b50d..0ba3f25cf5 100644
--- a/archive-tar.c
+++ b/archive-tar.c
@@ -139,13 +139,13 @@ static void strbuf_append_ext_header(struct strbuf *sb, const char *keyword,
static unsigned int ustar_header_chksum(const struct ustar_header *header)
{
- const char *p = (const char *)header;
+ const unsigned char *p = (const unsigned char *)header;
unsigned int chksum = 0;
- while (p < header->chksum)
+ while (p < (const unsigned char *)header->chksum)
chksum += *p++;
chksum += sizeof(header->chksum) * ' ';
p += sizeof(header->chksum);
- while (p < (const char *)header + sizeof(struct ustar_header))
+ while (p < (const unsigned char *)header + sizeof(struct ustar_header))
chksum += *p++;
return chksum;
}
diff --git a/branch.c b/branch.c
index eccdaf9392..2bef1e7e71 100644
--- a/branch.c
+++ b/branch.c
@@ -74,25 +74,33 @@ void install_branch_config(int flag, const char *local, const char *origin, cons
strbuf_addf(&key, "branch.%s.rebase", local);
git_config_set(key.buf, "true");
}
+ strbuf_release(&key);
if (flag & BRANCH_CONFIG_VERBOSE) {
- strbuf_reset(&key);
-
- strbuf_addstr(&key, origin ? "remote" : "local");
-
- /* Are we tracking a proper "branch"? */
- if (remote_is_branch) {
- strbuf_addf(&key, " branch %s", shortname);
- if (origin)
- strbuf_addf(&key, " from %s", origin);
- }
+ if (remote_is_branch && origin)
+ printf(rebasing ?
+ "Branch %s set up to track remote branch %s from %s by rebasing.\n" :
+ "Branch %s set up to track remote branch %s from %s.\n",
+ local, shortname, origin);
+ else if (remote_is_branch && !origin)
+ printf(rebasing ?
+ "Branch %s set up to track local branch %s by rebasing.\n" :
+ "Branch %s set up to track local branch %s.\n",
+ local, shortname);
+ else if (!remote_is_branch && origin)
+ printf(rebasing ?
+ "Branch %s set up to track remote ref %s by rebasing.\n" :
+ "Branch %s set up to track remote ref %s.\n",
+ local, remote);
+ else if (!remote_is_branch && !origin)
+ printf(rebasing ?
+ "Branch