Commit Graph

863 Commits

Author SHA1 Message Date
schu
7b608b3b96 git_blob_create_fromfile: remove old code
Remove call of gitfo_size, since we call gitfo_lstat anyway; remove some
old workaround code for gitfo_read, which is obsolete now.

Signed-off-by: schu <schu-github@schulog.org>
2011-06-27 12:37:46 +02:00
Carlos Martín Nieto
9ba49bb5c8 Add git_remote_connect and git_remote_ls
These allow you to implement git-ls-remote when given a reference name
and a repository.

Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-27 02:12:40 +02:00
Carlos Martín Nieto
c7c787ce0c Use gitno_buffer in the git transport
This allows us to leave out the buffer handling logic.

Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-27 02:09:49 +02:00
Carlos Martín Nieto
ea7a5452f4 Add gitno_buffer as a recv wrapper
Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-27 02:09:49 +02:00
Carlos Martín Nieto
ce90a407c7 Remove the repo param from git_transport_new
Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-26 20:48:01 +02:00
Carlos Martín Nieto
4e913309b9 Move transports to an inheritance model
Rather than an 'private' pointer, make the private structures inherit
from the generic git_transport struct. This way, we only have to worry
about one memory allocation instead of two. The structures are so
simple that this may even make the code use less memory overall.

Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-26 20:43:45 +02:00
Carlos Martín Nieto
0a9a38e539 local transport: keep better track of memory
Store the ref information in a private struct so we can free it
together with the rest.

Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-26 20:43:44 +02:00
Carlos Martín Nieto
7e305056d8 local transport: sort the refs before resolving them
By pre-sorting the references, they are already in the right order if
we want to peel them.

With this, we get output-parity with git.git's ls-remote.

Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-26 20:43:44 +02:00
Carlos Martín Nieto
fd6790210f Move git_pkt_{gen_proto,send_request} to transport_git.c
This is where they really belong. Remvoe the prefix and make them
static.

Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-26 20:43:44 +02:00
Carlos Martín Nieto
cbf742ac4e Use (s)size_t
Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-26 20:43:44 +02:00
Carlos Martín Nieto
c4d0fa85b1 Implement and use git_pkt_send_request
This makes it easier to send a requqest for an URL. It assumes there
is a socket where the string should go out to.

Make git_pkt_gen_proto accept a command parameter, which defaults to
git-upload-pack

Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-26 20:43:44 +02:00
Carlos Martín Nieto
4e95ef0268 Implement and use gitno_send 2011-06-26 20:43:44 +02:00
Carlos Martín Nieto
1b4f814025 Create netops and start moving git:// to it
Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-26 20:43:44 +02:00
Carlos Martín Nieto
7632e2494a Correctly handle network input
Add a parameter to git_pkt_parse_line to tell it how much data you
have in your buffer. If the buffer is too short, it returns an error
saying so. Adapt the git transport to use this and fix the offset
calculation.

Add the GIT_ESHORTBUFFER error code.
2011-06-26 20:43:44 +02:00
Carlos Martín Nieto
be9fe679fc Implement and use git_pkt_free
A git_pkt object can be one of several structs. Add this function for
convenience and clarity.

Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-26 18:18:13 +02:00
Carlos Martín Nieto
ecb6ca0e1f Implement the git TCP transport up to ls-remote
Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-26 18:18:13 +02:00
Carlos Martín Nieto
6a9597c5b5 Add function to generate a request
Add git_pkt_gen_proto to crete a request from an url.

Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-26 18:18:12 +02:00
Carlos Martín Nieto
8b9e8de5ce pkt-line: read capabilities
Try to read the server capabilities and add them to the git_pkt_ref
struct.

Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-26 18:18:12 +02:00
Carlos Martín Nieto
b31803f310 pkt-line: parse other-ref lines
Add support for parsing other-ref lines.

Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-26 18:18:12 +02:00
Carlos Martín Nieto
78fae47878 pkt: make sure we really only read the length
A pkt-line's length are described in its first four bytes in ASCII
hex. Copy this substring to another string before feeding it to
git__strtol32. Otherwise, it will read the whole hash.

Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-26 18:18:12 +02:00
Carlos Martín Nieto
1d27446c60 Move flush-pkt creation into its own function
Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-26 18:18:12 +02:00
Carlos Martín Nieto
f7fc68df83 Lay the foundations for pkt-line parsing
This are the types I intend to use for pkt-line parsing and (later)
creation. git_pkt serves as a base pointer type and once you know what
type it is you can use the real one (command, tip list, etc.)

Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-26 18:18:12 +02:00
Carlos Martín Nieto
d6258debbe Implement ls-remote on local drive
Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-26 18:18:12 +02:00
Carlos Martín Nieto
8f866daee5 Lay down the fundations for the network code
Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-26 18:18:11 +02:00
Carlos Martín Nieto
92cb6aa929 Add git_refspec_transform
Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-26 18:18:11 +02:00
Carlos Martín Nieto
63f91e1ce8 Add git.git's fnmatch, which is really GNU's and the git__fnmatch wrapper
If the strings match, git__fnmatch returns GIT_SUCCESS and
GIT_ENOMATCH on failure to match.

