]> git.proxmox.com Git - libgit2.git/log
libgit2.git
9 years agoOnly write index if updated when passing GIT_DIFF_UPDATE_INDEX
Pierre-Olivier Latour [Sat, 6 Jun 2015 01:26:49 +0000 (18:26 -0700)]
Only write index if updated when passing GIT_DIFF_UPDATE_INDEX

When diffing the index with the workdir and GIT_DIFF_UPDATE_INDEX has been passed,
the previous implementation was always writing the index to disk even if it wasn't
modified.

9 years agodiff: test we don't update index unnecessarily
Edward Thomson [Fri, 19 Jun 2015 18:11:12 +0000 (11:11 -0700)]
diff: test we don't update index unnecessarily

Test that workdir diffs, when presented with UPDATE_INDEX, only
write the index when they actually make a change.

9 years agoMerge pull request #3255 from libgit2/cmn/rename-unspecified
Edward Thomson [Thu, 25 Jun 2015 22:55:48 +0000 (18:55 -0400)]
Merge pull request #3255 from libgit2/cmn/rename-unspecified

Rename FALLBACK to UNSPECIFIED

9 years agoMerge pull request #3258 from arthurschreiber/patch-6
Carlos Martín Nieto [Thu, 25 Jun 2015 22:49:28 +0000 (00:49 +0200)]
Merge pull request #3258 from arthurschreiber/patch-6

List `libcurl` in the generated `libgit2.pc`

9 years agoList `libcurl` in the generated `libgit2.pc`
Arthur Schreiber [Thu, 25 Jun 2015 19:49:48 +0000 (21:49 +0200)]
List `libcurl` in the generated `libgit2.pc`

9 years agoMerge pull request #3256 from libgit2/cmn/fetch-spec-fetchhead
Edward Thomson [Thu, 25 Jun 2015 19:36:53 +0000 (15:36 -0400)]
Merge pull request #3256 from libgit2/cmn/fetch-spec-fetchhead

remote: insert refspecs with no rhs in FETCH_HEAD

9 years agoMerge pull request #3246 from libgit2/cmn/dont-grow-borrowed
Edward Thomson [Thu, 25 Jun 2015 19:26:43 +0000 (15:26 -0400)]
Merge pull request #3246 from libgit2/cmn/dont-grow-borrowed

Don't allow growing borrowed buffers

9 years agoremote: insert refspecs with no rhs in FETCH_HEAD
Carlos Martín Nieto [Thu, 25 Jun 2015 11:40:38 +0000 (13:40 +0200)]
remote: insert refspecs with no rhs in FETCH_HEAD

When a refspec contains no rhs and thus won't cause an explicit update,
we skip all the logic, but that means that we don't update FETCH_HEAD
with it, which is what the implicit rhs is.

Add another bit of logic which puts those remote heads in the list of
updates so we put them into FETCH_HEAD.

9 years agoRename FALLBACK to UNSPECIFIED
Carlos Martín Nieto [Thu, 25 Jun 2015 10:48:44 +0000 (12:48 +0200)]
Rename FALLBACK to UNSPECIFIED

Fallback describes the mechanism, while unspecified explains what the
user is thinking.

9 years agoAdd CHANGELOG entries
Carlos Martín Nieto [Wed, 24 Jun 2015 18:21:54 +0000 (20:21 +0200)]
Add CHANGELOG entries

9 years agobuffer: make use of EINVALID for growing a borrowed buffer
Carlos Martín Nieto [Wed, 24 Jun 2015 17:32:56 +0000 (19:32 +0200)]
buffer: make use of EINVALID for growing a borrowed buffer

This explains more closely what happens. While here, set an error
message.

9 years agoerrors: introduce EINVALID
Carlos Martín Nieto [Wed, 24 Jun 2015 17:32:07 +0000 (19:32 +0200)]
errors: introduce EINVALID

We've been using EINVALIDSPEC for a while to mean this, but that name
is too specific. Introduce this to be more explicit.

9 years agoblob: don't recomment using git_buf_grow
Carlos Martín Nieto [Tue, 23 Jun 2015 13:21:12 +0000 (15:21 +0200)]
blob: don't recomment using git_buf_grow

