]> git.ipfire.org Git - thirdparty/git.git/log
thirdparty/git.git
4 years agoThe final batch before -rc2
Junio C Hamano [Mon, 6 Jan 2020 22:17:38 +0000 (14:17 -0800)] 
The final batch before -rc2

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'ds/sparse-cone'
Junio C Hamano [Mon, 6 Jan 2020 22:17:51 +0000 (14:17 -0800)] 
Merge branch 'ds/sparse-cone'

Code cleanup.

* ds/sparse-cone:
  Documentation/git-sparse-checkout.txt: fix a typo
  sparse-checkout: use extern for global variables

4 years agoMerge branch 'ds/commit-graph-set-size-mult'
Junio C Hamano [Mon, 6 Jan 2020 22:17:51 +0000 (14:17 -0800)] 
Merge branch 'ds/commit-graph-set-size-mult'

The code to write split commit-graph file(s) upon fetching computed
bogus value for the parameter used in splitting the resulting
files, which has been corrected.

* ds/commit-graph-set-size-mult:
  commit-graph: prefer default size_mult when given zero

4 years agoMerge branch 'en/merge-recursive-oid-eq-simplify'
Junio C Hamano [Mon, 6 Jan 2020 22:17:51 +0000 (14:17 -0800)] 
Merge branch 'en/merge-recursive-oid-eq-simplify'

Code cleanup.

* en/merge-recursive-oid-eq-simplify:
  merge-recursive: remove unnecessary oid_eq function

4 years agoMerge branch 'ds/sparse-list-in-cone-mode'
Junio C Hamano [Mon, 6 Jan 2020 22:17:51 +0000 (14:17 -0800)] 
Merge branch 'ds/sparse-list-in-cone-mode'

"git sparse-checkout list" subcommand learned to give its output in
a more concise form when the "cone" mode is in effect.

* ds/sparse-list-in-cone-mode:
  sparse-checkout: document interactions with submodules
  sparse-checkout: list directories in cone mode

4 years agoMerge branch 'js/mingw-loosen-overstrict-tree-entry-checks'
Junio C Hamano [Mon, 6 Jan 2020 22:17:50 +0000 (14:17 -0800)] 
Merge branch 'js/mingw-loosen-overstrict-tree-entry-checks'

An earlier update to Git for Windows declared that a tree object is
invalid if it has a path component with backslash in it, which was
overly strict, which has been corrected.  The only protection the
Windows users need is to prevent such path (or any path that their
filesystem cannot check out) from entering the index.

* js/mingw-loosen-overstrict-tree-entry-checks:
  mingw: only test index entries for backslashes, not tree entries

4 years agoMerge branch 'pb/clarify-line-log-doc'
Junio C Hamano [Mon, 6 Jan 2020 22:17:50 +0000 (14:17 -0800)] 
Merge branch 'pb/clarify-line-log-doc'

Doc update.

* pb/clarify-line-log-doc:
  doc: log, gitk: line-log arguments must exist in starting revision
  doc: log, gitk: document accepted line-log diff formats

4 years agoMerge branch 'ew/packfile-syscall-optim'
Junio C Hamano [Mon, 6 Jan 2020 22:17:50 +0000 (14:17 -0800)] 
Merge branch 'ew/packfile-syscall-optim'

Code cleanup.

* ew/packfile-syscall-optim:
  packfile: replace lseek+read with pread
  packfile: remove redundant fcntl F_GETFD/F_SETFD

4 years agoDocumentation/git-sparse-checkout.txt: fix a typo
Taylor Blau [Thu, 2 Jan 2020 22:51:40 +0000 (15:51 -0700)] 
Documentation/git-sparse-checkout.txt: fix a typo

This typo was introduced in 94c0956b60 (sparse-checkout: create builtin
with 'list' subcommand, 2019-11-21).

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Acked-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocommit-graph: prefer default size_mult when given zero
Derrick Stolee [Thu, 2 Jan 2020 16:14:14 +0000 (16:14 +0000)] 
commit-graph: prefer default size_mult when given zero

In 50f26bd ("fetch: add fetch.writeCommitGraph config setting",
2019-09-02), the fetch builtin added the capability to write a
commit-graph using the "--split" feature. This feature creates
multiple commit-graph files, and those can merge based on a set
of "split options" including a size multiple. The default size
multiple is 2, which intends to provide a log_2 N depth of the
commit-graph chain where N is the number of commits.

However, I noticed during dogfooding that my commit-graph chains
were becoming quite large when left only to builds by 'git fetch'.
It turns out that in split_graph_merge_strategy(), we default the
size_mult variable to 2 except we override it with the context's
split_opts if they exist. In builtin/fetch.c, we create such a
split_opts, but do not populate it with values.

This problem is due to two failures:

 1. It is unclear that we can add the flag COMMIT_GRAPH_WRITE_SPLIT
    with a NULL split_opts.
 2. If we have a non-NULL split_opts, then we override the default
    values even if a zero value is given.

Correct both of these issues. First, do not override size_mult when
the options provide a zero value. Second, stop creating a split_opts
in the fetch builtin.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agomingw: only test index entries for backslashes, not tree entries
Johannes Schindelin [Tue, 31 Dec 2019 22:53:50 +0000 (22:53 +0000)] 
mingw: only test index entries for backslashes, not tree entries

During a clone of a repository that contained a file with a backslash in
its name in the past, as of v2.24.1(2), Git for Windows prints errors
like this:

error: filename in tree entry contains backslash: '\'

The idea is to prevent Git from even trying to write files with
backslashes in their file names: while these characters are valid in
file names on other platforms, on Windows it is interpreted as directory
separator (which would obviously lead to ambiguities, e.g. when there is
a file `a\b` and there is also a file `a/b`).

Arguably, this is the wrong layer for that error: As long as the user
never checks out the files whose names contain backslashes, there should
not be any problem in the first place.

So let's loosen the requirements: we now leave tree entries with
backslashes in their file names alone, but we do require any entries
that are added to the Git index to contain no backslashes on Windows.

Note: just as before, the check is guarded by `core.protectNTFS` (to
allow overriding the check by toggling that config setting), and it
is _only_ performed on Windows, as the backslash is not a directory
separator elsewhere, even when writing to NTFS-formatted volumes.

An alternative approach would be to try to prevent creating files with
backslashes in their file names. However, that comes with its own set of
problems. For example, `git config -f C:\ProgramData\Git\config ...` is
a very valid way to specify a custom config location, and we obviously
do _not_ want to prevent that. Therefore, the approach chosen in this
patch would appear to be better.

This addresses https://github.com/git-for-windows/git/issues/2435

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoGit 2.25-rc1 v2.25.0-rc1
Junio C Hamano [Thu, 2 Jan 2020 20:37:02 +0000 (12:37 -0800)] 
Git 2.25-rc1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'js/use-test-tool-on-path'
Junio C Hamano [Thu, 2 Jan 2020 20:38:30 +0000 (12:38 -0800)] 
Merge branch 'js/use-test-tool-on-path'

Test fix.

* js/use-test-tool-on-path:
  t3008: find test-tool through path lookup

4 years agoMerge branch 'js/mingw-reserved-filenames'
Junio C Hamano [Thu, 2 Jan 2020 20:38:30 +0000 (12:38 -0800)] 
Merge branch 'js/mingw-reserved-filenames'

Forbid pathnames that the platform's filesystem cannot represent on
MinGW.

