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
8aa04a37
Unverified
Commit
8aa04a37
authored
Feb 19, 2020
by
Patrick Steinhardt
Committed by
GitHub
Feb 19, 2020
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #5391 from pks-t/pks/coverity-fixes
Coverity fixes
parents
17223902
b3b92e09
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
146 additions
and
113 deletions
+146
-113
src/cache.c
+8
-4
src/indexer.c
+3
-3
src/notes.c
+6
-3
src/pack-objects.c
+3
-1
src/push.c
+3
-2
src/repository.c
+63
-50
src/revwalk.c
+1
-1
src/streams/openssl.c
+1
-1
src/worktree.c
+44
-28
tests/blame/blame_helpers.c
+2
-2
tests/blame/blame_helpers.h
+1
-1
tests/config/global.c
+1
-1
tests/config/new.c
+1
-1
tests/ignore/path.c
+2
-3
tests/index/nsec.c
+1
-1
tests/index/tests.c
+1
-2
tests/network/refspecs.c
+1
-1
tests/notes/notes.c
+4
-8
No files found.
src/cache.c
View file @
8aa04a37
...
@@ -208,10 +208,14 @@ static void *cache_store(git_cache *cache, git_cached_obj *entry)
...
@@ -208,10 +208,14 @@ static void *cache_store(git_cache *cache, git_cached_obj *entry)
entry
=
stored_entry
;
entry
=
stored_entry
;
}
else
if
(
stored_entry
->
flags
==
GIT_CACHE_STORE_RAW
&&
}
else
if
(
stored_entry
->
flags
==
GIT_CACHE_STORE_RAW
&&
entry
->
flags
==
GIT_CACHE_STORE_PARSED
)
{
entry
->
flags
==
GIT_CACHE_STORE_PARSED
)
{
git_cached_obj_decref
(
stored_entry
);
if
(
git_oidmap_set
(
cache
->
map
,
&
entry
->
oid
,
entry
)
==
0
)
{
git_cached_obj_incref
(
entry
);
git_cached_obj_decref
(
stored_entry
);
git_cached_obj_incref
(
entry
);
git_oidmap_set
(
cache
->
map
,
&
entry
->
oid
,
entry
);
}
else
{
git_cached_obj_decref
(
entry
);
git_cached_obj_incref
(
stored_entry
);
entry
=
stored_entry
;
}
}
else
{
}
else
{
/* NO OP */
/* NO OP */
}
}
...
...
src/indexer.c
View file @
8aa04a37
...
@@ -150,11 +150,11 @@ int git_indexer_new(
...
@@ -150,11 +150,11 @@ int git_indexer_new(
idx
->
progress_cb
=
opts
.
progress_cb
;
idx
->
progress_cb
=
opts
.
progress_cb
;
idx
->
progress_payload
=
opts
.
progress_cb_payload
;
idx
->
progress_payload
=
opts
.
progress_cb_payload
;
idx
->
mode
=
mode
?
mode
:
GIT_PACK_FILE_MODE
;
idx
->
mode
=
mode
?
mode
:
GIT_PACK_FILE_MODE
;
git_hash_ctx_init
(
&
idx
->
hash_ctx
);
git_hash_ctx_init
(
&
idx
->
trailer
);
git_buf_init
(
&
idx
->
entry_data
,
0
);
git_buf_init
(
&
idx
->
entry_data
,
0
);
if
((
error
=
git_oidmap_new
(
&
idx
->
expected_oids
))
<
0
)
if
((
error
=
git_hash_ctx_init
(
&
idx
->
hash_ctx
))
<
0
||
(
error
=
git_hash_ctx_init
(
&
idx
->
trailer
))
<
0
||
(
error
=
git_oidmap_new
(
&
idx
->
expected_oids
))
<
0
)
goto
cleanup
;
goto
cleanup
;
idx
->
do_verify
=
opts
.
verify
;
idx
->
do_verify
=
opts
.
verify
;
...
...
src/notes.c
View file @
8aa04a37
...
@@ -808,8 +808,11 @@ int git_note_next(
...
@@ -808,8 +808,11 @@ int git_note_next(
git_oid_cpy
(
note_id
,
&
item
->
id
);
git_oid_cpy
(
note_id
,
&
item
->
id
);
if
(
!
(
error
=
process_entry_path
(
item
->
path
,
annotated_id
))
)
if
(
(
error
=
process_entry_path
(
item
->
path
,
annotated_id
))
<
0
)
git_iterator_advance
(
NULL
,
it
)
;
return
error
;
return
error
;
if
((
error
=
git_iterator_advance
(
NULL
,
it
))
<
0
&&
error
!=
GIT_ITEROVER
)
return
error
;
return
0
;
}
}
src/pack-objects.c
View file @
8aa04a37
...
@@ -374,7 +374,9 @@ static int write_object(
...
@@ -374,7 +374,9 @@ static int write_object(
GIT_ERROR_CHECK_ALLOC
(
zbuf
);
GIT_ERROR_CHECK_ALLOC
(
zbuf
);
git_zstream_reset
(
&
pb
->
zstream
);
git_zstream_reset
(
&
pb
->
zstream
);
git_zstream_set_input
(
&
pb
->
zstream
,
data
,
data_len
);
if
((
error
=
git_zstream_set_input
(
&
pb
->
zstream
,
data
,
data_len
))
<
0
)
goto
done
;
while
(
!
git_zstream_done
(
&
pb
->
zstream
))
{
while
(
!
git_zstream_done
(
&
pb
->
zstream
))
{
if
((
error
=
git_zstream_get_output
(
zbuf
,
&
zbuf_len
,
&
pb
->
zstream
))
<
0
||
if
((
error
=
git_zstream_get_output
(
zbuf
,
&
zbuf_len
,
&
pb
->
zstream
))
<
0
||
...
...
src/push.c
View file @
8aa04a37
...
@@ -349,8 +349,9 @@ static int queue_objects(git_push *push)
...
@@ -349,8 +349,9 @@ static int queue_objects(git_push *push)
if
(
git_oid_is_zero
(
&
head
->
oid
))
if
(
git_oid_is_zero
(
&
head
->
oid
))
continue
;
continue
;
/* TODO */
if
((
error
=
git_revwalk_hide
(
rw
,
&
head
->
oid
))
<
0
&&
git_revwalk_hide
(
rw
,
&
head
->
oid
);
error
!=
GIT_ENOTFOUND
&&
error
!=
GIT_EINVALIDSPEC
&&
error
!=
GIT_EPEEL
)
goto
on_error
;
}
}
error
=
git_packbuilder_insert_walk
(
push
->
pb
,
rw
);
error
=
git_packbuilder_insert_walk
(
push
->
pb
,
rw
);
...
...
src/repository.c
View file @
8aa04a37
...
@@ -189,19 +189,25 @@ void git_repository_free(git_repository *repo)
...
@@ -189,19 +189,25 @@ void git_repository_free(git_repository *repo)
*
*
* Open a repository object from its path
* Open a repository object from its path
*/
*/
static
bool
valid_repository_path
(
git_buf
*
repository_path
,
git_buf
*
common_path
)
static
int
is_valid_repository_path
(
bool
*
out
,
git_buf
*
repository_path
,
git_buf
*
common_path
)
{
{
int
error
;
*
out
=
false
;
/* Check if we have a separate commondir (e.g. we have a
/* Check if we have a separate commondir (e.g. we have a
* worktree) */
* worktree) */
if
(
git_path_contains_file
(
repository_path
,
GIT_COMMONDIR_FILE
))
{
if
(
git_path_contains_file
(
repository_path
,
GIT_COMMONDIR_FILE
))
{
git_buf
common_link
=
GIT_BUF_INIT
;
git_buf
common_link
=
GIT_BUF_INIT
;
git_buf_joinpath
(
&
common_link
,
repository_path
->
ptr
,
GIT_COMMONDIR_FILE
);
git_futils_readbuffer
(
&
common_link
,
common_link
.
ptr
);
if
((
error
=
git_buf_joinpath
(
&
common_link
,
repository_path
->
ptr
,
GIT_COMMONDIR_FILE
))
<
0
||
git_buf_rtrim
(
&
common_link
);
(
error
=
git_futils_readbuffer
(
&
common_link
,
common_link
.
ptr
))
<
0
)
return
error
;
git_buf_rtrim
(
&
common_link
);
if
(
git_path_is_relative
(
common_link
.
ptr
))
{
if
(
git_path_is_relative
(
common_link
.
ptr
))
{
git_buf_joinpath
(
common_path
,
repository_path
->
ptr
,
common_link
.
ptr
);
if
((
error
=
git_buf_joinpath
(
common_path
,
repository_path
->
ptr
,
common_link
.
ptr
))
<
0
)
return
error
;
}
else
{
}
else
{
git_buf_swap
(
common_path
,
&
common_link
);
git_buf_swap
(
common_path
,
&
common_link
);
}
}
...
@@ -209,24 +215,26 @@ static bool valid_repository_path(git_buf *repository_path, git_buf *common_path
...
@@ -209,24 +215,26 @@ static bool valid_repository_path(git_buf *repository_path, git_buf *common_path
git_buf_dispose
(
&
common_link
);
git_buf_dispose
(
&
common_link
);
}
}
else
{
else
{
git_buf_set
(
common_path
,
repository_path
->
ptr
,
repository_path
->
size
);
if
((
error
=
git_buf_set
(
common_path
,
repository_path
->
ptr
,
repository_path
->
size
))
<
0
)
return
error
;
}
}
/* Make sure the commondir path always has a trailing * slash */
/* Make sure the commondir path always has a trailing * slash */
if
(
git_buf_rfind
(
common_path
,
'/'
)
!=
(
ssize_t
)
common_path
->
size
-
1
)
if
(
git_buf_rfind
(
common_path
,
'/'
)
!=
(
ssize_t
)
common_path
->
size
-
1
)
git_buf_putc
(
common_path
,
'/'
);
if
((
error
=
git_buf_putc
(
common_path
,
'/'
))
<
0
)
return
error
;
/* Ensure HEAD file exists */
/* Ensure HEAD file exists */
if
(
git_path_contains_file
(
repository_path
,
GIT_HEAD_FILE
)
==
false
)
if
(
git_path_contains_file
(
repository_path
,
GIT_HEAD_FILE
)
==
false
)
return
false
;
return
0
;
/* Check files in common dir */
/* Check files in common dir */
if
(
git_path_contains_dir
(
common_path
,
GIT_OBJECTS_DIR
)
==
false
)
if
(
git_path_contains_dir
(
common_path
,
GIT_OBJECTS_DIR
)
==
false
)
return
false
;
return
0
;
if
(
git_path_contains_dir
(
common_path
,
GIT_REFS_DIR
)
==
false
)
if
(
git_path_contains_dir
(
common_path
,
GIT_REFS_DIR
)
==
false
)
return
false
;
return
0
;
return
true
;
*
out
=
true
;
return
0
;
}
}
static
git_repository
*
repository_alloc
(
void
)
static
git_repository
*
repository_alloc
(
void
)
...
@@ -441,15 +449,15 @@ static int find_repo(
...
@@ -441,15 +449,15 @@ static int find_repo(
uint32_t
flags
,
uint32_t
flags
,
const
char
*
ceiling_dirs
)
const
char
*
ceiling_dirs
)
{
{
int
error
;
git_buf
path
=
GIT_BUF_INIT
;
git_buf
path
=
GIT_BUF_INIT
;
git_buf
repo_link
=
GIT_BUF_INIT
;
git_buf
repo_link
=
GIT_BUF_INIT
;
git_buf
common_link
=
GIT_BUF_INIT
;
git_buf
common_link
=
GIT_BUF_INIT
;
struct
stat
st
;
struct
stat
st
;
dev_t
initial_device
=
0
;
dev_t
initial_device
=
0
;
int
min_iterations
;
int
min_iterations
;
bool
in_dot_git
;
bool
in_dot_git
,
is_valid
;
size_t
ceiling_offset
=
0
;
size_t
ceiling_offset
=
0
;
int
error
;
git_buf_clear
(
gitdir_path
);
git_buf_clear
(
gitdir_path
);
...
@@ -475,9 +483,8 @@ static int find_repo(
...
@@ -475,9 +483,8 @@ static int find_repo(
for
(;;)
{
for
(;;)
{
if
(
!
(
flags
&
GIT_REPOSITORY_OPEN_NO_DOTGIT
))
{
if
(
!
(
flags
&
GIT_REPOSITORY_OPEN_NO_DOTGIT
))
{
if
(
!
in_dot_git
)
{
if
(
!
in_dot_git
)
{
error
=
git_buf_joinpath
(
&
path
,
path
.
ptr
,
DOT_GIT
);
if
((
error
=
git_buf_joinpath
(
&
path
,
path
.
ptr
,
DOT_GIT
))
<
0
)
if
(
error
<
0
)
goto
out
;
break
;
}
}
in_dot_git
=
!
in_dot_git
;
in_dot_git
=
!
in_dot_git
;
}
}
...
@@ -491,28 +498,33 @@ static int find_repo(
...
@@ -491,28 +498,33 @@ static int find_repo(
break
;
break
;
if
(
S_ISDIR
(
st
.
st_mode
))
{
if
(
S_ISDIR
(
st
.
st_mode
))
{
if
(
valid_repository_path
(
&
path
,
&
common_link
))
{
if
((
error
=
is_valid_repository_path
(
&
is_valid
,
&
path
,
&
common_link
))
<
0
)
git_path_to_dir
(
&
path
);
goto
out
;
git_buf_set
(
gitdir_path
,
path
.
ptr
,
path
.
size
);
if
(
is_valid
)
{
if
((
error
=
git_path_to_dir
(
&
path
))
<
0
||
(
error
=
git_buf_set
(
gitdir_path
,
path
.
ptr
,
path
.
size
))
<
0
)
goto
out
;
if
(
gitlink_path
)
if
(
gitlink_path
)
git_buf_attach
(
gitlink_path
,
if
((
error
=
git_buf_attach
(
gitlink_path
,
git_worktree__read_link
(
path
.
ptr
,
GIT_GITDIR_FILE
),
0
))
<
0
)
g
it_worktree__read_link
(
path
.
ptr
,
GIT_GITDIR_FILE
),
0
)
;
g
oto
out
;
if
(
commondir_path
)
if
(
commondir_path
)
git_buf_swap
(
&
common_link
,
commondir_path
);
git_buf_swap
(
&
common_link
,
commondir_path
);
break
;
break
;
}
}
}
}
else
if
(
S_ISREG
(
st
.
st_mode
)
&&
git__suffixcmp
(
path
.
ptr
,
"/"
DOT_GIT
)
==
0
)
{
else
if
(
S_ISREG
(
st
.
st_mode
)
&&
git__suffixcmp
(
path
.
ptr
,
"/"
DOT_GIT
)
==
0
)
{
if
((
error
=
read_gitfile
(
&
repo_link
,
path
.
ptr
))
<
0
||
error
=
read_gitfile
(
&
repo_link
,
path
.
ptr
);
(
error
=
is_valid_repository_path
(
&
is_valid
,
&
repo_link
,
&
common_link
))
<
0
)
if
(
error
<
0
)
goto
out
;
break
;
if
(
valid_repository_path
(
&
repo_link
,
&
common_link
)
)
{
if
(
is_valid
)
{
git_buf_swap
(
gitdir_path
,
&
repo_link
);
git_buf_swap
(
gitdir_path
,
&
repo_link
);
if
(
gitlink_path
)
if
(
gitlink_path
)
error
=
git_buf_put
(
gitlink_path
,
path
.
ptr
,
path
.
size
);
if
((
error
=
git_buf_put
(
gitlink_path
,
path
.
ptr
,
path
.
size
))
<
0
)
goto
out
;
if
(
commondir_path
)
if
(
commondir_path
)
git_buf_swap
(
&
common_link
,
commondir_path
);
git_buf_swap
(
&
common_link
,
commondir_path
);
}
}
...
@@ -523,10 +535,8 @@ static int find_repo(
...
@@ -523,10 +535,8 @@ static int find_repo(
/* Move up one directory. If we're in_dot_git, we'll search the
/* Move up one directory. If we're in_dot_git, we'll search the
* parent itself next. If we're !in_dot_git, we'll search .git
* parent itself next. If we're !in_dot_git, we'll search .git
* in the parent directory next (added at the top of the loop). */
* in the parent directory next (added at the top of the loop). */
if
(
git_path_dirname_r
(
&
path
,
path
.
ptr
)
<
0
)
{
if
((
error
=
git_path_dirname_r
(
&
path
,
path
.
ptr
))
<
0
)
error
=
-
1
;
goto
out
;
break
;
}
/* Once we've checked the directory (and .git if applicable),
/* Once we've checked the directory (and .git if applicable),
* find the ceiling for a search. */
* find the ceiling for a search. */
...
@@ -534,31 +544,28 @@ static int find_repo(
...
@@ -534,31 +544,28 @@ static int find_repo(
ceiling_offset
=
find_ceiling_dir_offset
(
path
.
ptr
,
ceiling_dirs
);
ceiling_offset
=
find_ceiling_dir_offset
(
path
.
ptr
,
ceiling_dirs
);
/* Check if we should stop searching here. */
/* Check if we should stop searching here. */
if
(
min_iterations
==
0
if
(
min_iterations
==
0
&&
&&
(
path
.
ptr
[
ceiling_offset
]
==
0
(
path
.
ptr
[
ceiling_offset
]
==
0
||
(
flags
&
GIT_REPOSITORY_OPEN_NO_SEARCH
)))
||
(
flags
&
GIT_REPOSITORY_OPEN_NO_SEARCH
)))
break
;
break
;
}
}
if
(
!
error
&&
workdir_path
&&
!
(
flags
&
GIT_REPOSITORY_OPEN_BARE
))
{
if
(
workdir_path
&&
!
(
flags
&
GIT_REPOSITORY_OPEN_BARE
))
{
if
(
!
git_buf_len
(
gitdir_path
))
if
(
!
git_buf_len
(
gitdir_path
))
git_buf_clear
(
workdir_path
);
git_buf_clear
(
workdir_path
);
else
{
else
if
((
error
=
git_path_dirname_r
(
workdir_path
,
path
.
ptr
))
<
0
||
git_path_dirname_r
(
workdir_path
,
path
.
ptr
);
(
error
=
git_path_to_dir
(
workdir_path
))
<
0
)
git_path_to_dir
(
workdir_path
);
goto
out
;
}
if
(
git_buf_oom
(
workdir_path
))
return
-
1
;
}
}
/* If we didn't find the repository, and we don't have any other error
/* If we didn't find the repository, and we don't have any other error
* to report, report that. */
* to report, report that. */
if
(
!
git_buf_len
(
gitdir_path
)
&&
!
error
)
{
if
(
!
git_buf_len
(
gitdir_path
))
{
git_error_set
(
GIT_ERROR_REPOSITORY
,
git_error_set
(
GIT_ERROR_REPOSITORY
,
"could not find repository from '%s'"
,
start_path
);
"could not find repository from '%s'"
,
start_path
);
error
=
GIT_ENOTFOUND
;
error
=
GIT_ENOTFOUND
;
goto
out
;
}
}
out:
git_buf_dispose
(
&
path
);
git_buf_dispose
(
&
path
);
git_buf_dispose
(
&
repo_link
);
git_buf_dispose
(
&
repo_link
);
git_buf_dispose
(
&
common_link
);
git_buf_dispose
(
&
common_link
);
...
@@ -569,14 +576,16 @@ int git_repository_open_bare(
...
@@ -569,14 +576,16 @@ int git_repository_open_bare(
git_repository
**
repo_ptr
,
git_repository
**
repo_ptr
,
const
char
*
bare_path
)
const
char
*
bare_path
)
{
{
int
error
;
git_buf
path
=
GIT_BUF_INIT
,
common_path
=
GIT_BUF_INIT
;
git_buf
path
=
GIT_BUF_INIT
,
common_path
=
GIT_BUF_INIT
;
git_repository
*
repo
=
NULL
;
git_repository
*
repo
=
NULL
;
bool
is_valid
;
int
error
;
if
((
error
=
git_path_prettify_dir
(
&
path
,
bare_path
,
NULL
))
<
0
)
if
((
error
=
git_path_prettify_dir
(
&
path
,
bare_path
,
NULL
))
<
0
||
(
error
=
is_valid_repository_path
(
&
is_valid
,
&
path
,
&
common_path
))
<
0
)
return
error
;
return
error
;
if
(
!
valid_repository_path
(
&
path
,
&
common_path
)
)
{
if
(
!
is_valid
)
{
git_buf_dispose
(
&
path
);
git_buf_dispose
(
&
path
);
git_buf_dispose
(
&
common_path
);
git_buf_dispose
(
&
common_path
);
git_error_set
(
GIT_ERROR_REPOSITORY
,
"path is not a repository: %s"
,
bare_path
);
git_error_set
(
GIT_ERROR_REPOSITORY
,
"path is not a repository: %s"
,
bare_path
);
...
@@ -2055,6 +2064,7 @@ int git_repository_init_ext(
...
@@ -2055,6 +2064,7 @@ int git_repository_init_ext(
git_buf
repo_path
=
GIT_BUF_INIT
,
wd_path
=
GIT_BUF_INIT
,
git_buf
repo_path
=
GIT_BUF_INIT
,
wd_path
=
GIT_BUF_INIT
,
common_path
=
GIT_BUF_INIT
,
head_path
=
GIT_BUF_INIT
;
common_path
=
GIT_BUF_INIT
,
head_path
=
GIT_BUF_INIT
;
const
char
*
wd
;
const
char
*
wd
;
bool
is_valid
;
int
error
;
int
error
;
assert
(
out
&&
given_repo
&&
opts
);
assert
(
out
&&
given_repo
&&
opts
);
...
@@ -2066,7 +2076,10 @@ int git_repository_init_ext(
...
@@ -2066,7 +2076,10 @@ int git_repository_init_ext(
wd
=
(
opts
->
flags
&
GIT_REPOSITORY_INIT_BARE
)
?
NULL
:
git_buf_cstr
(
&
wd_path
);
wd
=
(
opts
->
flags
&
GIT_REPOSITORY_INIT_BARE
)
?
NULL
:
git_buf_cstr
(
&
wd_path
);
if
(
valid_repository_path
(
&
repo_path
,
&
common_path
))
{
if
((
error
=
is_valid_repository_path
(
&
is_valid
,
&
repo_path
,
&
common_path
))
<
0
)
goto
out
;
if
(
is_valid
)
{
if
((
opts
->
flags
&
GIT_REPOSITORY_INIT_NO_REINIT
)
!=
0
)
{
if
((
opts
->
flags
&
GIT_REPOSITORY_INIT_NO_REINIT
)
!=
0
)
{
git_error_set
(
GIT_ERROR_REPOSITORY
,
git_error_set
(
GIT_ERROR_REPOSITORY
,
"attempt to reinitialize '%s'"
,
given_repo
);
"attempt to reinitialize '%s'"
,
given_repo
);
...
...
src/revwalk.c
View file @
8aa04a37
...
@@ -58,7 +58,7 @@ int git_revwalk__push_commit(git_revwalk *walk, const git_oid *oid, const git_re
...
@@ -58,7 +58,7 @@ int git_revwalk__push_commit(git_revwalk *walk, const git_oid *oid, const git_re
return
0
;
return
0
;
git_error_set
(
GIT_ERROR_INVALID
,
"object is not a committish"
);
git_error_set
(
GIT_ERROR_INVALID
,
"object is not a committish"
);
return
-
1
;
return
error
;
}
}
if
(
error
<
0
)
if
(
error
<
0
)
return
error
;
return
error
;
...
...
src/streams/openssl.c
View file @
8aa04a37
...
@@ -156,7 +156,7 @@ static void openssl_locking_function(
...
@@ -156,7 +156,7 @@ static void openssl_locking_function(
lock
=
mode
&
CRYPTO_LOCK
;
lock
=
mode
&
CRYPTO_LOCK
;
if
(
lock
)
{
if
(
lock
)
{
git_mutex_lock
(
&
openssl_locks
[
n
]);
(
void
)
git_mutex_lock
(
&
openssl_locks
[
n
]);
}
else
{
}
else
{
git_mutex_unlock
(
&
openssl_locks
[
n
]);
git_mutex_unlock
(
&
openssl_locks
[
n
]);
}
}
...
...
src/worktree.c
View file @
8aa04a37
...
@@ -136,11 +136,11 @@ static int open_worktree_dir(git_worktree **out, const char *parent, const char
...
@@ -136,11 +136,11 @@ static int open_worktree_dir(git_worktree **out, const char *parent, const char
goto
out
;
goto
out
;
}
}
if
((
wt
->
name
=
git__strdup
(
name
))
==
NULL
if
((
wt
->
name
=
git__strdup
(
name
))
==
NULL
||
||
(
wt
->
commondir_path
=
git_worktree__read_link
(
dir
,
"commondir"
))
==
NULL
(
wt
->
commondir_path
=
git_worktree__read_link
(
dir
,
"commondir"
))
==
NULL
||
||
(
wt
->
gitlink_path
=
git_worktree__read_link
(
dir
,
"gitdir"
))
==
NULL
(
wt
->
gitlink_path
=
git_worktree__read_link
(
dir
,
"gitdir"
))
==
NULL
||
||
(
parent
&&
(
wt
->
parent_path
=
git__strdup
(
parent
))
==
NULL
)
(
parent
&&
(
wt
->
parent_path
=
git__strdup
(
parent
))
==
NULL
)
||
||
(
wt
->
worktree_path
=
git_path_dirname
(
wt
->
gitlink_path
))
==
NULL
)
{
(
wt
->
worktree_path
=
git_path_dirname
(
wt
->
gitlink_path
))
==
NULL
)
{
error
=
-
1
;
error
=
-
1
;
goto
out
;
goto
out
;
}
}
...
@@ -149,7 +149,10 @@ static int open_worktree_dir(git_worktree **out, const char *parent, const char
...
@@ -149,7 +149,10 @@ static int open_worktree_dir(git_worktree **out, const char *parent, const char
goto
out
;
goto
out
;
wt
->
gitdir_path
=
git_buf_detach
(
&
gitdir
);
wt
->
gitdir_path
=
git_buf_detach
(
&
gitdir
);
wt
->
locked
=
!!
git_worktree_is_locked
(
NULL
,
wt
);
if
((
error
=
git_worktree_is_locked
(
NULL
,
wt
))
<
0
)
goto
out
;
wt
->
locked
=
!!
error
;
error
=
0
;
*
out
=
wt
;
*
out
=
wt
;
...
@@ -403,20 +406,24 @@ out:
...
@@ -403,20 +406,24 @@ out:
int
git_worktree_lock
(
git_worktree
*
wt
,
const
char
*
reason
)
int
git_worktree_lock
(
git_worktree
*
wt
,
const
char
*
reason
)
{
{
git_buf
buf
=
GIT_BUF_INIT
,
path
=
GIT_BUF_INIT
;
git_buf
buf
=
GIT_BUF_INIT
,
path
=
GIT_BUF_INIT
;
int
err
;
int
err
or
;
assert
(
wt
);
assert
(
wt
);
if
((
err
=
git_worktree_is_locked
(
NULL
,
wt
))
<
0
)
if
((
error
=
git_worktree_is_locked
(
NULL
,
wt
))
<
0
)
goto
out
;
if
(
error
)
{
error
=
GIT_ELOCKED
;
goto
out
;
goto
out
;
}
if
((
err
=
git_buf_joinpath
(
&
path
,
wt
->
gitdir_path
,
"locked"
))
<
0
)
if
((
err
or
=
git_buf_joinpath
(
&
path
,
wt
->
gitdir_path
,
"locked"
))
<
0
)
goto
out
;
goto
out
;
if
(
reason
)
if
(
reason
)
git_buf_attach_notowned
(
&
buf
,
reason
,
strlen
(
reason
));
git_buf_attach_notowned
(
&
buf
,
reason
,
strlen
(
reason
));
if
((
err
=
git_futils_writebuffer
(
&
buf
,
path
.
ptr
,
O_CREAT
|
O_EXCL
|
O_WRONLY
,
0644
))
<
0
)
if
((
err
or
=
git_futils_writebuffer
(
&
buf
,
path
.
ptr
,
O_CREAT
|
O_EXCL
|
O_WRONLY
,
0644
))
<
0
)
goto
out
;
goto
out
;
wt
->
locked
=
1
;
wt
->
locked
=
1
;
...
@@ -424,16 +431,19 @@ int git_worktree_lock(git_worktree *wt, const char *reason)
...
@@ -424,16 +431,19 @@ int git_worktree_lock(git_worktree *wt, const char *reason)
out:
out:
git_buf_dispose
(
&
path
);
git_buf_dispose
(
&
path
);
return
err
;
return
err
or
;
}
}
int
git_worktree_unlock
(
git_worktree
*
wt
)
int
git_worktree_unlock
(
git_worktree
*
wt
)
{
{
git_buf
path
=
GIT_BUF_INIT
;
git_buf
path
=
GIT_BUF_INIT
;
int
error
;
assert
(
wt
);
assert
(
wt
);
if
(
!
git_worktree_is_locked
(
NULL
,
wt
))
if
((
error
=
git_worktree_is_locked
(
NULL
,
wt
))
<
0
)
return
error
;
if
(
!
error
)
return
1
;
return
1
;
if
(
git_buf_joinpath
(
&
path
,
wt
->
gitdir_path
,
"locked"
)
<
0
)
if
(
git_buf_joinpath
(
&
path
,
wt
->
gitdir_path
,
"locked"
)
<
0
)
...
@@ -454,22 +464,25 @@ int git_worktree_unlock(git_worktree *wt)
...
@@ -454,22 +464,25 @@ int git_worktree_unlock(git_worktree *wt)
int
git_worktree_is_locked
(
git_buf
*
reason
,
const
git_worktree
*
wt
)
int
git_worktree_is_locked
(
git_buf
*
reason
,
const
git_worktree
*
wt
)
{
{
git_buf
path
=
GIT_BUF_INIT
;
git_buf
path
=
GIT_BUF_INIT
;
int
ret
;
int
error
,
locked
;
assert
(
wt
);
assert
(
wt
);
if
(
reason
)
if
(
reason
)
git_buf_clear
(
reason
);
git_buf_clear
(
reason
);
if
((
ret
=
git_buf_joinpath
(
&
path
,
wt
->
gitdir_path
,
"locked"
))
<
0
)
if
((
error
=
git_buf_joinpath
(
&
path
,
wt
->
gitdir_path
,
"locked"
))
<
0
)
goto
out
;
locked
=
git_path_exists
(
path
.
ptr
);
if
(
locked
&&
reason
&&
(
error
=
git_futils_readbuffer
(
reason
,
path
.
ptr
))
<
0
)
goto
out
;
goto
out
;
if
((
ret
=
git_path_exists
(
path
.
ptr
))
&&
reason
)
git_futils_readbuffer
(
reason
,
path
.
ptr
);
error
=
locked
;
out:
out:
git_buf_dispose
(
&
path
);
git_buf_dispose
(
&
path
);
return
ret
;
return
error
;
}
}
const
char
*
git_worktree_name
(
const
git_worktree
*
wt
)
const
char
*
git_worktree_name
(
const
git_worktree
*
wt
)
...
@@ -502,7 +515,6 @@ int git_worktree_pruneinit_options(git_worktree_prune_options *opts,
...
@@ -502,7 +515,6 @@ int git_worktree_pruneinit_options(git_worktree_prune_options *opts,
int
git_worktree_is_prunable
(
git_worktree
*
wt
,
int
git_worktree_is_prunable
(
git_worktree
*
wt
,
git_worktree_prune_options
*
opts
)
git_worktree_prune_options
*
opts
)
{
{
git_buf
reason
=
GIT_BUF_INIT
;
git_worktree_prune_options
popts
=
GIT_WORKTREE_PRUNE_OPTIONS_INIT
;
git_worktree_prune_options
popts
=
GIT_WORKTREE_PRUNE_OPTIONS_INIT
;
GIT_ERROR_CHECK_VERSION
(
GIT_ERROR_CHECK_VERSION
(
...
@@ -512,20 +524,24 @@ int git_worktree_is_prunable(git_worktree *wt,
...
@@ -512,20 +524,24 @@ int git_worktree_is_prunable(git_worktree *wt,
if
(
opts
)
if
(
opts
)
memcpy
(
&
popts
,
opts
,
sizeof
(
popts
));
memcpy
(
&
popts
,
opts
,
sizeof
(
popts
));
if
((
popts
.
flags
&
GIT_WORKTREE_PRUNE_LOCKED
)
==
0
&&
if
((
popts
.
flags
&
GIT_WORKTREE_PRUNE_LOCKED
)
==
0
)
{
git_worktree_is_locked
(
&
reason
,
wt
))
git_buf
reason
=
GIT_BUF_INIT
;
{
int
error
;
if
(
!
reason
.
size
)
git_buf_attach_notowned
(
&
reason
,
"no reason given"
,
15
);
git_error_set
(
GIT_ERROR_WORKTREE
,
"not pruning locked working tree: '%s'"
,
reason
.
ptr
);
git_buf_dispose
(
&
reason
);
return
0
;
if
((
error
=
git_worktree_is_locked
(
&
reason
,
wt
))
<
0
)
return
error
;
if
(
error
)
{
if
(
!
reason
.
size
)
git_buf_attach_notowned
(
&
reason
,
"no reason given"
,
15
);
git_error_set
(
GIT_ERROR_WORKTREE
,
"not pruning locked working tree: '%s'"
,
reason
.
ptr
);
git_buf_dispose
(
&
reason
);
return
0
;
}
}
}
if
((
popts
.
flags
&
GIT_WORKTREE_PRUNE_VALID
)
==
0
&&
if
((
popts
.
flags
&
GIT_WORKTREE_PRUNE_VALID
)
==
0
&&
git_worktree_validate
(
wt
)
==
0
)
git_worktree_validate
(
wt
)
==
0
)
{
{
git_error_set
(
GIT_ERROR_WORKTREE
,
"not pruning valid working tree"
);
git_error_set
(
GIT_ERROR_WORKTREE
,
"not pruning valid working tree"
);
return
0
;
return
0
;
}
}
...
...
tests/blame/blame_helpers.c
View file @
8aa04a37
...
@@ -31,13 +31,13 @@ void check_blame_hunk_index(git_repository *repo, git_blame *blame, int idx,
...
@@ -31,13 +31,13 @@ void check_blame_hunk_index(git_repository *repo, git_blame *blame, int idx,
}
}
if
(
hunk
->
final_start_line_number
!=
start_line
)
{
if
(
hunk
->
final_start_line_number
!=
start_line
)
{
hunk_message
(
idx
,
hunk
,
"mismatched start line number: expected %
d, got %d"
,
hunk_message
(
idx
,
hunk
,
"mismatched start line number: expected %
"
PRIuZ
", got %"
PRIuZ
,
start_line
,
hunk
->
final_start_line_number
);
start_line
,
hunk
->
final_start_line_number
);
}
}
cl_assert_equal_i
(
hunk
->
final_start_line_number
,
start_line
);
cl_assert_equal_i
(
hunk
->
final_start_line_number
,
start_line
);
if
(
hunk
->
lines_in_hunk
!=
len
)
{
if
(
hunk
->
lines_in_hunk
!=
len
)
{
hunk_message
(
idx
,
hunk
,
"mismatched line count: expected %
d, got %d"
,
hunk_message
(
idx
,
hunk
,
"mismatched line count: expected %
"
PRIuZ
", got %"
PRIuZ
,
len
,
hunk
->
lines_in_hunk
);
len
,
hunk
->
lines_in_hunk
);
}
}
cl_assert_equal_i
(
hunk
->
lines_in_hunk
,
len
);
cl_assert_equal_i
(
hunk
->
lines_in_hunk
,
len
);
...
...
tests/blame/blame_helpers.h
View file @
8aa04a37
#include "clar_libgit2.h"
#include "clar_libgit2.h"
#include "blame.h"
#include "blame.h"
void
hunk_message
(
size_t
idx
,
const
git_blame_hunk
*
hunk
,
const
char
*
fmt
,
...);
void
hunk_message
(
size_t
idx
,
const
git_blame_hunk
*
hunk
,
const
char
*
fmt
,
...)
GIT_FORMAT_PRINTF
(
3
,
4
)
;
void
check_blame_hunk_index
(
void
check_blame_hunk_index
(
git_repository
*
repo
,
git_repository
*
repo
,
...
...
tests/config/global.c
View file @
8aa04a37
...
@@ -81,7 +81,7 @@ void test_config_global__lock_missing_global_config(void)
...
@@ -81,7 +81,7 @@ void test_config_global__lock_missing_global_config(void)
git_config_entry
*
entry
;
git_config_entry
*
entry
;
git_transaction
*
transaction
;
git_transaction
*
transaction
;
p_unlink
(
"home/.gitconfig"
);
/* No global config */
(
void
)
p_unlink
(
"home/.gitconfig"
);
/* No global config */
cl_git_pass
(
git_config_open_default
(
&
cfg
));
cl_git_pass
(
git_config_open_default
(
&
cfg
));
cl_git_pass
(
git_config_lock
(
&
transaction
,
cfg
));
cl_git_pass
(
git_config_lock
(
&
transaction
,
cfg
));
...
...
tests/config/new.c
View file @
8aa04a37
...
@@ -30,5 +30,5 @@ void test_config_new__write_new_config(void)
...
@@ -30,5 +30,5 @@ void test_config_new__write_new_config(void)
git_buf_dispose
(
&
buf
);
git_buf_dispose
(
&
buf
);
git_config_free
(
config
);
git_config_free
(
config
);
p_unlink
(
TEST_CONFIG
);
cl_must_pass
(
p_unlink
(
TEST_CONFIG
)
);
}
}
tests/ignore/path.c
View file @
8aa04a37
...
@@ -255,7 +255,7 @@ void test_ignore_path__globs_without_star(void)
...
@@ -255,7 +255,7 @@ void test_ignore_path__globs_without_star(void)
void
test_ignore_path__skip_gitignore_directory
(
void
)
void
test_ignore_path__skip_gitignore_directory
(
void
)
{
{
cl_git_rewritefile
(
"attr/.git/info/exclude"
,
"/NewFolder
\n
/NewFolder/NewFolder"
);
cl_git_rewritefile
(
"attr/.git/info/exclude"
,
"/NewFolder
\n
/NewFolder/NewFolder"
);
p_unlink
(
"attr/.gitignore"
);
cl_must_pass
(
p_unlink
(
"attr/.gitignore"
)
);
cl_assert
(
!
git_path_exists
(
"attr/.gitignore"
));
cl_assert
(
!
git_path_exists
(
"attr/.gitignore"
));
p_mkdir
(
"attr/.gitignore"
,
0777
);
p_mkdir
(
"attr/.gitignore"
,
0777
);
cl_git_mkfile
(
"attr/.gitignore/garbage.txt"
,
"new_file
\n
"
);
cl_git_mkfile
(
"attr/.gitignore/garbage.txt"
,
"new_file
\n
"
);
...
@@ -268,12 +268,11 @@ void test_ignore_path__skip_gitignore_directory(void)
...
@@ -268,12 +268,11 @@ void test_ignore_path__skip_gitignore_directory(void)
void
test_ignore_path__subdirectory_gitignore
(
void
)
void
test_ignore_path__subdirectory_gitignore
(
void
)
{
{
p_unlink
(
"attr/.gitignore"
);
cl_must_pass
(
p_unlink
(
"attr/.gitignore"
)
);
cl_assert
(
!
git_path_exists
(
"attr/.gitignore"
));
cl_assert
(
!
git_path_exists
(
"attr/.gitignore"
));
cl_git_mkfile
(
cl_git_mkfile
(
"attr/.gitignore"
,
"attr/.gitignore"
,
"file1
\n
"
);
"file1
\n
"
);
p_mkdir
(
"attr/dir"
,
0777
);
cl_git_mkfile
(
cl_git_mkfile
(
"attr/dir/.gitignore"
,
"attr/dir/.gitignore"
,
"file2/
\n
"
);
"file2/
\n
"
);
...
...
tests/index/nsec.c
View file @
8aa04a37
...
@@ -54,7 +54,7 @@ static bool should_expect_nsecs(void)
...
@@ -54,7 +54,7 @@ static bool should_expect_nsecs(void)
expect
=
try_create_file_with_nsec_timestamp
(
nsec_path
.
ptr
);
expect
=
try_create_file_with_nsec_timestamp
(
nsec_path
.
ptr
);
p_unlink
(
nsec_path
.
ptr
);
cl_must_pass
(
p_unlink
(
nsec_path
.
ptr
)
);
git_buf_dispose
(
&
nsec_path
);
git_buf_dispose
(
&
nsec_path
);
...
...
tests/index/tests.c
View file @
8aa04a37
...
@@ -566,8 +566,7 @@ void test_index_tests__cannot_add_invalid_filename(void)
...
@@ -566,8 +566,7 @@ void test_index_tests__cannot_add_invalid_filename(void)
{
{
git_repository
*
repo
;
git_repository
*
repo
;
p_mkdir
(
"invalid"
,
0700
);
cl_must_pass
(
p_mkdir
(
"invalid"
,
0700
));
cl_git_pass
(
git_repository_init
(
&
repo
,
"./invalid"
,
0
));
cl_git_pass
(
git_repository_init
(
&
repo
,
"./invalid"
,
0
));
cl_must_pass
(
p_mkdir
(
"./invalid/subdir"
,
0777
));
cl_must_pass
(
p_mkdir
(
"./invalid/subdir"
,
0777
));
...
...
tests/network/refspecs.c
View file @
8aa04a37
...
@@ -153,7 +153,7 @@ static void assert_invalid_rtransform(const char *refspec, const char *name)
...
@@ -153,7 +153,7 @@ static void assert_invalid_rtransform(const char *refspec, const char *name)
git_refspec
spec
;
git_refspec
spec
;
git_buf
buf
=
GIT_BUF_INIT
;
git_buf
buf
=
GIT_BUF_INIT
;
git_refspec__parse
(
&
spec
,
refspec
,
true
);
cl_git_pass
(
git_refspec__parse
(
&
spec
,
refspec
,
true
)
);
cl_git_fail
(
git_refspec_rtransform
(
&
buf
,
&
spec
,
name
));
cl_git_fail
(
git_refspec_rtransform
(
&
buf
,
&
spec
,
name
));
git_buf_dispose
(
&
buf
);
git_buf_dispose
(
&
buf
);
...
...
tests/notes/notes.c
View file @
8aa04a37
...
@@ -400,15 +400,11 @@ void test_notes_notes__can_read_a_note_from_a_commit(void)
...
@@ -400,15 +400,11 @@ void test_notes_notes__can_read_a_note_from_a_commit(void)
git_note
*
note
;
git_note
*
note
;
cl_git_pass
(
git_oid_fromstr
(
&
oid
,
"4a202b346bb0fb0db7eff3cffeb3c70babbd2045"
));
cl_git_pass
(
git_oid_fromstr
(
&
oid
,
"4a202b346bb0fb0db7eff3cffeb3c70babbd2045"
));
cl_git_pass
(
git_note_commit_create
(
&
notes_commit_oid
,
NULL
,
_repo
,
NULL
,
_sig
,
_sig
,
&
oid
,
"I decorate 4a20
\n
"
,
1
));
cl_git_pass
(
git_note_commit_create
(
&
notes_commit_oid
,
NULL
,
_repo
,
NULL
,
_sig
,
_sig
,
&
oid
,
"I decorate 4a20
\n
"
,
1
));
cl_git_pass
(
git_commit_lookup
(
&
notes_commit
,
_repo
,
&
notes_commit_oid
));
git_commit_lookup
(
&
notes_commit
,
_repo
,
&
notes_commit_oid
);
cl_assert
(
notes_commit
);
cl_assert
(
notes_commit
);
cl_git_pass
(
git_note_commit_read
(
&
note
,
_repo
,
notes_commit
,
&
oid
));
cl_git_pass
(
git_note_commit_read
(
&
note
,
_repo
,
notes_commit
,
&
oid
));
cl_assert_equal_s
(
git_note_message
(
note
),
"I decorate 4a20
\n
"
);
cl_assert_equal_s
(
git_note_message
(
note
),
"I decorate 4a20
\n
"
);
git_commit_free
(
notes_commit
);
git_commit_free
(
notes_commit
);
...
@@ -457,7 +453,7 @@ void test_notes_notes__can_insert_a_note_in_an_existing_fanout(void)
...
@@ -457,7 +453,7 @@ void test_notes_notes__can_insert_a_note_in_an_existing_fanout(void)
git_note
*
_note
;
git_note
*
_note
;
cl_git_pass
(
git_oid_fromstr
(
&
target_oid
,
"08b041783f40edfe12bb406c9c9a8a040177c125"
));
cl_git_pass
(
git_oid_fromstr
(
&
target_oid
,
"08b041783f40edfe12bb406c9c9a8a040177c125"
));
for
(
i
=
0
;
i
<
MESSAGES_COUNT
;
i
++
)
{
for
(
i
=
0
;
i
<
MESSAGES_COUNT
;
i
++
)
{
cl_git_pass
(
git_note_create
(
&
note_oid
,
_repo
,
"refs/notes/fanout"
,
_sig
,
_sig
,
&
target_oid
,
messages
[
i
],
0
));
cl_git_pass
(
git_note_create
(
&
note_oid
,
_repo
,
"refs/notes/fanout"
,
_sig
,
_sig
,
&
target_oid
,
messages
[
i
],
0
));
cl_git_pass
(
git_note_read
(
&
_note
,
_repo
,
"refs/notes/fanout"
,
&
target_oid
));
cl_git_pass
(
git_note_read
(
&
_note
,
_repo
,
"refs/notes/fanout"
,
&
target_oid
));
...
@@ -511,7 +507,7 @@ void test_notes_notes__can_remove_a_note_from_commit(void)
...
@@ -511,7 +507,7 @@ void test_notes_notes__can_remove_a_note_from_commit(void)
cl_git_pass
(
git_note_commit_create
(
&
notes_commit_oid
,
NULL
,
_repo
,
NULL
,
_sig
,
_sig
,
&
oid
,
"I decorate 4a20
\n
"
,
0
));
cl_git_pass
(
git_note_commit_create
(
&
notes_commit_oid
,
NULL
,
_repo
,
NULL
,
_sig
,
_sig
,
&
oid
,
"I decorate 4a20
\n
"
,
0
));
git_commit_lookup
(
&
existing_notes_commit
,
_repo
,
&
notes_commit_oid
);
cl_git_pass
(
git_commit_lookup
(
&
existing_notes_commit
,
_repo
,
&
notes_commit_oid
)
);
cl_assert
(
existing_notes_commit
);
cl_assert
(
existing_notes_commit
);
...
@@ -547,7 +543,7 @@ void test_notes_notes__removing_a_note_which_doesnt_exists_returns_ENOTFOUND(voi
...
@@ -547,7 +543,7 @@ void test_notes_notes__removing_a_note_which_doesnt_exists_returns_ENOTFOUND(voi
cl_git_pass
(
git_oid_fromstr
(
&
target_oid
,
"8496071c1b46c854b31185ea97743be6a8774479"
));
cl_git_pass
(
git_oid_fromstr
(
&
target_oid
,
"8496071c1b46c854b31185ea97743be6a8774479"
));
cl_git_pass
(
git_note_remove
(
_repo
,
"refs/notes/fanout"
,
_sig
,
_sig
,
&
target_oid
));
cl_git_pass
(
git_note_remove
(
_repo
,
"refs/notes/fanout"
,
_sig
,
_sig
,
&
target_oid
));
error
=
git_note_remove
(
_repo
,
"refs/notes/fanout"
,
_sig
,
_sig
,
&
target_oid
);
error
=
git_note_remove
(
_repo
,
"refs/notes/fanout"
,
_sig
,
_sig
,
&
target_oid
);
cl_git_fail
(
error
);
cl_git_fail
(
error
);
cl_assert_equal_i
(
GIT_ENOTFOUND
,
error
);
cl_assert_equal_i
(
GIT_ENOTFOUND
,
error
);
...
...
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