gitweb.git
win32: replace pthread_cond_*() with much simpler codeLoo Rong Jie Tue, 13 Nov 2018 18:52:35 +0000 (10:52 -0800)

win32: replace pthread_cond_*() with much simpler code

The Win32 CONDITION_VARIABLE has better performance and is easier to
maintain, as the code is a lot shorter now (the semantics of the
CONDITION_VARIABLE matches the pthread_cond_t very well).

Note: CONDITION_VARIABLE is not available in Windows XP and below,
but the declared minimal Windows version required to build and run
Git for Windows is Windows Vista (which is also beyond its
end-of-life, but for less long than Windows XP), so that's okay.

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

checkout: print something when checking out pathsNguyễn Thái Ngọc Duy Tue, 13 Nov 2018 18:28:00 +0000 (19:28 +0100)

checkout: print something when checking out paths

One of the problems with "git checkout" is that it does so many
different things and could confuse people specially when we fail to
handle ambiguation correctly.

One way to help with that is tell the user what sort of operation is
actually carried out. When switching branches, we always print
something unless --quiet, either

- "HEAD is now at ..."
- "Reset branch ..."
- "Already on ..."
- "Switched to and reset ..."
- "Switched to a new branch ..."
- "Switched to branch ..."

Checking out paths however is silent. Print something so that if we
got the user intention wrong, they won't waste too much time to find
that out. For the remaining cases of checkout we now print either

- "Checked out ... paths out of the index"
- "Checked out ... paths out of <abbrev hash>"

Since the purpose of printing this is to help disambiguate. Only do it
when "--" is missing.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

checkout: disambiguate dwim tracking branches and local... Nguyễn Thái Ngọc Duy Tue, 13 Nov 2018 17:52:26 +0000 (18:52 +0100)

checkout: disambiguate dwim tracking branches and local files

When checkout dwim is added in [1], it is restricted to only dwim when
certain conditions are met and fall back to default checkout behavior
otherwise. It turns out falling back could be confusing. One of the
conditions to turn

git checkout frotz

to

git checkout -b frotz origin/frotz

is that frotz must not exist as a file. But when the user comes to
expect "git checkout frotz" to create the branch "frotz" and there
happens to be a file named "frotz", git's silently reverting "frotz"
file content is not helping. This is reported in Git mailing list [2]
and even used as an example of "Git is bad" elsewhere [3].

We normally try to do the right thing, but when there are multiple
"right things" to do, it's best to leave it to the user to decide.
Check this case, ask the user to to disambiguate:

- "git checkout -- foo" will check out path "foo"
- "git checkout foo --" will dwim and create branch "foo" [4]

For users who do not want dwim, use --no-guess. It's useless in this
particular case because "git checkout --no-guess foo --" will just
fail. But it could be used by scripts.

