git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [ANNOUNCE] Git v2.26.0-rc1
@ 2020-03-10 14:57 Junio C Hamano
  2020-03-10 17:40 ` Jeff King
  2020-03-11 13:54 ` Randall S. Becker
  0 siblings, 2 replies; 9+ messages in thread
From: Junio C Hamano @ 2020-03-10 14:57 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.26.0-rc1 is now available for testing
at the usual places.  It is comprised of 453 non-merge commits
since v2.25.0, contributed by 47 people, 10 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.26.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.25.0 are as follows.
Welcome to the Git development community!

  Abhishek Kumar, Benno Evers, Eyal Soha, Harald van Dijk,
  Jacques Bodin-Hullin, Kir Kolyshkin, Lucius Hu, Peter Kaestle,
  Rasmus Jonsson, and Shourya Shukla.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alban Gruin, Alexandr Miloslavskiy, Bert Wesarg, brian
  m. carlson, David Turner, Denton Liu, Derrick Stolee, Elijah
  Newren, Emily Shaffer, Eric Sunshine, Hans Jerry Illikainen,
  Hariom Verma, Heba Waly, Jeff King, Johan Herland, Johannes Berg,
  Johannes Schindelin, Johannes Sixt, Jonathan Nieder, Jonathan
  Tan, Junio C Hamano, Kevin Willford, Kyle Meyer, Luke Diamand,
  Martin Ågren, Masaya Suzuki, Matheus Tavares, Matthew Rogers,
  Miriam Rubio, Paolo Bonzini, Philippe Blain, Pranit Bauva,
  Ralf Thielow, René Scharfe, SZEDER Gábor, Tanushree Tumane,
  and Taylor Blau.

----------------------------------------------------------------

Git 2.26 Release Notes (draft)
==============================

Updates since v2.25
-------------------

UI, Workflows & Features

 * Sample credential helper for using .netrc has been updated to work
   out of the box.

 * gpg.minTrustLevel configuration variable has been introduced to
   tell various signature verification codepaths the required minimum
   trust level.

 * The command line completion (in contrib/) learned to complete
   subcommands and arguments to "git worktree".

 * Disambiguation logic to tell revisions and pathspec apart has been
   tweaked so that backslash-escaped glob special characters do not
   count in the "wildcards are pathspec" rule.

 * One effect of specifying where the GIT_DIR is (either with the
   environment variable, or with the "git --git-dir=<where> cmd"
   option) is to disable the repository discovery.  This has been
   placed a bit more stress in the documentation, as new users often
   get confused.

 * Two help messages given when "git add" notices the user gave it
   nothing to add have been updated to use advise() API.

 * A new version of fsmonitor-watchman hook has been introduced, to
   avoid races.

 * "git config" learned to show in which "scope", in addition to in
   which file, each config setting comes from.

 * The basic 7 colors learned the brighter counterparts
   (e.g. "brightred").

 * "git sparse-checkout" learned a new "add" subcommand.

 * A configuration element used for credential subsystem can now use
   wildcard pattern to specify for which set of URLs the entry
   applies.

 * "git clone --recurse-submodules --single-branch" now uses the same
   single-branch option when cloning the submodules.

 * "git rm" and "git stash" learns the new "--pathspec-from-file"
   option.

 * "git am --short-current-patch" is a way to show the piece of e-mail
   for the stopped step, which is not suitable to directly feed "git
   apply" (it is designed to be a good "git am" input).  It learned a
   new option to show only the patch part.

 * Handling of conflicting renames in merge-recursive have further
   been made consistent with how existing codepaths try to mimic what
   is done to add/add conflicts.


Performance, Internal Implementation, Development Support etc.

 * Tell .editorconfig that in this project, *.txt files are indented
   with tabs.

 * The test-lint machinery knew to check "VAR=VAL shell_function"
   construct, but did not check "VAR= shell_funciton", which has been
   corrected.

 * Replace "git config --bool" calls with "git config --type=bool" in
   sample templates.

 * The effort to move "git-add--interactive" to C continues.

 * Improve error message generation for "git submodule add".

 * Preparation of test scripts for the day when the object names will
   use SHA-256 continues.

 * Warn programmers about pretend_object_file() that allows the code
   to tentatively use in-core objects.

 * The way "git pack-objects" reuses objects stored in existing pack
   to generate its result has been improved.

 * The transport protocol version 2 becomes the default one.

 * Traditionally, we avoided threaded grep while searching in objects
   (as opposed to files in the working tree) as accesses to the object
   layer is not thread-safe.  This limitation is getting lifted.

 * "git rebase -i" (and friends) used to unnecessarily check out the
   tip of the branch to be rebased, which has been corrected.

 * A low-level API function get_oid(), that accepts various ways to
   name an object, used to issue end-user facing error messages
   without l10n, which has been updated to be translatable.

 * Unneeded connectivity check is now disabled in a partial clone when
   fetching into it.

 * Some rough edges in the sparse-checkout feature, especially around
   the cone mode, have been cleaned up.

 * The diff-* plumbing family of subcommands now pay attention to the
   diff.wsErrorHighlight configuration, which has been ignored before;
   this allows "git add -p" to also show the whitespace problems to
   the end user.

 * Some codepaths were given a repository instance as a parameter to
   work in the repository, but passed the_repository instance to its
   callees, which has been cleaned up (somewhat).

 * Memory footprint and performance of "git name-rev" has been
   improved.

 * The object reachability bitmap machinery and the partial cloning
   machinery were not prepared to work well together, because some
   object-filtering criteria that partial clones use inherently rely
   on object traversal, but the bitmap machinery is an optimization
   to bypass that object traversal.  There however are some cases
   where they can work together, and they were taught about them.

 * "git rebase" has learned to use the merge backend (i.e. the
   machinery that drives "rebase -i") by default, while allowing
   "--apply" option to use the "apply" backend (e.g. the moral
   equivalent of "format-patch piped to am").  The rebase.backend
   configuration variable can be set to customize.

 * Underlying machinery of "git bisect--helper" is being refactored
   into pieces that are more easily reused.


