Merge branch 'mk/old-expat'
[gitweb.git] / Documentation / RelNotes / 1.8.2.txt
index f6d15059dc71c22ace37732b5b215c39c4cec944..4e39b8382cffb29e5dea7cb7a675d2a7badf8d36 100644 (file)
@@ -15,6 +15,13 @@ current branch to the branch with the same name, only when the current
 branch is set to integrate with that remote branch.  There is a user
 preference configuration variable "push.default" to change this.
 
+"git push $there tag v1.2.3" used to allow replacing a tag v1.2.3
+that already exists in the repository $there, if the rewritten tag
+you are pushing points at a commit that is a decendant of a commit
+that the old tag v1.2.3 points at.  This was found to be error prone
+and starting with this release, any attempt to update an existing
+ref under refs/tags/ hierarchy will fail, without "--force".
+
 
 Updates since v1.8.1
 --------------------
@@ -26,6 +33,18 @@ UI, Workflows & Features
  * Output from the tests is coloured using "green is okay, yellow is
    questionable, red is bad and blue is informative" scheme.
 
+ * Mention of "GIT/Git/git" in the documentation have been updated to
+   be more uniform and consistent.  The name of the system and the
+   concept it embodies is "Git"; the command the users type is "git".
+   All-caps "GIT" was merely a way to imitate "Git" typeset in small
+   caps in our ASCII text only documentation and to be avoided.
+
+ * The completion script (in contrib/completion) used to let the
+   default completer to suggest pathnames, which gave too many
+   irrelevant choices (e.g. "git add" would not want to add an
+   unmodified path).  It learnt to use a more git-aware logic to
+   enumerate only relevant ones.
+
  * In bare repositories, "git shortlog" and other commands now read
    mailmap files from the tip of the history, to help running these
    tools in server settings.
@@ -38,11 +57,38 @@ UI, Workflows & Features
  * Scripts can ask Git that wildcard patterns in pathspecs they give do
    not have any significance, i.e. take them as literal strings.
 
- * The pathspec code learned to grok "foo/**/bar" as a pattern that
-   matches "bar" in 0-or-more levels of subdirectory in "foo".
+ * The patterns in .gitignore and .gitattributes files can have **/,
+   as a pattern that matches 0 or more levels of subdirectory.
+   E.g. "foo/**/bar" matches "bar" in "foo" itself or in a
+   subdirectory of "foo".
+
+ * When giving arguments without "--" disambiguation, object names
+   that come earlier on the command line must not be interpretable as
+   pathspecs and pathspecs that come later on the command line must
+   not be interpretable as object names.  This disambiguation rule has
+   been tweaked so that ":/" (no other string before or after) is
+   always interpreted as a pathspec; "git cmd -- :/" is no longer
+   needed, you can just say "git cmd :/".
+
+ * Various "hint" lines Git gives when it asks the user to edit
+   messages in the editor are commented out with '#' by default. The
+   core.commentchar configuration variable can be used to customize
+   this '#' to a different character.
+
+ * "git add -u" and "git add -A" without pathspec issues warning to
+   make users aware that they are only operating on paths inside the
+   subdirectory they are in.  Use ":/" (everything from the top) or
+   "." (everything from the $cwd) to disambiguate.
 
  * "git blame" (and "git diff") learned the "--no-follow" option.
 
+ * "git branch" now rejects some nonsense combinations of command line
+   arguments (e.g. giving more than one branch name to rename) with
+   more case-specific error messages.
+
+ * "git check-ignore" command to help debugging .gitignore files has
+   been added.
+
  * "git cherry-pick" can be used to replay a root commit to an unborn
    branch.
 
@@ -69,15 +115,41 @@ UI, Workflows & Features
    rewrite the names and email addresses of people using the mailmap
    mechanism.
 
+ * "git log --cc --graph" now shows the combined diff output with the
+   ancestry graph.
+
+ * "git mergetool" and "git difftool" learned to list the available
+   tool backends in a more consistent manner.
+
+ * "git mergetool" is aware of TortoiseGitMerge now and uses it over
+   TortoiseMerge when available.
+
  * "git push" now requires "-f" to update a tag, even if it is a
    fast-forward, as tags are meant to be fixed points.
 
+ * Error messages from "git push" when it stops to prevent remote refs
+   from getting overwritten by mistake have been improved to explain
+   various situations separately.
+
+ * "git push" will stop without doing anything if the new "pre-push"
+   hook exists and exits with a failure.
+
  * When "git rebase" fails to generate patches to be applied (e.g. due
    to oom), it failed to detect the failure and instead behaved as if
    there were nothing to do.  A workaround to use a temporary file has
    been applied, but we probably would want to revisit this later, as
    it hurts the common case of not failing at all.
 
