Commit Graph

3355 Commits

Author SHA1 Message Date
Edward Thomson
1ee2ef87ec status access by index, providing more details to callers 2013-06-17 10:03:14 -07:00
Vicent Marti
09c2f91c15 branch: More obvious semantics in foreach 2013-06-17 18:48:02 +02:00
yorah
2ad7a4dc92 ref: free the last ref when cancelling git_branch_foreach()
Also fixed an assert typo on nulltoken's HEAD
2013-06-17 18:29:05 +02:00
yorah
0525fb7ef3 cred: deploy git__memzero to clear memory holding a password 2013-06-17 15:42:34 +02:00
yorah
3425fee637 util: git__memzero() tweaks
On Linux: fix a warning message related to the volatile qualifier (cast)
On Windows: use SecureZeroMemory()

On both, inline the call, so that no entry point can lead back to this "secure" memory zeroing.
2013-06-17 15:42:33 +02:00
yorah
2da72fb21c fileops: fix invalid read 2013-06-14 20:01:35 +02:00
nulltoken
c1cf1af46a cmake: Add option to specify the name of the binary 2013-06-13 10:12:44 +02:00
Vicent Marti
5a6e45cc84 Revert "cmake: Update Windows resources to reflect the optional vendor string"
This reverts commit 095bfd7487.
2013-06-12 21:14:04 +02:00
Vicent Marti
6de9b2ee14 util: It's called memzero 2013-06-12 21:10:33 +02:00
Vicent Marti
eb58e2d0be Merge remote-tracking branch 'arrbee/minor-paranoia' into development 2013-06-12 21:05:48 +02:00
Russell Belfer
37f66e8263 Fix Windows warnings
This fixes problems with missing function prototypes and 64-bit
data issues on Windows.
2013-06-12 15:21:21 -07:00
Vicent Martí
88c401bec8 Merge pull request #1643 from ethomson/rename_source
Keep data about source of similarity
2013-06-12 14:54:32 -07:00
Vicent Martí
93da7af707 Merge pull request #1642 from arrbee/diff-function-context
Diff code reorg plus function context in diff headers
2013-06-12 14:52:47 -07:00
Russell Belfer
360f42f4b3 Fix diff header naming issues
This makes the git_diff_patch definition private to diff_patch.c
and fixes a number of other header file naming inconsistencies to
use `git_` prefixes on functions and structures that are shared
between files.
2013-06-12 14:18:09 -07:00
Russell Belfer
ef3374a8a8 Improvements to git_array
This changes the size data to uint32_t, fixes the array growth
logic to use a simple 1.5x multiplier, and uses a generic inline
function for growing the array to make the git_array_alloc API
feel more natural (i.e. it returns a pointer to the new item).
2013-06-12 13:46:44 -07:00
Russell Belfer
f9c824c592 Add patch from blobs API
This adds two new public APIs: git_diff_patch_from_blobs and
git_diff_patch_from_blob_and_buffer, plus it refactors the code
for git_diff_blobs and git_diff_blob_to_buffer so that they code
is almost entirely shared between these APIs, and adds tests for
the new APIs.
2013-06-12 11:55:27 -07:00
Russell Belfer
54faddd299 Fix some diff driver memory leaks 2013-06-12 11:54:11 -07:00
Russell Belfer
42e6cf7860 Add diff drivers tests (and fix bugs)
This adds real tests for user-configured diff drivers and in the
process found a bunch of bugs.
2013-06-11 17:45:14 -07:00
Russell Belfer
5dc98298a1 Implement regex pattern diff driver
This implements the loading of regular expression pattern lists
for diff drivers that search for function context in that way.
This also changes the way that diff drivers update options and
interface with xdiff APIs to make them a little more flexible.
2013-06-11 11:22:22 -07:00
Carlos Martín Nieto
24ec69998d signature: extend trimming to more whitespace
There are all sorts of misconfiguration in the wild. We already rely
on the signature constructor to trim SP. Extend the logic to use
`isspace` to decide whether a character should be trimmed.
2013-06-11 11:01:45 +02:00
Russell Belfer
3eadfecd32 start implementing diff driver registry 2013-06-10 15:24:20 -07:00
Russell Belfer
2f77d8f15d Fix some memory leaks 2013-06-10 14:16:56 -07:00
Russell Belfer
596b121ae4 fix missing file and bad prototype 2013-06-10 14:16:49 -07:00
Edward Thomson
690bf41ce5 keep source similarity in rename detection 2013-06-10 15:18:38 -05:00
Russell Belfer
114f5a6c41 Reorganize diff and add basic diff driver
This is a significant reorganization of the diff code to break it
into a set of more clearly distinct files and to document the new
organization.  Hopefully this will make the diff code easier to
understand and to extend.