Fixes since v2.25
-----------------

 * "git commit" gives output similar to "git status" when there is
   nothing to commit, but without honoring the advise.statusHints
   configuration variable, which has been corrected.

 * has_object_file() said "no" given an object registered to the
   system via pretend_object_file(), making it inconsistent with
   read_object_file(), causing lazy fetch to attempt fetching an
   empty tree from promisor remotes.

 * Complete an update to tutorial that encourages "git switch" over
   "git checkout" that was done only half-way.

 * C pedantry ;-) fix.

 * The code that tries to skip over the entries for the paths in a
   single directory using the cache-tree was not careful enough
   against corrupt index file.

 * Reduce unnecessary round-trip when running "ls-remote" over the
   stateless RPC mechanism.

 * "git restore --staged" did not correctly update the cache-tree
   structure, resulting in bogus trees to be written afterwards, which
   has been corrected.

 * The code recently added to move to the entry beyond the ones in the
   same directory in the index in the sparse-cone mode did not count
   the number of entries to skip over incorrectly, which has been
   corrected.

 * Rendering by "git log --graph" of ancestry lines leading to a merge
   commit were made suboptimal to waste vertical space a bit with a
   recent update, which has been corrected.

 * Work around test breakages caused by custom regex engine used in
   libasan, when address sanitizer is used with more recent versions
   of gcc and clang.

 * Minor bugfixes to "git add -i" that has recently been rewritten in C.
   (merge 849e43cc18 js/builtin-add-i-cmds later to maint).

 * "git fetch --refmap=" option has got a better documentation.

 * "git checkout X" did not correctly fail when X is not a local
   branch but could name more than one remote-tracking branches
   (i.e. to be dwimmed as the starting point to create a corresponding
   local branch), which has been corrected.
   (merge fa74180d08 am/checkout-file-and-ref-ref-ambiguity later to maint).

 * Corner case bugs in "git clean" that stems from a (necessarily for
   performance reasons) awkward calling convention in the directory
   enumeration API has been corrected.

 * A fetch that is told to recursively fetch updates in submodules
   inevitably produces reams of output, and it becomes hard to spot
   error messages.  The command has been taught to enumerate
   submodules that had errors at the end of the operation.
   (merge 0222540827 es/fetch-show-failed-submodules-atend later to maint).

 * The "--recurse-submodules" option of various subcommands did not
   work well when run in an alternate worktree, which has been
   corrected.
   (merge a9472afb63 pb/recurse-submodule-in-worktree-fix later to maint).

 * Futureproofing a test not to depend on the current implementation
   detail.

 * Running "git rm" on a submodule failed unnecessarily when
   .gitmodules is only cache-dirty, which has been corrected.
   (merge 7edee32985 dt/submodule-rm-with-stale-cache later to maint).

 * C pedantry ;-) fix.
   (merge cf82bff73f jk/clang-sanitizer-fixes later to maint).

 * "git grep --no-index" should not get affected by the contents of
   the .gitmodules file but when "--recurse-submodules" is given or
   the "submodule.recurse" variable is set, it did.  Now these
   settings are ignored in the "--no-index" mode.

 * Technical details of the bundle format has been documented.

 * Unhelpful warning messages during documentation build have been squelched.

 * "git rebase -i" identifies existing commits in its todo file with
   their abbreviated object name, which could become ambigous as it
   goes to create new commits, and has a mechanism to avoid ambiguity
   in the main part of its execution.  A few other cases however were
   not covered by the protection against ambiguity, which has been
   corrected.
   (merge 26027625dd js/rebase-i-with-colliding-hash later to maint).

 * Allow the rebase.missingCommitsCheck configuration to kick in when
   "rebase --edit-todo" and "rebase --continue" restarts the procedure.
   (merge 5a5445d878 ag/edit-todo-drop-check later to maint).

 * The way "git submodule status" reports an initialized but not yet
   populated submodule has not been reimplemented correctly when a
   part of the "git submodule" command was rewritten in C, which has
   been corrected.
   (merge f38c92452d pk/status-of-uncloned-submodule later to maint).

 * The code to automatically shrink the fan-out in the notes tree had
   an off-by-one bug, which has been killed.
   (merge dbc27477ff jh/notes-fanout-fix later to maint).

 * The index-pack code now diagnoses a bad input packstream that
   records the same object twice when it is used as delta base; the
   code used to declare a software bug when encountering such an
   input, but it is an input error.
   (merge a21781011f jk/index-pack-dupfix later to maint).

 * The code to compute the commit-graph has been taught to use a more
   robust way to tell if two object directories refer to the same
   thing.
   (merge a7df60cac8 tb/commit-graph-object-dir later to maint).

 * "git remote rename X Y" needs to adjust configuration variables
   (e.g. branch.<name>.remote) whose value used to be X to Y.
   branch.<name>.pushRemote is now also updated.

 * Update to doc-diff.
   (merge 2607d39da3 jk/doc-diff-parallel later to maint).

 * Doc markup fix.
   (merge 0aa6ce3094 jk/push-option-doc-markup-fix later to maint).

 * "git check-ignore" did not work when the given path is explicitly
   marked as not ignored with a negative entry in the .gitignore file.
   (merge 7ec8125fba en/check-ignore later to maint).

 * The merge-recursive machinery failed to refresh the cache entry for
   a merge result in a couple of places, resulting in an unnecessary
   merge failure, which has been fixed.
   (merge fb1c18fc46 en/t3433-rebase-stat-dirty-failure later to maint).

 * Fix for a bug revealed by a recent change to make the protocol v2
   the default.
   (merge 3e96c66805 ds/partial-clone-fixes later to maint).

 * In rare cases "git worktree add <path>" could think that <path>
   was already a registered worktree even when it wasn't and refuse
   to add the new worktree. This has been corrected.
   (merge bb69b3b009 es/worktree-avoid-duplication-fix later to maint).

 * "git push" should stop from updating a branch that is checked out
   when receive.denyCurrentBranch configuration is set, but it failed
   to pay attention to checkouts in secondary worktrees.  This has
   been corrected.
   (merge 4d864895a2 hv/receive-denycurrent-everywhere later to maint).

 * "git rebase BASE BRANCH" rebased/updated the tip of BRANCH and
   checked it out, even when the BRANCH is checked out in a different
   worktree.  This has been corrected.
   (merge b5cabb4a96 es/do-not-let-rebase-switch-to-protected-branch later to maint).

 * "git describe" in a repository with multiple root commits sometimes
   gave up looking for the best tag to describe a given commit with
   too early, which has been adjusted.

 * "git merge signed-tag" while lacking the public key started to say
   "No signature", which was utterly wrong.  This regression has been
   reverted.
   (merge 0106b1d4be hi/gpg-use-check-signature later to maint).

 * MinGW's poll() emulation has been improved.
   (merge 94f4d01932 am/mingw-poll-fix later to maint).

 * "git show" and others gave an object name in raw format in its
   error output, which has been corrected to give it in hex.
   (merge 237a28173f hd/show-one-mergetag-fix later to maint).

 * "git fetch" over HTTP walker protocol did not show any progress
   output.  We inherently do not know how much work remains, but still
   we can show something not to bore users.
   (merge 7655b4119d rs/show-progress-in-dumb-http-fetch later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 26f924d50e en/simplify-check-updates-in-unpack-trees later to maint).
   (merge d0d0a357a1 am/update-pathspec-f-f-tests later to maint).
   (merge f94f7bd00d am/test-pathspec-f-f-error-cases later to maint).
   (merge c513a958b6 ss/t6025-modernize later to maint).
   (merge b441717256 dl/test-must-fail-fixes later to maint).
   (merge d031049da3 mt/sparse-checkout-doc-update later to maint).
   (merge 145136a95a jc/skip-prefix later to maint).
   (merge 5290d45134 jk/alloc-cleanups later to maint).
   (merge 7a9f8ca805 rs/parse-options-concat-dup later to maint).
   (merge 517b60564e rs/strbuf-insertstr later to maint).
   (merge f696a2b1c8 jk/mailinfo-cleanup later to maint).
   (merge 076ee3e8a2 js/test-write-junit-xml-fix later to maint).
   (merge de26f02db1 js/test-avoid-pipe later to maint).
   (merge bfe2bbb47f js/test-unc-fetch later to maint).
   (merge 08809c09aa js/mingw-open-in-gdb later to maint).
   (merge cc4f2eb828 jk/doc-credential-helper later to maint).
   (merge e0020b2f82 es/outside-repo-errmsg-hints later to maint).
   (merge a2dc43414c es/doc-mentoring later to maint).
   (merge 539052f42f jk/run-command-formatfix later to maint).
   (merge 02bbbe9df9 es/worktree-cleanup later to maint).
   (merge 2ce6d075fa rs/micro-cleanups later to maint).
   (merge 27f182b3fc rs/blame-typefix-for-fingerprint later to maint).
   (merge 3c29e21eb0 ma/test-cleanup later to maint).
   (merge 240fc04f81 ag/rebase-remove-redundant-code later to maint).
   (merge 7f487ce062 js/ci-windows-update later to maint).
   (merge d68ce906c7 rs/commit-graph-code-simplification later to maint).
   (merge a51d9e8f07 rj/t1050-use-test-path-is-file later to maint).
   (merge fd0bc17557 kk/complete-diff-color-moved later to maint).
   (merge 65bf820d0e en/test-cleanup later to maint).

----------------------------------------------------------------

Changes since v2.25.0 are as follows:

Abhishek Kumar (2):
      lib-log-graph: consolidate test_cmp_graph logic
      lib-log-graph: consolidate colored graph cmp logic

Alban Gruin (4):
      rebase -i: stop checking out the tip of the branch to rebase
      sequencer: move check_todo_list_from_file() to rebase-interactive.c
      rebase-interactive: warn if commit is dropped with `rebase --edit-todo'
      builtin/rebase: remove a call to get_oid() on `options.switch_to'

Alexandr Miloslavskiy (14):
      parse_branchname_arg(): extract part as new function
      checkout: don't revert file on ambiguous tracking branches
      t: add tests for error conditions with --pathspec-from-file
      t: fix quotes tests for --pathspec-from-file
      t: directly test parse_pathspec_file()
      doc: rm: synchronize <pathspec> description
      rm: support the --pathspec-from-file option
      doc: stash: split options from description (1)
      doc: stash: split options from description (2)
      doc: stash: document more options
      doc: stash: synchronize <pathspec> description
      stash: eliminate crude option parsing
      stash push: support the --pathspec-from-file option
      mingw: workaround for hangs when sending STDIN

Benno Evers (1):
      describe: don't abort too early when searching tags

Bert Wesarg (6):
      pull --rebase/remote rename: document and honor single-letter abbreviations rebase types
      remote: clean-up by returning early to avoid one indentation
      remote: clean-up config callback
      remote rename/remove: handle branch.<name>.pushRemote config values
      config: provide access to the current line number
      remote rename/remove: gently handle remote.pushDefault config

David Turner (1):
      git rm submodule: succeed if .gitmodules index stat info is zero