We currently recommend using `git_buf_grow` in order to make a buffer
make an owned copy of the memory it points to. This is not behaviour we
should encourage, so remove this recommendation.

The function itself is not changed, as we need to remain compatible, but
it will be changed not to allow usage on borrowed buffers.

9 years agobuffer: don't allow growing borrowed buffers
Carlos Martín Nieto [Tue, 23 Jun 2015 13:41:58 +0000 (15:41 +0200)]
buffer: don't allow growing borrowed buffers

When we don't own a buffer (asize=0) we currently allow the usage of
grow to copy the memory into a buffer we do own. This muddles the
meaning of grow, and lets us be a bit cavalier with ownership semantics.

Don't allow this any more. Usage of grow should be restricted to buffers
which we know own their own memory. If unsure, we must not attempt to
modify it.

9 years agoMerge pull request #3097 from libgit2/cmn/submodule-config-state
Carlos Martín Nieto [Wed, 24 Jun 2015 21:34:40 +0000 (23:34 +0200)]
Merge pull request #3097 from libgit2/cmn/submodule-config-state

Remove run-time configuration settings from submodules

9 years agoMerge pull request #3183 from libgit2/cmn/curl-stream
Carlos Martín Nieto [Wed, 24 Jun 2015 21:33:46 +0000 (23:33 +0200)]
Merge pull request #3183 from libgit2/cmn/curl-stream

Implement a cURL stream

9 years agoMerge pull request #3254 from ethomson/diff-binary-patch
Carlos Martín Nieto [Wed, 24 Jun 2015 19:13:23 +0000 (21:13 +0200)]
Merge pull request #3254 from ethomson/diff-binary-patch

Handle binary DIFFABLEness properly

9 years agoMerge pull request #3250 from ethomson/stash
Carlos Martín Nieto [Wed, 24 Jun 2015 17:47:34 +0000 (19:47 +0200)]
Merge pull request #3250 from ethomson/stash

Stash workdir correctly when added in the index, modified in the workdir

9 years agodiff: determine DIFFABLE-ness for binaries
Edward Thomson [Wed, 24 Jun 2015 16:06:41 +0000 (12:06 -0400)]
diff: determine DIFFABLE-ness for binaries

Always set `GIT_DIFF_PATCH_DIFFABLE` for all files, regardless of
binary-ness, so that the binary callback is invoked to either
show the binary contents, or just print the standard "Binary files
differ" message.  We may need to do deeper inspection for binary
files where we have avoided loading the contents into a file map.

9 years agodiff::binary tests: empty diff when forced binary
Edward Thomson [Wed, 24 Jun 2015 15:39:59 +0000 (11:39 -0400)]
diff::binary tests: empty diff when forced binary

Ensure that even when we're forcing a binary diff that we do not
assume that there *is* a diff.  There should be an empty diff for
no change.

9 years agoSecureTransport: use the curl stream if available
Carlos Martín Nieto [Wed, 24 Jun 2015 15:27:16 +0000 (17:27 +0200)]
SecureTransport: use the curl stream if available

If the libcurl stream is available, use that as the underlying stream
instead of the socket stream. This allows us to set a proxy for HTTPS
connections.

9 years agocurl: remove the encrypted param to the constructor
Carlos Martín Nieto [Thu, 11 Jun 2015 14:57:04 +0000 (16:57 +0200)]
curl: remove the encrypted param to the constructor

We do not want libcurl to perform the TLS negotiation for us, so we
don't need to pass this option.

9 years agohttp: ask for the curl stream for non-encrypted connections
Carlos Martín Nieto [Thu, 11 Jun 2015 14:54:48 +0000 (16:54 +0200)]
http: ask for the curl stream for non-encrypted connections

The TLS streams talk over the curl stream themselves, so we don't need
to ask for it explicitly. Do so in the case of the non-encrypted one so
we can still make use proxies in that case.

9 years agoopenssl: use the curl stream if available
Carlos Martín Nieto [Thu, 11 Jun 2015 14:50:44 +0000 (16:50 +0200)]
openssl: use the curl stream if available

When linking against libcurl, use it as the underlying transport instead
of straight sockets. We can't quite just give over the file descriptor,
as curl puts it into non-blocking mode, so we build a custom BIO so
OpenSSL sends the data through our stream, be it the socket or curl
streams.