MSVC fixes: Added a test for _MSC_VER and (in that case) defined
HAVE_STRING_H to 1 so it doesn't try to include <strings.h> which
doesn't exist in the MSVC world. Moved the function declarations to
use the modern inline ones so MSVC doesn't have a fit. Added casts
everywhere so MSVC doesn't crap its pants.

Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-26 18:18:11 +02:00
Carlos Martín Nieto
2dc31040a2 Abstract the refspec query and parse
Move them to their own functions to avoid duplication and to make it
easier to ignore missing configuration.

Not finding 'fetch' is considered fatal, though this might not be
correct behaviour (push-only remotes?)

Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-26 18:18:10 +02:00
Carlos Martín Nieto
9c82357be7 Add a remotes API
Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-06-26 18:18:10 +02:00
Vicent Marti
ce90d81f6f revwalk: Do not set error string on revwalk over 2011-06-24 15:30:10 +02:00
Vicent Marti
3101a3e5b8 refs: Do not overflow when normalizing refnames 2011-06-23 02:29:11 +02:00
Vicent Martí
3bf3ad9f03 Merge pull request #269 from schu/infinite-append
gitfo_read: fix read-loop
2011-06-21 13:53:48 -07:00
Carlos Martín Nieto
4cea2f0369 Stat files with full pathnames
Call gitfo_lstat with the full pathname instead of the relative one,
which fails in case the current working directory is different from
the workdir.

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
2011-06-20 17:53:21 +02:00
Carlos Martín Nieto
cdb6f9bf5e Allocate enough memory for the terminator in commit parsing
Also allow space for the null-terminator when allocating the buffer in
packfile_unpack_compressed. Up to now, the last newline had served as
a terminator, but 858ef372 searches for a double-newline and exposes
the problem.

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
2011-06-20 17:34:01 +02:00
schu
28f7869dee gitfo_read: fix read-loop
Signed-off-by: schu <schu-github@schulog.org>
2011-06-20 17:28:59 +02:00
Vicent Marti
984ed6b6be odb: Add GIT_EPASSTHROUGH
Allows a custom user backend to passthrough one of the callbacks. Used
for e.g. caching backends.
2011-06-19 12:50:45 +02:00
Vicent Marti
e35e9fb4c3 mingw: Fix compilation 2011-06-18 13:23:19 +02:00
Vicent Marti
2a406ab51c config: Fix sorting of repository config files 2011-06-18 02:08:56 +02:00
Vicent Marti
19cb6857a4 config: Bring back git_config_open_global
Scott commands, I obey.
2011-06-18 01:50:48 +02:00
Vicent Marti
dbe70bd5c3 config: Fix compilation in MSVC 2011-06-18 01:12:58 +02:00
Vicent Marti
4007044553 config: Typorrrrl 2011-06-18 00:55:03 +02:00
Vicent Martí
deee4766a8 Merge pull request #267 from Jopie64/development
Fix compilation error in MSVC when compiling for c++
2011-06-17 15:44:26 -07:00
Vicent Marti
07ff881750 config: Cleanup external API
Do not mess with environment variables anymore. The new external API has
more helper methods, and everything is explicit.
2011-06-18 00:39:39 +02:00
Johan 't Hart
f061988667 Fix compilation error in MSVC when compiling for c++ 2011-06-17 23:58:34 +02:00
Carlos Martín Nieto
f3dad3acd7 Add fall-back support to the configuration
If a config has several files, we need to check all of them before we
can say that a variable doesn't exist.

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
2011-06-17 22:30:30 +02:00
Carlos Martín Nieto
9ba9e513bc Parse the repo's configuration when we load it
It's not enough to load the config, we also need to explicitely parse
it after we create it.

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
2011-06-17 22:30:29 +02:00
Carlos Martín Nieto
b22d147986 Add git_repository_config API
This function puts the global and repository configurations in one
git_config object and gives it to the user.

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
2011-06-17 22:30:29 +02:00
Carlos Martín Nieto
b76934de6c Remove double-space
Noticed by txdv

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
2011-06-17 22:30:29 +02:00
Vicent Marti
c716b1878e config: Fix unitialized variable warning 2011-06-17 19:47:58 +02:00
Vicent Martí
2414d000a1 Merge pull request #266 from carlosmn/valgrind
Plug memory leaks
2011-06-17 10:32:22 -07:00
Vicent Marti
02285482f1 fileops: Cast the GetProcAddress value 2011-06-17 19:19:30 +02:00
Vicent Marti
9c11bd0a06 fileops: Fix 'GetFinalPathNameByHandleA' in old platforms 2011-06-17 19:09:18 +02:00
Carlos Martín Nieto
b2e361cc5e Plug two leaks in config writing
Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
2011-06-16 20:22:05 +02:00
Carlos Martín Nieto
e7e0e20fc5 Simplify loose ref writing
There is no need to store the format outselves, as the library
provides git_filebuf_printf which takes care of the formatting itself.