+ * Input and preconditions to "git reset" has been loosened where
+   appropriate.  "git reset $fromtree Makefile" requires $fromtree to
+   be any tree (it used to require it to be a commit), for example.
+   "git reset" (without options or parameters) used to error out when
+   you do not have any commits in your history, but it now gives you
+   an empty index (to match non-existent commit you are not even on).
+
+ * "git status" says what branch is being bisected or rebased when
+   able, not just "bisecting" or "rebasing".
+
  * "git submodule" started learning a new mode to integrate with the
    tip of the remote branch (as opposed to integrating with the commit
    recorded in the superproject's gitlink).
@@ -90,6 +162,13 @@ Foreign Interface
 
  * A new remote helper to interact with bzr has been added to contrib/.
 
+ * "git p4" got various bugfixes around its branch handling.  It is
+   also made usable with Python 2.4/2.5.  In addition, its various
+   portability issues for Cygwin have been addressed.
+
+ * The remote helper to interact with Hg in contrib/ has seen a few
+   fixes.
+
 
 Performance, Internal Implementation, etc.
 
@@ -99,13 +178,45 @@ Performance, Internal Implementation, etc.
  * Matching paths with common forms of pathspecs that contain wildcard
    characters has been optimized further.
 
+ * We stopped paying attention to $GIT_CONFIG environment that points
+   at a single configuration file from any command other than "git config"
+   quite a while ago, but "git clone" internally set, exported, and
+   then unexported the variable during its operation unnecessarily.
+
+ * "git reset" internals has been reworked and should be faster in
+   general. We tried to be careful not to break any behaviour but
+   there could be corner cases, especially when running the command
+   from a conflicted state, that we may have missed.
+
  * The implementation of "imap-send" has been updated to reuse xml
-   quoting code from http-push codepath.
+   quoting code from http-push codepath, and lost a lot of unused
+   code.
 
  * There is a simple-minded checker for the test scripts in t/
    directory to catch most common mistakes (it is not enabled by
    default).
 
+ * You can build with USE_WILDMATCH=YesPlease to use a replacement
+   implementation of pattern matching logic used for pathname-like
+   things, e.g. refnames and paths in the repository.  This new
+   implementation is not expected change the existing behaviour of Git
+   in this release, except for "git for-each-ref" where you can now
+   say "refs/**/master" and match with both refs/heads/master and
+   refs/remotes/origin/master.  We plan to use this new implementation
+   in wider places (e.g. "git ls-files '**/Makefile' may find Makefile
+   at the top-level, and "git log '**/t*.sh'" may find commits that
+   touch a shell script whose name begins with "t" at any level) in
+   future versions of Git, but we are not there yet.  By building with
+   USE_WILDMATCH, using the resulting Git daily and reporting when you
+   find breakages, you can help us get closer to that goal.
+
+ * Some reimplementations of Git do not write all the stat info back
+   to the index due to their implementation limitations (e.g. jgit).
+   A configuration option can tell Git to ignore changes to most of
+   the stat fields and only pay attention to mtime and size, which
+   these implementations can reliably update.  This can be used to
+   avoid excessive revalidation of contents.
+
 
 Also contains minor documentation updates and code clean-ups.
 
@@ -120,117 +231,169 @@ details).
  * An element on GIT_CEILING_DIRECTORIES list that does not name the
    real path to a directory (i.e. a symbolic link) could have caused
    the GIT_DIR discovery logic to escape the ceiling.
-   (merge 059b379 mh/ceiling later to maint).
 
  * When attempting to read the XDG-style $HOME/.config/git/config and
    finding that $HOME/.config/git is a file, we gave a wrong error
    message, instead of treating the case as "a custom config file does
    not exist there" and moving on.
-   (merge 8f2bbe4 jn/warn-on-inaccessible-loosen later to maint).
 
  * The behaviour visible to the end users was confusing, when they
    attempt to kill a process spawned in the editor that was in turn
    launched by Git with SIGINT (or SIGQUIT), as Git would catch that
    signal and die.  We ignore these signals now.
-   (merge 1250857 pf/editor-ignore-sigint later to maint).
+   (merge 0398fc34 pf/editor-ignore-sigint later to maint).
 
  * A child process that was killed by a signal (e.g. SIGINT) was
    reported in an inconsistent way depending on how the process was
    spawned by us, with or without a shell in between.
-   (merge 709ca73 jk/unify-exit-code-by-receiving-signal later to maint).
 
  * After failing to create a temporary file using mkstemp(), failing
    pathname was not reported correctly on some platforms.
-   (merge f7be59b jc/mkstemp-more-careful-error-reporting later to maint).
+
+ * We used to stuff "user@" and then append what we read from
+   /etc/mailname to come up with a default e-mail ident, but a bug
+   lost the "user@" part.
 
  * The attribute mechanism didn't allow limiting attributes to be
    applied to only a single directory itself with "path/" like the