Denton Liu (34):
      t/lib-git-p4: use test_path_is_missing()
      t0000: replace test_must_fail with run_sub_test_lib_test_err()
      t0003: use named parameters in attr_check()
      t0003: use test_must_be_empty()
      t0003: don't use `test_must_fail attr_check`
      t0020: don't use `test_must_fail has_cr`
      t0020: use ! check_packed_refs_marked
      t1306: convert `test_might_fail rm` to `rm -f`
      t1307: reorder `nongit test_must_fail`
      t1409: let sed open its own input file
      t1409: use test_path_is_missing()
      t1501: remove use of `test_might_fail cp`
      t1507: stop losing return codes of git commands
      t1507: run commands within test_expect_success
      t1507: inline full_name()
      contrib/credential/netrc: make PERL_PATH configurable
      contrib/credential/netrc: work outside a repo
      t2018: remove trailing space from test description
      t2018: add space between function name and ()
      t2018: improve style of if-statement
      .mailmap: fix erroneous authorship for Johannes Schindelin
      t2018: be more discerning when checking for expected exit codes
      t2018: teach do_checkout() to accept `!` arg
      t2018: don't lose return code of git commands
      t2018: replace "sha" with "oid"
      t3030: use test_path_is_missing()
      t3310: extract common notes_merge_files_gone()
      t3415: stop losing return codes of git commands
      t3415: increase granularity of test_auto_{fixup,squash}()
      t3419: stop losing return code of git command
      t3507: fix indentation
      t3507: use test_path_is_missing()
      t4124: only mark git command with test_must_fail
      .mailmap: map Yi-Jyun Pan's email

Derrick Stolee (26):
      unpack-trees: correctly compute result count
      graph: add test to demonstrate horizontal line bug
      graph: fix collapse of multiple edges
      clean: demonstrate a bug with pathspecs
      fetch: document and test --refmap=""
      t1091: use check_files to reduce boilerplate
      t1091: improve here-docs
      sparse-checkout: create leading directories
      clone: fix --sparse option with URLs
      sparse-checkout: cone mode does not recognize "**"
      sparse-checkout: detect short patterns
      sparse-checkout: warn on globs in cone patterns
      sparse-checkout: properly match escaped characters
      sparse-checkout: write escaped patterns in cone mode
      sparse-checkout: unquote C-style strings over --stdin
      sparse-checkout: use C-style quotes in 'list' subcommand
      sparse-checkout: escape all glob characters on write
      sparse-checkout: improve docs around 'set' in cone mode
      sparse-checkout: fix cone mode behavior mismatch
      sparse-checkout: extract add_patterns_from_input()
      sparse-checkout: extract pattern update from 'set' subcommand
      sparse-checkout: create 'add' subcommand
      sparse-checkout: work with Windows paths
      sparse-checkout: allow one-character directories in cone mode
      partial-clone: demonstrate bugs in partial fetch
      partial-clone: avoid fetching when looking for objects

Elijah Newren (32):
      unpack-trees: exit check_updates() early if updates are not wanted
      string-list: note in docs that callers can specify sorting function
      dir: treat_leading_path() and read_directory_recursive(), round 2
      git-rebase.txt: update description of --allow-empty-message
      t3404: directly test the behavior of interest
      rebase (interactive-backend): make --keep-empty the default
      rebase (interactive-backend): fix handling of commits that become empty
      t3406: simplify an already simple test
      rebase, sequencer: remove the broken GIT_QUIET handling
      rebase: make sure to pass along the quiet flag to the sequencer
      rebase: fix handling of restrict_revision
      t3432: make these tests work with either am or merge backends
      rebase: allow more types of rebases to fast-forward
      git-rebase.txt: add more details about behavioral differences of backends
      rebase: move incompatibility checks between backend options a bit earlier
      rebase: add an --am option
      git-prompt: change the prompt for interactive-based rebases
      rebase: drop '-i' from the reflog for interactive-based rebases
      rebase tests: mark tests specific to the am-backend with --am
      rebase tests: repeat some tests using the merge backend instead of am
      rebase: make the backend configurable via config setting
      rebase: change the default backend from "am" to "merge"
      rebase: rename the two primary rebase backends
      check-ignore: fix documentation and implementation to match
      t3433: new rebase testcase documenting a stat-dirty-like failure
      merge-recursive: fix the refresh logic in update_file_flags
      merge-recursive: apply collision handling unification to recursive case
      t602[1236], t6034: modernize test formatting
      t6020, t6022, t6035: update merge tests to use test helper functions
      t3035: prefer test_must_fail to bash negation for git commands
      t6022, t6046: test expected behavior instead of testing a proxy for it
      t6020: new test with interleaved lexicographic ordering of directories

Emily Shaffer (8):
      unpack-trees: watch for out-of-range index position
      fetch: emphasize failure during submodule fetch
      MyFirstContribution: add avenues for getting help
      submodule: add newline on invalid submodule error
      MyFirstContribution: rephrase contact info
      prefix_path: show gitdir when arg is outside repo
      submodule--helper: use C99 named initializer
      clone: pass --single-branch during --recurse-submodules

Eric Sunshine (6):
      t3400: make test clean up after itself
      rebase: refuse to switch to branch already checked out elsewhere
      worktree: drop unused code from get_main_worktree()
      worktree: improve find_worktree() documentation
      worktree: add utility to find worktree by pathname
      worktree: don't allow "add" validation to be fooled by suffix matching

Eyal Soha (3):
      color.c: refactor color_output arguments
      color.c: support bright aixterm colors
      color.c: alias RGB colors 8-15 to aixterm colors

Hans Jerry Illikainen (2):
      editorconfig: indent text files with tabs
      gpg-interface: add minTrustLevel as a configuration option

Harald van Dijk (1):
      show_one_mergetag: print non-parent in hex form.

Hariom Verma (4):
      get_main_worktree(): allow it to be called in the Git directory
      t5509: use a bare repository for test push target
      receive.denyCurrentBranch: respect all worktrees
      t2402: test worktree path when called in .git directory

Heba Waly (5):
      commit: honor advice.statusHints when rejecting an empty commit
      doc/gitcore-tutorial: fix prose to match example command
      add: use advise function to display hints
      git: update documentation for --git-dir
      add: change advice config variables used by the add API

Jacques Bodin-Hullin (1):
      parse-options: lose an unnecessary space in an error message

Jeff King (69):
      builtin/pack-objects: report reused packfile objects
      packfile: expose get_delta_base()
      restore: invalidate cache-tree when removing entries with --staged
      transport: don't flush when disconnecting stateless-rpc helper
      dir: restructure in a way to avoid passing around a struct dirent
      dir: point treat_leading_path() warning to the right place
      Makefile: use compat regex with SANITIZE=address
      t4018: drop "debugging" cat from hunk-header tests
      t7800: don't rely on reuse_worktree_file()
      ewah/bitmap: introduce bitmap_word_alloc()
      pack-bitmap: introduce bitmap_walk_contains()
      pack-bitmap: uninteresting oid can be outside bitmapped packfile
      pack-bitmap: simplify bitmap_has_oid_in_uninteresting()
      csum-file: introduce hashfile_total()
      pack-objects: introduce pack.allowPackReuse
      builtin/pack-objects: introduce obj_is_packed()
      pack-objects: improve partial packfile reuse
      pack-objects: add checks for duplicate objects
      pack-bitmap: don't rely on bitmap_git->reuse_objects
      sparse-checkout: fix documentation typo for core.sparseCheckoutCone
      verify_filename(): handle backslashes in "wildcards are pathspecs" rule
      merge-recursive: silence -Wxor-used-as-pow warning
      t1400: avoid "test" string comparisons
      t1506: drop space after redirection operator
      avoid computing zero offsets from NULL pointer
      xdiff: avoid computing non-zero offset from NULL pointer
      obstack: avoid computing offsets from NULL pointer
      doc: drop "explicitly given" from push.default description
      sha1-name: mark get_oid() error messages for translation
      normalize_path_copy(): document "dst" size expectations
      walker_fetch(): avoid raw array length computation
      traverse_trees(): use stack array for name entries
      diff: move diff.wsErrorHighlight to "basic" config
      tree-walk.c: break circular dependency with unpack-trees
      index-pack: downgrade twice-resolved REF_DELTA to die()
      mailinfo: treat header values as C strings
      mailinfo: simplify parsing of header values
      mailinfo: be more liberal with header whitespace
      mailinfo: factor out some repeated header handling
      pack-bitmap: factor out type iterator initialization
      pack-bitmap: fix leak of haves/wants object lists
      rev-list: fallback to non-bitmap traversal when filtering
      pack-bitmap: refuse to do a bitmap traversal with pathspecs
      rev-list: factor out bitmap-optimized routines
      rev-list: make --count work with --objects
      rev-list: allow bitmaps when counting objects
      t5310: factor out bitmap traversal comparison
      rev-list: allow commit-only bitmap traversals
      pack-bitmap: basic noop bitmap filter infrastructure
      rev-list: use bitmap filters for traversal
      bitmap: add bitmap_unset() function
      pack-bitmap: implement BLOB_NONE filtering
      pack-bitmap: implement BLOB_LIMIT filtering
      pack-objects: support filters with bitmaps
      doc: move credential helper info into gitcredentials(7)
      doc/config/push: use longer "--" line for preformatted example
      doc-diff: use single-colon rule in rendering Makefile
      run-command.h: fix mis-indented struct member
      nth_packed_object_oid(): use customary integer return
      pack-objects: read delta base oid into object_id struct
      pack-objects: convert oe_set_delta_ext() to use object_id
      pack-objects: use object_id struct in pack-reuse code
      pack-bitmap: use object_id when loading on-disk bitmaps
      pack-check: convert "internal error" die to a BUG()
      pack-check: push oid lookup into loop
      packed_object_info(): use object_id for returning delta base
      packed_object_info(): use object_id internally for delta base
      packfile: drop nth_packed_object_sha1()
      config.mak.dev: re-enable -Wformat-zero-length