Also get rid of an use of strcat + strcpy which is always a nice
thing.

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
2011-06-16 16:39:20 +02:00
Vicent Marti
f1d018513a oid: Uniformize ncmp methods
Drop redundant methods. The ncmp method is now public
2011-06-16 02:50:08 +02:00
Vicent Marti
fa48608ec3 oid: Rename methods
Yeah. Finally. Fuck the old names, this ain't POSIX
and they don't make any sense at all.
2011-06-16 02:36:21 +02:00
Vicent Marti
43521d0688 refs: Rename git_referece_listcb to _foreach
Same name as `git_config_foreach`
2011-06-16 02:27:43 +02:00
Vicent Martí
607d164380 Merge pull request #248 from carlosmn/config
Implement config writing
2011-06-15 17:24:04 -07:00
Vicent Marti
536955f9d7 Add method to get the compiled version of the lib 2011-06-16 02:21:33 +02:00
Vicent Martí
ef9a6f4cbc Merge pull request #261 from Romain-Geissler/discovery-path-v2
Fix: GIT_PATH_PATH_SEPARATOR is now a semi-colon under Windows.
2011-06-15 13:47:41 -07:00
Romain Geissler
0657e46dee Fix: GIT_PATH_PATH_SEPARATOR is now a semi-colon under Windows.
GIT_PATH_LIST_SEPARATOR and GIT_PATH_MAX are made public so
that it's can be used by a client.
2011-06-15 22:11:18 +02:00
Vicent Martí
f2bb894e64 Merge pull request #251 from nulltoken/fix/msvc-warnings
Fix compilation warnings in MSVC
2011-06-15 12:15:11 -07:00
Vicent Martí
1aa1b09e73 Merge pull request #260 from nulltoken/fix/git_index_add
Fix git_index_add()
2011-06-15 12:11:59 -07:00
nulltoken
a64bf21bbb blob: Fix git_blob_create_fromfile() 2011-06-15 21:10:10 +02:00
nulltoken
63fadf99dc Add mode_t definition in MSVC compat layer 2011-06-15 19:45:33 +02:00
Scott Chacon
737406b7ab fix gid_ misspelling 2011-06-14 09:31:19 -07:00
Vicent Marti
b023321669 Remove custom backends
All the custom backend code will be moved to a separate project,
	together with the new MySQL backend.