This adds a new `git_diff_driver` object that looks of diff driver
information from the attributes and the config so that things like
function content in diff headers can be provided.  The full driver
spec is not implemented in the commit - this is focused on the
reorganization of the code and putting the driver hooks in place.

This also removes a few #includes from src/repository.h that were
overbroad, but as a result required extra #includes in a variety
of places since including src/repository.h no longer results in
pulling in the whole world.
2013-06-10 10:10:39 -07:00
Russell Belfer
3e9e6cdaff Add safe memset and use it
This adds a `git__memset` routine that will not be optimized away
and updates the places where I memset() right before a free() call
to use it.
2013-06-07 09:54:33 -07:00
Russell Belfer
f7e5615086 Make mkdir early exit cases clearer
There are two places where git_futils_mkdir should exit early or
at least do less.  The first is when using GIT_MKDIR_SKIP_LAST
and having that flag leave no directory left to create; it was
being handled previously, but the behavior was subtle.  Now I put
in a clear explicit check that exits early in that case.

The second is when there is no directory to create, but there is
a valid path that should be verified.  I shifted the logic a bit
so we'll be better about not entering the loop than that happens.
2013-06-05 15:41:42 -07:00
Russell Belfer
7000f3fa7b Move some diff helpers into separate file 2013-06-05 12:13:54 -07:00
Russell Belfer
aad6967be1 Basic function context header
This implements a basic callback to extract function context for
a diff.  It always uses the same search heuristic right now with
no regular expressions or language-specific variants.  Those will
come next, I think.
2013-06-05 12:13:54 -07:00
Russell Belfer
999d4405a6 Simplify git_futils_mkdir
This routine was (is) pretty complicated, but given the recent
changes, it seemed like it could be simplified a bit.
2013-06-05 12:02:28 -07:00
Vicent Marti
2e1fa15fcd I'm a dick 2013-06-05 19:00:16 +02:00
Russell Belfer
b832ecf71c Ensure git_futils_mkdir won't mkdir root
This makes sure that git_futils_mkdir always skips over the root
directory at a minimum, even on platforms where the root is not
simply '/'.  Also, this removes the GIT_WIN32 ifdef in favor of
making EACCES as a potentially recoverable error on all platforms.
2013-06-05 09:46:51 -07:00
Vicent Martí
e236b37ff7 Merge pull request #1633 from jamill/directory_create_fix
Allow creation of directories under the volume root in Win32
2013-06-05 09:16:19 -07:00
Jameson Miller
daf98cb2ed Allow creation of directories under the volume root in Win32
We ran into an issue where cloning a repository to a folder
directly underneath the root of a volume (e.g. 'd:\libgit2')
would fail with an access denied error. This was traced down
to a call to make a directory that is the root (e.g. 'd:') could
return an error indicated access denied instead of an error
indicating the path already exists. This change now handles
the access denied error on Win32 and checks for the existence
of the folder.
2013-06-05 12:05:29 -04:00
Vicent Martí
947fad4f7f Merge pull request #1624 from libgit2/vmg/full-ref-iterator
Breaking RefDB changes
2013-06-03 09:28:58 -07:00
Scott J. Goldman
dc33b3d7b2 Don't bail on parsing commits with an invalid timezone
git doesn't do that, and it's not something that's usually
actionable to fix. if you have a git repository with one bad
timezone in the history, it's too late to change it most likely.
2013-06-02 02:13:45 -07:00
Russell Belfer
03a8907078 Make git_index_read_tree preserve stat cache
Instead of just blowing away the stat cache data when loading a
new tree into the index, this checks if each loaded item has a
corresponding existing item with the same OID and if so, copies
the stat data from the old item to the new one so it will not be
blown away.
2013-05-31 21:49:40 -07:00
Russell Belfer
1a42dd17eb Mutex init can fail
It is obviously quite a serious problem if this happens, but mutex
initialization can fail and we should detect it.  It's a bit like
a memory allocation failure, in that you're probably pretty screwed
if this occurs, but at least we'll catch it.
2013-05-31 14:13:11 -07:00
Russell Belfer
f658dc433c Zero memory for major objects before freeing
By zeroing out the memory when we free larger objects (i.e. those
that serve as collections of other data, such as repos, odb, refdb),
I'm hoping that it will be easier for libgit2 bindings to find
errors in their object management code.
2013-05-31 14:09:58 -07:00
Russell Belfer
cee695ae6b Make iterators use GIT_ITEROVER & smart advance
1. internal iterators now return GIT_ITEROVER when you go past the
   last item in the iteration.
