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
b05fbba3
Commit
b05fbba3
authored
Mar 17, 2018
by
Nika Layzell
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mailmap: Make everything a bit more style conforming
parent
939d8d57
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
113 additions
and
55 deletions
+113
-55
include/git2/mailmap.h
+31
-30
src/mailmap.c
+82
-25
No files found.
include/git2/mailmap.h
View file @
b05fbba3
...
...
@@ -8,7 +8,7 @@
#define INCLUDE_git_mailmap_h__
#include "common.h"
#include "t
ree
.h"
#include "t
ypes
.h"
/**
* @file git2/mailmap.h
...
...
@@ -19,24 +19,27 @@
*/
GIT_BEGIN_DECL
typedef
struct
git_mailmap
git_mailmap
;
/**
* A single entry parsed from a mailmap.
*/
typedef
struct
git_mailmap_entry
{
struct
git_mailmap_entry
{
unsigned
int
version
;
const
char
*
real_name
;
/**< the real name (may be NULL) */
const
char
*
real_email
;
/**< the real email (may be NULL) */
const
char
*
replace_name
;
/**< the name to replace (may be NULL) */
const
char
*
replace_email
;
/**< the email to replace */
}
git_mailmap_entry
;
};
#define GIT_MAILMAP_ENTRY_VERSION 1
#define GIT_MAILMAP_ENTRY_INIT {GIT_MAILMAP_ENTRY_VERSION}
/**
* Create a mailmap object by parsing a mailmap file.
*
* The mailmap must be freed with 'git_mailmap_free'.
*
* @param out
P
ointer to store the mailmap
* @param out
p
ointer to store the mailmap
* @param data raw data buffer to parse
* @param size size of the raw data buffer
* @return 0 on success
...
...
@@ -47,35 +50,26 @@ GIT_EXTERN(int) git_mailmap_parse(
size_t
size
);
/**
* Create a mailmap object
by parsing the ".mailmap" file in the tree root
.
* Create a mailmap object
from the given repository
.
*
* The mailmap must be freed with 'git_mailmap_free'.
* If the repository is not bare, the repository's working directory root will
* be checked for the '.mailmap' file to be parsed.
*
* @param out pointer to store the mailmap
* @param treeish root object that can be peeled to a tree
* @return 0 on success; GIT_ENOTFOUND if .mailmap does not exist.
*/
GIT_EXTERN
(
int
)
git_mailmap_from_tree
(
git_mailmap
**
out
,
const
git_object
*
treeish
);
/**
* Create a mailmap object by parsing the ".mailmap" file in the repository's
* HEAD's tree root.
* If the repository is bare, the repository's HEAD commit's tree root will be
* searched for the '.mailmap' file to be parsed.
*
* The mailmap must be freed with 'git_mailmap_free'.
*
* @param out pointer to store the mailmap
* @param repo repository to find the .mailmap in
* @return 0 on success; GIT_ENOTFOUND if .mailmap
does not exist
.
* @return 0 on success; GIT_ENOTFOUND if .mailmap
could not be found
.
*/
GIT_EXTERN
(
int
)
git_mailmap_from_repo
(
git_mailmap
**
out
,
git_repository
*
repo
);
/**
* Free a mailmap created by 'git_mailmap_parse', 'git_mailmap_from_tree' or
* 'git_mailmap_from_repo'.
* Free a mailmap created by 'git_mailmap_parse' or 'git_mailmap_from_repo'.
*/
GIT_EXTERN
(
void
)
git_mailmap_free
(
git_mailmap
*
mailmap
);
...
...
@@ -86,38 +80,45 @@ GIT_EXTERN(void) git_mailmap_free(git_mailmap *mailmap);
* You should NOT free this value.
* @param email_out either 'email' or the real email to use,
* You should NOT free this value.
* @param mailmap the mailmap to perform the lookup in.
* @param mailmap the mailmap to perform the lookup in.
(may be NULL)
* @param name the name to resolve.
* @param email the email to resolve.
*/
GIT_EXTERN
(
void
)
git_mailmap_resolve
(
const
char
**
name_out
,
const
char
**
email_out
,
git_mailmap
*
mailmap
,
const
git_mailmap
*
mailmap
,
const
char
*
name
,
const
char
*
email
);
/**
* Get the number of mailmap entries.
* Get the number of mailmap entries
in this mailmap
.
*/
GIT_EXTERN
(
size_t
)
git_mailmap_entry_count
(
git_mailmap
*
mailmap
);
GIT_EXTERN
(
size_t
)
git_mailmap_entry_count
(
const
git_mailmap
*
mailmap
);
/**
* Lookup a mailmap entry by index.
*
* Do not free the mailmap entry, it is owned by the mailmap.
*
* @return the mailmap entry at index, or NULL if it cannot be found.
*/
GIT_EXTERN
(
git_mailmap_entry
*
)
git_mailmap_entry_byindex
(
git_mailmap
*
mailmap
,
GIT_EXTERN
(
const
git_mailmap_entry
*
)
git_mailmap_entry_byindex
(
const
git_mailmap
*
mailmap
,
size_t
idx
);
/**
* Lookup a mailmap entry by name/email pair.
*
* Do not free the mailmap entry, it is owned by the mailmap.
*
* @param mailmap the mailmap to perform the lookup in. (may be NULL)
* @param name the name to perform the lookup with.
* @param email the email to perform the lookup with.
* @return the corresponding mailmap entry, or NULL if it cannot be found.
*/
GIT_EXTERN
(
git_mailmap_entry
*
)
git_mailmap_entry_lookup
(
git_mailmap
*
mailmap
,
GIT_EXTERN
(
const
git_mailmap_entry
*
)
git_mailmap_entry_lookup
(
const
git_mailmap
*
mailmap
,
const
char
*
name
,
const
char
*
email
);
...
...
src/mailmap.c
View file @
b05fbba3
...
...
@@ -135,7 +135,8 @@ static int git_mailmap_parse_single(
*
real_name
=
name_a
;
if
(
two_emails
)
{
*
real_email
=
email_a
;
if
(
email_a
.
len
>
0
)
*
real_email
=
email_a
;
*
replace_email
=
email_b
;
if
(
name_b
.
len
>
0
)
...
...
@@ -158,6 +159,9 @@ int git_mailmap_parse(
git_mailmap_entry
*
entry
=
NULL
;
int
error
=
0
;
if
(
memchr
(
data
,
'\0'
,
size
)
!=
NULL
)
return
-
1
;
/* data may not contain '\0's */
*
mailmap
=
git__calloc
(
1
,
sizeof
(
git_mailmap
));
if
(
!*
mailmap
)
return
-
1
;
...
...
@@ -194,6 +198,7 @@ int git_mailmap_parse(
error
=
-
1
;
goto
cleanup
;
}
entry
->
version
=
GIT_MAILMAP_ENTRY_VERSION
;
buf
=
(
char
*
)(
entry
+
1
);
entry
->
real_name
=
range_copyz
(
&
buf
,
NULL
,
real_name
);
...
...
@@ -209,9 +214,8 @@ int git_mailmap_parse(
}
cleanup:
if
(
entry
)
git__free
(
entry
);
if
(
error
<
0
&&
*
mailmap
)
{
git__free
(
entry
);
if
(
error
<
0
)
git_mailmap_free
(
*
mailmap
);
*
mailmap
=
NULL
;
}
...
...
@@ -220,6 +224,9 @@ cleanup:
void
git_mailmap_free
(
git_mailmap
*
mailmap
)
{
if
(
!
mailmap
)
return
;
git_vector_free_deep
(
&
mailmap
->
entries
);
git__free
(
mailmap
);
}
...
...
@@ -227,15 +234,19 @@ void git_mailmap_free(git_mailmap *mailmap)
void
git_mailmap_resolve
(
const
char
**
name_out
,
const
char
**
email_out
,
git_mailmap
*
mailmap
,
const
git_mailmap
*
mailmap
,
const
char
*
name
,
const
char
*
email
)
{
git_mailmap_entry
*
entry
=
NULL
;
const
git_mailmap_entry
*
entry
=
NULL
;
assert
(
name
&&
email
);
*
name_out
=
name
;
*
email_out
=
email
;
if
(
!
mailmap
)
return
;
entry
=
git_mailmap_entry_lookup
(
mailmap
,
name
,
email
);
if
(
entry
)
{
if
(
entry
->
real_name
)
...
...
@@ -245,14 +256,17 @@ void git_mailmap_resolve(
}
}
git_mailmap_entry
*
git_mailmap_entry_lookup
(
git_mailmap
*
mailmap
,
const
git_mailmap_entry
*
git_mailmap_entry_lookup
(
const
git_mailmap
*
mailmap
,
const
char
*
name
,
const
char
*
email
)
{
size_t
i
;
git_mailmap_entry
*
entry
;
assert
(
mailmap
&&
name
&&
email
);
assert
(
name
&&
email
);
if
(
!
mailmap
)
return
NULL
;
git_vector_foreach
(
&
mailmap
->
entries
,
i
,
entry
)
{
if
(
!
git__strcmp
(
email
,
entry
->
replace_email
)
&&
...
...
@@ -264,26 +278,42 @@ git_mailmap_entry *git_mailmap_entry_lookup(
return
NULL
;
}
git_mailmap_entry
*
git_mailmap_entry_byindex
(
git_mailmap
*
mailmap
,
size_t
idx
)
const
git_mailmap_entry
*
git_mailmap_entry_byindex
(
const
git_mailmap
*
mailmap
,
size_t
idx
)
{
return
git_vector_get
(
&
mailmap
->
entries
,
idx
);
if
(
mailmap
)
return
git_vector_get
(
&
mailmap
->
entries
,
idx
);
return
NULL
;
}
size_t
git_mailmap_entry_count
(
git_mailmap
*
mailmap
)
size_t
git_mailmap_entry_count
(
const
git_mailmap
*
mailmap
)
{
return
git_vector_length
(
&
mailmap
->
entries
);
if
(
mailmap
)
return
git_vector_length
(
&
mailmap
->
entries
);
return
0
;
}
int
git_mailmap_from_tree
(
static
int
git_mailmap_from_bare_repo
(
git_mailmap
**
mailmap
,
const
git_object
*
treeish
)
git_repository
*
repo
)
{
git_reference
*
head
=
NULL
;
git_object
*
tree
=
NULL
;
git_blob
*
blob
=
NULL
;
const
char
*
content
=
NULL
;
git_off_t
size
=
0
;
int
error
;
*
mailmap
=
NULL
;
assert
(
git_repository_is_bare
(
repo
));
/* In bare repositories, fall back to reading from HEAD's tree */
error
=
git_repository_head
(
&
head
,
repo
);
if
(
error
<
0
)
goto
cleanup
;
error
=
git_reference_peel
(
&
tree
,
head
,
GIT_OBJ_TREE
);
if
(
error
<
0
)
goto
cleanup
;
error
=
git_object_lookup_bypath
(
(
git_object
**
)
&
blob
,
...
...
@@ -297,28 +327,55 @@ int git_mailmap_from_tree(
size
=
git_blob_rawsize
(
blob
);
error
=
git_mailmap_parse
(
mailmap
,
content
,
size
);
if
(
error
<
0
)
goto
cleanup
;
cleanup
:
if
(
blob
!=
NULL
)
git_blob_free
(
blob
);
git_reference_free
(
head
);
git_object_free
(
tree
);
git_blob_free
(
blob
);
return
error
;
}
int
git_mailmap_from_repo
(
git_mailmap
**
mailmap
,
git_repository
*
repo
)
static
int
git_mailmap_from_workdir_repo
(
git_mailmap
**
mailmap
,
git_repository
*
repo
)
{
git_object
*
head
=
NULL
;
git_buf
path
=
GIT_BUF_INIT
;
git_buf
data
=
GIT_BUF_INIT
;
int
error
;
*
mailmap
=
NULL
;
assert
(
!
git_repository_is_bare
(
repo
))
;
error
=
git_revparse_single
(
&
head
,
repo
,
"HEAD"
);
/* In non-bare repositories, .mailmap should be read from the workdir */
error
=
git_buf_joinpath
(
&
path
,
git_repository_workdir
(
repo
),
".mailmap"
);
if
(
error
<
0
)
goto
cleanup
;
error
=
git_mailmap_from_tree
(
mailmap
,
head
);
error
=
git_futils_readbuffer
(
&
data
,
git_buf_cstr
(
&
path
));
if
(
error
<
0
)
goto
cleanup
;
error
=
git_mailmap_parse
(
mailmap
,
data
.
ptr
,
data
.
size
);
if
(
error
<
0
)
goto
cleanup
;
cleanup
:
if
(
head
)
git_object_free
(
head
);
git_buf_free
(
&
path
);
git_buf_free
(
&
data
);
return
error
;
}
int
git_mailmap_from_repo
(
git_mailmap
**
mailmap
,
git_repository
*
repo
)
{
assert
(
mailmap
&&
repo
);
*
mailmap
=
NULL
;
if
(
git_repository_is_bare
(
repo
))
return
git_mailmap_from_bare_repo
(
mailmap
,
repo
);
else
return
git_mailmap_from_workdir_repo
(
mailmap
,
repo
);
}
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