2011-06-14 17:40:17 +02:00
Carlos Martín Nieto
2e18e29b57 Remove uneeded arpa/inet.h include
This header isn't needed at all and it shows a lot of warnings on
OpenBSD.

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
2011-06-14 17:03:25 +02:00
Carlos Martín Nieto
711b1096f3 Indent config variables with tags
Confg variables are indended using tags and not four spaces as was
being done by the code.

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
2011-06-14 13:09:40 +02:00
nulltoken
9e3aa94764 Fix compilation warnings in MSVC 2011-06-12 07:37:50 +02:00
Sebastian Schuberth
e6480970b4 Add missing function declarations to avoid MSVC compiler warnings
The better solution would probably be to turn the gitfo_lstat /
gitfo_readlink macros into real functions that wrap either lstat or
gitfo_lstat__w32 (and readlink or gitfo_readlink__w32). However, that
would introduce an indirection unless inlined. For now, this is the less
intrusive change.
2011-06-10 14:00:54 +02:00
Sebastian Schuberth
3f66c20202 Use "__inline" instead of "inline" with MSVC
MSVC supports "inline" only in C++ code, not in C code.
2011-06-10 13:57:01 +02:00
Sebastian Schuberth
c1802641ff Prefer to use file mode defines instead of raw numbers 2011-06-10 13:56:24 +02:00
Sebastian Schuberth
535ff384e2 Prefer to use S_IFLNK instead of _S_IFLNK for consistency 2011-06-10 13:54:47 +02:00
Sebastian Schuberth
732eb0a8d9 Add some missing MSVC compatibility defines 2011-06-10 13:54:25 +02:00
Vicent Martí
e3f56a2b57 Merge pull request #216 from glesserd/development
git_tag_create{,_o,_frombuffer} correction and improvement
2011-06-08 08:11:26 -07:00
Vicent Martí
4e1543ff6e Merge pull request #250 from pegonma/commit_short_message
Commit short message should be the same as git's
2011-06-08 08:09:54 -07:00
Vicent Marti
ae496955d2 windows: Fix Symlink issues
Handle Symlinks if they can be handled in Win32. This is not even
compiled. Needs review.

The lstat implementation is modified from core Git.
The readlink implementation is modified from PHP.
2011-06-08 17:03:41 +02:00
Vicent Martí
1071c56519 Merge pull request #246 from carlosmn/keep-lock
Keep the lockfile if we fail to lock it
2011-06-08 04:16:47 -07:00
Marc Pegon
858ef372a4 Changed commit short messages so that they match git log --oneline output.
In git, the short message of a commit is the part of the commit message before 2 consecutive line breaks. In the short message, line breaks are replaced by space characters.
2011-06-08 11:16:31 +02:00
Carlos Martín Nieto
8bb198e674 config: implement config writing
After each variable gets set, we store it in our list (not completely
in the right position, but the close enough). Then we write out the
new config file in the same way that git.git does it (keep the rest of
the file intact and insert or replace the variable in its line).

Overwriting variables and adding new ones is supported (even on new
sections), though deleting isn't yet.

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
2011-06-08 00:23:25 +02:00
Carlos Martín Nieto
3b3577c764 config: store new variables with the internal representation of the section
The section name should be stored in its case-sensitive variant when
we are adding a new variable. Use the internalize_section function to
do just that.

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
2011-06-08 00:23:12 +02:00
Carlos Martín Nieto
5ab50417b7 Remove an unfortunate optimisation from cvar_match_section
The (rather late) early-exit code, which provides a negligible
optimisation causes cvar_match_section to return false negatives when
it's called with a section name instead of a full variable name.

Remove this optimisation.

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
2011-06-08 00:12:26 +02:00
Carlos Martín Nieto
bb9272dd7a filebuf cleanup: only unlink lockfile if we've opened it
Add a check for the file descriptor in git_filebuf_cleanup. Without
it, an existing lockfile would be deleted if we tried to acquire it
(but failed, as the lockfile already existed).

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
2011-06-07 17:05:40 +02:00
Vicent Martí
3a12891f53 Merge pull request #243 from jpfender/symlinks2
Symlinks NEW
2011-06-07 07:07:45 -07:00
Vicent Martí
a5aa5bd1d1 Merge pull request #245 from schu/use-normalized
rename-reference: use normalized path
2011-06-07 07:04:51 -07:00
Vicent Martí
b0a46745cc Merge pull request #241 from nulltoken/fix/msvc-warnings
Fix compilation warnings in MSVC
2011-06-07 07:03:37 -07:00
Vicent Martí
275c6a0b37 Merge pull request #242 from schu/fix-unused-2
fileops.c: fix unused warning v2
2011-06-07 07:03:14 -07:00
schu
52b188f6e8 rename-reference: use normalized path
Signed-off-by: schu <schu-github@schulog.org>
2011-06-07 14:18:20 +02:00
Jakob Pfender
27a1b382c1 Export gitfo_shallow_exists 2011-06-07 14:15:55 +02:00
Jakob Pfender
fdd1e04ce7 fileops: Allow differentiation between deep and shallow exists()
When calling gitfo_exists() on a symbolic link, sometimes we need to
simply check whether the link exists and sometimes we need to check
whether the file pointed to by the symlink exists.

Introduce a new function gitfo_shallow_exists that only checks if the
link exists and revert gitfo_exists to the original functionality of
checking whether the file pointed to by the link exists.
2011-06-07 14:10:06 +02:00
Jakob Pfender
ee4912bf79 Revert "common: Include stat.h in include/git2/common.h instead of src/common.h"
This reverts commit df1c98ab6d6171ed63729195bd190b54b67fe530.

As 8a27b6b reverts the exposition of struct stat to the external API, we
do not need - indeed, do not want - struct stat to be in the outer
include layer.
2011-06-07 12:54:43 +02:00
Jakob Pfender
b74c867a1a blob: Stat path inside git_blob_create_fromfile
00582bc introduced a change that required the caller of
git_blob_create_fromfile() to pass a struct stat with the stat
information for the file. Several developers pointed out that this would
make life hard for the bindings developers as struct stat isn't widely
supported by other languages.

Make git_blob_create_fromfile() stat the path itself, eliminating the
need for the file to be stat'ed by the caller. This makes
index_init_entry() more costly as the file will be stat'ed twice but
makes life easier for everyone else.
2011-06-07 12:54:43 +02:00
Jakob Pfender
cbf4f9f41f common: Include stat.h in include/git2/common.h instead of src/common.h
00582bcb introduced a change to git_blob_create_fromfile() that required
the caller to pass a stat struct. This means that we need to include
stat.h higher in the hierarchy of includes.
2011-06-07 12:54:38 +02:00
Jakob Pfender
c1a2a14e02 index: Correctly write entry mode
The entry mode flags for an entry created from a path name were not
correctly written if the entry was a symlink. The st_mode of a statted
symlink is 0120777, however git requires the mode to read 0120000,
because it does not care about permissions of symlinks.

Introduce index_create_mode() that correctly writes the mode flags in
the form expected by git.
2011-06-07 12:54:37 +02:00
Jakob Pfender
1869b31e0c index/fileops: Correctly process symbolic links
gitfo_exists() used to error out if the given file was a symbolic link,
due to access() returning an error code. This is not expected behaviour,
as gitfo_exists() should only check whether the file itself exists, not
its link target if it is a symbolic link.

Fix this by calling gitfo_lstat() instead, which is just a wrapper for
lstat().

Also fix the same error in index_init_entry().
2011-06-07 12:54:37 +02:00
Jakob Pfender
4d7905c579 blob: Require stat information for git_blob_create_fromfile()
In order to be able to write symlinks with git_blob_create_fromfile(),
we need to check whether the file to be written is a symbolic link or
not. Since the calling function of git_blob_create_fromfile() is likely to have
stated the file before calling, we make it pass the stat.

The reason for this is that writing symbolic link blobs is significantly
different from writing ordinary files - we do not want to open the link
destination but instead want to write the link itself, regardless of
whether it exists or not.

Previously, index_init_entry() used to error out if the file to be added
was a symlink that pointed to a nonexistent file. Fix this behaviour to
add the file regardless of whether it exists. This mimics git.git's
behaviour.
2011-06-07 12:54:36 +02:00
David Glesser
1c68d27d07 Fix the error pointed out by tanoku.
Now the code shoulb be c89.
2011-06-07 10:15:31 +02:00
nulltoken
f120e92b23 Fix compilation warnings in MSVC 2011-06-07 08:41:33 +02:00
Vicent Martí
1097dacd7d Merge pull request #240 from Romain-Geissler/tree-object-type
Tree: Added a function that returns the type of a tree entry.
2011-06-06 18:33:38 -07:00
Vicent Martí
1b0d92b141 Merge pull request #238 from pegonma/git_oid_ncmp
Better name for git_oid_match
2011-06-06 18:28:11 -07:00