-   exclude mechanism does.
-   (merge 94bc671 ja/directory-attrs later to maint).
+   exclude mechanism does.  The initial implementation of this that
+   was merged to 'maint' and 1.8.1.2 was with a severe performance
+   degradations and needs to merge a fix-up topic.
+
+ * The smart HTTP clients forgot to verify the content-type that comes
+   back from the server side to make sure that the request is being
+   handled properly.
+   (merge 3443db5 sp/smart-http-content-type-check later to maint).
+
+ * "git am" did not parse datestamp correctly from Hg generated patch,
+   when it is run in a locale outside C (or en).
 
  * "git apply" misbehaved when fixing whitespace breakages by removing
    excess trailing blank lines.
-   (merge 5de7166 jc/apply-trailing-blank-removal later to maint).
+
+ * "git apply --summary" has been taught to make sure the similarity
+   value shown in its output is sensible, even when the input had a
+   bogus value.
+   (merge afcb6ac jk/apply-similaritly-parsing later to maint).
 
  * A tar archive created by "git archive" recorded a directory in a
    way that made NetBSD's implementation of "tar" sometimes unhappy.
-   (merge 22f0dcd rs/leave-base-name-in-name-field-of-tar later to maint).
 
  * "git archive" did not record uncompressed size in the header when
    streaming a zip archive, which confused some implementations of unzip.
-   (merge 5ea2c84 rs/zip-with-uncompressed-size-in-the-header later to maint).
+
+ * "git archive" did not parse configuration values in tar.* namespace
+   correctly.
+   (merge b3873c3 jk/config-parsing-cleanup later to maint).
+
+ * Attempt to "branch --edit-description" an existing branch, while
+   being on a detached HEAD, errored out.
+
+ * "git clean" showed what it was going to do, but sometimes end up
+   finding that it was not allowed to do so, which resulted in a
+   confusing output (e.g. after saying that it will remove an
+   untracked directory, it found an embedded git repository there
+   which it is not allowed to remove).  It now performs the actions
+   and then reports the outcome more faithfully.
+   (merge f538a91 zk/clean-report-failure later to maint).
 
  * When "git clone --separate-git-dir=$over_there" is interrupted, it
    failed to remove the real location of the $GIT_DIR it created.
    This was most visible when interrupting a submodule update.
-   (merge 9be1980 jl/interrupt-clone-remove-separate-git-dir later to maint).
+
+ * "git cvsimport" mishandled timestamps at DST boundary.
+   (merge 48c9162 bw/get-tz-offset-perl later to maint).
+
+ * We used to have an arbitrary 32 limit for combined diff input,
+   resulting in incorrect number of leading colons shown when showing
+   the "--raw --cc" output.
+   (merge edbc00e jc/combine-diff-many-parents later to maint).
+
+ * "git fetch --depth" was broken in at least three ways.  The
+   resulting history was deeper than specified by one commit, it was
+   unclear how to wipe the shallowness of the repository with the
+   command, and documentation was misleading.
+   (merge cfb70e1 nd/fetch-depth-is-broken later to maint).
+
+ * "git log --all -p" that walked refs/notes/textconv/ ref can later
+   try to use the textconv data incorrectly after it gets freed.
+   (merge be5c9fb jk/read-commit-buffer-data-after-free later to maint).
+
+ * We forgot to close the file descriptor reading from "gpg" output,
+   killing "git log --show-signature" on a long history.
 
  * The way "git svn" asked for password using SSH_ASKPASS and
    GIT_ASKPASS was not in line with the rest of the system.
-   (merge e9263e4 ss/svn-prompt later to maint).
 
  * The --graph code fell into infinite loop when asked to do what the
    code did not expect.
-   (merge 656197a mk/maint-graph-infinity-loop later to maint).
 
  * http transport was wrong to ask for the username when the
    authentication is done by certificate identity.
-   (merge 75e9a40 rb/http-cert-cred-no-username-prompt later to maint).
 
  * "git pack-refs" that ran in parallel to another process that
    created new refs had a nasty race.
-   (merge b3f1280 jk/repack-ref-racefix later to maint).
+
+ * Rebasing the history of superproject with change in the submodule
+   has been broken since v1.7.12.
 
  * After "git add -N" and then writing a tree object out of the
    index, the cache-tree data structure got corrupted.