Johan Herland (2):
      t3305: check notes fanout more carefully and robustly
      notes.c: fix off-by-one error when decreasing notes fanout

Johannes Berg (1):
      pack-format: correct multi-pack-index description

Johannes Schindelin (33):
      built-in add -p: prepare for patch modes other than "stage"
      built-in add -p: implement the "stash" and "reset" patch modes
      legacy stash -p: respect the add.interactive.usebuiltin setting
      built-in stash: use the built-in `git add -p` if so configured
      built-in add -p: implement the "checkout" patch modes
      built-in add -p: implement the "worktree" patch modes
      commit --interactive: make it work with the built-in `add -i`
      t3701: adjust difffilter test
      built-in add -p: support interactive.diffFilter
      built-in add -p: handle diff.algorithm
      terminal: make the code of disable_echo() reusable
      terminal: accommodate Git for Windows' default terminal
      terminal: add a new function to read a single keystroke
      built-in add -p: respect the `interactive.singlekey` config setting
      built-in add -p: handle Escape sequences in interactive.singlekey mode
      built-in add -p: handle Escape sequences more efficiently
      ci: include the built-in `git add -i` in the `linux-gcc` job
      msvc: accommodate for vcpkg's upgrade to OpenSSL v1.1.x
      built-in add -i: do not try to `patch`/`diff` an empty list of files
      built-in add -i: accept open-ended ranges again
      parse_insn_line(): improve error message when parsing failed
      rebase -i: re-fix short SHA-1 collision
      rebase -i: also avoid SHA-1 collisions with missingCommitsCheck
      ci: ignore rubygems warning in the "Documentation" job
      convert: fix typo
      tests: fix --write-junit-xml with subshells
      t9001, t9116: avoid pipes
      t5580: test cloning without file://, test fetching via UNC paths
      mingw: add a helper function to attach GDB to the current process
      t/lib-httpd: avoid using macOS' sed
      ci: prevent `perforce` from being quarantined
      Azure Pipeline: switch to the latest agent pools
      t5537: adjust test_oid label

Johannes Sixt (1):
      t3504: do check for conflict marker after failed cherry-pick

Jonathan Nieder (9):
      sha1-file: document how to use pretend_object_file
      fetch test: avoid use of "VAR= cmd" with a shell function
      t/check-non-portable-shell: detect "FOO= shell_func", too
      fetch test: mark test of "skipping" haves as v0-only
      fetch test: use more robust test for filtered objects
      config doc: protocol.version is not experimental
      test: request GIT_TEST_PROTOCOL_VERSION=0 when appropriate
      protocol test: let protocol.version override GIT_TEST_PROTOCOL_VERSION
      fetch: default to protocol version 2

Jonathan Tan (4):
      sha1-file: remove OBJECT_INFO_SKIP_CACHED
      t5616: make robust to delta base change
      connected: verify promisor-ness of partial clone
      fetch: forgo full connectivity check if --filter

Junio C Hamano (16):
      The first batch post 2.25 cycle
      merge-recursive: use subtraction to flip stage
      .mailmap: fix GGG authoship screwup
      The second batch
      C: use skip_prefix() to avoid hardcoded string length
      The third batch for 2.26
      The fourth batch for 2.26
      The fifth batch for 2.26
      Git 2.25.1
      The sixth batch for 2.26
      rev-list --count: comment on the use of count_right++
      The seventh batch for 2.26
      Revert "gpg-interface: prefer check_signature() for GPG verification"
      The eighth batch for 2.26
      Git 2.26-rc0
      Git 2.26-rc1

Kevin Willford (4):
      fsmonitor: change last update timestamp on the index_state to opaque token
      fsmonitor: handle version 2 of the hooks that will use opaque token
      fsmonitor: add fsmonitor hook scripts for version 2
      fsmonitor: update documentation for hook version and watchman hooks

Kir Kolyshkin (1):
      completion: add diff --color-moved[-ws]

Kyle Meyer (2):
      submodule add: show 'add --dry-run' stderr when aborting
      submodule foreach: replace $path with $sm_path in example

Lucius Hu (1):
      templates: fix deprecated type option `--bool`

Luke Diamand (7):
      git-p4: make closeStreams() idempotent
      git-p4: add P4CommandException to report errors talking to Perforce
      git-p4: disable some pylint warnings, to get pylint output to something manageable
      git-p4: create helper function importRevisions()
      git-p4: cleanup better on error exit
      git-p4: check for access to remote host earlier
      git-p4: avoid leak of file handle when cloning

Martin Ågren (6):
      git-filter-branch.txt: wrap "maths" notation in backticks
      name-rev: rewrite create_or_update_name()
      diff-options.txt: avoid "regex" overload in example
      t4117: check for files using `test_path_is_file`
      t9810: drop debug `cat` call
      t: drop debug `cat` calls

Masaya Suzuki (1):
      doc: describe Git bundle format

Matheus Tavares (21):
      grep: fix race conditions on userdiff calls
      grep: fix race conditions at grep_submodule()
      grep: fix racy calls in grep_objects()
      replace-object: make replace operations thread-safe
      object-store: allow threaded access to object reading
      grep: replace grep_read_mutex by internal obj read lock
      submodule-config: add skip_if_read option to repo_read_gitmodules()
      grep: allow submodule functions to run in parallel
      grep: protect packed_git [re-]initialization
      grep: re-enable threads in non-worktree case
      grep: move driver pre-load out of critical section
      grep: use no. of cores as the default no. of threads
      doc: sparse-checkout: mention --cone option
      completion: add support for sparse-checkout
      diff: make diff_populate_filespec() honor its repo argument
      cache-tree: use given repo's hash_algo at verify_one()
      pack-check: use given repo's hash_algo at verify_packfile()
      streaming: allow open_istream() to handle any repo
      sha1-file: pass git_hash_algo to write_object_file_prepare()
      sha1-file: pass git_hash_algo to hash_object_file()
      sha1-file: allow check_object_signature() to handle any repo

Matthew Rogers (10):
      config: fix typo in variable name
      t1300: fix over-indented HERE-DOCs
      t1300: create custom config file without special characters
      config: make scope_name non-static and rename it
      config: split repo scope to local and worktree
      config: clarify meaning of command line scoping
      config: preserve scope in do_git_config_sequence
      config: teach git_config_source to remember its scope
      submodule-config: add subomdule config scope
      config: add '--show-scope' to print the scope of a config value

Miriam Rubio (3):
      bisect--helper: convert `vocab_*` char pointers to char arrays
      bisect: use the standard 'if (!var)' way to check for 0
      bisect: add enum to represent bisect returning codes

Paolo Bonzini (5):
      parse-options: add testcases for OPT_CMDMODE()
      parse-options: convert "command mode" to a flag
      am: convert "resume" variable to a struct
      am: support --show-current-patch=raw as a synonym for--show-current-patch
      am: support --show-current-patch=diff to retrieve .git/rebase-apply/patch

Peter Kaestle (3):
      t7400: add a testcase for submodule status on empty dirs
      submodule: fix status of initialized but not cloned submodules
      t7400: testcase for submodule status on unregistered inner git repos

Philippe Blain (5):
      t7410: rename to t2405-worktree-submodule.sh
      t2405: use git -C and test_commit -C instead of subshells
      t2405: clarify test descriptions and simplify test
      submodule.c: use get_git_dir() instead of get_git_common_dir()
      grep: ignore --recurse-submodules if --no-index is given

Pranit Bauva (7):
      bisect--helper: return error codes from `cmd_bisect__helper()`
      bisect: libify `exit_if_skipped_commits` to `error_if_skipped*` and its dependents
      bisect: libify `bisect_checkout`
      bisect: libify `check_merge_bases` and its dependents
      bisect: libify `check_good_are_ancestors_of_bad` and its dependents
      bisect: libify `handle_bad_merge_base` and its dependents
      bisect: libify `bisect_next_all`

Ralf Thielow (2):
      submodule.c: mark more strings for translation
      rebase-interactive.c: silence format-zero-length warnings

Rasmus Jonsson (1):
      t1050: replace test -f with test_path_is_file