9 years agocurl: extract certificate information
Carlos Martín Nieto [Tue, 9 Jun 2015 17:07:58 +0000 (19:07 +0200)]
curl: extract certificate information

The information is exposed by curl for some crypto libraries in the form
of name:content strings. We can't do much more than return this
information.

9 years agohttp: set the proxy if the stream supports it
Carlos Martín Nieto [Sun, 7 Jun 2015 12:51:10 +0000 (14:51 +0200)]
http: set the proxy if the stream supports it

Of the built-in ones, only cURL support it, but there's no reason a
user-provided stream wouldn't support it.

9 years agostream: add support for setting a proxy
Carlos Martín Nieto [Sun, 7 Jun 2015 12:42:13 +0000 (14:42 +0200)]
stream: add support for setting a proxy

If the stream claims to support this feature, we can let the transport
set the proxy.

We also set HTTPPROXYTUNNEL option so curl can create a tunnel through
the proxy which lets us create our own TLS session (if needed).

9 years agocurl: add CHANGELOG and THREADING entries
Carlos Martín Nieto [Sat, 6 Jun 2015 07:40:50 +0000 (09:40 +0200)]
curl: add CHANGELOG and THREADING entries

9 years agoImplement a curl stream
Carlos Martín Nieto [Fri, 5 Jun 2015 09:02:11 +0000 (11:02 +0200)]
Implement a curl stream

cURL has a mode in which it acts a lot like our streams, providing send
and recv functions and taking care of the TLS and proxy setup for us.

Implement a new stream which uses libcurl instead of raw sockets or the
TLS libraries directly. This version does not support reporting
certificates or proxies yet.

9 years agocurl: find and link with the library if it's available by default
Carlos Martín Nieto [Wed, 3 Jun 2015 02:57:00 +0000 (04:57 +0200)]
curl: find and link with the library if it's available by default

9 years agobinary diff: test that the diff and patch otputs are the same
Carlos Martín Nieto [Wed, 24 Jun 2015 12:25:36 +0000 (14:25 +0200)]
binary diff: test that the diff and patch otputs are the same

We test the generation of the textual patch via the patch function,
which are just one of two possibilities to get the output.

Add a second patch generation via the diff function to make sure both
outputs are in sync.

9 years agoMerge pull request #3251 from git-up/fixes
Edward Thomson [Wed, 24 Jun 2015 04:30:19 +0000 (00:30 -0400)]
Merge pull request #3251 from git-up/fixes

Fixes

9 years agoFixed invalid error handling in git_repository_open_ext()
Pierre-Olivier Latour [Wed, 24 Jun 2015 03:59:03 +0000 (20:59 -0700)]
Fixed invalid error handling in git_repository_open_ext()

9 years agoFixed Xcode 6.1 build warnings
Pierre-Olivier Latour [Wed, 24 Jun 2015 03:57:09 +0000 (20:57 -0700)]
Fixed Xcode 6.1 build warnings

9 years agoMerge pull request #3222 from git-up/conflicted
Edward Thomson [Wed, 24 Jun 2015 03:52:03 +0000 (23:52 -0400)]
Merge pull request #3222 from git-up/conflicted

Fixed GIT_DELTA_CONFLICTED not returned in some cases

9 years agoMerge pull request #3131 from urkud/const-char
Edward Thomson [Wed, 24 Jun 2015 03:40:02 +0000 (23:40 -0400)]
Merge pull request #3131 from urkud/const-char

Add `const` qualifier

9 years agoMerge pull request #3226 from libgit2/cmn/racy-diff-again
Edward Thomson [Wed, 24 Jun 2015 03:30:58 +0000 (23:30 -0400)]
Merge pull request #3226 from libgit2/cmn/racy-diff-again

racy-git, the missing link

9 years agoMerge pull request #3249 from libgit2/cmn/repo-version-check
Edward Thomson [Wed, 24 Jun 2015 03:17:18 +0000 (23:17 -0400)]
Merge pull request #3249 from libgit2/cmn/repo-version-check

Check the repository version

9 years agostash: save the workdir file when deleted in index
Edward Thomson [Tue, 23 Jun 2015 20:27:33 +0000 (16:27 -0400)]
stash: save the workdir file when deleted in index

