-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEqR4jDDCme6EynCdoIrEJKt3cR90FAll8ukcACgkQIrEJKt3c
R92ggA/+OOPMqkw45XX6Nd6MsdwBPK093dW007puAojKm5i0X7njoanIGPNcajjv
X44S9usihAx2WR/Fui5qgf4MLM/yMsam3wUonJnFVvZSmAv+iNjvxpDwyp/KetMA
P7E00SbJHSyJr6wB1XyYoBM2Sdye5rmPRuR11oxNW9Twlip0aBudCj43+U1ESWBm
iyXFidF83bhiJJd8as8VFaWwkJTar5eCSpwb7eN8H+nw5twoVLuH+HRdttQjw6e4
OYzrMJZyjqn88N3wsIlL21gPkeqFQ1IYThi4FlO7z3+AKBA2hvctYdlNI3bYzqCB
bkt3G5M43+QfjZVHW4XIYDdUak7Cs91U6FVqKhV5stkfCz/Mhjn7PByqEmZeX/tA
srA82Sx4R/IblhwnnFvWcB54/51QE0TlF6kOhOl3pverwcB0/5vPPK/TJ4QabG5G
hZO1x2xgNs3zuRoDTXa53DlrbH4KnCN0ep/O63P/Jbl6z2DzUwRq5RHhY6W0pwGB
cQKODatc885zkAEZzDMRO1E+ME6Yo6jQiwcKm0Og0UL7MKIRb5Guioqn83gHX+lh
s2KgZpK1u555KfkvtmVSzNQBbQlGF8UtFUuQlbyNYcAcJLrCNjjbfEohKAjnhG6L
qHf4LQMa0SH+PzdHlmUNHEYIpPwWS1T0gV7gf3gi66AcxOK60i8=
=kFuv
-----END PGP SIGNATURE-----
Merge tag 'upstream/0.26.0+dfsg.1'
Upstream version 0.26.0+dfsg.1
* tag 'upstream/0.26.0+dfsg.1': (367 commits)
DFSG changes
CHANGELOG: document git_filter_init and GIT_FILTER_INIT
Adding git_filter_init for initializing `git_filter` struct + unit test
adding GIT_FILTER_VERSION to GIT_FILTER_INIT as part of convention
tests: odb: add more low-level backend tests
tests: odb: implement `exists_prefix` for the fake backend
tests: odb: use correct OID length
tests: odb: have the fake backend detect ambiguous prefixes
tests: core: test initialization of `git_proxy_options`
tests: network: add missing include for `git_repository_new`
cmake: disable optimization on debug builds
cmake: set "-D_DEBUG" on non-Windows platforms
cmake: remove stale comment on precompiled headers
travis: replace use of deprecated homebrew/dupes tap
travis: install openssl explicitly
remote: ensure we can create an anon remote on inmemory repo
repository: don't fail to create config option in inmemory repo
repository_item_path: return ENOTFOUND when appropriate
tests: odb: add tests with multiple backends
tests: odb: allow passing fake objects to the fake backend
...
Introduce a new test suite "odb::backend::simple", which utilizes the
fake backend to exercise the ODB abstraction layer. While such tests
already exist for the case where multiple backends are put together, no
direct testing for functionality with a single backend exist yet.
The fake backend currently implements all reading functions except for
the `exists_prefix` one. Implement it to enable further testing of the
ODB layer.
The `search_object` function takes the OID length as one of its
parameters, where its maximum length is `GIT_OID_HEXSZ`. The `exists`
function of the fake backend used `GIT_OID_RAWSZ` though, leading to
only the first half of the OID being used when finding the correct
object.
In order to be able to test the ODB prefix functions, we need to be able
to detect ambiguous prefixes in case multiple objects with the same
prefix exist in the fake ODB. Extend `search_object` to detect ambiguous
queries and have callers return its error code instead of always
returning `GIT_ENOTFOUND`.
Initialization of the `git_proxy_options` structure is never tested
anywhere. Include it in our usual initialization test in
"core::structinit::compare".
A newly added test uses the `git_repository_new` function without the
corresponding header file being included. While this works due to the
compiler deducing the correct function signature, we should obviously
just include the function's declaration file.
While our debug builds on MSVC platforms already tune the code optimizer
to aid debugging code, all the other platforms still use the default
optimization level. This makes it hard for developers on these platforms
to actually debug code while maintaining his sanity due to optimizations
like inlined code, elided variables etc.
To help this common use case, we can simply follow the MSVC example and
turn off code optimization with "-O0" for debug builds. While it would
be preferable to instead use "-Og" supported by more modern compilers,
we cannot guarantee that this level is available on all supported
platforms.
In our code base, we have some occasions where we use the "_DEBUG"
preprocessor macro to enable additional code which should not be part of
release builds. While we define this flag on MSVC platforms, it is
guarded by the conditional `WIN32 AND NOT CYGWIN` on other platforms
since 19be3f9e6 (Improve MSVC compiler, linker flags, 2013-02-13). While
this condition can be fulfilled by the MSVC platform, it is never
encountered due to being part of the `ELSE` part of `IF (MSVC)`.
The intention of the conditional was most likely to avoid the
preprocessor macro on Cygwin platforms, but to include it on everthing
else. As such, the correct condition here would be `IF (NOT CYGWIN)`
instead. But digging a bit further, the condition is only ever used in
two places:
1. To skip the test in "core::structinit", which should also work on
Cygwin.
2. In "src/win32/git2.rc", where it is used to set additional file
flags. As this file is included in MSVC builds only, it cannot cause
any harm to set "_DEBUG" on Cygwin here.
As such, we can simply drop the conditional and always set "-D_DEBUG" on
all platforms.
In commit 9f75a9ce7 (Turning on runtime checks when building debug under
MSVC., 2012-03-30), we introduced a comment "Precompiled headers", which
actually refers to no related commands. Seeing that the comment never
had anything to refer to, we can simply remove it here.
The formulae provided by the homebrew/dupes tap are deprecated since at
least April 4, 2017, with formulae having been migrated to
homebrew/core.
Replace the deprecated reference to "homebrew/dupes/zlib" with only
"zlib".
Disambiguate error values: return `GIT_ENOTFOUND` when the item cannot
exist in the repository (perhaps because the repository is inmemory or
otherwise not backed by a filesystem), return `-1` when there is a hard
failure.
Previous to pulling out and extending the fake backend, it was quite
cumbersome to write tests for very specific scenarios regarding
backends. But as we have made it more generic, it has become much easier
to do so. As such, this commit adds multiple tests for scenarios with
multiple backends for the ODB.
The changes also include a test for a very targeted scenario. When one
backend found a matching object via `read_prefix`, but the last backend
returns `GIT_ENOTFOUND` and when object hash verification is turned off,
we fail to reset the error code to `GIT_OK`. This causes us to segfault
later on, when doing a double-free on the returned object.
Right now, the fake backend is quite restrained in the way how it
works: we pass it an OID which it is to return later as well as an error
code we want it to return. While this is sufficient for existing tests,
we can make the fake backend a little bit more generic in order to allow
us testing for additional scenarios.
To do so, we change the backend to not accept an error code and OID
which it is to return for queries, but instead a simple array of OIDs
with their respective blob contents. On each query, the fake backend
simply iterates through this array and returns the first matching
object.