-   (merge eec3e7e nd/invalidate-i-t-a-cache-tree later to maint).
+
+ * "git clone" used to allow --bare and --separate-git-dir=$there
+   options at the same time, which was nonsensical.
+   (merge 95b63f1 nd/clone-no-separate-git-dir-with-bare later to maint).
+
+ * "git rebase --preserve-merges" lost empty merges in recent versions
+   of Git.
 
  * "git merge --no-edit" computed who were involved in the work done
    on the side branch, even though that information is to be discarded
    without getting seen in the editor.
-   (merge 9bcbb1c jc/maint-fmt-merge-msg-no-edit-lose-credit later to maint).
 
  * "git merge" started calling prepare-commit-msg hook like "git
    commit" does some time ago, but forgot to pay attention to the exit
    status of the hook.
-   (merge 3e4141d ap/merge-stop-at-prepare-commit-msg-failure later to maint).
+
+ * A failure to push due to non-ff while on an unborn branch
+   dereferenced a NULL pointer when showing an error message.
 
  * When users spell "cc:" in lowercase in the fake "header" in the
    trailer part, "git send-email" failed to pick up the addresses from
    there. As e-mail headers field names are case insensitive, this
    script should follow suit and treat "cc:" and "Cc:" the same way.
-   (merge 6310071 nz/send-email-headers-are-case-insensitive later to maint).
 
  * Output from "git status --ignored" showed an unexpected interaction
    with "--untracked".
-   (merge a45fb69 ap/status-ignored-in-ignored-directory later to maint).
 
  * "gitweb", when sorting by age to show repositories with new
    activities first, used to sort repositories with absolutely
    nothing in it early, which was not very useful.
-   (merge 28dae18 md/gitweb-sort-by-age later to maint).
 
  * "gitweb"'s code to sanitize control characters before passing it to
    "highlight" filter lost known-to-be-safe control characters by
    mistake.
-   (merge 0e901d2 os/gitweb-highlight-uncaptured later to maint).
+
+ * "gitweb" pages served over HTTPS, when configured to show picon or
+   gravatar, referred to these external resources to be fetched via
+   HTTP, resulting in mixed contents warning in browsers.
+   (merge 5748558 ab/gitweb-use-same-scheme later to maint).
 
  * When a line to be wrapped has a solid run of non space characters
    whose length exactly is the wrap width, "git shortlog -w" failed
    to add a newline after such a line.
-   (merge e0db176 sp/shortlog-missing-lf later to maint).
 
  * Command line completion leaked an unnecessary error message while
    looking for possible matches with paths in <tree-ish>.
-   (merge ca87dd6 ds/completion-silence-in-tree-path-probe later to maint).
 
  * Command line completion for "tcsh" emitted an unwanted space
    after completing a single directory name.
-   (merge 92f1c04 mk/complete-tcsh later to maint).
+
+ * Command line completion code was inadvertently made incompatible with
+   older versions of bash by using a newer array notation.
 
  * Some shells do not behave correctly when IFS is unset; work it
    around by explicitly setting it to the default value.
-   (merge 393050c jc/maint-fbsd-sh-ifs-workaround later to maint).
 
  * Some scripted programs written in Python did not get updated when
    PYTHON_PATH changed.
@@ -238,24 +401,32 @@ details).
 
  * When autoconf is used, any build on a different commit always ran
    "config.status --recheck" even when unnecessary.
-   (merge 1226504 jn/less-reconfigure later to maint).
+
+ * A fix was added to the build procedure to work around buggy
+   versions of ccache broke the auto-generation of dependencies, which
+   unfortunately is still relevant because some people use ancient
+   distros.
+
+ * The autoconf subsystem passed --mandir down to generated
+   config.mak.autogen but forgot to do the same for --htmldir.
+   (merge fc1c541 ct/autoconf-htmldir later to maint).
 
  * We have been carrying a translated and long-unmaintained copy of an
    old version of the tutorial; removed.
-   (merge 0a85441 ta/remove-stale-translated-tut later to maint).
+
+ * t0050 had tests expecting failures from a bug that was fixed some
+   time ago.
 
  * t4014, t9502 and t0200 tests had various portability issues that
    broke on OpenBSD.
-   (merge 27f6342 jc/maint-test-portability later to maint).
 
  * t9020 and t3600 tests had various portability issues.
-   (merge 5a02966 jc/test-portability later to maint).
 
  * t9200 runs "cvs init" on a directory that already exists, but a
    platform can configure this fail for the current user (e.g. you
    need to be in the cvsadmin group on NetBSD 6.0).
-   (merge 8666df0 jc/test-cvs-no-init-in-existing-dir later to maint).
 
  * t9020 and t9810 had a few non-portable shell script construct.
-   (merge 2797914 tb/test-t9020-no-which later to maint).
-   (merge 6f4e505 tb/test-t9810-no-sed-i later to maint).
+
+ * Scripts to test bash completion was inherently flaky as it was
+   affected by whatever random things the user may have on $PATH.