2. git_iterator_advance will "advance" to the first item in the
   iteration if it is called immediately after creating the
   iterator, which allows a simpler idiom for basic iteration.
3. if git_iterator_advance encounters an error reading data (e.g.
   a missing tree or an unreadable file), it returns the error
   but also attempts to advance past the invalid data to prevent
   an infinite loop.

Updated all tests and internal usage of iterators to account for
these new behaviors.
2013-05-31 12:18:43 -07:00
Vicent Martí
17ef7dbce4 Merge pull request #1626 from ethomson/index_ext_truncation
improve test for index extension truncation
2013-05-31 09:51:53 -07:00
Edward Thomson
8c2458bea6 improve test for index extension truncation 2013-05-31 11:41:33 -05:00
Vicent Martí
8d863aa205 Merge pull request #1621 from NHDaly/clone_transport_flags
Added support for setting transport flags (No check SSL cert) to git_clo...
2013-05-31 06:01:59 -07:00
Nathan Daly
883929144d Added support for setting transport flags (No check SSL cert) to git_clone call. 2013-05-31 08:53:22 -04:00
Vicent Martí
9afc59710e Merge pull request #1559 from carlosmn/ref-shorthand
Introduce git_reference_shorthand
2013-05-31 03:09:38 -07:00
Vicent Martí
af2c72d228 Merge pull request #1623 from yorah/fix/tag_auto
remote: make default tag retrieving behaviour consistent
2013-05-31 03:08:48 -07:00
Vicent Marti
1ed356dcfe Frees 2013-05-30 21:04:28 +02:00
yorah
df50512aeb Proposal to handle default value (auto = 0) 2013-05-30 18:06:54 +02:00
yorah
215af2ccb8 remote: make default tag retrieving behaviour consistent
Default for newly created remotes will be auto.
Default when loading existing remotes with no tag retrieving behaviour set, was already auto.
2013-05-30 17:59:11 +02:00
Ben Straub
b2984e8aac Merge pull request #1622 from yorah/fix/thread-segfault
thread: fix segfault on Windows 64 bits
2013-05-30 08:43:14 -07:00
Vicent Marti
979f75d8e1 Refcounting 2013-05-30 17:19:43 +02:00
yorah
d17db2fd77 thread: fix segfault on Windows 64 bits
`lpExitCode` is a pointer to a long. A long is 32 bits wide on Windows.

