{"thread":{"id":"38339","subject":"[ANNOUNCE] Git v2.3.0-rc0","startedAt":"2015-01-12T23:57:17Z","lastAt":"2015-01-21T00:36:05Z","messageCount":7,"participants":["Junio C Hamano","Christian Neukirchen","Ævar Arnfjörð Bjarmason","Jeff King"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"254572","messageId":"xmqqmw5n5z8i.fsf@gitster.dls.corp.google.com","threadId":"38339","inReplyTo":null,"subject":"[ANNOUNCE] Git v2.3.0-rc0","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2015-01-12T23:57:17Z","receivedAt":"2015-01-12T23:57:17Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"An early preview release Git v2.3.0-rc0 is now available for\ntesting at the usual places.\n\nWith the slowness from the end-of-year holiday, this cycle turned\nout to be a relatively lean one as I predicted (just 200 changes\nsince 2.2, as opposed to ~500 changes in an normal cycle), but that\nis fine.  From time to time it is OK to have a release that does not\nadd many new things but just fixes niggles here and there.\n\nThe tarballs are found at:\n\n    https://www.kernel.org/pub/software/scm/git/testing/\n\nThe following public repositories all have a copy of the 'v2.3.0-rc0'\ntag and the 'master' branch that the tag points at:\n\n  url = https://kernel.googlesource.com/pub/scm/git/git\n  url = git://repo.or.cz/alt-git.git\n  url = https://code.google.com/p/git-core/\n  url = git://git.sourceforge.jp/gitroot/git-core/git.git\n  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core\n  url = https://github.com/gitster/git\n\nGit v2.3 Release Notes (draft)\n==============================\n\nUpdates since v2.2\n------------------\n\nPorts\n\n * Recent gcc toolchain on Cygwin started throwing compilation warning,\n   which has been squelched.\n\n\nUI, Workflows & Features\n\n * It was cumbersome to use \"GIT_SSH\" mechanism when the user wanted\n   to pass an extra set of arguments to the underlying ssh.  A new\n   environment variable GIT_SSH_COMMAND can be used for this.\n\n * A request to store an empty note via \"git notes\" meant to remove\n   note from the object but with --allow-empty we will store a\n   (surprise!)  note that is empty.\n\n * \"git interpret-trailers\" learned to properly handle the\n   \"Conflicts:\" block at the end.\n\n * \"git am\" learned \"--message-id\" option to copy the message ID of\n   the incoming e-mail to the log message of resulting commit.\n\n * \"git clone --reference=<over there>\" learned the \"--dissociate\"\n   option to go with it; it borrows objects from the reference object\n   store while cloning only to reduce network traffic and then\n   dissociates the resulting clone from the reference by performing\n   local copies of borrowed objects.\n\n * \"git send-email\" learned \"--transfer-encoding\" option to force a\n   non-fault Content-Transfer-Encoding header (e.g. base64).\n\n * \"git send-email\" normally identifies itself via X-Mailer: header in\n   the message it sends out.  A new command line flag --no-xmailer\n   allows the user to squelch the header.\n\n * \"git push\" into a repository with a working tree normally refuses\n   to modify the branch that is checked out.  The command learned to\n   optionally do an equivalent of \"git reset --hard\" only when there\n   is no change to the working tree and the index instead, which would\n   be useful to \"deploy\" by pushing into a repository.\n\n * \"git new-workdir\" (in contrib/) can be used to populate an empty\n   and existing directory now.\n\n * Credential helpers are asked in turn until one of them give\n   positive response, which is cumbersome to turn off when you need to\n   run Git in an automated setting.  The credential helper interface\n   learned to allow a helper to say \"stop, don't ask other helpers.\"\n   Also GIT_TERMINAL_PROMPT environment can be set to false to disable\n   our built-in prompt mechanism for passwords.\n\n * \"git branch -d\" (delete) and \"git branch -m\" (move) learned to\n   honor \"-f\" (force) flag; unlike many other subcommands, the way to\n   force these have been with separate \"-D/-M\" options, which was\n   inconsistent.\n\n * \"diff-highlight\" filter (in contrib/) allows its color output to be\n   customized via configuration variables.\n\n * \"git imap-send\" learned to take \"-v\" (verbose) and \"-q\" (quiet)\n   command line options.\n\n * \"git imap-send\" now can be built to use cURL library to talk to\n   IMAP servers (if the library is recent enough, of course).\n   This allows you to use authenticate method other than CRAM-MD5,\n   among other things.\n\n\nPerformance, Internal Implementation, Development Support etc.\n\n * Earlier we made \"rev-list --object-edge\" more aggressively list the\n   objects at the edge commits, in order to reduce number of objects　\n   fetched into a shallow repository, but the change affected cases\n   other than \"fetching into a shallow repository\" and made it\n   unusably slow (e.g. fetching into a normal repository should not\n   have to suffer the overhead from extra processing).  Limit it to a\n   more specific case by introducing --objects-edge-aggressive, a new\n   option to rev-list.\n\n * Squelched useless compiler warnings on Mac OS X regarding the\n   crypto API.\n\n * The procedure to generate unicode table has been simplified.\n\n * Some filesystems assign filemodes in a strange way, fooling then\n   automatic \"filemode trustability\" check done during a new\n   repository creation.  The initialization codepath has been hardened\n   against this issue.\n\n * The codepath in \"git remote update --prune\" to drop many refs has\n   been optimized.\n\n * The API into get_merge_bases*() family of functions was easy to\n   misuse, which has been corrected to make it harder to do so.\n\n * Long overdue departure from the assumption that S_IFMT is shared by\n   everybody made in 2005, which was necessary to port to z/OS.\n\n * \"git push\" and \"git fetch\" did not communicate an overlong refname\n   correctly.  Now it uses 64kB sideband to accommodate longer ones.\n\n * Recent GPG changes the keyring format and drops support for RFC1991\n   formatted signatures, breaking our existing tests.\n\n * \"git-prompt\" (in contrib/) used a variable from the global scope,\n   possibly contaminating end-user's namespace.\n\n\nAlso contains various documentation updates and code clean-ups.\n\n\nFixes since v2.2\n----------------\n\nUnless otherwise noted, all the fixes since v2.2 in the maintenance\ntrack are contained in this release (see the maintenance releases'\nnotes for details).\n\n * The logic in \"git bisect bad HEAD\" etc. to avoid forcing the test\n   of the common ancestor of bad and good commits was broken.\n   (merge 07913d5 cc/bisect-rev-parsing later to maint).\n\n * \"git checkout-index --temp=$target $path\" did not work correctly\n   for paths outside the current subdirectory in the project.\n   (merge 74c4de5 es/checkout-index-temp later to maint).\n\n * The report from \"git checkout\" on a branch that builds on another\n   local branch by setting its branch.*.merge to branch name (not a\n   full refname) incorrectly said that the upstream is gone.\n   (merge 05e7368 jc/checkout-local-track-report later to maint).\n\n * With The git-prompt support (in contrib/), using the exit status of\n   the last command in the prompt, e.g.  PS1='$(__git_ps1) $? ', did\n   not work well, because the helper function stomped on the exit\n   status.\n   (merge eb443e3 tf/prompt-preserve-exit-status later to maint).\n\n\n * Recent update to \"git commit\" broke amending an existing commit\n   with bogus author/committer lines without a valid e-mail address.\n   (merge c83a509 jk/commit-date-approxidate later to maint).\n\n * The lockfile API used to get confused which file to clean up when\n   the process moved the $cwd after creating a lockfile.\n   (merge fa137f6 nd/lockfile-absolute later to maint).\n\n * Traditionally we tried to avoid interpreting date strings given by\n   the user as future dates, e.g. GIT_COMMITTER_DATE=2014-12-10 when\n   used early November 2014 was taken as \"October 12, 2014\" because it\n   is likely that a date in the future, December 10, is a mistake.\n   This heuristics has been loosened to allow people to express future\n   dates (most notably, --until=<date> may want to be far in the\n   future) and we no longer tiebreak by future-ness of the date when\n\n    (1) ISO-like format is used, and\n    (2) the string can make sense interpreted as both y-m-d and y-d-m.\n\n   Git may still have to use the heuristics to tiebreak between dd/mm/yy\n   and mm/dd/yy, though.\n   (merge d372395 jk/approxidate-avoid-y-d-m-over-future-dates later to maint).\n\n * Git did not correctly read an overlong refname from a packed refs\n   file.\n   (merge ea41783 jk/read-packed-refs-without-path-max later to maint).\n\n * \"git apply\" was described in the documentation to take --ignore-date\n   option, which it does not.\n   (merge 0cef4e7 rw/apply-does-not-take-ignore-date later to maint).\n\n * \"git add -i\" did not notice when the interactive command input\n   stream went away and kept asking the same question.\n   (merge a8bec7a jk/add-i-read-error later to maint).\n\n * \"git send-email\" did not handle RFC 2047 encoded headers quite\n   right.\n   (merge ab47e2a rd/send-email-2047-fix later to maint).\n\n * New tag object format validation added in 2.2 showed garbage after\n   a tagname it reported in its error message.\n   (merge a1e920a js/fsck-tag-validation later to maint).\n\n * The code that reads the reflog from the newer to the older entries\n   did not handle an entry that crosses a boundary of block it uses to\n   read them correctly.\n   (merge 69216bf jk/for-each-reflog-ent-reverse later to maint).\n\n * \"git diff -B -M\" after making a new copy B out of an existing file\n   A and then editing A extensively ought to report that B was created\n   by copying A and A was modified, which is what \"git diff -C\"\n   reports, but it instead said A was renamed to B and A was edited\n   heavily in place.  This was not just incoherent but also failed to\n   apply with \"git apply\".  The report has been corrected to match what\n   \"git diff -C\" produces for this case.\n   (merge 6936b58 jc/diff-b-m later to maint).\n\n * In files we pre-populate for the user to edit with commented hints,\n   a line of hint that is indented with a tab used to show as '#' (or\n   any comment char), ' ' (space), and then the hint text that began\n   with the tab, which some editors flag as an indentation error (tab\n   following space).  We now omit the space after the comment char in\n   such a case.\n   (merge d55aeb7 jc/strbuf-add-lines-avoid-sp-ht-sequence later to maint).\n\n * \"git ls-tree\" does not support path selection based on negative\n   pathspecs, but did not error out when negative pathspecs are given.\n   (merge f1f6224 nd/ls-tree-pathspec later to maint).\n\n * The function sometimes returned a non-freeable memory and some\n   other times returned a piece of memory that must be freed, leading\n   to inevitable leaks.\n   (merge 59362e5 jc/exec-cmd-system-path-leak-fix later to maint).\n\n * The code to abbreviate an object name to its short unique prefix\n   has been optimized when no abbreviation was requested.\n   (merge 61e704e mh/find-uniq-abbrev later to maint).\n\n * \"git add --ignore-errors ...\" did not ignore an error to\n   give a file that did not exist.\n   (merge 1d31e5a mg/add-ignore-errors later to maint).\n\n * \"git checkout $treeish $path\", when $path in the index and the\n   working tree already matched what is in $treeish at the $path,\n   still overwrote the $path unnecessarily.\n   (merge c5326bd jk/checkout-from-tree later to maint).\n\n * \"git config --get-color\" did not parse its command line arguments\n   carefully.\n   (merge cb35722 jk/colors-fix later to maint).\n\n * open() emulated on Windows platforms did not give EISDIR upon\n   an attempt to open a directory for writing.\n   (merge ba6fad0 js/windows-open-eisdir-error later to maint).\n\n * A few code paths used abs() when they should have used labs() on\n   long integers.\n   (merge 83915ba rs/maint-config-use-labs later to maint).\n   (merge 31a8aa1 rs/receive-pack-use-labs later to maint).\n\n * \"gitweb\" used to depend on a behaviour recent CGI.pm deprecated.\n   (merge 13dbf46 jk/gitweb-with-newer-cgi-multi-param later to maint).\n\n * \"git init\" (hence \"git clone\") initialized the per-repository\n   configuration file .git/config with x-bit by mistake.\n   (merge 1f32ecf mh/config-flip-xbit-back-after-checking later to maint).\n\n * Git 2.0 was supposed to make the \"simple\" mode for the default of\n   \"git push\", but it didn't.\n   (merge 00a6fa0 jk/push-simple later to maint).\n\n * \"Everyday\" document had a broken link.\n   (merge 366c8d4 po/everyday-doc later to maint).\n\n * A few test fixes.\n   (merge 880ef58 jk/no-perl-tests later to maint).\n\n * The build procedure did not bother fixing perl and python scripts\n   when NO_PERL and NO_PYTHON build-time configuration changed.\n   (merge ca2051d jk/rebuild-perl-scripts-with-no-perl-seting-change later to maint).\n\n----------------------------------------------------------------\n\nChanges since v2.2.0 are as follows:\n\nAlexander Kuleshov (1):\n      clean: typofix\n\nAlfred Perlstein (1):\n      git-svn: support for git-svn propset\n\nBeat Bolli (5):\n      update_unicode.sh: simplify output capture\n      update_unicode.sh: set UNICODE_DIR only once\n      update_unicode.sh: shorten uniset invocation path\n      update_unicode.sh: make the output structure visible\n      update_unicode.sh: delete the command group\n\nBen Walton (1):\n      t0090: tweak awk statement for Solaris /usr/xpg4/bin/awk\n\nBernhard Reiter (2):\n      imap-send: use parse options API to determine verbosity\n      git-imap-send: use libcurl for implementation\n\nChristian Couder (5):\n      commit: make ignore_non_trailer() non static\n      trailer: reuse ignore_non_trailer() to ignore conflict lines\n      trailer: add test with an old style conflict block\n      bisect: parse revs before passing them to check_expected_revs()\n      bisect: add test to check that revs are properly parsed\n\nChristian Hesse (4):\n      tests: create gpg homedir on the fly\n      tests: skip RFC1991 tests for gnupg 2.1\n      tests: replace binary GPG keyrings with ASCII-armored keys\n      tests: make comment on GPG keyring match the code\n\nDan Wyand (1):\n      git-sh-setup.sh: use dashdash with basename call\n\nDavid Aguilar (4):\n      mergetool--lib: remove use of $status global\n      difftool--helper: add explicit exit statement\n      mergetool: simplify conditionals\n      mergetools: stop setting $status in merge_cmd()\n\nDavid Michael (1):\n      compat: convert modes to use portable file type values\n\nEric Sunshine (7):\n      git-compat-util: suppress unavoidable Apple-specific deprecation warnings\n      t2004: modernize style\n      t2004: drop unnecessary write-tree/read-tree\n      t2004: standardize file naming in symlink test\n      t2004: demonstrate broken relative path printing\n      checkout-index: fix --temp relative path mangling\n      SubmittingPatches: explain rationale for using --notes with format-patch\n\nHartmut Henkel (1):\n      l10n: de.po: fix typos\n\nJeff King (38):\n      pass TIME_DATE_NOW to approxidate future-check\n      checkout $tree: do not throw away unchanged index entries\n      approxidate: allow ISO-like dates far in the future\n      Makefile: have perl scripts depend on NO_PERL setting\n      t0090: mark add-interactive test with PERL prerequisite\n      t960[34]: mark cvsimport tests as requiring perl\n      gitweb: hack around CGI's list-context param() handling\n      docs: describe ANSI 256-color mode\n      config: fix parsing of \"git config --get-color some.key -1\"\n      t4026: test \"normal\" color\n      parse_color: refactor color storage\n      parse_color: support 24-bit RGB values\n      parse_color: recognize \"no$foo\" to clear the $foo attribute\n      diff-highlight: allow configurable colors\n      push: truly use \"simple\" as default, not \"upstream\"\n      credential: let helpers tell us to quit\n      prompt: respect GIT_TERMINAL_PROMPT to disable terminal prompts\n      for_each_reflog_ent_reverse: fix newlines on block boundaries\n      for_each_reflog_ent_reverse: turn leftover check into assertion\n      fsck: properly bound \"invalid tag name\" error message\n      parse_color: drop COLOR_BACKGROUND macro\n      read_packed_refs: use a strbuf for reading lines\n      read_packed_refs: pass strbuf to parse_ref_line\n      read_packed_refs: use skip_prefix instead of static array\n      pkt-line: allow writing of LARGE_PACKET_MAX buffers\n      t: support clang/gcc AddressSanitizer\n      commit: loosen ident checks when generating template\n      commit: always populate GIT_AUTHOR_* variables\n      add--interactive: leave main loop on read error\n      unpack-trees: propagate errors adding entries to the index\n      read-tree: add tests for confusing paths like \"..\" and \".git\"\n      verify_dotfile(): reject .git case-insensitively\n      t1450: refactor \".\", \"..\", and \".git\" fsck tests\n      fsck: notice .git case-insensitively\n      utf8: add is_hfs_dotgit() helper\n      read-cache: optionally disallow HFS+ .git variants\n      fsck: complain about HFS+ \".git\" aliases in trees\n      is_hfs_dotgit: loosen over-eager match of \\u{..47}\n\nJim Hill (1):\n      pre-push.sample: remove unnecessary and misleading IFS=' '\n\nJohan Herland (9):\n      builtin/notes: fix premature failure when trying to add the empty blob\n      t3301: verify that 'git notes' removes empty notes by default\n      builtin/notes: improve naming\n      builtin/notes: refactor note file path into struct note_data\n      builtin/notes: simplify early exit code in add()\n      builtin/notes: split create_note() to clarify add vs. remove logic\n      builtin/notes: add --allow-empty, to allow storing empty notes\n      notes: empty notes should be shown by 'git log'\n      t3301: modernize style\n\nJohannes Schindelin (5):\n      receive-pack: add another option for receive.denyCurrentBranch\n      test-hashmap: squelch gcc compiler warning\n      path: add is_ntfs_dotgit() helper\n      read-cache: optionally disallow NTFS .git variants\n      fsck: complain about NTFS \".git\" aliases in trees\n\nJohannes Sixt (2):\n      Windows: correct detection of EISDIR in mingw_open()\n      t5000 on Windows: do not mistake \"sh.exe\" as \"sh\"\n\nJonathan Nieder (2):\n      Makefile: simplify by using SCRIPT_{PERL,SH}_GEN macros\n      Makefile: have python scripts depend on NO_PYTHON setting\n\nJunio C Hamano (38):\n      checkout: report upstream correctly even with loosely defined branch.*.merge\n      clone: --dissociate option to mark that reference is only temporary\n      diff -B -M: fix output for \"copy and then rewrite\" case\n      builtin/merge.c: drop a parameter that is never used\n      merge & sequencer: unify codepaths that write \"Conflicts:\" hint\n      strbuf_add_commented_lines(): avoid SP-HT sequence in commented lines\n      builtin/commit.c: extract ignore_non_trailer() helper function\n      merge & sequencer: turn \"Conflicts:\" hint into a comment\n      bisect: clean flags after checking merge bases\n      get_merge_bases(): always clean-up object flags\n      unpack_trees: plug leakage of o->result\n      mergetool--lib: remove no-op assignment to $status from setup_user_tool\n      SubmittingPatches: refer to t/README for tests\n      t/README: justify why \"! grep foo\" is sufficient\n      t9001: style modernisation phase #1\n      t9001: style modernisation phase #2\n      t9001: style modernisation phase #3\n      t9001: style modernisation phase #4\n      t9001: style modernisation phase #5\n      system_path(): always return free'able memory to the caller\n      t5516: more tests for receive.denyCurrentBranch=updateInstead\n      run-command.c: retire unused run_hook_with_custom_index()\n      t3102: document that ls-tree does not yet support negated pathspec\n      t3102: style modernization\n      Start post 2.2 cycle\n      First batch for 2.3 cycle\n      tests: squelch noise from GPG machinery set-up\n      Second batch for 2.3 cycle\n      Git 1.8.5.6\n      Git 1.9.5\n      Git 2.0.5\n      Git 2.1.4\n      Git 2.2.1\n      Prepare for 2.2.2\n      Third batch for 2.3 cycle\n      Fourth batch for 2.3 cycle\n      Git 2.2.2\n      Git 2.3.0-rc0\n\nJustin Guenther (1):\n      git-prompt.sh: make $f local to __git_eread()\n\nKarsten Blees (1):\n      pack-bitmap: do not use gcc packed attribute\n\nLuis Henriques (2):\n      send-email: add --[no-]xmailer option\n      test/send-email: --[no-]xmailer tests\n\nMichael Haggerty (11):\n      cmd_config(): make a copy of path obtained from git_path()\n      create_default_files(): don't set u+x bit on $GIT_DIR/config\n      prune_remote(): exit early if there are no stale references\n      prune_remote(): initialize both delete_refs lists in a single loop\n      prune_remote(): sort delete_refs_list references en masse\n      repack_without_refs(): make the refnames argument a string_list\n      prune_remote(): rename local variable\n      prune_remote(): iterate using for_each_string_list_item()\n      sort_string_list(): rename to string_list_sort()\n      t1400: add some more tests of \"update-ref --stdin\"'s verify command\n      update-ref: fix \"verify\" command with missing <oldvalue>\n\nMichael J Gruber (5):\n      add: ignore only ignored files\n      t3200-branch: test -M\n      check-ignore: clarify treatment of tracked files\n      gitignore.txt: do not suggest assume-unchanged\n      branch: allow -f with -m and -d\n\nMike Hommey (1):\n      sha1_name: avoid unnecessary sha1 lookup in find_unique_abbrev\n\nNguyễn Thái Ngọc Duy (6):\n      lockfile.c: store absolute path\n      tree.c: update read_tree_recursive callback to pass strbuf as base\n      ls-tree: remove path filtering logic in show_tree\n      ls-tree: disable negative pathspec because it's not supported\n      index-pack: terminate object buffers with NUL\n      index-format.txt: add a missing closing quote\n\nOnno Kortmann (1):\n      Show number of TODO items for interactive rebase\n\nPaolo Bonzini (4):\n      git-send-email: delay creation of MIME headers\n      git-send-email: add --transfer-encoding option\n      git-mailinfo: add --message-id\n      git-am: add --message-id/--no-message-id\n\nPaul Smith (1):\n      git-new-workdir: don't fail if the target directory is empty\n\nPeter van der Does (1):\n      Update documentation occurrences of filename .sh\n\nPhilip Oakley (1):\n      doc: make clear --assume-unchanged's user contract\n\nRalf Thielow (3):\n      builtin/push.c: fix description of --recurse-submodules option\n      for-each-ref: correct spelling of Tcl in option description\n      completion: add git-tag options\n\nRamsay Allan Jones (2):\n      git-compat-util.h: don't define _XOPEN_SOURCE on cygwin\n      t0050-*.sh: mark the rename (case change) test as passing\n\nRené Scharfe (8):\n      use args member of struct child_process\n      use labs() for variables of type long instead of abs()\n      use labs() for variables of type long instead of abs()\n      use strbuf_complete_line() for adding a newline if needed\n      commit-tree: simplify parsing of option -S using skip_prefix()\n      merge: release strbuf after use in suggest_conflicts()\n      transport: simplify duplicating a substring in transport_get() using xmemdupz()\n      refs: plug strbuf leak in lock_ref_sha1_basic()\n\nRonald Wampler (1):\n      git-am.txt: --ignore-date flag is not passed to git-apply\n\nRonnie Sahlberg (1):\n      lock_ref_sha1_basic: do not die on locking errors\n\nSlavomir Vlcek (3):\n      builtin: move builtin retrieval to get_builtin()\n      apply: fix typo in an error message\n      Documentation/git-stripspace: add synopsis for --comment-lines\n\nStefan Beller (5):\n      string_list: document string_list_(insert,lookup)\n      mailmap: use higher level string list functions\n      string_list: remove string_list_insert_at_index() from its API\n      t5400: remove dead code\n      Documentation/SubmittingPatches: unify whitespace/tabs for the DCO\n\nThomas Quinot (1):\n      git_connect: set ssh shell command in GIT_SSH_COMMAND\n\nTony Finch (1):\n      git-prompt: preserve value of $? inside shell prompt\n\nTorsten Bögershausen (2):\n      init-db: improve the filemode trustability check\n      t0027: check the eol conversion warnings\n\nbrian m. carlson (4):\n      Documentation: change \"gitlink\" typo in git-push\n      Documentation: add missing article in rev-list-options.txt\n      rev-list: add an option to mark fewer edges as uninteresting\n      pack-objects: use --objects-edge-aggressive for shallow repos\n\nРоман Донченко (2):\n      send-email: align RFC 2047 decoding more closely with the spec\n      send-email: handle adjacent RFC 2047-encoded words properly\n"},{"id":"254652","messageId":"87egqxfqw7.fsf@gmail.com","threadId":"38339","inReplyTo":"xmqqmw5n5z8i.fsf@gitster.dls.corp.google.com","subject":"Re: [ANNOUNCE] Git v2.3.0-rc0","fromName":"Christian Neukirchen","fromEmail":"chneukirchen@gmail.com","sentAt":"2015-01-14T13:11:52Z","receivedAt":"2015-01-14T13:11:52Z","isPatch":false,"sender":{"key":"chneukirchen@gmail.com","avatar":"https://avatars.githubusercontent.com/u/139?v=4"},"body":"Junio C Hamano <gitster@pobox.com> writes:\n\n>  * \"git push\" into a repository with a working tree normally refuses\n>    to modify the branch that is checked out.  The command learned to\n>    optionally do an equivalent of \"git reset --hard\" only when there\n>    is no change to the working tree and the index instead, which would\n>    be useful to \"deploy\" by pushing into a repository.\n\nPerhaps this can mention \"receive.denyCurrentBranch=updateInstead\" so\ninterested users won't have to grep the tree for 10min to find it. :)\n\nThanks,\n-- \nChristian Neukirchen  <chneukirchen@gmail.com>  http://chneukirchen.org\n"},{"id":"254959","messageId":"CACBZZX5s1rZ3exktbisseJSjF8-0=8ByMpBpARy6h+=iP7wEyA@mail.gmail.com","threadId":"38339","inReplyTo":"xmqqmw5n5z8i.fsf@gitster.dls.corp.google.com","subject":"Re: [ANNOUNCE] Git v2.3.0-rc0","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2015-01-20T21:49:32Z","receivedAt":"2015-01-20T21:49:32Z","isPatch":false,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"On Tue, Jan 13, 2015 at 12:57 AM, Junio C Hamano <gitster@pobox.com> wrote:\n> An early preview release Git v2.3.0-rc0 is now available for\n> testing at the usual places.\n[...]\n> Jeff King (38):\n[...]\n>       parse_color: refactor color storage\n[...]\n\nI've had this in my .gitconfig since 2010 which was broken by Jeff's\nv2.1.3-24-g695d95d:\n\n    ;; Don't be so invasive about coloring ^M when I'm editing files\nthat\n    ;; are supposed to have \\r\\n.\n    [color \"diff\"]\n       whitespace = 0\n\nTo test this replace \\n with \\r\\n in a file. Before this patch you could do:\n\n    git -c color.diff.whitespace=0 show\n\nAnd just get:\n\n    [red]-[/red]\n    [green]+[/green]\n\nAs opposed to:\n\n    git -c color.diff.whitespace=1 show\n\nWhich gives you:\n\n    [red]-\n    [green]+[/green][red]^M[/red]\n\nNow that just produces:\n\n    error: invalid color value: 0\n    fatal: bad config variable 'color.diff.whitespace' in file\n'/home/avar/.gitconfig' at line 16\n\nMaybe breaking this is OK (but I can't find what the replacement is),\nbut the config or the the changelog doesn't mention breaking existing\nconfig settings.\n"},{"id":"254962","messageId":"20150120221447.GB18778@peff.net","threadId":"38339","inReplyTo":"CACBZZX5s1rZ3exktbisseJSjF8-0=8ByMpBpARy6h+=iP7wEyA@mail.gmail.com","subject":"[PATCH] parse_color: fix return value for numeric color values 0-8","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2015-01-20T22:14:48Z","receivedAt":"2015-01-20T22:14:48Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Tue, Jan 20, 2015 at 10:49:32PM +0100, Ævar Arnfjörð Bjarmason wrote:\n\n> I've had this in my .gitconfig since 2010 which was broken by Jeff's\n> v2.1.3-24-g695d95d:\n> \n>     ;; Don't be so invasive about coloring ^M when I'm editing files\n> that\n>     ;; are supposed to have \\r\\n.\n>     [color \"diff\"]\n>        whitespace = 0\n>\n> [...]\n> Maybe breaking this is OK (but I can't find what the replacement is),\n> but the config or the the changelog doesn't mention breaking existing\n> config settings.\n\nEek. Definitely an unintended regression. The fix is below. Thanks for\nreporting (and especially for catching during the -rc period!).\n\nYou should not need it, but for reference, using \"0\" is the same as\n\"black\" (both in old git and new).\n\n-- >8 --\nWhen commit 695d95d refactored the color parsing, it missed\na \"return 0\" when parsing literal numbers 0-8 (which\nrepresent basic ANSI colors), leading us to report these\ncolors as an error.\n\nSigned-off-by: Jeff King <peff@peff.net>\n---\n color.c          | 1 +\n t/t4026-color.sh | 4 ++++\n 2 files changed, 5 insertions(+)\n\ndiff --git a/color.c b/color.c\nindex 809b359..9027352 100644\n--- a/color.c\n+++ b/color.c\n@@ -112,6 +112,7 @@ static int parse_color(struct color *out, const char *name, int len)\n \t\t} else if (val < 8) {\n \t\t\tout->type = COLOR_ANSI;\n \t\t\tout->value = val;\n+\t\t\treturn 0;\n \t\t} else if (val < 256) {\n \t\t\tout->type = COLOR_256;\n \t\t\tout->value = val;\ndiff --git a/t/t4026-color.sh b/t/t4026-color.sh\nindex 267c43b..4d20fea 100755\n--- a/t/t4026-color.sh\n+++ b/t/t4026-color.sh\n@@ -60,6 +60,10 @@ test_expect_success 'absurdly long color specification' '\n \t  \"[1;2;4;5;7;22;24;25;27;38;2;255;255;255;48;2;255;255;255m\"\n '\n \n+test_expect_success '0-7 are aliases for basic ANSI color names' '\n+\tcolor \"0 7\" \"[30;47m\"\n+'\n+\n test_expect_success '256 colors' '\n \tcolor \"254 bold 255\" \"[1;38;5;254;48;5;255m\"\n '\n-- \n2.2.1.425.g441bb3c\n"},{"id":"254966","messageId":"xmqqvbk1ypie.fsf@gitster.dls.corp.google.com","threadId":"38339","inReplyTo":"20150120221447.GB18778@peff.net","subject":"Re: [PATCH] parse_color: fix return value for numeric color values 0-8","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2015-01-20T23:57:13Z","receivedAt":"2015-01-20T23:57:13Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Jeff King <peff@peff.net> writes:\n\n> Eek. Definitely an unintended regression. The fix is below. Thanks for\n> reporting (and especially for catching during the -rc period!).\n>\n> You should not need it, but for reference, using \"0\" is the same as\n> \"black\" (both in old git and new).\n>\n> -- >8 --\n> When commit 695d95d refactored the color parsing, it missed\n> a \"return 0\" when parsing literal numbers 0-8 (which\n> represent basic ANSI colors), leading us to report these\n> colors as an error.\n>\n> Signed-off-by: Jeff King <peff@peff.net>\n> ---\n\nThanks; somebody should have caught this before we applied and\nmerged to 'master', but the process obviously did not work well.\n\nSorry and thanks.\n\n>  color.c          | 1 +\n>  t/t4026-color.sh | 4 ++++\n>  2 files changed, 5 insertions(+)\n>\n> diff --git a/color.c b/color.c\n> index 809b359..9027352 100644\n> --- a/color.c\n> +++ b/color.c\n> @@ -112,6 +112,7 @@ static int parse_color(struct color *out, const char *name, int len)\n>  \t\t} else if (val < 8) {\n>  \t\t\tout->type = COLOR_ANSI;\n>  \t\t\tout->value = val;\n> +\t\t\treturn 0;\n>  \t\t} else if (val < 256) {\n>  \t\t\tout->type = COLOR_256;\n>  \t\t\tout->value = val;\n> diff --git a/t/t4026-color.sh b/t/t4026-color.sh\n> index 267c43b..4d20fea 100755\n> --- a/t/t4026-color.sh\n> +++ b/t/t4026-color.sh\n> @@ -60,6 +60,10 @@ test_expect_success 'absurdly long color specification' '\n>  \t  \"[1;2;4;5;7;22;24;25;27;38;2;255;255;255;48;2;255;255;255m\"\n>  '\n>  \n> +test_expect_success '0-7 are aliases for basic ANSI color names' '\n> +\tcolor \"0 7\" \"[30;47m\"\n> +'\n> +\n>  test_expect_success '256 colors' '\n>  \tcolor \"254 bold 255\" \"[1;38;5;254;48;5;255m\"\n>  '\n"},{"id":"254967","messageId":"20150121000352.GA12543@peff.net","threadId":"38339","inReplyTo":"xmqqvbk1ypie.fsf@gitster.dls.corp.google.com","subject":"Re: [PATCH] parse_color: fix return value for numeric color values 0-8","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2015-01-21T00:03:52Z","receivedAt":"2015-01-21T00:03:52Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Tue, Jan 20, 2015 at 03:57:13PM -0800, Junio C Hamano wrote:\n\n> > -- >8 --\n> > When commit 695d95d refactored the color parsing, it missed\n> > a \"return 0\" when parsing literal numbers 0-8 (which\n> > represent basic ANSI colors), leading us to report these\n> > colors as an error.\n> >\n> > Signed-off-by: Jeff King <peff@peff.net>\n> > ---\n> \n> Thanks; somebody should have caught this before we applied and\n> merged to 'master', but the process obviously did not work well.\n\nI am not too surprised. The use of numeric values for colors was\ncompletely undocumented, and we did not have any test coverage for it. I\ndid not even know it existed until I started refactoring the function,\nand wondered what was going on (though I did try to preserve it once I\nfound it).\n\nSo I suspect that almost nobody is using this undocumented \"feature\",\nwhich is why it was not caught while cooking in 'next'.  The system\ncannot always have perfect output, but hopefully the number of people\naffected by a bug is proportional to the quickness with which it is\ncaught.\n\n-Peff\n\nPS All that being said, I think it is a good example of why it is a good\n   idea to beef up test coverage in an area before refactoring. A\n   trivial test would have caught this.\n"},{"id":"254971","messageId":"xmqqbnltynpm.fsf@gitster.dls.corp.google.com","threadId":"38339","inReplyTo":"20150121000352.GA12543@peff.net","subject":"Re: [PATCH] parse_color: fix return value for numeric color values 0-8","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2015-01-21T00:36:05Z","receivedAt":"2015-01-21T00:36:05Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Jeff King <peff@peff.net> writes:\n\n>> Thanks; somebody should have caught this before we applied and\n>> merged to 'master', but the process obviously did not work well.\n>\n> I am not too surprised. The use of numeric values for colors was\n> completely undocumented, and we did not have any test coverage for it. I\n> did not even know it existed until I started refactoring the function,\n> and wondered what was going on (though I did try to preserve it once I\n> found it).\n\nI was specifically thinking about the failure of \"eyeball test\".\nI often do \"git am\" followed by \"git show -U20\" to check the change\nin context, which _should_ have caught the lack of return there.\n"}]}