* js/mingw-reserved-filenames:
  mingw: refuse paths containing reserved names
  mingw: short-circuit the conversion of `/dev/null` to UTF-16

4 years agoMerge branch 'en/rebase-signoff-fix'
Junio C Hamano [Thu, 2 Jan 2020 20:38:30 +0000 (12:38 -0800)] 
Merge branch 'en/rebase-signoff-fix'

"git rebase --signoff" stopped working when the command was written
in C, which has been corrected.

* en/rebase-signoff-fix:
  rebase: fix saving of --signoff state for am-based rebases

4 years agoMerge branch 'em/freebsd-cirrus-ci'
Junio C Hamano [Thu, 2 Jan 2020 20:38:29 +0000 (12:38 -0800)] 
Merge branch 'em/freebsd-cirrus-ci'

* em/freebsd-cirrus-ci:
  CI: add FreeBSD CI support via Cirrus-CI

4 years agoMerge branch 'bk/p4-misc-usability'
Junio C Hamano [Thu, 2 Jan 2020 20:38:29 +0000 (12:38 -0800)] 
Merge branch 'bk/p4-misc-usability'

Miscellaneous small UX improvements on "git-p4".

* bk/p4-misc-usability:
  git-p4: show detailed help when parsing options fail
  git-p4: yes/no prompts should sanitize user text

4 years agomerge-recursive: remove unnecessary oid_eq function
Elijah Newren [Wed, 1 Jan 2020 05:20:57 +0000 (05:20 +0000)] 
merge-recursive: remove unnecessary oid_eq function

Back when merge-recursive was first introduced in commit 6d297f8137
(Status update on merge-recursive in C, 2006-07-08), it created a
sha_eq() function.  This function pre-dated the introduction of
hashcmp() to cache.h by about a month, but was switched over to using
hashcmp() as part of commit 9047ebbc22 (Split out merge_recursive() to
merge-recursive.c, 2008-08-12).  In commit b4da9d62f9 (merge-recursive:
convert leaf functions to use struct object_id, 2016-06-24), sha_eq() was
renamed to oid_eq() and its hashcmp() call was switched to oideq().

oid_eq() is basically just a wrapper around oideq() that has some extra
checks to protect against NULL arguments or to allow short-circuiting if
one of the arguments is NULL.  I don't know if any caller ever tried to
call with NULL arguments, but certainly none do now which means the
extra checks serve no purpose.  (Also, if these checks were genuinely
useful, then they probably should be added to the main oideq() so all
callers could benefit from them.)

Reduce the cognitive overhead of having both oid_eq() and oideq(), by
getting rid of merge-recursive's special oid_eq() wrapper.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosparse-checkout: use extern for global variables
Derrick Stolee [Tue, 31 Dec 2019 13:17:48 +0000 (13:17 +0000)] 
sparse-checkout: use extern for global variables

When the core.sparseCheckoutCone config setting was added in
879321eb0b ("sparse-checkout: add 'cone' mode" 2019-11-21), the
variables storing the config values for core.sparseCheckout and
core.sparseCheckoutCone were rearranged in cache.h, but in doing
so the "extern" keyword was dropped.

While we are tending to drop the "extern" keyword for function
declarations, it is still necessary for global variables used
across multiple *.c files. The impact of not having the extern
keyword may be unpredictable.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosparse-checkout: document interactions with submodules
Derrick Stolee [Mon, 30 Dec 2019 15:33:13 +0000 (15:33 +0000)] 
sparse-checkout: document interactions with submodules

Using 'git submodule (init|deinit)' a user can select a subset of
submodules to populate. This behaves very similar to the sparse-checkout
feature, but those directories contain their own .git directory
including an object database and ref space. To have the sparse-checkout
file also determine if those files should exist would easily cause
problems. Therefore, keeping these features independent in this way
is the best way forward.

Also create a test that demonstrates this behavior to make sure
it doesn't change as the sparse-checkout feature evolves.

Reported-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosparse-checkout: list directories in cone mode
Derrick Stolee [Mon, 30 Dec 2019 15:33:12 +0000 (15:33 +0000)] 
sparse-checkout: list directories in cone mode

When core.sparseCheckoutCone is enabled, the 'git sparse-checkout set'
command takes a list of directories as input, then creates an ordered
list of sparse-checkout patterns such that those directories are
recursively included and all sibling entries along the parent directories
are also included. Listing the patterns is less user-friendly than the
directories themselves.

In cone mode, and as long as the patterns match the expected cone-mode
pattern types, change the output of 'git sparse-checkout list' to only
show the directories that created the patterns.

With this change, the following piped commands would not change the
working directory:

git sparse-checkout list | git sparse-checkout set --stdin

The only time this would not work is if core.sparseCheckoutCone is
true, but the sparse-checkout file contains patterns that do not
match the expected pattern types for cone mode.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot3008: find test-tool through path lookup
Johannes Sixt [Sun, 22 Dec 2019 15:03:53 +0000 (16:03 +0100)] 
t3008: find test-tool through path lookup

Do not use $GIT_BUILD_DIR without quotes; it may contain spaces and be
split into fields. But it is not necessary to access test-tool with an
absolute path in the first place as it can be found via path lookup.
Remove the explicit path.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agopackfile: replace lseek+read with pread
Eric Wong [Thu, 26 Dec 2019 10:42:20 +0000 (10:42 +0000)] 
packfile: replace lseek+read with pread

We already have pread emulation for portability, so there's
there's no reason to make two syscalls where one suffices.

Furthermore, readers of the packfile will be using mmap
(or pread to emulate mmap), anyways, so the file description
offset does not matter in this case.

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agodoc: log, gitk: line-log arguments must exist in starting revision
Philippe Blain [Thu, 26 Dec 2019 17:43:37 +0000 (17:43 +0000)] 
doc: log, gitk: line-log arguments must exist in starting revision

The line number, regex or offset parameters <start> and <end> in
`git log -L <start>,<end>:<file>`, or the function name regex in
`git log -L :<funcname>:<file>` must exist in the starting
revision, or else the command exits with a fatal error.

This is not obvious in the documentation, so add a note to that
effect.

Signed-off-by: Philippe Blain <levraiphilippeblain@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agodoc: log, gitk: document accepted line-log diff formats
Philippe Blain [Thu, 26 Dec 2019 17:43:36 +0000 (17:43 +0000)] 
doc: log, gitk: document accepted line-log diff formats

Currently the line-log functionality (git log -L) only supports
displaying patch output (`-p | --patch`, its default behavior) and suppressing it
(`-s | --no-patch`). A check was added in the code to that effect in 5314efaea
(line-log: detect unsupported formats, 2019-03-10) but the documentation was not
updated.

Explicitly mention that `-L` implies `-p`, that patch output can be
suppressed using `-s`, and that all other diff formats are not allowed.

Signed-off-by: Philippe Blain <levraiphilippeblain@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agopackfile: remove redundant fcntl F_GETFD/F_SETFD
Eric Wong [Thu, 26 Dec 2019 10:42:19 +0000 (10:42 +0000)] 
packfile: remove redundant fcntl F_GETFD/F_SETFD

git_open sets close-on-exec since cd66ada06588f797
("sha1_file: open window into packfiles with O_CLOEXEC").
There's no reason to keep using fcntl to set the close-on-exec
flag, anymore.

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agomailmap: mask accentless variant for Công Danh
Junio C Hamano [Thu, 26 Dec 2019 17:53:09 +0000 (09:53 -0800)] 
mailmap: mask accentless variant for Công Danh

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoGit 2.25-rc0 v2.25.0-rc0
Junio C Hamano [Wed, 25 Dec 2019 19:21:28 +0000 (11:21 -0800)] 
Git 2.25-rc0

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'en/fill-directory-fixes'
Junio C Hamano [Wed, 25 Dec 2019 19:22:02 +0000 (11:22 -0800)] 
Merge branch 'en/fill-directory-fixes'