When stashing the workdir tree, examine the index as well.  Using
a mechanism similar to `git_diff_tree_to_workdir_with_index`
allows us to determine that a file was added in the index and
subsequently modified in the working directory.  Without examining
the index, we would erroneously believe that this file was
untracked and fail to include it in the working directory tree.

Use a slightly modified `git_diff_tree_to_workdir_with_index` in
order to avoid some of the behavior custom to `git diff`.  In
particular, be sure to include the working directory side of a
file when it was deleted in the index.

9 years agostash tests: ensure we save the workdir file
Edward Thomson [Tue, 23 Jun 2015 20:27:17 +0000 (16:27 -0400)]
stash tests: ensure we save the workdir file

Ensure that when a file is added in the index and subsequently
modified in the working directory, the stashed working directory
tree contains the actual working directory contents.

9 years agogit_diff__merge: allow pluggable diff merges
Edward Thomson [Tue, 23 Jun 2015 14:29:59 +0000 (10:29 -0400)]
git_diff__merge: allow pluggable diff merges

9 years agodiff_tform: remove reversed copy of delta merger
Edward Thomson [Mon, 22 Jun 2015 22:43:13 +0000 (18:43 -0400)]
diff_tform: remove reversed copy of delta merger

Drop `git_diff__merge_like_cgit_reversed`, since it's a copy and
paste mess of slightly incompatible changes.

9 years agorepository: check the format version
Carlos Martín Nieto [Tue, 23 Jun 2015 18:44:27 +0000 (20:44 +0200)]
repository: check the format version

This is something we do on re-init but not when opening a
repository. This hasn't particularly mattered up to now as the version
has been 0 ever since the first release of git, but the times, they're
a-changing and we will soon see version 1 in the wild. We need to make
sure we don't open those.

9 years agorepository: don't error out if there is no version
Carlos Martín Nieto [Tue, 23 Jun 2015 18:43:49 +0000 (20:43 +0200)]
repository: don't error out if there is no version

git will assume the repository format version is 0 if the value is not
there. Do the same.

9 years agoFixed GIT_DELTA_CONFLICTED not returned in some cases
Pierre-Olivier Latour [Mon, 15 Jun 2015 18:14:40 +0000 (11:14 -0700)]
Fixed GIT_DELTA_CONFLICTED not returned in some cases

If an index entry for a file that is not in HEAD is in conflicted state,
when diffing HEAD with the index, the status field of the corresponding git_diff_delta was incorrectly reported as GIT_DELTA_ADDED instead of GIT_DELTA_CONFLICTED.

This was due to handle_unmatched_new_item() initially setting the status
to GIT_DELTA_CONFLICTED but then overriding it later with GIT_DELTA_ADDED.

9 years agoMerge pull request #3228 from git-up/diff_merge
Carlos Martín Nieto [Tue, 23 Jun 2015 12:08:20 +0000 (14:08 +0200)]
Merge pull request #3228 from git-up/diff_merge

Explicitly handle GIT_DELTA_CONFLICTED in git_diff_merge()

9 years agoExplicitly handle GIT_DELTA_CONFLICTED in git_diff_merge()
Pierre-Olivier Latour [Wed, 17 Jun 2015 15:55:09 +0000 (08:55 -0700)]
Explicitly handle GIT_DELTA_CONFLICTED in git_diff_merge()

This fixes a bug where if a file was in conflicted state in either diff,
it would not always remain in conflicted state in the merged diff.

9 years agoMerge pull request #3199 from ethomson/crlf
Carlos Martín Nieto [Mon, 22 Jun 2015 17:44:05 +0000 (19:44 +0200)]
Merge pull request #3199 from ethomson/crlf

CRLF

9 years agocrlf: give Unix the glory of autocrlf=true
Edward Thomson [Tue, 9 Jun 2015 00:42:28 +0000 (00:42 +0000)]
crlf: give Unix the glory of autocrlf=true

Perform LF->CRLF for core.autocrlf=true on non-Win32 because core
git does.

9 years agocrlf tests: ensure that Unix obeys autocrlf=true
Edward Thomson [Tue, 9 Jun 2015 03:50:00 +0000 (03:50 +0000)]
crlf tests: ensure that Unix obeys autocrlf=true

