https://github.com/git/git
Revision 2c8ee1f53c7048aa391ac810306bf4cb8e15f2bc authored by Jeff King on 16 November 2018, 09:43:59 UTC, committed by Junio C Hamano on 17 November 2018, 07:05:49 UTC
When writing a bundle to a file, the bundle code actually creates
"your.bundle.lock" using our lockfile interface. We feed that output
descriptor to a child git-pack-objects via run-command, which has the
quirk that it closes the output descriptor in the parent.

To avoid confusing the lockfile code (which still thinks the descriptor
is valid), we dup() it, and operate on the duplicate.

However, this has a confusing side effect: after the dup() but before we
call pack-objects, we have _two_ descriptors open to the lockfile. If we
call die() during that time, the lockfile code will try to clean up the
partially-written file. It knows to close() the file before unlinking,
since on some platforms (i.e., Windows) the open file would block the
deletion. But it doesn't know about the duplicate descriptor. On
Windows, triggering an error at the right part of the code will result
in the cleanup failing and the lockfile being left in the filesystem.

We can solve this by moving the dup() much closer to start_command(),
shrinking the window in which we have the second descriptor open. It's
easy to place this in such a way that no die() is possible. We could
still die due to a signal in the exact wrong moment, but we already
tolerate races there (e.g., a signal could come before we manage to put
the file on the cleanup list in the first place).

As a bonus, this shields create_bundle() itself from the duplicate-fd
trick, and we can simplify its error handling (note that the lock
rollback now happens unconditionally, but that's OK; it's a noop if we
didn't open the lock in the first place).

The included test uses an empty bundle to cause a failure at the right
spot in the code, because that's easy to trigger (the other likely
errors are write() problems like ENOSPC).  Note that it would already
pass on non-Windows systems (because they are happy to unlink an
already-open file).