René Scharfe (21):
      name-rev: remove unused typedef
      name-rev: respect const qualifier
      name-rev: don't leak path copy in name_ref()
      name-rev: don't _peek() in create_or_update_name()
      name-rev: put struct rev_name into commit slab
      name-rev: factor out get_parent_name()
      name-rev: pre-size buffer in get_parent_name()
      name-rev: generate name strings only if they are better
      name-rev: release unused name strings
      name-rev: sort tip names before applying
      strbuf: add and use strbuf_insertstr()
      mailinfo: don't insert header prefix for handle_content_type()
      parse-options: use COPY_ARRAY in parse_options_concat()
      parse-options: factor out parse_options_count()
      parse-options: const parse_options_concat() parameters
      parse-options: simplify parse_options_dup()
      quote: use isalnum() to check for alphanumeric characters
      use strpbrk(3) to search for characters from a given set
      blame: provide type of fingerprints pointer
      commit-graph: use progress title directly
      remote-curl: show progress for fetches over dumb HTTP

SZEDER Gábor (6):
      t9902-completion: add tests for the __git_find_on_cmdline() helper
      completion: clean up the __git_find_on_cmdline() helper function
      completion: return the index of found word from __git_find_on_cmdline()
      completion: simplify completing 'git worktree' subcommands and options
      completion: list existing working trees for 'git worktree' subcommands
      completion: list paths and refs for 'git worktree add'

Shourya Shukla (2):
      t6025: modernize style
      t6025: use helpers to replace test -f <path>

Tanushree Tumane (2):
      bisect--helper: change `retval` to `res`
      bisect--helper: introduce new `decide_next()` function

Taylor Blau (5):
      t5318: don't pass non-object directory to '--object-dir'
      commit-graph.h: store an odb in 'struct write_commit_graph_context'
      commit-graph.h: store object directory in 'struct commit_graph'
      commit-graph.c: remove path normalization, comparison
      commit-graph.h: use odb in 'load_commit_graph_one_fd_st'

brian m. carlson (53):
      run-command: avoid undefined behavior in exists_in_PATH
      t4054: make hash-size independent
      t4066: compute index line in diffs
      t4134: compute appropriate length constant
      t4200: make hash size independent
      t4202: abstract away SHA-1-specific constants
      t4204: make hash size independent
      t4300: abstract away SHA-1-specific constants
      t5318: update for SHA-256
      t5319: change invalid offset for SHA-256 compatibility
      t5319: make test work with SHA-256
      t5324: make hash size independent
      t5504: make hash algorithm independent
      t5510: make hash size independent
      t5512: abstract away SHA-1-specific constants
      t5530: compute results based on object length
      t5537: make hash size independent
      t5540: make hash size independent
      t5562: use $ZERO_OID
      t5601: switch into repository to hash object
      t5604: make hash independent
      docs: use "currently" for the present time
      doc: move author and committer information to git-commit(1)
      docs: expand on possible and recommended user config options
      doc: provide guidance on user.name format
      doc: dissuade users from trying to ignore tracked files
      docs: mention when increasing http.postBuffer is valuable
      t/lib-pack: support SHA-256
      t3206: make hash size independent
      t3308: make test work with SHA-256
      t3309: make test work with SHA-256
      t3310: make test work with SHA-256
      t3311: make test work with SHA-256
      t4013: make test hash independent
      t4211: move SHA-1-specific test cases into a directory
      t4211: add test cases for SHA-256
      t4060: make test work with SHA-256
      t5302: make hash size independent
      t5309: make test hash independent
      t5313: make test hash independent
      t5321: make test hash independent
      t5515: make test hash independent
      t5318: update for SHA-256
      t5607: make hash size independent
      t5703: make test work with SHA-256
      t6000: abstract away SHA-1-specific constants
      t6006: make hash size independent
      t6024: update for SHA-256
      mailmap: add an additional email address for brian m. carlson
      t1300: add test for urlmatch with multiple wildcards
      t0300: add tests for some additional cases
      credential: use the last matching username in the config
      credential: allow wildcard patterns when matching config


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [ANNOUNCE] Git v2.26.0-rc1
  2020-03-10 14:57 [ANNOUNCE] Git v2.26.0-rc1 Junio C Hamano
@ 2020-03-10 17:40 ` Jeff King
  2020-03-10 19:08   ` Junio C Hamano
                     ` (2 more replies)
  2020-03-11 13:54 ` Randall S. Becker
  1 sibling, 3 replies; 9+ messages in thread
From: Jeff King @ 2020-03-10 17:40 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Elijah Newren, git

On Tue, Mar 10, 2020 at 07:57:11AM -0700, Junio C Hamano wrote:

>  * "git rebase" has learned to use the merge backend (i.e. the
>    machinery that drives "rebase -i") by default, while allowing
>    "--apply" option to use the "apply" backend (e.g. the moral
>    equivalent of "format-patch piped to am").  The rebase.backend
>    configuration variable can be set to customize.

I noticed a few behavior changes that I think are related to this
switch. I'm not sure to what degree we'd consider these a problem
(though the second I think may be an existing bug in the merge backend
that's just getting more attention), but it seems like the time to raise
the issue is now, before the release. :)

The first change is that we'll now open an editor when continuing a
conflicted rebase. You can see it by running this:

  for backend in apply merge; do
    echo "==> Running with rebase.backend=$backend"
  
    # new repo
    rm -rf repo
    git init -q repo
    cd repo
  
    # create two conflicting branches
    echo base >base && git add base && git commit -qm base
    echo master >file && git add file && git commit -qm master
    git checkout -q -b side HEAD^
    echo side >file && git add file && git commit -qm side
  
    # rebase on master, hit the conflict, then resolve it
    git -c rebase.backend=$backend rebase master
    echo resolved >file
    git add file
  
    # continue the rebase, noting whether we used the editor
    GIT_EDITOR='echo >&2 running editor on:' git rebase --continue
  done

We won't run the editor the "apply" backend, but do for "merge".  I'm
not sure how big a deal this is. It bit me because I have a script which
runs rebase in a "while read" shell loop, with stdin coming from a pipe
feeding the loop. It auto-continues when rerere is able to fix up the
conflicts, but the editor complains about stdin not being a tty and
dies.

I'd imagine that's a pretty rare situation, and it was easy enough to
fix up. But I wonder if we should be more careful about making sure the
behavior is more identical. On the other hand, I imagine this is the way
the merge backend has always behaved, so it would be a change in
behavior for people who had been using it already. I guess the _most_
compatible thing would be a merge-that-behaves-more-like-apply backend,
but I'm not sure if we want to support that forever.

The second thing I noticed is more clearly a bug, I think. If we have a
patch that is skipped because it was already applied, we get stuck in
"cherry-picking" mode. Try:

  for backend in apply merge; do
    echo "==> Running with rebase.backend=$backend"
  
    # new repo
    rm -rf repo
    git init -q repo
    cd repo
  
    echo base >file && git add file && git commit -qm base
    # do this in two steps so we don't match patch-id
    echo one >file && git commit -qam master-1
    echo two >file && git commit -qam master-2
  
    git checkout -q -b side HEAD~2
    echo two >file && git commit -qam side
  
    # start a rebase, which should realize that the patch is a noop
    git -c rebase.backend=$backend rebase master
  
    # see what state "status" reports us in
    git status
  done

For the "apply" case, I get:

  ==> Running with rebase.backend=apply
  First, rewinding head to replay your work on top of it...
  Applying: side
  Using index info to reconstruct a base tree...
  M	file
  Falling back to patching base and 3-way merge...
  No changes -- Patch already applied.
  On branch side
  nothing to commit, working tree clean

So we complete the rebase, and git-status shows nothing. But for the
merge backend:

  ==> Running with rebase.backend=merge
  dropping f8b25a2cd2a3a0e64d820efe2fcbae81dec98616 side -- patch contents already upstream
  Successfully rebased and updated refs/heads/side.
  On branch side
  You are currently cherry-picking commit f8b25a2.
  
  nothing to commit, working tree clean

Oops. If I "git rebase --continue" from there, I get "No rebase in
progress?". Doing "git cherry-pick --skip" clears it. I guess the issue
is the continued presence of .git/CHERRY_PICK_HEAD.

As you can see from the output above (and the earlier snippet, if you
run it), there are also a bunch of minor stderr output changes. I think
these probably aren't worth caring about.

-Peff

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [ANNOUNCE] Git v2.26.0-rc1
  2020-03-10 17:40 ` Jeff King
@ 2020-03-10 19:08   ` Junio C Hamano
  2020-03-10 19:27     ` Elijah Newren
  2020-03-10 19:48     ` Jeff King
  2020-03-10 20:58   ` Junio C Hamano
  2020-03-11  5:25   ` Elijah Newren
  2 siblings, 2 replies; 9+ messages in thread