Assorted fixes to the directory traversal API.

* en/fill-directory-fixes:
  dir.c: use st_add3() for allocation size
  dir: consolidate similar code in treat_directory()
  dir: synchronize treat_leading_path() and read_directory_recursive()
  dir: fix checks on common prefix directory
  dir: break part of read_directory_recursive() out for reuse
  dir: exit before wildcard fall-through if there is no wildcard
  dir: remove stray quote character in comment
  Revert "dir.c: make 'git-status --ignored' work within leading directories"
  t3011: demonstrate directory traversal failures

4 years agoMerge branch 'rs/test-cleanup'
Junio C Hamano [Wed, 25 Dec 2019 19:22:01 +0000 (11:22 -0800)] 
Merge branch 'rs/test-cleanup'

Test cleanup.

* rs/test-cleanup:
  t6030: don't create unused file
  t5580: don't create unused file
  t3501: don't create unused file
  t7004: don't create unused file
  t4256: don't create unused file

4 years agoMerge branch 'mr/bisect-save-pointer-to-const-string'
Junio C Hamano [Wed, 25 Dec 2019 19:22:01 +0000 (11:22 -0800)] 
Merge branch 'mr/bisect-save-pointer-to-const-string'

Code cleanup.

* mr/bisect-save-pointer-to-const-string:
  bisect--helper: convert `*_warning` char pointers to char arrays.

4 years agoMerge branch 'rs/xdiff-ignore-ws-w-func-context'
Junio C Hamano [Wed, 25 Dec 2019 19:22:01 +0000 (11:22 -0800)] 
Merge branch 'rs/xdiff-ignore-ws-w-func-context'

Extend test coverage for a recent fix.

* rs/xdiff-ignore-ws-w-func-context:
  t4015: improve coverage of function context test

4 years agoMerge branch 'js/add-p-in-c'
Junio C Hamano [Wed, 25 Dec 2019 19:22:00 +0000 (11:22 -0800)] 
Merge branch 'js/add-p-in-c'

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

* js/add-p-in-c:
  built-in add -p: show helpful hint when nothing can be staged
  built-in add -p: only show the applicable parts of the help text
  built-in add -p: implement the 'q' ("quit") command
  built-in add -p: implement the '/' ("search regex") command
  built-in add -p: implement the 'g' ("goto") command
  built-in add -p: implement hunk editing
  strbuf: add a helper function to call the editor "on an strbuf"
  built-in add -p: coalesce hunks after splitting them
  built-in add -p: implement the hunk splitting feature
  built-in add -p: show different prompts for mode changes and deletions
  built-in app -p: allow selecting a mode change as a "hunk"
  built-in add -p: handle deleted empty files
  built-in add -p: support multi-file diffs
  built-in add -p: offer a helpful error message when hunk navigation failed
  built-in add -p: color the prompt and the help text
  built-in add -p: adjust hunk headers as needed
  built-in add -p: show colored hunks by default
  built-in add -i: wire up the new C code for the `patch` command
  built-in add -i: start implementing the `patch` functionality in C

4 years agoMerge branch 'jc/drop-gen-hdrs'
Junio C Hamano [Wed, 25 Dec 2019 19:22:00 +0000 (11:22 -0800)] 
Merge branch 'jc/drop-gen-hdrs'

Code cleanup.

* jc/drop-gen-hdrs:
  Makefile: drop GEN_HDRS

4 years agoMerge branch 'ja/doc-markup-cleanup'
Junio C Hamano [Wed, 25 Dec 2019 19:22:00 +0000 (11:22 -0800)] 
Merge branch 'ja/doc-markup-cleanup'

Doc cleanup.

* ja/doc-markup-cleanup:
  doc: indent multi-line items in list
  doc: remove non pure ASCII characters

4 years agoMerge branch 'rs/ref-read-cleanup'
Junio C Hamano [Wed, 25 Dec 2019 19:22:00 +0000 (11:22 -0800)] 
Merge branch 'rs/ref-read-cleanup'

Code cleanup.

* rs/ref-read-cleanup:
  remote: pass NULL to read_ref_full() because object ID is not needed
  refs: pass NULL to refs_read_ref_full() because object ID is not needed

4 years agoMerge branch 'rb/p4-lfs'
Junio C Hamano [Wed, 25 Dec 2019 19:22:00 +0000 (11:22 -0800)] 
Merge branch 'rb/p4-lfs'

"git p4" used to ignore lfs.storage configuration variable, which
has been corrected.

* rb/p4-lfs:
  git-p4: honor lfs.storage configuration variable

4 years agoMerge branch 'pb/submodule-doc-xref'
Junio C Hamano [Wed, 25 Dec 2019 19:21:59 +0000 (11:21 -0800)] 
Merge branch 'pb/submodule-doc-xref'

Doc update.

* pb/submodule-doc-xref:
  gitmodules: link to gitsubmodules guide

4 years agoMerge branch 'mr/bisect-use-after-free'
Junio C Hamano [Wed, 25 Dec 2019 19:21:59 +0000 (11:21 -0800)] 
Merge branch 'mr/bisect-use-after-free'

Use-after-free fix.

* mr/bisect-use-after-free:
  bisect--helper: avoid use-after-free

4 years agoMerge branch 'ln/userdiff-elixir'
Junio C Hamano [Wed, 25 Dec 2019 19:21:59 +0000 (11:21 -0800)] 
Merge branch 'ln/userdiff-elixir'

Hotfix.

* ln/userdiff-elixir:
  userdiff: remove empty subexpression from elixir regex

4 years agoMerge branch 'ds/sparse-cone'
Junio C Hamano [Wed, 25 Dec 2019 19:21:58 +0000 (11:21 -0800)] 
Merge branch 'ds/sparse-cone'

Management of sparsely checked-out working tree has gained a
dedicated "sparse-checkout" command.

* ds/sparse-cone: (21 commits)
  sparse-checkout: improve OS ls compatibility
  sparse-checkout: respect core.ignoreCase in cone mode
  sparse-checkout: check for dirty status
  sparse-checkout: update working directory in-process for 'init'
  sparse-checkout: cone mode should not interact with .gitignore
  sparse-checkout: write using lockfile
  sparse-checkout: use in-process update for disable subcommand
  sparse-checkout: update working directory in-process
  sparse-checkout: sanitize for nested folders
  unpack-trees: add progress to clear_ce_flags()
  unpack-trees: hash less in cone mode
  sparse-checkout: init and set in cone mode
  sparse-checkout: use hashmaps for cone patterns
  sparse-checkout: add 'cone' mode
  trace2: add region in clear_ce_flags
  sparse-checkout: create 'disable' subcommand
  sparse-checkout: add '--stdin' option to set subcommand
  sparse-checkout: 'set' subcommand
  clone: add --sparse mode
  sparse-checkout: create 'init' subcommand
  ...

4 years agoMerge branch 'sg/name-rev-wo-recursion'
Junio C Hamano [Wed, 25 Dec 2019 19:21:58 +0000 (11:21 -0800)] 
Merge branch 'sg/name-rev-wo-recursion'

Redo "git name-rev" to avoid recursive calls.