Based-on-a-patch-by: Gaël Lhez <gael.lhez@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
Tested-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent cae598d
History
Tip revision: 2c8ee1f53c7048aa391ac810306bf4cb8e15f2bc authored by Jeff King on 16 November 2018, 09:43:59 UTC
bundle: dup() output descriptor closer to point-of-use
Tip revision: 2c8ee1f
File Mode Size
.github
Documentation
block-sha1
builtin
ci
compat
contrib
ewah
git-gui
gitk-git
gitweb
mergetools
negotiator
perl
po
ppc
refs
sha1collisiondetection @ 232357e
sha1dc
t
templates
vcs-svn
xdiff
.clang-format -rw-r--r-- 4.5 KB
.gitattributes -rw-r--r-- 315 bytes
.gitignore -rw-r--r-- 3.2 KB
.gitmodules -rw-r--r-- 153 bytes
.mailmap -rw-r--r-- 15.0 KB
.travis.yml -rw-r--r-- 1.4 KB
.tsan-suppressions -rw-r--r-- 411 bytes
COPYING -rw-r--r-- 18.3 KB
GIT-VERSION-GEN -rwxr-xr-x 752 bytes
INSTALL -rw-r--r-- 10.0 KB
LGPL-2.1 -rw-r--r-- 26.2 KB
Makefile -rw-r--r-- 92.4 KB
README.md -rw-r--r-- 3.1 KB
RelNotes l--------- 33 bytes
abspath.c -rw-r--r-- 6.8 KB
aclocal.m4 -rw-r--r-- 1.4 KB
advice.c -rw-r--r-- 5.7 KB
advice.h -rw-r--r-- 1.2 KB
alias.c -rw-r--r-- 2.1 KB
alias.h -rw-r--r-- 318 bytes
alloc.c -rw-r--r-- 3.1 KB
alloc.h -rw-r--r-- 541 bytes
apply.c -rw-r--r-- 130.0 KB
apply.h -rw-r--r-- 4.0 KB
archive-tar.c -rw-r--r-- 12.4 KB
archive-zip.c -rw-r--r-- 17.0 KB
archive.c -rw-r--r-- 15.1 KB
archive.h -rw-r--r-- 1.5 KB
argv-array.c -rw-r--r-- 2.2 KB
argv-array.h -rw-r--r-- 823 bytes
attr.c -rw-r--r-- 28.7 KB
attr.h -rw-r--r-- 2.2 KB
banned.h -rw-r--r-- 741 bytes
base85.c -rw-r--r-- 2.8 KB
bisect.c -rw-r--r-- 26.7 KB
bisect.h -rw-r--r-- 1.1 KB
blame.c -rw-r--r-- 50.7 KB
blame.h -rw-r--r-- 5.3 KB
blob.c -rw-r--r-- 485 bytes
blob.h -rw-r--r-- 688 bytes
branch.c -rw-r--r-- 10.0 KB
branch.h -rw-r--r-- 2.8 KB
builtin.h -rw-r--r-- 12.5 KB
bulk-checkin.c -rw-r--r-- 7.3 KB
bulk-checkin.h -rw-r--r-- 344 bytes
bundle.c -rw-r--r-- 12.4 KB
bundle.h -rw-r--r-- 725 bytes
cache-tree.c -rw-r--r-- 17.1 KB
cache-tree.h -rw-r--r-- 1.9 KB
cache.h -rw-r--r-- 60.9 KB
chdir-notify.c -rw-r--r-- 1.8 KB
chdir-notify.h -rw-r--r-- 2.5 KB
check-builtins.sh -rwxr-xr-x 596 bytes
check-racy.c -rw-r--r-- 523 bytes
check_bindir -rwxr-xr-x 374 bytes
checkout.c -rw-r--r-- 1.9 KB
checkout.h -rw-r--r-- 376 bytes
color.c -rw-r--r-- 8.9 KB
color.h -rw-r--r-- 4.8 KB
column.c -rw-r--r-- 9.7 KB
column.h -rw-r--r-- 1.5 KB
combine-diff.c -rw-r--r-- 40.3 KB
command-list.txt -rw-r--r-- 10.9 KB
commit-graph.c -rw-r--r-- 27.3 KB
commit-graph.h -rw-r--r-- 1.7 KB
commit-slab-decl.h -rw-r--r-- 1.3 KB
commit-slab-impl.h -rw-r--r-- 2.7 KB
commit-slab.h -rw-r--r-- 1.8 KB
commit.c -rw-r--r-- 44.8 KB
commit.h -rw-r--r-- 13.1 KB
common-main.c -rw-r--r-- 1.1 KB
config.c -rw-r--r-- 78.6 KB
config.h -rw-r--r-- 10.8 KB
config.mak.dev -rw-r--r-- 1.4 KB
config.mak.in -rw-r--r-- 540 bytes
config.mak.uname -rw-r--r-- 17.2 KB
configure.ac -rw-r--r-- 36.8 KB
connect.c -rw-r--r-- 32.0 KB
connect.h -rw-r--r-- 961 bytes
connected.c -rw-r--r-- 3.2 KB
connected.h -rw-r--r-- 1.7 KB
convert.c -rw-r--r-- 48.2 KB
convert.h -rw-r--r-- 4.0 KB
copy.c -rw-r--r-- 1.3 KB
credential-cache--daemon.c -rw-r--r-- 6.9 KB
credential-cache.c -rw-r--r-- 3.2 KB
credential-store.c -rw-r--r-- 5.0 KB
credential.c -rw-r--r-- 7.9 KB
credential.h -rw-r--r-- 833 bytes
csum-file.c -rw-r--r-- 4.1 KB
csum-file.h -rw-r--r-- 1.4 KB
ctype.c -rw-r--r-- 2.6 KB
daemon.c -rw-r--r-- 34.7 KB
date.c -rw-r--r-- 27.8 KB
decorate.c -rw-r--r-- 1.8 KB
decorate.h -rw-r--r-- 1.4 KB
delta.h -rw-r--r-- 3.4 KB
detect-compiler -rwxr-xr-x 1016 bytes
diff-delta.c -rw-r--r-- 15.5 KB
diff-lib.c -rw-r--r-- 15.0 KB
diff-no-index.c -rw-r--r-- 6.8 KB
diff.c -rw-r--r-- 173.3 KB
diff.h -rw-r--r-- 14.1 KB
diffcore-break.c -rw-r--r-- 9.0 KB
diffcore-delta.c -rw-r--r-- 5.4 KB
diffcore-order.c -rw-r--r-- 2.4 KB
diffcore-pickaxe.c -rw-r--r-- 6.3 KB
diffcore-rename.c -rw-r--r-- 17.6 KB
diffcore.h -rw-r--r-- 4.7 KB
dir-iterator.c -rw-r--r-- 4.8 KB
dir-iterator.h -rw-r--r-- 2.7 KB
dir.c -rw-r--r-- 81.7 KB
dir.h -rw-r--r-- 11.9 KB
editor.c -rw-r--r-- 2.3 KB
entry.c -rw-r--r-- 12.6 KB
environment.c -rw-r--r-- 10.8 KB
exec-cmd.c -rw-r--r-- 8.0 KB
exec-cmd.h -rw-r--r-- 539 bytes
fast-import.c -rw-r--r-- 88.8 KB
fetch-negotiator.c -rw-r--r-- 545 bytes
fetch-negotiator.h -rw-r--r-- 1.6 KB
fetch-object.c -rw-r--r-- 1.2 KB
fetch-object.h -rw-r--r-- 250 bytes
fetch-pack.c -rw-r--r-- 44.0 KB
fetch-pack.h -rw-r--r-- 2.5 KB
fmt-merge-msg.h -rw-r--r-- 187 bytes
fsck.c -rw-r--r-- 29.1 KB
fsck.h -rw-r--r-- 2.0 KB
fsmonitor.c -rw-r--r-- 7.1 KB
fsmonitor.h -rw-r--r-- 2.3 KB
generate-cmdlist.sh -rwxr-xr-x 1.6 KB
gettext.c -rw-r--r-- 5.3 KB
gettext.h -rw-r--r-- 2.2 KB
git-add--interactive.perl -rwxr-xr-x 43.0 KB
git-archimport.perl -rwxr-xr-x 36.1 KB
git-bisect.sh -rwxr-xr-x 14.1 KB
git-compat-util.h -rw-r--r-- 33.4 KB
git-cvsexportcommit.perl -rwxr-xr-x 12.6 KB
git-cvsimport.perl -rwxr-xr-x 31.3 KB
git-cvsserver.perl -rwxr-xr-x 158.9 KB
git-difftool--helper.sh -rwxr-xr-x 2.2 KB
git-filter-branch.sh -rwxr-xr-x 15.4 KB
git-instaweb.sh -rwxr-xr-x 18.1 KB
git-merge-octopus.sh -rwxr-xr-x 2.4 KB
git-merge-one-file.sh -rwxr-xr-x 3.6 KB
git-merge-resolve.sh -rwxr-xr-x 944 bytes
git-mergetool--lib.sh -rw-r--r-- 8.7 KB
git-mergetool.sh -rwxr-xr-x 10.1 KB
git-p4.py -rwxr-xr-x 153.0 KB
git-parse-remote.sh -rw-r--r-- 2.6 KB
git-quiltimport.sh -rwxr-xr-x 3.5 KB
git-rebase--am.sh -rw-r--r-- 1.6 KB
git-rebase--interactive.sh -rw-r--r-- 7.2 KB
git-rebase--merge.sh -rw-r--r-- 3.5 KB
git-rebase--preserve-merges.sh -rw-r--r-- 27.2 KB
git-rebase.sh -rwxr-xr-x 19.4 KB
git-remote-testgit.sh -rwxr-xr-x 2.9 KB
git-request-pull.sh -rwxr-xr-x 3.6 KB
git-send-email.perl -rwxr-xr-x 55.2 KB
git-sh-i18n.sh -rw-r--r-- 2.3 KB
git-sh-setup.sh -rw-r--r-- 9.1 KB
git-stash.sh -rwxr-xr-x 15.3 KB
git-submodule.sh -rwxr-xr-x 22.6 KB
git-svn.perl -rwxr-xr-x 62.9 KB
git-web--browse.sh -rwxr-xr-x 4.3 KB
git.c -rw-r--r-- 22.6 KB
git.rc -rw-r--r-- 592 bytes
gpg-interface.c -rw-r--r-- 7.4 KB
gpg-interface.h -rw-r--r-- 1.8 KB
graph.c -rw-r--r-- 36.3 KB
graph.h -rw-r--r-- 4.9 KB
grep.c -rw-r--r-- 53.0 KB
grep.h -rw-r--r-- 5.6 KB
hash.h -rw-r--r-- 2.9 KB
hashmap.c -rw-r--r-- 7.2 KB
hashmap.h -rw-r--r-- 14.2 KB
help.c -rw-r--r-- 18.5 KB
help.h -rw-r--r-- 3.2 KB
hex.c -rw-r--r-- 2.9 KB
http-backend.c -rw-r--r-- 18.7 KB
http-fetch.c -rw-r--r-- 1.9 KB
http-push.c -rw-r--r-- 49.9 KB
http-walker.c -rw-r--r-- 15.1 KB
http.c -rw-r--r-- 62.3 KB
http.h -rw-r--r-- 6.7 KB
ident.c -rw-r--r-- 12.5 KB
imap-send.c -rw-r--r-- 36.6 KB
iterator.h -rw-r--r-- 2.1 KB
json-writer.c -rw-r--r-- 8.5 KB
json-writer.h -rw-r--r-- 4.1 KB
khash.h -rw-r--r-- 12.7 KB
kwset.c -rw-r--r-- 20.5 KB
kwset.h -rw-r--r-- 2.5 KB
levenshtein.c -rw-r--r-- 2.5 KB
levenshtein.h -rw-r--r-- 203 bytes
line-log.c -rw-r--r-- 30.9 KB
line-log.h -rw-r--r-- 1.8 KB
line-range.c -rw-r--r-- 6.5 KB
line-range.h -rw-r--r-- 1.3 KB
linear-assignment.c -rw-r--r-- 4.0 KB
linear-assignment.h -rw-r--r-- 736 bytes
list-objects-filter-options.c -rw-r--r-- 4.2 KB
list-objects-filter-options.h -rw-r--r-- 2.1 KB
list-objects-filter.c -rw-r--r-- 10.8 KB
list-objects-filter.h -rw-r--r-- 2.6 KB
list-objects.c -rw-r--r-- 9.5 KB
list-objects.h -rw-r--r-- 718 bytes
list.h -rw-r--r-- 5.6 KB
ll-merge.c -rw-r--r-- 10.5 KB
ll-merge.h -rw-r--r-- 593 bytes
lockfile.c -rw-r--r-- 5.6 KB
lockfile.h -rw-r--r-- 10.5 KB
log-tree.c -rw-r--r-- 25.2 KB
log-tree.h -rw-r--r-- 1.4 KB
ls-refs.c -rw-r--r-- 2.1 KB
ls-refs.h -rw-r--r-- 224 bytes
mailinfo.c -rw-r--r-- 26.4 KB
mailinfo.h -rw-r--r-- 1012 bytes
mailmap.c -rw-r--r-- 8.9 KB
mailmap.h -rw-r--r-- 292 bytes
match-trees.c -rw-r--r-- 8.2 KB
mem-pool.c -rw-r--r-- 3.1 KB
mem-pool.h -rw-r--r-- 1.4 KB
merge-blobs.c -rw-r--r-- 1.9 KB
merge-blobs.h -rw-r--r-- 194 bytes
merge-recursive.c -rw-r--r-- 105.6 KB
merge-recursive.h -rw-r--r-- 2.8 KB
merge.c -rw-r--r-- 2.7 KB
mergesort.c -rw-r--r-- 1.5 KB
mergesort.h -rw-r--r-- 574 bytes
name-hash.c -rw-r--r-- 18.5 KB
notes-cache.c -rw-r--r-- 2.2 KB
notes-cache.h -rw-r--r-- 498 bytes
notes-merge.c -rw-r--r-- 22.5 KB
notes-merge.h -rw-r--r-- 2.9 KB
notes-utils.c -rw-r--r-- 5.0 KB
notes-utils.h -rw-r--r-- 1.4 KB
notes.c -rw-r--r-- 36.2 KB
notes.h -rw-r--r-- 11.8 KB
object-store.h -rw-r--r-- 10.8 KB
object.c -rw-r--r-- 13.3 KB
object.h -rw-r--r-- 6.3 KB
oidmap.c -rw-r--r-- 1.4 KB
oidmap.h -rw-r--r-- 2.2 KB
oidset.c -rw-r--r-- 767 bytes
oidset.h -rw-r--r-- 2.0 KB
pack-bitmap-write.c -rw-r--r-- 12.6 KB
pack-bitmap.c -rw-r--r-- 26.7 KB
pack-bitmap.h -rw-r--r-- 2.0 KB
pack-check.c -rw-r--r-- 5.6 KB
pack-objects.c -rw-r--r-- 4.0 KB
pack-objects.h -rw-r--r-- 10.4 KB
pack-revindex.c -rw-r--r-- 5.6 KB
pack-revindex.h -rw-r--r-- 323 bytes
pack-write.c -rw-r--r-- 10.7 KB
pack.h -rw-r--r-- 3.4 KB
packfile.c -rw-r--r-- 50.6 KB
packfile.h -rw-r--r-- 5.6 KB
pager.c -rw-r--r-- 4.5 KB
parse-options-cb.c -rw-r--r-- 5.3 KB
parse-options.c -rw-r--r-- 19.7 KB
parse-options.h -rw-r--r-- 10.7 KB
patch-delta.c -rw-r--r-- 2.2 KB
patch-ids.c -rw-r--r-- 3.2 KB
patch-ids.h -rw-r--r-- 659 bytes
path.c -rw-r--r-- 34.1 KB
path.h -rw-r--r-- 5.8 KB
pathspec.c -rw-r--r-- 16.2 KB
pathspec.h -rw-r--r-- 3.2 KB
pkt-line.c -rw-r--r-- 10.9 KB
pkt-line.h -rw-r--r-- 6.4 KB
preload-index.c -rw-r--r-- 2.8 KB
pretty.c -rw-r--r-- 45.4 KB
pretty.h -rw-r--r-- 3.5 KB
prio-queue.c -rw-r--r-- 1.8 KB
prio-queue.h -rw-r--r-- 1.5 KB
progress.c -rw-r--r-- 6.1 KB
progress.h -rw-r--r-- 455 bytes
prompt.c -rw-r--r-- 1.4 KB
prompt.h -rw-r--r-- 168 bytes
protocol.c -rw-r--r-- 2.1 KB
protocol.h -rw-r--r-- 1.1 KB
quote.c -rw-r--r-- 11.2 KB
quote.h -rw-r--r-- 3.2 KB
range-diff.c -rw-r--r-- 10.9 KB
range-diff.h -rw-r--r-- 188 bytes
reachable.c -rw-r--r-- 4.9 KB
reachable.h -rw-r--r-- 318 bytes
read-cache.c -rw-r--r-- 79.3 KB
ref-filter.c -rw-r--r-- 66.7 KB
ref-filter.h -rw-r--r-- 4.5 KB
reflog-walk.c -rw-r--r-- 8.2 KB
reflog-walk.h -rw-r--r-- 933 bytes
refs.c -rw-r--r-- 53.4 KB
refs.h -rw-r--r-- 29.2 KB
refspec.c -rw-r--r-- 4.9 KB
refspec.h -rw-r--r-- 1.3 KB
remote-curl.c -rw-r--r-- 35.2 KB
remote-testsvn.c -rw-r--r-- 8.2 KB
remote.c -rw-r--r-- 55.8 KB
remote.h -rw-r--r-- 8.3 KB
replace-object.c -rw-r--r-- 2.0 KB
replace-object.h -rw-r--r-- 1.0 KB
repository.c -rw-r--r-- 6.1 KB
repository.h -rw-r--r-- 3.6 KB
rerere.c -rw-r--r-- 31.1 KB
rerere.h -rw-r--r-- 1.1 KB
resolve-undo.c -rw-r--r-- 4.4 KB
resolve-undo.h -rw-r--r-- 630 bytes
revision.c -rw-r--r-- 96.4 KB
revision.h -rw-r--r-- 8.1 KB
run-command.c -rw-r--r-- 38.9 KB
run-command.h -rw-r--r-- 7.6 KB
send-pack.c -rw-r--r-- 15.8 KB
send-pack.h -rw-r--r-- 893 bytes
sequencer.c -rw-r--r-- 131.0 KB
sequencer.h -rw-r--r-- 3.0 KB
serve.c -rw-r--r-- 6.2 KB
serve.h -rw-r--r-- 350 bytes
server-info.c -rw-r--r-- 5.8 KB
setup.c -rw-r--r-- 32.9 KB
sh-i18n--envsubst.c -rw-r--r-- 10.1 KB
sha1-array.c -rw-r--r-- 1.5 KB
sha1-array.h -rw-r--r-- 682 bytes
sha1-file.c -rw-r--r-- 56.4 KB
sha1-lookup.c -rw-r--r-- 3.1 KB
sha1-lookup.h -rw-r--r-- 1.3 KB
sha1-name.c -rw-r--r-- 43.3 KB
sha1dc_git.c -rw-r--r-- 855 bytes
sha1dc_git.h -rw-r--r-- 618 bytes
shallow.c -rw-r--r-- 20.6 KB
shell.c -rw-r--r-- 4.5 KB
shortlog.h -rw-r--r-- 508 bytes
sideband.c -rw-r--r-- 5.8 KB
sideband.h -rw-r--r-- 259 bytes
sigchain.c -rw-r--r-- 1.1 KB
sigchain.h -rw-r--r-- 247 bytes
split-index.c -rw-r--r-- 10.6 KB
split-index.h -rw-r--r-- 1.2 KB
strbuf.c -rw-r--r-- 21.0 KB
strbuf.h -rw-r--r-- 21.6 KB
streaming.c -rw-r--r-- 11.9 KB
streaming.h -rw-r--r-- 510 bytes
string-list.c -rw-r--r-- 7.8 KB
string-list.h -rw-r--r-- 10.1 KB
sub-process.c -rw-r--r-- 5.4 KB
sub-process.h -rw-r--r-- 3.1 KB
submodule-config.c -rw-r--r-- 19.0 KB
submodule-config.h -rw-r--r-- 2.3 KB
submodule.c -rw-r--r-- 51.3 KB
submodule.h -rw-r--r-- 5.2 KB
symlinks.c -rw-r--r-- 9.3 KB
tag.c -rw-r--r-- 4.9 KB
tag.h -rw-r--r-- 722 bytes
tar.h -rw-r--r-- 644 bytes
tempfile.c -rw-r--r-- 8.3 KB
tempfile.h -rw-r--r-- 9.2 KB
thread-utils.c -rw-r--r-- 1.7 KB
thread-utils.h -rw-r--r-- 241 bytes
tmp-objdir.c -rw-r--r-- 6.5 KB
tmp-objdir.h -rw-r--r-- 1.5 KB
trace.c -rw-r--r-- 10.5 KB
trace.h -rw-r--r-- 4.3 KB
trailer.c -rw-r--r-- 28.8 KB
trailer.h -rw-r--r-- 2.3 KB
transport-helper.c -rw-r--r-- 36.8 KB
transport-internal.h -rw-r--r-- 2.6 KB
transport.c -rw-r--r-- 35.7 KB
transport.h -rw-r--r-- 8.1 KB
tree-diff.c -rw-r--r-- 17.9 KB
tree-walk.c -rw-r--r-- 29.1 KB
tree-walk.h -rw-r--r-- 3.2 KB
tree.c -rw-r--r-- 6.6 KB
tree.h -rw-r--r-- 1.1 KB
unicode-width.h -rw-r--r-- 8.9 KB
unimplemented.sh -rw-r--r-- 101 bytes
unix-socket.c -rw-r--r-- 2.4 KB
unix-socket.h -rw-r--r-- 158 bytes
unpack-trees.c -rw-r--r-- 58.9 KB
unpack-trees.h -rw-r--r-- 2.6 KB
upload-pack.c -rw-r--r-- 37.2 KB
upload-pack.h -rw-r--r-- 513 bytes
url.c -rw-r--r-- 2.4 KB
url.h -rw-r--r-- 508 bytes
urlmatch.c -rw-r--r-- 18.1 KB
urlmatch.h -rw-r--r-- 2.0 KB
usage.c -rw-r--r-- 5.4 KB
userdiff.c -rw-r--r-- 10.0 KB
userdiff.h -rw-r--r-- 780 bytes
utf8.c -rw-r--r-- 18.7 KB
utf8.h -rw-r--r-- 3.5 KB
varint.c -rw-r--r-- 660 bytes
varint.h -rw-r--r-- 168 bytes
version.c -rw-r--r-- 718 bytes
version.h -rw-r--r-- 230 bytes
versioncmp.c -rw-r--r-- 5.2 KB
walker.c -rw-r--r-- 7.4 KB
walker.h -rw-r--r-- 1.1 KB
wildmatch.c -rw-r--r-- 7.8 KB
wildmatch.h -rw-r--r-- 293 bytes
worktree.c -rw-r--r-- 11.5 KB
worktree.h -rw-r--r-- 3.0 KB
wrap-for-bin.sh -rw-r--r-- 946 bytes
wrapper.c -rw-r--r-- 14.8 KB
write-or-die.c -rw-r--r-- 1.5 KB
ws.c -rw-r--r-- 9.4 KB
wt-status.c -rw-r--r-- 65.7 KB
wt-status.h -rw-r--r-- 3.7 KB
xdiff-interface.c -rw-r--r-- 7.3 KB
xdiff-interface.h -rw-r--r-- 1.7 KB
zlib.c -rw-r--r-- 6.1 KB

README.md

back to top