All platforms do terrible, horrible, no good, very bad translation
when core.autocrlf=true.  It's not just Windows!

9 years agogit_buf_text_lf_to_crlf: allow mixed line endings
Edward Thomson [Mon, 8 Jun 2015 17:51:28 +0000 (13:51 -0400)]
git_buf_text_lf_to_crlf: allow mixed line endings

Allow files to have mixed line endings instead of skipping processing
on them.

9 years agocrlf: use statistics to control to workdir filter
Edward Thomson [Mon, 8 Jun 2015 19:58:54 +0000 (15:58 -0400)]
crlf: use statistics to control to workdir filter

Use statistics (like core git) to control the behavior of the
to workdir CRLF filter.

9 years agoclar: support hierarchical test resource data
Edward Thomson [Mon, 8 Jun 2015 15:55:04 +0000 (11:55 -0400)]
clar: support hierarchical test resource data

Support hierarchical test resource data, such that you can have
`tests/resources/foo/bar` and move the `bar` directory in as
a fixture.

Calling `cl_fixture_sandbox` on a path that is not directly beneath
the test resources directory succeeds, placing that directory into
the test fixture.  (For example, `cl_fixture_sandbox("foo/bar")`
will sandbox the `foo/bar` directory as `bar`).

Add support for cleaning up directories created this way, by only
cleaning up the basename (in this example, `bar`) from the fixture
directory.

9 years agocrlf tests: posix known-good data
Edward Thomson [Tue, 9 Jun 2015 14:47:29 +0000 (14:47 +0000)]
crlf tests: posix known-good data

A corpus of files checked out with Git (Linux, 1.9.1) to ensure that
produce identical data when checking out using a CRLF filter.

9 years agocrlf tests: windows known-good data
Edward Thomson [Tue, 9 Jun 2015 14:37:14 +0000 (10:37 -0400)]
crlf tests: windows known-good data

A corpus of files checked out with Git for Windows (2.4.1.windows.1)
to ensure that we produce identical data when checking out using a
CRLF filter.

9 years agocrlf tests: use known-good data produced by git
Edward Thomson [Mon, 8 Jun 2015 13:08:01 +0000 (09:08 -0400)]
crlf tests: use known-good data produced by git

Given a variety of combinations of core.autocrlf settings and
attributes settings, test that we check out data into the working
directory the same as a known-good test resource created by git.git.

9 years agocrlf: script to generate expected crlf data
Edward Thomson [Mon, 8 Jun 2015 13:06:53 +0000 (09:06 -0400)]
crlf: script to generate expected crlf data

Include a shell script that will generate the expected CRLF data,
calling git.git to capture its output as a test resource for the
current platform.

9 years agocrlf: include utf8 resources in master branch
Edward Thomson [Mon, 8 Jun 2015 13:04:39 +0000 (09:04 -0400)]
crlf: include utf8 resources in master branch

Include the UTF8 and UTF8 BOM tests in the master crlf test
branch for completeness.

9 years agocrlf: include additional test resources
Edward Thomson [Fri, 5 Jun 2015 14:11:50 +0000 (10:11 -0400)]
crlf: include additional test resources

Include additional test data for CRLF tests: files with mixed
line endings and binary files.

9 years agoMerge pull request #3240 from libgit2/cmn/commit-header-field
Edward Thomson [Mon, 22 Jun 2015 15:24:20 +0000 (11:24 -0400)]
Merge pull request #3240 from libgit2/cmn/commit-header-field

commit: allow retrieving an arbitrary header field

9 years agosubmodule: remove the RESET enum values
Carlos Martín Nieto [Mon, 11 May 2015 10:01:08 +0000 (12:01 +0200)]
submodule: remove the RESET enum values

These are not useful anymore, as we don't affect the instance's
configuration.

9 years agosubmodule: test unsetting config options
Carlos Martín Nieto [Mon, 11 May 2015 09:57:05 +0000 (11:57 +0200)]
submodule: test unsetting config options

In addition to mapping enums to strings in the configuration, we need to
know to delete the configuration option when given the "none" or "no"
option.

9 years agosubmodule: handle writing out all enum values for settings
Carlos Martín Nieto [Sat, 9 May 2015 09:22:57 +0000 (11:22 +0200)]
submodule: handle writing out all enum values for settings