It means that on Windows 64bits, `GetExitCodeThread()` doesn't set/clear the high-order bytes of the 64 bits memory space pointed at by `value_ptr`.
2013-05-30 11:45:11 +02:00
Vicent Marti
4e6e2ff26f ...Aaaand this works 2013-05-30 03:47:10 +02:00
Edward Thomson
2d160ef782 allow (ignore) bare slash in gitignore 2013-05-29 16:26:25 -05:00
Vicent Marti
ec24e54296 What are the chances, really 2013-05-29 22:47:37 +02:00
Vicent Marti
56960b8396 Liike this 2013-05-28 20:47:55 +02:00
Vicent Marti
2638a03aff This refs iterator pleases the gods. 2013-05-28 17:50:47 +02:00
Russell Belfer
9007c53fae Fixing unwrapped calloc 2013-05-27 16:45:22 -07:00
Michael Schubert
563c19a9ce packbuilder: also write index in git_packbuilder_write
git_packbuilder_write() used to write a packfile to the passed file
path. Instead, ask for a destination directory and create both the
packfile and an index, as most users probably do expect.
2013-05-27 13:41:09 +02:00
Edward Thomson
c37fb41ae0 qsort_r appeared in glibc 2.8 2013-05-25 12:35:55 -04:00
Russell Belfer
7a5ee3dc92 Add ~ expansion to global attributes and excludes
This adds ~/ prefix expansion for the value of core.attributesfile
and core.excludesfile, plus it fixes the fact that the attributes
cache was holding on to the string data from the config for a long
time (instead of making its own strdup) which could have caused a
problem if the config was refreshed.  Adds a test for the new
expansion capability.
2013-05-24 11:09:04 -07:00
Russell Belfer
d20b044961 Clarify GIT_DIFF_INCLUDE_UNTRACKED_CONTENT option
This improves the docs for GIT_DIFF_INCLUDE_UNTRACKED_CONTENT as
well as the other flags related to UNTRACKED items in diff, plus
it makes that flag now automatically turn on
GIT_DIFF_INCLUDE_UNTRACKED which seems like a reasonable dwim type
of change.
2013-05-24 10:37:40 -07:00
Russell Belfer
16adc9fade Typedef git_config_level_t and use it everywhere
The GIT_CONFIG_LEVEL constants actually work well as an enum
because they are mutually exclusive, so this adds a typedef to
the enum and uses that everywhere that one of these constants are
expected, instead of the old code that typically used an unsigned
int.
2013-05-24 10:35:58 -07:00
Russell Belfer
2e62e7c23c Docs for git_libgit2_opts and cache disable tweak
This adds docs for the cache control options to git_libgit2_opts
and also tweaks the cache code so that if the cache is disabled,
then the next time we attempt to insert something into the cache
in question, we will actually clear any old cached objects.
2013-05-24 10:33:41 -07:00
Edward Thomson
25a899ec84 qsort_r is broken on HURD, avoid 2013-05-24 10:32:26 +00:00
Russell Belfer
43efc4493d Ensure reuc vector is always valid
In theory, if there was a problem reading the REUC data, the
read_reuc() routine could have left uninitialized and invalid
data in the git_index vector.  This moves the line that inserts a
new entry into the vector down to the bottom of the routine so we
know all the content is already valid.  Also, per @linquize, this
uses calloc to ensure no uninitialized data.
2013-05-24 07:11:22 -05:00
Vicent Martí
26ab6284b2 Merge pull request #1593 from ethomson/conflict_iterator
introduce git_conflict_iterator
2013-05-24 03:30:35 -07:00
Vicent Martí
f7ceef06eb Merge pull request #1592 from ethomson/merge_setup
merge setup
2013-05-24 03:24:27 -07:00
Vicent Martí
4811c1500b Merge pull request #1603 from ben/shallow
Shallow-clone detection
2013-05-24 01:14:52 -07:00
Vicent Martí
30caf0cf29 Merge pull request #1595 from arrbee/even-more-rename-fixes
Even more rename detection fixes
2013-05-24 01:13:48 -07:00
Ben Straub
6f0b8142e6 Stop leaking memory 2013-05-23 17:28:52 -07:00
Russell Belfer
0700ca1a74 More config code checks and cleanups 2013-05-23 16:11:53 -07:00
Russell Belfer
3b32b6d3cc More tests of config with various absent files
Plus a bit of extra paranoia to ensure config object has valid
contents.
2013-05-23 15:57:52 -07:00
Russell Belfer
49f70f2c37 Fill out diff rename test coverage
This extends the rename tests to make sure that every rename
scenario in the inner loop of git_diff_find_similar is actually
exercised.  Also, fixes an incorrect assert that was in one of
the clauses that was not previously being exercised.
2013-05-23 15:48:06 -07:00
Ben Straub
93d8f77fed Improve test failure output 2013-05-23 15:35:50 -07:00
Russell Belfer
f38cea97c3 Move core.abbrev lookup out of diff print loop
This moves the GIT_CVAR_ABBREV lookup out of the loop.  Also, this
fixes git_diff_print_raw to actually use that constant instead of
hardcoding 7 characters.
2013-05-23 15:21:43 -07:00
Russell Belfer
67db583dab More diff rename tests; better split swap handling
This adds a couple more tests of different rename scenarios.

