Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
git2
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
git2
Commits
d6b97cbb
Commit
d6b97cbb
authored
Oct 11, 2014
by
Edward Thomson
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2596 from libgit2/cmn/maint-21
Add a few backports to 0.21 maintenance
parents
59fbaa4b
05713621
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
112 additions
and
38 deletions
+112
-38
include/git2.h
+1
-0
src/cc-compat.h
+8
-0
src/config_file.c
+1
-1
src/diff_patch.c
+1
-0
src/filter.c
+11
-2
src/global.c
+3
-0
src/index.c
+29
-24
src/netops.c
+1
-1
src/pack.c
+1
-1
src/pool.c
+1
-1
src/remote.c
+6
-2
src/stash.c
+5
-3
tests/fetchhead/fetchhead_data.h
+15
-0
tests/merge/merge_helpers.c
+1
-1
tests/odb/foreach.c
+1
-1
tests/online/fetchhead.c
+12
-0
tests/pack/packbuilder.c
+1
-1
tests/threads/basic.c
+14
-0
No files found.
include/git2.h
View file @
d6b97cbb
...
...
@@ -32,6 +32,7 @@
#include "git2/notes.h"
#include "git2/object.h"
#include "git2/odb.h"
#include "git2/odb_backend.h"
#include "git2/oid.h"
#include "git2/pack.h"
#include "git2/patch.h"
...
...
src/cc-compat.h
View file @
d6b97cbb
...
...
@@ -35,6 +35,14 @@
# define GIT_TYPEOF(x)
#endif
#if defined(__GNUC__)
# define GIT_ALIGN(x,size) x __attribute__ ((aligned(size)))
#elif defined(_MSC_VER)
# define GIT_ALIGN(x,size) __declspec(align(size)) x
#else
# define GIT_ALIGN(x,size) x
#endif
#define GIT_UNUSED(x) ((void)(x))
/* Define the printf format specifer to use for size_t output */
...
...
src/config_file.c
View file @
d6b97cbb
...
...
@@ -1163,7 +1163,7 @@ static int strip_comments(char *line, int in_quotes)
}
/* skip any space at the end */
if
(
ptr
>
line
&&
git__isspace
(
ptr
[
-
1
]))
{
while
(
ptr
>
line
&&
git__isspace
(
ptr
[
-
1
]))
{
ptr
--
;
}
ptr
[
0
]
=
'\0'
;
...
...
src/diff_patch.c
View file @
d6b97cbb
...
...
@@ -274,6 +274,7 @@ int git_diff_foreach(
return
error
;
memset
(
&
xo
,
0
,
sizeof
(
xo
));
memset
(
&
patch
,
0
,
sizeof
(
patch
));
diff_output_init
(
&
xo
.
output
,
&
diff
->
opts
,
file_cb
,
hunk_cb
,
data_cb
,
payload
);
git_xdiff_init
(
&
xo
,
&
diff
->
opts
);
...
...
src/filter.c
View file @
d6b97cbb
...
...
@@ -38,7 +38,7 @@ struct git_filter_list {
};
typedef
struct
{
c
onst
c
har
*
filter_name
;
char
*
filter_name
;
git_filter
*
filter
;
int
priority
;
int
initialized
;
...
...
@@ -75,6 +75,7 @@ static void filter_registry_shutdown(void)
fdef
->
initialized
=
false
;
}
git__free
(
fdef
->
filter_name
);
git__free
(
fdef
->
attrdata
);
git__free
(
fdef
);
}
...
...
@@ -230,6 +231,8 @@ int git_filter_register(
size_t
nattr
=
0
,
nmatch
=
0
;
git_buf
attrs
=
GIT_BUF_INIT
;
assert
(
name
&&
filter
);
if
(
filter_registry_initialize
()
<
0
)
return
-
1
;
...
...
@@ -246,7 +249,9 @@ int git_filter_register(
sizeof
(
git_filter_def
)
+
2
*
nattr
*
sizeof
(
char
*
),
1
);
GITERR_CHECK_ALLOC
(
fdef
);
fdef
->
filter_name
=
name
;
fdef
->
filter_name
=
git__strdup
(
name
);
GITERR_CHECK_ALLOC
(
fdef
->
filter_name
);
fdef
->
filter
=
filter
;
fdef
->
priority
=
priority
;
fdef
->
nattrs
=
nattr
;
...
...
@@ -256,6 +261,7 @@ int git_filter_register(
filter_def_set_attrs
(
fdef
);
if
(
git_vector_insert
(
&
git__filter_registry
->
filters
,
fdef
)
<
0
)
{
git__free
(
fdef
->
filter_name
);
git__free
(
fdef
->
attrdata
);
git__free
(
fdef
);
return
-
1
;
...
...
@@ -270,6 +276,8 @@ int git_filter_unregister(const char *name)
size_t
pos
;
git_filter_def
*
fdef
;
assert
(
name
);
/* cannot unregister default filters */
if
(
!
strcmp
(
GIT_FILTER_CRLF
,
name
)
||
!
strcmp
(
GIT_FILTER_IDENT
,
name
))
{
giterr_set
(
GITERR_FILTER
,
"Cannot unregister filter '%s'"
,
name
);
...
...
@@ -288,6 +296,7 @@ int git_filter_unregister(const char *name)
fdef
->
initialized
=
false
;
}
git__free
(
fdef
->
filter_name
);
git__free
(
fdef
->
attrdata
);
git__free
(
fdef
);
...
...
src/global.c
View file @
d6b97cbb
...
...
@@ -221,6 +221,9 @@ int init_error = 0;
static
void
cb__free_status
(
void
*
st
)
{
git_global_st
*
state
=
(
git_global_st
*
)
st
;
git__free
(
state
->
error_t
.
message
);
git__free
(
st
);
}
...
...
src/index.c
View file @
d6b97cbb
...
...
@@ -1767,35 +1767,42 @@ static size_t read_entry(
git_index_entry
**
out
,
const
void
*
buffer
,
size_t
buffer_size
)
{
size_t
path_length
,
entry_size
;
uint16_t
flags_raw
;
const
char
*
path_ptr
;
const
struct
entry_short
*
source
=
buffer
;
struct
entry_short
source
;
git_index_entry
entry
=
{{
0
}};
if
(
INDEX_FOOTER_SIZE
+
minimal_entry_size
>
buffer_size
)
return
0
;
entry
.
ctime
.
seconds
=
(
git_time_t
)
ntohl
(
source
->
ctime
.
seconds
);
entry
.
ctime
.
nanoseconds
=
ntohl
(
source
->
ctime
.
nanoseconds
);
entry
.
mtime
.
seconds
=
(
git_time_t
)
ntohl
(
source
->
mtime
.
seconds
);
entry
.
mtime
.
nanoseconds
=
ntohl
(
source
->
mtime
.
nanoseconds
);
entry
.
dev
=
ntohl
(
source
->
dev
);
entry
.
ino
=
ntohl
(
source
->
ino
);
entry
.
mode
=
ntohl
(
source
->
mode
);
entry
.
uid
=
ntohl
(
source
->
uid
);
entry
.
gid
=
ntohl
(
source
->
gid
);
entry
.
file_size
=
ntohl
(
source
->
file_size
);
git_oid_cpy
(
&
entry
.
id
,
&
source
->
oid
);
entry
.
flags
=
ntohs
(
source
->
flags
);
/* buffer is not guaranteed to be aligned */
memcpy
(
&
source
,
buffer
,
sizeof
(
struct
entry_short
));
entry
.
ctime
.
seconds
=
(
git_time_t
)
ntohl
(
source
.
ctime
.
seconds
);
entry
.
ctime
.
nanoseconds
=
ntohl
(
source
.
ctime
.
nanoseconds
);
entry
.
mtime
.
seconds
=
(
git_time_t
)
ntohl
(
source
.
mtime
.
seconds
);
entry
.
mtime
.
nanoseconds
=
ntohl
(
source
.
mtime
.
nanoseconds
);
entry
.
dev
=
ntohl
(
source
.
dev
);
entry
.
ino
=
ntohl
(
source
.
ino
);
entry
.
mode
=
ntohl
(
source
.
mode
);
entry
.
uid
=
ntohl
(
source
.
uid
);
entry
.
gid
=
ntohl
(
source
.
gid
);
entry
.
file_size
=
ntohl
(
source
.
file_size
);
git_oid_cpy
(
&
entry
.
id
,
&
source
.
oid
);
entry
.
flags
=
ntohs
(
source
.
flags
);
if
(
entry
.
flags
&
GIT_IDXENTRY_EXTENDED
)
{
const
struct
entry_long
*
source_l
=
(
const
struct
entry_long
*
)
source
;
path_ptr
=
source_l
->
path
;
uint16_t
flags_raw
;
size_t
flags_offset
;
flags_raw
=
ntohs
(
source_l
->
flags_extended
);
memcpy
(
&
entry
.
flags_extended
,
&
flags_raw
,
2
);
flags_offset
=
offsetof
(
struct
entry_long
,
flags_extended
);
memcpy
(
&
flags_raw
,
(
const
char
*
)
buffer
+
flags_offset
,
sizeof
(
flags_raw
));
flags_raw
=
ntohs
(
flags_raw
);
memcpy
(
&
entry
.
flags_extended
,
&
flags_raw
,
sizeof
(
flags_raw
));
path_ptr
=
(
const
char
*
)
buffer
+
offsetof
(
struct
entry_long
,
path
);
}
else
path_ptr
=
source
->
path
;
path_ptr
=
(
const
char
*
)
buffer
+
offsetof
(
struct
entry_short
,
path
)
;
path_length
=
entry
.
flags
&
GIT_IDXENTRY_NAMEMASK
;
...
...
@@ -1846,14 +1853,12 @@ static int read_header(struct index_header *dest, const void *buffer)
static
size_t
read_extension
(
git_index
*
index
,
const
char
*
buffer
,
size_t
buffer_size
)
{
const
struct
index_extension
*
source
;
struct
index_extension
dest
;
size_t
total_size
;
source
=
(
const
struct
index_extension
*
)(
buffer
);
memcpy
(
dest
.
signature
,
source
->
signature
,
4
);
dest
.
extension_size
=
ntohl
(
source
->
extension_size
);
/* buffer is not guaranteed to be aligned */
memcpy
(
&
dest
,
buffer
,
sizeof
(
struct
index_extension
));
dest
.
extension_size
=
ntohl
(
dest
.
extension_size
);
total_size
=
dest
.
extension_size
+
sizeof
(
struct
index_extension
);
...
...
src/netops.c
View file @
d6b97cbb
...
...
@@ -460,7 +460,7 @@ int gitno_connect(gitno_socket *s_out, const char *host, const char *port, int f
hints
.
ai_socktype
=
SOCK_STREAM
;
hints
.
ai_family
=
AF_UNSPEC
;
if
((
ret
=
p_getaddrinfo
(
host
,
port
,
&
hints
,
&
info
))
<
0
)
{
if
((
ret
=
p_getaddrinfo
(
host
,
port
,
&
hints
,
&
info
))
!=
0
)
{
giterr_set
(
GITERR_NET
,
"Failed to resolve address for %s: %s"
,
host
,
p_gai_strerror
(
ret
));
return
-
1
;
...
...
src/pack.c
View file @
d6b97cbb
...
...
@@ -620,7 +620,7 @@ int git_packfile_unpack(
struct
pack_chain_elem
*
elem
=
NULL
,
*
stack
;
git_pack_cache_entry
*
cached
=
NULL
;
struct
pack_chain_elem
small_stack
[
SMALL_STACK_SIZE
];
size_t
stack_size
,
elem_pos
;
size_t
stack_size
=
0
,
elem_pos
;
git_otype
base_type
;
/*
...
...
src/pool.c
View file @
d6b97cbb
...
...
@@ -7,7 +7,7 @@ struct git_pool_page {
git_pool_page
*
next
;
uint32_t
size
;
uint32_t
avail
;
char
data
[
GIT_FLEX_ARRAY
]
;
GIT_ALIGN
(
char
data
[
GIT_FLEX_ARRAY
],
8
)
;
};
struct
pool_freelist
{
...
...
src/remote.c
View file @
d6b97cbb
...
...
@@ -1057,16 +1057,20 @@ static int update_tips_for_spec(
if
(
autotag
&&
!
git_odb_exists
(
odb
,
&
head
->
oid
))
continue
;
if
(
git_vector_insert
(
&
update_heads
,
head
)
<
0
)
if
(
!
autotag
&&
git_vector_insert
(
&
update_heads
,
head
)
<
0
)
goto
on_error
;
error
=
git_reference_name_to_id
(
&
old
,
remote
->
repo
,
refname
.
ptr
);
if
(
error
<
0
&&
error
!=
GIT_ENOTFOUND
)
goto
on_error
;
if
(
error
==
GIT_ENOTFOUND
)
if
(
error
==
GIT_ENOTFOUND
)
{
memset
(
&
old
,
0
,
GIT_OID_RAWSZ
);
if
(
autotag
&&
git_vector_insert
(
&
update_heads
,
head
)
<
0
)
goto
on_error
;
}
if
(
!
git_oid__cmp
(
&
old
,
&
head
->
oid
))
continue
;
...
...
src/stash.c
View file @
d6b97cbb
...
...
@@ -232,7 +232,8 @@ static int build_untracked_tree(
}
if
(
flags
&
GIT_STASH_INCLUDE_IGNORED
)
{
opts
.
flags
|=
GIT_DIFF_INCLUDE_IGNORED
;
opts
.
flags
|=
GIT_DIFF_INCLUDE_IGNORED
|
GIT_DIFF_RECURSE_IGNORED_DIRS
;
data
.
include_ignored
=
true
;
}
...
...
@@ -447,10 +448,11 @@ static int ensure_there_are_changes_to_stash(
if
(
include_untracked_files
)
opts
.
flags
|=
GIT_STATUS_OPT_INCLUDE_UNTRACKED
|
GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS
;
GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS
;
if
(
include_ignored_files
)
opts
.
flags
|=
GIT_STATUS_OPT_INCLUDE_IGNORED
;
opts
.
flags
|=
GIT_STATUS_OPT_INCLUDE_IGNORED
|
GIT_STATUS_OPT_RECURSE_IGNORED_DIRS
;
error
=
git_status_foreach_ext
(
repo
,
&
opts
,
is_dirty_cb
,
NULL
);
...
...
tests/fetchhead/fetchhead_data.h
View file @
d6b97cbb
...
...
@@ -16,6 +16,11 @@
"8f50ba15d49353813cc6e20298002c0d17b0a9ee\tnot-for-merge\ttag 'commit_tree' of git://github.com/libgit2/TestGitRepository\n" \
"6e0c7bdb9b4ed93212491ee778ca1c65047cab4e\tnot-for-merge\ttag 'nearly-dangling' of git://github.com/libgit2/TestGitRepository\n"
#define FETCH_HEAD_WILDCARD_DATA2 \
"49322bb17d3acc9146f98c97d078513228bbf3c0\t\tbranch 'master' of git://github.com/libgit2/TestGitRepository\n" \
"0966a434eb1a025db6b71485ab63a3bfbea520b6\tnot-for-merge\tbranch 'first-merge' of git://github.com/libgit2/TestGitRepository\n" \
"42e4e7c5e507e113ebbb7801b16b52cf867b7ce1\tnot-for-merge\tbranch 'no-parent' of git://github.com/libgit2/TestGitRepository\n" \
#define FETCH_HEAD_NO_MERGE_DATA \
"0966a434eb1a025db6b71485ab63a3bfbea520b6\tnot-for-merge\tbranch 'first-merge' of git://github.com/libgit2/TestGitRepository\n" \
"49322bb17d3acc9146f98c97d078513228bbf3c0\tnot-for-merge\tbranch 'master' of git://github.com/libgit2/TestGitRepository\n" \
...
...
@@ -25,6 +30,16 @@
"8f50ba15d49353813cc6e20298002c0d17b0a9ee\tnot-for-merge\ttag 'commit_tree' of git://github.com/libgit2/TestGitRepository\n" \
"6e0c7bdb9b4ed93212491ee778ca1c65047cab4e\tnot-for-merge\ttag 'nearly-dangling' of git://github.com/libgit2/TestGitRepository\n"
#define FETCH_HEAD_NO_MERGE_DATA2 \
"0966a434eb1a025db6b71485ab63a3bfbea520b6\tnot-for-merge\tbranch 'first-merge' of git://github.com/libgit2/TestGitRepository\n" \
"49322bb17d3acc9146f98c97d078513228bbf3c0\tnot-for-merge\tbranch 'master' of git://github.com/libgit2/TestGitRepository\n" \
"42e4e7c5e507e113ebbb7801b16b52cf867b7ce1\tnot-for-merge\tbranch 'no-parent' of git://github.com/libgit2/TestGitRepository\n" \
#define FETCH_HEAD_NO_MERGE_DATA3 \
"0966a434eb1a025db6b71485ab63a3bfbea520b6\tnot-for-merge\tbranch 'first-merge' of git://github.com/libgit2/TestGitRepository\n" \
"49322bb17d3acc9146f98c97d078513228bbf3c0\tnot-for-merge\tbranch 'master' of git://github.com/libgit2/TestGitRepository\n" \
"42e4e7c5e507e113ebbb7801b16b52cf867b7ce1\tnot-for-merge\tbranch 'no-parent' of git://github.com/libgit2/TestGitRepository\n" \
"8f50ba15d49353813cc6e20298002c0d17b0a9ee\tnot-for-merge\ttag 'commit_tree' of git://github.com/libgit2/TestGitRepository\n" \
#define FETCH_HEAD_EXPLICIT_DATA \
"0966a434eb1a025db6b71485ab63a3bfbea520b6\t\tbranch 'first-merge' of git://github.com/libgit2/TestGitRepository\n"
...
...
tests/merge/merge_helpers.c
View file @
d6b97cbb
...
...
@@ -327,7 +327,7 @@ int merge_test_reuc(git_index *index, const struct merge_reuc_entry expected[],
int
dircount
(
void
*
payload
,
git_buf
*
pathbuf
)
{
in
t
*
entries
=
payload
;
size_
t
*
entries
=
payload
;
size_t
len
=
git_buf_len
(
pathbuf
);
if
(
len
<
5
||
strcmp
(
pathbuf
->
ptr
+
(
git_buf_len
(
pathbuf
)
-
5
),
"/.git"
)
!=
0
)
...
...
tests/odb/foreach.c
View file @
d6b97cbb
...
...
@@ -87,7 +87,7 @@ void test_odb_foreach__files_in_objects_dir(void)
git_repository
*
repo
;
git_odb
*
odb
;
git_buf
buf
=
GIT_BUF_INIT
;
size_
t
nobj
=
0
;
in
t
nobj
=
0
;
cl_fixture_sandbox
(
"testrepo.git"
);
cl_git_pass
(
git_repository_open
(
&
repo
,
"testrepo.git"
));
...
...
tests/online/fetchhead.c
View file @
d6b97cbb
...
...
@@ -67,6 +67,11 @@ static void fetchhead_test_fetch(const char *fetchspec, const char *expected_fet
void
test_online_fetchhead__wildcard_spec
(
void
)
{
fetchhead_test_clone
();
fetchhead_test_fetch
(
NULL
,
FETCH_HEAD_WILDCARD_DATA2
);
cl_git_pass
(
git_tag_delete
(
g_repo
,
"annotated_tag"
));
cl_git_pass
(
git_tag_delete
(
g_repo
,
"blob"
));
cl_git_pass
(
git_tag_delete
(
g_repo
,
"commit_tree"
));
cl_git_pass
(
git_tag_delete
(
g_repo
,
"nearly-dangling"
));
fetchhead_test_fetch
(
NULL
,
FETCH_HEAD_WILDCARD_DATA
);
}
...
...
@@ -87,5 +92,12 @@ void test_online_fetchhead__no_merges(void)
cl_git_pass
(
git_config_delete_entry
(
config
,
"branch.master.merge"
));
git_config_free
(
config
);
fetchhead_test_fetch
(
NULL
,
FETCH_HEAD_NO_MERGE_DATA2
);
cl_git_pass
(
git_tag_delete
(
g_repo
,
"annotated_tag"
));
cl_git_pass
(
git_tag_delete
(
g_repo
,
"blob"
));
cl_git_pass
(
git_tag_delete
(
g_repo
,
"commit_tree"
));
cl_git_pass
(
git_tag_delete
(
g_repo
,
"nearly-dangling"
));
fetchhead_test_fetch
(
NULL
,
FETCH_HEAD_NO_MERGE_DATA
);
cl_git_pass
(
git_tag_delete
(
g_repo
,
"commit_tree"
));
fetchhead_test_fetch
(
NULL
,
FETCH_HEAD_NO_MERGE_DATA3
);
}
tests/pack/packbuilder.c
View file @
d6b97cbb
...
...
@@ -47,7 +47,7 @@ void test_pack_packbuilder__cleanup(void)
git_indexer_free
(
_indexer
);
_indexer
=
NULL
;
p_chdir
(
".."
);
cl_git_pass
(
p_chdir
(
".."
)
);
cl_git_sandbox_cleanup
();
_repo
=
NULL
;
}
...
...
tests/threads/basic.c
View file @
d6b97cbb
#include "clar_libgit2.h"
#include "thread_helpers.h"
#include "cache.h"
...
...
@@ -34,3 +35,16 @@ void test_threads_basic__multiple_init(void)
cl_git_pass
(
git_repository_open
(
&
nested_repo
,
cl_fixture
(
"testrepo.git"
)));
git_repository_free
(
nested_repo
);
}
static
void
*
set_error
(
void
*
dummy
)
{
giterr_set
(
GITERR_INVALID
,
"oh no, something happened!
\n
"
);
return
dummy
;
}
/* Set errors so we can check that we free it */
void
test_threads_basic__set_error
(
void
)
{
run_in_parallel
(
1
,
4
,
set_error
,
NULL
,
NULL
);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment