Skip to content

Commit d5f2450

Browse files
Merge pull request #95 Rebase to v2.20.1
This is the relatively straight-forward outcome of `git rebase -i --rebase-merges=rebase-cousins v2.20.1.windows.1`
2 parents 7c9fbc0 + 45523ec commit d5f2450

106 files changed

Lines changed: 7961 additions & 88 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Documentation/config/core.txt

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,14 @@ core.fsmonitor::
6868
avoiding unnecessary processing of files that have not changed.
6969
See the "fsmonitor-watchman" section of linkgit:githooks[5].
7070

71+
core.virtualFilesystem::
72+
If set, the value of this variable is used as a command which
73+
will identify all files and directories that are present in
74+
the working directory. Git will only track and update files
75+
listed in the virtual file system. Using the virtual file system
76+
will supersede the sparse-checkout settings which will be ignored.
77+
See the "virtual file system" section of linkgit:githooks[6].
78+
7179
core.trustctime::
7280
If false, the ctime differences between the index and the
7381
working tree are ignored; useful when the inode change time
@@ -600,6 +608,48 @@ core.multiPackIndex::
600608
single index. See link:technical/multi-pack-index.html[the
601609
multi-pack-index design document].
602610

611+
core.gvfs::
612+
Enable the features needed for GVFS. This value can be set to true
613+
to indicate all features should be turned on or the bit values listed
614+
below can be used to turn on specific features.
615+
+
616+
--
617+
GVFS_SKIP_SHA_ON_INDEX::
618+
Bit value 1
619+
Disables the calculation of the sha when writing the index
620+
GVFS_MISSING_OK::
621+
Bit value 4
622+
Normally git write-tree ensures that the objects referenced by the
623+
directory exist in the object database. This option disables this check.
624+
GVFS_NO_DELETE_OUTSIDE_SPARSECHECKOUT::
625+
Bit value 8
626+
When marking entries to remove from the index and the working
627+
directory this option will take into account what the
628+
skip-worktree bit was set to so that if the entry has the
629+
skip-worktree bit set it will not be removed from the working
630+
directory. This will allow virtualized working directories to
631+
detect the change to HEAD and use the new commit tree to show
632+
the files that are in the working directory.
633+
GVFS_FETCH_SKIP_REACHABILITY_AND_UPLOADPACK::
634+
Bit value 16
635+
While performing a fetch with a virtual file system we know
636+
that there will be missing objects and we don't want to download
637+
them just because of the reachability of the commits. We also
638+
don't want to download a pack file with commits, trees, and blobs
639+
since these will be downloaded on demand. This flag will skip the
640+
checks on the reachability of objects during a fetch as well as
641+
the upload pack so that extraneous objects don't get downloaded.
642+
GVFS_BLOCK_FILTERS_AND_EOL_CONVERSIONS::
643+
Bit value 64
644+
With a virtual file system we only know the file size before any
645+
CRLF or smudge/clean filters processing is done on the client.
646+
To prevent file corruption due to truncation or expansion with
647+
garbage at the end, these filters must not run when the file
648+
is first accessed and brought down to the client. Git.exe can't
649+
currently tell the first access vs subsequent accesses so this
650+
flag just blocks them from occurring at all.
651+
--
652+
603653
core.sparseCheckout::
604654
Enable "sparse checkout" feature. See section "Sparse checkout" in
605655
linkgit:git-read-tree[1] for more information.

Documentation/config/status.txt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ status.branch::
1212
Set to true to enable --branch by default in linkgit:git-status[1].
1313
The option --no-branch takes precedence over this variable.
1414