Also, this fixes a problem with the case where you have two
"split" deltas and the left half of one matches the right half of
the other.  That case was already being handled, but in the wrong
order in a way that could result in bad output.  Also, if the swap
also happened to put the other two halves into the correct place
(i.e. two files exchanged places with each other), then the second
delta was left with the SPLIT flag set when it really should be
cleared.
2013-05-23 15:06:07 -07:00
Russell Belfer
c68b09dc7a Fix dereference of freed delta
I was accidentally using a value that I had just freed.  This
moves the clearing of the delta internal flags into a better place.
2013-05-23 11:52:34 -07:00
Ben Straub
9c941ccfaf Merge pull request #1599 from nulltoken/topic/windows_resources
Update windows resources to match the dll name
2013-05-23 08:52:24 -07:00
Russell Belfer
a21cbb12db Significant rename detection rewrite
This flips rename detection around so instead of creating a
forward mapping from deltas to possible rename targets, instead
it creates a reverse mapping, looking at possible targets and
trying to find a source that they could have been renamed or
copied from.  This is important because each output can only
have a single source, but a given source could map to multiple
outputs (in the form of COPIED records).

Additionally, this makes a couple of tweaks to the public rename
detection APIs, mostly renaming a couple of options that control
the behavior to make more sense and to be more like core Git.

I walked through the tests looking at the exact results and
updated the expectations based on what I saw.  The new code is
different from the old because it cannot give some nonsense
results (like A was renamed to both B and C) which were part of
the outputs previously.
2013-05-22 10:37:12 -07:00
Axel Wagner
52f537e9c5 Bugfix: Return NULL in push_leaf, when trie is full
os->full was set 1, but the overflowed idx_leaf was still used to index
into os->nodes a little later. Returning NULL fixes that.
2013-05-22 02:04:12 +02:00
nulltoken
095bfd7487 cmake: Update Windows resources to reflect the optional vendor string
Make InternalName and OriginalFilename resources reflect the name of the compiled binary.
2013-05-22 00:15:13 +02:00
Ben Straub
6828bf26e9 Merge pull request #1594 from nulltoken/topic/tag_annotation
tag: Introduce git_tag_annotation_create()
2013-05-21 10:49:36 -07:00
nulltoken
b81cc1d63b tag: Introduce git_tag_annotation_create() 2013-05-21 19:32:59 +02:00
Russell Belfer
4742148d54 Add more diff rename detection tests
This adds a bunch more rename detection tests including checks
vs the working directory, the new exact match options, some more
whitespace variants, etc.

This also adds a git_futils_writebuffer helper function and uses
it in checkout.  This is mainly added because I wanted an easy
way to write out a git_buf to disk inside my test code.
2013-05-20 13:41:39 -07:00
Russell Belfer
9be5be47fb More git_diff_find_similar improvements
- Add new GIT_DIFF_FIND_EXACT_MATCH_ONLY flag to do similarity
  matching without using the similarity metric (i.e. only compare
  the SHA).
- Clean up the similarity measurement code to more rigorously
  distinguish between files that are not similar and files that
  are not comparable (previously, a 0 could either mean that the
  files could not be compared or that they were totally different)
- When splitting a MODIFIED file into a DELETE/ADD pair, actually
  make a DELETED/UNTRACKED pair if the right side of the diff is
  from the working directory.  This prevents an odd mix of ADDED
  and UNTRACKED files on workdir diffs.
2013-05-20 13:37:21 -07:00
Eitan Adler
038c1654d9 Initialize loose_deleted before it is used for a check later on. 2013-05-19 01:41:18 -04:00
Russell Belfer
d958e37a48 Fix issues with git_diff_find_similar
There are a number of bugs in the rename code that only were
obvious when I started testing it against large old repos with
more complex patterns.  (The code to do that testing is not ready
to merge with libgit2, but I do plan to add more thorough tests.)

This contains a significant number of changes and also tweaks the
public API slightly to make emulating core git easier.

Most notably, this separates the GIT_DIFF_FIND_AND_BREAK_REWRITES
flag into FIND_REWRITES (which adds a self-similarity score to
every modified file) and BREAK_REWRITES (which splits the modified
deltas into add/remove pairs in the diff list).  When you do a raw
output of core git, rewrites show up as M090 or such, not at A and
D output, so I wanted to be able to emulate that.

Publicly, this also changes the flags to be uint16_t since we
don't need values out of that range.

Internally, this contains significant changes from a number of
small bug fixes (like using the wrong side of the diff to decide
if the object could be found in the ODB vs the workdir) to larger
issues about which files can and should be compared and how the
various edge cases of similarity scores should be treated.

Honestly, I don't think this is the last update that will have to
be made to this code, but I think this moves us closer to correct
behavior and I tried to document the code so it would be easier
to follow..
2013-05-17 17:21:45 -07:00
Russell Belfer
0293450e21 Fix delta compare to use correct pathname
The delta cmp function needs to choose the correct path for
ordering when a delta is ADDED, RENAMED, or COPIED.
2013-05-17 16:57:49 -07:00
Russell Belfer
aadfa85b0a Add git_diff_print_raw printing helper
Makes it easier to emulate the --raw option
2013-05-17 16:41:15 -07:00
Russell Belfer
660d59caa9 Add git_oid_nfmt - a flexible OID formatter
I frequently want to the the first N digits of an OID formatted
as a string and I'd like it to be efficient.  This function makes
that easy and I could rewrite the OID formatters in terms of it.
2013-05-17 16:40:00 -07:00
Edward Thomson
0e0108f73f introduce git_conflict_iterator 2013-05-17 16:10:48 -05:00
Edward Thomson
9c06b25054 merge setup 2013-05-17 08:26:24 -05:00
nulltoken
f672cd2a09 revparse: Make revparse_ext() return git_reference from names as well 2013-05-16 21:43:31 +02:00
nulltoken
e841c533d7 revparse: Introduce git_revparse_ext()
Expose a way to retrieve, along with the target git_object, the reference
pointed at by some revparse expression (`@{<-n>}` or
`<branchname>@{upstream}` syntax).
2013-05-16 21:43:24 +02:00
nulltoken
dcaa898d82 revparse: Simplify temporary reference freeing 2013-05-16 21:20:08 +02:00
Vicent Martí
e3107e0ee1 Merge pull request #1558 from bmorganpa/ssh_transport
SSH Transport
2013-05-16 11:35:02 -07:00
Vicent Martí
c2d282cfd8 Merge pull request #1590 from arrbee/examples-like-git
Add cat-file to examples (with some public API improvements)
2013-05-16 11:10:42 -07:00
Vicent Martí
18e37db935 Merge pull request #1591 from arrbee/reorder-reuc-read-for-safety
Ensure reuc vector is always valid
2013-05-16 11:10:13 -07:00
Russell Belfer
57908bb3a3 Ensure reuc vector is always valid
In theory, if there was a problem reading the REUC data, the
read_reuc() routine could have left uninitialized and invalid
data in the git_index vector.  This moves the line that inserts a
new entry into the vector down to the bottom of the routine so we
know all the content is already valid.  Also, per @linquize, this
uses calloc to ensure no uninitialized data.
2013-05-16 11:03:55 -07:00
Russell Belfer
58206c9ae7 Add cat-file example and increase const use in API
This adds an example implementation that emulates git cat-file.
It is a convenient and relatively simple example of getting data
out of a repository.

Implementing this also revealed that there are a number of APIs
that are still not using const pointers to objects that really
ought to be.  The main cause of this is that `git_vector_bsearch`
may need to call `git_vector_sort` before doing the search, so a
const pointer to the vector is not allowed.  However, for tree
objects, with a little care, we can ensure that the vector of
tree entries is always sorted and allow lookups to take a const
pointer.  Also, the missing const in commit objects just looks
like an oversight.
2013-05-16 10:38:27 -07:00
Linquize
7026ad893b calloc() to initialize memory 2013-05-16 21:11:38 +08:00
Vicent Martí
12f831fa15 Merge pull request #1586 from jamill/fetch_fix
Fetch should not fail when remote HEAD reference is not present locally
2013-05-16 04:41:05 -07:00
Vicent Martí
7159620044 Merge pull request #1588 from arrbee/fixes-for-checkout-and-diff
Bug fixes for checkout and diff
2013-05-15 15:47:46 -07:00
Russell Belfer
72b3dd4a5c Use GIT_IDXENTRY_STAGE macro
Since I added the GIT_IDXENTRY_STAGE macro to extract the stage
from a git_index_entry, we probably don't need an internal inline
function to do the same thing.
2013-05-15 15:23:33 -07:00
Russell Belfer
09fae31d45 Improve robustness of diff rename detection
Under some strange circumstances, diffs can end up listing files
that we can't actually open successfully.  Instead of aborting
the git_diff_find_similar, this makes it so that those files just
won't be considered as valid rename/copy targets instead.
2013-05-15 14:58:26 -07:00
Russell Belfer
dcb0f7c061 Fix checkout of submodules with no .gitmodules
It is possible for there to be a submodule in a repository with
no .gitmodules file (for example, if the user forgot to commit
the .gitmodules file).  In this case, core Git will just create
an empty directory as a placeholder for the submodule but
otherwise ignore it.  We were generating an error and stopping
the checkout.  This makes our behavior match that of core git.
2013-05-15 14:54:02 -07:00
Russell Belfer
55d3a39098 Remove old symlinks before updating
Unlike blob updates, symlink updates cannot be done "in place"
writing over an old symlink.  This means that in checkout when we
realize that we can safely update a symlink, we still need to
remove the old one before writing the new.
2013-05-15 14:52:12 -07:00
Russell Belfer
79ef3be449 Fix diff crash when last item is untracked dir
When the last item in a diff was an untracked directory that only
contained ignored items, the loop to scan the contents would run
off the end of the iterator and dereference a NULL pointer.  This
includes a test that reproduces the problem and a fix.
2013-05-15 14:50:05 -07:00
nulltoken
1fed6b07f0 Fix trailing whitespaces 2013-05-15 22:41:30 +02:00
Jameson Miller
6fe02c11a6 Fetch should not fail when remote HEAD reference is not present locally 2013-05-15 14:44:35 -04:00
Brad Morgan
84ac625ddd Added GITERR_CHECK_ALLOC 2013-05-15 12:51:40 -04:00
Brad Morgan
ccaee222a1 Added GITERR_CHECK_ALLOC 2013-05-15 12:46:33 -04:00
Brad Morgan
e057e41122 Reworked git_cred_ssh_keyfile_passphrase_new method 2013-05-15 12:44:51 -04:00
Brad Morgan
b54ed3efe8 Added error check 2013-05-15 12:41:16 -04:00
Brad Morgan
22011b33da Cleanup 2013-05-15 12:38:40 -04:00
Vicent Marti
f0ab73720a signature: Lenient when dupping, strict when creating 2013-05-15 17:51:57 +02:00
Linquize
0cb16fe924 Unify whitespaces to tabs 2013-05-15 20:26:55 +08:00
Brad Morgan
fbcab44b20 Create directory for symlink before creating symlink 2013-05-14 16:03:09 -04:00
Russell Belfer
99d32707b9 Fix refdb iteration early termination bug
There was a problem found in the Rugged test suite where the
refdb_fs_backend__next function could exit too early in some
very specific hashing patterns for packed refs.  This ports
the Rugged test to libgit2 and then fixes the bug.
2013-05-11 06:42:25 -07:00
Linquize
e583334c00 Fix broken build when MSVC SDL checks is enabled 2013-05-11 20:13:26 +08:00
Edward Thomson
b6cc559a78 Merge pull request #1385 from carlosmn/refs-iter
Introduce a refs iterator
2013-05-11 02:42:49 -07:00
Carlos Martín Nieto
c58cac12c2 Introduce a glob-filtering iterator
If the backend doesn't provide support for it, the matching is done in
refdb on top of a normal iterator.
2013-05-11 11:20:38 +02:00
Carlos Martín Nieto
9bd89d9622 Move a couple more functions to use iterators 2013-05-11 11:20:38 +02:00
Carlos Martín Nieto
2b562c3a1e refs: remove the OID/SYMBOLIC filtering
Nobody should ever be using anything other than ALL at this level, so
remove the option altogether.

As part of this, git_reference_foreach_glob is now implemented in the
frontend using an iterator. Backends will later regain the ability of
doing the glob filtering in the backend.
2013-05-11 11:20:38 +02:00
Carlos Martín Nieto
95727245fd refs: implement _foreach with the iterator 2013-05-11 11:20:37 +02:00
Carlos Martín Nieto
51fc5e895d Make sure the ref iterator works in an repo without physical presence 2013-05-11 11:20:37 +02:00
Carlos Martín Nieto
69a3c766b6 refdb_fs: don't crash when the repo doesn't have a path 2013-05-11 11:20:37 +02:00
Carlos Martín Nieto
4def7035ca refs: introduce an iterator
This allows us to get a list of reference names in a loop instead of callbacks.
2013-05-11 11:20:37 +02:00
Vicent Martí
4a65aead2c Merge pull request #1571 from arrbee/what-if-ignorecase-lies
Improve ignore handling in git_status_file
2013-05-10 10:49:22 -07:00
Russell Belfer
e9ba61f399 Fix diff output for renames and copies
If you use rename detection, the renamed and copied files would
not show any text diffs because the function that decides if
data should be loaded didn't know which sides of the diff to
load for those cases.