We currently do not handle those enum values which require us to set
"true" or unset variables in all cases. Use a common function which does
understand this by looking at our mapping directly.

9 years agoconfig: provide a function to reverse-lookup mapped cvars
Carlos Martín Nieto [Sat, 9 May 2015 09:22:27 +0000 (11:22 +0200)]
config: provide a function to reverse-lookup mapped cvars

9 years agoexamples: adjust to submodule status API change
Carlos Martín Nieto [Sat, 9 May 2015 08:42:00 +0000 (10:42 +0200)]
examples: adjust to submodule status API change

9 years agosubmodule: test more accurately for non-existence
Carlos Martín Nieto [Tue, 5 May 2015 14:29:38 +0000 (16:29 +0200)]
submodule: test more accurately for non-existence

The current code will always fail, but only because it's asking for a
string on a live config. Take a snapshot and make sure we fail with
ENOTFOUND instead of any old error.

9 years agosubmodule: fix potential leak in the tests
Carlos Martín Nieto [Tue, 5 May 2015 14:21:57 +0000 (16:21 +0200)]
submodule: fix potential leak in the tests

9 years agosubmodule: get rid of `_save()`
Carlos Martín Nieto [Tue, 5 May 2015 07:25:17 +0000 (09:25 +0200)]
submodule: get rid of `_save()`

We no longer have any setters which affect an instance, so
`git_submodule_save()` is no longer relevant.

9 years agosubmodule: make `_set_url()` affect the configuration
Carlos Martín Nieto [Tue, 5 May 2015 07:22:35 +0000 (09:22 +0200)]
submodule: make `_set_url()` affect the configuration

With this one, we can get rid of the edit_and_save test.

9 years agosubmodule: make `_set_branch()` affect the configuration
Carlos Martín Nieto [Tue, 5 May 2015 07:13:52 +0000 (09:13 +0200)]
submodule: make `_set_branch()` affect the configuration

9 years agosubmodule: make `_set_update_fetch_recurse_submodules()` affect the config
Carlos Martín Nieto [Tue, 5 May 2015 07:01:20 +0000 (09:01 +0200)]
submodule: make `_set_update_fetch_recurse_submodules()` affect the config

Similarly to the other ones. In this test we copy over testing
`RECURSE_YES` which shows an error in our handling of the `YES` variant
which we may have to port to the rest.

9 years agosubmodule: make `_set_update()` affect the configuration
Carlos Martín Nieto [Tue, 5 May 2015 06:35:29 +0000 (08:35 +0200)]
submodule: make `_set_update()` affect the configuration

Moving on with the removal of runtime-changing variables, the update
setting for a remote is whatever it was when it was looked up.

9 years agosubmodule: correct detection of existing submodules
Carlos Martín Nieto [Tue, 5 May 2015 04:14:40 +0000 (06:14 +0200)]
submodule: correct detection of existing submodules

During the cache deletion, the check for whether we consider a submodule
to exist got changed regarding submodules which are in the worktree but
not configured.

Instead of checking for the url field to be populated, check the
location where we've found it.

9 years agosubmodule: bring back finding by path
Carlos Martín Nieto [Tue, 5 May 2015 04:03:21 +0000 (06:03 +0200)]
submodule: bring back finding by path

During the removal of the cache, we also removed the ability to use
`_lookup()` to search by path rather than name. Bring this logic back.

9 years agosubmodule: add an ignore option to status
Carlos Martín Nieto [Mon, 4 May 2015 15:29:12 +0000 (17:29 +0200)]
submodule: add an ignore option to status

This lets us specify in the status call which ignore rules we want to
use (optionally falling back to whatever the submodule has in its
configuration).

This removes one of the reasons for having `_set_ignore()` set the value
in-memory. We re-use the `IGNORE_RESET` value for this as it is no
longer relevant but has a similar purpose to `IGNORE_FALLBACK`.

Similarly, we remove `IGNORE_DEFAULT` which does not have use outside of
initializers and move that to fall back to the configuration as well.

9 years agosubmodule: don't let status change an existing instance
Carlos Martín Nieto [Mon, 4 May 2015 15:09:21 +0000 (17:09 +0200)]
submodule: don't let status change an existing instance