From: Junio C Hamano @ 2020-03-10 19:08 UTC (permalink / raw)
  To: Jeff King; +Cc: Elijah Newren, git

Jeff King <peff@peff.net> writes:

> On Tue, Mar 10, 2020 at 07:57:11AM -0700, Junio C Hamano wrote:
>
>>  * "git rebase" has learned to use the merge backend (i.e. the
>>    machinery that drives "rebase -i") by default, while allowing
>>    "--apply" option to use the "apply" backend (e.g. the moral
>>    equivalent of "format-patch piped to am").  The rebase.backend
>>    configuration variable can be set to customize.
>
> I noticed a few behavior changes that I think are related to this
> switch.
> ...
> Oops. If I "git rebase --continue" from there, I get "No rebase in
> progress?". Doing "git cherry-pick --skip" clears it. I guess the issue
> is the continued presence of .git/CHERRY_PICK_HEAD.
>
> As you can see from the output above (and the earlier snippet, if you
> run it), there are also a bunch of minor stderr output changes. I think
> these probably aren't worth caring about.

Hmph.  It might have been way premature to switch the default, then.

Introducing rebase.backend to allow adventurous to opt in early,
while keeping the default backend same, may not be a bad way to
avoid the regression in the upcoming release and to give us enough
time deal with it after the release, perhaps?

-- >8 --
Subject: rebase: do not switch the default to 'merge' just yet

Reverts 2ac0d627 (rebase: change the default backend from "am" to
"merge", 2020-02-15) to postpone the switch of default backend of
"git rebase" to the merge backend, as there seem to be a few
remaining bugs (we saw two reported on the day after 2.26-rc1---we
do not know how many remaining bugs there are) that regresses the
end user experience.

 * When a rebase stops with a merge conflict, "rebase --continue"
   after resolving the conflict opens an editor with the merge
   backend;

 * When a rebase sees a change that is already applied, the end user
   gets thrown into "cherry-picking" mode, causing "git status" to
   say "nothing to commit, working tree clean". At that point, "git
   rebase --continue" does not let the user get out of this state.

Let's keep the default for the upcoming release, without removing
the configuration variable so that those adventurous can opt into
using the 'merge' backend to help polishing it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 Documentation/git-rebase.txt           | 6 +++---
 builtin/rebase.c                       | 4 ++--
 t/t5520-pull.sh                        | 7 +++----
 t/t9106-git-svn-commit-diff-clobber.sh | 3 +--
 4 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
index 8c1f4b8268..58bc556142 100644
--- a/Documentation/git-rebase.txt
+++ b/Documentation/git-rebase.txt
@@ -260,8 +260,7 @@ See also INCOMPATIBLE OPTIONS below.
 
 --apply:
 	Use applying strategies to rebase (calling `git-am`
-	internally).  This option may become a no-op in the future
-	once the merge backend handles everything the apply one does.
+	internally).  This is the default.
 +
 See also INCOMPATIBLE OPTIONS below.
 
@@ -315,7 +314,8 @@ See also INCOMPATIBLE OPTIONS below.
 --merge::
 	Use merging strategies to rebase.  When the recursive (default) merge
 	strategy is used, this allows rebase to be aware of renames on the
-	upstream side.  This is the default.
+	upstream side.  This may become the default in the future
+	once known bugs are shaken out of this backend.
 +
 Note that a rebase merge works by replaying each commit from the working
 branch on top of the <upstream> branch.  Because of this, when a merge