This adds a test that looks at the patch generated for diff
entries that are COPIED or RENAMED.
2013-05-10 09:32:42 -07:00
Russell Belfer
1f9e41ee86 Improve ignore handling in git_status_file
The git_status_file API was doing a hack to deal with files that
are inside ignored directories.  The status scan was not reporting
any file in this case, so git_status_file would attempt a final
"stat()" call, and return IGNORED if the file actually existed.

On case-insensitive filesystems where core.ignorecase is set
incorrectly, this magic check can "succeed" and report a file
as ignored when it should actually return ENOTFOUND.

Now that we have the GIT_STATUS_OPT_RECURSE_IGNORED_DIRS, we can
use that flag to make sure that git_status_file() will look into
ignored directories and eliminate the hack completely, so we give
the correct error.
2013-05-10 07:50:53 -07:00
Michael Schubert
ae59321fb8 clone: fix -Wmaybe-uninitialized warning 2013-05-10 14:46:14 +02:00
Brad Morgan
ce6d50b994 Changed to use libssh2_channel_exec 2013-05-09 17:37:42 -04:00
Brad Morgan
05f581311b Renaming 2013-05-09 17:36:27 -04:00
Edward Thomson
617bb17556 calloc refs instead of malloc'ing them 2013-05-09 17:44:44 +02:00
Russell Belfer
3d1c9f612d Fix git_repository_message docs
This clarifies the docs for git_repository_message and also adds
to the tests to explicitly check NUL termination of data when the
output buffer is smaller than the message size.  There is a minor
behavior change so that a non-NULL output buffer will always be
NUL terminated (at length zero) if an error occurs.
2013-05-09 06:45:06 -07:00
Vicent Martí
503dd0f3c4 Merge pull request #1560 from carlosmn/ref-dwim
Expose git_reference_dwim
2013-05-09 05:43:25 -07:00
Vicent Martí
ddc5c05421 Merge pull request #1561 from arrbee/fix-windows-diff-eofnl
Fix windows diff eofnl error
2013-05-09 05:42:37 -07:00
Russell Belfer
eb05b114e1 Fix dumb type in time comparison 2013-05-07 22:45:01 -07:00
Carlos Martín Nieto
4f2eb2b7f4 Introduce git_reference_shorthand
Generate a shorthand name out of the full refname.
2013-05-08 02:28:47 +02:00
Vicent Martí
af795759a7 Merge pull request #1552 from carlosmn/config-helpers
Config helpers for global/xdg config files
2013-05-07 15:09:11 -07:00
Carlos Martín Nieto
98d633cccf Expose git_reference_dwim
Extract this function out of the rev-parse code to be able to DWIM a
reference instead of its target.
2013-05-07 23:34:48 +02:00
Carlos Martín Nieto
5d8318875f config: convenience function to open global/xdg
The rules for which one to open is a bit silly, so let's make it
easier for our users.
2013-05-07 21:42:56 +02:00
Carlos Martín Nieto
a4b75dcf56 repo: unconditionally create a global config backend
When a repository is initialised, we need to probe to see if there is
a global config to load. If this is not the case, the user isn't able
to write to the global config without creating the backend and adding
it themselves, which is inconvenient and overly complex.

Unconditionally create and add a backend for the global config file
regardless of whether it exists as a convenience for users.

To enable this, we allow creating backends to files that do not exist
yet, changing the semantics somewhat, and making some tests invalid.
2013-05-07 21:42:56 +02:00
Brad Morgan
00e43380a0 Merge remote-tracking branch 'origin/development' into ssh_transport 2013-05-07 14:30:35 -04:00
Brad Morgan
574b86b722 Fixed compilation issues when libssh2 is missing 2013-05-07 13:56:34 -04:00
Brad Morgan
c36565c0ee Added SSH public key authentication 2013-05-07 13:45:31 -04:00
Russell Belfer
0f938c6b8f Fix win32 type warnings 2013-05-07 09:59:53 -07:00
Carlos Martín Nieto
505b5d0c81 remote: correctly interpret tagopt '--tags'
When tagopt is set to '--tags', we should only take the default tags
refspec into account and ignore any configured ones.

Bring the code into compliance.
2013-05-07 18:49:47 +02:00