15+
status.aheadBehind::
16+
EXPERIMENTAL, Set to true to enable --ahead-behind and false to
17+
enable --no-ahead-behind by default in linkgit:git-status[1] for
18+
non-porcelain status formats. Defaults to true.
19+
1520
status.displayCommentPrefix::
1621
If set to true, linkgit:git-status[1] will insert a comment
1722
prefix before each output line (starting with
@@ -70,3 +75,25 @@ status.submoduleSummary::
7075
the --ignore-submodules=dirty command-line option or the 'git
7176
submodule summary' command, which shows a similar output but does
7277
not honor these settings.
78+
79+
status.deserializePath::
80+
EXPERIMENTAL, Pathname to a file containing cached status results
81+
generated by `--serialize`. This will be overridden by
82+
`--deserialize=<path>` on the command line. If the cache file is
83+
invalid or stale, git will fall-back and compute status normally.
84+
85+
status.deserializeWait::
86+
EXPERIMENTAL, Specifies what `git status --deserialize` should do
87+
if the serialization cache file is stale and whether it should
88+
fall-back and compute status normally. This will be overridden by
89+
`--deserialize-wait=<value>` on the command line.
90+
+
91+
--
92+
* `fail` - cause git to exit with an error when the status cache file
93+
is stale; this is intended for testing and debugging.
94+
* `block` - cause git to spin and periodically retry the cache file
95+
every 100 ms; this is intended to help coordinate with another git
96+
instance concurrently computing the cache file.
97+
* `no` - to immediately fall-back if cache file is stale. This is the default.
98+
* `<timeout>` - time (in tenths of a second) to spin and retry.
99+
--

Documentation/fetch-options.txt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,19 @@ endif::git-pull[]
220220
When multiple `--server-option=<option>` are given, they are all
221221
sent to the other side in the order listed on the command line.
222222

223+
--show-forced-updates::
224+
By default, git checks if a branch is force-updated during
225+
fetch. This can be disabled through fetch.showForcedUpdates, but
226+
the --show-forced-updates option guarantees this check occurs.
227+
See linkgit:git-config[1].
228+
229+
--no-show-forced-updates::
230+
By default, git checks if a branch is force-updated during
231+
fetch. Pass --no-show-forced-updates or set fetch.showForcedUpdates
232+
to false to skip this check for performance reasons. If used during
233+
'git-pull' the --ff-only option will still check for forced updates
234+
before attempting a fast-forward update. See linkgit:git-config[1].
235+
223236
-4::
224237
--ipv4::
225238
Use IPv4 addresses only, ignoring IPv6 addresses.

Documentation/git-status.txt

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,21 @@ ignored, then the directory is not shown, but all contents are shown.
152152
update it afterwards if any changes were detected. Defaults to
153153
`--lock-index`.
154154

155+
--serialize[=<path>]::
156+
(EXPERIMENTAL) Serialize raw status results to a file or stdout
157+
in a format suitable for use by `--deserialize`. If a path is
158+
given, serialize data will be written to that path *and* normal
159+
status output will be written to stdout. If path is omitted,
160+
only binary serialization data will be written to stdout.
161+
162+
--deserialize[=<path>]::
163+
(EXPERIMENTAL) Deserialize raw status results from a file or
164+
stdin rather than scanning the worktree. If `<path>` is omitted
165+
and `status.deserializePath` is unset, input is read from stdin.
166+
--no-deserialize::
167+
(EXPERIMENTAL) Disable implicit deserialization of status results
168+
from the value of `status.deserializePath`.
169+
155170
<pathspec>...::
156171
See the 'pathspec' entry in linkgit:gitglossary[7].
157172

@@ -389,6 +404,26 @@ quoted as explained for the configuration variable `core.quotePath`
389404
(see linkgit:git-config[1]).
390405

391406

407+
SERIALIZATION and DESERIALIZATION (EXPERIMENTAL)
408+
------------------------------------------------
409+
410+
The `--serialize` option allows git to cache the result of a
411+
possibly time-consuming status scan to a binary file. A local
412+
service/daemon watching file system events could use this to
413+
periodically pre-compute a fresh status result.
414+
415+
Interactive users could then use `--deserialize` to simply
416+
(and immediately) print the last-known-good result without
417+
waiting for the status scan.
418+
419+
The binary serialization file format includes some worktree state
420+
information allowing `--deserialize` to reject the cached data
421+
and force a normal status scan if, for example, the commit, branch,
422+
or status modes/options change. The format cannot, however, indicate
423+
when the cached data is otherwise stale -- that coordination belongs
424+
to the task driving the serializations.
425+
426+
392427
CONFIGURATION
393428
-------------
394429

Documentation/githooks.txt

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -492,6 +492,44 @@ This hook is invoked by `git-p4 submit`. It takes no parameters and nothing
492492
from standard input. Exiting with non-zero status from this script prevent
493493
`git-p4 submit` from launching. Run `git-p4 submit --help` for details.
494494

495+
virtualFilesystem
496+
~~~~~~~~~~~~~~~~~~
497+
498+
"Virtual File System" allows populating the working directory sparsely.
499+
The projection data is typically automatically generated by an external
500+
process. Git will limit what files it checks for changes as well as which
501+
directories are checked for untracked files based on the path names given.
502+
Git will also only update those files listed in the projection.
503+
504+
The hook is invoked when the configuration option core.virtualFilesystem
505+
is set. It takes one argument, a version (currently 1).
506+
507+
The hook should output to stdout the list of all files in the working
508+
directory that git should track. The paths are relative to the root
509+
of the working directory and are separated by a single NUL. Full paths
510+
('dir1/a.txt') as well as directories are supported (ie 'dir1/').
511+
512+
The exit status determines whether git will use the data from the
513+
hook. On error, git will abort the command with an error message.
514+
515+
post-indexchanged
516+
~~~~~~~~~~~~~~~~~
517+
518+
This hook is invoked when the index is written in read-cache.c
519+
do_write_locked_index.
520+
521+
The first parameter passed to the hook is the indicator for the
522+
working directory being updated. "1" meaning working directory
523+
was updated or "0" when the working directory was not updated.
524+
525+
The second parameter passed to the hook is the indicator for whether
526+
or not the index was updated and the skip-worktree bit could have
527+
changed. "1" meaning skip-worktree bits could have been updated
528+
and "0" meaning they were not.
529+
530+
Only one parameter should be set to "1" when the hook runs. The hook
531+
running passing "1", "1" should not be possible.
532+
495533
GIT
496534
---
497535
Part of the linkgit:git[1] suite
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
Read Object Process
2+
^^^^^^^^^^^^^^^^^^^^^^^^^^^
3+
4+
The read-object process enables Git to read all missing blobs with a
5+
single process invocation for the entire life of a single Git command.
6+
This is achieved by using a packet format (pkt-line, see technical/
7+
protocol-common.txt) based protocol over standard input and standard
8+
output as follows. All packets, except for the "*CONTENT" packets and
9+
the "0000" flush packet, are considered text and therefore are
10+
terminated by a LF.
11+
12+
Git starts the process when it encounters the first missing object that
13+
needs to be retrieved. After the process is started, Git sends a welcome
14+
message ("git-read-object-client"), a list of supported protocol version
15+
numbers, and a flush packet. Git expects to read a welcome response
16+
message ("git-read-object-server"), exactly one protocol version number
17+
from the previously sent list, and a flush packet. All further
18+
communication will be based on the selected version.
19+
20+
The remaining protocol description below documents "version=1". Please
21+
note that "version=42" in the example below does not exist and is only
22+
there to illustrate how the protocol would look with more than one
23+
version.
24+
25+
After the version negotiation Git sends a list of all capabilities that
26+
it supports and a flush packet. Git expects to read a list of desired
27+
capabilities, which must be a subset of the supported capabilities list,
28+
and a flush packet as response:
29+
------------------------
30+
packet: git> git-read-object-client
31+
packet: git> version=1
32+
packet: git> version=42
33+
packet: git> 0000
34+
packet: git< git-read-object-server
35+
packet: git< version=1
36+
packet: git< 0000
37+
packet: git> capability=get
38+
packet: git> capability=have
39+
packet: git> capability=put
40+
packet: git> capability=not-yet-invented
41+
packet: git> 0000
42+
packet: git< capability=get
43+
packet: git< 0000
44+
------------------------
45+
The only supported capability in version 1 is "get".
46+
47+
Afterwards Git sends a list of "key=value" pairs terminated with a flush
48+
packet. The list will contain at least the command (based on the
49+
supported capabilities) and the sha1 of the object to retrieve. Please
50+
note, that the process must not send any response before it received the
51+
final flush packet.
52+
53+
When the process receives the "get" command, it should make the requested
54+
object available in the git object store and then return success. Git will
55+
then check the object store again and this time find it and proceed.
56+
------------------------
57+
packet: git> command=get
58+
packet: git> sha1=0a214a649e1b3d5011e14a3dc227753f2bd2be05
59+
packet: git> 0000
60+
------------------------
61+
62+
The process is expected to respond with a list of "key=value" pairs
63+
terminated with a flush packet. If the process does not experience
64+
problems then the list must contain a "success" status.
65+
------------------------
66+
packet: git< status=success
67+
packet: git< 0000
68+
------------------------
69+
70+
In case the process cannot or does not want to process the content, it
71+
is expected to respond with an "error" status.
72+
------------------------
73+
packet: git< status=error
74+
packet: git< 0000
75+
------------------------
76+
77+
In case the process cannot or does not want to process the content as
78+
well as any future content for the lifetime of the Git process, then it
79+
is expected to respond with an "abort" status at any point in the
80+
protocol.
81+
------------------------
82+
packet: git< status=abort
83+
packet: git< 0000
84+
------------------------
85+
86+
Git neither stops nor restarts the process in case the "error"/"abort"
87+
status is set.
88+
89+
If the process dies during the communication or does not adhere to the
90+
protocol then Git will stop the process and restart it with the next
91+
object that needs to be processed.
92+
93+
After the read-object process has processed an object it is expected to
94+
wait for the next "key=value" list containing a command. Git will close
95+
the command pipe on exit. The process is expected to detect EOF and exit
96+
gracefully on its own. Git will wait until the process has stopped.
97+
98+
A long running read-object process demo implementation can be found in
99+
`contrib/long-running-read-object/example.pl` located in the Git core
100+
repository. If you develop your own long running process then the
101+
`GIT_TRACE_PACKET` environment variables can be very helpful for
102+
debugging (see linkgit:git[1]).

0 commit comments

Comments
 (0)