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
5b09db15
Commit
5b09db15
authored
Sep 30, 2013
by
Vicent Martí
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1883 from libgit2/ntk/fix/empty_first_commit_line
Remove leading newlines from commit message
parents
e6a1d9a2
d27a441d
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
101 additions
and
86 deletions
+101
-86
src/commit.c
+1
-1
tests-clar/commit/parse.c
+100
-85
No files found.
src/commit.c
View file @
5b09db15
...
@@ -240,7 +240,7 @@ int git_commit__parse(void *_commit, git_odb_object *odb_obj)
...
@@ -240,7 +240,7 @@ int git_commit__parse(void *_commit, git_odb_object *odb_obj)
buffer_end
=
buffer
+
git_odb_object_size
(
odb_obj
);
buffer_end
=
buffer
+
git_odb_object_size
(
odb_obj
);
buffer
+=
header_len
;
buffer
+=
header_len
;
if
(
*
buffer
==
'\n'
)
while
(
buffer
<
buffer_end
&&
*
buffer
==
'\n'
)
++
buffer
;
++
buffer
;
/* extract commit message */
/* extract commit message */
...
...
tests-clar/commit/parse.c
View file @
5b09db15
...
@@ -7,77 +7,77 @@
...
@@ -7,77 +7,77 @@
static
git_repository
*
g_repo
;
static
git_repository
*
g_repo
;
void
test_commit_parse__initialize
(
void
)
void
test_commit_parse__initialize
(
void
)
{
{
g_repo
=
cl_git_sandbox_init
(
"testrepo"
);
g_repo
=
cl_git_sandbox_init
(
"testrepo"
);
}
}
void
test_commit_parse__cleanup
(
void
)
void
test_commit_parse__cleanup
(
void
)
{
{
cl_git_sandbox_cleanup
();
cl_git_sandbox_cleanup
();
}
}
// Header parsing
// Header parsing
typedef
struct
{
typedef
struct
{
const
char
*
line
;
const
char
*
line
;
const
char
*
header
;
const
char
*
header
;
}
parse_test_case
;
}
parse_test_case
;
static
parse_test_case
passing_header_cases
[]
=
{
static
parse_test_case
passing_header_cases
[]
=
{
{
"parent 05452d6349abcd67aa396dfb28660d765d8b2a36
\n
"
,
"parent "
},
{
"parent 05452d6349abcd67aa396dfb28660d765d8b2a36
\n
"
,
"parent "
},
{
"tree 05452d6349abcd67aa396dfb28660d765d8b2a36
\n
"
,
"tree "
},
{
"tree 05452d6349abcd67aa396dfb28660d765d8b2a36
\n
"
,
"tree "
},
{
"random_heading 05452d6349abcd67aa396dfb28660d765d8b2a36
\n
"
,
"random_heading "
},
{
"random_heading 05452d6349abcd67aa396dfb28660d765d8b2a36
\n
"
,
"random_heading "
},
{
"stuck_heading05452d6349abcd67aa396dfb28660d765d8b2a36
\n
"
,
"stuck_heading"
},
{
"stuck_heading05452d6349abcd67aa396dfb28660d765d8b2a36
\n
"
,
"stuck_heading"
},
{
"tree 5F4BEFFC0759261D015AA63A3A85613FF2F235DE
\n
"
,
"tree "
},
{
"tree 5F4BEFFC0759261D015AA63A3A85613FF2F235DE
\n
"
,
"tree "
},
{
"tree 1A669B8AB81B5EB7D9DB69562D34952A38A9B504
\n
"
,
"tree "
},
{
"tree 1A669B8AB81B5EB7D9DB69562D34952A38A9B504
\n
"
,
"tree "
},
{
"tree 5B20DCC6110FCC75D31C6CEDEBD7F43ECA65B503
\n
"
,
"tree "
},
{
"tree 5B20DCC6110FCC75D31C6CEDEBD7F43ECA65B503
\n
"
,
"tree "
},
{
"tree 173E7BF00EA5C33447E99E6C1255954A13026BE4
\n
"
,
"tree "
},
{
"tree 173E7BF00EA5C33447E99E6C1255954A13026BE4
\n
"
,
"tree "
},
{
NULL
,
NULL
}
{
NULL
,
NULL
}
};
};
static
parse_test_case
failing_header_cases
[]
=
{
static
parse_test_case
failing_header_cases
[]
=
{
{
"parent 05452d6349abcd67aa396dfb28660d765d8b2a36"
,
"parent "
},
{
"parent 05452d6349abcd67aa396dfb28660d765d8b2a36"
,
"parent "
},
{
"05452d6349abcd67aa396dfb28660d765d8b2a36
\n
"
,
"tree "
},
{
"05452d6349abcd67aa396dfb28660d765d8b2a36
\n
"
,
"tree "
},
{
"parent05452d6349abcd67aa396dfb28660d765d8b2a6a
\n
"
,
"parent "
},
{
"parent05452d6349abcd67aa396dfb28660d765d8b2a6a
\n
"
,
"parent "
},
{
"parent 05452d6349abcd67aa396dfb280d765d8b2a6
\n
"
,
"parent "
},
{
"parent 05452d6349abcd67aa396dfb280d765d8b2a6
\n
"
,
"parent "
},
{
"tree 05452d6349abcd67aa396dfb28660d765d8b2a36
\n
"
,
"tree "
},
{
"tree 05452d6349abcd67aa396dfb28660d765d8b2a36
\n
"
,
"tree "
},
{
"parent 0545xd6349abcd67aa396dfb28660d765d8b2a36
\n
"
,
"parent "
},
{
"parent 0545xd6349abcd67aa396dfb28660d765d8b2a36
\n
"
,
"parent "
},
{
"parent 0545xd6349abcd67aa396dfb28660d765d8b2a36FF
\n
"
,
"parent "
},
{
"parent 0545xd6349abcd67aa396dfb28660d765d8b2a36FF
\n
"
,
"parent "
},
{
""
,
"tree "
},
{
""
,
"tree "
},
{
""
,
""
},
{
""
,
""
},
{
NULL
,
NULL
}
{
NULL
,
NULL
}
};
};
void
test_commit_parse__header
(
void
)
void
test_commit_parse__header
(
void
)
{
{
git_oid
oid
;
git_oid
oid
;
parse_test_case
*
testcase
;
parse_test_case
*
testcase
;
for
(
testcase
=
passing_header_cases
;
testcase
->
line
!=
NULL
;
testcase
++
)
for
(
testcase
=
passing_header_cases
;
testcase
->
line
!=
NULL
;
testcase
++
)
{
{
const
char
*
line
=
testcase
->
line
;
const
char
*
line
=
testcase
->
line
;
const
char
*
line_end
=
line
+
strlen
(
line
);
const
char
*
line_end
=
line
+
strlen
(
line
);
cl_git_pass
(
git_oid__parse
(
&
oid
,
&
line
,
line_end
,
testcase
->
header
));
cl_git_pass
(
git_oid__parse
(
&
oid
,
&
line
,
line_end
,
testcase
->
header
));
cl_assert
(
line
==
line_end
);
cl_assert
(
line
==
line_end
);
}
}
for
(
testcase
=
failing_header_cases
;
testcase
->
line
!=
NULL
;
testcase
++
)
for
(
testcase
=
failing_header_cases
;
testcase
->
line
!=
NULL
;
testcase
++
)
{
{
const
char
*
line
=
testcase
->
line
;
const
char
*
line
=
testcase
->
line
;
const
char
*
line_end
=
line
+
strlen
(
line
);
const
char
*
line_end
=
line
+
strlen
(
line
);
cl_git_fail
(
git_oid__parse
(
&
oid
,
&
line
,
line_end
,
testcase
->
header
));
cl_git_fail
(
git_oid__parse
(
&
oid
,
&
line
,
line_end
,
testcase
->
header
));
}
}
}
}
// Signature parsing
// Signature parsing
typedef
struct
{
typedef
struct
{
const
char
*
string
;
const
char
*
string
;
const
char
*
header
;
const
char
*
header
;
const
char
*
name
;
const
char
*
name
;
const
char
*
email
;
const
char
*
email
;
git_time_t
time
;
git_time_t
time
;
int
offset
;
int
offset
;
}
passing_signature_test_case
;
}
passing_signature_test_case
;
passing_signature_test_case
passing_signature_cases
[]
=
{
passing_signature_test_case
passing_signature_cases
[]
=
{
...
@@ -122,12 +122,12 @@ passing_signature_test_case passing_signature_cases[] = {
...
@@ -122,12 +122,12 @@ passing_signature_test_case passing_signature_cases[] = {
{
"author Vicent Marti <tanoku@gmail.com> 4294967296
\n
"
,
"author "
,
"Vicent Marti"
,
"tanoku@gmail.com"
,
4294967296
,
0
},
{
"author Vicent Marti <tanoku@gmail.com> 4294967296
\n
"
,
"author "
,
"Vicent Marti"
,
"tanoku@gmail.com"
,
4294967296
,
0
},
{
"author Vicent Marti <tanoku@gmail.com> 8589934592
\n
"
,
"author "
,
"Vicent Marti"
,
"tanoku@gmail.com"
,
8589934592
,
0
},
{
"author Vicent Marti <tanoku@gmail.com> 8589934592
\n
"
,
"author "
,
"Vicent Marti"
,
"tanoku@gmail.com"
,
8589934592
,
0
},
{
NULL
,
NULL
,
NULL
,
NULL
,
0
,
0
}
{
NULL
,
NULL
,
NULL
,
NULL
,
0
,
0
}
};
};
typedef
struct
{
typedef
struct
{
const
char
*
string
;
const
char
*
string
;
const
char
*
header
;
const
char
*
header
;
}
failing_signature_test_case
;
}
failing_signature_test_case
;
failing_signature_test_case
failing_signature_cases
[]
=
{
failing_signature_test_case
failing_signature_cases
[]
=
{
...
@@ -143,31 +143,31 @@ failing_signature_test_case failing_signature_cases[] = {
...
@@ -143,31 +143,31 @@ failing_signature_test_case failing_signature_cases[] = {
void
test_commit_parse__signature
(
void
)
void
test_commit_parse__signature
(
void
)
{
{
passing_signature_test_case
*
passcase
;
passing_signature_test_case
*
passcase
;
failing_signature_test_case
*
failcase
;
failing_signature_test_case
*
failcase
;
for
(
passcase
=
passing_signature_cases
;
passcase
->
string
!=
NULL
;
passcase
++
)
for
(
passcase
=
passing_signature_cases
;
passcase
->
string
!=
NULL
;
passcase
++
)
{
{
const
char
*
str
=
passcase
->
string
;
const
char
*
str
=
passcase
->
string
;
size_t
len
=
strlen
(
passcase
->
string
);
size_t
len
=
strlen
(
passcase
->
string
);
struct
git_signature
person
=
{
0
};
struct
git_signature
person
=
{
0
};
cl_git_pass
(
git_signature__parse
(
&
person
,
&
str
,
str
+
len
,
passcase
->
header
,
'\n'
));
cl_git_pass
(
git_signature__parse
(
&
person
,
&
str
,
str
+
len
,
passcase
->
header
,
'\n'
));
cl_assert_equal_s
(
passcase
->
name
,
person
.
name
);
cl_assert_equal_s
(
passcase
->
name
,
person
.
name
);
cl_assert_equal_s
(
passcase
->
email
,
person
.
email
);
cl_assert_equal_s
(
passcase
->
email
,
person
.
email
);
cl_assert_equal_i
((
int
)
passcase
->
time
,
(
int
)
person
.
when
.
time
);
cl_assert_equal_i
((
int
)
passcase
->
time
,
(
int
)
person
.
when
.
time
);
cl_assert_equal_i
(
passcase
->
offset
,
person
.
when
.
offset
);
cl_assert_equal_i
(
passcase
->
offset
,
person
.
when
.
offset
);
git__free
(
person
.
name
);
git__free
(
person
.
email
);
git__free
(
person
.
name
);
git__free
(
person
.
email
);
}
}
for
(
failcase
=
failing_signature_cases
;
failcase
->
string
!=
NULL
;
failcase
++
)
for
(
failcase
=
failing_signature_cases
;
failcase
->
string
!=
NULL
;
failcase
++
)
{
{
const
char
*
str
=
failcase
->
string
;
const
char
*
str
=
failcase
->
string
;
size_t
len
=
strlen
(
failcase
->
string
);
size_t
len
=
strlen
(
failcase
->
string
);
git_signature
person
=
{
0
};
git_signature
person
=
{
0
};
cl_git_fail
(
git_signature__parse
(
&
person
,
&
str
,
str
+
len
,
failcase
->
header
,
'\n'
));
cl_git_fail
(
git_signature__parse
(
&
person
,
&
str
,
str
+
len
,
failcase
->
header
,
'\n'
));
git__free
(
person
.
name
);
git__free
(
person
.
email
);
git__free
(
person
.
name
);
git__free
(
person
.
email
);
}
}
}
}
...
@@ -312,17 +312,17 @@ void test_commit_parse__entire_commit(void)
...
@@ -312,17 +312,17 @@ void test_commit_parse__entire_commit(void)
// query the details on a parsed commit
// query the details on a parsed commit
void
test_commit_parse__details0
(
void
)
{
void
test_commit_parse__details0
(
void
)
{
static
const
char
*
commit_ids
[]
=
{
static
const
char
*
commit_ids
[]
=
{
"a4a7dce85cf63874e984719f4fdd239f5145052f"
,
/* 0 */
"a4a7dce85cf63874e984719f4fdd239f5145052f"
,
/* 0 */
"9fd738e8f7967c078dceed8190330fc8648ee56a"
,
/* 1 */
"9fd738e8f7967c078dceed8190330fc8648ee56a"
,
/* 1 */
"4a202b346bb0fb0db7eff3cffeb3c70babbd2045"
,
/* 2 */
"4a202b346bb0fb0db7eff3cffeb3c70babbd2045"
,
/* 2 */
"c47800c7266a2be04c571c04d5a6614691ea99bd"
,
/* 3 */
"c47800c7266a2be04c571c04d5a6614691ea99bd"
,
/* 3 */
"8496071c1b46c854b31185ea97743be6a8774479"
,
/* 4 */
"8496071c1b46c854b31185ea97743be6a8774479"
,
/* 4 */
"5b5b025afb0b4c913b4c338a42934a3863bf3644"
,
/* 5 */
"5b5b025afb0b4c913b4c338a42934a3863bf3644"
,
/* 5 */
"a65fedf39aefe402d3bb6e24df4d4f5fe4547750"
,
/* 6 */
"a65fedf39aefe402d3bb6e24df4d4f5fe4547750"
,
/* 6 */
};
};
const
size_t
commit_count
=
sizeof
(
commit_ids
)
/
sizeof
(
const
char
*
);
const
size_t
commit_count
=
sizeof
(
commit_ids
)
/
sizeof
(
const
char
*
);
unsigned
int
i
;
unsigned
int
i
;
for
(
i
=
0
;
i
<
commit_count
;
++
i
)
{
for
(
i
=
0
;
i
<
commit_count
;
++
i
)
{
git_oid
id
;
git_oid
id
;
...
@@ -349,7 +349,6 @@ void test_commit_parse__details0(void) {
...
@@ -349,7 +349,6 @@ void test_commit_parse__details0(void) {
cl_assert_equal_s
(
"Scott Chacon"
,
committer
->
name
);
cl_assert_equal_s
(
"Scott Chacon"
,
committer
->
name
);
cl_assert_equal_s
(
"schacon@gmail.com"
,
committer
->
email
);
cl_assert_equal_s
(
"schacon@gmail.com"
,
committer
->
email
);
cl_assert
(
message
!=
NULL
);
cl_assert
(
message
!=
NULL
);
cl_assert
(
strchr
(
message
,
'\n'
)
!=
NULL
);
cl_assert
(
commit_time
>
0
);
cl_assert
(
commit_time
>
0
);
cl_assert
(
parents
<=
2
);
cl_assert
(
parents
<=
2
);
for
(
p
=
0
;
p
<
parents
;
p
++
)
{
for
(
p
=
0
;
p
<
parents
;
p
++
)
{
...
@@ -382,9 +381,25 @@ committer Vicent Marti <tanoku@gmail.com> 1273848544 +0200\n\
...
@@ -382,9 +381,25 @@ committer Vicent Marti <tanoku@gmail.com> 1273848544 +0200\n\
\n
\
\n
\
This commit has a few LF at the start of the commit message"
;
This commit has a few LF at the start of the commit message"
;
const
char
*
message
=
const
char
*
message
=
"
\n
\
"This commit has a few LF at the start of the commit message"
;
cl_git_pass
(
parse_commit
(
&
commit
,
buffer
));
cl_assert_equal_s
(
message
,
git_commit_message
(
commit
));
git_commit__free
(
commit
);
}
void
test_commit_parse__only_lf
(
void
)
{
git_commit
*
commit
;
const
char
*
buffer
=
"tree 1810dff58d8a660512d4832e740f692884338ccd
\n
\
parent e90810b8df3e80c413d903f631643c716887138d
\n
\
author Vicent Marti <tanoku@gmail.com> 1273848544 +0200
\n
\
committer Vicent Marti <tanoku@gmail.com> 1273848544 +0200
\n
\
\n
\
\n
\
This commit has a few LF at the start of the commit message"
;
\n
\
\n
"
;
const
char
*
message
=
""
;
cl_git_pass
(
parse_commit
(
&
commit
,
buffer
));
cl_git_pass
(
parse_commit
(
&
commit
,
buffer
));
cl_assert_equal_s
(
message
,
git_commit_message
(
commit
));
cl_assert_equal_s
(
message
,
git_commit_message
(
commit
));
...
...
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