|
90f81f9f
|
2018-01-12T12:56:57
|
|
transports: local: fix memory leak in reference walk
Upon downloading the pack file, the local transport will iterate through
every reference using `git_reference_foreach`. The function is a bit
tricky though in that it requires the passed callback to free the
references, which does not currently happen.
Fix the memory leak by freeing all passed references in the callback.
|
|
8cdf439b
|
2017-12-30T13:07:03
|
|
Merge pull request #4028 from chescock/improve-local-fetch
Transfer fewer objects on push and local fetch
|
|
0c7f49dd
|
2017-06-30T13:39:01
|
|
Make sure to always include "common.h" first
Next to including several files, our "common.h" header also declares
various macros which are then used throughout the project. As such, we
have to make sure to always include this file first in all
implementation files. Otherwise, we might encounter problems or even
silent behavioural differences due to macros or defines not being
defined as they should be. So in fact, our header and implementation
files should make sure to always include "common.h" first.
This commit does so by establishing a common include pattern. Header
files inside of "src" will now always include "common.h" as its first
other file, separated by a newline from all the other includes to make
it stand out as special. There are two cases for the implementation
files. If they do have a matching header file, they will always include
this one first, leading to "common.h" being transitively included as
first file. If they do not have a matching header file, they instead
include "common.h" as first file themselves.
This fixes the outlined problems and will become our standard practice
for header and source files inside of the "src/" from now on.
|
|
c5f3da96
|
2016-11-11T14:36:43
|
|
repository: use `git_repository_item_path`
The recent introduction of the commondir variable of a repository
requires callers to distinguish whether their files are part of
the dot-git directory or the common directory shared between
multpile worktrees. In order to take the burden from callers and
unify knowledge on which files reside where, the
`git_repository_item_path` function has been introduced which
encapsulate this knowledge.
Modify most existing callers of `git_repository_path` to use
`git_repository_item_path` instead, thus making them implicitly
aware of the common directory.
|
|
909d5494
|
2016-12-29T12:25:15
|
|
giterr_set: consistent error messages
Error messages should be sentence fragments, and therefore:
1. Should not begin with a capital letter,
2. Should not conclude with punctuation, and
3. Should not end a sentence and begin a new one
|
|
709768a8
|
2016-12-09T15:59:52
|
|
Don't fetch objects we don't need in local transport.
Hide all local refs in the revwalk.
Packbuilder should not add hidden trees or blobs.
|
|
07bd3e57
|
2015-05-07T12:57:56
|
|
proxy: ask the user for credentials if necessary
|
|
542a7de0
|
2015-05-14T17:26:09
|
|
local: plug a leak in the progress reporting
|
|
cd430bc7
|
2015-05-13T14:26:20
|
|
Merge pull request #3103 from libgit2/cmn/local-push-message
Use the packbuilder in local push
|
|
8cec2b8a
|
2015-05-06T12:28:01
|
|
local: send the packbuilder progress via the sideband
Set a callback for the packbuilder so we can send the sideband messages
to the caller, formatting them as git would.
|
|
4a5b781a
|
2015-05-07T13:44:28
|
|
local: use the packbuilder to push
Instead of copying each object individually, as we'd been doing, use the
packbuilder which should be faster and give us some feedback.
While performing this change, we can hook up the packbuilder's writing
to the push progress so the caller knows how far along we are.
|
|
81c0fb08
|
2015-05-07T13:28:51
|
|
local: add clarification for non-bare push restriction
|
|
8f0104ec
|
2015-04-21T22:10:36
|
|
Remove the callbacks struct from the remote
Having the setting be different from calling its actions was not a great
idea and made for the sake of the wrong convenience.
Instead of that, accept either fetch options, push options or the
callbacks when dealing with the remote. The fetch options are currently
only the callbacks, but more options will be moved from setters and
getters on the remote to the options.
This does mean passing the same struct along the different functions but
the typical use-case will only call git_remote_fetch() or
git_remote_push() and so won't notice much difference.
|
|
c84a9dd2
|
2015-03-12T01:52:15
|
|
local: recusrively insert non-branch objects into the packfile
When we insert e.g. a tag or tagged object into the packfile, we must
make sure to insert any referenced objects as well, or we will have
broken links.
Use the recursive version of packfile insertion to make sure we send
over not just the tagged object but also the objects it references.
|
|
7800048a
|
2015-03-17T10:06:50
|
|
Merge pull request #2972 from libgit2/cmn/pack-objects-walk
[WIP] Smarter pack-building
|
|
0ef54a63
|
2015-03-11T17:16:39
|
|
local: create pack with multiple threads
The default behaviour for the packbuilder is to perform the work in a
single thread, which is fine for the public API, but we currently have
no way for a user to determine the number of threads to use when
creating the packfile, which makes our clone behaviour over the
filesystem quite a bit slower than what git offers.
This is a very particular scenario, in which we avoid spawning git by
being ourselves the server-side, so it's probably ok to auto-set the
threading, as the upload-pack process would do if we were talking to
git.
|
|
e68b31a1
|
2015-03-04T20:57:52
|
|
local: let the packbuilder perform smarter object insertion
Currently we use the most naïve and inefficient method for figuring out
which objects to send to the remote whereby we end up trying to insert
subdirs which have not changed multiple times.
Instead, make use of the packbuilder's built-in more efficient method
which uses the walk to feed the object list and avoids inserting an
object and its descendants.
|
|
659cf202
|
2015-01-07T12:23:05
|
|
Remove the signature from ref-modifying functions
The signature for the reflog is not something which changes
dynamically. Almost all uses will be NULL, since we want for the
repository's default identity to be used, making it noise.
In order to allow for changing the identity, we instead provide
git_repository_set_ident() and git_repository_ident() which allow a user
to override the choice of signature.
|
|
392702ee
|
2015-02-09T23:41:13
|
|
allocations: test for overflow of requested size
Introduce some helper macros to test integer overflow from arithmetic
and set error message appropriately.
|
|
6f73e026
|
2014-12-24T11:42:50
|
|
Plug some leaks
|
|
4fd2bda9
|
2014-12-16T10:25:45
|
|
local: send 'counting objects' output
Pretend we have a git process at the other end by creating a similar
progress output when inserting objects into the packbuilder.
|
|
d5c84f67
|
2014-11-23T21:34:45
|
|
local: adjust to the common refspec parser
We no longer have NULL strings, but empty ones and duplicate the sides
if necessar, so the first check will never do anything.
While in the area, remove unnecessary ifs and early returns.
|
|
f7fcb18f
|
2014-11-23T14:12:54
|
|
Plug leaks
Valgrind is now clean except for libssl and libgcrypt.
|
|
aad638f3
|
2014-11-07T15:00:11
|
|
push: use the common refspec parser
There is one well-known and well-tested parser which we should use,
instead of implementing parsing a second time.
The common parser is also augmented to copy the LHS into the RHS if the
latter is empty.
The expressions test had to change a bit, as we now catch a bad RHS of a
refspec locally.
|
|
18d7896c
|
2014-06-03T21:47:53
|
|
clone: re-use the local transport's path resolution
Whe already worked out the kinks with the function used in the local
transport. Expose it and make use of it in the local clone method
instead of trying to work it out again.
|
|
4c4408c3
|
2014-05-22T12:28:39
|
|
Plug leaks and fix a C99-ism
We have too many places where we repeat free code, so when adding the
new free to the generic code, it didn't take for the local transport.
While there, fix a C99-ism that sneaked through.
|
|
04865aa0
|
2014-05-21T10:01:44
|
|
local transport: expose the symref data
When using the local transport, we always have the symbolic information
available, so fill it.
|
|
48e60ae7
|
2014-04-21T11:23:29
|
|
Don't redefine the same callback types, their signatures may change
|
|
5187b609
|
2014-03-07T14:58:43
|
|
local transport: catch double-opens
Combinations of connect + fetch can call local_open multiple
times. Detect this and skip the initialization stage.
|
|
8bf476ac
|
2014-01-19T16:24:58
|
|
Factor out code to convert local "url" into a path.
Previously this code was shared between `local_push` and `local_connect`.
|
|
4e974c97
|
2014-01-18T08:02:58
|
|
Fix local push to file:// URL.
|
|
0b28217b
|
2014-01-15T12:51:31
|
|
refs: remove the _with_log differentiation
Any well-behaved program should write a descriptive message to the
reflog whenever it updates a reference. Let's make this more prominent
by removing the version without the reflog parameters.
|
|
25e0b157
|
2013-12-06T15:07:57
|
|
Remove converting user error to GIT_EUSER
This changes the behavior of callbacks so that the callback error
code is not converted into GIT_EUSER and instead we propagate the
return value through to the caller. Instead of using the
giterr_capture and giterr_restore functions, we now rely on all
functions to pass back the return value from a callback.
To avoid having a return value with no error message, the user
can call the public giterr_set_str or some such function to set
an error message. There is a new helper 'giterr_set_callback'
that functions can invoke after making a callback which ensures
that some error message was set in case the callback did not set
one.
In places where the sign of the callback return value is
meaningful (e.g. positive to skip, negative to abort), only the
negative values are returned back to the caller, obviously, since
the other values allow for continuing the loop.
The hardest parts of this were in the checkout code where positive
return values were overloaded as meaningful values for checkout.
I fixed this by adding an output parameter to many of the internal
checkout functions and removing the overload. This added some
code, but it is probably a better implementation.
There is some funkiness in the network code where user provided
callbacks could be returning a positive or a negative value and
we want to rely on that to cancel the loop. There are still a
couple places where an user error might get turned into GIT_EUSER
there, I think, though none exercised by the tests.
|
|
9f77b3f6
|
2013-11-25T14:21:34
|
|
Add config read fns with controlled error behavior
This adds `git_config__lookup_entry` which will look up a key in
a config and return either the entry or NULL if the key was not
present. Optionally, it can either suppress all errors or can
return them (although not finding the key is not an error for this
function). Unlike other accessors, this does not normalize the
config key string, so it must only be used when the key is known
to be in normalized form (i.e. all lower-case before the first dot
and after the last dot, with no invalid characters).
This also adds three high-level helper functions to look up config
values with no errors and a fallback value. The three functions
are for string, bool, and int values, and will resort to the
fallback value for any error that arises. They are:
* `git_config__get_string_force`
* `git_config__get_bool_force`
* `git_config__get_int_force`
None of them normalize the config `key` either, so they can only
be used for internal cases where the key is known to be in normal
format.
|
|
359dce72
|
2013-11-02T00:05:32
|
|
remote: make _ls return the list directly
The callback-based method of listing remote references dates back to the
beginning of the network code's lifetime, when we didn't know any
better.
We need to keep the list around for update_tips() after disconnect() so
let's make use of this to simply give the user a pointer to the array so
they can write straightforward code instead of having to go through a
callback.
|
|
a6154f21
|
2013-10-30T15:00:05
|
|
indexer: remove the stream infix
It was there to keep it apart from the one which read in from a file on
disk. This other indexer does not exist anymore, so there is no need for
anything other than git_indexer to refer to it.
While here, rename _add() function to _append() and _finalize() to
_commit(). The former change is cosmetic, while the latter avoids
talking about "finalizing", which OO languages use to mean something
completely different.
|
|
e3c131c5
|
2013-09-16T05:02:25
|
|
remote: move the credentials callback to the struct
Move this one as well, letting us have a single way of setting the
callbacks for the remote, and removing fields from the clone options.
|
|
f42d546c
|
2013-09-04T13:07:42
|
|
Provide better errors for push on non-bare local remotes
|
|
376e6c9f
|
2013-08-15T13:48:35
|
|
odb: wrap the stream reading and writing functions
This is in preparation for moving the hashing to the frontend, which
requires us to handle the incoming data before passing it to the
backend's stream.
|
|
9728cfde
|
2013-06-25T11:17:55
|
|
Make sure we don't leak memory again.
|
|
edbaa63a
|
2013-06-25T09:04:04
|
|
Unbreak git_remote_ls on a local transport after disconnecting.
|
|
8c510b83
|
2013-06-24T21:02:42
|
|
Fix a leak in the local transport code.
|
|
1fed6b07
|
2013-05-13T21:57:37
|
|
Fix trailing whitespaces
|
|
0cb16fe9
|
2013-05-15T20:26:55
|
|
Unify whitespaces to tabs
|
|
2b562c3a
|
2013-05-04T16:32:58
|
|
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.
|
|
b7f167da
|
2013-04-29T13:52:12
|
|
Make git_oid_cmp public and add git_oid__cmp
|
|
67ba7d20
|
2013-04-15T22:53:57
|
|
Allow git_remote_ls after disconnecting from the remote
Keep the data around until free, as expected by our own fetch example
|
|
2ebc3c66
|
2013-04-15T11:57:24
|
|
Redeploy git_revparse_single.
|
|
1aa21fe3
|
2013-04-09T05:03:51
|
|
Deprecate git_revparse_single and _rangelike
|
|
10c06114
|
2013-03-17T04:46:46
|
|
Several warnings detected by static code analyzer fixed
Implicit type conversion argument of function to size_t type
Suspicious sequence of types castings: size_t -> int -> size_t
Consider reviewing the expression of the 'A = B == C' kind. The expression is calculated as following: 'A = (B == C)'
Unsigned type is never < 0
|
|
20858f6e
|
2013-02-19T06:22:58
|
|
Implemented push on the local transport
|
|
88183c19
|
2013-01-27T13:36:37
|
|
Fix fail clone local repository because can't found object
avoid use object which is already free
Signed-off-by: Frank Li <lznuaa@gmail.com>
|
|
359fc2d2
|
2013-01-08T17:07:25
|
|
update copyrights
|
|
2a2d1ab0
|
2012-12-15T14:30:20
|
|
Cloning empty repos: only allow missing target for HEAD
|
|
b524fe1a
|
2012-12-14T08:35:59
|
|
Local Only ignore ENOTFOUNDs when adding corrupted refs
|
|
850b1edf
|
2012-12-13T12:55:28
|
|
Allow clone to handle empty repos
|
|
59bccf33
|
2012-12-10T11:11:01
|
|
Add a payload param to git_cred_acquire_cb
Fixes #1128.
|
|
10711769
|
2012-11-29T20:47:37
|
|
Deploy versioned git_transport structure
|
|
6762fe08
|
2012-11-29T08:29:26
|
|
Remove casts of return values of type void *
|
|
613d5eb9
|
2012-11-28T11:42:37
|
|
Push! By schu, phkelley, and congyiwu, et al
|
|
cfbe4be3
|
2012-11-17T19:54:47
|
|
More external API cleanup
Conflicts:
src/branch.c
tests-clar/refs/branches/create.c
|
|
2508cc66
|
2012-11-18T21:38:08
|
|
Rename ref and reflog apis for consistency
|
|
7e9f5e65
|
2012-11-13T20:06:15
|
|
Slightly different valgrind fix
Allocate with calloc rather than conditionally memsetting a specific
part of the struct later on.
|
|
6132a54e
|
2012-11-13T16:13:10
|
|
Fix a few valgrind errors
|
|
3dee3655
|
2012-11-13T07:04:30
|
|
local: fix memory leak
|
|
14157652
|
2012-11-12T07:57:03
|
|
Remove unnecessary progress logic
The indexer handles this better than the fetch
logic does.
|
|
0f5520f7
|
2012-11-12T07:55:09
|
|
Fix error check
|
|
90207709
|
2012-11-08T21:29:17
|
|
Avoid copying duplicate commits
|
|
505da062
|
2012-11-06T10:26:06
|
|
Implement local transport's fetch
|
|
091361f5
|
2012-11-06T08:52:03
|
|
Basic authentication for http and winhttp
|
|
41fb1ca0
|
2012-10-29T13:41:14
|
|
Reorganize transport architecture (squashed 3)
|
|
5dca2010
|
2012-08-03T17:08:01
|
|
Update iterators for consistency across library
This updates all the `foreach()` type functions across the library
that take callbacks from the user to have a consistent behavior.
The rules are:
* A callback terminates the loop by returning any non-zero value
* Once the callback returns non-zero, it will not be called again
(i.e. the loop stops all iteration regardless of state)
* If the callback returns non-zero, the parent fn returns GIT_EUSER
* Although the parent returns GIT_EUSER, no error will be set in
the library and `giterr_last()` will return NULL if called.
This commit makes those changes across the library and adds tests
for most of the iteration APIs to make sure that they follow the
above rules.
|
|
ad4b5beb
|
2012-07-25T10:40:59
|
|
transport: store the refs in a common area
Instad of each transport having its own function and logic to get to
its refs, store them directly in transport.
Leverage the new gitno_buffer to make the parsing and storing of the
refs use common code and get rid of the git_protocol struct.
|
|
e9551e86
|
2012-06-02T16:52:22
|
|
Fix git_close/http_close/local_close to set the transport's connected attribute to 0.
|
|
59d91979
|
2012-05-18T13:53:38
|
|
Merge pull request #710 from libgit2/breaking-changes
Break everything before the release
|
|
a167002f
|
2012-05-18T12:36:25
|
|
fetch: set dummy function for local fetch
Local fetch isn't implemented yet. Don't segfault on call, but set a
dummy for negotiate_fetch and terminate gracefully.
Reported-by: Brad Harder <bch@methodlogic.net>
|
|
4fbd1c00
|
2012-05-17T20:35:48
|
|
refs: git_reference_listall -> git_reference_list
|
|
26515e73
|
2012-04-23T10:06:31
|
|
Rename to git_reference_name_to_oid
|
|
f201d613
|
2012-04-13T10:33:14
|
|
Add git_reference_lookup_oid and lookup_resolved
Adds a new public reference function `git_reference_lookup_oid`
that directly resolved a reference name to an OID without returning
the intermediate `git_reference` object (hence, no free needed).
Internally, this adds a `git_reference_lookup_resolved` function
that combines looking up and resolving a reference. This allows
us to be more efficient with memory reallocation.
The existing `git_reference_lookup` and `git_reference_resolve`
are reimplmented on top of the new utility and a few places in the
code are changed to use one of the two new functions.
|
|
a1515693
|
2012-04-12T20:52:26
|
|
local transport: plug leak
|
|
a62053a0
|
2012-04-01T00:45:02
|
|
error-handling local transport
|
|
79fd4230
|
2012-04-06T15:23:18
|
|
transport/local: Fix peeling of nested tags
|
|
854eccbb
|
2012-02-29T12:04:59
|
|
Clean up GIT_UNUSED macros on all platforms
It turns out that commit 31e9cfc4cbcaf1b38cdd3dbe3282a8f57e5366a5
did not fix the GIT_USUSED behavior on all platforms. This commit
walks through and really cleans things up more thoroughly, getting
rid of the unnecessary stuff.
To remove the use of some GIT_UNUSED, I ended up adding a couple
of new iterators for hashtables that allow you to iterator just
over keys or just over values.
In making this change, I found a bug in the clar tests (where we
were doing *count++ but meant to do (*count)++ to increment the
value). I fixed that but then found the test failing because it
was not really using an empty repo. So, I took some of the code
that I wrote for iterator testing and moved it to clar_helpers.c,
then made use of that to make it easier to open fixtures on a
per test basis even within a single test file.
|
|
5e0de328
|
2012-02-13T17:10:24
|
|
Update Copyright header
Signed-off-by: schu <schu-github@schulog.org>
|
|
e2580375
|
2011-12-28T11:36:18
|
|
transport: make local transport accept a file Uri containing percent-encoded characters
This makes libgit2 compliant with the following scenario
$ git ls-remote file:///d:/temp/dwm%20tinou
732d790b702db4b8985f5104fc44642654f6a6b6 HEAD
732d790b702db4b8985f5104fc44642654f6a6b6 refs/heads/master
732d790b702db4b8985f5104fc44642654f6a6b6 refs/remotes/origin/HEAD
732d790b702db4b8985f5104fc44642654f6a6b6 refs/remotes/origin/master
$ mv "/d/temp/dwm tinou" /d/temp/dwm+tinou
$ git ls-remote file:///d:/temp/dwm%20tinou
fatal: 'd:/temp/dwm tinou' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
$ git ls-remote file:///d:/temp/dwm+tinou
732d790b702db4b8985f5104fc44642654f6a6b6 HEAD
732d790b702db4b8985f5104fc44642654f6a6b6 refs/heads/master
732d790b702db4b8985f5104fc44642654f6a6b6 refs/remotes/origin/HEAD
732d790b702db4b8985f5104fc44642654f6a6b6 refs/remotes/origin/master
|
|
d16e4b2b
|
2011-12-25T00:25:04
|
|
remotes: Remove unused variables
|
|
db1f7e59
|
2011-12-21T16:36:34
|
|
remote: add test to retrieve the advertised references from a local repository and fix related implementation
|
|
fe9a0e09
|
2011-11-29T11:02:42
|
|
transports: fix -Wunused-but-set-variable warning
Signed-off-by: schu <schu-github@schulog.org>
|
|
d88d4311
|
2011-11-28T08:40:40
|
|
remote: Cleanup the remotes code
- Hide the remaining transports code
- Drop `git_headarray`, switch to using a callback to list refs. Makes
the code cleaner.
|
|
45e79e37
|
2011-11-26T04:59:21
|
|
Rename all `_close` methods
There's no difference between `_free` and `_close` semantics: keep
everything with the same name to avoid confusions.
|
|
75abd2b9
|
2011-08-11T19:38:13
|
|
Free all used references in the source tree
Since references are not owned by the repository anymore we have to free
them manually now.
Signed-off-by: schu <schu-github@schulog.org>
|
|
3286c408
|
2011-10-28T14:51:13
|
|
global: Properly use `git__` memory wrappers
Ensure that all memory related functions (malloc, calloc, strdup, free,
etc) are using their respective `git__` wrappers.
|
|
dfafb03b
|
2011-10-07T00:44:41
|
|
Move the transports to their own directory
|