As submodules are becomes more like values, we should not let a status
check to update its properties. Instead of taking a submodule, have
status take a repo and submodule name.

9 years agosubmodule: make set_ignore() affect the configuration
Carlos Martín Nieto [Mon, 4 May 2015 14:22:56 +0000 (16:22 +0200)]
submodule: make set_ignore() affect the configuration

Instead of affecting a particular instance, make it change the
configuration.

9 years agosubmodule: remove the per-repo cache
Carlos Martín Nieto [Mon, 27 Apr 2015 17:27:29 +0000 (19:27 +0200)]
submodule: remove the per-repo cache

Having this cache and giving them out goes against our multithreading
guarantees and it makes it impossible to use submodules in a
multi-threaded environment, as any thread can ask for a refresh which
may reallocate some string in the submodule struct which we've accessed
in a different one via a getter.

This makes the submodules behave more like remotes, where each object is
created upon request and not shared except explicitly by the user. This
means that some tests won't pass yet, as they assume they can affect the
submodule objects in the cache and that will affect later operations.

9 years agoMerge pull request #3239 from git-up/stash_index
Carlos Martín Nieto [Mon, 22 Jun 2015 14:58:14 +0000 (16:58 +0200)]
Merge pull request #3239 from git-up/stash_index

Write modified index in git_stash_apply()

9 years agoAdd a note about racy-git in CHANGELOG
Carlos Martín Nieto [Mon, 22 Jun 2015 12:20:13 +0000 (14:20 +0200)]
Add a note about racy-git in CHANGELOG

9 years agoindex: add a diff test for smudging a file which becomes empty
Carlos Martín Nieto [Mon, 22 Jun 2015 12:17:39 +0000 (14:17 +0200)]
index: add a diff test for smudging a file which becomes empty

Even though the file is empty and thus the size in the entry matches, we
should be able to detect it as a difference.

9 years agotests: move racy tests to the index
Carlos Martín Nieto [Sat, 20 Jun 2015 15:20:07 +0000 (17:20 +0200)]
tests: move racy tests to the index

They fit there much better, even though we often check by diffing, it's
about the behaviour of the index.

9 years agomerge: work around write-side racy protection when hacking the index
Carlos Martín Nieto [Sat, 20 Jun 2015 11:17:06 +0000 (13:17 +0200)]
merge: work around write-side racy protection when hacking the index

As we attempt to replicate a situation in which an older checkout has
put a file on disk with different filtering settings from us, set the
timestamp on the entry and file to a second before we're performing the
operation so the entry in the index counts as old.

This way we can test that we're not looking at the on-disk file when the
index has the entry and we detect it as clean.

9 years agocommit: allow retrieving an arbitrary header field
Carlos Martín Nieto [Mon, 22 Jun 2015 13:32:29 +0000 (15:32 +0200)]
commit: allow retrieving an arbitrary header field

This allows the user to look up fields which we don't parse in libgit2,
and allows them to access gpgsig or mergetag fields if they wish to
check the signature.

9 years agotests: set racy times manually
Carlos Martín Nieto [Sat, 20 Jun 2015 10:37:32 +0000 (12:37 +0200)]
tests: set racy times manually

9 years agotests: plug leaks in the racy test
Carlos Martín Nieto [Sat, 20 Jun 2015 10:36:58 +0000 (12:36 +0200)]
tests: plug leaks in the racy test

9 years agoindex: check racily clean entries more thoroughly
Carlos Martín Nieto [Thu, 18 Jun 2015 12:22:10 +0000 (14:22 +0200)]
index: check racily clean entries more thoroughly

When an entry has a racy timestamp, we need to check whether the file
itself has changed since we put its entry in the index. Only then do we
smudge the size field to force a check the next time around.

9 years agodiff: check files with the same or newer timestamps
Carlos Martín Nieto [Wed, 17 Jun 2015 12:34:10 +0000 (14:34 +0200)]
diff: check files with the same or newer timestamps

When a file on the workdir has the same or a newer timestamp than the
index, we need to perform a full check of the contents, as the update of
the file may have happened just after we wrote the index.

The iterator changes are such that we can reach inside the workdir
iterator from the diff, though it may be better to have an accessor
instead of moving these structs into the header.