diff --git a/builtin/rebase.c b/builtin/rebase.c
index f3036f40c6..37d2920620 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -100,7 +100,7 @@ struct rebase_options {
 #define REBASE_OPTIONS_INIT {			  	\
 		.type = REBASE_UNSPECIFIED,	  	\
 		.empty = EMPTY_UNSPECIFIED,	  	\
-		.default_backend = "merge",	  	\
+		.default_backend = "apply",	  	\
 		.flags = REBASE_NO_QUIET, 		\
 		.git_am_opts = ARGV_ARRAY_INIT,		\
 		.git_format_patch_opt = STRBUF_INIT	\
@@ -1913,7 +1913,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 
 	if (options.type == REBASE_UNSPECIFIED) {
 		if (!strcmp(options.default_backend, "merge"))
-			imply_merge(&options, "--merge");
+			options.type = REBASE_MERGE;
 		else if (!strcmp(options.default_backend, "apply"))
 			options.type = REBASE_APPLY;
 		else
diff --git a/t/t5520-pull.sh b/t/t5520-pull.sh
index 2f86fca042..e8d28e5e36 100755
--- a/t/t5520-pull.sh
+++ b/t/t5520-pull.sh
@@ -340,7 +340,7 @@ test_expect_success '--rebase with conflicts shows advice' '
 	test_tick &&
 	git commit -m "Create conflict" seq.txt &&
 	test_must_fail git pull --rebase . seq 2>err >out &&
-	test_i18ngrep "Resolve all conflicts manually" err
+	test_i18ngrep "Resolve all conflicts manually" out
 '
 
 test_expect_success 'failed --rebase shows advice' '
@@ -354,7 +354,7 @@ test_expect_success 'failed --rebase shows advice' '
 	git checkout -f -b fails-to-rebase HEAD^ &&
 	test_commit v2-without-cr file "2" file2-lf &&
 	test_must_fail git pull --rebase . diverging 2>err >out &&
-	test_i18ngrep "Resolve all conflicts manually" err
+	test_i18ngrep "Resolve all conflicts manually" out
 '
 
 test_expect_success '--rebase fails with multiple branches' '
@@ -774,8 +774,7 @@ test_expect_success 'git pull --rebase does not reapply old patches' '
 	(
 		cd dst &&
 		test_must_fail git pull --rebase &&
-		cat .git/rebase-merge/done .git/rebase-merge/git-rebase-todo >work &&
-		grep -v -e \# -e ^$ work >patches &&
+		find .git/rebase-apply -name "000*" >patches &&
 		test_line_count = 1 patches &&
 		rm -f work
 	)
diff --git a/t/t9106-git-svn-commit-diff-clobber.sh b/t/t9106-git-svn-commit-diff-clobber.sh
index aec45bca3b..dbe8deac0d 100755
--- a/t/t9106-git-svn-commit-diff-clobber.sh
+++ b/t/t9106-git-svn-commit-diff-clobber.sh
@@ -92,8 +92,7 @@ test_expect_success 'multiple dcommit from git svn will not clobber svn' "
 
 
 test_expect_success 'check that rebase really failed' '
-	git status >output &&
-	grep currently.rebasing output
+	test -d .git/rebase-apply
 '
 
 test_expect_success 'resolve, continue the rebase and dcommit' "

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [ANNOUNCE] Git v2.26.0-rc1
  2020-03-10 19:08   ` Junio C Hamano
@ 2020-03-10 19:27     ` Elijah Newren
  2020-03-10 19:48     ` Jeff King
  1 sibling, 0 replies; 9+ messages in thread
From: Elijah Newren @ 2020-03-10 19:27 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Jeff King, Git Mailing List

On Tue, Mar 10, 2020 at 12:08 PM Junio C Hamano <gitster@pobox.com> wrote:
>
> Jeff King <peff@peff.net> writes:
>
> > On Tue, Mar 10, 2020 at 07:57:11AM -0700, Junio C Hamano wrote:
> >
> >>  * "git rebase" has learned to use the merge backend (i.e. the
> >>    machinery that drives "rebase -i") by default, while allowing
> >>    "--apply" option to use the "apply" backend (e.g. the moral
> >>    equivalent of "format-patch piped to am").  The rebase.backend
> >>    configuration variable can be set to customize.
> >
> > I noticed a few behavior changes that I think are related to this
> > switch.
> > ...
> > Oops. If I "git rebase --continue" from there, I get "No rebase in
> > progress?". Doing "git cherry-pick --skip" clears it. I guess the issue
> > is the continued presence of .git/CHERRY_PICK_HEAD.
> >
> > As you can see from the output above (and the earlier snippet, if you
> > run it), there are also a bunch of minor stderr output changes. I think
> > these probably aren't worth caring about.
>
> Hmph.  It might have been way premature to switch the default, then.

Or perhaps a bit late in the cycle to do it, yeah.

> Introducing rebase.backend to allow adventurous to opt in early,
> while keeping the default backend same, may not be a bad way to
> avoid the regression in the upcoming release and to give us enough
> time deal with it after the release, perhaps?

Seems reasonable.

> -- >8 --
> Subject: rebase: do not switch the default to 'merge' just yet
>
> Reverts 2ac0d627 (rebase: change the default backend from "am" to
> "merge", 2020-02-15) to postpone the switch of default backend of
> "git rebase" to the merge backend, as there seem to be a few
> remaining bugs (we saw two reported on the day after 2.26-rc1---we
> do not know how many remaining bugs there are) that regresses the
> end user experience.
>
>  * When a rebase stops with a merge conflict, "rebase --continue"
>    after resolving the conflict opens an editor with the merge
>    backend;
>
>  * When a rebase sees a change that is already applied, the end user
>    gets thrown into "cherry-picking" mode, causing "git status" to
>    say "nothing to commit, working tree clean". At that point, "git
>    rebase --continue" does not let the user get out of this state.
>
> Let's keep the default for the upcoming release, without removing
> the configuration variable so that those adventurous can opt into
> using the 'merge' backend to help polishing it.
>
> Signed-off-by: Junio C Hamano <gitster@pobox.com>
> ---
>  Documentation/git-rebase.txt           | 6 +++---
>  builtin/rebase.c                       | 4 ++--
>  t/t5520-pull.sh                        | 7 +++----
>  t/t9106-git-svn-commit-diff-clobber.sh | 3 +--
>  4 files changed, 9 insertions(+), 11 deletions(-)
>
> diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
> index 8c1f4b8268..58bc556142 100644
> --- a/Documentation/git-rebase.txt
> +++ b/Documentation/git-rebase.txt
> @@ -260,8 +260,7 @@ See also INCOMPATIBLE OPTIONS below.
>
>  --apply:
>         Use applying strategies to rebase (calling `git-am`
> -       internally).  This option may become a no-op in the future
> -       once the merge backend handles everything the apply one does.
> +       internally).  This is the default.
>  +
>  See also INCOMPATIBLE OPTIONS below.
>
> @@ -315,7 +314,8 @@ See also INCOMPATIBLE OPTIONS below.
>  --merge::
>         Use merging strategies to rebase.  When the recursive (default) merge
>         strategy is used, this allows rebase to be aware of renames on the
> -       upstream side.  This is the default.
> +       upstream side.  This may become the default in the future
> +       once known bugs are shaken out of this backend.
>  +
>  Note that a rebase merge works by replaying each commit from the working
>  branch on top of the <upstream> branch.  Because of this, when a merge
> diff --git a/builtin/rebase.c b/builtin/rebase.c
> index f3036f40c6..37d2920620 100644
> --- a/builtin/rebase.c
> +++ b/builtin/rebase.c
> @@ -100,7 +100,7 @@ struct rebase_options {
>  #define REBASE_OPTIONS_INIT {                          \
>                 .type = REBASE_UNSPECIFIED,             \
>                 .empty = EMPTY_UNSPECIFIED,             \
> -               .default_backend = "merge",             \
> +               .default_backend = "apply",             \
>                 .flags = REBASE_NO_QUIET,               \
>                 .git_am_opts = ARGV_ARRAY_INIT,         \
>                 .git_format_patch_opt = STRBUF_INIT     \
> @@ -1913,7 +1913,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
>
>         if (options.type == REBASE_UNSPECIFIED) {
>                 if (!strcmp(options.default_backend, "merge"))
> -                       imply_merge(&options, "--merge");
> +                       options.type = REBASE_MERGE;
>                 else if (!strcmp(options.default_backend, "apply"))
>                         options.type = REBASE_APPLY;
>                 else
> diff --git a/t/t5520-pull.sh b/t/t5520-pull.sh
> index 2f86fca042..e8d28e5e36 100755
> --- a/t/t5520-pull.sh
> +++ b/t/t5520-pull.sh
> @@ -340,7 +340,7 @@ test_expect_success '--rebase with conflicts shows advice' '
>         test_tick &&
>         git commit -m "Create conflict" seq.txt &&
>         test_must_fail git pull --rebase . seq 2>err >out &&
> -       test_i18ngrep "Resolve all conflicts manually" err
> +       test_i18ngrep "Resolve all conflicts manually" out
>  '
>
>  test_expect_success 'failed --rebase shows advice' '
> @@ -354,7 +354,7 @@ test_expect_success 'failed --rebase shows advice' '
>         git checkout -f -b fails-to-rebase HEAD^ &&
>         test_commit v2-without-cr file "2" file2-lf &&
>         test_must_fail git pull --rebase . diverging 2>err >out &&
> -       test_i18ngrep "Resolve all conflicts manually" err
> +       test_i18ngrep "Resolve all conflicts manually" out
>  '
>
>  test_expect_success '--rebase fails with multiple branches' '
> @@ -774,8 +774,7 @@ test_expect_success 'git pull --rebase does not reapply old patches' '
>         (
>                 cd dst &&
>                 test_must_fail git pull --rebase &&
> -               cat .git/rebase-merge/done .git/rebase-merge/git-rebase-todo >work &&
> -               grep -v -e \# -e ^$ work >patches &&
> +               find .git/rebase-apply -name "000*" >patches &&
>                 test_line_count = 1 patches &&
>                 rm -f work
>         )
> diff --git a/t/t9106-git-svn-commit-diff-clobber.sh b/t/t9106-git-svn-commit-diff-clobber.sh
> index aec45bca3b..dbe8deac0d 100755
> --- a/t/t9106-git-svn-commit-diff-clobber.sh
> +++ b/t/t9106-git-svn-commit-diff-clobber.sh
> @@ -92,8 +92,7 @@ test_expect_success 'multiple dcommit from git svn will not clobber svn' "
>
>
>  test_expect_success 'check that rebase really failed' '
> -       git status >output &&
> -       grep currently.rebasing output
> +       test -d .git/rebase-apply
>  '
>
>  test_expect_success 'resolve, continue the rebase and dcommit' "

Looks good to me.  I'll look into the regressions.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [ANNOUNCE] Git v2.26.0-rc1
  2020-03-10 19:08   ` Junio C Hamano
  2020-03-10 19:27     ` Elijah Newren
@ 2020-03-10 19:48     ` Jeff King
  1 sibling, 0 replies; 9+ messages in thread
From: Jeff King @ 2020-03-10 19:48 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Elijah Newren, git

On Tue, Mar 10, 2020 at 12:08:41PM -0700, Junio C Hamano wrote:

> Hmph.  It might have been way premature to switch the default, then.
> 
> Introducing rebase.backend to allow adventurous to opt in early,
> while keeping the default backend same, may not be a bad way to
> avoid the regression in the upcoming release and to give us enough
> time deal with it after the release, perhaps?

Yeah, certainly that's the conservative route, and I don't mind it.

-Peff

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [ANNOUNCE] Git v2.26.0-rc1
  2020-03-10 17:40 ` Jeff King
  2020-03-10 19:08   ` Junio C Hamano
@ 2020-03-10 20:58   ` Junio C Hamano
  2020-03-11 16:28     ` Jeff King
  2020-03-11  5:25   ` Elijah Newren
  2 siblings, 1 reply; 9+ messages in thread
From: Junio C Hamano @ 2020-03-10 20:58 UTC (permalink / raw)
  To: Jeff King; +Cc: Elijah Newren, git

Jeff King <peff@peff.net> writes:

> The first change is that we'll now open an editor when continuing a
> conflicted rebase. You can see it by running this:
> ...
> We won't run the editor the "apply" backend, but do for "merge".  I'm
> not sure how big a deal this is.

Back when "git am" was written, it was not considered a bug that the
"git am --resolved" option did not offer the user a chance to update
the log message to match the adjustment of the code the user made,
but honestly, I'd have to say that it is a bug in "git am" in that
over time it wasn't adjusted to the new world order where we
encourage users to describe what they did when the automation
hiccuped by opening an editor.  These days, even when automation
worked well (e.g. a clean auto-merge with "git merge"), we open an
editor.  The world has changed, and so should the expectations.

If it were that we used to let the users edit and the new behaviour
is to auto-continue, it would be a quite drastic behaviour change
that may annoy the users, but fortunately this is the other way
around, so it may not be too bad.  Having said all that, I do not
mind some workaround, e.g. "git rebase --continue --no-edit".

"GIT_EDITOR=: git rebase --continue" would be a usable workaround
that does not require any code change, hopefully.




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [ANNOUNCE] Git v2.26.0-rc1
  2020-03-10 17:40 ` Jeff King
  2020-03-10 19:08   ` Junio C Hamano
  2020-03-10 20:58   ` Junio C Hamano
@ 2020-03-11  5:25   ` Elijah Newren
  2 siblings, 0 replies; 9+ messages in thread
From: Elijah Newren @ 2020-03-11  5:25 UTC (permalink / raw)
  To: Jeff King; +Cc: Junio C Hamano, Git Mailing List

On Tue, Mar 10, 2020 at 10:40 AM Jeff King <peff@peff.net> wrote:
>
> On Tue, Mar 10, 2020 at 07:57:11AM -0700, Junio C Hamano wrote:
>
> >  * "git rebase" has learned to use the merge backend (i.e. the
> >    machinery that drives "rebase -i") by default, while allowing
> >    "--apply" option to use the "apply" backend (e.g. the moral
> >    equivalent of "format-patch piped to am").  The rebase.backend
> >    configuration variable can be set to customize.
>
> I noticed a few behavior changes that I think are related to this
> switch. I'm not sure to what degree we'd consider these a problem
> (though the second I think may be an existing bug in the merge backend
> that's just getting more attention), but it seems like the time to raise
> the issue is now, before the release. :)
>
> The first change is that we'll now open an editor when continuing a
> conflicted rebase. You can see it by running this:
>
>   for backend in apply merge; do
>     echo "==> Running with rebase.backend=$backend"
>
>     # new repo
>     rm -rf repo
>     git init -q repo
>     cd repo
>
>     # create two conflicting branches
>     echo base >base && git add base && git commit -qm base
>     echo master >file && git add file && git commit -qm master
>     git checkout -q -b side HEAD^
>     echo side >file && git add file && git commit -qm side
>
>     # rebase on master, hit the conflict, then resolve it
>     git -c rebase.backend=$backend rebase master
>     echo resolved >file
>     git add file
>
>     # continue the rebase, noting whether we used the editor
>     GIT_EDITOR='echo >&2 running editor on:' git rebase --continue
>   done
>
> We won't run the editor the "apply" backend, but do for "merge".  I'm
> not sure how big a deal this is. It bit me because I have a script which
> runs rebase in a "while read" shell loop, with stdin coming from a pipe
> feeding the loop. It auto-continues when rerere is able to fix up the
> conflicts, but the editor complains about stdin not being a tty and
> dies.
>
> I'd imagine that's a pretty rare situation, and it was easy enough to
> fix up. But I wonder if we should be more careful about making sure the
> behavior is more identical. On the other hand, I imagine this is the way
> the merge backend has always behaved, so it would be a change in
> behavior for people who had been using it already. I guess the _most_
> compatible thing would be a merge-that-behaves-more-like-apply backend,
> but I'm not sure if we want to support that forever.

This behavior did not always exist with the merge backend, it began
with commit 68aa495b59 ("rebase: implement --merge via the interactive
machinery", 2018-12-11).  Before that, there was not too much in
sequencer.c or its predecessors for non-interactive rebases, so I
wouldn't give much weight to historical precedent for how the merge
backend behaves here.

However, as Junio argues elsewhere in this thread, the apply backend
should probably be the one that is considered to be buggy here.
Although fixing the apply backend is probably best, and adding an
escape hatch such as --no-edit as Junio suggests for the merge backend
makes sense, given where we are in the 2.26 cycle, I only sent off a
patch to document this difference for now.

> The second thing I noticed is more clearly a bug, I think. If we have a
> patch that is skipped because it was already applied, we get stuck in
> "cherry-picking" mode. Try:
>
>   for backend in apply merge; do
>     echo "==> Running with rebase.backend=$backend"
>
>     # new repo
>     rm -rf repo
>     git init -q repo
>     cd repo
>
>     echo base >file && git add file && git commit -qm base
>     # do this in two steps so we don't match patch-id
>     echo one >file && git commit -qam master-1
>     echo two >file && git commit -qam master-2
>
>     git checkout -q -b side HEAD~2
>     echo two >file && git commit -qam side
>
>     # start a rebase, which should realize that the patch is a noop
>     git -c rebase.backend=$backend rebase master
>
>     # see what state "status" reports us in
>     git status
>   done
>
> For the "apply" case, I get:
>
>   ==> Running with rebase.backend=apply
>   First, rewinding head to replay your work on top of it...
>   Applying: side
>   Using index info to reconstruct a base tree...
>   M     file
>   Falling back to patching base and 3-way merge...
>   No changes -- Patch already applied.
>   On branch side
>   nothing to commit, working tree clean
>
> So we complete the rebase, and git-status shows nothing. But for the
> merge backend:
>
>   ==> Running with rebase.backend=merge
>   dropping f8b25a2cd2a3a0e64d820efe2fcbae81dec98616 side -- patch contents already upstream
>   Successfully rebased and updated refs/heads/side.
>   On branch side
>   You are currently cherry-picking commit f8b25a2.
>
>   nothing to commit, working tree clean
>
> Oops. If I "git rebase --continue" from there, I get "No rebase in
> progress?". Doing "git cherry-pick --skip" clears it. I guess the issue
> is the continued presence of .git/CHERRY_PICK_HEAD.

Yes, definitely a bug, and new as of "the eighth batch for
git-2.26.0", a few days before 2.26.0-rc0.  I found a one-liner fix.

> As you can see from the output above (and the earlier snippet, if you
> run it), there are also a bunch of minor stderr output changes. I think
> these probably aren't worth caring about.

Agreed; also, these output differences are already documented in
"Behavioral Differences" of the git-rebase manpage.


Thanks for the careful reports; new series up at
https://lore.kernel.org/git/pull.722.git.git.1583903621.gitgitgadget@gmail.com/
to address the issues raised.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* RE: [ANNOUNCE] Git v2.26.0-rc1
  2020-03-10 14:57 [ANNOUNCE] Git v2.26.0-rc1 Junio C Hamano
  2020-03-10 17:40 ` Jeff King
@ 2020-03-11 13:54 ` Randall S. Becker
  1 sibling, 0 replies; 9+ messages in thread
From: Randall S. Becker @ 2020-03-11 13:54 UTC (permalink / raw)
  To: 'Junio C Hamano', git

On March 10, 2020 10:57 AM, Junio C Hamano Wrote:
> To: git@vger.kernel.org
> Cc: Linux Kernel <linux-kernel@vger.kernel.org>; git-
> packagers@googlegroups.com
> Subject: [ANNOUNCE] Git v2.26.0-rc1
> 
> A release candidate Git v2.26.0-rc1 is now available for testing at the usual
> places.  It is comprised of 453 non-merge commits since v2.25.0, contributed
> by 47 people, 10 of which are new faces.

For the NonStop platform, v2.26.0-rc1 passes regression except for t1091, for which I suggested a hack previously in 2.26.0-rc0. Other tests, t9001 and t9020 fail without surprise and need not be fixed on platform (no compatible sendmail or SVN).

Thanks all.

Regards,
Randall

-- Brief whoami:
 NonStop developer since approximately 211288444200000000
 UNIX developer since approximately 421664400
-- In my real life, I talk too much.




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [ANNOUNCE] Git v2.26.0-rc1
  2020-03-10 20:58   ` Junio C Hamano
@ 2020-03-11 16:28     ` Jeff King
  0 siblings, 0 replies; 9+ messages in thread
From: Jeff King @ 2020-03-11 16:28 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Elijah Newren, git

On Tue, Mar 10, 2020 at 01:58:12PM -0700, Junio C Hamano wrote:

> Jeff King <peff@peff.net> writes:
> 
> > The first change is that we'll now open an editor when continuing a
> > conflicted rebase. You can see it by running this:
> > ...
> > We won't run the editor the "apply" backend, but do for "merge".  I'm
> > not sure how big a deal this is.
> 
> Back when "git am" was written, it was not considered a bug that the
> "git am --resolved" option did not offer the user a chance to update
> the log message to match the adjustment of the code the user made,
> but honestly, I'd have to say that it is a bug in "git am" in that
> over time it wasn't adjusted to the new world order where we
> encourage users to describe what they did when the automation
> hiccuped by opening an editor.  These days, even when automation
> worked well (e.g. a clean auto-merge with "git merge"), we open an
> editor.  The world has changed, and so should the expectations.

Thanks for writing this out. I had a general feeling that this wasn't a
bug per se, but I agree with your argument that the behavior we want to
end up with is the new one. It's unfortunate that it may cause some
minor troubles for people upgrading, but that may be acceptable. We had
a similar thing when "git merge" started opening an editor, I think.

> If it were that we used to let the users edit and the new behaviour
> is to auto-continue, it would be a quite drastic behaviour change
> that may annoy the users, but fortunately this is the other way
> around, so it may not be too bad.  Having said all that, I do not
> mind some workaround, e.g. "git rebase --continue --no-edit".
> 
> "GIT_EDITOR=: git rebase --continue" would be a usable workaround
> that does not require any code change, hopefully.

Yeah, GIT_EDITOR=: works for me, but I agree that having a "--no-edit"
option would be a little nicer.

-Peff

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2020-03-11 16:28 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-10 14:57 [ANNOUNCE] Git v2.26.0-rc1 Junio C Hamano
2020-03-10 17:40 ` Jeff King
2020-03-10 19:08   ` Junio C Hamano
2020-03-10 19:27     ` Elijah Newren
2020-03-10 19:48     ` Jeff King
2020-03-10 20:58   ` Junio C Hamano
2020-03-11 16:28     ` Jeff King
2020-03-11  5:25   ` Elijah Newren
2020-03-11 13:54 ` Randall S. Becker

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).