From: Junio C Hamano Date: Mon, 28 Feb 2011 05:17:37 +0000 (-0800) Subject: Merge branch 'hv/mingw-fs-funnies' X-Git-Tag: v1.7.5-rc0~120 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/70ae2beadd45d1874ffbfba2d5c45ea9fd2af12c?hp=ab1a11be7858e1f92ee2e4ee1d70fabe7d5fe0ee Merge branch 'hv/mingw-fs-funnies' * hv/mingw-fs-funnies: mingw_rmdir: set errno=ENOTEMPTY when appropriate mingw: add fallback for rmdir in case directory is in use mingw: make failures to unlink or move raise a question mingw: work around irregular failures of unlink on windows mingw: move unlink wrapper to mingw.c --- diff --git a/.gitignore b/.gitignore index 87b833c9d8..c460c66766 100644 --- a/.gitignore +++ b/.gitignore @@ -170,6 +170,7 @@ /test-index-version /test-line-buffer /test-match-trees +/test-mktemp /test-obj-pool /test-parse-options /test-path-utils @@ -177,6 +178,7 @@ /test-sha1 /test-sigchain /test-string-pool +/test-subprocess /test-svn-fe /test-treap /common-cmds.h diff --git a/Documentation/CodingGuidelines b/Documentation/CodingGuidelines index 1b1c45df5c..ba2006d892 100644 --- a/Documentation/CodingGuidelines +++ b/Documentation/CodingGuidelines @@ -157,7 +157,7 @@ Writing Documentation: --sort= --abbrev[=] - Possibility of multiple occurences is indicated by three dots: + Possibility of multiple occurrences is indicated by three dots: ... (One or more of .) diff --git a/Documentation/RelNotes/1.6.4.5.txt b/Documentation/RelNotes/1.6.4.5.txt new file mode 100644 index 0000000000..eb6307dcbb --- /dev/null +++ b/Documentation/RelNotes/1.6.4.5.txt @@ -0,0 +1,20 @@ +Git v1.6.4.5 Release Notes +========================== + +Fixes since v1.6.4.4 +-------------------- + + * Simplified base85 implementation. + + * An overlong line after ".gitdir: " in a git file caused out of bounds + access to an array on the stack. + + * "git count-objects" did not handle packs larger than 4G. + + * "git rev-parse --parseopt --stop-at-non-option" did not stop at non option + when --keep-dashdash was in effect. + + * "gitweb" can sometimes be tricked into parrotting a filename argument + given in a request without properly quoting. + +Other minor fixes and documentation updates are included. diff --git a/Documentation/RelNotes/1.6.5.9.txt b/Documentation/RelNotes/1.6.5.9.txt new file mode 100644 index 0000000000..bb469dd71e --- /dev/null +++ b/Documentation/RelNotes/1.6.5.9.txt @@ -0,0 +1,18 @@ +Git v1.6.5.9 Release Notes +========================== + +Fixes since v1.6.5.8 +-------------------- + + * An overlong line after ".gitdir: " in a git file caused out of bounds + access to an array on the stack. + + * "git blame -L $start,$end" segfaulted when too large $start was given. + + * "git rev-parse --parseopt --stop-at-non-option" did not stop at non option + when --keep-dashdash was in effect. + + * "gitweb" can sometimes be tricked into parrotting a filename argument + given in a request without properly quoting. + +Other minor fixes and documentation updates are included. diff --git a/Documentation/RelNotes/1.6.6.3.txt b/Documentation/RelNotes/1.6.6.3.txt new file mode 100644 index 0000000000..11483acaec --- /dev/null +++ b/Documentation/RelNotes/1.6.6.3.txt @@ -0,0 +1,23 @@ +Git v1.6.6.3 Release Notes +========================== + +Fixes since v1.6.6.2 +-------------------- + + * An overlong line after ".gitdir: " in a git file caused out of bounds + access to an array on the stack. + + * "git bisect $path" did not correctly diagnose an error when given a + non-existent path. + + * "git blame -L $start,$end" segfaulted when too large $start was given. + + * "git imap-send" did not write draft box with CRLF line endings per RFC. + + * "git rev-parse --parseopt --stop-at-non-option" did not stop at non option + when --keep-dashdash was in effect. + + * "gitweb" can sometimes be tricked into parrotting a filename argument + given in a request without properly quoting. + +Other minor fixes and documentation updates are included. diff --git a/Documentation/RelNotes/1.7.0.9.txt b/Documentation/RelNotes/1.7.0.9.txt new file mode 100644 index 0000000000..bfb3166387 --- /dev/null +++ b/Documentation/RelNotes/1.7.0.9.txt @@ -0,0 +1,8 @@ +Git v1.7.0.9 Release Notes +========================== + +Fixes since v1.7.0.8 +-------------------- + + * "gitweb" can sometimes be tricked into parrotting a filename argument + given in a request without properly quoting. diff --git a/Documentation/RelNotes/1.7.1.4.txt b/Documentation/RelNotes/1.7.1.4.txt new file mode 100644 index 0000000000..7c734b4f7b --- /dev/null +++ b/Documentation/RelNotes/1.7.1.4.txt @@ -0,0 +1,8 @@ +Git v1.7.1.4 Release Notes +========================== + +Fixes since v1.7.1.3 +-------------------- + + * "gitweb" can sometimes be tricked into parrotting a filename argument + given in a request without properly quoting. diff --git a/Documentation/RelNotes/1.7.2.5.txt b/Documentation/RelNotes/1.7.2.5.txt new file mode 100644 index 0000000000..bf976c40db --- /dev/null +++ b/Documentation/RelNotes/1.7.2.5.txt @@ -0,0 +1,8 @@ +Git v1.7.2.5 Release Notes +========================== + +Fixes since v1.7.2.4 +-------------------- + + * "gitweb" can sometimes be tricked into parrotting a filename argument + given in a request without properly quoting. diff --git a/Documentation/RelNotes/1.7.3.4.txt b/Documentation/RelNotes/1.7.3.4.txt index 925178f608..e57f7c176d 100644 --- a/Documentation/RelNotes/1.7.3.4.txt +++ b/Documentation/RelNotes/1.7.3.4.txt @@ -14,6 +14,11 @@ Fixes since v1.7.3.3 colon between the hours and minutes part (e.g. "-08:00" instead of "-0800"). + * "git checkout" removed an untracked file "foo" from the working + tree when switching to a branch that contains a tracked path + "foo/bar". Prevent this, just like the case where the conflicting + path were "foo" (c752e7f..7980872d). + * "git cherry-pick" or "git revert" refused to work when a path that would be modified by the operation was stat-dirty without a real difference in the contents of the file. @@ -21,12 +26,20 @@ Fixes since v1.7.3.3 * "git diff --check" reported an incorrect line number for added blank lines at the end of file. + * "git imap-send" failed to build under NO_OPENSSL. + * Setting log.decorate configuration variable to "0" or "1" to mean "false" or "true" did not work. + * "git push" over dumb HTTP protocol did not work against WebDAV + servers that did not terminate a collection name with a slash. + * "git tag -v" did not work with GPG signatures in rfc1991 mode. * The post-receive-email sample hook was accidentally broken in 1.7.3.3 update. + * "gitweb" can sometimes be tricked into parrotting a filename argument + given in a request without properly quoting. + Other minor fixes and documentation updates are also included. diff --git a/Documentation/RelNotes/1.7.3.5.txt b/Documentation/RelNotes/1.7.3.5.txt new file mode 100644 index 0000000000..40f3ba5795 --- /dev/null +++ b/Documentation/RelNotes/1.7.3.5.txt @@ -0,0 +1,34 @@ +Git 1.7.3.5 Release Notes +========================= + + * The xfuncname pattern used by "git diff" and "git grep" to show the + last notable line in context were broken for python and ruby for a long + time. + + * "git merge" into an unborn branch removed an untracked file "foo" from + the working tree when merged branch had "foo" (this fix was already in + 1.7.3.3 but was omitted from the release notes by mistake). + + * "git status -s" did not quote unprintable characters in paths as + documented. + + * "git am --abort" used to always reset to the commit at the beginning of + the last "am" invocation that has stopped, losing any unrelated commits + that may have been made since then. Now it refrains from doing so and + instead issues a warning. + + * "git blame" incorrectly reused bogusly cached result of textconv + filter for files from the working tree. + + * "git commit" used to abort after the user edited the log message + when the committer information was not correctly set up. It now + aborts before starting the editor. + + * "git commit --date=invalid" used to silently ignore the incorrectly + specified date; it is now diagnosed as an error. + + * "git rebase --skip" to skip the last commit in a series used to fail + to run post-rewrite hook and to copy notes from old commits that have + successfully been rebased so far. Now it do (backmerge ef88ad2). + + * "gitweb" tried to show a wrong feed logo when none was specified. diff --git a/Documentation/RelNotes/1.7.4.1.txt b/Documentation/RelNotes/1.7.4.1.txt new file mode 100644 index 0000000000..79923a6d2f --- /dev/null +++ b/Documentation/RelNotes/1.7.4.1.txt @@ -0,0 +1,27 @@ +Git v1.7.4.1 Release Notes +========================== + +Fixes since v1.7.4 +------------------ + + * On Windows platform, the codepath to spawn a new child process forgot + to first flush the output buffer. + + * "git bundle" did not use OFS_DELTA encoding, making its output a few + per-cent larger than necessarily. + + * The option to tell "git clone" to recurse into the submodules was + misspelled with an underscore "--recurse_submodules". + + * "git diff --cached HEAD" before the first commit does what an end user + would expect (namely, show what would be committed without further "git + add"). + + * "git fast-import" didn't accept the command to ask for "notes" feature + to be present in its input stream, even though it was capable of the + feature. + + * "git fsck" gave up scanning loose object files in directories with + garbage files. + +And other minor fixes and documentation updates. diff --git a/Documentation/RelNotes/1.7.4.txt b/Documentation/RelNotes/1.7.4.txt index 6084f7ddf6..d5bca731b5 100644 --- a/Documentation/RelNotes/1.7.4.txt +++ b/Documentation/RelNotes/1.7.4.txt @@ -1,5 +1,5 @@ -Git v1.7.4 Release Notes (draft) -================================ +Git v1.7.4 Release Notes +======================== Updates since v1.7.3 -------------------- @@ -8,15 +8,14 @@ Updates since v1.7.3 docbook-xsl >= 1.73. If you have older versions, you can set ASCIIDOC7 and ASCIIDOC_ROFF, respectively. - * The option parsers of various commands that create new branch (or + * The option parsers of various commands that create new branches (or rename existing ones to a new name) were too loose and users were - allowed to call a branch with a name that begins with a dash by - creative abuse of their command line options, which only lead to - burn themselves. The name of a branch cannot begin with a dash - now. + allowed to give a branch a name that begins with a dash by creative + abuse of their command line options, which only led to burning + themselves. The name of a branch cannot begin with a dash now. * System-wide fallback default attributes can be stored in - /etc/gitattributes; core.attributesfile configuration variable can + /etc/gitattributes; the core.attributesfile configuration variable can be used to customize the path to this file. * The thread structure generated by "git send-email" has changed @@ -26,22 +25,53 @@ Updates since v1.7.3 cover letter of the previous series; this has been changed to make the patches in the new series replies to the new cover letter. - * Bash completion script in contrib/ has been adjusted to be also - usable by zsh. + * The Bash completion script in contrib/ has been adjusted to be usable with + Bash 4 (options with '=value' didn't complete). It has been also made + usable with zsh. - * "git blame" learned --show-email option to display the e-mail + * Different pagers can be chosen depending on which subcommand is + being run under the pager, using the "pager." variable. + + * The hardcoded tab-width of 8 that is used in whitespace breakage checks is now + configurable via the attributes mechanism. + + * Support of case insensitive filesystems (i.e. "core.ignorecase") has + been improved. For example, the gitignore mechanism didn't pay attention + to case insensitivity. + + * The : syntax for naming a blob in a tree, and the : + syntax for naming a blob in the index (e.g. "master:Makefile", + ":hello.c") have been extended. You can start with "./" to + implicitly have the (sub)directory you are in prefixed to the + lookup. Similarly, ":../Makefile" from a subdirectory would mean + "the Makefile of the parent directory in the index". + + * "git blame" learned the --show-email option to display the e-mail addresses instead of the names of authors. - * "git daemon" can be built in MinGW environment. + * "git commit" learned the --fixup and --squash options to help later invocation + of interactive rebase. + + * Command line options to "git cvsimport" whose names are in capital + letters (-A, -M, -R and -S) can now be specified as the default in + the .git/config file by their longer names (cvsimport.authorsFile, + cvsimport.mergeRegex, cvsimport.trackRevisions, cvsimport.ignorePaths). + + * "git daemon" can be built in the MinGW environment. * "git daemon" can take more than one --listen option to listen to multiple addresses. - * "git diff" and "git grep" learned how functions and subroutines - in Fortran look like. + * "git describe --exact-match" was optimized not to read commit + objects unnecessarily. + + * "git diff" and "git grep" learned what functions and subroutines + in Fortran, Pascal and Perl look like. + + * "git fetch" learned the "--recurse-submodules" option. - * "git mergetool" tells vim/gvim to show three-way diff by default - (use vimdiff2/gvimdiff2 as the tool name for old behaviour). + * "git mergetool" tells vim/gvim to show a three-way diff by default + (use vimdiff2/gvimdiff2 as the tool name for old behavior). * "git log -G" limits the output to commits whose change has added or deleted lines that match the given pattern. @@ -51,8 +81,8 @@ Updates since v1.7.3 use the new --empty option to be more explicit instead. * "git repack -f" does not spend cycles to recompress objects in the - non-delta representation anymore (use -F if you really mean it when - e.g. you changed the compression level). + non-delta representation anymore (use -F if you really mean it + e.g. after you changed the core.compression variable setting). * "git merge --log" used to limit the resulting merge log to 20 entries; this is now customizable by giving e.g. "--log=47". @@ -61,30 +91,44 @@ Updates since v1.7.3 directory in one branch while a new file is created in place of that directory in the other branch. - * "git rebase --autosquash" can use SHA-1 object names to name which - commit to fix up (e.g. "fixup! e83c5163"). + * "git merge" learned the "--abort" option, synonymous to + "git reset --merge" when a merge is in progress. - * The default "recursive" merge strategy learned --rename-threshold + * "git notes" learned the "merge" subcommand to merge notes refs. + In addition to the default manual conflict resolution, there are + also several notes merge strategies for automatically resolving + notes merge conflicts. + + * "git rebase --autosquash" can use SHA-1 object names to name the + commit which is to be fixed up (e.g. "fixup! e83c5163"). + + * The default "recursive" merge strategy learned the --rename-threshold option to influence the rename detection, similar to the -M option - of "git diff". E.g. "git merge -Xrename-threshold=50% ..." to use - this. + of "git diff". From the "git merge" frontend, the "-X" + interface, e.g. "git merge -Xrename-threshold=50% ...", can be used + to trigger this. * The "recursive" strategy also learned to ignore various whitespace changes; the most notable is -Xignore-space-at-eol. * "git send-email" learned "--to-cmd", similar to "--cc-cmd", to read - recipient list from a command output. + the recipient list from a command output. * "git send-email" learned to read and use "To:" from its input files. * you can extend "git shell", which is often used on boxes that allow - git-only login over ssh as login shell, with custom set of + git-only login over ssh as login shell, with a custom set of commands. + * The current branch name in "git status" output can be colored differently + from the generic header color by setting the "color.status.branch" variable. + * "git submodule sync" updates metainformation for all submodules, not just the ones that have been checked out. - * gitweb can use custom 'highlight' command with its configuration file. + * gitweb can use a custom 'highlight' command with its configuration file. + + * other gitweb updates. Also contains various documentation updates. @@ -93,31 +137,20 @@ Also contains various documentation updates. Fixes since v1.7.3 ------------------ -All of the fixes in v1.7.3.X maintenance series are included in this +All of the fixes in the v1.7.3.X maintenance series are included in this release, unless otherwise noted. - * "git checkout" removed an untracked file "foo" from the working - tree when switching to a branch that contains a tracked path - "foo/bar". Prevent this, just like the case where the conflicting - path were "foo" (c752e7f..7980872d). - * "git log --author=me --author=her" did not find commits written by me or by her; instead it looked for commits written by me and by her, which is impossible. - * "git merge" into an unborn branch removed an untracked file "foo" - from the working tree when merged branch had "foo" (2caf20c..172b642). - * "git push --progress" shows progress indicators now. + * "git rebase -i" showed a confusing error message when given a + branch name that does not exist. + * "git repack" places its temporary packs under $GIT_OBJECT_DIRECTORY/pack instead of $GIT_OBJECT_DIRECTORY/ to avoid cross directory renames. * "git submodule update --recursive --other-flags" passes flags down to its subinvocations. - ---- -exec >/var/tmp/1 -O=v1.7.3.2-450-g5b9c331 -echo O=$(git describe master) -git shortlog --no-merges ^maint ^$O master diff --git a/Documentation/config.txt b/Documentation/config.txt index 3f01bd929f..c5e183516a 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -317,24 +317,26 @@ false), while all other repositories are assumed to be bare (bare = true). core.worktree:: - Set the path to the root of the work tree. + Set the path to the root of the working tree. This can be overridden by the GIT_WORK_TREE environment - variable and the '--work-tree' command line option. It can be - an absolute path or a relative path to the .git directory, - either specified by --git-dir or GIT_DIR, or automatically - discovered. - If --git-dir or GIT_DIR are specified but none of + variable and the '--work-tree' command line option. + The value can an absolute path or relative to the path to + the .git directory, which is either specified by --git-dir + or GIT_DIR, or automatically discovered. + If --git-dir or GIT_DIR is specified but none of --work-tree, GIT_WORK_TREE and core.worktree is specified, - the current working directory is regarded as the root of the - work tree. + the current working directory is regarded as the top level + of your working tree. + Note that this variable is honored even when set in a configuration -file in a ".git" subdirectory of a directory, and its value differs +file in a ".git" subdirectory of a directory and its value differs from the latter directory (e.g. "/path/to/.git/config" has core.worktree set to "/different/path"), which is most likely a -misconfiguration. Running git commands in "/path/to" directory will +misconfiguration. Running git commands in the "/path/to" directory will still use "/different/path" as the root of the work tree and can cause -great confusion to the users. +confusion unless you know what you are doing (e.g. you are creating a +read-only snapshot of the same index to a location different from the +repository's usual working tree). core.logAllRefUpdates:: Enable the reflog. Updates to a ref is logged to the file @@ -790,7 +792,8 @@ color.status.:: one of `header` (the header text of the status message), `added` or `updated` (files which are added but not committed), `changed` (files which are changed but not added in the index), - `untracked` (files which are not tracked by git), or + `untracked` (files which are not tracked by git), + `branch` (the current branch), or `nobranch` (the color the 'no branch' warning is shown in, defaulting to red). The values of these variables may be specified as in color.branch.. @@ -896,6 +899,11 @@ diff.wordRegex:: sequences that match the regular expression are "words", all other characters are *ignorable* whitespace. +fetch.recurseSubmodules:: + A boolean value which changes the behavior for fetch and pull, the + default is to not recursively fetch populated submodules unless + configured otherwise. + fetch.unpackLimit:: If the number of objects fetched over the git native transfer is below this @@ -990,7 +998,7 @@ gc.packrefs:: Running `git pack-refs` in a repository renders it unclonable by Git versions prior to 1.5.1.2 over dumb transports such as HTTP. This variable determines whether - 'git gc' runs `git pack-refs`. This can be set to `nobare` + 'git gc' runs `git pack-refs`. This can be set to `notbare` to enable it within all non-bare repos or it can be set to a boolean value. The default is `true`. @@ -1810,6 +1818,13 @@ submodule..update:: URL and other values found in the `.gitmodules` file. See linkgit:git-submodule[1] and linkgit:gitmodules[5] for details. +submodule..fetchRecurseSubmodules:: + This option can be used to enable/disable recursive fetching of this + submodule. It can be overridden by using the --[no-]recurse-submodules + command line option to "git fetch" and "git pull". + This setting will override that from in the linkgit:gitmodules[5] + file. + submodule..ignore:: Defines under what circumstances "git status" and the diff family show a submodule as modified. When set to "all", it will never be considered diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt index f3e95389aa..c93124be79 100644 --- a/Documentation/diff-options.txt +++ b/Documentation/diff-options.txt @@ -230,7 +230,7 @@ eligible for being picked up as a possible source of a rename to another file. -M[]:: ---detect-renames[=]:: +--find-renames[=]:: ifndef::git-log[] Detect renames. endif::git-log[] @@ -246,7 +246,7 @@ endif::git-log[] hasn't changed. -C[]:: ---detect-copies[=]:: +--find-copies[=]:: Detect copies as well as renames. See also `--find-copies-harder`. If `n` is specified, it has the same meaning as for `-M`. diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.txt index 678675ccdf..f37276e5ad 100644 --- a/Documentation/fetch-options.txt +++ b/Documentation/fetch-options.txt @@ -64,6 +64,15 @@ ifndef::git-pull[] downloaded. The default behavior for a remote may be specified with the remote..tagopt setting. See linkgit:git-config[1]. + +--[no-]recurse-submodules:: + This option controls if new commits of all populated submodules should + be fetched too (see linkgit:git-config[1] and linkgit:gitmodules[5]). + +--submodule-prefix=:: + Prepend to paths printed in informative messages + such as "Fetching submodule foo". This option is used + internally when recursing over submodules. endif::git-pull[] -u:: diff --git a/Documentation/git-add.txt b/Documentation/git-add.txt index 54aaaeb41b..a03448f923 100644 --- a/Documentation/git-add.txt +++ b/Documentation/git-add.txt @@ -333,7 +333,7 @@ likely to introduce confusing changes to the index. There are also more complex operations that can be performed. But beware that because the patch is applied only to the index and not the working tree, the working tree will appear to "undo" the change in the index. -For example, introducing a a new line into the index that is in neither +For example, introducing a new line into the index that is in neither the HEAD nor the working tree will stage the new line for commit, but the line will appear to be reverted in the working tree. diff --git a/Documentation/git-archive.txt b/Documentation/git-archive.txt index 4163a1bcb1..bf5037ab2a 100644 --- a/Documentation/git-archive.txt +++ b/Documentation/git-archive.txt @@ -116,7 +116,7 @@ Note that attributes are by default taken from the `.gitattributes` files in the tree that is being archived. If you want to tweak the way the output is generated after the fact (e.g. you committed without adding an appropriate export-ignore in its `.gitattributes`), adjust the checked out -`.gitattributes` file as necessary and use `--work-tree-attributes` +`.gitattributes` file as necessary and use `--worktree-attributes` option. Alternatively you can keep necessary attributes that should apply while archiving any tree in your `$GIT_DIR/info/attributes` file. diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt index 6266a3a602..299007b206 100644 --- a/Documentation/git-bundle.txt +++ b/Documentation/git-bundle.txt @@ -59,7 +59,7 @@ unbundle :: :: A list of arguments, acceptable to 'git rev-parse' and - 'git rev-list' (and containg a named ref, see SPECIFYING REFERENCES + 'git rev-list' (and containing a named ref, see SPECIFYING REFERENCES below), that specifies the specific objects and references to transport. For example, `master{tilde}10..master` causes the current master reference to be packaged along with all objects diff --git a/Documentation/git-cherry-pick.txt b/Documentation/git-cherry-pick.txt index 73008705eb..749d68a72b 100644 --- a/Documentation/git-cherry-pick.txt +++ b/Documentation/git-cherry-pick.txt @@ -79,6 +79,16 @@ effect to your index in a row. cherry-pick'ed commit, then a fast forward to this commit will be performed. +--strategy=:: + Use the given merge strategy. Should only be used once. + See the MERGE STRATEGIES section in linkgit:git-merge[1] + for details. + +-X