[1] 70c9ac2f19 (DWIM "git checkout frotz" to "git checkout -b frotz
origin/frotz" - 2009-10-18)
[2] https://public-inbox.org/git/CACsJy8B2TVr1g+k+eSQ=pBEO3WN4_LtgLo9gpur8X7Z9GOFL_A@mail.gmail.com/
[3] https://news.ycombinator.com/item?id=18230655
[4] a047fafc78 (checkout: allow dwim for branch creation for "git
checkout $branch --" - 2013-10-18)

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mingw: use `CreateHardLink()` directlyJohannes Schindelin Tue, 13 Nov 2018 14:37:02 +0000 (06:37 -0800)

mingw: use `CreateHardLink()` directly

The function `CreateHardLink()` is available in all supported Windows
versions (even since Windows XP), so there is no more need to resolve it
at runtime.

Helped-by: Max Kirillov <max@max630.net>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t/lib-gettext: test installed git-sh-i18n if GIT_TEST_I... Johannes Schindelin Mon, 12 Nov 2018 13:48:36 +0000 (05:48 -0800)

t/lib-gettext: test installed git-sh-i18n if GIT_TEST_INSTALLED is set

It makes very, very little sense to test the built git-sh-i18n when the
user asked specifically to test another one.

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

tests: respect GIT_TEST_INSTALLED when initializing... Johannes Schindelin Mon, 12 Nov 2018 13:48:34 +0000 (05:48 -0800)

tests: respect GIT_TEST_INSTALLED when initializing repositories

It really makes very, very little sense to use a different git
executable than the one the caller indicated via setting the environment
variable GIT_TEST_INSTALLED.

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

tests: fix GIT_TEST_INSTALLED's PATH to include t/helper/Johannes Schindelin Mon, 12 Nov 2018 13:48:33 +0000 (05:48 -0800)

tests: fix GIT_TEST_INSTALLED's PATH to include t/helper/

We really need to be able to find the test helpers... Really. This
change was forgotten when we moved the test helpers into t/helper/

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

coccicheck: introduce 'pending' semantic patchesSZEDER Gábor Sat, 10 Nov 2018 00:10:52 +0000 (16:10 -0800)

coccicheck: introduce 'pending' semantic patches

Teach `make coccicheck` to avoid patches named "*.pending.cocci" and
handle them separately in a new `make coccicheck-pending` instead.
This means that we can separate "critical" patches from "FYI" patches.
The former target can continue causing Travis to fail its static
analysis job, while the latter can let us keep an eye on ongoing
(pending) transitions without them causing too much fallout.

Document the intended use-cases around these two targets.
As the process around the pending patches is not yet fully explored,
leave that out.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Based-on-work-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Tenth batch for 2.20Junio C Hamano Tue, 13 Nov 2018 13:13:52 +0000 (22:13 +0900)

Tenth batch for 2.20

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'nd/complete-format-patch'Junio C Hamano Tue, 13 Nov 2018 13:37:28 +0000 (22:37 +0900)

Merge branch 'nd/complete-format-patch'

The support for format-patch (and send-email) by the command-line
completion script (in contrib/) has been simplified a bit.

* nd/complete-format-patch:
completion: use __gitcomp_builtin for format-patch

Merge branch 'nd/tree-walk-path-exclusion'Junio C Hamano Tue, 13 Nov 2018 13:37:28 +0000 (22:37 +0900)

Merge branch 'nd/tree-walk-path-exclusion'

Pathspec matching against a tree object were buggy when negative
pathspec elements were involved, which has been fixed.

* nd/tree-walk-path-exclusion:
tree-walk.c: fix overoptimistic inclusion in :(exclude) matching

Merge branch 'sg/travis-install-dependencies'Junio C Hamano Tue, 13 Nov 2018 13:37:27 +0000 (22:37 +0900)

Merge branch 'sg/travis-install-dependencies'

The procedure to install dependencies before testing at Travis CI
is getting revamped for both simplicity and flexibility, taking
advantage of the recent move to the vm-based environment.

* sg/travis-install-dependencies:
travis-ci: install packages in 'ci/install-dependencies.sh'

Merge branch 'bp/add-diff-files-optim'Junio C Hamano Tue, 13 Nov 2018 13:37:27 +0000 (22:37 +0900)

Merge branch 'bp/add-diff-files-optim'

"git add" needs to internally run "diff-files" equivalent, and the
codepath learned the same optimization as "diff-files" has to run
lstat(2) in parallel to find which paths have been updated in the
working tree.

* bp/add-diff-files-optim:
add: speed up cmd_add() by utilizing read_cache_preload()

Merge branch 'jk/xdiff-interface'Junio C Hamano Tue, 13 Nov 2018 13:37:27 +0000 (22:37 +0900)

Merge branch 'jk/xdiff-interface'

The interface into "xdiff" library used to discover the offset and
size of a generated patch hunk by first formatting it into the
textual hunk header "@@ -n,m +k,l @@" and then parsing the numbers
out. A new interface has been introduced to allow callers a more
direct access to them.

* jk/xdiff-interface:
xdiff-interface: drop parse_hunk_header()
range-diff: use a hunk callback
diff: convert --check to use a hunk callback
combine-diff: use an xdiff hunk callback
diff: use hunk callback for word-diff
diff: discard hunk headers for patch-ids earlier
diff: avoid generating unused hunk header lines
xdiff-interface: provide a separate consume callback for hunks
xdiff: provide a separate emit callback for hunks

Merge branch 'jk/misc-unused-fixes'Junio C Hamano Tue, 13 Nov 2018 13:37:26 +0000 (22:37 +0900)

Merge branch 'jk/misc-unused-fixes'

Assorted fixes for bugs found while auditing -Wunused-parameter
warnings.

* jk/misc-unused-fixes:
approxidate: fix NULL dereference in date_time()
pathspec: handle non-terminated strings with :(attr)
approxidate: handle pending number for "specials"
rev-list: handle flags for --indexed-objects

Merge branch 'nd/per-worktree-ref-iteration'Junio C Hamano Tue, 13 Nov 2018 13:37:26 +0000 (22:37 +0900)

Merge branch 'nd/per-worktree-ref-iteration'

The code to traverse objects for reachability, used to decide what
objects are unreferenced and expendable, have been taught to also
consider per-worktree refs of other worktrees as starting points to
prevent data loss.

* nd/per-worktree-ref-iteration:
git-worktree.txt: correct linkgit command name
reflog expire: cover reflog from all worktrees
fsck: check HEAD and reflog from other worktrees
fsck: move fsck_head_link() to get_default_heads() to avoid some globals
revision.c: better error reporting on ref from different worktrees
revision.c: correct a parameter name
refs: new ref types to make per-worktree refs visible to all worktrees
Add a place for (not) sharing stuff between worktrees
refs.c: indent with tabs, not spaces

Merge branch 'bp/refresh-index-using-preload'Junio C Hamano Tue, 13 Nov 2018 13:37:25 +0000 (22:37 +0900)

Merge branch 'bp/refresh-index-using-preload'

The helper function to refresh the cached stat information in the
in-core index has learned to perform the lstat() part of the
operation in parallel on multi-core platforms.

* bp/refresh-index-using-preload:
refresh_index: remove unnecessary calls to preload_index()
speed up refresh_index() by utilizing preload_index()

Merge branch 'ag/rebase-i-in-c'Junio C Hamano Tue, 13 Nov 2018 13:37:25 +0000 (22:37 +0900)

Merge branch 'ag/rebase-i-in-c'

Code clean-up for a topic already in 'master'.

* ag/rebase-i-in-c:
sequencer.c: remove a stray semicolon

Merge branch 'al/send-email-auto-cte-fixup'Junio C Hamano Tue, 13 Nov 2018 13:37:25 +0000 (22:37 +0900)

Merge branch 'al/send-email-auto-cte-fixup'

"git send-email --transfer-encoding=..." in recent versions of Git
sometimes produced an empty "Content-Transfer-Encoding:" header,
which has been corrected.

* al/send-email-auto-cte-fixup:
send-email: avoid empty transfer encoding header

Merge branch 'ds/add-missing-tags'Junio C Hamano Tue, 13 Nov 2018 13:37:24 +0000 (22:37 +0900)

Merge branch 'ds/add-missing-tags'

The history traversal used to implement the tag-following has been
optimized by introducing a new helper.

* ds/add-missing-tags:
remote: make add_missing_tags() linear
test-reach: test get_reachable_subset
commit-reach: implement get_reachable_subset

Merge branch 'sh/mingw-safer-compat-poll'Junio C Hamano Tue, 13 Nov 2018 13:37:24 +0000 (22:37 +0900)

Merge branch 'sh/mingw-safer-compat-poll'

Windows fix.

* sh/mingw-safer-compat-poll:
poll: use GetTickCount64() to avoid wrap-around issues

Merge branch 'js/rebase-p-tests'Junio C Hamano Tue, 13 Nov 2018 13:37:24 +0000 (22:37 +0900)

Merge branch 'js/rebase-p-tests'

In preparation to the day when we can deprecate and remove the
"rebase -p", make sure we can skip and later remove tests for
it.

* js/rebase-p-tests:
tests: optionally skip `git rebase -p` tests
t3418: decouple test cases from a previous `rebase -p` test case
t3404: decouple some test cases from outcomes of previous test cases

Merge branch 'pw/am-rebase-read-author-script'Junio C Hamano Tue, 13 Nov 2018 13:37:23 +0000 (22:37 +0900)

Merge branch 'pw/am-rebase-read-author-script'

Unify code to read the author-script used in "git am" and the
commands that use the sequencer machinery, e.g. "git rebase -i".

* pw/am-rebase-read-author-script:
sequencer: use read_author_script()
add read_author_script() to libgit
am: rename read_author_script()
am: improve author-script error reporting
am: don't die in read_author_script()

Merge branch 'jc/war-on-string-list'Junio C Hamano Tue, 13 Nov 2018 13:37:23 +0000 (22:37 +0900)

Merge branch 'jc/war-on-string-list'

Replace three string-list instances used as look-up tables in "git
fetch" with hashmaps.

* jc/war-on-string-list:
fetch: replace string-list used as a look-up table with a hashmap

Merge branch 'ag/rev-parse-all-exclude-fix'Junio C Hamano Tue, 13 Nov 2018 13:37:23 +0000 (22:37 +0900)

Merge branch 'ag/rev-parse-all-exclude-fix'

"git rev-parse --exclude=* --branches --branches" (i.e. first
saying "add only things that do not match '*' out of all branches"
and then adding all branches, without any exclusion this time")
worked as expected, but "--exclude=* --all --all" did not work the
same way, which has been fixed.

* ag/rev-parse-all-exclude-fix:
rev-parse: clear --exclude list after 'git rev-parse --all'

Merge branch 'jt/tighten-fetch-proto-v2-response'Junio C Hamano Tue, 13 Nov 2018 13:37:22 +0000 (22:37 +0900)

Merge branch 'jt/tighten-fetch-proto-v2-response'

"git fetch" was a bit loose in parsing resposes from the other side
when talking over the protocol v2.

* jt/tighten-fetch-proto-v2-response:
fetch-pack: be more precise in parsing v2 response

Merge branch 'ao/submodule-wo-gitmodules-checked-out'Junio C Hamano Tue, 13 Nov 2018 13:37:22 +0000 (22:37 +0900)

Merge branch 'ao/submodule-wo-gitmodules-checked-out'

The submodule support has been updated to read from the blob at
HEAD:.gitmodules when the .gitmodules file is missing from the
working tree.

* ao/submodule-wo-gitmodules-checked-out:
t/helper: add test-submodule-nested-repo-config
submodule: support reading .gitmodules when it's not in the working tree
submodule: add a helper to check if it is safe to write to .gitmodules
t7506: clean up .gitmodules properly before setting up new scenario
submodule: use the 'submodule--helper config' command
submodule--helper: add a new 'config' subcommand
t7411: be nicer to future tests and really clean things up
t7411: merge tests 5 and 6
submodule: factor out a config_set_in_gitmodules_file_gently function
submodule: add a print_config_from_gitmodules() helper

Merge branch 'nb/worktree-api-doc'Junio C Hamano Tue, 13 Nov 2018 13:37:21 +0000 (22:37 +0900)

Merge branch 'nb/worktree-api-doc'

Code readability fix.

* nb/worktree-api-doc:
worktree: rename is_worktree_locked to worktree_lock_reason
worktree: update documentation for lock_reason and lock_reason_valid

Merge branch 'ma/sequencer-do-reset-saner-loop-termination'Junio C Hamano Tue, 13 Nov 2018 13:37:21 +0000 (22:37 +0900)

Merge branch 'ma/sequencer-do-reset-saner-loop-termination'

Code readability fix.

* ma/sequencer-do-reset-saner-loop-termination:
sequencer: break out of loop explicitly

Merge branch 'js/mingw-utf8-env'Junio C Hamano Tue, 13 Nov 2018 13:37:21 +0000 (22:37 +0900)

Merge branch 'js/mingw-utf8-env'

Windows fix.

* js/mingw-utf8-env:
mingw: reencode environment variables on the fly (UTF-16 <-> UTF-8)
t7800: fix quoting

Merge branch 'js/mingw-perl5lib'Junio C Hamano Tue, 13 Nov 2018 13:37:20 +0000 (22:37 +0900)

Merge branch 'js/mingw-perl5lib'

Windows fix.

* js/mingw-perl5lib:
mingw: unset PERL5LIB by default
config: move Windows-specific config settings into compat/mingw.c
config: allow for platform-specific core.* config settings
config: rename `dummy` parameter to `cb` in git_default_config()

Merge branch 'js/mingw-isatty-and-dup2'Junio C Hamano Tue, 13 Nov 2018 13:37:20 +0000 (22:37 +0900)

Merge branch 'js/mingw-isatty-and-dup2'

Windows fix.

* js/mingw-isatty-and-dup2:
mingw: fix isatty() after dup2()

Merge branch 'ab/pack-tests-cleanup'Junio C Hamano Tue, 13 Nov 2018 13:37:20 +0000 (22:37 +0900)

Merge branch 'ab/pack-tests-cleanup'

A couple of tests used to leave the repository in a state that is
deliberately corrupt, which have been corrected.

* ab/pack-tests-cleanup:
index-pack tests: don't leave test repo dirty at end
pack-objects tests: don't leave test .git corrupt at end
pack-objects test: modernize style

Merge branch 'ds/test-multi-pack-index'Junio C Hamano Tue, 13 Nov 2018 13:37:19 +0000 (22:37 +0900)

Merge branch 'ds/test-multi-pack-index'

Tests for the recently introduced multi-pack index machinery.

* ds/test-multi-pack-index:
packfile: close multi-pack-index in close_all_packs
multi-pack-index: define GIT_TEST_MULTI_PACK_INDEX
midx: close multi-pack-index on repack
midx: fix broken free() in close_midx()

Merge branch 'nd/wildmatch-double-asterisk'Junio C Hamano Tue, 13 Nov 2018 13:37:19 +0000 (22:37 +0900)

Merge branch 'nd/wildmatch-double-asterisk'

A pattern with '**' that does not have a slash on either side used
to be an invalid one, but the code now treats such double-asterisks
the same way as two normal asterisks that happen to be adjacent to
each other.

* nd/wildmatch-double-asterisk:
wildmatch: change behavior of "foo**bar" in WM_PATHNAME mode

Merge branch 'nd/per-worktree-config'Junio C Hamano Tue, 13 Nov 2018 13:37:18 +0000 (22:37 +0900)

Merge branch 'nd/per-worktree-config'

A fourth class of configuration files (in addition to the
traditional "system wide", "per user in the $HOME directory" and
"per repository in the $GIT_DIR/config") has been introduced so
that different worktrees that share the same repository (hence the
same $GIT_DIR/config file) can use different customization.

* nd/per-worktree-config:
worktree: add per-worktree config files
t1300: extract and use test_cmp_config()

Merge branch 'jk/stream-pack-non-delta-clarification'Junio C Hamano Tue, 13 Nov 2018 13:37:18 +0000 (22:37 +0900)

Merge branch 'jk/stream-pack-non-delta-clarification'

Additional comment on a tricky piece of code to help developers.

* jk/stream-pack-non-delta-clarification:
read_istream_pack_non_delta(): document input handling

Merge branch 'jk/proto-v2-ref-prefix-fix'Junio C Hamano Tue, 13 Nov 2018 13:37:17 +0000 (22:37 +0900)

Merge branch 'jk/proto-v2-ref-prefix-fix'

"git ls-remote $there foo" was broken by recent update for the
protocol v2 and stopped showing refs that match 'foo' that are not
refs/{heads,tags}/foo, which has been fixed.

* jk/proto-v2-ref-prefix-fix:
ls-remote: pass heads/tags prefixes to transport
ls-remote: do not send ref prefixes for patterns

Merge branch 'jk/detect-truncated-zlib-input'Junio C Hamano Tue, 13 Nov 2018 13:37:17 +0000 (22:37 +0900)

Merge branch 'jk/detect-truncated-zlib-input'

A regression in Git 2.12 era made "git fsck" fall into an infinite
loop while processing truncated loose objects.

* jk/detect-truncated-zlib-input:
cat-file: handle streaming failures consistently
check_stream_sha1(): handle input underflow
t1450: check large blob in trailing-garbage test

Merge branch 'nd/config-split'Junio C Hamano Tue, 13 Nov 2018 13:37:16 +0000 (22:37 +0900)

Merge branch 'nd/config-split'

Split the overly large Documentation/config.txt file into million
little pieces. This potentially allows each individual piece
included into the manual page of the command it affects more easily.

* nd/config-split: (81 commits)
config.txt: remove config/dummy.txt
config.txt: move worktree.* to a separate file
config.txt: move web.* to a separate file
config.txt: move versionsort.* to a separate file
config.txt: move user.* to a separate file
config.txt: move url.* to a separate file
config.txt: move uploadpack.* to a separate file
config.txt: move uploadarchive.* to a separate file
config.txt: move transfer.* to a separate file
config.txt: move tag.* to a separate file
config.txt: move submodule.* to a separate file
config.txt: move stash.* to a separate file
config.txt: move status.* to a separate file
config.txt: move splitIndex.* to a separate file
config.txt: move showBranch.* to a separate file
config.txt: move sequencer.* to a separate file
config.txt: move sendemail-config.txt to config/
config.txt: move reset.* to a separate file
config.txt: move rerere.* to a separate file
config.txt: move repack.* to a separate file
...

format-patch: respect --stat in cover letter's diffstatNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:46:24 +0000 (06:46 +0100)

format-patch: respect --stat in cover letter's diffstat

Commit 43662b23ab (format-patch: keep cover-letter diffstat wrapped in
72 columns - 2018-01-24) uncondtionally sets stat width to 72 when
generating diffstat for the cover letter, ignoring --stat from command
line. But it should only do so when stat width is still default
(i.e. stat_width == 0).

In order to fix this, we should only set stat_width if stat_width is
zero. But it will never be. Commit 071dd0ba43 (format-patch: reduce
patch diffstat width to 72 - 2018-02-01) makes sure that default stat
width will be 72 (ignoring $COLUMNS, but could still be overriden by
--stat). So all we need to do here is drop the assignment.

Reported-by: Laszlo Ersek <lersek@redhat.com>
Helped-by: Leif Lindholm <leif.lindholm@linaro.org>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

built-in rebase: reinstate `checkout -q` behavior where... Johannes Schindelin Mon, 12 Nov 2018 11:44:32 +0000 (03:44 -0800)

built-in rebase: reinstate `checkout -q` behavior where appropriate

When we converted a `git checkout -q $onto^0` call to use
`reset_head()`, we inadvertently incurred a change from a twoway_merge
to a oneway_merge, as if we wanted a `git reset --hard` instead.

This has performance ramifications under certain, though, as the
oneway_merge needs to lstat() every single index entry whereas
twoway_merge does not.

So let's go back to the old behavior.

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

rebase: prepare reset_head() for more flagsJohannes Schindelin Mon, 12 Nov 2018 11:44:31 +0000 (03:44 -0800)

rebase: prepare reset_head() for more flags

Currently, we only accept the flag indicating whether the HEAD should be
detached not. In the next commit, we want to introduce another flag: to
toggle between emulating `reset --hard` vs `checkout -q`.

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

rebase: consolidate clean-up code before leaving reset_... Johannes Schindelin Mon, 12 Nov 2018 11:44:30 +0000 (03:44 -0800)

rebase: consolidate clean-up code before leaving reset_head()

The same clean-up code is repeated quite a few times; Let's DRY up the
code some.

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

refs: fix some exclude patterns being ignoredRafael Ascensão Mon, 12 Nov 2018 13:25:44 +0000 (13:25 +0000)

refs: fix some exclude patterns being ignored

`--exclude` from rev-list and rev-parse fails to exclude references if
the next `--branches`, `--tags` or `--remotes` use the optional
inclusive glob because those options are implemented as particular cases
of `--glob=`, which itself requires that exclude patterns begin with
'refs/'.

But it makes sense for `--branches=glob` and friends to be aware that
exclusions patterns for them shouldn't be 'refs/<type>/' prefixed, the
same way exclude patterns for `--branches` and friends (without the
optional glob) already are.

Let's record in 'refs.c:struct ref_filter' which context the exclude
pattern is tied to, so refs.c:filter_refs() can decide if it should
ignore the prefix when trying to match.

Signed-off-by: Rafael Ascensão <rafa.almas@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

refs: show --exclude failure with --branches/tags/remot... Rafael Ascensão Mon, 12 Nov 2018 13:25:43 +0000 (13:25 +0000)

refs: show --exclude failure with --branches/tags/remotes=glob

The documentation of `--exclude=` option from rev-list and rev-parse
explicitly states that exclude patterns *should not* start with 'refs/'
when used with `--branches`, `--tags` or `--remotes`.

However, following this advice results in refereces not being excluded
if the next `--branches`, `--tags`, `--remotes` use the optional
inclusive glob.

Demonstrate this failure.

Signed-off-by: Rafael Ascensão <rafa.almas@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fetch-pack: drop custom loose object cacheJeff King Mon, 12 Nov 2018 14:55:58 +0000 (09:55 -0500)

fetch-pack: drop custom loose object cache

Commit 024aa4696c (fetch-pack.c: use oidset to check existence of loose
object, 2018-03-14) added a cache to avoid calling stat() for a bunch of
loose objects we don't have.

Now that OBJECT_INFO_QUICK handles this caching itself, we can drop the
custom solution.

Note that this might perform slightly differently, as the original code
stopped calling readdir() when we saw more loose objects than there were
refs. So:

1. The old code might have spent work on readdir() to fill the cache,
but then decided there were too many loose objects, wasting that
effort.

2. The new code might spend a lot of time on readdir() if you have a
lot of loose objects, even though there are very few objects to
ask about.

In practice it probably won't matter either way; see the previous commit
for some discussion of the tradeoff.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

sha1-file: use loose object cache for quick existence... Jeff King Mon, 12 Nov 2018 14:54:42 +0000 (09:54 -0500)

sha1-file: use loose object cache for quick existence check

In cases where we expect to ask has_sha1_file() about a lot of objects
that we are not likely to have (e.g., during fetch negotiation), we
already use OBJECT_INFO_QUICK to sacrifice accuracy (due to racing with
a simultaneous write or repack) for speed (we avoid re-scanning the pack
directory).

However, even checking for loose objects can be expensive, as we will
stat() each one. On many systems this cost isn't too noticeable, but
stat() can be particularly slow on some operating systems, or due to
network filesystems.

Since the QUICK flag already tells us that we're OK with a slightly
stale answer, we can use that as a cue to look in our in-memory cache of
each object directory. That basically trades an in-memory binary search
for a stat() call.

Note that it is possible for this to actually be _slower_. We'll do a
full readdir() to fill the cache, so if you have a very large number of
loose objects and a very small number of lookups, that readdir() may end
up more expensive.

This shouldn't be a big deal in practice. If you have a large number of
reachable loose objects, you'll already run into performance problems
(which you should remedy by repacking). You may have unreachable objects
which wouldn't otherwise impact performance. Usually these would go away
with the prune step of "git gc", but they may be held for up to 2 weeks
in the default configuration.

So it comes down to how many such objects you might reasonably expect to
have, how much slower is readdir() on N entries versus M stat() calls
(and here we really care about the syscall backing readdir(), like
getdents() on Linux, but I'll just call this readdir() below).

If N is much smaller than M (a typical packed repo), we know this is a
big win (few readdirs() followed by many uses of the resulting cache).
When N and M are similar in size, it's also a win. We care about the
latency of making a syscall, and readdir() should be giving us many
values in a single call. How many?

On Linux, running "strace -e getdents ls" shows a 32k buffer getting 512
entries per call (which is 64 bytes per entry; the name itself is 38
bytes, plus there are some other fields). So we can imagine that this is
always a win as long as the number of loose objects in the repository is
a factor of 500 less than the number of lookups you make. It's hard to
auto-tune this because we don't generally know up front how many lookups
we're going to do. But it's unlikely for this to perform significantly
worse.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

object-store: provide helpers for loose_objects_cacheJeff King Mon, 12 Nov 2018 14:50:56 +0000 (09:50 -0500)

object-store: provide helpers for loose_objects_cache

Our object_directory struct has a loose objects cache that all users of
the struct can see. But the only one that knows how to load the cache is
find_short_object_filename(). Let's extract that logic in to a reusable
function.

While we're at it, let's also reset the cache when we re-read the object
directories. This shouldn't have an impact on performance, as re-reads
are meant to be rare (and are already expensive, so we avoid them with
things like OBJECT_INFO_QUICK).

Since the cache is already meant to be an approximation, it's tempting
to skip even this bit of safety. But it's necessary to allow more code
to use it. For instance, fetch-pack explicitly re-reads the object
directory after performing its fetch, and would be confused if we didn't
clear the cache.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

sha1-file: use an object_directory for the main object dirJeff King Mon, 12 Nov 2018 14:50:39 +0000 (09:50 -0500)

sha1-file: use an object_directory for the main object dir

Our handling of alternate object directories is needlessly different
from the main object directory. As a result, many places in the code
basically look like this:

do_something(r->objects->objdir);

for (odb = r->objects->alt_odb_list; odb; odb = odb->next)
do_something(odb->path);

That gets annoying when do_something() is non-trivial, and we've
resorted to gross hacks like creating fake alternates (see
find_short_object_filename()).

Instead, let's give each raw_object_store a unified list of
object_directory structs. The first will be the main store, and
everything after is an alternate. Very few callers even care about the
distinction, and can just loop over the whole list (and those who care
can just treat the first element differently).

A few observations:

- we don't need r->objects->objectdir anymore, and can just
mechanically convert that to r->objects->odb->path

- object_directory's path field needs to become a real pointer rather
than a FLEX_ARRAY, in order to fill it with expand_base_dir()

- we'll call prepare_alt_odb() earlier in many functions (i.e.,
outside of the loop). This may result in us calling it even when our
function would be satisfied looking only at the main odb.

But this doesn't matter in practice. It's not a very expensive
operation in the first place, and in the majority of cases it will
be a noop. We call it already (and cache its results) in
prepare_packed_git(), and we'll generally check packs before loose
objects. So essentially every program is going to call it
immediately once per program.

Arguably we should just prepare_alt_odb() immediately upon setting
up the repository's object directory, which would save us sprinkling
calls throughout the code base (and forgetting to do so has been a
source of subtle bugs in the past). But I've stopped short of that
here, since there are already a lot of other moving parts in this
patch.

- Most call sites just get shorter. The check_and_freshen() functions
are an exception, because they have entry points to handle local and
nonlocal directories separately.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

handle alternates paths the same as the main object dirJeff King Mon, 12 Nov 2018 14:49:35 +0000 (09:49 -0500)

handle alternates paths the same as the main object dir

When we generate loose file paths for the main object directory, the
caller provides a buffer to loose_object_path (formerly sha1_file_name).
The callers generally keep their own static buffer to avoid excessive
reallocations.

But for alternate directories, each struct carries its own scratch
buffer. This is needlessly different; let's unify them.

We could go either direction here, but this patch moves the alternates
struct over to the main directory style (rather than vice-versa).
Technically the alternates style is more efficient, as it avoids
rewriting the object directory name on each call. But this is unlikely
to matter in practice, as we avoid reallocations either way (and nobody
has ever noticed or complained that the main object directory is copying
a few extra bytes before making a much more expensive system call).

And this has the advantage that the reusable buffers are tied to
particular calls, which makes the invalidation rules simpler (for
example, the return value from stat_sha1_file() used to be invalidated
by basically any other object call, but now it is affected only by other
calls to stat_sha1_file()).

We do steal the trick from alt_sha1_path() of returning a pointer to the
filled buffer, which makes a few conversions more convenient.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

sha1_file_name(): overwrite buffer instead of appendingJeff King Mon, 12 Nov 2018 14:48:56 +0000 (09:48 -0500)

sha1_file_name(): overwrite buffer instead of appending

The sha1_file_name() function is used to generate the path to a loose
object in the object directory. It doesn't make much sense for it to
append, since the the path we write may be absolute (i.e., you cannot
reliably build up a path with it). Because many callers use it with a
static buffer, they have to strbuf_reset() manually before each call
(and the other callers always use an empty buffer, so they don't care
either way). Let's handle this automatically.

Since we're changing the semantics, let's take the opportunity to give
it a more hash-neutral name (which will also catch any callers from
topics in flight).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rename "alternate_object_database" to "object_directory"Jeff King Mon, 12 Nov 2018 14:48:47 +0000 (09:48 -0500)

rename "alternate_object_database" to "object_directory"

In preparation for unifying the handling of alt odb's and the normal
repo object directory, let's use a more neutral name. This patch is
purely mechanical, swapping the type name, and converting any variables
named "alt" to "odb". There should be no functional change, but it will
reduce the noise in subsequent diffs.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

submodule--helper: prefer strip_suffix() to ends_with()Jeff King Mon, 12 Nov 2018 14:47:04 +0000 (09:47 -0500)

submodule--helper: prefer strip_suffix() to ends_with()

Using strip_suffix() lets us avoid repeating ourselves. It also makes
the handling of "/" a bit less subtle (we strip one less character than
we matched in order to leave it in place, but we can just as easily
include the "/" when we add more path components).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fsck: do not reuse child_process structsJeff King Mon, 12 Nov 2018 14:46:54 +0000 (09:46 -0500)

fsck: do not reuse child_process structs

The run-command API makes no promises about what is left in a struct
child_process after a command finishes, and it's not safe to simply
reuse it again for a similar command. In particular:

- if you use child->args or child->env_array, they are cleared after
finish_command()

- likewise, start_command() may point child->argv at child->args->argv;
reusing that would lead to accessing freed memory

- the in/out/err may hold pipe descriptors from the previous run

These two calls are _probably_ OK because they do not use any of those
features. But it's only by chance, and may break in the future; let's
reinitialize our struct for each program we run.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply --recount: allow "no-op hunks"Johannes Schindelin Mon, 12 Nov 2018 20:54:49 +0000 (12:54 -0800)

apply --recount: allow "no-op hunks"

When editing patches e.g. in `git add -e`, it is quite common that a
hunk ends up having no -/+ lines, i.e. it is now supposed to do nothing.

This use case was broken by ad6e8ed37bc1 (apply: reject a hunk that does
not do anything, 2015-06-01) with the good intention of catching a very
real, different issue in hand-edited patches.

So let's use the `--recount` option as the tell-tale whether the user
would actually be okay with no-op hunks.

Add a test case to make sure that this use case does not regress again.

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

status: rebase and merge can be in progress at the... Johannes Schindelin Mon, 12 Nov 2018 23:26:02 +0000 (15:26 -0800)

status: rebase and merge can be in progress at the same time

Since `git rebase -r` was introduced, that is possible. But our
machinery did not think that possible, and failed to say anything about
the rebase in progress when in the middle of a merge.

Let's work around that in the minimal fashion.

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

built-in rebase --skip/--abort: clean up stale .git... Johannes Schindelin Mon, 12 Nov 2018 23:26:01 +0000 (15:26 -0800)

built-in rebase --skip/--abort: clean up stale .git/<name> files

The scripted version of the rebase used to execute `git reset --hard`
when skipping or aborting. When we ported this to C, we did update the
worktree and some reflogs, but we failed to imitate `git reset --hard`'s
behavior regarding files in .git/ such as MERGE_HEAD.

Let's address this oversight.

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

rebase -i: include MERGE_HEAD into files to clean upJohannes Schindelin Mon, 12 Nov 2018 23:25:59 +0000 (15:25 -0800)

rebase -i: include MERGE_HEAD into files to clean up

Every once in a while, the interactive rebase makes sure that no stale
files are lying around. These days, we need to include MERGE_HEAD into
that set of files, as the `merge` command will generate them.

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

rebase -r: do not write MERGE_HEAD unless neededJohannes Schindelin Mon, 12 Nov 2018 23:25:58 +0000 (15:25 -0800)

rebase -r: do not write MERGE_HEAD unless needed

When we detect that a `merge` can be skipped because the merged commit
is already an ancestor of HEAD, we do not need to commit, therefore
writing the MERGE_HEAD file is useless.

It is actually worse than useless: a subsequent `git commit` will pick
it up and think that we want to merge that commit, still.

To avoid that, move the code that writes the MERGE_HEAD file to a
location where we already know that the `merge` cannot be skipped.

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

rebase -r: demonstrate bug with conflicting mergesJohannes Schindelin Mon, 12 Nov 2018 23:25:57 +0000 (15:25 -0800)

rebase -r: demonstrate bug with conflicting merges

When calling `merge` on a branch that has already been merged, that
`merge` is skipped quietly, but currently a MERGE_HEAD file is being
left behind and will then be grabbed by the next `pick` (that did
not want to create a *merge* commit).

Demonstrate this.

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

builtin/notes: remove unnecessary freeCarlo Marcelo Arenas Belón Sun, 11 Nov 2018 09:49:33 +0000 (01:49 -0800)

builtin/notes: remove unnecessary free

511726e4b1 ("builtin/notes: fix premature failure when trying to add
the empty blob", 2014-11-09) removed the check for !len but left a
call to free the buffer that will be otherwise NULL

Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
Acked-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-curl.c: xcurl_off_t is not portable (on 32 bit... Torsten Bögershausen Fri, 9 Nov 2018 17:41:10 +0000 (18:41 +0100)

remote-curl.c: xcurl_off_t is not portable (on 32 bit platfoms)

When setting
DEVELOPER = 1
DEVOPTS = extra-all

"gcc (Raspbian 6.3.0-18+rpi1+deb9u1) 6.3.0 20170516" errors out with
"comparison is always false due to limited range of data type"
"[-Werror=type-limits]"

It turns out that the function xcurl_off_t() has 2 flavours:

- It gives a warning 32 bit systems, like Linux
- It takes the signed ssize_t as a paramter, but the only caller is using
a size_t (which is typically unsigned these days)

The original motivation of this function is to make sure that sizes > 2GiB
are handled correctly. The curl documentation says:
"For any given platform/compiler curl_off_t must be typedef'ed to a 64-bit
wide signed integral data type"
On a 32 bit system "size_t" can be promoted into a 64 bit signed value
without loss of data, and therefore we may see the
"comparison is always false" warning.
On a 64 bit system it may happen, at least in theory, that size_t is > 2^63,
and then the promotion from an unsigned "size_t" into a signed "curl_off_t"
may be a problem.

One solution to suppress a possible compiler warning could be to remove
the function xcurl_off_t().

However, to be on the very safe side, we keep it and improve it:

- The len parameter is changed from ssize_t to size_t
- A temporally variable "size" is used, promoted int uintmax_t and the compared
with "maximum_signed_value_of_type(curl_off_t)".
Thanks to Junio C Hamano for this hint.

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Upcast size_t variables to uintmax_t when printingTorsten Bögershausen Sun, 11 Nov 2018 07:05:04 +0000 (08:05 +0100)

Upcast size_t variables to uintmax_t when printing

When printing variables which contain a size, today "unsigned long"
is used at many places.
In order to be able to change the type from "unsigned long" into size_t
some day in the future, we need to have a way to print 64 bit variables
on a system that has "unsigned long" defined to be 32 bit, like Win64.

Upcast all those variables into uintmax_t before they are printed.
This is to prepare for a bigger change, when "unsigned long"
will be converted into size_t for variables which may be > 4Gib.

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

p3400: replace calls to `git checkout -b' by `git check... Alban Gruin Fri, 9 Nov 2018 21:19:23 +0000 (22:19 +0100)

p3400: replace calls to `git checkout -b' by `git checkout -B'

p3400 makes a copy of the current repository to test git-rebase
performance, and creates new branches in the copy with `git checkout
-b'. If the original repository has branches with the same name as the
script is trying to create, this operation will fail.

This replaces these calls by `git checkout -B' to force the creation and
update of these branches.

Signed-off-by: Alban Gruin <alban.gruin@gmail.com>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

build: fix broken command-list.h generation with core... Nguyễn Thái Ngọc Duy Sat, 10 Nov 2018 18:23:23 +0000 (19:23 +0100)

build: fix broken command-list.h generation with core.autocrlf

The script generate-cmdlist.sh needs input text files in UNIX line
ending to work correctly. It's been fine even with core.autocrlf set
because Documentation/git-*.txt is forced LF conversion.

But this leaves out gitk.txt and also Documentation/*config.txt that
recently becomes new input for this script. Update the attribute file
to force LF on all *.txt files to be on the safe side.

For more details, please see 00ddc9d13c (Fix build with
core.autocrlf=true - 2017-05-09)

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rebase-interactive.c: remove the_repository referencesNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:49:10 +0000 (06:49 +0100)

rebase-interactive.c: remove the_repository references

While at there add a forward declaration for struct strbuf.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rerere.c: remove the_repository referencesNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:49:09 +0000 (06:49 +0100)

rerere.c: remove the_repository references

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

pack-*.c: remove the_repository referencesNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:49:08 +0000 (06:49 +0100)

pack-*.c: remove the_repository references

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

pack-check.c: remove the_repository referencesNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:49:07 +0000 (06:49 +0100)

pack-check.c: remove the_repository references

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

notes-cache.c: remove the_repository referencesNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:49:06 +0000 (06:49 +0100)

notes-cache.c: remove the_repository references

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

line-log.c: remove the_repository referenceNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:49:05 +0000 (06:49 +0100)

line-log.c: remove the_repository reference

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff-lib.c: remove the_repository referencesNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:49:04 +0000 (06:49 +0100)

diff-lib.c: remove the_repository references

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

delta-islands.c: remove the_repository referencesNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:49:03 +0000 (06:49 +0100)

delta-islands.c: remove the_repository references

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

cache-tree.c: remove the_repository referencesNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:49:02 +0000 (06:49 +0100)

cache-tree.c: remove the_repository references

This case is more interesting than other boring "remove the_repo"
commits because while we need access to the object database, we cannot
simply use r->index because unpack-trees.c can operate on a temporary
index, not $GIT_DIR/index. Ideally we should be able to pass an object
database to lookup_tree() but that ship has sailed.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

bundle.c: remove the_repository referencesNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:49:01 +0000 (06:49 +0100)

bundle.c: remove the_repository references

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

branch.c: remove the_repository referenceNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:49:00 +0000 (06:49 +0100)

branch.c: remove the_repository reference

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

bisect.c: remove the_repository referenceNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:48:59 +0000 (06:48 +0100)

bisect.c: remove the_repository reference

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

blame.c: remove implicit dependency the_repositoryNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:48:58 +0000 (06:48 +0100)

blame.c: remove implicit dependency the_repository

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

sequencer.c: remove implicit dependency on the_repositoryNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:48:57 +0000 (06:48 +0100)

sequencer.c: remove implicit dependency on the_repository

Note that the_hash_algo stays, even if we can easily replace it with
repo->hash_algo. My reason is I still believe tying hash_algo to a
struct repository is a wrong move. But if I'm wrong, we can always go
for another round of conversion.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

sequencer.c: remove implicit dependency on the_indexNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:48:56 +0000 (06:48 +0100)

sequencer.c: remove implicit dependency on the_index

Since we're going to pass 'struct repository *' around most of the
time instead of 'struct index_state *' because most sequencer.c
operations need more than just the index, the_repository is replaced
as well in the functions that now take 'struct repository
*'. the_repository is still present in this file, but total clean up
will be done later. It's not the main focus of this patch.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

transport.c: remove implicit dependency on the_indexNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:48:55 +0000 (06:48 +0100)

transport.c: remove implicit dependency on the_index

note, there's still another hidden dependency related to this: even
though we pass a repo to transport_push() we still use
is_bare_repository() which pretty much assumes the_repository (and
some other global state).

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

notes-merge.c: remove implicit dependency the_repositoryNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:48:54 +0000 (06:48 +0100)

notes-merge.c: remove implicit dependency the_repository

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

notes-merge.c: remove implicit dependency on the_indexNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:48:53 +0000 (06:48 +0100)

notes-merge.c: remove implicit dependency on the_index

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

list-objects.c: reduce the_repository referencesNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:48:52 +0000 (06:48 +0100)

list-objects.c: reduce the_repository references

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

list-objects-filter.c: remove implicit dependency on... Nguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:48:51 +0000 (06:48 +0100)

list-objects-filter.c: remove implicit dependency on the_index

While at there, since we have access to struct repository now,
eliminate the only the_repository reference in this file.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

wt-status.c: remove implicit dependency the_repositoryNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:48:50 +0000 (06:48 +0100)

wt-status.c: remove implicit dependency the_repository

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

wt-status.c: remove implicit dependency on the_indexNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:48:49 +0000 (06:48 +0100)

wt-status.c: remove implicit dependency on the_index

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fsck: mark strings for translationNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:16:15 +0000 (06:16 +0100)

fsck: mark strings for translation

Two die() are updated to start with lowercase to be consistent with
the rest.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fsck: reduce word legos to help i18nNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:16:14 +0000 (06:16 +0100)

fsck: reduce word legos to help i18n

These messages will be marked for translation later. Reduce word legos
and give translators almost full phrases. describe_object() is updated
so that it can be called from printf() twice.

While at there, remove \n from the strings to reduce a bit of work
from translators.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

parse-options.c: mark more strings for translationNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:16:13 +0000 (06:16 +0100)

parse-options.c: mark more strings for translation

One error is updated to start with lowercase to be consistent with the
rest.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

parse-options.c: turn some die() to BUG()Nguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:16:12 +0000 (06:16 +0100)

parse-options.c: turn some die() to BUG()

These two strings are clearly not for the user to see. Reduce the
violence in one string while at there.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

parse-options: replace opterror() with optname()Nguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:16:11 +0000 (06:16 +0100)

parse-options: replace opterror() with optname()

Introduce optname() that does the early half of original opterror() to
come up with the name of the option reported back to the user, and use
it to kill opterror(). The callers of opterror() now directly call
error() using the string returned by opterror() instead.

There are a few issues with opterror()

- it tries to assemble an English sentence from pieces. This is not
great for translators because we give them pieces instead of a full
sentence.

- It's a wrapper around error() and needs some hack to let the
compiler know it always returns -1.

- Since it takes a string instead of printf format, one call site has
to assemble the string manually before passing to it.

Using error() directly solves the second and third problems.

It kind helps the first problem as well because "%s does foo" does
give a translator a full sentence in a sense and let them reorder if
needed. But it has limitations, if the subject part has to change
based on the rest of the sentence, that language is screwed. This is
also why I try to avoid calling optname() when 'flags' is known in
advance.

Mark of these strings for translation as well while at there.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

repack: mark more strings for translationNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:16:10 +0000 (06:16 +0100)

repack: mark more strings for translation

Two strings are slightly updated to be consistent with the rest: die()
starts with lowercase.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote.c: mark messages for translationNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:16:09 +0000 (06:16 +0100)

remote.c: mark messages for translation

The two strings are slightly modified to be consistent with the rest:
die() and error() start with a lowercase.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote.c: turn some error() or die() to BUG()Nguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:16:08 +0000 (06:16 +0100)

remote.c: turn some error() or die() to BUG()

The first error, "internal error", is clearly a BUG(). The second two
are meant to catch calls with invalid parameters and should never
happen outside the test suite.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

reflog: mark strings for translationNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:16:07 +0000 (06:16 +0100)

reflog: mark strings for translation

One string "nothing to delete?" is rephrased to be more helpful.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

read-cache.c: add missing colon separatorsNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:16:06 +0000 (06:16 +0100)

read-cache.c: add missing colon separators

typechange_fmt and added_fmt should have a colon before "needs
update". Align the statements to make it easier to read and see. Also
drop the unnecessary ().

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

read-cache.c: mark more strings for translationNguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:16:05 +0000 (06:16 +0100)

read-cache.c: mark more strings for translation

There are a couple other improvements on these strings as well:

- add missing colon (as separator)
- quote paths
- provide more information on error messages
- keep first word in lowercase

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

read-cache.c: turn die("internal error") to BUG()Nguyễn Thái Ngọc Duy Sat, 10 Nov 2018 05:16:04 +0000 (06:16 +0100)

read-cache.c: turn die("internal error") to BUG()

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>