9 years agoWrite modified index in git_stash_apply()
Pierre-Olivier Latour [Sun, 21 Jun 2015 08:06:20 +0000 (01:06 -0700)]
Write modified index in git_stash_apply()

Same as with git_stash_save(), there's no reason not to write the index
to disk since it has been modified.

9 years agoMerge pull request #3233 from ethomson/status_typechange
Carlos Martín Nieto [Sat, 20 Jun 2015 21:17:42 +0000 (23:17 +0200)]
Merge pull request #3233 from ethomson/status_typechange

Don't propagate workdir's mode to the index during diff's update index

9 years agodiff: preserve original mode in the index
Edward Thomson [Fri, 19 Jun 2015 15:32:26 +0000 (08:32 -0700)]
diff: preserve original mode in the index

When updating the index during a diff, preserve the original mode,
which prevents us from dropping the mode to what we have interpreted
as on our system (eg, what the working directory claims it to be,
which may be a lie on some systems.)

9 years agostatus: test that symlinks don't lose their mode
Edward Thomson [Fri, 19 Jun 2015 15:31:07 +0000 (08:31 -0700)]
status: test that symlinks don't lose their mode

Test to ensure that when status updates an index, it does not alter
the original mode for file types that are not supported (eg, symlinks
on Windows).

9 years agoMerge pull request #3238 from git-up/double_free
Edward Thomson [Sat, 20 Jun 2015 18:34:34 +0000 (14:34 -0400)]
Merge pull request #3238 from git-up/double_free

Fixed index being double-freed in stash tests

9 years agoMerge pull request #3236 from libgit2/cmn/index-checksum
Edward Thomson [Sat, 20 Jun 2015 18:05:02 +0000 (14:05 -0400)]
Merge pull request #3236 from libgit2/cmn/index-checksum

Use the checksum to check whether an index has been modified

9 years agoFixed index being double-freed in stash tests
Pierre-Olivier Latour [Sat, 20 Jun 2015 17:57:03 +0000 (10:57 -0700)]
Fixed index being double-freed in stash tests

9 years agoindex: make relative comparison use the checksum as well
Carlos Martín Nieto [Sat, 20 Jun 2015 14:17:28 +0000 (16:17 +0200)]
index: make relative comparison use the checksum as well

This is used by the submodule in order to figure out if the index has
changed since it last read it. Using a timestamp is racy, so let's make
it use the checksum, just like we now do for reloading the index itself.

9 years agoMerge pull request #3232 from Therzok/patch-2
Carlos Martín Nieto [Sat, 20 Jun 2015 10:14:49 +0000 (12:14 +0200)]
Merge pull request #3232 from Therzok/patch-2

Quote LIBSSH2_LIBRARIES call

9 years agotests: tick over five seconds instead of one
Carlos Martín Nieto [Thu, 18 Jun 2015 10:45:40 +0000 (12:45 +0200)]
tests: tick over five seconds instead of one

When ticking over one second, it can happen that the actual time ticks
over the same second between the time that we undermine our own race
protections and the time in which we perform the index update. Such
timing would make the time in the entries match the index' timestamp and
we have not gained anything.

Ticking over five seconds makes it so that if real-time rolls over that
second, our index is still ahead. This is still suboptimal as we're
dealing with timing, but five seconds should be long enough for any
reasonable test runner to finish the tests.

9 years agoindex: use the checksum to check whether it's been modified
Carlos Martín Nieto [Fri, 19 Jun 2015 20:05:08 +0000 (22:05 +0200)]
index: use the checksum to check whether it's been modified

We currently use a timetamp to check whether an index file has been
modified since we last read it, but this is racy. If two updates happen
in the same second and we read after the first one, we won't detect the
second one.

Instead read the SHA-1 checksum of the file, which are its last 20 bytes which
gives us a sure-fire way to detect whether the file has changed since we
last read it.

As we're now keeping track of it, expose an accessor to this data.

9 years agoindex: user a better assertion when comparing sizes
Carlos Martín Nieto [Fri, 19 Jun 2015 19:56:42 +0000 (21:56 +0200)]
index: user a better assertion when comparing sizes

This will tell us which numbers we were trying to compare, rather than
just telling us that they're different.