|
c2f274c6
|
2015-06-24T19:47:34
|
|
Merge pull request #3250 from ethomson/stash
Stash workdir correctly when added in the index, modified in the workdir
|
|
6a8f3fa8
|
2015-06-23T20:59:03
|
|
Fixed invalid error handling in git_repository_open_ext()
|
|
cc605e73
|
2015-06-23T23:52:03
|
|
Merge pull request #3222 from git-up/conflicted
Fixed GIT_DELTA_CONFLICTED not returned in some cases
|
|
bd670abd
|
2015-06-23T23:30:58
|
|
Merge pull request #3226 from libgit2/cmn/racy-diff-again
racy-git, the missing link
|
|
90177111
|
2015-06-23T16:27:33
|
|
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.
|
|
5ef43d41
|
2015-06-23T10:29:59
|
|
git_diff__merge: allow pluggable diff merges
|
|
83ba5e36
|
2015-06-22T18:43:13
|
|
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.
|
|
16c73d38
|
2015-06-23T20:44:27
|
|
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.
|
|
99e11cdd
|
2015-06-23T20:43:49
|
|
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.
|
|
8d8a2eef
|
2015-06-15T11:14:40
|
|
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.
|
|
cb63e7e8
|
2015-06-17T08:55:09
|
|
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.
|
|
146d0d08
|
2015-06-09T00:42:28
|
|
crlf: give Unix the glory of autocrlf=true
Perform LF->CRLF for core.autocrlf=true on non-Win32 because core
git does.
|
|
8293c8f9
|
2015-06-08T13:51:28
|
|
git_buf_text_lf_to_crlf: allow mixed line endings
Allow files to have mixed line endings instead of skipping processing
on them.
|
|
47e9a6cb
|
2015-06-08T15:58:54
|
|
crlf: use statistics to control to workdir filter
Use statistics (like core git) to control the behavior of the
to workdir CRLF filter.
|
|
0b6ed4f9
|
2015-06-22T11:24:20
|
|
Merge pull request #3240 from libgit2/cmn/commit-header-field
commit: allow retrieving an arbitrary header field
|
|
a3f42fe8
|
2015-06-22T15:32:29
|
|
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.
|
|
74975846
|
2015-06-18T14:22:10
|
|
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.
|
|
ff475375
|
2015-06-17T14:34:10
|
|
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.
|
|
e35b947b
|
2015-06-21T01:06:20
|
|
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.
|
|
96dd171e
|
2015-06-19T08:32:26
|
|
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.)
|
|
883cb642
|
2015-06-20T14:05:02
|
|
Merge pull request #3236 from libgit2/cmn/index-checksum
Use the checksum to check whether an index has been modified
|
|
624c949f
|
2015-06-20T16:17:28
|
|
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.
|
|
5e947c91
|
2015-06-19T22:05:08
|
|
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.
|
|
85a5e8eb
|
2015-06-17T09:00:23
|
|
Fixed Xcode 6.1 build warnings
|
|
a56db992
|
2015-06-17T08:15:49
|
|
Merge pull request #3219 from libgit2/cmn/racy-diff
Zero out racily-clean entries' file_size
|
|
892abf93
|
2015-06-16T17:23:12
|
|
checkout: allow workdir to contain checkout target
When checking out some file 'foo' that has been modified in the
working directory, allow the checkout to proceed (do not conflict)
if 'foo' is identical to the target of the checkout.
|
|
121c3171
|
2015-06-16T15:18:04
|
|
Introduce p_utimes and p_futimes
Provide functionality to set the time on a filesystem entry,
using utimes or futimes on POSIX type systems or SetFileTime
on Win32.
|
|
5f83758f
|
2015-06-16T10:40:46
|
|
Merge pull request #3209 from libgit2/cmn/double-author
commit: ignore multiple author fields
|
|
47a40d1d
|
2015-06-16T12:39:11
|
|
remote: return EINVALIDSPEC when given an empty URL
This is what we used to return in the settter and there's tests in
bindings which ask for this. There's no particular reason to stop doing
so.
|
|
aeb2b991
|
2015-06-16T09:20:36
|
|
Merge pull request #3221 from git-up/build_warnings
Fixed Xcode 6.1 build warnings
|
|
c4e6ab5f
|
2015-06-15T14:32:08
|
|
crlf: tick the index forward to work around racy-git behaviour
In order to avoid racy-git, we zero out the file size for entries with
the same timestamp as the index (or during the initial checkout). This
is the case in a couple of crlf tests, as the code is fast enough to do
everything in the same second.
As we know that we do not perform the modification just after writing
out the index, which is what this is designed to work around, tick the
mtime of the index file such that it doesn't agree with the files
anymore, and we do not zero out these entries.
|
|
316b820b
|
2015-06-15T09:55:40
|
|
index: zero the size of racily-clean entries
If a file entry has the same timestamp as the index itself, it is
considered racily-clean, as it may have been modified after the index
was written, but during the same second. We take extra steps to check
the contents, but this is just one part of avoiding races.
For files which do have changes but have not been updated in the index,
updating the on-disk index means updating its timestamp, which means we
would no longer recognise these entries as racy and we would trust the
timestamp to tell us whether they have changed.
In order to work around this, git zeroes out the file-size field in
entries with the same timestamp as the index in order to force the next
diff to check the contents. Do so in libgit2 as well.
|
|
b93dcd4c
|
2015-06-15T17:10:35
|
|
Merge pull request #3216 from dprofeta/fixTransactionVisibility
Fix visibility of transaction symbol
|
|
0f4d9c03
|
2015-06-15T09:52:40
|
|
Fixed Xcode 6.1 build warnings
|
|
25bd0aaf
|
2015-06-15T13:28:08
|
|
path: remove unnecessary readdir_r usage
Arguably all uses of readdir_r are unnecessary, but in this case
especially so, as the directory handle only exists within this function,
so we don't race with anybody.
|
|
2665fefa
|
2015-06-15T10:20:58
|
|
Merge pull request #3171 from libgit2/cmn/link-fallback
clone: fall back to copying when linking does not work
|
|
b224c388
|
2015-05-07T14:21:25
|
|
Fix in stransport_stream.c for usage of SecCopyErrorMessageString(), which is unavailable to iOS targets.
|
|
d4723c89
|
2015-06-15T08:17:45
|
|
Merge pull request #3177 from ethomson/binary_diff
Binary diffs: store deltas in the diff structure, include binary data in diff callbacks
|
|
f2dec481
|
2015-06-12T18:35:18
|
|
Merge pull request #3215 from jeffhostetler/windows_leak_diriter
Fix memory leak on windows in diriter.
|
|
5c757327
|
2015-06-12T18:14:32
|
|
Fix visibility of transaction symbol
Transaction.c did not include the visibility definition of its symbol
(that are in git2/transaction.h) and so was by default hidden.
|
|
95639dbb
|
2015-06-12T08:50:48
|
|
Fix memory leak on windows in diriter.
|
|
3208df37
|
2015-06-02T18:28:06
|
|
patch: include diff options on blob->blob diffs
|
|
8147b1af
|
2015-05-25T20:03:59
|
|
diff: introduce binary diff callbacks
Introduce a new binary diff callback to provide the actual binary
delta contents to callers. Create this data from the diff contents
(instead of directly from the ODB) to support binary diffs including
the workdir, not just things coming out of the ODB.
|
|
6d0a0aca
|
2015-06-11T23:20:28
|
|
Fixed some Secure Transport issues on OS X
The read and write callbacks passed to SSLSetIOFuncs() have been
rewritten to match the implementation used on opensource.apple.com and
other open source projects like VLC.
This change also fixes a bug where the read callback could get into
an infinite loop when 0 bytes were read.
|
|
65d69fe8
|
2015-06-11T08:24:58
|
|
commit: ignore multiple author fields
Some tools create multiple author fields. git is rather lax when parsing
them, although fsck does complain about them. This means that they exist
in the wild.
As it's not too taxing to check for them, and there shouldn't be a
noticeable slowdown when dealing with correct commits, add logic to skip
over these extra fields when parsing the commit.
|
|
fa934fab
|
2015-06-11T07:17:34
|
|
Merge pull request #3205 from ethomson/crlf_query
Introduce `git_filter_list_contains`
|
|
3e8c5e45
|
2015-06-10T16:43:48
|
|
Merge pull request #3174 from libgit2/cmn/idx-fill-hole
indexer: use lseek to extend the packfile
|
|
2eecc288
|
2015-06-10T14:43:49
|
|
Introduce `git_filter_list_contains`
`git_filter_list_contains` can be used to query a filter list to
determine if a given filter will be run.
|
|
50456801
|
2015-06-10T10:09:10
|
|
Fixed handling of GIT_DELTA_CONFLICTED in git_diff_find_similar()
git_diff_find_similar() now ignores git_diff_delta records with a status
of GIT_DELTA_CONFLICTED, which fixes a crash due to assert() being hit.
|
|
0137aba5
|
2015-06-10T11:08:05
|
|
filter: close the descriptor in case of error
When we hit an error writing to the next stream from a file, we jump to
'done' which currently skips over closing the file descriptor.
Make sure to close the descriptor if it has been set to a valid value.
|
|
969d4b70
|
2015-06-10T10:59:56
|
|
object: correct the expected ID size in prefix lookup
We take in a possibly partial ID by taking a length and working off of
that to figure out whether to just look up the object or ask the
backends for a prefix lookup.
Unfortunately we've been checking the size against `GIT_OID_HEXSZ` which
is the size of a *string* containing a full ID, whereas we need to check
against the size we can have when it's a 20-byte array.
Change the checks and comment to use `GIT_OID_RAWSZ` which is the
correct size of a git_oid to have when full.
|
|
878293f7
|
2015-06-10T10:44:14
|
|
pack: use git_buf when building the index name
The way we currently do it depends on the subtlety of strlen vs sizeof
and the fact that .pack is one longer than .idx. Let's use a git_buf so
we can express the manipulation we want much more clearly.
|
|
ca2857d8
|
2015-06-10T10:30:08
|
|
merge: actually increment the counts, not the pointers
`merge_diff_list_count_candidates()` takes pointers to the source and
target counts, but when it comes time to increase them, we're increasing
the pointer, rather than the value it's pointing to.
Dereference the value to increase.
|
|
2d73075a
|
2015-06-10T10:23:08
|
|
cache: add a check for a failed allocation
Rather minimal change, but it's the kind of thing we should do.
|
|
a166466c
|
2015-06-09T17:06:28
|
|
Merge pull request #3198 from libgit2/cmn/coverity
A few fixes from Coverity
|
|
02980bdc
|
2015-06-09T16:53:07
|
|
Initialize a few variables
Coverity complains about the git_rawobj ones because we use a loop in
which we keep remembering the old version, and we end up copying our
object as the base, so we want to have the data pointer be NULL.
|
|
81be2f46
|
2015-06-09T16:01:29
|
|
ssh: move NULL check to the free function
Let `ssh_stream_free()` take a NULL stream, as free functions should,
and remove the check from the connection setup.
The connection setup would not need the check anyhow, as we always have
a stream by the time we reach this code.
|
|
82a7a24c
|
2015-06-08T15:22:01
|
|
Merge pull request #3165 from ethomson/downcase
Downcase
|
|
20f8edb7
|
2015-06-04T02:22:10
|
|
global: Ensure we free our SSL context.
|
|
b6011e29
|
2015-06-07T15:10:28
|
|
Merge pull request #3185 from libgit2/cmn/foreach-cancel-loose
path: error out if the callback returns an error
|
|
fdb82dcd
|
2015-06-07T15:10:13
|
|
Merge pull request #3175 from git-up/build_warnings
Fixed build warnings on Xcode 6.1
|
|
2785544f
|
2015-06-07T10:45:39
|
|
remote: some error-handling issues from Coverity
|
|
8da44047
|
2015-06-06T03:55:28
|
|
path: error out if the callback returns an error
When the callback returns an error, we should stop immediately. This
broke when trying to make sure we pass specific errors up the chain.
This broke cancelling out of the loose backend's foreach.
|
|
9f3c18e2
|
2015-06-02T08:36:15
|
|
Fixed build warnings on Xcode 6.1
|
|
d71e3b25
|
2015-06-02T10:23:54
|
|
Change error when running out of ssh agent keys
|
|
aa57231f
|
2015-06-02T10:25:22
|
|
indexer: use lseek to extend the packfile
We've been using `p_ftruncate()` to extend the packfile in order to mmap
it and write the new data into it. This works well in the general case,
but as truncation does not allocate space in the filesystem, it must do
so when we write data to it.
The only way the OS has to indicate a failure to allocate space is via
SIGBUS which means we tried to write outside the file. This will cause
everyone to crash as they don't expect to handle this signal.
Switch to using `p_lseek()` and `p_write()` to extend the file in a way
which tells the filesystem to allocate the space for the missing
data. We can then be sure that we have space to write into.
|
|
10940736
|
2015-06-01T22:15:11
|
|
clone: fall back to copying when linking does not work
We use heuristics to make a decent guess at when we can save time and
space by linking object files during a clone. Unfortunately checking the
device id isn't enough, as those would be the same during e.g. a bind-mount,
but the OS still does not allow us to link between mounts of the same
filesystem.
If we fail to perform the links, fall back to copying the contents into
a new file as a last attempt.
|
|
ec0c4c40
|
2015-05-04T11:59:20
|
|
remote: apply insteadOf configuration.
A remote's URLs are now modified according to the url.*.insteadOf
and url.*.pushInsteadOf configurations. This allows a user to
replace URL prefixes by setting the corresponding keys. E.g.
"url.foo.insteadOf = bar" would replace the prefix "bar" with the
new prefix "foo".
|
|
75a4636f
|
2015-05-29T16:56:38
|
|
git__tolower: a tolower() that isn't dumb
Some brain damaged tolower() implementations appear to want to
take the locale into account, and this may require taking some
insanely aggressive lock on the locale and slowing down what should
be the most trivial of trivial calls for people who just want to
downcase ASCII.
|
|
006548da
|
2015-05-29T16:07:51
|
|
git__strcasecmp: treat input bytes as unsigned
Treat input bytes as unsigned before doing arithmetic on them,
lest we look at some non-ASCII byte (like a UTF-8 character) as a
negative value and perform the comparison incorrectly.
|
|
2c8550f0
|
2015-05-29T19:38:11
|
|
Merge pull request #3157 from mgorny/ssh_memory_auth
Support getting SSH keys from memory, pt. 2
|
|
885b94aa
|
2015-05-28T15:26:13
|
|
Rename GIT_EMERGECONFLICT to GIT_ECONFLICT
We do not error on "merge conflicts"; on the contrary, merge conflicts
are a normal part of merging. We only error on "checkout conflicts",
where a change exists in the index or the working directory that would
otherwise be overwritten by performing the checkout.
This *may* happen during merge (after the production of the new index
that we're going to checkout) but it could happen during any checkout.
|
|
ff8d635a
|
2015-05-28T18:45:57
|
|
Merge pull request #3139 from ethomson/diff_conflicts
Include conflicts when diffing
|
|
fb92b48d
|
2015-05-28T10:13:07
|
|
Merge pull request #3149 from libgit2/cmn/upstream-matching-push
Fill the pointers for matching refspecs
|
|
2b922832
|
2015-05-28T16:09:17
|
|
Merge pull request #3127 from libgit2/cmn/remote-fixups
Tackle remote API issues from bindings
|
|
9b3e41f7
|
2015-05-19T18:29:15
|
|
index_add_all: remove conflicts when no wd file
If there exists a conflict in the index, but no file in the working
directory, this implies that the user wants to accept the resolution
by removing the file. Thus, remove the conflict entry from the
index, instead of trying to add a (nonexistent) file.
|
|
10549a2d
|
2015-05-19T18:26:04
|
|
Introduce `GIT_DIFF_FLAG_EXISTS`
Mark the `old_file` and `new_file` sides of a delta with a new bit,
`GIT_DIFF_FLAG_EXISTS`, that introduces that a particular side of
the delta exists in the diff.
This is useful for indicating whether a working directory item exists
or not, in the presence of a conflict. Diff users may have previously
used DELETED to determine this information.
|
|
253a05f7
|
2015-05-19T11:31:15
|
|
diff: prettify `maybe_modified` a little
|
|
9f545b9d
|
2015-05-19T11:23:59
|
|
introduce `git_index_entry_is_conflict`
It's not always obvious the mapping between stage level and
conflict-ness. More importantly, this can lead otherwise sane
people to write constructs like `if (!git_index_entry_stage(entry))`,
which (while technically correct) is unreadable.
Provide a nice method to help avoid such messy thinking.
|
|
191e97a0
|
2015-05-18T18:15:17
|
|
diff conflicts: don't include incorrect ID
Since a diff entry only concerns a single entry, zero the information
for the index side of a conflict. (The index entry would otherwise
erroneously include the lowest-stage index entry - generally the
ancestor of a conflict.)
Test that during status, the index side of the conflict is empty.
|
|
7877146f
|
2015-05-18T15:13:43
|
|
diff: for conflicts w/o workdir, blank nitem side
Make sure that we provide a blanked nitem side when the item does not
exist in the working directory.
|
|
7c948014
|
2015-05-14T14:00:29
|
|
diff/status: introduce conflicts
When diffing against an index, return a new `GIT_DELTA_CONFLICTED`
delta type for items that are conflicted. For a single file path,
only one delta will be produced (despite the fact that there are
multiple entries in the index).
Index iterators now have the (optional) ability to return conflicts
in the index. Prior to this change, they would be omitted, and callers
(like diff) would omit conflicted index entries entirely.
|
|
d67f270e
|
2015-05-14T13:30:29
|
|
index: validate mode of new conflicts
|
|
3ab5a659
|
2015-05-14T12:54:39
|
|
index: remove error message in non-error remove
If `git_index_remove_bypath` does no work, and returns an OK error
code, it should not set an error message.
|
|
ecd60a56
|
2015-05-14T11:52:48
|
|
conflicts: when adding conflicts, remove staged
When adding a conflict for some path, remove the staged entry.
Otherwise, an illegal index (with both stage 0 and high-stage
entries) would result.
|
|
1b6c26db
|
2015-05-13T17:47:26
|
|
diff: wrap the iterator functions
Wrap the iterator current / advance functions so that we can extend
them, but also handle GIT_ITEROVER cases in the iterator funcs
instead of the callers.
|
|
aa3af01d
|
2015-05-13T15:52:21
|
|
index iterator: optionally include conflicts
|
|
9566ce43
|
2015-05-18T14:42:35
|
|
remote: call the update_tips callback for opportunisitc updates
These are updates, same as the rest, we should call this callback. As we
are using the callback, let's make sure to skip unnecessary updates.
|
|
c6e942fb
|
2015-05-17T15:19:22
|
|
remote: validate refspecs before adding to config
When we moved from acting on the instance to acting on the
configuration, we dropped the validation of the passed refspec, which
can lead to writing an invalid refspec to the configuration. Bring that
validation back.
|
|
ae5b9362
|
2015-05-17T15:11:45
|
|
remote: remove fetch parameter from create_anonymous
An anonymous remote is not configured and cannot therefore have
configured refspecs. Remove the parameter which adds this from the
constructor.
|
|
2629fc87
|
2015-05-24T22:33:55
|
|
cred: Check for null values when getting key from memory
The public key field is optional and as such can take NULL. Account for
that and do not call strlen() on NULL values. Also assert() for non-NULL
values of username & private key.
|
|
f7142b5e
|
2015-05-24T18:38:47
|
|
cred: Declare GIT_CREDTYPE_SSH_MEMORY unconditionally
Declare GIT_CREDTYPE_SSH_MEMORY to have consistent API independently of
whether libgit2 was built with or without in-memory key passing support.
Or rather, to have it at all since build-time definitions are not stored
in headers.
|
|
08e6b875
|
2015-03-19T14:57:15
|
|
Return an error when ssh memory credentials are not supported.
To not modify the external api.
|
|
7a8b8503
|
2015-03-17T09:19:15
|
|
Add support to read ssh keys from memory.
|
|
1ecbcd8e
|
2015-05-26T19:16:27
|
|
Fix ident replacement to match Git behavior
Git inserts a space after the SHA1 (as of 2.1.4 at least), so do the
same.
|
|
c11daac9
|
2015-05-22T22:12:40
|
|
Merge pull request #3151 from ethomson/thinpack
Thin packs: don't
|
|
e2dd3735
|
2015-05-22T11:20:47
|
|
indexer: avoid loading already existent bases
When thickening a pack, avoid loading already loaded bases and
trying to insert them all over again.
|
|
38c10ecd
|
2015-05-16T19:00:50
|
|
indexer: don't look for the index we're creating
When creating an index, know that we do not have an index for
our own packfile, preventing some unnecessary file opens and
error reporting.
|
|
2540487f
|
2015-05-22T12:53:52
|
|
Merge pull request #3108 from libgit2/cmn/ssl-no-want
openssl: don't try to handle WANT_READ or WANT_WRITE
|
|
5014fe95
|
2015-05-22T12:24:09
|
|
branch: error out if we cannot find the remote
When we look for which remote corresponds to a remote-tracking branch,
we look in the refspecs to see which ones matches. If none do, we should
abort. We currently ignore the error message from this operation, so
let's not do that anymore.
As part of the test we're writing, let's test for the expected behaviour
if we cannot find a refspec which tells us what the remote-tracking
branch for a remote would look like.
|