* sg/name-rev-wo-recursion:
  name-rev: cleanup name_ref()
  name-rev: eliminate recursion in name_rev()
  name-rev: use 'name->tip_name' instead of 'tip_name'
  name-rev: drop name_rev()'s 'generation' and 'distance' parameters
  name-rev: restructure creating/updating 'struct rev_name' instances
  name-rev: restructure parsing commits and applying date cutoff
  name-rev: pull out deref handling from the recursion
  name-rev: extract creating/updating a 'struct name_rev' into a helper
  t6120: add a test to cover inner conditions in 'git name-rev's name_rev()
  name-rev: use sizeof(*ptr) instead of sizeof(type) in allocation
  name-rev: avoid unnecessary cast in name_ref()
  name-rev: use strbuf_strip_suffix() in get_rev_name()
  t6120-describe: modernize the 'check_describe' helper
  t6120-describe: correct test repo history graph in comment

4 years agoMerge branch 'ra/t5150-depends-on-perl'
Junio C Hamano [Wed, 25 Dec 2019 19:21:58 +0000 (11:21 -0800)] 
Merge branch 'ra/t5150-depends-on-perl'

Some Porcelain commands are written in Perl, and tests on them are
expected not to work when the platform lacks a working perl.

* ra/t5150-depends-on-perl:
  t5150: skip request-pull test if Perl is disabled

4 years agoMerge branch 'dl/format-patch-notes-config-fixup'
Junio C Hamano [Wed, 25 Dec 2019 19:21:58 +0000 (11:21 -0800)] 
Merge branch 'dl/format-patch-notes-config-fixup'

"git format-patch" can take a set of configured format.notes values
to specify which notes refs to use in the log message part of the
output.  The behaviour of this was not consistent with multiple
--notes command line options, which has been corrected.

* dl/format-patch-notes-config-fixup:
  notes.h: fix typos in comment
  notes: break set_display_notes() into smaller functions
  config/format.txt: clarify behavior of multiple format.notes
  format-patch: move git_config() before repo_init_revisions()
  format-patch: use --notes behavior for format.notes
  notes: extract logic into set_display_notes()
  notes: create init_display_notes() helper
  notes: rename to load_display_notes()

4 years agoMerge branch 'am/pathspec-f-f-checkout'
Junio C Hamano [Wed, 25 Dec 2019 19:21:57 +0000 (11:21 -0800)] 
Merge branch 'am/pathspec-f-f-checkout'

A few more commands learned the "--pathspec-from-file" command line
option.

* am/pathspec-f-f-checkout:
  checkout, restore: support the --pathspec-from-file option
  doc: restore: synchronize <pathspec> description
  doc: checkout: synchronize <pathspec> description
  doc: checkout: fix broken text reference
  doc: checkout: remove duplicate synopsis
  add: support the --pathspec-from-file option
  cmd_add: prepare for next patch

4 years agoMerge branch 'am/pathspec-from-file'
Junio C Hamano [Wed, 25 Dec 2019 19:21:57 +0000 (11:21 -0800)] 
Merge branch 'am/pathspec-from-file'

An earlier series to teach "--pathspec-from-file" to "git commit"
forgot to make the option incompatible with "--all", which has been
corrected.

* am/pathspec-from-file:
  commit: forbid --pathspec-from-file --all

4 years agomingw: refuse paths containing reserved names
Johannes Schindelin [Sat, 21 Dec 2019 22:05:01 +0000 (22:05 +0000)] 
mingw: refuse paths containing reserved names

There are a couple of reserved names that cannot be file names on
Windows, such as `AUX`, `NUL`, etc. For an almost complete list, see
https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file

If one would try to create a directory named `NUL`, it would actually
"succeed", i.e. the call would return success, but nothing would be
created.

Worse, even adding a file extension to the reserved name does not make
it a valid file name. To understand the rationale behind that behavior,
see https://devblogs.microsoft.com/oldnewthing/20031022-00/?p=42073

Let's just disallow them all.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agomingw: short-circuit the conversion of `/dev/null` to UTF-16
Johannes Schindelin [Sat, 21 Dec 2019 22:05:00 +0000 (22:05 +0000)] 
mingw: short-circuit the conversion of `/dev/null` to UTF-16

In the next commit, we want to disallow accessing any path that contains
any segment that is equivalent to `NUL`. In particular, we want to
disallow accessing `NUL` (e.g. to prevent any repository from being
checked out that contains a file called `NUL`, as that is not a valid
file name on Windows).

However, there are legitimate use cases within Git itself to write to
the Null device. As Git is really a Linux project, it does not abstract
that idea, though, but instead uses `/dev/null` to describe this
intention.

So let's side-step the validation _specifically_ in the case that we
want to write to (or read from) `/dev/null`, via a dedicated short-cut
in the code that skips the call to `validate_win32_path()`.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosparse-checkout: improve OS ls compatibility
Ed Maste [Fri, 20 Dec 2019 19:41:14 +0000 (19:41 +0000)] 
sparse-checkout: improve OS ls compatibility

On FreeBSD, when executed by root ls enables the '-A' option:

  -A  Include directory entries whose names begin with a dot (`.')
      except for . and ...  Automatically set for the super-user unless
      -I is specified.

As a result the .git directory appeared in the output when run as root.
Simulate no-dotfile ls behaviour using a shell glob.

Helped-by: Eric Wong <e@80x24.org>
Helped-by: Junio C Hamano <gitster@pobox.com>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Ed Maste <emaste@FreeBSD.org>
Acked-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoCI: add FreeBSD CI support via Cirrus-CI
Ed Maste [Fri, 20 Dec 2019 02:11:45 +0000 (02:11 +0000)] 
CI: add FreeBSD CI support via Cirrus-CI

Currently testing on FreeBSD 12.1.

Signed-off-by: Ed Maste <emaste@FreeBSD.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorebase: fix saving of --signoff state for am-based rebases
Elijah Newren [Fri, 20 Dec 2019 18:53:56 +0000 (18:53 +0000)] 
rebase: fix saving of --signoff state for am-based rebases

This was an error introduced in the conversion from shell in commit
21853626eac5 ("built-in rebase: call `git am` directly", 2019-01-18),
which was noticed by a random browsing of the code.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agodir.c: use st_add3() for allocation size
Junio C Hamano [Fri, 20 Dec 2019 17:55:53 +0000 (09:55 -0800)] 
dir.c: use st_add3() for allocation size

When preparing a manufactured dirent instance, we add a length of
path to the size of struct to decide how many bytes to allocate.
Make sure this addition does not wrap-around to cause us
underallocate.

Suggested-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agodir: consolidate similar code in treat_directory()
Elijah Newren [Thu, 19 Dec 2019 21:28:26 +0000 (21:28 +0000)] 
dir: consolidate similar code in treat_directory()

Both the DIR_SKIP_NESTED_GIT and DIR_NO_GITLINKS cases were checking for
whether a path was actually a nonbare repository.  That code could be
shared, with just the result of how to act differing between the two
cases.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agodir: synchronize treat_leading_path() and read_directory_recursive()
Elijah Newren [Thu, 19 Dec 2019 21:28:25 +0000 (21:28 +0000)] 
dir: synchronize treat_leading_path() and read_directory_recursive()

Our optimization to avoid calling into read_directory_recursive() when
all pathspecs have a common leading directory mean that we need to match
the logic that read_directory_recursive() would use if we had just
called it from the root.  Since it does more than call treat_path() we
need to copy that same logic.

Alternatively, we could try to change treat_path to return path_recurse
for an untracked directory under the given special circumstances that
this logic checks for, but a simple switch results in many test failures
such as 'git clean -d' not wiping out untracked but empty directories.
To work around that, we'd need the caller of treat_path to check for
path_recurse and sometimes special case it into path_untracked.  In
other words, we'd still have extra logic in both places.

Needing to duplicate logic like this means it is guaranteed someone will
eventually need to make further changes and forget to update both
locations.  It is tempting to just nuke the leading_directory special
casing to avoid such bugs and simplify the code, but unpack_trees'
verify_clean_subdirectory() also calls read_directory() and does so with
a non-empty leading path, so I'm hesitant to try to restructure further.
Add obnoxious warnings to treat_leading_path() and
read_directory_recursive() to try to warn people of such problems.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agodir: fix checks on common prefix directory
Elijah Newren [Thu, 19 Dec 2019 21:28:24 +0000 (21:28 +0000)] 
dir: fix checks on common prefix directory

Many years ago, the directory traversing logic had an optimization that
would always recurse into any directory that was a common prefix of all
the pathspecs without walking the leading directories to get down to
the desired directory.  Thus,
   git ls-files -o .git/                        # case A
would notice that .git/ was a common prefix of all pathspecs (since
it is the only pathspec listed), and then traverse into it and start
showing unknown files under that directory.  Unfortunately, .git/ is not
a directory we should be traversing into, which made this optimization
problematic.  This also affected cases like
   git ls-files -o --exclude-standard t/        # case B
where t/ was in the .gitignore file and thus isn't interesting and
shouldn't be recursed into.  It also affected cases like
   git ls-files -o --directory untracked_dir/   # case C
where untracked_dir/ is indeed untracked and thus interesting, but the
--directory flag means we only want to show the directory itself, not
recurse into it and start listing untracked files below it.

The case B class of bugs were noted and fixed in commits 16e2cfa90993
("read_directory(): further split treat_path()", 2010-01-08) and
48ffef966c76 ("ls-files: fix overeager pathspec optimization",
2010-01-08), with the idea being that we first wanted to check whether
the common prefix was interesting.  The former patch noted that
treat_path() couldn't be used when checking the common prefix because
treat_path() requires a dir_entry() and we haven't read any directories
at the point we are checking the common prefix.  So, that patch split
treat_one_path() out of treat_path().  The latter patch then created a
new treat_leading_path() which duplicated by hand the bits of
treat_path() that couldn't be broken out and then called
treat_one_path() for the remainder.  There were three problems with this
approach:

  * The duplicated logic in treat_leading_path() accidentally missed the
    check for special paths (such as is_dot_or_dotdot and matching
    ".git"), causing case A types of bugs to continue to be an issue.
  * The treat_leading_path() logic assumed we should traverse into
    anything where path_treatment was not path_none, i.e. it perpetuated
    class C types of bugs.
  * It meant we had split logic that needed to kept in sync, running the
    risk that people introduced new inconsistencies (such as in commit
    be8a84c52669, which we reverted earlier in this series, or in commit
    df5bcdf83ae which we'll fix in a subsequent commit)

Fix most these problems by making treat_leading_path() not only loop
over each leading path component, but calling treat_path() directly on
each.  To do so, we have to create a synthetic dir_entry, but that only
takes a few lines.  Then, pay attention to the path_treatment result we
get from treat_path() and don't treat path_excluded, path_untracked, and
path_recurse all the same as path_recurse.

This leaves one remaining problem, the new inconsistency from commit
df5bcdf83ae.  That will be addressed in a subsequent commit.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot4015: improve coverage of function context test
René Scharfe [Thu, 19 Dec 2019 17:35:43 +0000 (18:35 +0100)] 
t4015: improve coverage of function context test

Add a test that includes an actual function line in the test file to
check if context is expanded to include the whole function, and add an
ignored change before function context to check if that one stays hidden
while the originally ignored change within function context is shown.

This differs from the existing test, which is concerned with the case
where there is no function line at all in the file (and we might look
past the beginning of the file).

Helped-by: Jeff King <peff@peff.net>
Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocommit: forbid --pathspec-from-file --all
Alexandr Miloslavskiy [Mon, 16 Dec 2019 15:47:52 +0000 (15:47 +0000)] 
commit: forbid --pathspec-from-file --all

I forgot this in my previous patch `--pathspec-from-file` for
`git commit` [1]. When both `--pathspec-from-file` and `--all` were
specified, `--all` took precedence and `--pathspec-from-file` was
ignored. Before `--pathspec-from-file` was implemented, this case was
prevented by this check in `parse_and_validate_options()` :

    die(_("paths '%s ...' with -a does not make sense"), argv[0]);

It is unfortunate that these two cases are disconnected. This came as
result of how the code was laid out before my patches, where `pathspec`
is parsed outside of `parse_and_validate_options()`. This branch is
already full of refactoring patches and I did not dare to go for another
one.

Fix by mirroring `die()` for `--pathspec-from-file` as well.

[1] Commit e440fc58 ("commit: support the --pathspec-from-file option" 2019-11-19)

Reported-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Alexandr Miloslavskiy <alexandr.miloslavskiy@syntevo.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot3434: mark successful test as such
Elijah Newren [Fri, 13 Dec 2019 21:03:45 +0000 (21:03 +0000)] 
t3434: mark successful test as such

t3434.3 was fixed by commit 917d0d6234be ("Merge branch
'js/rebase-r-safer-label'", 2019-12-05).  t3434 did not exist in
js/rebase-r-safer-label, so could not have marked the test as fixed, and
it was probably not noticed that the merge fixed this test.  Mark it as
fixed now.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agonotes.h: fix typos in comment
Denton Liu [Wed, 18 Dec 2019 18:17:43 +0000 (10:17 -0800)] 
notes.h: fix typos in comment

In 1d7297513d (notes: break set_display_notes() into smaller functions,
2019-12-11), we introduced a comment which had a couple of typos. In the
first typo, we referenced 'enable_default_display_notes' instead of
'enable_ref_display_notes'. In the second typo, we wrote "is a points to"
instead of "is a pointer to". Correct both of these typos.

Reported-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Denton Liu <liu.denton@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot6030: don't create unused file
René Scharfe [Wed, 18 Dec 2019 18:12:12 +0000 (19:12 +0100)] 
t6030: don't create unused file

my_bisect_log3.txt was added by c9c4e2d5a2 (bisect: only check merge
bases when needed, 2008-08-22), but hasn't been used then and since.
Get rid of it.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot5580: don't create unused file
René Scharfe [Wed, 18 Dec 2019 18:12:05 +0000 (19:12 +0100)] 
t5580: don't create unused file

The file "out" was introduced by 13b57da833 (mingw: verify that paths
are not mistaken for remote nicknames, 2017-05-29), but has not actually
been used then and since.  Get rid of it.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot3501: don't create unused file
René Scharfe [Wed, 18 Dec 2019 18:12:00 +0000 (19:12 +0100)] 
t3501: don't create unused file

The file "out" became unused with fd53b7ffd1 (merge-recursive: improve
add_cacheinfo error handling, 2018-04-19); get rid of it.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobisect--helper: convert `*_warning` char pointers to char arrays.
Tanushree Tumane [Sat, 14 Dec 2019 08:11:24 +0000 (09:11 +0100)] 
bisect--helper: convert `*_warning` char pointers to char arrays.

Instead of using a pointer that points at a constant string,
just give name directly to the constant string; this way, we
do not have to allocate a pointer variable in addition to
the string we want to use.

Let's convert `need_bad_and_good_revision_warning` and
`need_bisect_start_warning` char pointers to char arrays.

Mentored-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Tanushree Tumane <tanushreetumane@gmail.com>
Signed-off-by: Miriam Rubio <mirucam@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoThe sixth batch
Junio C Hamano [Mon, 16 Dec 2019 21:07:19 +0000 (13:07 -0800)] 
The sixth batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'rs/patch-id-use-oid-to-hex'
Junio C Hamano [Mon, 16 Dec 2019 21:14:48 +0000 (13:14 -0800)] 
Merge branch 'rs/patch-id-use-oid-to-hex'

Code cleanup.

* rs/patch-id-use-oid-to-hex:
  patch-id: use oid_to_hex() to print multiple object IDs

4 years agoMerge branch 'rs/commit-export-env-simplify'
Junio C Hamano [Mon, 16 Dec 2019 21:14:47 +0000 (13:14 -0800)] 
Merge branch 'rs/commit-export-env-simplify'

Code cleanup.

* rs/commit-export-env-simplify:
  commit: use strbuf_add() to add a length-limited string

4 years agoMerge branch 'rs/archive-zip-code-cleanup'
Junio C Hamano [Mon, 16 Dec 2019 21:14:47 +0000 (13:14 -0800)] 
Merge branch 'rs/archive-zip-code-cleanup'

Code cleanup.

* rs/archive-zip-code-cleanup:
  archive-zip: use enum for compression method

4 years agoMerge branch 'js/t3404-indent-fix'
Junio C Hamano [Mon, 16 Dec 2019 21:14:47 +0000 (13:14 -0800)] 
Merge branch 'js/t3404-indent-fix'

Test cleanup.

* js/t3404-indent-fix:
  t3404: fix indentation

4 years agoMerge branch 'dr/branch-usage-casefix'
Junio C Hamano [Mon, 16 Dec 2019 21:14:46 +0000 (13:14 -0800)] 
Merge branch 'dr/branch-usage-casefix'

Message fix.

* dr/branch-usage-casefix:
  l10n: minor case fix in 'git branch' '--unset-upstream' description

4 years agoMerge branch 'sg/t9300-robustify'
Junio C Hamano [Mon, 16 Dec 2019 21:08:47 +0000 (13:08 -0800)] 
Merge branch 'sg/t9300-robustify'

The test on "fast-import" used to get stuck when "fast-import" died
in the middle.

* sg/t9300-robustify:
  t9300-fast-import: don't hang if background fast-import exits too early
  t9300-fast-import: store the PID in a variable instead of pidfile

4 years agoMerge branch 'js/add-i-a-bit-more-tests'
Junio C Hamano [Mon, 16 Dec 2019 21:08:47 +0000 (13:08 -0800)] 
Merge branch 'js/add-i-a-bit-more-tests'

Test coverage update in preparation for further work on "git add -i".

* js/add-i-a-bit-more-tests:
  apply --allow-overlap: fix a corner case
  git add -p: use non-zero exit code when the diff generation failed
  t3701: verify that the diff.algorithm config setting is handled
  t3701: verify the shown messages when nothing can be added
  t3701: add a test for the different `add -p` prompts
  t3701: avoid depending on the TTY prerequisite
  t3701: add a test for advanced split-hunk editing

4 years agoMerge branch 'dl/range-diff-with-notes'
Junio C Hamano [Mon, 16 Dec 2019 21:08:46 +0000 (13:08 -0800)] 
Merge branch 'dl/range-diff-with-notes'

Code clean-up.

* dl/range-diff-with-notes:
  range-diff: clear `other_arg` at end of function
  range-diff: mark pointers as const
  t3206: fix incorrect test name

4 years agoMerge branch 'hw/doc-in-header'
Junio C Hamano [Mon, 16 Dec 2019 21:08:39 +0000 (13:08 -0800)] 
Merge branch 'hw/doc-in-header'

* hw/doc-in-header:
  trace2: move doc to trace2.h
  submodule-config: move doc to submodule-config.h
  tree-walk: move doc to tree-walk.h
  trace: move doc to trace.h
  run-command: move doc to run-command.h
  parse-options: add link to doc file in parse-options.h
  credential: move doc to credential.h
  argv-array: move doc to argv-array.h
  cache: move doc to cache.h
  sigchain: move doc to sigchain.h
  pathspec: move doc to pathspec.h
  revision: move doc to revision.h
  attr: move doc to attr.h
  refs: move doc to refs.h
  remote: move doc to remote.h and refspec.h
  sha1-array: move doc to sha1-array.h
  merge: move doc to ll-merge.h
  graph: move doc to graph.h and graph.c
  dir: move doc to dir.h
  diff: move doc to diff.h and diffcore.h

4 years agoMerge branch 'rs/xdiff-ignore-ws-w-func-context'
Junio C Hamano [Mon, 16 Dec 2019 21:08:32 +0000 (13:08 -0800)] 
Merge branch 'rs/xdiff-ignore-ws-w-func-context'

The "diff" machinery learned not to lose added/removed blank lines
in the context when --ignore-blank-lines and --function-context are
used at the same time.

* rs/xdiff-ignore-ws-w-func-context:
  xdiff: unignore changes in function context

4 years agoMerge branch 'dl/rebase-with-autobase'
Junio C Hamano [Mon, 16 Dec 2019 21:08:32 +0000 (13:08 -0800)] 
Merge branch 'dl/rebase-with-autobase'

"git rebase" did not work well when format.useAutoBase
configuration variable is set, which has been corrected.

* dl/rebase-with-autobase:
  rebase: fix format.useAutoBase breakage
  format-patch: teach --no-base
  t4014: use test_config()
  format-patch: fix indentation
  t3400: demonstrate failure with format.useAutoBase

4 years agoMerge branch 'dl/test-cleanup'
Junio C Hamano [Mon, 16 Dec 2019 21:08:32 +0000 (13:08 -0800)] 
Merge branch 'dl/test-cleanup'

Test cleanup.

* dl/test-cleanup: (26 commits)
  t7700: stop losing return codes of git commands
  t7700: make references to SHA-1 generic
  t7700: replace egrep with grep
  t7700: consolidate code into test_has_duplicate_object()
  t7700: consolidate code into test_no_missing_in_packs()
  t7700: s/test -f/test_path_is_file/
  t7700: move keywords onto their own line
  t7700: remove spaces after redirect operators
  t7700: drop redirections to /dev/null
  t7501: stop losing return codes of git commands
  t7501: remove spaces after redirect operators
  t5703: stop losing return codes of git commands
  t5703: simplify one-time-sed generation logic
  t5317: use ! grep to check for no matching lines
  t5317: stop losing return codes of git commands
  t4138: stop losing return codes of git commands
  t4015: use test_write_lines()
  t4015: stop losing return codes of git commands
  t3600: comment on inducing SIGPIPE in `git rm`
  t3600: stop losing return codes of git commands
  ...

4 years agoMerge branch 'cs/store-packfiles-in-hashmap'
Junio C Hamano [Mon, 16 Dec 2019 21:08:31 +0000 (13:08 -0800)] 
Merge branch 'cs/store-packfiles-in-hashmap'

In a repository with many packfiles, the cost of the procedure that
avoids registering the same packfile twice was unnecessarily high
by using an inefficient search algorithm, which has been corrected.

* cs/store-packfiles-in-hashmap:
  packfile.c: speed up loading lots of packfiles

4 years agoMerge branch 'js/builtin-add-i-cmds'
Junio C Hamano [Mon, 16 Dec 2019 21:08:31 +0000 (13:08 -0800)] 
Merge branch 'js/builtin-add-i-cmds'

"git add -i" that is getting rewritten in C has been extended to
cover subcommands other than the "patch".

* js/builtin-add-i-cmds:
  built-in add -i: offer the `quit` command
  built-in add -i: re-implement the `diff` command
  built-in add -i: implement the `patch` command
  built-in add -i: re-implement `add-untracked` in C
  built-in add -i: re-implement `revert` in C
  built-in add -i: implement the `update` command
  built-in add -i: prepare for multi-selection commands
  built-in add -i: allow filtering the modified files list
  add-interactive: make sure to release `rev.prune_data`

4 years agoMerge branch 'dd/time-reentrancy'
Junio C Hamano [Mon, 16 Dec 2019 21:08:31 +0000 (13:08 -0800)] 
Merge branch 'dd/time-reentrancy'

Avoid gmtime() and localtime() and prefer their reentrant
counterparts.

* dd/time-reentrancy:
  mingw: use {gm,local}time_s as backend for {gm,local}time_r
  archive-zip.c: switch to reentrant localtime_r
  date.c: switch to reentrant {gm,local}time_r

4 years agoMerge branch 'ag/sequencer-todo-updates'
Junio C Hamano [Mon, 16 Dec 2019 21:08:31 +0000 (13:08 -0800)] 
Merge branch 'ag/sequencer-todo-updates'

Reduce unnecessary reading of state variables back from the disk
during sequencer operation.

* ag/sequencer-todo-updates:
  sequencer: directly call pick_commits() from complete_action()
  rebase: fill `squash_onto' in get_replay_opts()
  sequencer: move the code writing total_nr on the disk to a new function
  sequencer: update `done_nr' when skipping commands in a todo list
  sequencer: update `total_nr' when adding an item to a todo list

4 years agogit-p4: show detailed help when parsing options fail
Ben Keene [Mon, 16 Dec 2019 14:02:20 +0000 (14:02 +0000)] 
git-p4: show detailed help when parsing options fail

When a user provides invalid parameters to git-p4, the program
reports the failure but does not provide the correct command syntax.

Add an exception handler to the command-line argument parser to display
the command's specific command line parameter syntax when an exception
is thrown. Rethrow the exception so the current behavior is retained.

Signed-off-by: Ben Keene <seraphire@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agogit-p4: yes/no prompts should sanitize user text
Ben Keene [Mon, 16 Dec 2019 14:02:19 +0000 (14:02 +0000)] 
git-p4: yes/no prompts should sanitize user text

When prompting the user interactively for direction, the tests are
not forgiving of user input format.

For example, the first query asks for a yes/no response. If the user
enters the full word "yes" or "no" or enters a capital "Y" the test
will fail.

Create a new function, prompt(prompt_text) where
  * prompt_text is the text prompt for the user
  * returns a single character where valid return values are
      found by inspecting prompt_text for single characters
      surrounded by square brackets

This new function must  prompt the user for input and sanitize it by
converting the response to a lower case string, trimming leading and
trailing spaces, and checking if the first character is in the list
of choices. If it is, return the first letter.

Change the current references to raw_input() to use this new function.

Since the method requires the returned text to be one of the available
choices, remove the loop from the calling code that handles response
verification.

Thanks-to: Denton Liu <liu.denton@gmail.com>
Signed-off-by: Ben Keene <seraphire@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agofix-typo: consecutive-word duplications
ryenus [Sun, 15 Dec 2019 15:12:24 +0000 (15:12 +0000)] 
fix-typo: consecutive-word duplications

Correct unintentional duplication(s) of words, such as "the the",
and "can can" etc.

The changes are only applied to cases where it's fixing what is clearly
wrong or prone to misunderstanding, as suggested by the reviewers.

Helped-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Helped-by: Denton Liu <liu.denton@gmail.com>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: ryenus <ryenus@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMakefile: drop GEN_HDRS
Junio C Hamano [Fri, 13 Dec 2019 23:15:34 +0000 (15:15 -0800)] 
Makefile: drop GEN_HDRS

When ebb7baf0 ("Makefile: add a hdr-check target", 2018-09-19)
implemented hdr-check target, it wanted to leave some header files
exempt from the stricter check the target implements, and added
GEN_HDRS macro.

This however is probably a bad move for two reasons:

 - If we value the header cleanliness check, we eventually want to
   teach our header generating scripts to produce clean headers.
   Keeping the blanket "generated headers can be left as dirty as we
   want" exception does not nudge us in the right direction.

 - There is a list of generated header files, GENERATED_H, which is
   used to keep track of dependencies.  Presence of GEN_HDRS that is
   too similarly named would confuse developers who are adding new
   generated header files which list to add theirs.

 - Even though unicode-width.h could be generated using a contrib/
   script, as far as our build infrastructure is concerned, it is a
   source file that is tracked in the source control system.  Its
   presence in GEN_HDRS list is doubly misleading.

Get rid of GEN_HDRS, which is used only once to list the headers we
do not run hdr-check test on, and instead explicitly list that the
ones, either tracked or generated, that we exempt from the test.

This allows GENERATED_H to be the sole "here are build artifact
header files that are expendable" list, so use it in the clean
target to $(RM) them.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobuilt-in add -p: show helpful hint when nothing can be staged
Johannes Schindelin [Fri, 13 Dec 2019 08:08:06 +0000 (08:08 +0000)] 
built-in add -p: show helpful hint when nothing can be staged

This patch will make `git add -p` show "No changes." or "Only binary
files changed." in that case.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobuilt-in add -p: only show the applicable parts of the help text
Johannes Schindelin [Fri, 13 Dec 2019 08:08:05 +0000 (08:08 +0000)] 
built-in add -p: only show the applicable parts of the help text

When displaying the only hunk in a file's diff, the prompt already
excludes the commands to navigate to the previous/next hunk.

Let's also let the `?` command show only the help lines corresponding to
the commands that are displayed in the prompt.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobuilt-in add -p: implement the 'q' ("quit") command
Johannes Schindelin [Fri, 13 Dec 2019 08:08:04 +0000 (08:08 +0000)] 
built-in add -p: implement the 'q' ("quit") command

This command is actually very similar to the 'd' ("do not stage this
hunk or any of the later hunks in the file") command: it just does
something on top, namely leave the loop and return a value indicating
that we're quittin'.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobuilt-in add -p: implement the '/' ("search regex") command
Johannes Schindelin [Fri, 13 Dec 2019 08:08:03 +0000 (08:08 +0000)] 
built-in add -p: implement the '/' ("search regex") command

This patch implements the hunk searching feature in the C version of
`git add -p`.

A test is added to verify that this behavior matches the one of the Perl
version of `git add -p`.

Note that this involves a change of behavior: the Perl version uses (of
course) the Perl flavor of regular expressions, while this patch uses
the regcomp()/regexec(), i.e. POSIX extended regular expressions. In
practice, this behavior change is unlikely to matter.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobuilt-in add -p: implement the 'g' ("goto") command
Johannes Schindelin [Fri, 13 Dec 2019 08:08:02 +0000 (08:08 +0000)] 
built-in add -p: implement the 'g' ("goto") command

With this patch, it is now possible to see a summary of the available
hunks and to navigate between them (by number).

A test is added to verify that this behavior matches the one of the Perl
version of `git add -p`.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobuilt-in add -p: implement hunk editing
Johannes Schindelin [Fri, 13 Dec 2019 08:08:01 +0000 (08:08 +0000)] 
built-in add -p: implement hunk editing

Just like `git add --edit` allows the user to edit the diff before it is
being applied to the index, this feature allows the user to edit the
diff *hunk*.

Naturally, it gets a bit more complicated here because the result has
to play well with the remaining hunks of the overall diff. Therefore,
we have to do a loop in which we let the user edit the hunk, then test
whether the result would work, and if not, drop the edits and let the
user decide whether to try editing the hunk again.

Note: in contrast to the Perl version, we use the same diff
"coalescing" (i.e. merging overlapping hunks into a single one) also for
the check after editing, and we introduce a new flag for that purpose
that asks the `reassemble_patch()` function to pretend that all hunks
were selected for use.

This allows us to continue to run `git apply` *without* the
`--allow-overlap` option (unlike the Perl version), and it also fixes
two known breakages in `t3701-add-interactive.sh` (which we cannot mark
as resolved so far because the Perl script version is still the default
and continues to have those breakages).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agostrbuf: add a helper function to call the editor "on an strbuf"
Johannes Schindelin [Fri, 13 Dec 2019 08:08:00 +0000 (08:08 +0000)] 
strbuf: add a helper function to call the editor "on an strbuf"

This helper supports the scenario where Git has a populated `strbuf` and
wants to let the user edit it interactively.

In `git add -p`, we will use this to allow interactive hunk editing: the
diff hunks are already in memory, but we need to write them out to a
file so that an editor can be launched, then read everything back once
the user is done editing.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobuilt-in add -p: coalesce hunks after splitting them
Johannes Schindelin [Fri, 13 Dec 2019 08:07:59 +0000 (08:07 +0000)] 
built-in add -p: coalesce hunks after splitting them

This is considered "the right thing to do", according to 933e44d3a0
("add -p": work-around an old laziness that does not coalesce hunks,
2011-04-06).

Note: we cannot simply modify the hunks while merging them; Once we
implement hunk editing, we will call `reassemble_patch()` whenever a
hunk is edited, therefore we must not modify the hunks (because the user
might e.g. hit `K` and change their mind whether to stage the previous
hunk).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobuilt-in add -p: implement the hunk splitting feature
Johannes Schindelin [Fri, 13 Dec 2019 08:07:58 +0000 (08:07 +0000)] 
built-in add -p: implement the hunk splitting feature

If this developer's workflow is any indication, then this is *the* most
useful feature of Git's interactive `add `command.

Note: once again, this is not a verbatim conversion from the Perl code
to C: the `hunk_splittable()` function, for example, essentially did all
the work of splitting the hunk, just to find out whether more than one
hunk would have been the result (and then tossed that result into the
trash). In C we instead count the number of resulting hunks (without
actually doing the work of splitting, but just counting the transitions
from non-context lines to context lines), and store that information
with the hunk, and we do that *while* parsing the diff in the first
place.

Another deviation: the built-in `git add -p` was designed with a single
strbuf holding the diff (and another one holding the colored diff, if
that one was asked for) in mind, and hunks essentially store just the
start and end offsets pointing into that strbuf. As a consequence, when
we split hunks, we now use a special mode where the hunk header is
generated dynamically, and only the rest of the hunk is stored using
such start/end offsets. This way, we also avoid the frequent
formatting/re-parsing of the hunk header of the Perl version.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobuilt-in add -p: show different prompts for mode changes and deletions
Johannes Schindelin [Fri, 13 Dec 2019 08:07:57 +0000 (08:07 +0000)] 
built-in add -p: show different prompts for mode changes and deletions

Just like the Perl version, we now helpfully ask the user whether they
want to stage a mode change, or a deletion.

Note that we define the prompts in an array, in preparation for a later
patch that changes those prompts to yet different versions for `git
reset -p`, `git stash -p` and `git checkout -p` (which all call the `git
add -p` machinery to do the actual work).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobuilt-in app -p: allow selecting a mode change as a "hunk"
Johannes Schindelin [Fri, 13 Dec 2019 08:07:56 +0000 (08:07 +0000)] 
built-in app -p: allow selecting a mode change as a "hunk"

This imitates the way the Perl version treats mode changes: it offers
the mode change up for the user to decide, as if it was a diff hunk.

In contrast to the Perl version, we make use of the fact that the mode
line is the first hunk, and explicitly strip out that line from the diff
header if that "hunk" was not selected to be applied, and skipping that
hunk while coalescing the diff. The Perl version plays some kind of diff
line lego instead.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobuilt-in add -p: handle deleted empty files
Johannes Schindelin [Fri, 13 Dec 2019 08:07:55 +0000 (08:07 +0000)] 
built-in add -p: handle deleted empty files

This addresses the same problem as 24ab81ae4d (add-interactive: handle
deletion of empty files, 2009-10-27), although in a different way: we
not only stick the "deleted file" line into its own pseudo hunk, but
also the entire remainder (if any) of the same diff.

That way, we do not have to play any funny games with regards to
coalescing the diff after the user selected what (possibly pseudo-)hunks
to stage.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobuilt-in add -p: support multi-file diffs
Johannes Schindelin [Fri, 13 Dec 2019 08:07:54 +0000 (08:07 +0000)] 
built-in add -p: support multi-file diffs

For simplicity, the initial implementation in C handled only a single
modified file. Now it handles an arbitrary number of files.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobuilt-in add -p: offer a helpful error message when hunk navigation failed
Johannes Schindelin [Fri, 13 Dec 2019 08:07:53 +0000 (08:07 +0000)] 
built-in add -p: offer a helpful error message when hunk navigation failed

... just like the Perl version currently does...

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobuilt-in add -p: color the prompt and the help text
Johannes Schindelin [Fri, 13 Dec 2019 08:07:52 +0000 (08:07 +0000)] 
built-in add -p: color the prompt and the help text

... just like the Perl version ;-)

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobuilt-in add -p: adjust hunk headers as needed
Johannes Schindelin [Fri, 13 Dec 2019 08:07:51 +0000 (08:07 +0000)] 
built-in add -p: adjust hunk headers as needed

When skipping a hunk that adds a different number of lines than it
removes, we need to adjust the subsequent hunk headers of non-skipped
hunks: in pathological cases, the context is not enough to determine
precisely where the patch should be applied.

This problem was identified in 23fea4c240 (t3701: add failing test for
pathological context lines, 2018-03-01) and fixed in the Perl version in
fecc6f3a68 (add -p: adjust offsets of subsequent hunks when one is
skipped, 2018-03-01).

And this patch fixes it in the C version of `git add -p`.

In contrast to the Perl version, we try to keep the extra text on the
hunk header (which typically contains the signature of the function
whose code is changed in the hunk) intact.

Note: while the C version does not support staging mode changes at this
stage, we already prepare for this by simply skipping the hunk header if
both old and new offset is 0 (this cannot happen for regular hunks, and
we will use this as an indicator that we are looking at a special hunk).

Likewise, we already prepare for hunk splitting by handling the absence
of extra text in the hunk header gracefully: only the first split hunk
will have that text, the others will not (indicated by an empty extra
text start/end range). Preparing for hunk splitting already at this
stage avoids an indentation change of the entire hunk header-printing
block later, and is almost as easy to review as without that handling.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>